{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./assets/Square.png","webpack:///./assets/Hotspot_Done.svg","webpack:///./store/store.ts","webpack:///./actions/addHeaderBlocksToStateAction.ts","webpack:///./actions/rehydrate.ts","webpack:///./actions/setAPIErrorAction.ts","webpack:///./store/mirror.ts","webpack:///./actions/setBlocksLocalAction.ts","webpack:///./actions/setBlocksAction.ts","webpack:///./selectors/block.ts","webpack:///./services/apiHelpers/getCurrentTopic.ts","webpack:///./services/apiHelpers/getBlockById.ts","webpack:///./services/apiHelpers/getTopics.ts","webpack:///./services/apiHelpers/getInteractionsInTopic.ts","webpack:///./services/getTopicsNotHiddenFromNextAndBackNavigation.ts","webpack:///./services/apiHelpers/getAllInteractions.ts","webpack:///./services/apiHelpers/getAllAssessmentQuestions.ts","webpack:///./factories/utils.ts","webpack:///./factories/block.ts","webpack:///./factories/header.ts","webpack:///./actions/updateThemeHeadersAction.ts","webpack:///./factories/topic.ts","webpack:///./factories/scorm.ts","webpack:///./reducers/mirrorActive.ts","webpack:///./services/isAndroidSamsung.ts","webpack:///./services/isAppleComputerInc.ts","webpack:///./services/removeUndefinedEntriesFromObject.ts","webpack:///./factories/interactions/continueBtn.ts","webpack:///./reducers/preprocessModule.ts","webpack:///./reducers/updateInteractionsLocked.ts","webpack:///./reducers/addFeedBackData.ts","webpack:///./services/transformAssessmentsToAndFromSuspendData.ts","webpack:///./services/transformListBetweenIdSId.ts","webpack:///./store/localStore.ts","webpack:///./actions/setBlockAction.ts","webpack:///./actions/setBlockLocalAction.ts","webpack:///./factories/advancedediting.ts","webpack:///./factories/interactions/editableBtn.ts","webpack:///./factories/bookmark.ts","webpack:///./factories/modulehasaudiomessage.ts","webpack:///./actions/addAdvancedEditingBlocksToStateAction.ts","webpack:///./reducers/resetModule.ts","webpack:///./store/next.ts","webpack:///./factories/module.ts","webpack:///./reducers/addScormResponse.ts","webpack:///./reducers/focusBlock.ts","webpack:///./reducers/hideHeader.ts","webpack:///./reducers/loadBookmarkData.ts","webpack:///./reducers/loadSuspendData.ts","webpack:///./reducers/rehydrate.ts","webpack:///./reducers/rehydrateFromLMS.ts","webpack:///./reducers/removeBlock.ts","webpack:///./reducers/removeBlockLocal.ts","webpack:///./reducers/setActiveTopic.ts","webpack:///./reducers/setAPIError.ts","webpack:///./reducers/setBlock.ts","webpack:///./reducers/setBlocks.ts","webpack:///./reducers/setCurrentInteraction.ts","webpack:///./reducers/setError.ts","webpack:///./reducers/setExit.ts","webpack:///./reducers/setExitComplete.ts","webpack:///./reducers/setFonts.ts","webpack:///./reducers/setIsScrolling.ts","webpack:///./reducers/setLinks.ts","webpack:///./reducers/setProjectId.ts","webpack:///./reducers/setRootBlock.ts","webpack:///./reducers/setTheme.ts","webpack:///./reducers/setThemeId.ts","webpack:///./reducers/setTracker.ts","webpack:///./reducers/updateCourseTheme.ts","webpack:///./reducers/updateInteractionsOpen.ts","webpack:///./reducers/updateInteractionsSeen.ts","webpack:///./reducers/updateRecoloredChameleonImages.ts","webpack:///./reducers/updateScore.ts","webpack:///./reducers/updateScormSettigns.ts","webpack:///./reducers/updateUserPallete.ts","webpack:///./reducers/updateAssessment.ts","webpack:///./reducers/controlAudio.ts","webpack:///./reducers/audioAcknowledged.ts","webpack:///./reducers/addHeaderBlocksToState.ts","webpack:///./reducers/addAdvancedEditingBlocksToState.ts","webpack:///./reducers/updateModuleVariables.ts","webpack:///./reducers/updateLandingPageSeenState.ts","webpack:///./actions/preprocessModuleAction.ts","webpack:///./services/updateLegacyBlocksWithSId.ts","webpack:///./services/getStore.ts","webpack:///./styles/variables.ts","webpack:///./components/UI/EmptyBtn.tsx","webpack:///./components/UI/EditorBtn.tsx","webpack:///./components/errorHandler.tsx","webpack:///./services/pubSub/pubSub.ts","webpack:///./services/imageCache.ts","webpack:///./services/pubSub/getSubscriptions.ts","webpack:///./services/pubSub/usePubSub.ts","webpack:///./services/pubSub/index.ts","webpack:///./services/hexToRGB.ts","webpack:///./components/lib/PreLoaders/ModuleImagesPreloader.tsx","webpack:///./components/errorModal.tsx","webpack:///./services/apiHelpers/setCurrentBlock.ts","webpack:///./actions/focusBlockAction.ts","webpack:///./components/UI/EditMarker.tsx","webpack:///./services/getTopicSId.ts","webpack:///./services/getSectionInView.ts","webpack:///./services/getCurrentLocation.ts","webpack:///./components/UI/CloseBtn.tsx","webpack:///./services/useHeader.ts","webpack:///./components/TopicMenu/Menu.tsx","webpack:///./components/UI/VisuallyHidden.tsx","webpack:///./components/Header/BackBtn.tsx","webpack:///./services/apiHelpers/setCurrentTopic.ts","webpack:///./actions/setActiveTopicAction.ts","webpack:///./services/onScrollEnds.ts","webpack:///./components/Header/ProgressBar.tsx","webpack:///./components/Header_v2/HeaderLayout.tsx","webpack:///./components/Header/Header.tsx","webpack:///./components/Header/index.tsx","webpack:///./components/Header_v2/HeaderBackground.tsx","webpack:///./components/Header_v2/HeaderGraphic.tsx","webpack:///./services/getIsFirstInteraction.ts","webpack:///./components/Header_v2/Header_v2.tsx","webpack:///./components/Layouts/AudioPlayer.tsx","webpack:///./actions/setCurrentInteractionAction.ts","webpack:///./theme.ts","webpack:///./actions/updateScoreAction.ts","webpack:///./hosting/context.tsx","webpack:///./services/scorm/API.ts","webpack:///./components/lib/Scorm/SCORMToCollect.ts","webpack:///./services/transformScoreData.ts","webpack:///./components/lib/Scorm/SCORM.tsx","webpack:///./services/apiHelpers/getAssessments.ts","webpack:///./actions/setExitCompleteAction.ts","webpack:///./actions/updateAssessmentAction.ts","webpack:///./services/useCachedResource.ts","webpack:///./components/Module/AssessmentContainer.tsx","webpack:///./services/isIE.ts","webpack:///./services/ie11VerticalFlexCenterFix.ts","webpack:///./services/replaceWithPolyfill.js","webpack:///./services/updateReadOnlyText.ts","webpack:///./factories/interactions/interaction.ts","webpack:///./factories/layout.ts","webpack:///./factories/interactions/media.ts","webpack:///./factories/interactions/accordion.ts","webpack:///./factories/interactions/flipcard.ts","webpack:///./factories/interactions/image.ts","webpack:///./factories/interactions/carousel.ts","webpack:///./factories/interactions/feedback.ts","webpack:///./factories/interactions/multichoice.ts","webpack:///./factories/interactions/sortation.ts","webpack:///./factories/interactions/modalWithEditableBtn.ts","webpack:///./factories/interactions/draganddrop.ts","webpack:///./factories/interactions/matching_v2.ts","webpack:///./factories/interactions/hotspot_isolated.ts","webpack:///./factories/interactions/hotspot.ts","webpack:///./factories/interactions/fivestarrating.ts","webpack:///./factories/interactions/resultspage.ts","webpack:///./factories/interactions/clickandreveal.ts","webpack:///./factories/interactions/topicportal.ts","webpack:///./factories/interactions/assessmentintroduction.ts","webpack:///./factories/interactions/assessmentquestion.ts","webpack:///./factories/interactions/assessmentresults.ts","webpack:///./factories/interactions/contentcard.ts","webpack:///./factories/interactions/selectoptions.ts","webpack:///./factories/interactions/slider.ts","webpack:///./factories/interactions/certificate.ts","webpack:///./components/Editor/NewSectionWizard/createInteraction.ts","webpack:///./factories/interactions/fullpagetext.ts","webpack:///./factories/interactions/textentryvariable.ts","webpack:///./factories/interactions/textentryquiz.ts","webpack:///./factories/interactions/assessment.ts","webpack:///./components/Layouts/Wrapper.tsx","webpack:///./components/Layouts/HiddenBackButton.tsx","webpack:///./components/Layouts/Background.tsx","webpack:///./components/Layouts/next.ts","webpack:///./actions/updateInteractionsOpenAction.ts","webpack:///./components/Layouts/headingsStyles.ts","webpack:///./services/getScrollBarWidth.ts","webpack:///./components/Layouts/MenuContainer.tsx","webpack:///./actions/controlAudioAction.ts","webpack:///./components/Editor/EditorUtilities/UI/Bubble.tsx","webpack:///./components/NavigationSettings/ModuleNavigation.tsx","webpack:///./components/Layouts/buttonLayouts.ts","webpack:///./styles/updateGlobalFontStylesFromTheme.ts","webpack:///./services/getWebGLEnabled.ts","webpack:///./components/Module/Orbs.tsx","webpack:///./components/Layouts/ContainerLogical.tsx","webpack:///./services/killAllAudio.ts","webpack:///./components/UI/Modal.tsx","webpack:///./services/isIOSSafari.ts","webpack:///./services/apiHelpers/renderBlock.tsx","webpack:///./components/lib/EditableText/serializer.tsx","webpack:///./components/lib/EditableText/renderMark.tsx","webpack:///./components/lib/EditableText/renderNode.tsx","webpack:///./components/lib/EditableText/renderInline.tsx","webpack:///./services/apiHelpers/setBlockProps.ts","webpack:///./components/lib/EditableText/bulletStyles.ts","webpack:///./components/lib/EditableText/TextToSpeech.tsx","webpack:///./services/speechSynthesisCancel.ts","webpack:///./services/isiOS.ts","webpack:///./services/apiHelpers/getActiveBlocks.ts","webpack:///./services/scoring.ts","webpack:///./services/getScoreDataFromScoringBlocks.ts","webpack:///./components/lib/EditableText/ReadOnlyText.tsx","webpack:///./components/lib/EditableText/EditableText.tsx","webpack:///./components/lib/EditableText/index.tsx","webpack:///./components/lib/Buttons/getBaseButtonStyles.ts","webpack:///./components/lib/Buttons/buttonHelpers.ts","webpack:///./services/hasValidLocationUpdated.ts","webpack:///./components/lib/Buttons/NavigationButton.tsx","webpack:///./components/lib/Buttons/GenericButton.tsx","webpack:///./components/lib/EditableBtn/index.tsx","webpack:///./components/lib/Image/EditWrappers.tsx","webpack:///./components/UI/LoadingSpinner/LoadingSpinner.tsx","webpack:///./components/UI/LoadingSpinner/index.tsx","webpack:///./services/checkImgSrcIsGif.ts","webpack:///./hooks/useImageLoader.tsx","webpack:///./components/lib/Image/Circle.tsx","webpack:///./components/lib/Image/ImageZoom.tsx","webpack:///./components/lib/Image/Image.tsx","webpack:///./components/lib/Image/imgPlaceholders.ts","webpack:///./components/lib/Image/index.tsx","webpack:///./components/Module/Bookmark.tsx","webpack:///./services/clearLocationHistory.ts","webpack:///./components/Module/Fonts.tsx","webpack:///./components/lib/EmptySection/EmptySection.tsx","webpack:///./components/lib/EmptySection/index.tsx","webpack:///./components/UI/Arrow.tsx","webpack:///./services/unlockInteraction.ts","webpack:///./components/lib/Accordion/interactionContext.ts","webpack:///./components/lib/Accordion/Accordion.tsx","webpack:///./components/lib/ContinueBtn/DButton.tsx","webpack:///./services/findByKeyVal.ts","webpack:///./components/Editor/EditorUtilities/UI/LastPageMessage.tsx","webpack:///./components/lib/ContinueBtn/continueBtn_v2.tsx","webpack:///./components/lib/TextAndImage/interactionContext.ts","webpack:///./hooks/useIntersectionObserver.ts","webpack:///./components/lib/Video/Transcript.tsx","webpack:///./components/lib/Video/Video.tsx","webpack:///./components/lib/Video/index.tsx","webpack:///./components/lib/Audio/Transcript.tsx","webpack:///./assets/animations/headphonesWoman.js","webpack:///./components/lib/Audio/Audio.tsx","webpack:///./components/lib/Audio/index.tsx","webpack:///./components/lib/SVG/EditWrappers.tsx","webpack:///./assets/animations/placeholder.js","webpack:///./components/lib/SVG/index.tsx","webpack:///./components/lib/SVG/SVG.tsx","webpack:///./components/lib/Media/Media.tsx","webpack:///./components/lib/Media/index.tsx","webpack:///./services/shouldUpdate.ts","webpack:///./components/lib/Embed/EditWrappers.tsx","webpack:///./actions/hideHeaderAction.ts","webpack:///./components/lib/Embed/Embed.tsx","webpack:///./components/lib/Embed/index.tsx","webpack:///./components/lib/PDF/EditWrappers.tsx","webpack:///./components/lib/PDF/PDF.tsx","webpack:///./components/lib/PDF/index.tsx","webpack:///./components/lib/PDF/OpenPDF.tsx","webpack:///./components/lib/Accordion/AccordionDisplay_v2.tsx","webpack:///./components/lib/Carousel/swipeGesture.ts","webpack:///./components/lib/Accordion/index.tsx","webpack:///./components/lib/Carousel/CarouselBtn.tsx","webpack:///./components/lib/Carousel/CarouselMarker.tsx","webpack:///./components/lib/Carousel/interactionContext.ts","webpack:///./services/isEDGE.ts","webpack:///./components/lib/Carousel/CarouselLayout.tsx","webpack:///./components/lib/Carousel/Carousel.tsx","webpack:///./components/lib/Carousel/CarouselSlide.tsx","webpack:///./components/lib/Carousel/CarouselDisplay.tsx","webpack:///./components/lib/Carousel/index.tsx","webpack:///./components/lib/FlipCard/interactionContext.ts","webpack:///./components/lib/FlipCard/Flipcards_v2.tsx","webpack:///./services/checkReturnToInteractionEditing.ts","webpack:///./styles/headingStylesForPanelsAndCards.ts","webpack:///./components/lib/FlipCard/Face.tsx","webpack:///./components/lib/FlipCard/Flipcard_v2.tsx","webpack:///./components/lib/FlipCard/FlipCardDisplay_v2.tsx","webpack:///./components/lib/FlipCard/index.tsx","webpack:///./components/lib/FullPageText/interactionContext.ts","webpack:///./components/lib/FullPageText/TermsAndConditions.tsx","webpack:///./components/lib/FullPageText/FullPageText.tsx","webpack:///./components/lib/FullPageText/FullPageTextDisplay.tsx","webpack:///./components/lib/FullPageText/index.tsx","webpack:///./actions/addScormResponseAction.ts","webpack:///./components/lib/Feedback/Feedback.tsx","webpack:///./components/lib/Feedback/FeedbackWithEditableBtn.tsx","webpack:///./components/lib/Feedback/index.tsx","webpack:///./services/apiHelpers/useScoringQuizzes.ts","webpack:///./components/lib/Multichoice/interactionContext.ts","webpack:///./components/lib/Multichoice/Multichoice_v2.tsx","webpack:///./services/scorm/scormService.ts","webpack:///./components/lib/Multichoice/Radio.tsx","webpack:///./components/lib/Multichoice/Answer.tsx","webpack:///./components/lib/Multichoice/MultichoiceDisplay_v2.tsx","webpack:///./components/lib/Multichoice/index.tsx","webpack:///./components/lib/MultichoiceImage/interactionContext.ts","webpack:///./services/apiHelpers/setNewBlockNewTree.ts","webpack:///./hooks/useSetState.ts","webpack:///./components/UI/ColorPicker/Dot.tsx","webpack:///./actions/setErrorAction.ts","webpack:///./actions/updateUserPaletteAction.ts","webpack:///./components/UI/AddRemoveBtn.tsx","webpack:///./components/UI/ColorPicker/UserPalette.tsx","webpack:///./components/lib/MultichoiceImage/MultichoiceImage.tsx","webpack:///./components/Editor/EditMultichoiceImage/EditMultichoiceImage.tsx","webpack:///./components/Layouts/IELayout.tsx","webpack:///./components/lib/MultichoiceImage/Answer.tsx","webpack:///./components/lib/MultichoiceImage/SubmitBtn.tsx","webpack:///./components/lib/Feedback/Feedback_updated_022022.tsx","webpack:///./components/lib/MultichoiceImage/MultichoiceImageDisplay.tsx","webpack:///./components/lib/MultichoiceImage/index.tsx","webpack:///./components/lib/Sortation/interactionContext.ts","webpack:///./services/apiHelpers/getBlocksByType.ts","webpack:///./components/lib/Sortation/Option.tsx","webpack:///./services/rgbaFromHexAndOpacity.ts","webpack:///./components/lib/Sortation/Sortation.tsx","webpack:///./components/lib/Sortation/SortationHeading.tsx","webpack:///./components/lib/Sortation/SortationDisplay_v2.tsx","webpack:///./components/lib/Sortation/SortableImage.tsx","webpack:///./components/lib/Sortation/index.tsx","webpack:///./components/lib/Slider/interactionContext.ts","webpack:///./components/lib/Slider/Slider.tsx","webpack:///./components/lib/Slider/SliderDisplay.tsx","webpack:///./components/lib/Slider/index.tsx","webpack:///./components/lib/Matching/interactionContext.ts","webpack:///./components/lib/Matching/Feedback.tsx","webpack:///./components/lib/Matching/LayoutResponsiveContainer.tsx","webpack:///./components/lib/Matching/screenReader.ts","webpack:///./components/lib/Matching/Layout_v2.tsx","webpack:///./components/lib/Matching/ReRenderedFeedback.tsx","webpack:///./components/lib/Matching/Matching_v2.tsx","webpack:///./services/apiHelpers/getMediaParent.ts","webpack:///./components/lib/Matching/MatchDrag.tsx","webpack:///./components/lib/Matching/MatchDrop.tsx","webpack:///./components/lib/Matching/MatchingDisplay.tsx","webpack:///./components/lib/Matching/index.tsx","webpack:///./components/lib/TextAndImage/MultiMediaDisplay.tsx","webpack:///./components/lib/TextAndImage/index.tsx","webpack:///./components/lib/HotSpot/interactionContext.ts","webpack:///./components/lib/HotSpot/EditWrapper.tsx","webpack:///./components/lib/HotSpot/Feedback.tsx","webpack:///./components/lib/HotSpot/HotSpotTickedWhenSeen.tsx","webpack:///./components/lib/HotSpot/VisibleHotSpot.tsx","webpack:///./components/lib/HotSpot/Polygon.tsx","webpack:///./components/Editor/editorContext.ts","webpack:///./components/Editor/SetMediaType/SetMediaType.tsx","webpack:///./components/Editor/EditImage/ImageLibrary/variables.ts","webpack:///./components/UI/FileUploader/FileUploader.tsx","webpack:///./services/getSVGSize.ts","webpack:///./components/Editor/EditImage/ImageLibrary/YourLibrary/YourImagePreviewPanel.tsx","webpack:///./components/Editor/EditImage/ImageLibrary/YourLibrary/YourImagePreview.tsx","webpack:///./components/Editor/EditImage/ImageLibrary/YourLibrary/YourLibrary.tsx","webpack:///./components/Editor/EditImage/ImageLibrary/ChameleonsLibrary/SVGPreview.tsx","webpack:///./components/Editor/EditImage/ImageLibrary/ChameleonsLibrary/ChameleonsLibrary.tsx","webpack:///./services/isFeatureEnabled.ts","webpack:///./components/Editor/EditImage/EditImage.tsx","webpack:///./components/Editor/EditHotSpotIsolated/EditHotSpotIsolated_v2.tsx","webpack:///./components/lib/HotSpot/Rectangle.tsx","webpack:///./components/lib/HotSpot/HotSpotScorable.tsx","webpack:///./components/lib/HotSpot/onMouseDown.ts","webpack:///./components/lib/HotSpot/onMouseMove.ts","webpack:///./components/lib/HotSpot/onMouseUp.ts","webpack:///./components/lib/HotSpot/onClick.ts","webpack:///./components/lib/HotSpot/HotSpot.tsx","webpack:///./components/lib/HotSpot/useHotSpotTransformOldToNew.ts","webpack:///./components/lib/HotSpot/getMouseEvents.ts","webpack:///./services/lastCharInStringIsPeriod.ts","webpack:///./components/lib/HotSpot/HotSpotDisplay.tsx","webpack:///./components/lib/HotSpot/index.tsx","webpack:///./components/lib/FiveStarRating/interactionContext.ts","webpack:///./components/lib/FiveStarRating/Message.tsx","webpack:///./components/UI/TextEntry.tsx","webpack:///./components/lib/FiveStarRating/FiveStarRating_v2.tsx","webpack:///./components/lib/FiveStarRating/FiveStarList.tsx","webpack:///./components/lib/FiveStarRating/Heart.tsx","webpack:///./components/lib/FiveStarRating/Diamond.tsx","webpack:///./components/lib/FiveStarRating/Smiley.tsx","webpack:///./components/lib/FiveStarRating/Star.tsx","webpack:///./components/lib/FiveStarRating/SubmitBtn.tsx","webpack:///./components/lib/FiveStarRating/FiveStarRatingDisplay_v2.tsx","webpack:///./components/lib/FiveStarRating/FeedbackSubmittedEditable.tsx","webpack:///./components/lib/FiveStarRating/index.tsx","webpack:///./components/lib/ResultsPage/interactionContext.ts","webpack:///./components/lib/ResultsPage/ResultsPageContent.tsx","webpack:///./components/lib/ResultsPage/ResultsPageMedia.tsx","webpack:///./components/lib/ResultsPage/GraphCircle.tsx","webpack:///./components/lib/ResultsPage/GraphBar.tsx","webpack:///./components/lib/ResultsPage/ResultsPageResult.tsx","webpack:///./components/lib/ResultsPage/ResultsPageDisplay.tsx","webpack:///./components/lib/ResultsPage/index.tsx","webpack:///./components/lib/ClickAndReveal/interactionContext.ts","webpack:///./components/lib/ClickAndReveal/ClickAndReveals.tsx","webpack:///./components/lib/ClickAndReveal/ClickAndReveal.tsx","webpack:///./components/lib/ClickAndReveal/ClickAndRevealContent.tsx","webpack:///./components/lib/ClickAndReveal/ClickAndRevealDisplay.tsx","webpack:///./components/lib/ClickAndReveal/index.tsx","webpack:///./components/lib/ContentCard/interactionContext.ts","webpack:///./components/lib/ContentCard/EditCardWrapper.tsx","webpack:///./services/arrayToGridLike.ts","webpack:///./components/lib/ContentCard/Masonry.tsx","webpack:///./components/lib/ContentCard/grids.tsx","webpack:///./components/lib/ContentCard/ContentCards.tsx","webpack:///./components/lib/ContentCard/ContentCard.tsx","webpack:///./components/lib/ContentCard/ContentCardDisplay.tsx","webpack:///./components/lib/ContentCard/index.tsx","webpack:///./components/lib/SelectOptions/interactionContext.ts","webpack:///./components/lib/SelectOptions/onSubmit.ts","webpack:///./components/lib/SelectOptions/SelectOptionsRoot.tsx","webpack:///./components/lib/SelectOptions/SelectOptions.tsx","webpack:///./components/lib/SelectOptions/SelectOption.tsx","webpack:///./components/lib/SelectOptions/SelectOptionsDisplay.tsx","webpack:///./components/lib/SelectOptions/index.tsx","webpack:///./components/lib/TopicPortal/interactionContext.ts","webpack:///./components/lib/TopicPortal/TopicIcon.tsx","webpack:///./components/lib/TopicPortal/TopicPanel.tsx","webpack:///./services/apiHelpers/getTopicsComplete.ts","webpack:///./components/lib/TopicPortal/updateTopicPortalMedia.ts","webpack:///./components/lib/TopicPortal/TopicPortalContainer.tsx","webpack:///./components/lib/TopicPortal/TopicPortalDisplay.tsx","webpack:///./components/lib/TopicPortal/index.tsx","webpack:///./components/lib/TextEntry/SubmitBtn.tsx","webpack:///./components/lib/TextEntry/interactionContext.ts","webpack:///./components/lib/TextEntry/TextEntry.tsx","webpack:///./services/submitToCollect.ts","webpack:///./components/lib/TextEntry/TextEntryDisplay.tsx","webpack:///./components/lib/TextEntry/index.tsx","webpack:///./components/lib/TextEntryVariable/SubmitBtn.tsx","webpack:///./components/lib/TextEntryVariable/interactionContext.ts","webpack:///./components/UI/TextAreaDynamicHeight.tsx","webpack:///./components/lib/TextEntryVariable/TextEntryVariable.tsx","webpack:///./components/lib/TextEntryVariable/TextEntryVariableDisplay.tsx","webpack:///./components/lib/TextEntryQuiz/TextEntryQuiz.tsx","webpack:///./components/lib/TextEntryVariable/index.tsx","webpack:///./components/lib/TextEntryQuiz/interactionContext.ts","webpack:///./components/lib/TextEntryQuiz/TextEntryQuizDisplay.tsx","webpack:///./components/lib/TextEntryQuiz/index.tsx","webpack:///./components/lib/Assessment/interactionContext.ts","webpack:///./components/lib/Assessment/Assessment.tsx","webpack:///./components/lib/Assessment/AssessmentIntroduction.tsx","webpack:///./components/lib/Assessment/AssessmentQuestion.tsx","webpack:///./components/lib/Assessment/AssessmentResults.tsx","webpack:///./components/lib/Assessment/AssessmentDisplay.tsx","webpack:///./components/lib/Assessment/index.tsx","webpack:///./components/lib/AssessmentIntroduction/interactionContext.ts","webpack:///./components/lib/AssessmentIntroduction/AssessmentIntroduction.tsx","webpack:///./components/lib/AssessmentIntroduction/AssessmentIntroductionDisplay.tsx","webpack:///./components/lib/AssessmentIntroduction/index.tsx","webpack:///./components/lib/AssessmentQuestion/interactionContext.ts","webpack:///./components/lib/AssessmentQuestion/SubmitContinue.tsx","webpack:///./components/lib/AssessmentQuestion/AssessmentQuestion.tsx","webpack:///./components/lib/AssessmentQuestion/AssessmentQuestionOption.tsx","webpack:///./components/lib/AssessmentQuestion/AssessmentQuestionOptions.tsx","webpack:///./components/lib/AssessmentQuestion/AssessmentQuestionDisplay.tsx","webpack:///./components/lib/AssessmentQuestion/index.tsx","webpack:///./components/lib/AssessmentResults/interactionContext.ts","webpack:///./components/UI/AssessmentCorrect.tsx","webpack:///./components/UI/AssessmentIncorrect.tsx","webpack:///./components/lib/AssessmentResults/ScoreBar.tsx","webpack:///./components/lib/AssessmentResults/Button.tsx","webpack:///./components/lib/AssessmentResults/AssessmentResults.tsx","webpack:///./components/lib/AssessmentResults/getQuestionsInAssessment.tsx","webpack:///./components/lib/AssessmentResults/getAttempt.ts","webpack:///./components/lib/AssessmentResults/unlockAssessment.ts","webpack:///./components/lib/AssessmentResults/RetryAssessment.tsx","webpack:///./components/lib/AssessmentResults/FeedbackPassed.tsx","webpack:///./components/lib/AssessmentResults/FeedbackFailed.tsx","webpack:///./components/lib/AssessmentResults/ContinueButtonBranching.tsx","webpack:///./components/lib/AssessmentResults/AssessmentResultsDisplay.tsx","webpack:///./components/lib/AssessmentResults/index.tsx","webpack:///./components/lib/Certificate/interactionContext.ts","webpack:///./components/lib/Certificate/Handles.tsx","webpack:///./components/lib/Certificate/generatePDF.ts","webpack:///./components/lib/Certificate/Certificate_1_SVG.tsx","webpack:///./components/lib/Certificate/Certificate_2_SVG.tsx","webpack:///./components/lib/Certificate/Certificate_3_SVG.tsx","webpack:///./components/lib/Certificate/InputText.tsx","webpack:///./components/lib/Certificate/CertificateTemplates.tsx","webpack:///./components/lib/Certificate/Certificate.tsx","webpack:///./components/lib/Certificate/CertificateDisplay.tsx","webpack:///./components/Module/Interactions_Editor.tsx","webpack:///./components/Module/Interactions_Module.tsx","webpack:///./components/Module/ModuleHasAudioMessage.tsx","webpack:///./components/Module/TopicContainer.tsx","webpack:///./services/reviewToolPostMessage.ts","webpack:///./services/getModuleIsFreeScrolling.ts","webpack:///./components/Module/windowScrollInfo.ts","webpack:///./components/Module/ReadsHostingContext.tsx","webpack:///./components/Module/Module_v2.tsx","webpack:///./components/Module/index.tsx","webpack:///./actions/setExitAction.ts","webpack:///./components/Module/navLoadingIndicator.ts","webpack:///./services/apiHelpers/setCurrentInteraction.ts","webpack:///./services/fontService/fonts.ts","webpack:///./services/fontService/allGoogleFonts.ts","webpack:///./services/fontService/parseFontUrl.ts","webpack:///./components/lib/BootScreen/BootScreen.tsx","webpack:///./services/fontService/fontService.ts","webpack:///./services/getModuleImages.ts","webpack:///./styles/global.ts","webpack:///./styles/flipCard.styles.ts","webpack:///./styles/matching.styles.ts","webpack:///./styles/clickAndReveal.styles.ts","webpack:///./styles/la-ball-pulse.ts","webpack:///./module.tsx","webpack:///./assets/Correct_loop.gif","webpack:///./assets/Incorrect_loop.gif","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/module.js","webpack:///./assets/Image.svg","webpack:///./assets/CloseFullscreenEmbed.svg","webpack:///./assets/CC_Sortation_Placeholder.png","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/core/index.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/core/box.js","webpack:///./assets/Logo_updated.svg","webpack:///./assets/Character A.png","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/index.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/core/flexbox.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/core/text.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/hooks/useSidebar.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/navbarContext.js","webpack:///./assets/Plus.svg","webpack:///./assets/addImg@3x.svg","webpack:///./assets/Video.svg","webpack:///./assets/Embed.svg","webpack:///./assets/FullScreenIcon.svg","webpack:///./assets/PDF_smallIcon.svg","webpack:///./assets/tick_mint.svg","webpack:///./assets/Audio.png","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/utils/render.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/carousel.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/interaction.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/navItem.js","webpack:///./assets/new_graphic_banner_default.png","webpack:///./assets/chameleon_icon_white.svg","webpack:///./assets/Media_default.svg","webpack:///./assets/Character C.png","webpack:///./assets/Wide Image.png","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/core/core.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/atoms/index.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/index.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/utils/children.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/topic.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/edit/topics.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/bar.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/burger.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/drawer.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/dropDown.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/logo.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/navArrow.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/user.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/navbarLink.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/search.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/navigation.js","webpack:///./assets/Card_Test.png","webpack:///./services/ie11closestPolyfill.ts","webpack:///./assets/Loader_Logo_2.gif","webpack:///./assets/edit.svg","webpack:///./assets/pdf_thumbnail_26012023.png","webpack:///./assets/CC_Correct.png","webpack:///./assets/CC_Incorrect.png","webpack:///./assets/CC_TryAgain.png","webpack:///./assets/previewInteractionIcon.svg","webpack:///./assets/reviewToolReviewsBubble.svg","webpack:///./assets/expand.svg","webpack:///./assets/Wide Image 2.png","webpack:///./assets/genericAdditionalPlaceholder.png","webpack:///./assets/CC_Phone Character.png","webpack:///./assets/addInteractionDefault.svg","webpack:///./assets/addInteractionHover.svg","webpack:///./assets/Play Default.svg","webpack:///./assets/Play Hover.svg","webpack:///./assets/the Gwillest.png","webpack:///./assets/addInteractionBKG.svg","webpack:///./assets/theresNothingHereYet.png","webpack:///./assets/watchAQuickHowToVideo.png","webpack:///./assets/playVideo.svg","webpack:///./assets/clickPreviewToSeeOutput.png","webpack:///./assets/CC_Multi Choice Media Placeholders_1.svg","webpack:///./assets/CC_Multi Choice Media Placeholders_2.svg","webpack:///./assets/CC_Multi Choice Media Placeholders_3.svg","webpack:///./assets/CC_Multi Choice Media Placeholders_4.svg","webpack:///./assets/CC_Multi Choice Media Placeholders_5.svg","webpack:///./assets/CC_Multi Choice Media Placeholders_6.svg","webpack:///./assets/CC_Question Text + Image.svg","webpack:///./assets/Cross.svg","webpack:///./assets/Plus_purple.svg","webpack:///./assets/Info.svg","webpack:///./assets/CC_Sortation Placeholder_Panel Media 4.png","webpack:///./assets/CC_QuestionTextImage.svg","webpack:///./assets/HotspotSVGError.svg","webpack:///./assets/Delete_new.svg","webpack:///./assets/tick_grey.svg","webpack:///./assets/Hotspot_Add.svg","webpack:///./assets/imageUploadError_hotSpot.svg","webpack:///./assets/SVG.svg","webpack:///./assets/AudioIcon.svg","webpack:///./assets/Text.svg","webpack:///./assets/Search.svg","webpack:///./assets/removeNavigation.svg","webpack:///./assets/Plus_Icon.svg","webpack:///./assets/Widest Image.png","webpack:///./assets/hotspotLandingPageImg.png","webpack:///./assets/hotspotQuizImg.png","webpack:///./assets/collectFeedbackSubmitted.svg","webpack:///./assets/CC_AW_Feedback-min.png","webpack:///./assets/landingPageCake_1.png","webpack:///./assets/landingPageCake_2.png","webpack:///./assets/landingPageCake_3.png","webpack:///./assets/landingPageCake_4.png","webpack:///./assets/landingPageCake_5.png","webpack:///./assets/landingPageCake_6.png","webpack:///./assets/clickToRevealMagicMan.png","webpack:///./assets/CC_Topic Portal V3_Topic Portal Placeholder Icon.png","webpack:///./assets/CC_Text_Entry_Quiz_Placeholder.png","webpack:///./assets/new_assessment_intro_default.png","webpack:///./assets/CC_Assessment Question Image.png","webpack:///./assets/Certificate-V2.png","webpack:///./assets/Drag Icon_Blue.svg","webpack:///./assets/Resize Icon.svg","webpack:///./assets/move_cert_input.svg","webpack:///./assets/resize_cert_input.svg","webpack:///./assets/chameleonLogoForCertificate.svg","webpack:///./assets/lizard.svg","webpack:///./setup.ts","webpack:///./assets/whoopsBrowserIncompatible.png","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/editor.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/core/button.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/core/card.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/core/grid.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/core/heading.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/core/image.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/core/link.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/core/icon.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/atoms/windowButton.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/atoms/indicator.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/molecules/index.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/elements/index.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/elements/browserWindow.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/elements/column.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/elements/row.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/icons/index.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/icons/back.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/accordion.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/accordionBody.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/accordionField.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/accordionHeader.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/animation.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/animationGroup.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/back.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/branchButton.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/hooks/useCarousel.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/carouselAnimator.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/heighAwareComponent.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/carouselNavigation.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/choice.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/choices.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/column.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/continueButton.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/description.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/dragAndDrop.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/dragContainer.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/dragItem.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/dropContainer.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/dropItem.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/feedback.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/header.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/heading.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/image.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/menu.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/multipleChoice.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/paragraph.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/quiz.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/rating.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/result.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/singleChoice.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/singleColumnLayout.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/slide.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/text.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/textarea.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/title.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/topicTitle.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/twoColumnLayout.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/editable.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/video.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/edit/index.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/edit/color.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/edit/enum.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/edit/richText.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/edit/sidebar.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/edit/block.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/edit/text.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/hooks/useModule.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/components/frame.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/player.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/app.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/utils/index.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/utils/block.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/index.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/navbar.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/lock.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/divider.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/networkActivity.js","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-app/build/chrome/loadingSpinner.js","webpack:///./services/elementRemovePolyfill.ts","webpack:///./services/removePolyfill.ts","webpack:///./components/Layouts/highlightActiveElement.ts","webpack:////home/phantom_antonym/Development/chameleon/packages/creator-ui/build/index.js","webpack:///./assets/Rectangle.png"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","__webpack_public_path__","TrackerState","findHeaderElementByType","blocks","type","values","find","block","addHeaderBlocksToStateAction","dispatch","getState","header","standardHeader","graphicHeader","children","map","child","id","standardHeaderLogo","graphicHeaderBackground","graphicHeaderLogo","rehydrateAction","setAPIErrorAction","err","themeButtonDefault","label","undefined","shape","backgroundColor","backgroundOpacity","backgroundColorOnHover","backgroundOpacityOnHover","borderWidth","focusColor","includeButtonBackground","useLargeButton","borderRadius","textColor","textColorOnHover","shadow","outline","outlineColor","fontFamily","fontSize","bold","uppercase","initialState","apiError","count","bookmarkLoaded","bookmarkLocation","currentInteraction","currentInteractionBlockId","currentTopic","audio","audioAcknowledged","customFonts","error","exit","exitComplete","focusedNodeId","feedback","hasError","hideHeader","interactionsLocked","interactionsOpen","interactionsSeen","landingPagesSeenState","isScrolling","lastFocusedNodeId","links","mirrorActive","idToSIdMap","sIdToIdMap","topicsIdSIdMapping","idToSId","sIdToId","assessmentQuestionIdSIdMapping","nextInteractionMap","projectId","rootBlockId","scormSettings","passMark","setCompleteFromScore","setCompleteOnExit","setCompleteWhenAllPagesViewed","sendOnlySuccessStatus","lessonStatus","theme","buttonBackgroundColor","buttonBorderRadius","buttonOutline","buttonShadow","buttonShape","buttonTextColor","buttonHover","fontFamilies","lineHeight","padding","margin","paragraphSpacing","fontSizes","loadingSpinnerColor","buttons","main","highContrast","recoloredChameleonImages","useImagePreloader","enableBookmarking","moduleIsFreeScrolling","desktop","device","giveFocusToFirstSectionOnLoad","textToSpeech","textToSpeechVoice","disableLockDownInPreview","userPalette","menu","headings","h1","h2","h3","h4","h5","h6","link","visited","hover","focus","active","linksSecondary","themeId","tracker","userBehaviour","score","interactionTiming","scormResponses","moduleVariables","assessments","fn","run","Mirror","a","state","newTracker","keys","k","DIRTY","CLEAN","DELETED","filter","toUpdate","toSet","b","__delete","project_id","__isSaving","client","setMany","then","Array","isArray","forEach","deleted_at","catch","Sentry","scope","setExtra","currrentTracker","nextTracker","next","setBlocksLocalAction","setBlocksAction","bs","localbs","reduce","acc","remoteable","allTopicsOrdered","allInteractionsOrdered","cachedTopics","getBlock","findBlocks","selector","findBlocksIn","toVisit","discovered","filterToNewRoot","rootBlock","getBlockChildren","blockList","cur","getTopicGroup","possibleGroups","meta","subType","Error","getTopicGroupFromState","getTopicsFromGroup","topicGroup","getInteractionsFromTopicAndState","topic","interactionGroup","newRootBlockList","getTopicInteractionGroup","interactions","props","asAssessment","introduction","questions","q","results","getAllTopicsOrdered","groupBlock","dev","getAllInteractionsOrdered","getBlockFromState","getStore","store","getTopics","topics","cachedInteractions","getCurrentTopic","getTopicsNotHiddenFromNextAndBackNavigation","hiddenFromNextAndBackNavigation","onlyTopicsNotHiddenFromNextAndBackNavigation","curr","getInteractionsInTopic","getAllAssessmentQuestions","toLowerCase","flatten","cloneBlock","childBlocks","makeReference","getSId","list","offset","getAllInteractions","getBlockById","SIds","entry","sId","nextSId","Math","max","createBlock","extra","uuid","animator","standardHeaderDefaults","headerHeight","headerBackgroundColor","headerBackgroundOpacity","headerTextColor","backButton","topicName","progressBar","topicMenu","headerDropShadow","graphicHeaderDefaults","includeHeaderOverlay","headerOverlayColor","headerOverlayOpacity","addHeaders","logoProps","headersBlock","src","standard_header_logo","banner_primary_creator","graphic_header_logo","newHeadersBlocks","rootId","nhb","updateThemeHeadersAction","logo","imageId","newBlock","newTree","addInteractionToGroup","group","interaction","position","nextGroup","createScorm","scormExitMessage","shouldSendScoreWhen","moduleCompleteInterationRequirement","moduleCompleteScoreRequirement","scormControlledExit","scormExitDelay","scoringCriteria","scoreCriteria","isAndroidSamsung","navigator","userAgent","match","isAppleComputerInc","vendor","removeUndefinedEntriesFromObject","obj","includes","oldStylesToNewMap","background","buttonBackgroundOpacity","buttonHoverBackgroundOpacity","color","textHoverColor","buttonOutlineColor","oldDataToNewMap","location","linkData","createContinueBtn","isDevice","getExistingButtonStylesFromTheme","cachedBlocks","transformListFromIdToSId","transformListFromSIdToId","updateCachedBlocks","types","resultsKeyMapToSuspendData","answer","attemptCount","correctAnswer","isCorrect","isLocked","navigateToResults","questionName","submitButtonLabel","resultsKeyMapFromSuspendData","1","2","3","4","5","6","7","8","getResultsMinified","accA","currA","index","keysRemapped","accB","currB","questionBlock","questionBlockOptions","questionBlockOptionsId","indexOf","getResultsMaxified","Number","console","log","transformAssessmentsToSuspendData","assessmentsMinified","assessment","assessmentSId","String","structuredClone","resultsUpdatingIdToSId","resultsMinified","assessmentMinified","transformAssessmentsFromSuspendData","assessmentId","resultsUpdatingSIdToId","resultsMaxified","assessmentMaxified","hash","href","replace","sessionStorage","clear","localStorage","open","watch","deBounce","subscribe","clearTimeout","setTimeout","stndardHeader","minifiedAssessments","setItem","JSON","stringify","saveState","setBlockAction","setBlockLocalAction","addAdvancedEditingBlock","advancedEditingBlock","advancedEditingBlockRef","nextBlock","createEditableBtn","createBookmark","localButtonOutline","localColor","createModuleHasAudioMessage","addAdvancedEditingBlocksToStateAction","findBlockByType","hasAdvancedEditing","hasBookmark","hasModuleHasAudioMessage","Module","newBlockA","newTreeA","bookmarkBlock","bookmarkBlockRef","newBlocks","addBookmarkBlock","newBlockB","newTreeB","moduleHasAudioMessageBlock","moduleHasAudioMessageBlockRef","addModuleHasAudioMessageBlock","newBlockM","newTreeM","requestAnimationFrame","title","hasMode","mod","flatMod","actionHandlers","ADD_SCORM_RESPONSE","FOCUS_BLOCK","updatedCurrentInteractionBlockId","HIDE_HEADER","hide","LOAD_BOOKMARK_DATA","LOAD_SUSPEND_DATA","hasSavedAssessments","newState","interactionsReporting","MIRROR_ACTIVE","PREPROCESS_MODULE","moduleIsFreeScrollingDesktop","moduleIsFreeScrollingDevice","$","lockDown","selectedTopics","some","toString","mainButton","certificateInteraction","imgSrc","imgWidth","imgHeight","certificate","option","optionBlock","version","updatedStyleProps","updateBackgroundOpacityForOutline","newKey","hasLocalMap","hasValue","prop","toUpperCase","REHYDRATE","REHYDRATE_FROM_LMS","REMOVE_BLOCK","nextState","all","REMOVE_BLOCK_LOCAL","SET_ACTIVE_TOPIC","SET_API_ERROR","SET_BLOCK","SET_BLOCKS","SET_CURRENT_INTERACTION","updateFocusedNodeId","SET_ERROR","SET_EXIT","SET_EXIT_COMPLETE","SET_FONTS","SET_IS_SCROLLING","SET_LINKS","SET_PROJECT_ID","SET_ROOT_BLOCK","SET_THEME","SET_THEME_ID","SET_TRACKER","SUBMIT_FEEDBACK","UPDATE_COURSE_THEME","UPDATE_INTERACTIONS_OPEN","currentInteractionId","newInteractionsOpen","from","Set","nextInteractionId","UPDATE_INTERACTIONS_SEEN","newInteractionsSeen","UPDATE_RECOLORED_CHAMELEON_IMAGES","UPDATE_SCORE","UPDATE_SCORM_SETTINGS","UPDATE_USER_PALETTE","UPDATE_ASSESSMENT","assessmentData","questionData","delete","questionId","CONTROL_AUDIO","newAudio","AUDIO_ACKNOWLEDGED","ADD_HEADER_BLOCKS_TO_STATE","ADD_ADVANCED_EDITING_BLOCKS_TO_STATE","UPDATE_INTERACTIONS_LOCKED","updatedInteractionsLocked","indexOfId","RESET_MODULE","UPDATE_MODULE_VARIABLES","UPDATE_LANDING_PAGE_SEEN_STATE","parentId","childIndex","updatedLandingPagesSeenState","composeEnhancers","compose","createStore","action","handler","applyMiddleware","thunk","savedStore","savedState","parse","getItem","transformedInteractionsSeen","transformedInteractionsLocked","getLocalState","blocksList","topicBlocks","interactionBlocks","assessmentQuestionBlocks","topicBlocksSIdCounter","topicBlock","interactionBlocksSIdCounter","interactionBlock","assessmentQuestionBlocksSIdCounter","assessmentQuestionBlock","blocksUpdatedWithSId","updatedBlocks","parent","_store","colors","lPink","lBlue0","softBlue","lGrey0","lGrey1","lGrey2","lGrey3","lGrey4","lTeal0","lTeal1","lightBlueGrey","mint","chameleonMint","purple","getButtonFocus","shadowBefore","EmptyBtn","tabIndex","ariaLabel","disabled","onClick","style","css","tab-index","aria-label","EditorBtn","hoverOveride","join","subscriptions","Cont","Backdrop","Modal","ErrorBoundary","eventId","info","setExtras","setState","this","reload","React","Component","getCache","caches","Promise","resolve","add","put","getSubscriptionsWindow","WINDOW","prefix","keyId","getId","getSubscriptions","_","pubSub","freeze","fN","subscribers","record","publish","query","warn","usePubSub","useState","useEffect","pS","getIsValidHexColor","_hex_","test","hexToRgb","isValidHexColor","hex","split","exec","parseInt","getHexToRgbWithDefaultFallback","defaultColor","loadImage","cb","img","Image","crossOrigin","onload","onerror","ModuleImagesPreloader","images","imgsLoaded","setImgsLoaded","whichImagesLoaded","setImgAsLoaded","minDisplayTime","setMinDisplayTime","boot","setBoot","showEditPreloader","setShowEditPreloader","useSelector","modulePreloaderSettings","AdvancedEditing","modulePreloaderbackgroundColor","moduleLoadingMessage","progressBarColor","hexToRGB","g","lizard","preLoader","useRef","documentTitle","document","moduleImagesPreloaderDomContainer","querySelector","current","createElement","left","top","width","height","zIndex","body","appendChild","root","setAttribute","sections","querySelectorAll","modalContainer","hasChildNodes","section","activeElement","blur","timeEnd","time","self","cache","fun","fader","addEventListener","removeEventListener","remove","mockPercentLoaded","setMockPercentLoaded","tick","setInterval","round","random","clearInterval","percentLoaded","opacity","display","createPortal","ref","alt","textAlign","aria-valuemin","aria-valuemax","aria-valuenow","role","overflow","transition","ErrorModal","connect","focusBlockAction","EditMarker","className","right","Edit","getTopicSId","topicId","topicSId","interactionId","interactionSId","getSectionInView","reverse","getBoundingClientRect","innerHeight","getCurrentLocation","CloseBtn","transform","cursor","getHeaderElement","element","reRenderSelector","prev","useHeader","headerStyle","standard","headerLogo","logoBlock","graphic","headerBackgroundImage","backgroundBlock","interactionsInTopics","open_menu_kf","close_menu_kf","getAnchorId","Menu","close","init","nav","scrollableContainer","menuItemsContainer","anchors","closeButton","currentTopicId","menuColors","menuBackgroundColor","menuTextAndCloseColor","menuTextHoverColor","menuTextActiveColor","disableNavigationToIncompleteTopics","topicsComplete","temp","every","getTopicsComplete","keyOverrides","e","preventDefault","shiftKey","onAnimationEnd","target","visibility","maxHeight","closeBtnFocus","trim","aria-hidden","border","justifyContent","alignItems","boxShadow","hiddenFromMenu","arr","isCurrentTopic","disableNav","targetLocation","locationHistory","onKeyUp","currentTarget","click","aria-disabled","firstSection","scrolling","VisuallyHidden","setActiveTopicAction","onScrollEnds","callback","checkScrolling","backBtnOnClick","interactionIsAnAssessmentQuestion","prevSection","scrollIntoView","behavior","navToPrevTopic","checkHistory","substr","Arrow","viewBox","stroke","strokeWidth","fill","fillRule","points","topicsNotHiddenFromNextAndBackNavigation","prevTopic","findIndex","setCurrentTopic","scrollTo","scrollHeight","lastSection","BackBtn","backBtn","onScroll","pointerEvents","toggle","node","ProgressBar","allInteractions","useMemo","percent","toFixed","Column","flex","HeaderLayout","headerRef","responsiveHeight","currentTopicIndex","currentTopicName","includeLogo","setMenuState","Burger","marginLeft","Background","content","clipPath","Header","headerProps","hideMenu","useCallback","HeaderBackground","backgroundPosition","backgroundSize","HeaderGraphic","isFirstInteraction","headerBackground","screen","availWidth","scrollY","invertedScrollY","getIsFirstInteraction","firstInteraction","headerId","currentHeader","selected","editWrapperMargin","setCurrentBlock","AudioPlayer","audioSrc","autoPlay","controls","delay","pause","audioPlayer","delayAudioPlay","play","wait","onFullScreenChange","fullscreenElement","paused","bottom","maxWidth","onPlay","onPause","setCurrentInteractionAction","breakpoints","space","fonts","default","Text","updateScoreAction","readCookie","nameEQ","ca","cookie","charAt","substring","HostingContext","createContext","HostingProvider","url","signaler","createSignalServer","setSession","session","currentSession","start","Provider","csrfToken","decodeURIComponent","fetch","method","credentials","headers","Accept","req","json","resume","end","sendBeacon","Blob","event","scoreMin","scoreMax","scoreScaled","scoreRaw","success","completion","suspend_data","SCORMToCollectValues","SCORMToCollect","isHosted","getParams","hosted","raw","hosting","learning_module_session_data","myHeaders","Headers","append","requestOptions","redirect","endPoint","chameleon","CHAMELEON_URL","response","text","transformScoreDataFromIdToSId","scoreData","tF","transformScoreDataFromSIdToId","blockWithSIdOrId","Version","SuccessString","CompletionString","ShouldSendScore","ReportableInteractions","scormInitialized","API_KEYS","API","getSCORMInitialized","getResult","OnePointTwo","asPercent","number","total","hasReloadedScoreData","setScoreData","scorm","passed","sendScore","assessmentScoringData","scoringAssessments","scoring","passingAssessments","passingAssessment","passingAssessmentResults","isComplete","completionString","set","Complete","Incomplete","assessmentScoringAverageOrFirstPassed","shouldSendSuccess","TwoThousandAndFour","Passed","Failed","setSCORMCompletion","scormCompletionString","setCompletionStatus","save","setIsComplete","interactionCompletion","scoreCompletion","setShouldSendScore","shouldSendScore","Never","Always","OnComplete","setCompleteOnExitOps","exitProps","qid","SCORM","qdesc","question","qtype","qstudent","qlearner","qcorrect","correct","qresult","qsave","cmiInteractions","Multichoice","Sortation","Likert","FillIn","LongFillIn","loadActiveBlocks","createSelector","loadScoringBlocks","assessmentsQuestions","interactionsInTopic","PIPWERKS","pipwerks","SCORMRenderer","debug","isActive","useDispatch","useContext","ModuleContext","initialised","setInitialized","setVersion","lastInteractionSeen","setLastInteractionSeen","reportedInteractions","setReportedInteractions","exiting","numberOfScorableInteractions","lastInteraction","allInteractionsSeen","_curr_","scorePercent","percentComplete","hasExited","scormVersion","remoteData","sIds","suspendedData","remoteDataJSONParsed","reported","unloaded","un","handleExitMode","checkedScormExitMessage","quit","timeoutQuit","exitPropsProcessed","timeout","delaySetSCORM","assessmentsWithDataRemoved","assessmentsToSuspendData","suspendData","ri","setRI","completed","delivered","x","rep","interactionType","reportable","qProps","setCMIInteractions","resultParsed","qp","entries","rating","message","setLocationOnSuspendData","unsubscribe","sectionInView","currentLocation","updateAssessmentAction","useCachedResource","cacheName","$$","has","hasCacheName","ok","blob","objectURL","URL","createObjectURL","clonedResponse","clone","backgroundImageOpacity","backgroundBlur","cachedBackgroundImage","transformOrigin","BackgroundWithParallax","parallaxValue","refreshParallaxScrollOnTopicChange","setRefreshParallaxScrollOnTopicChange","setImageRef","minHeight","parallaxThrottler","parallax","imgTravel","offsetHeight","scrollValue","imgHeightOnLoad","checkLimit","objectFit","minWidth","GradientBackground","backgroundGradientData","backgroundPrimaryColor","backgroundSecondaryColor","backgroundGradientAngle","AssessmentContext","submitted","resetQuestion","setSubmitted","maxAttempts","answersWrappingAlignment","saveData","learnMoreResetsAssessment","AssessmentContainer","backgroundImage","backgroundGradient","backgroundGradientFullHeight","updatedSubmissions","tabindex","isIE","ua","msie","rv","ie11VerticalFlexCenterFix","ReplaceWithPolyfill","currentNode","parentNode","arguments","removeChild","ownerDocument","createTextNode","insertBefore","previousSibling","replaceChild","Element","replaceWith","CharacterData","DocumentType","linksShouldPopup","updateReadOnlyText","containerElement","chameleonText","tagName","innerText","innerHTML","div","dataType","getAttribute","rE","RegExp","outerHTML","dataset","closestLi","closest","classList","liInnerHTML","span","getComputedStyle","calculatedLineHeight","ulol","ulol_","previousSiblingTagName","lastChild","IS_POPUP","oldWidth","innerWidth","oldHeight","resizeBy","newWidth","newHeight","reversed","repeat","createLayout","createTranscriptBlock","useBackgroundControls","createMediaBlock","removeTypes","forceInclude","bulletColor","fit","imgPlaceholderIndex","isAdditionalMedia","pdf_default","displayInline","ImageChoice","parsedFlipCardLayout","makeLeftChoice","imgBlock","textBlock","makeRightChoice","makeFillChoice","makeNoneChoice","createChoice","choice","None","media","Left","Right","Fill","createAccordionFieldBlock","imageChoice","createAccordionBlock","createAFB","contentForColumn","createSlideBlock","createFlipcardsBlock","createFlipcardInteractionBlock","flipcardFrontColor","flipcardBackColor","flipcardFrontTextColor","flipcardBackTextColor","flipcardWidth","flipcardHeight","alignTextTop","flipcardLayout","imageText","imageImage","textText","answerCount","flexDirection","flexWrap","layout","createFeedbackBlock","Correct_default","unlocked","removeable","Incorrect_default","Attempt_default","createMultichoiceMediaOption","createMultichoiceBlock","isMultichoiceMedia","createMultichoiceBlockWithText","sharedQuestionMedia","createMultichoiceInteractionBlock","checkboxColor","correctOptions","numberOfAttempts","showCorrectAnswer","useUniqueOptionFeedback","columnCount","columnsReversed","createAnswerBlock","isSortableImg","createSortationBlock","createSortationInteractionBlock","panelBackgroundDragging","textColorDragging","baseColor","createModalWithEditableBtn","createDragAndDropElement","Media_default","createDragAndDropBlock","createDragAndDropInteractionBlock","panelBackground","dropZoneColor","createMatchPairs","feedbackId","draggableId","droppableId","createMatchingBlock","DragContainer","DropContainer","AnswerContainer","dragBlock","dropBlock","createMatchingInteractionBlock","panelWidth","panelHeight","createHotSpotElement","getNextHotSpotBlock","hotSpotOptionBlock","createHotSpotInteractionBlock","immediateFeedback","isGlobalNavigation","isHotspotLandingPage","image","hotspotType","hotSpotColor","hotSpotSize","hotSpots","createFiveStarRatingBlock","createFiveStarRatingInteractionBlock","starColor","submissionEmailDestination","subject","isTextEntry","resultsPassed","resultsFailed","createResultsPageInteractionBlock","graphType","graphColor","createClickAndRevealBlock","createClickAndRevealsBlock","createClickAndRevealInteractionBlock","clickAndRevealPanelTextColor","clickAndRevealLabelTextColor","borderColor","useGlobalNavigation","isLandingPage","createTopicPortalInteractionBlock","createAssessmentIntroduction","createAssessmentQuestionOption","createAssessmentQuestion","createAssessmentResults","createContinueButtonBranchingBlock","createContentCardBlock","disableLastPageMessage","createContentCardsBlock","createContentCardInteractionBlock","grid","contentCardBackgroundColor","contentCardPanelTextColor","contentCardContentTextColor","imagePosition","includeText","includeShadow","uniformHeight","numColumns","numberOfCards","createSelectOptionBlock","createSelectOptionsBlock","createSelectOptionsInteractionBlock","certificateTextField","isInputField","placeholder","isCertificateField","createCertificateInteractionBlock","ccount","center","centerReversed","creversed","newInteractions","accordion","numberOfItems","containerProperties","interactionProperties","imgChoice","headingTextColor","headingColor","fieldBodyTextColor","fieldBodyBackgroundColor","numberOfAccordions","createAccordionInteractionBlock","none","carousel","slideCount","carouselColor","carouselTextColor","numberOfSlides","sortation","slider","matching","hotspot","createAssessmentIntroductionInteractionBlock","createAssessmentQuestionInteractionBlock","showAttemptCounter","enableLearnMore","enableTryAgain","enableReVisit","includeResultsGraph","addAssessmentRetry","enableBranching","correctColor","incorrectColor","createAssessmentResultsInteractionBlock","createInteraction","setBlocks","setBlock","foreground","buttonBackground","buttonColor","buttonForeground","transformProperties","newInteraction","newInteractionRef","newTopicBlock","addInteraction","getBoxShadow","Wrapper","reviewToolToggleOn","setReviewToolToggleOn","setHover","topicAsAssessment","bottomPadding","Plus","topicAnimationGroup","numQuestions","setNewSectionWizard","data-info-bubble","onMouseOver","onMouseOut","preview","currentInteractionSId","previewLocation","previewLink","newWindowUrl","reviewModeEnabled","reviewToolReviewsBubble","showReviewTool","setReviewToolToggleOff","HiddenBackButton","setDisabled","isMounted","getPrevSection","currentSectionIndex","isTopic0","hasPrevSection","onFocus","onBlur","checkWindowHasScrolled","backgroundImageURL","updateInteractionsOpenAction","nextTopic","nextInteraction","topicContainer","getNextInteraction","windowScrollY","preventScroll","getFontSize","base","h","halfwayBetween2Numbers","headingsTable","getLineHeight","heading","headingStyles","getScrollBarWidth","clientWidth","MenuContainer","rootSelector","setRoot","fauxFocus","setFauxFocus","setMenu","currentHeaderProps","hiddenButton","fauxFocusColor","controlAudioAction","audioData","Bubble","y","bubbleCoords","setBubbleCoords","bubble","arrow","arrowData","getBBox","elementWidth","bubbleAlign","rx","bottomLeft","bottomRight","InfoBubbleContainer","bubbleData","setShowBubbleData","infoBubble","moduleNavigationActions","NEXT","EXIT","SET_MODULE_COMPLETE","SET_MODULE_COMPLETE_AND_EXIT","moduleNavigationActionsList","buttonLayouts","buttonPosition","updateGlobalFontStylesFromTheme","parsedTextColor","headingsStyles","webGLEnabled","getWebGLEnabled","canvas","webgl","getContext","WebGLRenderingContext","getAnimatedOrbsDefaultValues","primaryOrbColor","secondaryOrbColor","tertiaryOrbColor","orbOpacity","orbBlurStrength","orbSpeed","debounce","func","timeoutId","args","min","start1","end1","start2","end2","simplex","SimplexNoise","ColorPalette","setColors","setCustomProperties","hue","complimentaryHue1","complimentaryHue2","saturation","lightness","hsl","complimentaryColor1","complimentaryColor2","colorChoices","Orb","bounds","setBounds","scale","radius","xOff","yOff","inc","graphics","PIXI","alpha","maxDist","originX","originY","xNoise","noise2D","yNoise","scaleNoise","beginFill","drawCircle","endFill","Orbs","orbsFor","calculatedOrbColors","tinycolor","analogous","toHexString","pixiCanvas","app","view","resizeTo","transparent","stage","filters","KawaseBlurFilter","orbs","orb","addChild","ticker","update","render","renderCount","InteractionContext","getInteractionsOpen","getContinueButton","getHiddenBackButton","ContainerLogical","moduleContext","setComplete","setCompleteAndExit","resetModule","includeAudio","stopAudioWhenModalIsOpened","autoOpenNextSection","backgroundStyle","fullWidth","isOpen","contentContainer","useLayoutEffect","hiddenBackButton","onKeyDown","continueBtn","hiddenMenuButton","getHiddenMenuButton","scrollBarWidth","paddingLeft","anchorNavNextExit","aNext","sectionInViewSubscriber","overideStyleBackground","paddingTop","as","overflowX","py","data-section","data-section-text-color","sectionLabel","paddingBottom","killAllAudio","container","memo","useFader","disableNullSpaceClick","onClose","onOpened","contentContainerStyles","interactionContext","btnColor","focusedNodeIdOnOpen","rootContainer","checkResize","tabInit","focusableElements","firstFocusElement","lastFocusElement","tabOveride","reverseTab","overflowY","onResize","closeOnLinkClick","addRemoveCloseOnLinkClick","addOrRemove","isSafari","iOS","globalFontStyles","initial","duration","ease","animate","onAnimationComplete","MSStream","stopPropagation","Components","rules","deserialize","el","nodes","childNodes","serialize","data-type","fontSizeNumber","isNaN","lang","varName","toJS","fontSizePXToREM","varNameFromChildren","data-varname","html","Html","findUl","Indent","attributes","indent","contains","Lang","langRef","renderMark","editor","mark","setLocalColor","variable","widgetColor","spanWithColor","chameleonTextComputedStyle","spanWithColorComputedStyle","onKeyAction","moveToRangeOfNode","contentEditable","suppressContentEditableWarning","middle","leftOrRightEdge","clientX","pParent","addEmptyAndRemoveMarks","moveForward","firstChild","insertFragment","moveToStartOfText","moveFocusForward","insertText","moveFocusBackward","marks","removeMark","xmlns","Li","li","_fontFamily","childSpanOfSpan","renderNode","isFocused","A","textDecorationColor","onMouseEnter","renderInline","delayUpdate","speechSynth","bulletStyles","speechSynthesisCancel","speechSynthesis","cancel","isiOS","platform","SpeechSynthesisUtterance","PlayBtn","strokeLinecap","strokeLinejoin","clipRule","TextToSpeech","setColor","canPlay","setCanPlay","voice","voices","getVoices","UK_English_Male_iOS","voiceSelection","voiceFallback","isIOS","textToSpeechBtn","speak","chameleonTextP","cssObj","onStart","onEnd","getActiveBlocks","getAllScoringInteractions","setScore","_scoreValue","scoreValue","getScore","ReadOnlyText","liTextColor","linkColors","enableTextToSpeechBtn","readOnlyText","fontInfo","varElems","vE","moduleBlock","mbProps","allScoringInteractions","scoreDataFromScoringInteractions","getScoreDataFromScoringInteractions","hasScoringInteractions","getScoreDataFromScoringBlocks","textContent","Date","devicePixelRatio","dangerouslySetInnerHTML","__html","CHAMELEON_COPIED_TEXT","isBoldHotkey","isKeyHotkey","isItalicHotkey","isUnderlinedHotkey","schema","isVoid","EditableText","textBackgroundOpacity","enableSecondaryLinkColors","enableCustomLinkColors","customLinkColors","placeholderText","clearedFormatting","onCopy","copied","clipboardData","getData","hasPlaceholder","readOnly","onChange","toggleMark","onPaste","pasted","pastedToPs","renderBlock","updateEditor","getBaseButtonStyles","fontWeight","hoverColor","buttonShape_","pill","rectangle","circle","aspectRatio","updateLinkColors","getFocusColorForCSSObject","updateButtonHeightForIE","buttonRef","goalHeight","offsetWidth","hasValidLocationUpdated","parsedLocation","IsExternalLink","strokeMiterlimit","GenericButton","themeButtons","cleanedBlockProps","enabled","baseButtonStyles","_focusColor_","backgroundColorRGBA","hoverR","hoverG","hoverB","hoverA","backgroundColorOnHoverRGBA","genericButton","textTransform","button","frameSelected","EditWrapper0","mediaParentId","EditWrapper1","editWrapperSize","editWrapperUseIcon","EditWrapper2","EditWrapper3","editWrapperPadding","dualRingAnimation","dualRing","size","lineWeight","LoadingSpinner","checkImgSrcIsGif","useImgLoader","loadedState","setLoadedState","mounted","loaded","cachedCircleSize","CircleCalculated","imgLoadedState","useImageLoader","hyperLink","pageBackgroundColor","aHiliteColor","parentHeight","circleWidth","circleHeight","useParentHeight","buttonStyles","sx","ImageZoomContext","overideStyles","ImageZoom","description","noDescription","imageZoomBackgroundColor","imageZoomIconColor","zoom","setZoom","imageZoom","expand","ImageZoomed","imageZoomed","closeBtn","closeFullscreen","cachedSrcs","cachedSrc","ImageContext","imageContext","editWrapperType","usePlaceholderValue","borderStyle","fixedHeight","fixedHeightValue","imgSize","defaultHeight","imgContainerHeight","imgMagnification","canUpdateContainerHeight","realSrc","setRealSrc","resp","r2","hasResized","targetHeight","imageWidth","imageHeight","containerWidth","ratio","calculatedMaxHeight","calculatedHeight","getCalculatedHeight","EditWrapper","fullHeight","abs","data-can-update-container-height","imgPlaceholders","imagePlaceholder","genericAdditionalPlaceholder","Button","Bookmark","renderedBookmarkBlock","updateBookmarkState","bookmark","setBookmark","showLoadingBookmark","setShowLoadingBookmark","EditableButton","EditableBtn","txt","noBtn","yesBtn","hasTextContent","resetAriaAndOverflowY","setBlockProps","firstTopic","firstTopicSId","firstInteractionSId","showBookmark","navToHash","noBtnOnClick","yesBtnOnClick","persistHistory","cloneElement","bookmark_graphic","marginBottom","FontManager","FontFace","family","font","ff","weight","load","Hover","DashboardRow","DashBoard","CC_Phone_Character","addInteractionHover","addInteractionDefault","PlayHover","PlayDefault","showGettingStartedVideo","theGwillest","watchAQuickHowToVideo","AddInteractionBtn","EmptySection","moduleHasInteractions","addInteractionBKG","theresNothingHereYet","styled","rotate","Line","unlockInteraction","itemsSeen","clearFieldHilites","field","useAccordion","unlock","exclusive","viewed","past","AccordionContext","Accordion","iContext","ctx","Children","idx","findByKeyVal_V2","val","found","NavigationButton","_textColorOnHover_","hasValidLocation","urlEnabled","navigationButton","textDecoration","keyCode","useIntersectionObserver","updateWhenIsNotIntersecting","options","io","IntersectionObserver","isIntersecting","observe","Transcript","btn","buttonContainer","continueButton","removeAttribute","ShowTranscriptBtn","setShowTranscript","showTranscriptFontSize","showTranscriptFontColor","showTranscriptLabel","VideoIcon","CloudflareVideo","cloudflareUid","rest","Video","videoSrc","useTranscript","viewingTranscriptUnlocksInteraction","posterSrc","hideControls","playInline","isYouTube","isPlaying","setIsPlaying","calcHeight","setCalcHeight","showTranscript","context","video","player","hasAutoPlayed","threshold","onWindowResize","calcHeightTarget","continuePlayingInFullscreen","videoPlayer","streamRef","onEnded","poster","autoplay","loop","muted","playsinline","playing","light","playVideo","showTranscriptBtn","showTranscriptButtonElement","AudioImage","cachedImgSrc","Audio","transcript","Audio_default","audioInteraction","audioPausedByUser","currentTime","headphonesWoman","Img","prerender","renderer","animationData","SVG","svgPlaceholder","svg","reactBodyMovin","bodymovinOptions","hasAnimationData","svg_","MediaContext","onMediaChange","Media","mediaContext","isSafeToCallOnMediaChange","shouldUpdate","embedIcon","hideHeaderAction","getMinHeight","fullWindowHeight","IFrame","fullscreenMode","setLoaded","onLoad","Embed","dropShadow","includeBorder","includeAspectRatio","borderSize","iFrameHovered","setIFrameHovered","setFullscreenMode","allowFullScreen","matchMedia","matches","exitFullscreen","CloseFullscreenEmbed","FullScreenIcon","PDF_smallIcon","PDF","cardColor","cardOutline","includeImage","cardBorderRadius","PDFThumbnail","openPDF","pdfSrc","clickPreviewToSeeOutput","OpenPDFImage","OpenPDF","hasOneColumnLayout","containerHilite","setContainerHilite","alert","SingleColumnLayout","Row","defaultProps","TwoColumnLayout","checkSwipeIsLive","ComponentsObject","InteractionColumn","includeAdditionalTextField","AccordionField","includeFieldBodyBackground","fieldBodyBackgroundOpacity","trigger","interactionIsOpen","isFieldOpen","fieldBody","mt","mb","AccordionHeader","includeHeadingBackground","headingBackgroundOpacity","fieldHeaderRef","fieldFauxFocus","borderRadiusRealculatedForCSSBug","fieldOpen","aria-expanded","pl","pr","AccordionBody","fieldBodyElements","rowFieldBody","aria-live","onAnimationStart","ContinueButton","ContinueBtn","AccordionDisplay","blockId","Btn","dir","arrowColor","ariaDisabled","hoverColorToRGB","heightOffset","Marker_v2","carouselContext","CarouselContext","goto","isDefaultColor","notCurrentMarkerColor","isEDGE","edge","Direction","CarouselLayout","currentIndex","backGround","animation","includeSlideIndicators","prevNextBtnColor","prevNextBtnHoverColor","prevNextArrowColor","carouselHeight","OneColumn","setImgHeight","debounceSetImgHeight","navigate","onTouchStart","Next","Prev","touches","pointerTravel","swipeIsLive","onTouchMove","onTouchEnd","slide","Carousel","setCurrentIndex","previousIndex","setPreviousIndex","slideCache","hasAnimated","slideCacheIds","childrenIds","diff","removedIndex","_currentIndex","slideNum","defaultBulletFormatting","CarouselSlide","slideRef","ar","imageZoomContextValue","natural","stiffness","damping","smooth","Slide","Carousel_default","interactionContext_","interactionLayout","CarouselDisplay","updateItemsSeen","Flipcards","updateFlipCardSeen","numFlipCards","noop","headingStylesForPanelsAndCards","Face","face","includeFlipcardBackground","cardBackgroundOpacity","flipcardOutline","flipcardOutlineColor","flipcardBorderRadius","visibleFace","mediaType","mediaTypeUpdated","faceMedia","faceElement","addRemoveStopPropagation","addRemove","Flipcard","cardHasFocus","setCardHasFocus","rotation","updateCardDisplay","cardContent","setCardContent","frontFaceMedia","backFaceMedia","edgeOpacityHack","setEdgeOpacityHack","flipcardBackgroundOpacity","flipCard","flipCardFaces","flipCardInit","delayReadingCardContent","frontFaceMediaIsSVG","backFaceMediaIsSVG","frontFaceMediaIsSVGKey","backFaceMediaIsSVGKey","updateRotation","checkReturnToInteractionEditing","side","updateCardContent","faceContent","getFocusColor","onTransitionEnd","texts","checkFlipCardSize","counter","aria-pressed","flipcards","Flipcards_v2","Flipcard_v2","FlipcardSide","Front","Back","FlipCardDisplay","Tick","tickColor","TermsAndConditions","accept","acceptContent","acceptBorderRadius","acceptTextColor","acceptBackgroundColor","setToggle","onSubmit","checked","htmlFor","FullPageText","FullPageTextDisplay","addScormResponseAction","scormAction","useFreshProps","Feedback","targetFeedbackElements","attempt","showAttemptNumber","useMediaInFeedback","navigationBehaviour","ModalWithEditableBtn","Correct","Incorrect","Attempt","freshProps","keyEventsDisabled","renderedBlock","Feedbacks","Correct_Feedback","Incorrect_Feedback","Attempt_Feedback","FeedbackButtonCorrect","FeedbackButtonIncorrect","showAttemptNumberComputed","nullSpaceCloseAction","feedbackText","anchorButton","killKeyAndPointerEvents","incorrect","parsedOnClose","useScoringQuizzes","SubmitState","multichoiceMediaPlaceholders","CC_Multi_Choice_Media_Placeholders_1","CC_Multi_Choice_Media_Placeholders_2","CC_Multi_Choice_Media_Placeholders_3","CC_Multi_Choice_Media_Placeholders_4","CC_Multi_Choice_Media_Placeholders_5","CC_Multi_Choice_Media_Placeholders_6","placeholderMappingToImageId","MultichoiceContext","sessionLock","attempts","randomAnswers","_interactionContext","interactionContextId","randomizeOptions","useFeedback","mediaPanelWidth","showReviewFeedback","includeQuestionTextPlusImage","hasAttemptFeedback","setSelected","Resolved","Initial","submit","setSubmit","setFeedback","scoringQuizzes","scoreAll","Question","SubmitBtn","AnswersContainer","ReviewFeedback","Answers","multichoice","parsedIsCorrect","sort","isMultiCorrect","isLive","showFeedback","questionText","getCorrectAndResponseOptions","imgAltText","responseExpanded","correctExpanded","shouldDispatchScore","multichoiceIsLive","answerIds","_Answers_","getRandomAnswers","isMultiSelect","updateSelected","optionId","_selected","flexShrink","useAttemptFeedback","focusedElement","abortCounter","getMultichoiceData","local_suspend_data","multichoiceData","NewTick","Radio","lockedBySCORM","resolved","isMulti","isSquare","hasFocus","savedMultichoiceData","multichoiceMediaDefaultProps","Answer","multichoiceContext","optionText","panelBackgroundOpacity","_panelBackgroundOpacity","mediaPanelHeight","fixedPanelHeight","panelOutline","panelOutlineColor","panelBorderRadius","optionTextColor","setHasFocus","buttonFocus","optionStyles","imgDescription","mediaIsText","mediaIsImage","eventHandlers","input","ColumnContentForMultichoiceMedia","CC_QuestionTextImage","MultichoiceMedia","MultichoiceWithText","Multichoice_v2","MultichoiceDisplay","setNewBlockNewTree","useSetState","setErrorAction","updateUserPaletteAction","nextTheme","themes","AddRemmoveBtn","Swatch","marginRight","AddRemoveBtnWrapped","AddRemoveBtn","currentColor","selectColor","colorsFromTheme","themeButtonsMain","confirm","MultichoiceImageContext","MultichoiceImage","defaultFeedback","answers","submitBtn","isResolved","setIsResolved","setResult","setShowFeedback","findChildByType","IELayout","isButtonBlock","aria-describedby","selectedColor","imageBorderRadius","imageBackground","multichoiceImageContext","isSelected","isCorrectOption","targetFeedback","feedbackTextCB","buttonContainerCB","updatedProps","MultiChoice_default","MultichoiceImageWithText","ColumnImageAndText","useMediaInColumn","MultichoiceImageDisplay","renderedChildren","sortationPanelDefaultStyling","Option","isDragging","optionContainer","_panelBackground","_panelBackgroundDragging","optionBorderRadius","optionBackgroundOpacity","optionBackgroundOpacityDragging","optionOutline","optionOutlineColor","_0_100_","rgbaFromHexAndOpacity","panelTextColor","panelTextColorDragging","rr","gg","bb","firstElementChild","userSelect","_baseColor","baseColorOpacity","_baseColorOpacity","baseOutline","baseOutlineColor","baseBorderRadius","direction","getBlocksByType","heading0","heading1","sortFrom","sortTo","array","floor","shuffle","order","setOrder","setIsLive","hasAttempt","localDirection","setLocalDirection","sortationResolved","alphabetToArray","optionsIds","isCorrectCurrentToScore","idDep","mq","onMQChange","onDragEnd","startIndex","endIndex","reordered","removed","source","destination","newOrder","provided","innerRef","isDragDisabled","snapshot","draggableProps","dragHandleProps","submitButtonElement","SortationHeading","SortationQuestionText","CC_Sortation_Placeholder_Panel_Media","SortationDisplay","FromToField","alignment","Slider","sliderMin","sliderMax","sliderStartValue","sliderTrackColor","sliderTrackOpacity","sliderHandleColor","showSliderStepMarkers","sliderStepMarkerColor","numberOfSliderSteps","sliderAnswerFormat","includeSliderAnswerInputBox","SliderAnswerTextColor","sliderContentColor","sliderInputBoxBackgroundColor","sliderInputBoxBackgroundOpacity","sliderInputBoxOutline","sliderInputBoxOutlineColor","includeFeedback","rgba","sliderInputR","sliderInputG","sliderInputB","sliderInputA","getSliderHandleColor","replaceHash","sliderHandle","sliderHandleSize","setValue","inputFieldHasFocus","setInputFieldHasFocus","setAttempt","setResolved","to","_value_","questionElement","showFeedbackSubscription","sliderThumb","appearance","sliderThumbFocus","step","marker","distance","markerPosition","defaultValue","MozAppearance","localValue","ColumnContent","SliderDisplay","modalPlaceholderImage","MatchingLayout","isOneColumn","setLayout","updateLayout","dCWidth","cWidth","screenReaderInstructions","draggable","cachedContent","getElementContent","item","announcements","onDragStart","draggableContent","onDragOver","over","droppableContent","onDragCancel","Layout","columns","reset","allPlaceHoldersResolved","setAllPlaceHoldersResolved","availableDropsIndex","NaN","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","coordinateGetter","currentCoordinates","droppableContainers","column_b","cB","getXY","dropTarget","code","column_a","autoScroll","accessibility","LayoutResponsiveContainer","matchDragsFocusable","reRenderedFeedback","Placeholder","Matching","MatchDrags","MatchDrops","setColumns","matchingDragIdToDropIdMap","eventType","collisions","dragId","dropId","dragIndex","drag","dropIndex","drop","updatedColumnB","updatedColumns","MatchDrag","isDropDisabled","panelBackgroundDraggingOpacity","panelShadow","initialMediaType","hoverHilite","useDraggable","listeners","setNodeRef","MatchDrop","useDroppable","isOver","getMediaParent","MatchPairs","MatchingDisplay","mediaDefault","TextAndImage","HotSpotTickedWhenSeen","inverseScale","displayAsRadio","cx","cy","WebkitFilter","outerPulse","keyframes","innerPulse","VisibleHotSpot","hotSpotsAnimated","hotSpotsVisible","hasBeenSeen","submitState","showSeenState","hotSpotFocus","focusStrokeWidth","showChecked","correctAnswers","radii","outer","inner","Infinity","Polygon","pointsToArray","xPoints","yPoints","minX","maxX","minY","mediaTypes","blue0","blue1","lightGrey","thumbnailsContainerHeight","FileUploader","getSVGSize","reject","w","variables","gql","FeatureFlag","InteractionType","isFeatureEnabled","feature","CreateImageInteraction","CreateFullPageTextInteraction","CreateMultipleChoiceInteraction","CreateFlipcardInteraction","CreateAccordionInteraction","CreateCarouselInteraction","CreateSortationInteraction","CreateMatchingInteraction","CreateHotspotInteraction","CreateFiveStarRatingInteraction","AddESVGImage","CreateResultsPageInteraction","CreateClickAndRevealInteraction","LandingPage","CreateTopicPortalInteraction","UseMyFeedbackApp","MultipleChoice","Hotspot","FiveStarRating","ResultsPage","ClickAndReveal","TopicPortal","Rectangle","currentHotspotId","rectangleBorderRadius","rectangleDisplayOutlineOnly","rectState","setRectState","startX","startY","tickPosition","HotSpotScorableContext","HotSpotScorable","feedbacks","hotspots","InteractionContextId","INITIAL","setSubmitState","updateAttempt","RESOLVED","updatedSelected","onMouseDown","drawing","startXY","clientY","onMouseMove","negY","updateRectangleHotspotLocalState","onMouseUp","persist","HotSpot","containerContext","ContainerContext","hotspotDefaultIMG_","hotspotQuizImg_","hotSpotLandingPageDefaultIMG_","_HotSpotScorableContext","setImgSize","imgLoading","setImgLoading","creating","setHotSpotFocus","SVGHasNoDimensionsError","setSVGHasNoDimensionsError","setScale","setCurrentHotspotId","landingPageSeenState","updateHotspotSeen","getParsedColor","names","updated","hotSpotFocusRef","hotSpotPoints","hotSpot","useHotSpotTransformOldToNew","hotspotsBlockId","hotspotId","hotSpotRoot","markers","svgImgWidth","svgImgHeight","finally","getMouseEvents","getShapeProps","preserveAspectRatio","xlinkHref","titleOrLabel","addHasBeenSeenTitleOrLabel","hotSpotFocusTrigger","HotspotSVGError","HotSpotElement","HotSpotIsolated","HotSpotDisplay","Message","onUpdateCallback","cssStyle","setHasValue","onUpdate","FiveStarRatingContext","resize","TextEntry","messageContainer","messageUnderline","messageTextColor","messageTextBackgroundColor","messageBorderRadius","messageBorderColor","messageFontFamily","messageFontSize","maxLinesBeforeScrolling","textArea","textAreaProxy","computedPadding","computedStyle","newLineCheck","textAreaHeight","shouldScroll","textAreaProxyHTML","sharedStyles","whiteSpace","marginTop","FeedbackSubmitted","collectFeedbackSubmitted","FiveStarList","FeedbackSubmittedEditable","useMyFeedbackApp","emailRequired","emailOptional","identityPlaceholder","anonymityRequired","include5StarRating","includeMessageText","messageTextBackgroundOpacity","reference","collectionKey","ratingEndpoint","learnerIdentity","showTextEntry","messageBorder","hasLearnerIdentity","Id","borderBottomColor","borderBottomStyle","borderBottomWidth","aria-autocomplete","showSubmissionFeedback","identity","alertLearnerIdentity","onUpdateRating","onUpdateLearnerIdentity","onUpdateMessage","hoverIndex","setHoverIndex","shapesRoot","shapesContainer","winWidth","scaleFactor","onHover","isHovered","Heart","styles","Diamond","Smiley","Star","isClicked","setIsClicked","star","heart","diamond","smiley","strokeWidths","onMouseLeave","myFeedbackApp","parsedMessage","encodeURIComponent","TextArea","FiveStarRatingDisplay","ResultsPageContent","displayPassFailContent","passFailContent","checkingSectionHeight","ResultsPageMedia","showImage","GraphCircle","animatedValue","setAnimatedValue","actualValue","setActualValue","strokeDasharray","ceil","GraphBar","GraphContainer","graphTextColor","printResultsInteractionData","ResultsPageContentPassed","ResultsPageContentFailed","ResultsPageResult","prettyPrintScoreData","getModuleBlock","ResultsPageDisplay","setDisplayPassFailContent","scoringByTopic","scoringByTopicPassmark","scoringInteractions","currentTopicBlock","interactionsInTopicScoring","interactionsInTopicIds","topicScoreData","cakes","landingPageCake_1","landingPageCake_2","landingPageCake_3","landingPageCake_4","landingPageCake_5","landingPageCake_6","ClickAndReveals","contextId","numPanels","updateClickAndRevealSeen","seen","reIndex","PanelColumn","ClickAndRevealSeenTick","imageDescription","doc","DOMParser","parseFromString","altTextForAnchorTag","labelContent","imgZoomIsActiveElement","includePanelBackground","includeLabel","clickAndRevealShowSeenStateBackgroundColor","clickAndRevealShowSeenStateTickColor","globalNavigation","panelImg","navigation","panelId","panelBlock","returnToLastFocused","findLastFocused","lastFocused","panel","panelLabel","Content","mediaChanged","setMediaChanged","minHeightInDev","ClickAndRevealContent","columnA","columnB","DOMLayout","clickAndReveals","modalPlaceholder","ColumnRowA","ColumnRowB","ClickAndRevealDisplay","EditCardWrapper","arrayToGridLike","Masonry","maxColumns","maxGridWidth","cells","imgsLoadedProgress","frame","callTickFromResize","cellMinWidth","tallestCell","cellHeights","cell","rowIndex","columnIndex","currentCell","updatedCells","cellAboveCurrentCell","offsetTop","baselines","baseline","grids","settings","uniformHeightBreakpoints","gridTemplateColumns","msGridColumns","getUniformHeightsLayout","gridCellCounter","uniformHeightsLayout","row","gridCell","msGridColumn","msGridRow","getBannerColumnsLayout","newChildren","bannerColumnsLayout","gridColumn","gridRow","gridTemplateRows","msGridColumnSpan","msGridRowSpan","bannerColumns","ContentCards","gridContainer","cardOrder","imagesInCards","cards","card","minCellWidth","checkBannerColumnsForDefaultImage","ButtonWrapper","ContentCard","mediaPadding","medias","mediaIndex","_props","includeCardBackground","contentcardBackgroundOpacity","includeButton","pdf","textMargin","mediaBorderRadius","ContentCardDisplay","selectedOptions","setSelectedOptions","optionQuestions","SelectOptionsContext","SelectOptionsRoot","dividerColor","dropDownBorderColor","optionsContainer","updatedSelectedOptions","borderBottom","data-select-options-parent-id","SelectOptions","SelectOption","dropDownTextColor","dropDownBorder","dropDownBorderRadius","dropDownBackgroundColor","selectOptionsContext","selectGroupIndex","menuIsOpen","nameId","isSearchable","control","textOverflow","components","innerProps","tick_mint","select","SelectOptionsDisplay","TopicIcon","topicIcon","isEditing","iconSelected","setIconSelected","TopicPanelDefaultIcon","TopicNameContainer","addImage","cardSize","shared","TopicPanel","imageFit","updateTopicComplete","displayedTopics","navigateToTopic","cardWidth","cardHeight","hideTopicsThatIncludeATopicPortal","completeInSequence","iconWidth","iconHeight","backgroundMedia","includeCustomText","positionTextBelow","iconSize","navigationEnabled","interactionsInTopicSeen","addTopicPortalMedia","topicPortalContainerBlock","topicPortalMediaBlock","topicPortalMediaBlockRef","_addTopicPortalMedia_","removeTopicPortalMedia","_removeTopicPortalMedia_","TopicPortalContainer","topicIncludesPortal","hiddenFromPortal","getTopicPortalContainerBlock","getTopicPortalContainerBlockChildrenData","addMedia","removeMedia","tId","updateTopicPortalMedia","topicMedia","topicPortal","TopicPortalMedia","TopicPortalDisplay","feedbackNonScoring","feedbackScoring","textAreaStyle","setTextAreaStyle","isSubmitted","updateTextAreaStyle","submitToCollect","chameleonTextElement","correctAnswerParsed","shouldDispatch","FeedbackNonScoring","TextAreaDynamicHeight","initialValue","setInit","characterHeightMeasured","setCharacterHeightMeasured","characterHeight","proxy","_style_","computedStyles","computedFontFamily","computedFontSize","TextEntryVariable","variableName","_submitBtn_","setIsSubmitted","TextEntryVariableDisplay","TextEntryQuiz","correctAnswerRequirement","_message_","setMessage","questionTextElement","Boolean","CC_Text_Entry_Quiz_Placeholder","TextEntryQuizDisplay","Assessment","AssessmentIntroduction","AssessmentQuestion","AssessmentResults","AssessmentQuestions","AssessmentDisplay","includeMedia","AssessmentIntroductionDisplay","SubmitContinue","AssessmentQuestionContext","singleSelect","hasUpdatedScoreRaw","assessmentContext","questionCounterColor","interactionsInAssessment","questionIndex","resultsPage","newSelected","optionIds","labels","CheckboxRadioBtn","assessmentQuestionContext","AssessmentQuestionOption","optionBackgroundColor","optionCheckboxColor","optionCheckboxSelectedColor","numOptions","qNum","noMargin","optionBackgroundColorIsWhite","AssessmentQuestionOptions","QuestionCounter","LearnMore","assessmentQuestionOptionsChildren","updatedCorrectOptions","interactionContextValue","AssessmentCorrect","AssessmentIncorrect","ScoreBar","hidden","ReVisitTryAgain","indexA","targetQuestion","resultsPercentTextColor","attemptCounterTextColor","questionTitleColor","showFeedbackText","backgroundPanelColor","backgroundPanelBorderRadius","backgroundPanelDropShadow","feedbackPassed","feedbackFailed","showCorrect","setShowCorrect","numCorrect","assessmentBlock","getQuestionsInAssessment","hasNotBeenAttempted","resultsKeys","attemptCounts","highestAttemptCount","getAttempt","allQuestionsMaxAttempted","enableRetryAssessmentBtn","visible","updatePassedFailed","resultsInDev","includeLearnMore","learnMoreLocation","indexB","hasUsedAllAttempts","unlockAssessment","retryAssessment","RetryAssessment","FeedbackPassed","FeedbackFailed","ContinueButtonBranching","defaultBtn","passedBtn","failedBtn","branchingBtn","FooterButtonsWrapper","AssessmentResultsDisplay","DragHandle","elementRef","inverseScaleFactor","isInput","move_cert_input","Drag_Icon_Blue","onPointerDown","offsetX","offsetY","onPointerMove","inverseScaleFactorClientX","inverseScaleFactorClientY","dragValueX","dragValueY","onPointerUp","ResizeHandle","onDrag","resize_cert_input","Resize_Icon","handle","handleSize","getBase64StringFromDataURL","dataURL","getImgSrcAsBase64String","reader","FileReader","onloadend","base64","readAsDataURL","base64ToArrayBuffer","binaryString","atob","bytes","Uint8Array","charCodeAt","buffer","blobToBase64","fileName","imgType","certificateType","onComplete","imgSrcAsBase64String","bkgImgBytes","html2canvas","allowTaint","useCORS","toBlob","newImg","revokeObjectURL","imgBytes","PDFDocument","pdfDoc","embedImgType","bkgImg","embedPng","page","addPage","drawImage","pdfBytes","download","Certificate_1_SVG","xmlnsXlink","xmlSpace","Certificate_2_SVG","Certificate_3_SVG","InputText","CertificateTemplateFields","date","courseName","coordinates","certificatePadding","learnerName","LearnerName","CertificateTemplate","certificateContext","CertificateContext","certificateTemplateIndex","certificateTemplateColor","certificateTemplateTitle","generatingPDF","chameleonLogoForCertificate","setCoordinates","logoCoords","svgContainer","learnerNameElement","courseNameElement","dateElement","changeColorElement","changeColorElements","logoScale","leftRight","CertificateTemplates","certificateDefaultSize","certificateContextValue","certificateRef","certificateImgSize","resetResponsiveStyles","Certificate","CertificateDefaultPNG","imgId","textFields","downloadBtn","setGeneratingPDF","setScaleFactor","certificateId","imgSrcToArray","certificateWidth","calculatedScaleFactor","data-html2canvas-ignore","generatePDFFromCanvas","CertificateMedia","Certificates","CertificateTextFields","CertificateTextField","txtProps","coords","txtDoc","spans","strong","em","u","italic","underline","initializeFontSizeScaleFactor","localCoords","setLocalCoords","delaySetBlockProps","defaultLeft","defaultWidth","defaultTop","fontStyle","parsedLeft","parsedTop","CertificateDisplay","InteractionComponents","FlipCard","Interactions_Editor","Interaction","getInteractionsSeen","Interactions","addNextInteractionToInteractionsSeen","ModuleHasAudioMessage","renderedModuleHasAudioMessageBlock","okBtn","Audio_Illustration","REVIEW_MODE_WINDOW","TopicContainer","_backgroundImage_","getModuleIsFreeScrollingDesktop","reviewToolPostMessage","postMessageData","postMessage","debounceScrolling","oldTopic","newTopic","topicUpdated","oldPosition","newPosition","windowScrollInfo","scrollDirection","inView","moduleHasAudio","ReadsHostingContext","hostingContext","session_data","learning_module_session","transformedAssessments","transformedScoreData","getSCORMVersion","chameleonOrigins","bookmarkState","editModuleHasAudioMessage","setEditModuleHasAudioMessage","setAudioAcknowledged","bookmarkingEnabled","topicList","interactionNameUpdates","scormBlock","runExit","TopicAssessmentContainer","showModuleHasAudioMessage","compareIds","topicInteraction","topicSid","targetTopic","targetInteraction","targetInteractionIndex","updatedInteractionsSeen","updatedInteractionsOpen","targetSectionId","targetSectionElement","navLoadingIndicator","loadingSpinnerChild","getNavLoadingIndicator","backgroundColorOrGradient","locationTimeOut","moduleTopicsAndInteractionsData","navToInteractionMessage","origin","setCurrentInteraction","firstInteractionId","Header_v2","Interactions_Module","parseFontUrl","chunks","fontName","fontExtension","fontFormat","ttf","otf","loadAssets","fontsFromThemeButtons","getCustomFonts","getCustomFontNames","f","fontFamilyMarks","anyFontOrFontFamilyPropOnABlock","fontFamilyMark","trimStart","trimEnd","userSelectedFonts","addFont","targetWindow","head","styleTag","onFontLoaded","IS_CHAMELEON_EDITOR","frames","fontIsCustomFont","WebFont","google","families","loading","inactive","fontloading","WebFontConfig","loadFonts","familyName","fvd","fontactive","fontinactive","getModuleImages","extension","require","smoothscroll","polyfill","hasRemote","loadTheme","checkFontFamilyDisplays","ccURL","HostingWrapper","moduleImages","ReactDOM","__assign","assign","__importStar","react_1","children_1","defaultModuleState","history","ModuleReducer","histf","_a","to_1","ti","int","topicID","histb","pop","_b","top_1","inter","goToPath","goBack","goForward","Select","useReducer","Fragment","displayName","__export","__makeTemplateObject","cooked","__importDefault","templateObject_1","styled_1","core_1","styled_system_1","Box","alignSelf","gridArea","backgroundRepeat","borderTop","borderRight","borderLeft","box_1","Flexbox","alignContent","flexBasis","variant","letterSpacing","defaultState","sidebarlist","EditContext","useSidebar","pushSidebarItem","sl","popSidebarItem","clearSidebarList","NavContext","boxed","search","networkRequestActive","networkAvailable","toggleMenu","Renderer","plugins","parsedPlugins","config","onRenderedBlock","renderRoot","editorPlugin","editableFields","Editable","creator_ui_1","useCarousel_1","carouselAnimator_1","carouselNavigation_1","interaction_1","useCarousel","complete","boxSizing","CarouselAnimator","CarouselNavigation","topic_1","autoComplete","TopicContext","_c","editableContainer","forwardRef","onKeyPress","templateObject_2","templateObject_3","templateObject_4","navbarLink_1","dropDown_1","navArrow_1","navbarContext_1","ListItem","DropDownList","ul","DropDownListItem","LogoIcon","NavItem","Link","paddingRight","NavArrow","DropDown","Core","__spreadArrays","il","jl","kind","elements","es","module_1","Topic","modCtx","Topics","Bar","BurgerIcon","showDrawer","setDrawer","Drawer","Overlay","DrawerLink","Item","DrawerItem","listStyle","Container","DropDownItem","DropDownCtx","onBodyClick","Logo","x1","y1","x2","y2","stopColor","I","navItem_1","Admin","profileImg","SearchBar","showSearch","NavigationList","Navigation","msMatchesSelector","webkitMatchesSelector","ancestor","documentElement","parentElement","URLs","local","development","staging","production","anz","qu","params","env","render_1","edit_1","useModule_1","useSidebar_1","frame_1","Editor","useModule","mr","Sidebar","BrowserWindow","Frame","flexbox_1","borders","buttonStyle","px","Card","Grid","gridGap","gridRowGap","gridColumnGap","gridAutoFlow","gridAutoRows","gridAutoColumns","gridTemplateAreas","text_1","Heading","Icon","WindowButton","Indicator","bg","atoms_1","__rest","getOwnPropertySymbols","propertyIsEnumerable","RowContainer","BackIcon","Animation","ScrollAnimator","AnimationGroup","BranchButton","CarouselReducer","Goto","num","initialSlide","goTo","carousel_1","heighAwareComponent_1","setHeight","slides","isLeft","forwardProps","HeightAwareComponent","others","measuredRef","only","indicators","Choice","Choices","align","_d","other","_e","help","Description","DragAndDrop","DragItem","DropItem","sticky","Paragraph","Quiz","Rating","Result","SingleChoice","contain","mx","Title","TopicTitle","returnFocus","requiredProps","fields","nativeEvent","Color","Enum","RichText","topics_1","block_1","Block","onReturn","cloneModule","Remove","react_frame_component_1","FrameContextConsumer","frameContext","Player","ExampleSerializedNestedRoot","ExampleSerializedNested","ExampleSerialized","new","user_1","search_1","logo_1","navigation_1","drawer_1","burger_1","bar_1","lock_1","divider_1","networkActivity_1","Navbar","toggler","currentUser","lock","showNetworkActivity","showLock","setDisplay","isMobileDisplay","Lock","NetworkActivity","showActivity","firstName","profileImage","Divider","LockedIcon","UnlockedIcon","LockIcon","locked","setLocked","loadingSpinner_1","emotion_1","Ring","SpinContainer","configurable","writable","queryParams","URLSearchParams","highlightActiveElement","currentActiveElement","ACTIVE_ELEMENT_MARKER","currentActiveElementIsSection","topOffset","leftOffset","widthOffset"],"mappings":"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M,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,EAAE,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,IAAI,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,IAAI,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,IAAI,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,IAAI,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,IAAI,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,IAAI,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,IAAI,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,IAAI,EAAI,CAAC,IAAI,CAAC,EAAI,IAAI,EAAI,CAAC,OAAO,GAAK,IAAI,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,OAAO,OAAO,GAAG,GAAK,EAAE,EAAI,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,OAAO,MAAM,GAAG,GAAK,EAAE,EAAI,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,IAAI,IAAI,KAAK,GAAK,EAAE,EAAI,IAAI,GAAK,EAAE,OAAS,CAAC,CAAC,GAAK,KAAK,GAAK,CAAC,CAAC,IAAM,EAAE,GAAK,KAAK,GAAK,EAAE,GAAK,CAAC,EAAI,EAAE,EAAI,CAAC,EAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,OAAO,CAAC,EAAE,IAAI,EAAI,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAI,CAAC,CAAC,OAAO,OAAO,CAAC,OAAO,OAAO,EAAE,OAAO,OAAO,EAAE,MAAM,QAAQ,GAAI,GAAO,GAAK,GAAG,GAAK,SAAS,GAAK,4BAA4B,IAAK,GAAO,CAAC,GAAK,KAAK,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,EAAE,cAAe,cAAe,GAAG,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,KAAM,GAAK,GAAG,GAAK,EAAE,GAAK,EAAE,GAAK,GAAG,GAAK,EAAE,GAAK,WAAW,GAAK,+BAA+B,IAAK,GAAO,CAAC,GAAK,KAAK,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,MAAM,OAAO,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,EAAE,GAAG,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,IAAI,KAAK,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,GAAG,GAAK,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,GAAK,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,GAAK,cAAc,GAAK,UAAU,GAAK,EAAE,IAAM,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,oBAAoB,IAAK,IAAQ,GAAK,EAAE,GAAK,IAAI,GAAK,EAAE,GAAK,GAAG,CAAC,IAAM,EAAE,IAAM,GAAG,GAAK,EAAE,GAAK,MAAM,OAAS,GAAG,GAAK,EAAE,GAAK,CAAC,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,IAAI,EAAI,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,IAAI,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,MAAM,OAAO,GAAG,GAAK,EAAE,EAAI,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,OAAO,MAAM,GAAG,GAAK,EAAE,EAAI,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,IAAI,IAAI,KAAK,GAAK,EAAE,EAAI,IAAI,GAAK,EAAE,OAAS,CAAC,CAAC,GAAK,KAAK,GAAK,CAAC,CAAC,IAAM,EAAE,GAAK,KAAK,GAAK,EAAE,GAAK,CAAC,EAAI,EAAE,EAAI,CAAC,EAAI,CAAC,EAAE,MAAM,OAAO,EAAE,MAAM,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,OAAO,CAAC,OAAO,OAAO,CAAC,EAAE,IAAI,EAAI,CAAC,CAAC,OAAO,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,QAAQ,EAAE,OAAO,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,QAAQ,EAAI,CAAC,CAAC,OAAO,OAAO,CAAC,QAAQ,QAAQ,CAAC,QAAQ,QAAQ,CAAC,OAAO,QAAQ,EAAE,OAAO,QAAQ,EAAE,QAAQ,QAAQ,GAAI,GAAM,GAAK,GAAG,GAAK,SAAS,GAAK,4BAA4B,IAAK,GAAO,CAAC,GAAK,KAAK,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,cAAe,cAAe,cAAe,GAAG,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,GAAG,EAAI,EAAE,GAAK,EAAE,GAAK,SAAS,GAAK,6BAA6B,IAAK,GAAO,CAAC,GAAK,KAAK,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,OAAO,QAAQ,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,EAAE,GAAG,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,IAAI,KAAK,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,GAAG,GAAK,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,GAAK,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,GAAK,cAAc,GAAK,UAAU,GAAK,EAAE,IAAM,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,oBAAoB,IAAK,IAAQ,GAAK,EAAE,GAAK,IAAI,GAAK,EAAE,GAAK,GAAG,CAAC,IAAM,EAAE,IAAM,GAAG,GAAK,EAAE,GAAK,OAAO,OAAS,GAAG,GAAK,EAAE,GAAK,CAAC,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,IAAI,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,GAAK,EAAE,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,EAAE,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,GAAG,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,IAAI,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,IAAI,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,IAAI,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,IAAI,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,IAAI,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,IAAI,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,IAAI,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,E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AM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,MAAM,EAAI,EAAE,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,EAAE,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,EAAE,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,MAAM,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,QAAQ,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,QAAQ,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,QAAQ,EAAI,EAAE,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,QAAQ,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,QAAQ,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,QAAQ,EAAI,CAAC,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,QAAQ,EAAI,EAAE,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,QAAQ,EAAI,CAAC,MAAM,CAAC,EAAI,eAAe,EAAI,CAAC,OAAO,GAAK,IAAI,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,GAAK,MAAM,EAAI,CAAC,QAAQ,MAAM,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,GAAK,MAAM,EAAI,CAAC,QAAQ,OAAO,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,KAAM,EAAI,CAAC,QAAQ,MAAM,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,MAAM,EAAI,CAAC,QAAQ,OAAO,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,OAAO,EAAI,CAAC,QAAQ,MAAM,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,OAAO,EAAI,CAAC,QAAQ,OAAO,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,OAAO,EAAI,CAAC,QAAQ,MAAM,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,OAAO,EAAI,CAAC,QAAQ,OAAO,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,OAAO,EAAI,CAAC,QAAQ,MAAM,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,MAAM,EAAI,CAAC,QAAQ,OAAO,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,OAAO,EAAI,CAAC,QAAQ,MAAM,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,OAAO,EAAI,CAAC,QAAQ,OAAO,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,OAAO,EAAI,CAAC,QAAQ,MAAM,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,OAAO,EAAI,CAAC,QAAQ,OAAO,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,QAAQ,EAAI,CAAC,QAAQ,MAAM,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,QAAQ,EAAI,CAAC,QAAQ,OAAO,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,QAAQ,EAAI,CAAC,QAAQ,MAAM,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,QAAQ,EAAI,CAAC,QAAQ,OAAO,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,OAAO,EAAI,CAAC,QAAQ,MAAM,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,QAAQ,EAAI,CAAC,QAAQ,OAAO,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,QAAQ,EAAI,CAAC,QAAQ,MAAM,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,CAAC,EAAI,KAAM,EAAI,GAAG,EAAI,QAAQ,EAAI,CAAC,QAAQ,OAAO,GAAG,GAAK,CAAC,EAAE,EAAE,GAAG,GAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAI,eAAe,EAAI,CAAC,QAAQ,MAAM,KAAK,GAAK,EAAE,EAAI,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,OAAO,MAAM,GAAG,GAAK,EAAE,EAAI,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,IAAI,IAAI,KAAK,GAAK,EAAE,EAAI,IAAI,GAAK,EAAE,OAAS,CAAC,CAAC,GAAK,KAAK,GAAK,CAAC,CAAC,IAAM,EAAE,GAAK,KAAK,GAAK,EAAE,GAAK,CAAC,EAAI,EAAE,EAAI,CAAC,EAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAI,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,QAAQ,EAAE,OAAO,OAAO,EAAE,OAAO,SAAS,GAAI,GAAM,GAAK,GAAG,GAAK,SAAS,GAAK,4BAA4B,IAAK,GAAO,CAAC,GAAK,KAAK,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,EAAE,cAAe,cAAe,GAAG,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,GAAG,EAAI,EAAE,GAAK,EAAE,GAAK,SAAS,GAAK,6BAA6B,IAAK,GAAO,CAAC,GAAK,KAAK,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,MAAM,QAAQ,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,EAAE,GAAG,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,IAAI,KAAK,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,GAAG,GAAK,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,GAAK,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,GAAK,cAAc,GAAK,UAAU,GAAK,EAAE,IAAM,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,oBAAoB,IAAK,GAAO,CAAC,GAAK,KAAK,GAAK,CAAC,CAAC,IAAM,EAAE,GAAK,KAAK,GAAK,EAAE,GAAK,CAAC,EAAI,EAAE,EAAI,CAAC,EAAI,CAAC,CAAC,MAAM,OAAO,EAAE,MAAM,OAAO,EAAE,OAAO,OAAO,CAAC,OAAO,QAAQ,EAAI,CAAC,EAAE,OAAO,OAAO,CAAC,OAAO,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,QAAQ,EAAI,CAAC,EAAE,MAAM,OAAO,EAAE,OAAO,OAAO,CAAC,OAAO,OAAO,CAAC,MAAM,QAAQ,GAAI,GAAM,GAAK,GAAG,GAAK,SAAS,GAAK,4BAA4B,IAAK,GAAO,CAAC,GAAK,KAAK,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,EAAE,cAAe,cAAe,GAAG,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,GAAG,EAAI,EAAE,GAAK,EAAE,GAAK,SAAS,GAAK,6BAA6B,IAAK,GAAO,CAAC,GAAK,KAAK,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,OAAO,QAAQ,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,EAAE,GAAG,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,IAAI,KAAK,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,GAAG,GAAK,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,GAAK,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,GAAK,cAAc,GAAK,UAAU,GAAK,EAAE,IAAM,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,oBAAoB,IAAK,GAAO,CAAC,GAAK,KAAK,GAAK,CAAC,CAAC,IAAM,EAAE,GAAK,KAAK,GAAK,EAAE,GAAK,CAAC,EAAI,EAAE,EAAI,CAAC,EAAI,CAAC,CAAC,KAAM,OAAO,EAAE,MAAM,MAAO,EAAE,MAAO,OAAO,CAAC,OAAO,OAAQ,EAAI,CAAC,EAAE,MAAO,OAAO,CAAC,OAAO,MAAO,CAAC,KAAM,OAAO,EAAE,MAAM,OAAQ,EAAI,CAAC,EAAE,MAAM,OAAO,EAAE,OAAO,OAAO,CAAC,OAAO,OAAO,CAAC,MAAM,QAAQ,GAAI,GAAM,GAAK,GAAG,GAAK,SAAS,GAAK,4BAA4B,IAAK,GAAO,CAAC,GAAK,KAAK,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,EAAE,EAAE,EAAE,GAAG,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,GAAG,EAAI,EAAE,GAAK,EAAE,GAAK,SAAS,GAAK,6BAA6B,IAAK,GAAO,CAAC,GAAK,KAAK,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,OAAO,QAAQ,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,EAAE,GAAG,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,IAAI,KAAK,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,GAAG,GAAK,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,GAAK,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,GAAK,cAAc,GAAK,UAAU,GAAK,EAAE,IAAM,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,oBAAoB,IAAK,GAAO,CAAC,GAAK,KAAK,GAAK,CAAC,CAAC,IAAM,EAAE,GAAK,KAAK,GAAK,EAAE,GAAK,CAAC,EAAI,EAAE,EAAI,CAAC,EAAI,CAAC,CAAC,MAAO,MAAM,EAAE,MAAM,OAAO,EAAE,MAAO,MAAO,EAAE,MAAM,OAAO,CAAC,MAAM,OAAO,CAAC,OAAO,QAAQ,EAAI,CAAC,CAAC,EAAE,GAAG,CAAC,KAAM,MAAO,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,OAAO,EAAE,KAAM,QAAQ,EAAI,CAAC,EAAE,QAAQ,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,QAAQ,CAAC,OAAO,OAAO,EAAE,OAAO,QAAQ,GAAI,GAAM,GAAK,GAAG,GAAK,SAAS,GAAK,4BAA4B,IAAK,GAAO,CAAC,GAAK,KAAK,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,EAAE,EAAE,EAAE,GAAG,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,GAAG,EAAI,EAAE,GAAK,EAAE,GAAK,SAAS,GAAK,6BAA6B,IAAK,GAAO,CAAC,GAAK,KAAK,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,OAAO,QAAQ,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,EAAE,GAAG,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,IAAI,KAAK,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,GAAG,GAAK,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,GAAK,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,GAAK,cAAc,GAAK,UAAU,GAAK,EAAE,IAAM,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,oBAAoB,IAAK,GAAO,CAAC,GAAK,KAAK,GAAK,CAAC,CAAC,IAAM,EAAE,GAAK,KAAK,GAAK,EAAE,GAAK,CAAC,EAAI,EAAE,EAAI,CAAC,EAAI,CAAC,EAAE,OAAO,QAAQ,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,OAAO,EAAE,MAAM,MAAO,EAAE,IAAK,MAAO,EAAE,OAAO,KAAM,EAAE,MAAM,OAAO,EAAE,KAAM,MAAO,CAAC,EAAE,GAAG,EAAE,KAAM,MAAO,CAAC,MAAM,QAAQ,EAAI,CAAC,CAAC,EAAE,MAAO,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,MAAO,MAAO,CAAC,KAAM,MAAO,CAAC,IAAI,MAAO,CAAC,MAAO,MAAO,CAAC,EAAE,GAAG,CAAC,MAAO,MAAO,CAAC,OAAO,OAAO,EAAE,QAAQ,SAAS,EAAI,CAAC,EAAE,OAAO,MAAM,EAAE,OAAO,OAAO,EAAE,OAAO,MAAM,EAAE,OAAO,QAAQ,EAAE,MAAM,OAAO,EAAE,MAAM,QAAQ,EAAE,MAAM,QAAQ,CAAC,MAAM,QAAQ,CAAC,KAAK,OAAO,CAAC,MAAM,QAAQ,CAAC,MAAM,QAAQ,CAAC,QAAQ,QAAQ,GAAI,GAAM,GAAK,GAAG,GAAK,SAAS,GAAK,4BAA4B,IAAK,GAAO,CAAC,GAAK,KAAK,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,cAAe,cAAe,cAAe,GAAG,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,GAAG,EAAI,EAAE,GAAK,EAAE,GAAK,SAAS,GAAK,6BAA6B,IAAK,GAAO,CAAC,GAAK,KAAK,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,OAAO,QAAQ,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,EAAE,GAAG,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,IAAI,KAAK,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,GAAG,GAAK,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,GAAK,CAAC,EAAI,EAAE,EAAI,EAAE,GAAK,GAAG,GAAK,cAAc,GAAK,UAAU,GAAK,EAAE,IAAM,EAAE,GAAK,EAAE,GAAK,EAAE,GAAK,oBAAoB,IAAK,IAAQ,IAAM,GAAG,GAAK,IAAI,IAAM,EAAE,GAAK,GAAG,CAAC,IAAM,EAAE,IAAM,GAAG,GAAK,EAAE,GAAK,OAAO,OAAS,GAAG,GAAK,EAAE,GAAK,CAAC,EAAI,CAAC,EAAI,EAAE,EAAI,IAAI,GAAK,IAAI,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,GAAK,MAAM,EAAI,EAAE,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,GAAK,MAAM,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,MAAM,EAAI,EAAE,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,MAAM,EAAI,EAAE,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,EAAE,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,EAAE,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,EAAE,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,OAAO,EAAI,EAAE,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,MAAM,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,QAAQ,EAAI,EAAE,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,QAAQ,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,QAAQ,EAAI,EAAE,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,QAAQ,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,QAAQ,EAAI,EAAE,MAAM,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,QAAQ,EAAI,CAAC,IAAI,CAAC,EAAI,CAAC,EAAI,CAAC,MAAO,EAAI,CAAC,IAAI,EAAI,CAAC,EAAI,CA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CA,eACA,eACA,aACA,SACA,cACA,YACA,sBACA,SACA,WACA,SACA,UACA,iBACA,WACA,WACA,mBACA,OACA,mBACA,UACA,YACA,YACA,WACA,UACA,YACA,SACA,mBACA,cACA,cACA,UACA,YACA,QACA,qBACA,UACA,aACA,kBACA,kBACA,mBACA,OACA,gBACA,SACA,mBACA,eACA,WACA,YACA,sBAGFA,GAAQzsB,MAAMmU,KAAK,IAAIC,IAAJ,cAAYqY,IAAZ,IC1GW,CAC5B,UACA,OACA,eACA,gBACA,WACA,OACA,QACA,UACA,aACA,kBACA,iBACA,mBACA,UACA,SACA,SACA,QACA,SACA,cACA,UACA,OACA,WACA,cACA,gBACA,mBACA,OACA,aACA,gBACA,QACA,QACA,gBACA,QACA,UACA,kBACA,UACA,SACA,UACA,WACA,mBACA,cACA,cACA,yBACA,WACA,WACA,YACA,YACA,QACA,QACA,QACA,UACA,aACA,SACA,mBACA,cACA,kBACA,gBACA,gBACA,eACA,aACA,iBACA,YACA,aACA,cACA,SACA,2BACA,gBACA,QACA,eACA,aACA,QACA,UACA,UACA,SACA,UACA,eACA,sBACA,UACA,gBACA,iBACA,kBACA,aACA,QACA,gBACA,QACA,WACA,SACA,UACA,WACA,OACA,OACA,OACA,iBACA,OACA,QACA,YACA,UACA,OACA,SACA,wBACA,OACA,aACA,SACA,YACA,aACA,UACA,eACA,sBACA,eACA,oBACA,qBACA,cACA,OACA,YACA,eACA,eACA,gBACA,gBACA,aACA,aACA,UACA,YACA,eACA,aACA,SACA,UACA,eACA,mBACA,iBACA,kBACA,aACA,gBACA,gBACA,kBACA,iBACA,gBACA,YACA,UACA,SACA,mBACA,wBACA,aACA,SACA,QACA,eACA,aACA,UACA,QACA,iBACA,cACA,aACA,WACA,YACA,UACA,UACA,eACA,YACA,QACA,UACA,kBACA,SACA,aACA,QACA,uBACA,wBACA,+BACA,4BACA,gCACA,6BACA,qBACA,gBACA,cACA,QACA,mBACA,WACA,oBACA,aACA,oBACA,UACA,SACA,0BACA,iBACA,gBACA,QACA,eACA,UACA,cACA,QACA,YACA,SACA,iBACA,WACA,aACA,gBACA,UACA,aACA,eACA,iBACA,cACA,OACA,UACA,SACA,kBACA,gBACA,iBACA,eACA,aACA,iBACA,QACA,kBACA,eACA,kBACA,aACA,QACA,UACA,YACA,iBACA,SACA,QACA,SACA,YACA,cACA,cACA,WACA,UACA,YACA,QACA,QACA,iBACA,oBACA,aACA,UACA,YACA,SACA,SACA,eACA,qBACA,cACA,eACA,SACA,aACA,SACA,aACA,QACA,aACA,WACA,qBACA,YACA,iBACA,SACA,UACA,oBACA,eACA,QACA,SACA,WACA,QACA,WACA,SACA,oBACA,iBACA,OACA,eACA,WACA,QACA,QACA,YACA,YACA,kBACA,aACA,cACA,eACA,cACA,YACA,UACA,eACA,cACA,SACA,QACA,SACA,YACA,YACA,qBACA,mBACA,eACA,oBACA,oBACA,YACA,gBACA,UACA,WACA,wBACA,eACA,YACA,cACA,cACA,eACA,gBACA,UACA,SACA,YACA,SACA,cACA,UACA,UACA,mBACA,gBACA,SACA,iBACA,UACA,mBACA,cACA,uBACA,WACA,QACA,kBACA,SACA,oBACA,iBACA,gBACA,WACA,aACA,WACA,gBACA,YACA,eACA,WACA,QACA,SACA,cACA,SACA,aACA,QACA,QACA,cACA,cACA,YACA,YACA,cACA,aACA,iBACA,QACA,YACA,QACA,yBACA,mBACA,kBACA,mBACA,yBACA,aACA,cACA,QACA,mBACA,cACA,eACA,cACA,wBACA,uBACA,iBACA,6BACA,4BACA,aACA,YACA,YACA,UACA,WACA,YACA,UACA,UACA,kBACA,QACA,MACA,QACA,gBACA,UACA,WACA,mBACA,eACA,QACA,SACA,YACA,mBACA,aACA,WACA,YACA,WACA,WACA,SACA,SACA,QACA,UACA,eACA,aACA,YACA,YACA,YACA,sBACA,4BACA,aACA,YACA,WACA,UACA,gBACA,aACA,gBACA,eACA,aACA,mBACA,QACA,eACA,mBACA,WACA,eACA,uBACA,UACA,cACA,WACA,SACA,UACA,UACA,YACA,UACA,gBACA,YACA,kBACA,WACA,QACA,SACA,SACA,WACA,UACA,eACA,UACA,WACA,UACA,eACA,QACA,gBACA,qBACA,oBACA,eACA,MACA,UACA,UACA,eACA,eACA,eACA,SACA,gBACA,WACA,iBACA,gBACA,SACA,oBACA,QACA,SACA,aACA,aACA,UACA,WACA,YACA,OACA,wBACA,eACA,cACA,WACA,cACA,eACA,aACA,eACA,cACA,iBACA,SACA,iBACA,UACA,SACA,SACA,QACA,OACA,SACA,SACA,WACA,YACA,SACA,iBACA,UACA,SACA,kBACA,UACA,eACA,UACA,UACA,eACA,YACA,eACA,QACA,cACA,aACA,uBACA,YACA,cACA,OACA,cACA,eACA,gBACA,gBACA,kBACA,iBACA,WACA,WACA,YACA,gBACA,gBACA,uBACA,0BACA,2BACA,uBACA,mBACA,qBACA,4BACA,iBACA,kBACA,qBACA,sBACA,yBACA,kBACA,qBACA,uBACA,0BACA,uBACA,0BACA,mBACA,UACA,UACA,QACA,kBACA,UACA,cACA,QACA,eACA,iBACA,QACA,iBACA,aACA,cACA,cACA,QACA,eACA,iBACA,YACA,WACA,YACA,OACA,mBACA,0BACA,QACA,iBACA,iBACA,OACA,aACA,eACA,WACA,YACA,eACA,eACA,OACA,WACA,MACA,SACA,QACA,kBACA,QACA,OACA,oBACA,0BACA,MACA,QACA,eACA,mBACA,cACA,iBACA,QACA,UACA,QACA,YACA,gBACA,YACA,QACA,QACA,UACA,iBACA,YACA,SACA,aACA,iBACA,aACA,aACA,QACA,QACA,QACA,QACA,QACA,iBACA,WACA,YACA,WACA,UACA,OACA,YACA,iBACA,eACA,SACA,cACA,YACA,SACA,SACA,QACA,SACA,YACA,OACA,QACA,aACA,YACA,oBACA,aACA,SACA,kBACA,UACA,QACA,cACA,UACA,WACA,SACA,SACA,OACA,iBACA,gBACA,gBACA,iBACA,eACA,SACA,SACA,QACA,WACA,SACA,cACA,aACA,cACA,cACA,cACA,cACA,eACA,oBACA,yBACA,mBACA,4BACA,iCACA,wBACA,2BACA,oBACA,eACA,uBACA,oBACA,iBACA,WACA,cACA,aACA,kBACA,YACA,cACA,WACA,mBACA,SACA,UACA,cACA,mBACA,kBACA,kBACA,iBACA,YACA,OACA,aACA,wBACA,oBACA,iBACA,eACA,WACA,UACA,kBACA,mBACA,WACA,gBACA,YACA,WACA,oBACA,oBACA,gBACA,UACA,qBACA,OACA,QACA,gBACA,UACA,qBACA,OACA,OACA,WACA,UACA,UACA,UACA,WACA,UACA,YACA,eACA,eACA,YACA,eACA,YACA,WACA,SACA,cACA,SACA,OACA,UACA,YACA,UACA,YACA,SACA,gBACA,aACA,eACA,SACA,cACA,cACA,WACA,eACA,eACA,oBACA,QACA,cACA,eACA,cACA,WACA,UACA,YACA,mBACA,OACA,UACA,UACA,eACA,QACA,iBACA,OACA,iBACA,mBACA,QACA,iBACA,QACA,SACA,UACA,QACA,QACA,WACA,UACA,uBACA,UACA,eACA,aACA,SACA,aACA,wBACA,uBACA,cACA,aACA,OACA,WACA,yBACA,gBACA,aACA,WACA,iBACA,sBACA,gBACA,UACA,QACA,cACA,cACA,cACA,SACA,UACA,eACA,UACA,gBACA,MACA,qBACA,eACA,sBACA,iBACA,mBACA,cACA,YACA,SACA,SACA,aACA,cACA,aACA,aACA,UACA,UACA,YACA,SACA,SACA,UACA,UACA,UACA,uBACA,eACA,aACA,mBACA,aACA,oBACA,qBACA,oBACA,YACA,kBACA,2BACA,kCACA,mBACA,qBACA,oBACA,qBACA,kBACA,sBACA,kBACA,oBACA,sBACA,mBACA,qBACA,kBACA,gCACA,mBACA,+BACA,mBACA,iBACA,qBACA,mBACA,sBACA,oBACA,oBACA,uBACA,oBACA,qBACA,iCACA,oBACA,oBACA,qBACA,uBACA,mBACA,oBACA,qBACA,0BACA,qBACA,eACA,4BACA,oBACA,mBACA,mBACA,6BACA,gCACA,kCACA,mCACA,eACA,qBACA,eACA,mBACA,oBACA,qBACA,uBACA,kBACA,mBACA,sBACA,gBACA,mBACA,kBACA,qBACA,qBACA,iBACA,mBACA,mBACA,qBACA,sBACA,oBACA,uBACA,oBACA,0BACA,iBACA,2BACA,wBACA,yBACA,qBACA,iBACA,iBACA,sBACA,iBACA,gBACA,oBACA,oBACA,iBACA,sBACA,wBACA,iBACA,kBACA,kBACA,qBACA,0BACA,uBACA,8BACA,uBACA,wBACA,wBACA,8BACA,uBACA,kBACA,kBACA,oBACA,yBACA,sBACA,wBACA,qBACA,uBACA,4BACA,mBACA,kBACA,eACA,sBACA,uBACA,oBACA,oBACA,oBACA,oBACA,oBACA,yBACA,oBACA,sBACA,yBACA,oBACA,sBACA,mBACA,eACA,oBACA,qBACA,mBACA,qBACA,qBACA,kBACA,kBACA,6BACA,mBACA,mBACA,iBACA,wBACA,qBACA,oBACA,qBACA,gBACA,mBACA,wBACA,eACA,6BACA,aACA,kBACA,sBACA,sBACA,qBACA,wBACA,qBACA,mBACA,sBACA,sBACA,qBACA,sBACA,sBACA,oBACA,gBACA,gBACA,qBACA,mBACA,iBACA,uBACA,qBACA,oCACA,gBACA,qBACA,gBACA,mBACA,oBACA,oBACA,kBACA,qBACA,oBACA,yBACA,WACA,YACA,YACA,YACA,aACA,cACA,YACA,cACA,SACA,SACA,cACA,YACA,cACA,iBACA,UACA,KACA,kBACA,YACA,MACA,cACA,yBACA,YACA,YACA,cACA,WACA,UACA,cACA,UACA,kBACA,SACA,SACA,mBACA,WACA,cACA,WACA,gBACA,MACA,UACA,SACA,cACA,UACA,UACA,kBACA,iBACA,WACA,mBACA,WACA,SACA,YACA,iBACA,WACA,UACA,aACA,cACA,cACA,oBACA,qBACA,eACA,kBACA,UACA,YACA,UACA,cACA,UACA,UACA,mBACA,WACA,sBACA,UACA,cACA,YACA,SACA,gBACA,aACA,UACA,OACA,WACA,mBACA,sBACA,oBACA,UACA,aACA,aACA,OACA,WACA,eACA,aACA,UACA,mBACA,mBACA,YACA,iBACA,SACA,QACA,cACA,iBACA,QACA,iBACA,WACA,SACA,aACA,cACA,cACA,eACA,UACA,eACA,SACA,SACA,WACA,eACA,oBACA,YACA,YACA,iBACA,UACA,kBACA,kBACA,eACA,SACA,WACA,SACA,UACA,eACA,aACA,WACA,SACA,eACA,cACA,WACA,SACA,QACA,OACA,YACA,eACA,aACA,YACA,kBACA,eACA,eACA,WACA,WACA,kBACA,YACA,YACA,gBACA,aACA,UACA,gBACA,SACA,gBACA,YACA,SACA,YACA,SACA,mBACA,cACA,cACA,eACA,cACA,YACA,YACA,gBACA,UACA,YACA,YACA,UACA,WACA,eACA,UACA,YACA,QACA,gBACA,gBACA,eACA,gBACA,iBACA,kBACA,gBACA,kBACA,OACA,SACA,cACA,SACA,aACA,iBACA,YACA,SACA,MACA,gBACA,aACA,UACA,OACA,QACA,kBACA,wBACA,uBACA,oBACA,QACA,UACA,WACA,UACA,kBACA,UACA,SACA,SACA,WACA,cACA,UACA,kBACA,kBACA,QACA,mBACA,aACA,YACA,iBACA,cACA,eACA,uBACA,MACA,eACA,YACA,cACA,qBACA,yBACA,WACA,SACA,QACA,aACA,kBACA,mBACA,sBACA,kBACA,qBACA,YACA,cACA,YACA,WACA,aACA,UACA,mBACA,YACA,aACA,UACA,gBACA,WACA,UACA,aACA,aACA,UACA,SACA,SACA,cACA,SACA,UACA,UACA,gBACA,aACA,QACA,SACA,aACA,aACA,OACA,mBACA,kBACA,gBACA,kBACA,iBACA,mBACA,gBACA,aACA,gBACA,WACA,cACA,aACA,YACA,SACA,SACA,cACA,mBACA,aACA,aACA,uBACA,WACA,WACA,cACA,YACA,gBACA,kBACA,QACA,iBACA,wBACA,uBACA,QACA,SACA,eACA,UACA,sBACA,WACA,gBACA,SACA,YACA,YACA,mBACA,OACA,UACA,YACA,cACA,qBACA,YACA,OACA,YACA,eACA,mBACA,UACA,YACA,WACA,SACA,QACA,UACA,OACA,QACA,qBACA,aACA,cACA,YACA,YACA,qBACA,eACA,SACA,UACA,UACA,QACA,cACA,wBACA,0BACA,2BACA,gBACA,eACA,aACA,cACA,YACA,gBACA,WACA,UACA,cACA,YACA,UACA,WACA,UACA,UACA,aACA,UACA,aACA,cACA,eACA,SACA,mBACA,cACA,QACA,QACA,iBACA,WACA,YACA,iBACA,qBACA,UACA,SACA,OACA,SACA,WACA,QACA,cACA,SACA,eACA,QACA,cACA,YACA,eACA,eACA,QACA,QACA,WACA,OACA,QACA,UACA,WACA,cACA,WACA,kBACA,0BACA,WACA,kBACA,SACA,cACA,YACA,YACA,YACA,UACA,WACA,WACA,YACA,YACA,UACA,oBACA,cACA,YACA,aACA,YACA,aACA,aACA,SACA,OACA,YACA,WACA,aACA,cACA,eACA,wBACA,gBACA,cACA,mBACA,WACA,0BACA,sBACA,gBACA,WACA,kBACA,iBACA,gBACA,SACA,gBACA,aACA,uBAEA,eACA,qBDjzCyD85C,OAE3D,IAiBe95C,ME7GAo8E,GAhBM,SAAAv7E,GACnB,IAAMw7E,EAASx7E,EAAIhc,WAAW8K,MAAM,OADV,EAEQ0sF,EAAOA,EAAOp2G,OAAS,GAAG0pB,MAAM,MAFxC,WAEnB2sF,EAFmB,KAETC,EAFS,KAS1B,MAAO,CACLD,WACAC,gBACAC,WARiB,CACjBC,IAAK,WACLC,IAAK,YACLH,K,4BCDJ,IAAMI,GAAa,G,qkBCEnB,IAAM1lG,GAAQD,KACN/M,GAAagN,GAAbhN,S,GACqDA,KAAW8E,M,MAAhE9C,mB,OAAa,G,SAAIsD,qB,OAAe,G,SAAIO,gB,OAAU,G,GAEhD8sG,GAAyB12G,OAAO0D,OAAOkG,IAAuBxF,KAClE,SAAAmvD,GACE,OAAOA,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E,oBACA,OAAbF,GACT,OAAO,Q,oBClBX9gH,EAAOD,QAAU+B,IAA0B,4B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,mB,oBCA3C9B,EAAOD,QAAU+B,IAA0B,qC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,yB,oBCA3C9B,EAAOD,QAAU+B,IAA0B,2B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,0B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,qC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,sC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,qB,oBCA3C9B,EAAOD,QAAU+B,IAA0B,2B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,2C,oBCA3C9B,EAAOD,QAAU+B,IAA0B,iC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,oC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,kC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,2B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,yB,oBCA3C9B,EAAOD,QAAU+B,IAA0B,2B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,gC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,mC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,oC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,wB,oBCA3C9B,EAAOD,QAAU+B,IAA0B,sC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,mD,oBCA3C9B,EAAOD,QAAU+B,IAA0B,mD,oBCA3C9B,EAAOD,QAAU+B,IAA0B,mD,oBCA3C9B,EAAOD,QAAU+B,IAA0B,mD,oBCA3C9B,EAAOD,QAAU+B,IAA0B,mD,oBCA3C9B,EAAOD,QAAU+B,IAA0B,mD,oBCA3C9B,EAAOD,QAAU+B,IAA0B,uC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,oB,oBCA3C9B,EAAOD,QAAU+B,IAA0B,0B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,mB,oBCA3C9B,EAAOD,QAAU+B,IAA0B,qD,oBCA3C9B,EAAOD,QAAU+B,IAA0B,mC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,8B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,yB,oBCA3C9B,EAAOD,QAAU+B,IAA0B,wB,oBCA3C9B,EAAOD,QAAU+B,IAA0B,0B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,uC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,kB,oBCA3C9B,EAAOD,QAAU+B,IAA0B,wB,oBCA3C9B,EAAOD,QAAU+B,IAA0B,mB,oBCA3C9B,EAAOD,QAAU+B,IAA0B,qB,oBCA3C9B,EAAOD,QAAU+B,IAA0B,+B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,wB,oBCA3C9B,EAAOD,QAAU+B,IAA0B,2B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,oC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,6B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,uC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,iC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,gC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,gC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,gC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,gC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,gC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,gC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,oC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,+D,oBCA3C9B,EAAOD,QAAU+B,IAA0B,6C,oBCA3C9B,EAAOD,QAAU+B,IAA0B,2C,oBCA3C9B,EAAOD,QAAU+B,IAA0B,2C,oBCA3C9B,EAAOD,QAAU+B,IAA0B,6B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,6B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,0B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,8B,oBCA3C9B,EAAOD,QAAU+B,IAA0B,gC,oBCA3C9B,EAAOD,QAAU+B,IAA0B,0C,oBCA3C9B,EAAOD,QAAU+B,IAA0B,qB,gECA3C,IAAMm/G,EAAO,CACXC,MAAO,wBACPC,YAAa,8CACbC,QAAS,0CACTC,WAAY,kCACZC,IAAK,uCAGP,SAASlmF,IACP,IAAImmF,EAAK5/G,OAAOwT,SAAS0D,KAAKqP,MAAM,KAAK,GACrClqB,EAAO,GAGX,GAAKujH,EAUE,CACL,IAAIC,EAASD,EAAGr5F,MAAM,KAEtB,IAAK,IAAI0b,KAAK49E,EACZxjH,EAAKwjH,EAAO59E,GAAG1b,MAAM,KAAK,IAAMs5F,EAAO59E,GAAG1b,MAAM,KAAK,GAGnDu5F,EAAMzjH,EAAKyjH,KAAO,QAEtB,MAAO,CACLnK,WAAW,EACXzwG,UAAWlF,OAAOkF,WAAa7I,EAAKyN,YAAc,IAClD2tB,IAAK6nF,EAAKQ,EAAItxG,gBAAkB8wG,EAAKC,MACrClgH,KAAMW,OAAOX,MAAQhD,EAAKgD,KAC1Bq6B,OAAyB,GAAjB15B,OAAO05B,QAAiC,QAAfr9B,EAAKq9B,QAvBxC,IAAIomF,EAAM9/G,OAAO8/G,KAAO,QAExB,MAAO,CACLnK,WAAW,EACXzwG,UAAWlF,OAAOkF,WAAa,KAC/BuyB,IAAK6nF,EAAKQ,EAAItxG,gBAAkB8wG,EAAKC,MACrC7lF,OAAyB,GAAjB15B,OAAO05B,OACfr6B,KAAMW,OAAOX,MAAQ,eAqB3BW,OAAOo6B,UAAY,CACjBC,cAAeZ,IAAYhC,KAG7Bz3B,OAAOma,QAAU,SAAA9a,GAGf,OAAOA,KAFYo6B,IAAYp6B,MAAQ,gBAKzCW,OAAOy5B,UAAYA,G,oBCpDnBp7B,EAAOD,QAAU+B,IAA0B,wC,iCCC3C,IAAIi2G,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUD,EAAaZ,EAAQ,IAC/BgF,EAAehF,EAAQ,GACvBuK,EAAWvK,EAAQ,KACnBwK,EAASxK,EAAQ,KACjByK,EAAczK,EAAQ,KACtB0K,EAAe1K,EAAQ,KACvB2K,EAAU3K,EAAQ,KAEtBp3G,EAAQgiH,OAAS,SAAUzJ,GACvB,IAAIt6G,EAAOs6G,EAAGt6G,KAAMktB,EAAOotF,EAAGptF,KAC1B2tF,EAAK+I,EAAYI,UAAUhkH,EAAMktB,GAAOnP,EAAM88F,EAAG,GACjD52G,GAD2D42G,EAAG,GAAaA,EAAG,GACrE98F,EAAI9Z,QACbk+D,EAAWuhD,EAAShG,SAASxwF,EAAMjpB,EAAQ,CAACy/G,EAAS1F,eACrDp5G,EAAWo1G,EAAQnjF,SAAQ,WAAc,OAAOsrC,EAAS47C,eAAiB,CAAC95G,IAC3Em5D,EAAMymD,EAAa9G,aACvB,OAAQ/C,EAAQx/E,QAAQ9N,cAAcm3F,EAAa/G,YAAYnhF,SAAU,CAAE74B,MAAOs6D,GAC9E48C,EAAQx/E,QAAQ9N,cAAcyxF,EAAa5B,QAAS,CAAE94G,EAAG,GAAIqpB,OAAQ,QAASD,MAAO,QACjFmtF,EAAQx/E,QAAQ9N,cAAcyxF,EAAapC,IAAK,CAAE11D,GAAI,QAASpvB,KAAM,CAAC,QAAS,QAAS,aAAcgtF,GAAI,CAAC,EAAG,EAAG,KAC7GjK,EAAQx/E,QAAQ9N,cAAci3F,EAAOO,QAAS,OAClDlK,EAAQx/E,QAAQ9N,cAAcyxF,EAAapC,IAAK,CAAE11D,GAAI,OAAQv5B,OAAQ,OAAQmK,KAAM,KAChF+iF,EAAQx/E,QAAQ9N,cAAcyxF,EAAagG,cAAe,KACtDnK,EAAQx/E,QAAQ9N,cAAco3F,EAAQM,MAAO,KAAMx/G,S,iCC7BvE,IAAI42G,EAAwBzzF,MAAQA,KAAKyzF,sBAAyB,SAAUC,EAAQn+E,GAEhF,OADI78B,OAAO+B,eAAkB/B,OAAO+B,eAAei5G,EAAQ,MAAO,CAAE34G,MAAOw6B,IAAiBm+E,EAAOn+E,IAAMA,EAClGm+E,GAEPC,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAiBI64G,EAjBAC,EAAWF,EAAgBvC,EAAQ,KACnC2C,EAAkB3C,EAAQ,IAC1BkL,EAAYlL,EAAQ,KACpB9uG,EAAUyxG,EAAgBY,QAAQ,CAAEt5G,IAAK,YAC7CrB,EAAQo3D,OAASyiD,EAASphF,QAAQ6pF,EAAU9H,QAA3BX,CAAoCD,IAAqBA,EAAmBH,EAAqB,CAAC,QAAS,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,qEAAsE,CAAC,QAAS,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,uEAAwEM,EAAgB7pD,WAAY6pD,EAAgBwI,QAASxI,EAAgB/mE,YAAa+mE,EAAgB51G,aAAc41G,EAAgByI,YAAal6G,GAAS,SAAU5G,GAAK,OAAOA,EAAE6F,MAAF,UAChiBvH,EAAQo3D,OAAOuM,aAAe,CAC1Brf,GAAI,SACJ5/C,SAAU,UACVwrD,WAAY,OACZ/vD,EAAG,EACHsiH,GAAI,EACJj+D,GAAI,EACJ7yB,OAAQ,EACRxtB,aAAc,EACd0tB,WAAY,UAEhB7xB,EAAQo3D,OAAOmiD,YAAc,U,iCCxB7B,IAAIE,EAAwBzzF,MAAQA,KAAKyzF,sBAAyB,SAAUC,EAAQn+E,GAEhF,OADI78B,OAAO+B,eAAkB/B,OAAO+B,eAAei5G,EAAQ,MAAO,CAAE34G,MAAOw6B,IAAiBm+E,EAAOn+E,IAAMA,EAClGm+E,GAEPC,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAMI64G,EANAC,EAAWF,EAAgBvC,EAAQ,KACnC2C,EAAkB3C,EAAQ,IAC1BkL,EAAYlL,EAAQ,KACpBtc,EAAQif,EAAgBY,QAAQ,CAAEt5G,IAAK,UAC3CrB,EAAQ0iH,KAAO7I,EAASphF,QAAQ6pF,EAAU9H,QAA3BX,CAAoCD,IAAqBA,EAAmBH,EAAqB,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,MAAO,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,QAASM,EAAgBwI,QAASxI,EAAgB/mE,YAAa+mE,EAAgB51G,aAAc41G,EAAgBjoF,UAAWioF,EAAgBryE,gBAAiBqyE,EAAgB1jF,eAAgB0jF,EAAgB3jF,mBAAoB2jF,EAAgBI,iBAAkBJ,EAAgBltF,QAASiuE,GAAO,SAAUp5F,GAAK,OAAOA,EAAE6F,MAAF,QAC9lBvH,EAAQ0iH,KAAKnJ,YAAc,Q,iCCb3B,IAAIE,EAAwBzzF,MAAQA,KAAKyzF,sBAAyB,SAAUC,EAAQn+E,GAEhF,OADI78B,OAAO+B,eAAkB/B,OAAO+B,eAAei5G,EAAQ,MAAO,CAAE34G,MAAOw6B,IAAiBm+E,EAAOn+E,IAAMA,EAClGm+E,GAEPC,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAKI64G,EALAC,EAAWF,EAAgBvC,EAAQ,KACnC2C,EAAkB3C,EAAQ,IAC1BmD,EAAQnD,EAAQ,KACpBp3G,EAAQ2iH,KAAO9I,EAASphF,QAAQ8hF,EAAMP,IAAvBH,CAA4BD,IAAqBA,EAAmBH,EAAqB,CAAC,SAAU,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,wBAAyB,CAAC,SAAU,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,0BAA2BM,EAAgB6I,QAAS7I,EAAgB8I,WAAY9I,EAAgB+I,cAAe/I,EAAgB3f,WAAY2f,EAAgB1f,QAAS0f,EAAgBgJ,aAAchJ,EAAgBiJ,aAAcjJ,EAAgBkJ,gBAAiBlJ,EAAgBzf,iBAAkByf,EAAgBvgB,oBAAqBugB,EAAgBmJ,mBAC/oBljH,EAAQ2iH,KAAKpJ,YAAc,Q,iCCZ3B,IAAIE,EAAwBzzF,MAAQA,KAAKyzF,sBAAyB,SAAUC,EAAQn+E,GAEhF,OADI78B,OAAO+B,eAAkB/B,OAAO+B,eAAei5G,EAAQ,MAAO,CAAE34G,MAAOw6B,IAAiBm+E,EAAOn+E,IAAMA,EAClGm+E,GAEPC,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IASI64G,EATAC,EAAWF,EAAgBvC,EAAQ,KACnC+L,EAAS/L,EAAQ,KAEjB/tG,EADkB+tG,EAAQ,IACCuD,QAAQ,CAAEt5G,IAAK,YAC9CrB,EAAQojH,QAAUvJ,EAASphF,QAAQ0qF,EAAOzqF,KAAxBmhF,CAA8BD,IAAqBA,EAAmBH,EAAqB,CAAC,OAAQ,MAAO,CAAC,OAAQ,QAASpwG,GAC/IrJ,EAAQojH,QAAQz/C,aAAe,CAC3Brf,GAAI,MAERtkD,EAAQojH,QAAQ7J,YAAc,W,iCChB9B,IAAIE,EAAwBzzF,MAAQA,KAAKyzF,sBAAyB,SAAUC,EAAQn+E,GAEhF,OADI78B,OAAO+B,eAAkB/B,OAAO+B,eAAei5G,EAAQ,MAAO,CAAE34G,MAAOw6B,IAAiBm+E,EAAOn+E,IAAMA,EAClGm+E,GAEPC,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAUI64G,EAVAC,EAAWF,EAAgBvC,EAAQ,KACnC2C,EAAkB3C,EAAQ,IAC1B+L,EAAS/L,EAAQ,KACjBpuF,EAAS+wF,EAAgBY,QAAQ,CAAEt5G,IAAK,UACxCsnB,EAAQkxF,EAASphF,QAAQ0qF,EAAOzqF,KAAxBmhF,CAA8BD,IAAqBA,EAAmBH,EAAqB,CAAC,OAAQ,MAAO,CAAC,OAAQ,QAASzwF,GACzIL,EAAMg7C,aAAe,CACjBrf,GAAI,OAER37B,EAAM4wF,YAAc,QACpBv5G,EAAQy4B,QAAU9P,G,iCCjBlB,IAAI8wF,EAAwBzzF,MAAQA,KAAKyzF,sBAAyB,SAAUC,EAAQn+E,GAEhF,OADI78B,OAAO+B,eAAkB/B,OAAO+B,eAAei5G,EAAQ,MAAO,CAAE34G,MAAOw6B,IAAiBm+E,EAAOn+E,IAAMA,EAClGm+E,GAEPC,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IASI64G,EATAC,EAAWF,EAAgBvC,EAAQ,KACnC2C,EAAkB3C,EAAQ,IAC1B+L,EAAS/L,EAAQ,KACjB/wG,EAAQ0zG,EAAgBY,QAAQ,CAAEt5G,IAAK,SAC3CrB,EAAQk+G,KAAOrE,EAASphF,QAAQ0qF,EAAOzqF,KAAxBmhF,CAA8BD,IAAqBA,EAAmBH,EAAqB,CAAC,OAAQ,MAAO,CAAC,OAAQ,QAASpzG,GAC5IrG,EAAQk+G,KAAKv6C,aAAe,CACxBrf,GAAI,IACJtvC,MAAO,S,iCCfX,IAAIykG,EAAwBzzF,MAAQA,KAAKyzF,sBAAyB,SAAUC,EAAQn+E,GAEhF,OADI78B,OAAO+B,eAAkB/B,OAAO+B,eAAei5G,EAAQ,MAAO,CAAE34G,MAAOw6B,IAAiBm+E,EAAOn+E,IAAMA,EAClGm+E,GAEPC,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAOI64G,EAPAC,EAAWF,EAAgBvC,EAAQ,KACnCmD,EAAQnD,EAAQ,KACpBp3G,EAAQqjH,KAAOxJ,EAASphF,QAAQ8hF,EAAMP,IAAvBH,CAA4BD,IAAqBA,EAAmBH,EAAqB,CAAC,8DAA+D,CAAC,iEACzKz5G,EAAQqjH,KAAK1/C,aAAe,CACxBrf,GAAI,KAERtkD,EAAQqjH,KAAK9J,YAAc,Q,iCCd3B,IAAIE,EAAwBzzF,MAAQA,KAAKyzF,sBAAyB,SAAUC,EAAQn+E,GAEhF,OADI78B,OAAO+B,eAAkB/B,OAAO+B,eAAei5G,EAAQ,MAAO,CAAE34G,MAAOw6B,IAAiBm+E,EAAOn+E,IAAMA,EAClGm+E,GAEPC,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAEI64G,EAFAC,EAAWF,EAAgBvC,EAAQ,KACvCp3G,EAAQsjH,aAAezJ,EAASphF,QAAQgR,IAAImwE,IAAqBA,EAAmBH,EAAqB,CAAC,mIAAoI,CAAC,uI,iCCT/O,IAAIE,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IAClC0C,EAAS1C,EAAQ,KACrBp3G,EAAQujH,UAAY,SAAUhL,GAC1B,IAAIxzF,EAAUwzF,EAAGxzF,QAASqc,EAAWm3E,EAAGn3E,SACxC,OAAQ62E,EAAQx/E,QAAQ9N,cAAcmvF,EAAOE,IAAK,CAAE11D,GAAI,KAAMt/B,MAAO,CAAE4J,OAAQ,UAAW8wF,UAAW,QAAUv/G,EAAG,MAAOuB,EAAG,MAAOqjB,QAASA,GACxIkzF,EAAQx/E,QAAQ9N,cAAcmvF,EAAOE,IAAK,CAAElvF,MAAO,OAAQC,OAAQ,OAAQ5mB,aAAc,MAAOq/G,GAAI,OAAQh2F,WAAY,gBAAiBxI,MAAO,CACxI2J,UAAW,UAAYyS,EAAW,MAAQ,KAAO,U,iCCVjE1iC,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtDf,EAAQ+nB,KAAO,Q,iCCDf,SAASyxF,EAASr5G,GACd,IAAK,IAAIuB,KAAKvB,EAAQH,EAAQpB,eAAe8C,KAAI1B,EAAQ0B,GAAKvB,EAAEuB,IAEpEhD,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtDy4G,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,O,iCCNjB,IAAIuC,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IAClC0C,EAAS1C,EAAQ,KACjBqM,EAAUrM,EAAQ,KACtBp3G,EAAQoiH,cAAgB,SAAUvzG,GAC9B,OAAQopG,EAAQx/E,QAAQ9N,cAAcmvF,EAAOU,QAAS,CAAE1oF,UAAW,uCAAwC3tB,aAAc,OAAQwtB,OAAQ,oBAAqBwc,cAAe,SAAUrjB,MAAO,OAAQC,OAAQ,QAC1MktF,EAAQx/E,QAAQ9N,cAAcmvF,EAAOU,QAAS,CAAEtlF,KAAM,WAAYxzB,EAAG,GAAI+gH,GAAI,GAAIjmB,aAAc,YAAaxpD,YAAa,UAAWnhB,WAAY,UAC5IomF,EAAQx/E,QAAQ9N,cAAc84F,EAAQH,aAAc,MACpDrL,EAAQx/E,QAAQ9N,cAAc84F,EAAQH,aAAc,MACpDrL,EAAQx/E,QAAQ9N,cAAc84F,EAAQH,aAAc,OACxDrL,EAAQx/E,QAAQ9N,cAAcmvF,EAAOE,IAAK,CAAEt4G,EAAG,EAAGwzB,KAAM,WAAYnK,OAAQ,OAAQwG,UAAW,OAAQvM,MAAO,CAAEu/B,UAAW,SAAUyB,UAAW,SAAYn3C,EAAMhM,a,iCCb1K,IAAI42G,EAAwBzzF,MAAQA,KAAKyzF,sBAAyB,SAAUC,EAAQn+E,GAEhF,OADI78B,OAAO+B,eAAkB/B,OAAO+B,eAAei5G,EAAQ,MAAO,CAAE34G,MAAOw6B,IAAiBm+E,EAAOn+E,IAAMA,EAClGm+E,GAEPC,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IASI64G,EATAC,EAAWF,EAAgBvC,EAAQ,KACnC0C,EAAS1C,EAAQ,KACrBp3G,EAAQi1B,OAAS4kF,EAASphF,QAAQqhF,EAAOU,QAAxBX,CAAiCD,IAAqBA,EAAmBH,EAAqB,CAAC,IAAK,CAAC,OACtHz5G,EAAQi1B,OAAO0uC,aAAe,CAC1Bx1B,cAAe,SACfvc,eAAgB,SAChBsD,KAAM,EACNhtB,OAAQ,I,iCCfZ,IAAIuxG,EAAwBzzF,MAAQA,KAAKyzF,sBAAyB,SAAUC,EAAQn+E,GAEhF,OADI78B,OAAO+B,eAAkB/B,OAAO+B,eAAei5G,EAAQ,MAAO,CAAE34G,MAAOw6B,IAAiBm+E,EAAOn+E,IAAMA,EAClGm+E,GAEP5B,EAAY9xF,MAAQA,KAAK8xF,UAAa,WAStC,OARAA,EAAWp5G,OAAOq5G,QAAU,SAAS/2G,GACjC,IAAK,IAAInB,EAAGtB,EAAI,EAAGgD,EAAIgnC,UAAU9pC,OAAQF,EAAIgD,EAAGhD,IAE5C,IAAK,IAAImD,KADT7B,EAAI0oC,UAAUhqC,GACOG,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,KACzDV,EAAEU,GAAK7B,EAAE6B,IAEjB,OAAOV,IAEK5B,MAAM4mB,KAAMuiB,YAE5Bm7E,EAAU19F,MAAQA,KAAK09F,QAAW,SAAU7jH,EAAGoxB,GAC/C,IAAIjwB,EAAI,GACR,IAAK,IAAIU,KAAK7B,EAAOnB,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,IAAMuvB,EAAEvZ,QAAQhW,GAAK,IAC9EV,EAAEU,GAAK7B,EAAE6B,IACb,GAAS,MAAL7B,GAAqD,mBAAjCnB,OAAOilH,sBACtB,KAAIplH,EAAI,EAAb,IAAgBmD,EAAIhD,OAAOilH,sBAAsB9jH,GAAItB,EAAImD,EAAEjD,OAAQF,IAC3D0yB,EAAEvZ,QAAQhW,EAAEnD,IAAM,GAAKG,OAAOC,UAAUilH,qBAAqB/kH,KAAKgB,EAAG6B,EAAEnD,MACvEyC,EAAEU,EAAEnD,IAAMsB,EAAE6B,EAAEnD,KAE1B,OAAOyC,GAEP24G,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAQI64G,EARA3B,EAAU0B,EAAgBvC,EAAQ,IAClCyC,EAAWF,EAAgBvC,EAAQ,KACnCkL,EAAYlL,EAAQ,KACpByM,EAAehK,EAASphF,QAAQ6pF,EAAU9H,QAA3BX,CAAoCD,IAAqBA,EAAmBH,EAAqB,CAAC,qFAAsF,CAAC,wFAC5Mz5G,EAAQ0jE,IAAM,SAAU60C,GACpB,IAAI11G,EAAW01G,EAAG11G,SAAUgM,EAAQ60G,EAAOnL,EAAI,CAAC,aAChD,OAAQN,EAAQx/E,QAAQ9N,cAAck5F,EAAc/L,EAAS,GAAIjpG,EAAO,CAAE1O,EAAG,IAAM0C,K,iCCjCvFnE,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IAHtD,SAAkBZ,GACd,IAAK,IAAIuB,KAAKvB,EAAQH,EAAQpB,eAAe8C,KAAI1B,EAAQ0B,GAAKvB,EAAEuB,IAGpE83G,CAASpC,EAAQ,O,iCCJjB,IAAIuC,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IAClC0C,EAAS1C,EAAQ,KACrBp3G,EAAQ8jH,SAAW,SAAUj1G,GACzB,OAAQopG,EAAQx/E,QAAQ9N,cAAcmvF,EAAOuJ,KAAM,KAC/CpL,EAAQx/E,QAAQ9N,cAAc,MAAO,CAAEG,MAAO,OAAQC,OAAQ,OAAQ0I,QAAS,YAAa3V,QAAS,OACjGm6F,EAAQx/E,QAAQ9N,cAAc,IAAK,CAAE+I,OAAQ,OAAQC,YAAa,IAAKC,KAAM,OAAQC,SAAU,WAC3FokF,EAAQx/E,QAAQ9N,cAAc,IAAK,CAAEgE,UAAW,uCAC5CspF,EAAQx/E,QAAQ9N,cAAc,IAAK,CAAEgE,UAAW,qCAC5CspF,EAAQx/E,QAAQ9N,cAAc,SAAU,CAAEiJ,KAAM,UAAWyxD,GAAI,OAAQC,GAAI,OAAQ1kF,EAAG,SACtFq3G,EAAQx/E,QAAQ9N,cAAc,WAAY,CAAE+I,OAAQ,UAAWC,YAAa,IAAKhF,UAAW,yFAA0FmF,OAAQ,4B,iCCbtN,IAAI6lF,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQm7D,UAAY,SAAUo9C,GAC1B,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQm7D,UAAUo+C,YAAc,a,iCCThC,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQolE,cAAgB,SAAUmzC,GAC9B,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQolE,cAAcm0C,YAAc,iB,iCCTpC,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQikE,eAAiB,SAAUs0C,GAC/B,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQikE,eAAes1C,YAAc,kB,iCCTrC,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQ0kE,gBAAkB,SAAU6zC,GAChC,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQ0kE,gBAAgB60C,YAAc,mB,iCCTtC,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQ+jH,UAAY,SAAUxL,GAC1B,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQ+jH,UAAUxK,YAAc,a,iCCThC,IAAIvB,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUD,EAAaZ,EAAQ,IAQnCp3G,EAAQgkH,eAAiB,SAAUnhH,EAAUmH,GAIzC,OAHAiuG,EAAQtwF,WAAU,WACd/lB,OAAOwT,SAASyD,KAAO7O,IACxB,CAACA,IACGiuG,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQikH,eAAiB,SAAU1L,GAC/B,IAAI11G,EAAW01G,EAAG11G,SAAe01G,EAAGvuG,OAEpC,OAAOnH,GAEX7C,EAAQikH,eAAe1K,YAAc,kB,iCC3BrC,IAAIvB,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUD,EAAaZ,EAAQ,IAC/ByH,EAAWzH,EAAQ,KACnBgF,EAAehF,EAAQ,GAC3Bp3G,EAAQotE,KAAO,WACX,IAAImrC,EAAKN,EAAQ32E,WAAWu9E,EAASt9E,eAA+B/+B,GAAP+1G,EAAG,GAAeA,EAAG,IAClF,OAAQN,EAAQx/E,QAAQ9N,cAAc,SAAU,CAAE5F,QAAS,WAAc,OAAOviB,EAASq8G,EAAS3F,YAC9FjB,EAAQx/E,QAAQ9N,cAAcyxF,EAAa0H,SAAU,QAE7D9jH,EAAQotE,KAAKmsC,YAAc,Q,iCChB3B,IAAIvB,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUD,EAAaZ,EAAQ,IAC/ByH,EAAWzH,EAAQ,KACnBgF,EAAehF,EAAQ,GAC3Bp3G,EAAQkkH,aAAe,SAAU3L,GAC7B,IAAI11G,EAAW01G,EAAG11G,SAAUu8E,EAAKm5B,EAAGn5B,GAChC05B,EAAKb,EAAQ32E,WAAWu9E,EAASt9E,eAA+B/+B,GAAPs2G,EAAG,GAAeA,EAAG,IAC9ExyC,EAAO2xC,EAAQnjF,SAAQ,WAAc,OAAO,WAC5CtyB,EAASq8G,EAAS5F,SAAS75B,OACzB,CAACA,IACP,OAAQ64B,EAAQx/E,QAAQ9N,cAAcyxF,EAAahlD,OAAQ,CAAEtsC,MAAO,cAAemvF,UAAW,SAAUl1F,QAASuhD,GAAQzjE,IAE7H7C,EAAQkkH,aAAa3K,YAAc,gB,iCCnBnC,IAAIzB,EAAY9xF,MAAQA,KAAK8xF,UAAa,WAStC,OARAA,EAAWp5G,OAAOq5G,QAAU,SAAS/2G,GACjC,IAAK,IAAInB,EAAGtB,EAAI,EAAGgD,EAAIgnC,UAAU9pC,OAAQF,EAAIgD,EAAGhD,IAE5C,IAAK,IAAImD,KADT7B,EAAI0oC,UAAUhqC,GACOG,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,KACzDV,EAAEU,GAAK7B,EAAE6B,IAEjB,OAAOV,IAEK5B,MAAM4mB,KAAMuiB,YAEhC7pC,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUb,EAAQ,GACtBp3G,EAAQmkH,gBAAkB,SAAUr5G,EAAOmX,GACvC,OAAQA,EAAO9f,MACX,IAAK,OACD,IAAI6sB,EAAyB,IAAlBlkB,EAAM4f,QAAgB5f,EAAM/F,MAAQ,EAAI+F,EAAM4f,QAAU,EACnE,OAAOotF,EAASA,EAAS,GAAIhtG,GAAQ,CAAE4f,QAASsE,IACpD,IAAK,OACD,IAAIviB,EAAO3B,EAAM4f,UAAY5f,EAAM/F,MAAQ,EAAI,EAAI+F,EAAM4f,QAAU,EACnE,OAAOotF,EAASA,EAAS,GAAIhtG,GAAQ,CAAE4f,QAASje,IACpD,IAAK,OACD,OAAOqrG,EAASA,EAAS,GAAIhtG,GAAQ,CAAE4f,QAASzI,EAAOhkB,OAE/D,OAAO6M,GAEX9K,EAAQ0nE,KAAO,WACX,MAAO,CACHvlE,KAAM,SAGdnC,EAAQ2nE,KAAO,WACX,MAAO,CACHxlE,KAAM,SAGdnC,EAAQokH,KAAO,SAAUC,GACrB,MAAO,CACHliH,KAAM,OACNlE,KAAMomH,IAGdrkH,EAAQy8G,YAAc,SAAUxmE,EAAYquE,GACxC,IAAI/L,EAAKN,EAAQoB,WAAWr5G,EAAQmkH,gBAAiB,CACjDz5F,QAAS45F,EACTv/G,MAAOkxC,IACPnrC,EAAQytG,EAAG,GAAI/1G,EAAW+1G,EAAG,GACjC,MAAO,CACHztG,MAAOA,EACPy5G,KAAM,SAAUhmH,GAAK,OAAOiE,EAASxC,EAAQokH,KAAK7lH,KAClDywB,KAAM,WAAc,OAAOxsB,EAASxC,EAAQ2nE,SAC5Cl7D,KAAM,WAAc,OAAOjK,EAASxC,EAAQ0nE,Y,iCCnDpD,IAAIowC,EAAY9xF,MAAQA,KAAK8xF,UAAa,WAStC,OARAA,EAAWp5G,OAAOq5G,QAAU,SAAS/2G,GACjC,IAAK,IAAInB,EAAGtB,EAAI,EAAGgD,EAAIgnC,UAAU9pC,OAAQF,EAAIgD,EAAGhD,IAE5C,IAAK,IAAImD,KADT7B,EAAI0oC,UAAUhqC,GACOG,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,KACzDV,EAAEU,GAAK7B,EAAE6B,IAEjB,OAAOV,IAEK5B,MAAM4mB,KAAMuiB,YAE5ByvE,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUD,EAAaZ,EAAQ,IAC/BoN,EAAapN,EAAQ,KACrBgF,EAAehF,EAAQ,GACvBqN,EAAwBrN,EAAQ,KACpCp3G,EAAQ48G,iBAAmB,SAAUrE,GACjC,IAAI11G,EAAW01G,EAAG11G,SACdi2G,EAAKb,EAAQ32E,WAAWkjF,EAAWn+C,iBAAkB37C,EAAUouF,EAAGhuG,MAAM4f,QAAS65F,EAAOzL,EAAGyL,KAC3FtH,EAAKhF,EAAQvwF,SAAS,GAAIqD,EAASkyF,EAAG,GAAIyH,EAAYzH,EAAG,GACzD0H,EAAS9hH,EAASC,KAAI,SAAUC,EAAOxE,GACvC,IAAI6iC,EAAW1W,IAAYnsB,EACvBqmH,EAASrmH,EAAImsB,EAMbm6F,EAAe,CACfrxG,SAAU,WACVoX,KAAM,MACN7F,QAAS,WAAc,OAAOw/F,EAAKhmH,IACnC,cAAe6iC,OAAW39B,EAAY,OACtCuhB,MAAO,CACH4J,OAAQwS,EAAW,UAAY,UAC/BpW,OAAQoW,EAAW,IAAY1W,EAAUnsB,GAAKqmH,GAAU,EAAI,GAAnC,GACzBp3F,WAAY,iBACZmB,WAdEi2F,EACJ,CAAC,oBAAqB,oBACtBxjF,EACI,CAAC,mBAAoB,oBACrB,CAAC,iBAAkB,qBAUN,GAAK,WAAaA,EAAW,EAAI,IAAO,MAG/D,OAAQ62E,EAAQx/E,QAAQ9N,cAAc85F,EAAsBK,qBAAsBhN,EAAS,CAAEz2G,IAAK,cAAgB9C,EAAGyL,OAAQo3B,EAAUsjF,UAAWA,GAAaG,GAAe5M,EAAQx/E,QAAQmgC,aAAa71D,EAAO+0G,EAAS,GAAI+M,QAEnO,OAAQ5M,EAAQx/E,QAAQ9N,cAAcyxF,EAAapC,IAAK,CAAE11D,GAAI,KAAMv5B,OAAQA,GAAU45F,K,iCCjD1F,IAAI7M,EAAY9xF,MAAQA,KAAK8xF,UAAa,WAStC,OARAA,EAAWp5G,OAAOq5G,QAAU,SAAS/2G,GACjC,IAAK,IAAInB,EAAGtB,EAAI,EAAGgD,EAAIgnC,UAAU9pC,OAAQF,EAAIgD,EAAGhD,IAE5C,IAAK,IAAImD,KADT7B,EAAI0oC,UAAUhqC,GACOG,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,KACzDV,EAAEU,GAAK7B,EAAE6B,IAEjB,OAAOV,IAEK5B,MAAM4mB,KAAMuiB,YAE5Bm7E,EAAU19F,MAAQA,KAAK09F,QAAW,SAAU7jH,EAAGoxB,GAC/C,IAAIjwB,EAAI,GACR,IAAK,IAAIU,KAAK7B,EAAOnB,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,IAAMuvB,EAAEvZ,QAAQhW,GAAK,IAC9EV,EAAEU,GAAK7B,EAAE6B,IACb,GAAS,MAAL7B,GAAqD,mBAAjCnB,OAAOilH,sBACtB,KAAIplH,EAAI,EAAb,IAAgBmD,EAAIhD,OAAOilH,sBAAsB9jH,GAAItB,EAAImD,EAAEjD,OAAQF,IAC3D0yB,EAAEvZ,QAAQhW,EAAEnD,IAAM,GAAKG,OAAOC,UAAUilH,qBAAqB/kH,KAAKgB,EAAG6B,EAAEnD,MACvEyC,EAAEU,EAAEnD,IAAMsB,EAAE6B,EAAEnD,KAE1B,OAAOyC,GAEPg3G,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUD,EAAaZ,EAAQ,IACnCp3G,EAAQ8kH,qBAAuB,SAAUvM,GACrC,IAAIvuG,EAASuuG,EAAGvuG,OAAQnH,EAAW01G,EAAG11G,SAAU6hH,EAAYnM,EAAGmM,UAAWK,EAASrB,EAAOnL,EAAI,CAAC,SAAU,WAAY,cACjHyM,EAAc/M,EAAQ/hF,aAAY,SAAUvB,GAC/B,OAATA,GACA+vF,EAAU/vF,EAAK2R,cAEnB9sB,YAAW,WACM,OAATmb,GACA+vF,EAAU/vF,EAAK2R,gBAEpB,MACJ,CAACt8B,IACJ,OAAQiuG,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMrB,EAAQr/C,aAAaq/C,EAAQx/E,QAAQ6iC,SAAS2pD,KAAKpiH,GAAWi1G,EAASA,EAAS,GAAIiN,GAAS,CAAE/3F,IAAKg4F,Q,iCC3C9K,IAAIhN,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUD,EAAaZ,EAAQ,IAC/BgF,EAAehF,EAAQ,GACvBoN,EAAapN,EAAQ,KACzBp3G,EAAQ68G,mBAAqB,WACzB,IAAItE,EAAKN,EAAQ32E,WAAWkjF,EAAWn+C,iBAAkByyC,EAAKP,EAAGztG,MAAO4f,EAAUouF,EAAGpuF,QAAS3lB,EAAQ+zG,EAAG/zG,MAAOw/G,EAAOhM,EAAGgM,KAAMv1F,EAAOupF,EAAGvpF,KAAMviB,EAAO8rG,EAAG9rG,KAEtJy4G,EADSn5G,MAAMmU,KAAKnU,MAAMhH,IACNjC,KAAI,SAAUkkB,EAAGzoB,GACrC,IAAI6iC,EAAW1W,IAAYnsB,EAC3B,OAAQ05G,EAAQx/E,QAAQ9N,cAAcyxF,EAAamH,UAAW,CAAEniF,SAAUA,EAAUrc,QAAS,WAAc,OAAOw/F,EAAKhmH,IAAO8C,IAAK,mBAAqB9C,OAE5J,OAAQ05G,EAAQx/E,QAAQ9N,cAAcyxF,EAAa5B,QAAS,CAAE5oF,eAAgB,SAAUlwB,EAAG,QACvFu2G,EAAQx/E,QAAQ9N,cAAcyxF,EAAahlD,OAAQ,CAAEryC,QAASiK,GAAQ,QACtEipF,EAAQx/E,QAAQ9N,cAAcyxF,EAAa5B,QAAS,CAAEl2D,GAAI,MAAQ4gE,GAClEjN,EAAQx/E,QAAQ9N,cAAcyxF,EAAahlD,OAAQ,CAAEryC,QAAStY,GAAQ,W,iCCrB9E,IAAIktG,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQmlH,OAAS,SAAU5M,GACvB,IAAI11G,EAAW01G,EAAG11G,SAAoB01G,EAAGr4E,QAAgBq4E,EAAGj4G,KAC5D,OAAO23G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQmlH,OAAO5L,YAAc,U,iCCT7B,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQolH,QAAU,SAAU7M,GACxB,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQolH,QAAQ7L,YAAc,W,iCCT9B,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IAClCgF,EAAehF,EAAQ,GAC3Bp3G,EAAQi1B,OAAS,SAAUsjF,GACvB,IAAI11G,EAAW01G,EAAG11G,SAAUwiH,EAAQ9M,EAAG8M,MACvC,OAAQpN,EAAQx/E,QAAQ9N,cAAcyxF,EAAa5B,QAAS,CAAErsE,cAAe,SAAUvc,eAAgByzF,GAASxiH,IAEpH7C,EAAQi1B,OAAOskF,YAAc,U,iCCV7B,IAAIzB,EAAY9xF,MAAQA,KAAK8xF,UAAa,WAStC,OARAA,EAAWp5G,OAAOq5G,QAAU,SAAS/2G,GACjC,IAAK,IAAInB,EAAGtB,EAAI,EAAGgD,EAAIgnC,UAAU9pC,OAAQF,EAAIgD,EAAGhD,IAE5C,IAAK,IAAImD,KADT7B,EAAI0oC,UAAUhqC,GACOG,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,KACzDV,EAAEU,GAAK7B,EAAE6B,IAEjB,OAAOV,IAEK5B,MAAM4mB,KAAMuiB,YAE5Bm7E,EAAU19F,MAAQA,KAAK09F,QAAW,SAAU7jH,EAAGoxB,GAC/C,IAAIjwB,EAAI,GACR,IAAK,IAAIU,KAAK7B,EAAOnB,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,IAAMuvB,EAAEvZ,QAAQhW,GAAK,IAC9EV,EAAEU,GAAK7B,EAAE6B,IACb,GAAS,MAAL7B,GAAqD,mBAAjCnB,OAAOilH,sBACtB,KAAIplH,EAAI,EAAb,IAAgBmD,EAAIhD,OAAOilH,sBAAsB9jH,GAAItB,EAAImD,EAAEjD,OAAQF,IAC3D0yB,EAAEvZ,QAAQhW,EAAEnD,IAAM,GAAKG,OAAOC,UAAUilH,qBAAqB/kH,KAAKgB,EAAG6B,EAAEnD,MACvEyC,EAAEU,EAAEnD,IAAMsB,EAAE6B,EAAEnD,KAE1B,OAAOyC,GAEPg3G,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUD,EAAaZ,EAAQ,IAC/BgF,EAAehF,EAAQ,GACvByH,EAAWzH,EAAQ,KACnBoF,EAAgBpF,EAAQ,KAC5Bp3G,EAAQylE,eAAiB,SAAU8yC,GAC/B,IAAIO,EAAKP,EAAG11G,SAAUA,OAAkB,IAAPi2G,EAAgB,WAAaA,EAAImE,EAAK1E,EAAGxzF,QAASA,OAAiB,IAAPk4F,OAAgBx5G,EAAYw5G,EAAIqI,EAAK/M,EAAG8M,MAAOA,OAAe,IAAPC,EAAgB,SAAWA,EAAIC,EAAQ7B,EAAOnL,EAAI,CAAC,WAAY,UAAW,UAC1NiN,EAAKvN,EAAQ32E,WAAWu9E,EAASt9E,eAA2B/+B,GAAPgjH,EAAG,GAAeA,EAAG,IAC1E/M,EAAKR,EAAQ32E,WAAWk7E,EAAc/5D,oBAI1C,OAHK19B,IACDA,EAAU,WAAc,OAAOviB,EAASq8G,EAAS1F,UAAUV,EAAGjqG,MAAQ,IAAMiqG,EAAGn4G,SAE3E23G,EAAQx/E,QAAQ9N,cAAcyxF,EAAahlD,OAAQ0gD,EAAS,CAAEmC,UAAWoL,EAAOtgG,QAASA,GAAWwgG,GAAQ1iH,IAExH7C,EAAQylE,eAAe8zC,YAAc,iBACrCv5G,EAAQylE,eAAey2C,eAAiB,CACpC,CACI57G,KAAM,QACNy3G,OAAQ,SAAUz1G,EAAOvB,GACrBuB,EAAMuM,MAAMorG,UAAYl5G,GAE5BoB,KAAM,OACN49E,aAAc,CAAC,SAAU,UACzB39E,OAAQ,CACJ,CAAC,OAAQ,cACT,CAAC,SAAU,UACX,CAAC,QAAS,aAEdqjH,KAAM,sCAEV,CACInlH,KAAM,UACNy3G,OAAQ,SAAUz1G,EAAOvB,GACrBuB,EAAMO,SAAW9B,GAErBg/E,aAAc,WACd59E,KAAM,OACNsjH,KAAM,yC,iCClEd,IAAI9L,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQ0lH,YAAc,SAAUnN,GAC5B,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQ0lH,YAAYnM,YAAc,e,iCCTlC,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQ2lH,YAAc,SAAUpN,GAC5B,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQ2lH,YAAYpM,YAAc,e,iCCTlC,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQ4wC,cAAgB,SAAU2nE,GAC9B,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQ4wC,cAAc2oE,YAAc,iB,iCCTpC,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQ4lH,SAAW,SAAUrN,GACzB,IAAI11G,EAAW01G,EAAG11G,SAAkB01G,EAAGx3G,MACvC,OAAOk3G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQ4lH,SAASrM,YAAc,Y,iCCT/B,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQ6wC,cAAgB,SAAU0nE,GAC9B,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQ6wC,cAAc0oE,YAAc,iB,iCCTpC,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQ6lH,SAAW,SAAUtN,GACzB,IAAI11G,EAAW01G,EAAG11G,SAAkB01G,EAAGx3G,MACvC,OAAOk3G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQ6lH,SAAStM,YAAc,Y,iCCT/B,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQuuE,SAAW,SAAUgqC,GACzB,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQuuE,SAASgrC,YAAc,Y,iCCT/B,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IAClCgF,EAAehF,EAAQ,GAC3Bp3G,EAAQ+1B,OAAS,SAAUwiF,GACvB,IAAI11G,EAAW01G,EAAG11G,SAAmB01G,EAAGuN,OACxC,OAAQ7N,EAAQx/E,QAAQ9N,cAAcyxF,EAAa5B,QAAS,CAAEx1F,MAAO,CAAExR,SAAU,SAAUqX,IAAK,GAAK24F,GAAI,OAAQxuG,MAAO,OAAQtT,EAAG,OAAQ86F,aAAc,iBAAkBxxE,OAAQ,OAAQ8G,UAAW,iCAAkCD,WAAY,UAAYhvB,IAEpQ7C,EAAQ+1B,OAAOwjF,YAAc,U,iCCV7B,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQojH,QAAU,SAAU7K,GACxB,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAc,KAAM,KAAM9nB,IAErD7C,EAAQojH,QAAQ7J,YAAcv5G,EAAQojH,S,iCCTtC,IAAIzJ,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQ2oB,MAAQ,SAAU4vF,GACtB,IAAI9lG,EAAM8lG,EAAG9lG,IAAKqmG,EAAKP,EAAGz8F,MAAOA,OAAe,IAAPg9F,EAAgB,GAAKA,EAC9D,OAAOb,EAAQx/E,QAAQ9N,cAAc,MAAO,CAAElY,IAAKA,EAAKqJ,MAAOA,KAEnE9b,EAAQ2oB,MAAM4wF,YAAc,QAC5Bv5G,EAAQ2oB,MAAMuzF,eAAiB,CAC3B,CACI57G,KAAM,QACNy3G,OAAQ,SAAUz1G,EAAOvB,GACrBuB,EAAMuM,MAAMnL,MAAQ3C,GAExBoB,KAAM,OACN49E,aAAc,CAAC,aACf39E,OAAQ,CACJ,CAAC,WAAY,UACb,CAAC,UAAW,WACZ,CAAC,cAAe,cAEpBqjH,KAAM,IAEV,CACInlH,KAAM,SACNy3G,OAAQ,SAAUz1G,EAAOvB,GACrBuB,EAAMuM,MAAM4D,IAAM1R,GAEtBoB,KAAM,QACNsjH,KAAM,M,iCC/Bd/mH,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtDf,EAAQ6vB,KAAO,WACX,OAAO,MAEX7vB,EAAQ6vB,KAAK0pF,YAAc,Q,iCCJ3B,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQ+oF,eAAiB,SAAUwvB,GAC/B,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQ+oF,eAAewwB,YAAc,kB,iCCTrC,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQ+lH,UAAY,SAAUxN,GAC1B,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAc,IAAK,KAAM9nB,IAEpD7C,EAAQ+lH,UAAUxM,YAAc,a,iCCThC,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQgmH,KAAO,SAAUzN,GACrB,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQgmH,KAAKzM,YAAc,Q,iCCT3B76G,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtDf,EAAQimH,OAAS,SAAU1N,GACvB,OAAO,MAEXv4G,EAAQimH,OAAO1M,YAAc,U,iCCJ7B,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQkmH,OAAS,SAAU3N,GACvB,IAAI11G,EAAW01G,EAAG11G,SAAoB01G,EAAGr4E,QAAcq4E,EAAGn5B,GAC1D,OAAO64B,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQkmH,OAAO3M,YAAc,U,iCCT7B,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQmmH,aAAe,SAAU5N,GAC7B,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQmmH,aAAa5M,YAAc,gB,iCCTnC,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IAClCgF,EAAehF,EAAQ,GAC3Bp3G,EAAQyjE,mBAAqB,SAAU80C,GACnC,IAAI11G,EAAW01G,EAAG11G,SAAUi2G,EAAKP,EAAG3kF,KAAMA,OAAc,IAAPklF,GAAuBA,EAAImE,EAAK1E,EAAG6N,QAASA,OAAiB,IAAPnJ,EAAgB,QAAUA,EACjI,OAAQhF,EAAQx/E,QAAQ9N,cAAcyxF,EAAa5B,QAAS,CAAErsE,cAAe,SAAUvc,eAAgB,SAAU7G,OAAQ6I,EAAO,OAAS,OAAQsE,SAAsB,UAAZkuF,EAAsB,QAAU,OAAQC,GAAgB,UAAZD,EAAsB,OAAS,WAAavjH,IAEvP7C,EAAQyjE,mBAAmB81C,YAAc,sB,iCCVzC,IAAIzB,EAAY9xF,MAAQA,KAAK8xF,UAAa,WAStC,OARAA,EAAWp5G,OAAOq5G,QAAU,SAAS/2G,GACjC,IAAK,IAAInB,EAAGtB,EAAI,EAAGgD,EAAIgnC,UAAU9pC,OAAQF,EAAIgD,EAAGhD,IAE5C,IAAK,IAAImD,KADT7B,EAAI0oC,UAAUhqC,GACOG,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,KACzDV,EAAEU,GAAK7B,EAAE6B,IAEjB,OAAOV,IAEK5B,MAAM4mB,KAAMuiB,YAE5Bm7E,EAAU19F,MAAQA,KAAK09F,QAAW,SAAU7jH,EAAGoxB,GAC/C,IAAIjwB,EAAI,GACR,IAAK,IAAIU,KAAK7B,EAAOnB,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,IAAMuvB,EAAEvZ,QAAQhW,GAAK,IAC9EV,EAAEU,GAAK7B,EAAE6B,IACb,GAAS,MAAL7B,GAAqD,mBAAjCnB,OAAOilH,sBACtB,KAAIplH,EAAI,EAAb,IAAgBmD,EAAIhD,OAAOilH,sBAAsB9jH,GAAItB,EAAImD,EAAEjD,OAAQF,IAC3D0yB,EAAEvZ,QAAQhW,EAAEnD,IAAM,GAAKG,OAAOC,UAAUilH,qBAAqB/kH,KAAKgB,EAAG6B,EAAEnD,MACvEyC,EAAEU,EAAEnD,IAAMsB,EAAE6B,EAAEnD,KAE1B,OAAOyC,GAEPg3G,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUD,EAAaZ,EAAQ,IAC/BgF,EAAehF,EAAQ,GAC3Bp3G,EAAQupE,MAAQ0uC,EAAQkF,YAAW,SAAU5E,EAAIvrF,GAC7C,IAAInqB,EAAW01G,EAAG11G,SAAU0iH,EAAQ7B,EAAOnL,EAAI,CAAC,aAChD,OAAQN,EAAQx/E,QAAQ9N,cAAcyxF,EAAasG,KAAM5K,EAAS,CAAE9qF,IAAKA,EAAKs3B,GAAI,KAAMnW,cAAe,SAAUzsC,EAAG,OAAQyC,aAAc,OAAQq/G,GAAI,OAAQ7xF,OAAQ,iBAAkBzE,UAAW,SAAU4E,UAAW,oCAAqChH,MAAO,cAAeC,OAAQ,eAAiBw6F,GAAQ1iH,MAExT7C,EAAQupE,MAAMgwC,YAAc,S,iCCpC5B,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IAClCgF,EAAehF,EAAQ,GAC3Bp3G,EAAQ04B,KAAO,SAAU6/E,GACrB,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAQo1G,EAAQx/E,QAAQ9N,cAAcyxF,EAAa1jF,KAAM,CAAE4rB,GAAI,MAAOx5B,MAAO,QAAUjoB,IAE3F7C,EAAQ04B,KAAK6gF,YAAc,OAC3Bv5G,EAAQ04B,KAAKwjF,eAAiB,I,iCCX9Bx9G,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtDf,EAAQ8yF,SAAW,SAAUylB,GACzB,OAAO,MAEXv4G,EAAQ8yF,SAASymB,YAAc,Y,iCCJ/B,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQsmH,MAAQ,SAAU/N,GACtB,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQsmH,MAAM/M,YAAc,S,iCCT5B,IAAIvB,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUD,EAAaZ,EAAQ,IAC/ByH,EAAWzH,EAAQ,KACnBgF,EAAehF,EAAQ,GAC3Bp3G,EAAQumH,WAAa,WACjB,IAAIxH,EAAS9G,EAAQ32E,WAAWu9E,EAASt9E,eAAe,GACxD,OAAO02E,EAAQx/E,QAAQ9N,cAAcyxF,EAAapC,IAAK,CAAEqM,GAAI,QAAUtH,EAAO35G,eAElFpF,EAAQumH,WAAWhN,YAAc,c,iCCfjC,IAAII,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IAClCgF,EAAehF,EAAQ,GAC3Bp3G,EAAQ4jE,gBAAkB,SAAU20C,GAChC,IAAI11G,EAAW01G,EAAG11G,SAAUi2G,EAAKP,EAAG3kF,KAAMA,OAAc,IAAPklF,GAAuBA,EACxE,OAAQb,EAAQx/E,QAAQ9N,cAAcyxF,EAAa5B,QAAS,CAAErsE,cAAe,SAAUpjB,OAAQ6I,EAAO,OAAS,QAAU/wB,IAE7H7C,EAAQ4jE,gBAAgB21C,YAAc,mB,iCCVtC,IAAIzB,EAAY9xF,MAAQA,KAAK8xF,UAAa,WAStC,OARAA,EAAWp5G,OAAOq5G,QAAU,SAAS/2G,GACjC,IAAK,IAAInB,EAAGtB,EAAI,EAAGgD,EAAIgnC,UAAU9pC,OAAQF,EAAIgD,EAAGhD,IAE5C,IAAK,IAAImD,KADT7B,EAAI0oC,UAAUhqC,GACOG,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,KACzDV,EAAEU,GAAK7B,EAAE6B,IAEjB,OAAOV,IAEK5B,MAAM4mB,KAAMuiB,YAE5ByvE,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUD,EAAaZ,EAAQ,IAC/BgF,EAAehF,EAAQ,GACvB0K,EAAe1K,EAAQ,KAC3Bp3G,EAAQm8G,SAAW,SAAU5D,GACzB,IAAI11G,EAAW01G,EAAG11G,SAAUP,EAAQi2G,EAAGj2G,MACnCS,EAAQk1G,EAAQx/E,QAAQ6iC,SAAS2pD,KAAKpiH,GACtCq5G,EAAiBn5G,EAAMZ,KAAK+5G,eAC5BlvF,EAAMirF,EAAQ5tF,OAAO,MACrBm8F,EAAc,WACVx5F,EAAItC,SACJsC,EAAItC,QAAQ3gB,SAGhBsxD,EAAM48C,EAAQ32E,WAAWwgF,EAAa/G,aActC0L,EAAgB,CAChB1hG,QAdU,WACVs2C,EAAI4/C,gBAAgB,CAChB34G,MAAOA,EACPokH,OAAQxK,KAYZkB,WAAY,SAAUnsF,GACQ,UAAtBA,EAAE01F,YAAYtlH,KATtBg6D,EAAI4/C,gBAAgB,CAChB34G,MAAOA,EACPokH,OAAQxK,EACRsK,YAAaA,KAUjBx5F,IAAKA,EACLpI,SAAU,GAEd,OAAI7hB,EAAMZ,KAAK+6G,kBACJjF,EAAQttF,cAAc5nB,EAAMZ,KAAK+6G,kBAAmBpF,EAASA,EAAS,GAAI2O,GAAgB,CAAE5jH,SAAUo1G,EAAQr/C,aAAa71D,EAAO,CAAEgiB,QAAS,aAAiBH,UAAW,OAE5KqzF,EAAQx/E,QAAQ9N,cAAcyxF,EAAapC,IAAKlC,EAAS,CAAEp2G,EAAG,OAAQiwB,OAAQ,iBAAkB3M,MAAO,CAAEi1F,UAAW,UAAYnvF,MAAsB,mBAAfxoB,EAAMH,KAA4B,OAAS,QAAUskH,GAAgBxO,EAAQr/C,aAAa71D,EAAO,CAAEgiB,QAAS,aAAiBH,UAAW,O,iCC3D3R,IAAI+0F,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IACtCp3G,EAAQu9D,MAAQ,SAAUg7C,GACtB,IAAI11G,EAAW01G,EAAG11G,SAClB,OAAOo1G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,IAEzE7C,EAAQu9D,MAAMg8C,YAAc,S,iCCT5B,SAASC,EAASr5G,GACd,IAAK,IAAIuB,KAAKvB,EAAQH,EAAQpB,eAAe8C,KAAI1B,EAAQ0B,GAAKvB,EAAEuB,IAEpEhD,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtDy4G,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,O,iCCTjB,IAAIuC,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IAClCgF,EAAehF,EAAQ,GAC3Bp3G,EAAQ4mH,MAAQ,WACZ3O,EAAQx/E,QAAQ9N,cAAcyxF,EAAapC,IAAK,Q,iCCPpD,IAAIL,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IAClCgF,EAAehF,EAAQ,GAC3Bp3G,EAAQ6mH,KAAO,WACX5O,EAAQx/E,QAAQ9N,cAAcyxF,EAAapC,IAAK,Q,iCCPpD,IAAIL,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IAClCgF,EAAehF,EAAQ,GAC3Bp3G,EAAQ8mH,SAAW,WACf7O,EAAQx/E,QAAQ9N,cAAcyxF,EAAapC,IAAK,Q,iCCPpD,IAAIhC,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUD,EAAaZ,EAAQ,IAC/BgF,EAAehF,EAAQ,GACvB0K,EAAe1K,EAAQ,KACvB2P,EAAW3P,EAAQ,KACnB4P,EAAU5P,EAAQ,KACtBp3G,EAAQmiH,QAAU,SAAUtzG,GACxB,IACI45C,EADAqyD,EAAc7C,EAAQ32E,WAAWwgF,EAAa/G,aAAaD,YAE/D,GAA2B,IAAvBA,EAAYr8G,OACZgqD,EAASwvD,EAAQx/E,QAAQ9N,cAAco8F,EAAS/H,OAAQ,UAEvD,CACD,IAAIx+G,EAAIs6G,EAAYA,EAAYr8G,OAAS,GACzCgqD,EAASwvD,EAAQx/E,QAAQ9N,cAAcq8F,EAAQC,MAAO,CAAEhpH,KAAMuC,IAElE,OAAOy3G,EAAQx/E,QAAQ9N,cAAcyxF,EAAapC,IAAK,KAAMvxD,K,iCCvBjE,IAAIuvD,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUD,EAAaZ,EAAQ,IAC/BgF,EAAehF,EAAQ,GACvB0K,EAAe1K,EAAQ,KAC3Bp3G,EAAQinH,MAAQ,SAAUp4G,GACtB,IAAIwsD,EAAM48C,EAAQ32E,WAAWwgF,EAAa/G,aACtCmM,EAAW,WACX7rD,EAAI8/C,kBAEJtsG,EAAM5Q,KAAKuoH,cACXU,EAAW,WACP7rD,EAAI8/C,iBACJtsG,EAAM5Q,KAAKuoH,gBAGnB,IAAIx5F,EAAMirF,EAAQ5tF,OAAO,MAMzB,OALA4tF,EAAQtwF,WAAU,WACVqF,EAAItC,SAAW7b,EAAM5Q,KAAKuoH,aAC1Bx5F,EAAItC,QAAQ3gB,UAEjB,CAAC8E,EAAM5Q,OACFg6G,EAAQx/E,QAAQ9N,cAAcyxF,EAAapC,IAAK,KACpD/B,EAAQx/E,QAAQ9N,cAAcyxF,EAAahlD,OAAQ,CAAEryC,QAASmiG,EAAUl6F,IAAKA,GACzEirF,EAAQx/E,QAAQ9N,cAAcyxF,EAAa0H,SAAU,MACrD,SACJ7L,EAAQx/E,QAAQ9N,cAAcyxF,EAAagH,QAAS,CAAE9+D,GAAI,MACtD,kBACAz1C,EAAM5Q,KAAKqE,MAAMH,S,iCClC7B,IAAIw3G,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IAClCgF,EAAehF,EAAQ,GAC3Bp3G,EAAQ04B,KAAO,WACXu/E,EAAQx/E,QAAQ9N,cAAcyxF,EAAapC,IAAK,Q,iCCPpD,IAAIlC,EAAY9xF,MAAQA,KAAK8xF,UAAa,WAStC,OARAA,EAAWp5G,OAAOq5G,QAAU,SAAS/2G,GACjC,IAAK,IAAInB,EAAGtB,EAAI,EAAGgD,EAAIgnC,UAAU9pC,OAAQF,EAAIgD,EAAGhD,IAE5C,IAAK,IAAImD,KADT7B,EAAI0oC,UAAUhqC,GACOG,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,KACzDV,EAAEU,GAAK7B,EAAE6B,IAEjB,OAAOV,IAEK5B,MAAM4mB,KAAMuiB,YAEhC7pC,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUb,EAAQ,GACtBp3G,EAAQmnH,YAAc,SAAUnrG,GAC5B,OAAO87F,EAASA,EAAS,GAAI97F,GAAM,CAAE9Z,OAAQ41G,EAAS,GAAI97F,EAAI9Z,WAElElC,EAAQmgB,IAAM,SAAU7d,GAAS,MAAQ,CAAEH,KAAM,MAAOlE,KAAMqE,IAC9DtC,EAAQonH,OAAS,SAAU9kH,GAAS,MAAQ,CACxCH,KAAM,SACNlE,KAAMqE,IAEVtC,EAAQq4G,cAAgB,SAAUvtG,EAAOmX,GACrC,OAAQA,EAAO9f,MACX,IAAK,MAGD,OAFIsc,EAAYze,EAAQmnH,YAAYr8G,IAC1B5I,OAAO+f,EAAOhkB,KAAK+E,IAAMif,EAAOhkB,KACnCwgB,EAEX,IAAK,SACD,IAAIA,EAEJ,cAFIA,EAAYze,EAAQmnH,YAAYr8G,IACnB5I,OAAO+f,EAAOhkB,KAAK+E,IAC7Byb,IAInBze,EAAQiiH,UAAY,SAAUhkH,EAAM6U,GAChC,IAAIylG,EAAKN,EAAQoB,WAAWr5G,EAAQq4G,cAAe,CAC/CvlG,OAAQA,EACR5Q,OAAQjE,IACR+d,EAAMu8F,EAAG,GAAI/1G,EAAW+1G,EAAG,GAG/B,MAAO,CAACv8F,EAFO,SAAU1Z,GAAS,OAAOE,EAASxC,EAAQmgB,IAAI7d,KAC5C,SAAUA,GAAS,OAAOE,EAASxC,EAAQonH,OAAO9kH,Q,iCCzCxE,IAAIw1G,EAAY9xF,MAAQA,KAAK8xF,UAAa,WAStC,OARAA,EAAWp5G,OAAOq5G,QAAU,SAAS/2G,GACjC,IAAK,IAAInB,EAAGtB,EAAI,EAAGgD,EAAIgnC,UAAU9pC,OAAQF,EAAIgD,EAAGhD,IAE5C,IAAK,IAAImD,KADT7B,EAAI0oC,UAAUhqC,GACOG,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,KACzDV,EAAEU,GAAK7B,EAAE6B,IAEjB,OAAOV,IAEK5B,MAAM4mB,KAAMuiB,YAE5Bm7E,EAAU19F,MAAQA,KAAK09F,QAAW,SAAU7jH,EAAGoxB,GAC/C,IAAIjwB,EAAI,GACR,IAAK,IAAIU,KAAK7B,EAAOnB,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,IAAMuvB,EAAEvZ,QAAQhW,GAAK,IAC9EV,EAAEU,GAAK7B,EAAE6B,IACb,GAAS,MAAL7B,GAAqD,mBAAjCnB,OAAOilH,sBACtB,KAAIplH,EAAI,EAAb,IAAgBmD,EAAIhD,OAAOilH,sBAAsB9jH,GAAItB,EAAImD,EAAEjD,OAAQF,IAC3D0yB,EAAEvZ,QAAQhW,EAAEnD,IAAM,GAAKG,OAAOC,UAAUilH,qBAAqB/kH,KAAKgB,EAAG6B,EAAEnD,MACvEyC,EAAEU,EAAEnD,IAAMsB,EAAE6B,EAAEnD,KAE1B,OAAOyC,GAEP24G,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAEpDg8F,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IAClCiQ,EAA0BrP,EAAaZ,EAAQ,MACnDp3G,EAAQqiH,MAAQ,SAAUxzG,GACtB,IAAI0pG,EAAK1pG,EAAMmW,MAAOA,OAAe,IAAPuzF,EAAgB,GAAKA,EAAI11G,EAAWgM,EAAMhM,SAAUy6D,EAAOomD,EAAO70G,EAAO,CAAC,QAAS,aACjH,OAAQopG,EAAQx/E,QAAQ9N,cAAc08F,EAAwB5uF,QAASq/E,EAAS,CAAE9yF,MAAO8yF,EAAS,CAAEhrF,QAAS,QAASS,SAAU,SAAUoE,OAAQ,EAAG7G,MAAO,OAAQC,OAAQ,QAAU/F,IAAUs4C,GAC5L26C,EAAQx/E,QAAQ9N,cAAc08F,EAAwBC,qBAAsB,MAAM,SAAUC,GAAgB,OAAQtP,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,S,iCCtC1L,IAAIm1G,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUD,EAAaZ,EAAQ,IAC/BuK,EAAWvK,EAAQ,KAEvBp3G,EAAQwnH,OAAS,SAAUjP,GACvB,IAAIt6G,EAAOs6G,EAAGt6G,KAAMktB,EAAOotF,EAAGptF,KAC1Bi1C,EAAWuhD,EAAShG,SAASxwF,EAAMltB,GACnC4E,EAAWo1G,EAAQnjF,SAAQ,WAAc,OAAOsrC,EAAS47C,eAAiB,CAAC/9G,IAC/E,OAAQg6G,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KAAMz2G,K,iCCf1EnE,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtDf,EAAQynH,4BAA8B,uCACtCznH,EAAQ0nH,wBAA0B,CAC9B,uCAAwC,CACpC1kH,GAAI,uCACJb,KAAM,SACN0M,MAAO,GACPhM,SAAU,CACN,CAAEG,GAAI,uCAAwCb,KAAM,OACpD,CAAEa,GAAI,uCAAwCb,KAAM,SAG5D,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,SACN0M,MAAO,CACHi3G,OAAQ,OAEZjjH,SAAU,CACN,CAAEG,GAAI,uCAAwCb,KAAM,OACpD,CAAEa,GAAI,uCAAwCb,KAAM,OACpD,CAAEa,GAAI,uCAAwCb,KAAM,OACpD,CAAEa,GAAI,uCAAwCb,KAAM,SAG5D,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,QAEV,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,cAEV,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,QAEV,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,QAEV,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,iBACN8L,KAAM,CACFC,QAAS,SAEbrL,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,SAIlB,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,QACN0M,MAAO,CAAEvO,KAAM,WACfuC,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,SAIlB,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,iBACN0M,MAAO,GACPZ,KAAM,CACFC,QAAS,eAEbqD,SAAU,CACNpP,KAAM,iBACN25G,OAAQ,IAEZj5G,SAAU,CAAC,CAAEG,GAAI,uCAAwCb,KAAM,SAEnE,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,cACN0M,MAAO,CACHvO,KAAM,SAEVuC,SAAU,CAAC,CAAEG,GAAI,uCAAwCb,KAAM,SAEnE,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,qBACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,SAIlB,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,SACN0M,MAAO,CACHw2G,MAAO,UAEXxiH,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,OAEV,CACIa,GAAI,uCACJb,KAAM,OAEV,CACIa,GAAI,uCACJb,KAAM,SAIlB,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,OACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,OAEV,CACIa,GAAI,uCACJb,KAAM,SAIlB,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,UACNU,SAAU,gBAEd,uCAAwC,CACpCG,GAAI,uCACJb,KAAM,YACNU,SAAU,qDAEd,uCAAwC,CACpCG,GAAI,uCACJb,KAAM,QACN0M,MAAO,CACH4D,IAAK,kDAGb,uCAAwC,CACpCzP,GAAI,uCACJb,KAAM,OACNU,SAAU,WAEd,uCAAwC,CACpCG,GAAI,uCACJb,KAAM,QACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,OAEV,CACIa,GAAI,uCACJb,KAAM,SAIlB,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,OACNU,SAAU,WAEd,uCAAwC,CACpCG,GAAI,uCACJb,KAAM,QACN0M,MAAO,CACH4D,IAAK,kDAGb,uCAAwC,CACpCzP,GAAI,uCACJb,KAAM,QACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,OAEV,CACIa,GAAI,uCACJb,KAAM,SAIlB,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,QACN0M,MAAO,CACH4D,IAAK,kDAGb,uCAAwC,CACpCzP,GAAI,uCACJb,KAAM,OACNU,SAAU,WAEd,uCAAwC,CACpCG,GAAI,uCACJb,KAAM,QACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,OAEV,CACIa,GAAI,uCACJb,KAAM,SAIlB,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,WACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,OAEV,CACIa,GAAI,uCACJb,KAAM,OAEV,CACIa,GAAI,uCACJb,KAAM,SAIlB,uCAAwC,CACpCa,GAAI,uCACJb,KAAM,iBACNU,SAAU,aAGlB7C,EAAQ2nH,kBAAoB,CACxB3kH,GAAI,uCACJb,KAAM,SACN0M,MAAO,GACPhM,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,iBACN8L,KAAM,CACFC,QAAS,SAEbrL,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,QACN0M,MAAO,CAAEvO,KAAM,WACfuC,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,iBACN8L,KAAM,CACFC,QAAS,eAEbW,MAAO,GACP0C,SAAU,CACNpP,KAAM,iBACN25G,OAAQ,IAEZj5G,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,cACN0M,MAAO,CACHvO,KAAM,SAEVuC,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,qBACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,SACN0M,MAAO,CACHw2G,MAAO,UAEXxiH,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,OACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,UACNU,SAAU,gBAEd,CACIG,GAAI,uCACJb,KAAM,YACNU,SAAU,uDAItB,CACIG,GAAI,uCACJb,KAAM,WACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,QACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,QACN0M,MAAO,CACH4D,IAAK,kDAGb,CACIzP,GAAI,uCACJb,KAAM,YACNU,SAAU,aAItB,CACIG,GAAI,uCACJb,KAAM,QACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,QACN0M,MAAO,CACH4D,IAAK,kDAGb,CACIzP,GAAI,uCACJb,KAAM,YACNU,SAAU,aAItB,CACIG,GAAI,uCACJb,KAAM,QACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,QACN0M,MAAO,CACH4D,IAAK,kDAGb,CACIzP,GAAI,uCACJb,KAAM,YACNU,SAAU,eAM9B,CACIG,GAAI,uCACJb,KAAM,iBACNU,SAAU,kBAQtC,CACIG,GAAI,uCACJb,KAAM,cACN0M,MAAO,CACHvO,KAAM,cAEVuC,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,qBACNU,SAAU,CACN,CACIV,KAAM,SACN0M,MAAO,CACHw2G,MAAO,UAEXxiH,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,OACNU,SAAU,CACN,CACIG,GAAI,GACJb,KAAM,UACNU,SAAU,aAEd,CACIG,GAAI,GACJb,KAAM,YACNU,SAAU,uDAItB,CACIG,GAAI,uCACJb,KAAM,WACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,QACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,QACN0M,MAAO,CACH4D,IAAK,kDAGb,CACIzP,GAAI,uCACJb,KAAM,YACNU,SAAU,aAItB,CACIG,GAAI,uCACJb,KAAM,QACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,QACN0M,MAAO,CACH4D,IAAK,kDAGb,CACIzP,GAAI,uCACJb,KAAM,YACNU,SAAU,aAItB,CACIG,GAAI,uCACJb,KAAM,QACNU,SAAU,CACN,CACIG,GAAI,uCACJb,KAAM,QACN0M,MAAO,CACH4D,IAAK,kDAGb,CACIzP,GAAI,uCACJb,KAAM,YACNU,SAAU,eAM9B,CACIG,GAAI,uCACJb,KAAM,iBACNU,SAAU,2B,iCCzdtE,SAAS22G,EAASr5G,GACd,IAAK,IAAIuB,KAAKvB,EAAQH,EAAQpB,eAAe8C,KAAI1B,EAAQ0B,GAAKvB,EAAEuB,IAEpEhD,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtDy4G,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,O,iCCNjB,IAAIU,EAAY9xF,MAAQA,KAAK8xF,UAAa,WAStC,OARAA,EAAWp5G,OAAOq5G,QAAU,SAAS/2G,GACjC,IAAK,IAAInB,EAAGtB,EAAI,EAAGgD,EAAIgnC,UAAU9pC,OAAQF,EAAIgD,EAAGhD,IAE5C,IAAK,IAAImD,KADT7B,EAAI0oC,UAAUhqC,GACOG,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,KACzDV,EAAEU,GAAK7B,EAAE6B,IAEjB,OAAOV,IAEK5B,MAAM4mB,KAAMuiB,YAE5Bg2E,EAAkBv4F,MAAQA,KAAKu4F,gBAAmB,WAClD,IAAK,IAAI1+G,EAAI,EAAGtB,EAAI,EAAGigH,EAAKj2E,UAAU9pC,OAAQF,EAAIigH,EAAIjgH,IAAKsB,GAAK0oC,UAAUhqC,GAAGE,OACxE,IAAImC,EAAImL,MAAMlM,GAAIoL,EAAI,EAA3B,IAA8B1M,EAAI,EAAGA,EAAIigH,EAAIjgH,IACzC,IAAK,IAAIsM,EAAI09B,UAAUhqC,GAAIkB,EAAI,EAAGg/G,EAAK5zG,EAAEpM,OAAQgB,EAAIg/G,EAAIh/G,IAAKwL,IAC1DrK,EAAEqK,GAAKJ,EAAEpL,GACjB,OAAOmB,GAEXlC,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIkmH,EAAuB,WACvB,SAASA,EAAMhpH,GACX+nB,KAAKhjB,GAAK/E,EAAK+E,GACfgjB,KAAK7jB,KAAOlE,EAAKkE,KACjB6jB,KAAKnX,MAAQ5Q,EAAK4Q,MAClBmX,KAAK/X,KAAOhQ,EAAKgQ,KACjB+X,KAAKnjB,SAAW5E,EAAK4E,SACrBmjB,KAAKzU,SAAWtT,EAAKsT,SAKzB,OAHA01G,EAAMW,IAAM,WACR,OAAO,IAAIX,EAAM,KAEdA,EAZgB,GAc3BjnH,EAAQinH,MAAQA,EAChBjnH,EAAQsQ,WAAa,SAAUhO,GAC3B,IAAIO,EAAWkJ,MAAMC,QAAQ1J,EAAMO,UAAY07G,EAAej8G,EAAMO,UAAYP,EAAMO,SACtF,OAAOi1G,EAASA,EAAS,GAAIx1G,GAAQ,CAAEO,SAAUA,EAAUgM,MAAOipG,EAAS,GAAIx1G,EAAMuM,W,iCCpCzF,SAAS2qG,EAASr5G,GACd,IAAK,IAAIuB,KAAKvB,EAAQH,EAAQpB,eAAe8C,KAAI1B,EAAQ0B,GAAKvB,EAAEuB,IAEpEhD,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtDy4G,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,O,iCChBjB,IAAIU,EAAY9xF,MAAQA,KAAK8xF,UAAa,WAStC,OARAA,EAAWp5G,OAAOq5G,QAAU,SAAS/2G,GACjC,IAAK,IAAInB,EAAGtB,EAAI,EAAGgD,EAAIgnC,UAAU9pC,OAAQF,EAAIgD,EAAGhD,IAE5C,IAAK,IAAImD,KADT7B,EAAI0oC,UAAUhqC,GACOG,OAAOC,UAAUC,eAAeC,KAAKgB,EAAG6B,KACzDV,EAAEU,GAAK7B,EAAE6B,IAEjB,OAAOV,IAEK5B,MAAM4mB,KAAMuiB,YAE5ByvE,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEXZ,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAUD,EAAaZ,EAAQ,IAC/BgF,EAAehF,EAAQ,GACvBuG,EAAkBvG,EAAQ,KAC1ByQ,EAASzQ,EAAQ,KACjB0Q,EAAW1Q,EAAQ,KACnB2Q,EAAS3Q,EAAQ,KACjB4Q,EAAe5Q,EAAQ,KACvB6Q,EAAW7Q,EAAQ,KACnB8Q,EAAW9Q,EAAQ,KACnB+Q,EAAQ/Q,EAAQ,KAChBgR,EAAShR,EAAQ,KACjBiR,EAAYjR,EAAQ,KACpBkR,EAAoBlR,EAAQ,KAOhCp3G,EAAQuoH,OAAS,SAAU15G,GACvB,IAAI0pG,EAAKN,EAAQvwF,SAAS,IAAKte,EAAOmvG,EAAG,GAAI98D,EAAU88D,EAAG,GAItDmD,EAXM,SAAUtyG,EAAMqyC,GAAW,OAAO,SAAUz4C,GACtD,IAAIu1G,EACJ98D,EAAQq8D,EAASA,EAAS,GAAIp5G,OAAOsM,KAAK5B,GAAM0D,QAAO,SAAUC,EAAKnM,GAClE,OAAQmM,EAAInM,IAAK,IAClB,OAAO23G,EAAK,IAAOv1G,IAAOoG,EAAKpG,GAAKu1G,MAOtBiQ,CAAQp/G,EAAMqyC,GAC3B6/D,EAAQzsG,EAAMysG,MAAOtrF,EAAMnhB,EAAMmhB,IAAKy4F,EAAc55G,EAAM45G,YAAa3P,EAAKjqG,EAAM0sG,OAAQA,OAAgB,IAAPzC,EAAgB,CAAEz/E,IAAK,GAAIpqB,EAAG,IAAO6pG,EAAI4P,EAAO75G,EAAM65G,KAAMlN,EAAuB3sG,EAAM2sG,qBAAsBC,EAAmB5sG,EAAM4sG,iBAAkBkN,EAAsB95G,EAAM85G,oBAAqBC,EAAW/5G,EAAM+5G,SAAUlI,EAAa7xG,EAAM6xG,WAC5VrlD,EAAM,CACNigD,MAAOA,EACPtrF,IAAKA,EACLy4F,YAAaA,EACblN,OAAQA,EACRmN,KAAMA,EACNlN,qBAAsBA,EACtBC,iBAAkBA,EAClBl4D,OAbS,SAAUvgD,GACnB,QAASoG,EAAKpG,IAad04G,WAAYA,GAEZuB,EAAKhF,EAAQvwF,SAAS9lB,OAAOipC,YAAc,IAAM,SAAW,UAAW/d,EAAUmwF,EAAG,GAAI4L,EAAa5L,EAAG,GACxGqI,EAAKrN,EAAQvwF,UAAS,GAAQy3F,EAAamG,EAAG,GAAIlG,EAAYkG,EAAG,GACrErN,EAAQtwF,WAAU,WACd,IAAIs+B,EAAW,SAAUh1B,GACjBrvB,OAAOipC,YAAc,IACT,WAAZ/d,GAAwB+7F,EAAW,UAG3B,WAAZ/7F,GAAwB+7F,EAAW,WAGvC,OADAjnH,OAAOsqB,iBAAiB,SAAU+5B,GAC3B,WAAc,OAAOrkD,OAAOuqB,oBAAoB,SAAU85B,MAClE,CAACn5B,IACJ,IAAIg8F,EAA8B,WAAZh8F,EACtB,OAAQmrF,EAAQx/E,QAAQ9N,cAAcgzF,EAAgBtC,WAAWzhF,SAAU,CAAE74B,MAAOs6D,GAChF48C,EAAQx/E,QAAQ9N,cAAcw9F,EAAMlJ,IAAK,CAAE3D,MAAOzsG,EAAMysG,OACpDrD,EAAQx/E,QAAQ9N,cAAcyxF,EAAa5B,QAAS,CAAE3oF,WAAY,SAAU7M,MAAO,CAAEkQ,KAAM4zF,EAAkB,EAAI,EAAG/9F,OAAQ,KACxH+9F,EAAkB7Q,EAAQx/E,QAAQ9N,cAAcu9F,EAASxyF,OAAQoiF,EAAS,GAAI,CAAEqH,WAAYA,EAAYC,UAAWA,KAAgB,KACnInH,EAAQx/E,QAAQ9N,cAAcyxF,EAAa5B,QAAS,CAAEtlF,KAAM,IAAKgwC,GAAI,EAAGC,GAAI,GACxE8yC,EAAQx/E,QAAQ9N,cAAcyxF,EAAa5B,QAAS,CAAEl2D,GAAI,QACtD2zD,EAAQx/E,QAAQ9N,cAAco9F,EAAOhI,KAAM,QACnD9H,EAAQx/E,QAAQ9N,cAAcyxF,EAAa5B,QAAS,CAAEx1F,MAAO,CAAEkQ,KAAM4zF,EAAkB,EAAI,GAAKrG,GAAI,GAChGxK,EAAQx/E,QAAQ9N,cAAcm9F,EAASrH,UAAW,CAAExxG,EAAGssG,EAAOtsG,EAAGoqB,IAAKkiF,EAAOliF,IAAKqnF,WAAYA,KACjGoI,EAIoJ,KAJjI7Q,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KACxEsP,EAAY3Q,EAAQx/E,QAAQ9N,cAAcyxF,EAAa5B,QAAS,CAAEiI,GAAI,GAClExK,EAAQx/E,QAAQ9N,cAAcy9F,EAAOW,KAAM,CAAEL,KAAMA,KAAY,KACnEzQ,EAAQx/E,QAAQ9N,cAAcyxF,EAAa5B,QAAS,CAAEiI,GAAI,GACtDxK,EAAQx/E,QAAQ9N,cAAc29F,EAAkBU,gBAAiB,CAAEC,aAAcN,EAAqBvnF,SAAUo6E,OAC3HsN,EAE+I,KAF5H7Q,EAAQx/E,QAAQ9N,cAAcyxF,EAAa5B,QAAS,CAAEtlF,KAAM,IAAKtD,eAAgB,WAAY6wF,GAAI,GACjHxK,EAAQx/E,QAAQ9N,cAAcq9F,EAAapH,WAAY,CAAE5wF,IAAKA,IAC9Dy4F,EAAcxQ,EAAQx/E,QAAQ9N,cAAck9F,EAAOtH,MAAO,CAAEjgH,KAAMmoH,EAAYS,UAAW1I,WAAYiI,EAAYU,eAAkB,OAC3IL,EAAmB7Q,EAAQx/E,QAAQ9N,cAAcstF,EAAQx/E,QAAQ6gF,SAAU,KACvErB,EAAQx/E,QAAQ9N,cAAcs9F,EAAS3I,QAAS,CAAEt6F,MAAO,CACjD8H,QAASqyF,EAAa,QAAU,QACjCp6F,QAAS,WAAc,OAAOq6F,GAAU,MAC/CnH,EAAQx/E,QAAQ9N,cAAcs9F,EAAS5I,OAAQ,CAAEr6F,MAAO,CAChD2J,UAAWwwF,EAAa,qBAAuB,4BAEnDlH,EAAQx/E,QAAQ9N,cAAcyxF,EAAa5B,QAAS,CAAEiI,GAAI,EAAGj+D,GAAI,QAC7DyzD,EAAQx/E,QAAQ9N,cAAco9F,EAAOhI,KAAM,OAC/C9H,EAAQx/E,QAAQ9N,cAAc09F,EAAUe,QAAS,MACjDnR,EAAQx/E,QAAQ9N,cAAcyxF,EAAapC,IAAK,CAAE11D,GAAI,KAAM5iD,EAAG,EAAGvB,EAAG,GAAK6vB,EAAIltB,KAAI,SAAUlC,EAAGrC,GAAK,OAAQ05G,EAAQx/E,QAAQ9N,cAAcs9F,EAASxI,WAAY,CAAEp+G,IAAK,OAAST,EAAE4C,MAAQ,KAAMu9E,KAAMngF,UAAgB,Q,iCCjGrO,IAAI64G,EAAwBzzF,MAAQA,KAAKyzF,sBAAyB,SAAUC,EAAQn+E,GAEhF,OADI78B,OAAO+B,eAAkB/B,OAAO+B,eAAei5G,EAAQ,MAAO,CAAE34G,MAAOw6B,IAAiBm+E,EAAOn+E,IAAMA,EAClGm+E,GAEP1B,EAAgBhyF,MAAQA,KAAKgyF,cAAiB,SAAUh8F,GACxD,GAAIA,GAAOA,EAAI9a,WAAY,OAAO8a,EAClC,IAAI1c,EAAS,GACb,GAAW,MAAP0c,EAAa,IAAK,IAAI/Q,KAAK+Q,EAAStd,OAAOE,eAAeC,KAAKmd,EAAK/Q,KAAI3L,EAAO2L,GAAK+Q,EAAI/Q,IAE5F,OADA3L,EAAM,QAAc0c,EACb1c,GAEPq6G,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IA4BI64G,EA5BA3B,EAAUD,EAAaZ,EAAQ,IAC/ByC,EAAWF,EAAgBvC,EAAQ,KACnCiS,EAAa,WAAc,OAAQpR,EAAQx/E,QAAQ9N,cAAc,MAAO,CAAEG,MAAO,OAAQC,OAAQ,OAAQ0I,QAAS,aAClHwkF,EAAQx/E,QAAQ9N,cAAc,IAAK,CAAE+I,OAAQ,OAAQC,YAAa,IAAKC,KAAM,OAAQC,SAAU,WAC3FokF,EAAQx/E,QAAQ9N,cAAc,IAAK,CAAEgE,UAAW,iCAC5CspF,EAAQx/E,QAAQ9N,cAAc,IAAK,CAAEgE,UAAW,mCAC5CspF,EAAQx/E,QAAQ9N,cAAc,OAAQ,CAAEtqB,EAAG,mZAAoZqzB,OAAQ,YACvcukF,EAAQx/E,QAAQ9N,cAAc,OAAQ,CAAEtqB,EAAG,yNAA0NqzB,OAAQ,YAC7QukF,EAAQx/E,QAAQ9N,cAAc,OAAQ,CAAEtqB,EAAG,kdAAmd2C,GAAI,SAAU4wB,KAAM,aACthBqkF,EAAQx/E,QAAQ9N,cAAc,SAAU,CAAE+I,OAAQ,UAAW2xD,GAAI,KAAMC,GAAI,KAAM1kF,EAAG,OACpFq3G,EAAQx/E,QAAQ9N,cAAc,SAAU,CAAEiJ,KAAM,UAAWyxD,GAAI,KAAMC,GAAI,IAAK1kF,EAAG,UACzF0oH,EAAe,WAAc,OAAQrR,EAAQx/E,QAAQ9N,cAAc,MAAO,CAAEG,MAAO,OAAQC,OAAQ,OAAQ0I,QAAS,aACpHwkF,EAAQx/E,QAAQ9N,cAAc,IAAK,CAAE+I,OAAQ,OAAQC,YAAa,IAAKC,KAAM,OAAQC,SAAU,WAC3FokF,EAAQx/E,QAAQ9N,cAAc,IAAK,CAAEgE,UAAW,iCAC5CspF,EAAQx/E,QAAQ9N,cAAc,IAAK,CAAEgE,UAAW,mCAC5CspF,EAAQx/E,QAAQ9N,cAAc,OAAQ,CAAEtqB,EAAG,8YAA+YqzB,OAAQ,YAClcukF,EAAQx/E,QAAQ9N,cAAc,OAAQ,CAAEtqB,EAAG,yNAA0NqzB,OAAQ,YAC7QukF,EAAQx/E,QAAQ9N,cAAc,OAAQ,CAAEtqB,EAAG,idAAkduzB,KAAM,aACvgBqkF,EAAQx/E,QAAQ9N,cAAc,SAAU,CAAE+I,OAAQ,UAAW2xD,GAAI,KAAMC,GAAI,KAAM1kF,EAAG,OACpFq3G,EAAQx/E,QAAQ9N,cAAc,SAAU,CAAEiJ,KAAM,UAAWyxD,GAAI,KAAMC,GAAI,IAAK1kF,EAAG,UACzF2oH,EAAW1P,EAASphF,QAAQl6B,EAAEq7G,IAAqBA,EAAmBH,EAAqB,CAAC,+HAAgI,CAAC,kIACjOz5G,EAAQ+oH,KAAO,SAAUxQ,GACVA,EAAGmQ,KAAd,IACI5P,EAAKb,EAAQvwF,UAAS,GAAQ8hG,EAAS1Q,EAAG,GAAI2Q,EAAY3Q,EAAG,GACjE,OAAQb,EAAQx/E,QAAQ9N,cAAc4+F,EAAU,CAAExkG,QAAS,SAAUkM,GAC7Dw4F,GAAWD,KACVA,EAASvR,EAAQx/E,QAAQ9N,cAAc0+F,EAAY,MAAQpR,EAAQx/E,QAAQ9N,cAAc2+F,EAAc,S,iCCzCpH,IAAI7P,EAAwBzzF,MAAQA,KAAKyzF,sBAAyB,SAAUC,EAAQn+E,GAEhF,OADI78B,OAAO+B,eAAkB/B,OAAO+B,eAAei5G,EAAQ,MAAO,CAAE34G,MAAOw6B,IAAiBm+E,EAAOn+E,IAAMA,EAClGm+E,GAEPC,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAEI64G,EAFAC,EAAWF,EAAgBvC,EAAQ,KACvCp3G,EAAQopH,QAAUvP,EAASphF,QAAQgR,IAAImwE,IAAqBA,EAAmBH,EAAqB,CAAC,iBAAkB,4EAA6E,CAAC,iBAAkB,+EAA+E,SAAU/3G,GAAK,OAAOA,EAAE8R,UAAY,c,iCCT1U,IAAImmG,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAAIk3G,EAAU0B,EAAgBvC,EAAQ,IAClCsS,EAAmBtS,EAAQ,KAC/Bp3G,EAAQgpH,gBAAkB,SAAUzQ,GAChC,IAAI0Q,EAAe1Q,EAAG0Q,aAAc7nF,EAAWm3E,EAAGn3E,SAClD,OAAI6nF,GAAgB7nF,EACT62E,EAAQx/E,QAAQ9N,cAAc++F,EAAiB32D,eAAgB,MAEnE,O,iCCXX,IAAI0mD,EAAwBzzF,MAAQA,KAAKyzF,sBAAyB,SAAUC,EAAQn+E,GAEhF,OADI78B,OAAO+B,eAAkB/B,OAAO+B,eAAei5G,EAAQ,MAAO,CAAE34G,MAAOw6B,IAAiBm+E,EAAOn+E,IAAMA,EAClGm+E,GAEPC,EAAmB3zF,MAAQA,KAAK2zF,iBAAoB,SAAU39F,GAC9D,OAAQA,GAAOA,EAAI9a,WAAc8a,EAAM,CAAE,QAAWA,IAExDtd,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtD,IAYI64G,EAAkByD,EAAkBC,EAZpCrF,EAAU0B,EAAgBvC,EAAQ,IAClCuS,EAAYvS,EAAQ,IACpByC,EAAWF,EAAgBvC,EAAQ,KAEnCzkD,EAAoBg3D,EAAUlkC,UAAUm0B,IAAqBA,EAAmBH,EAAqB,CAAC,gGAAiG,CAAC,mGACxMmQ,EAAO/P,EAASphF,QAAQgR,IAAI4zE,IAAqBA,EAAmB5D,EAAqB,CAAC,wCAAyC,kBAAmB,6GAAgH,oBAAqB,+CAAgD,YAAa,wBAAyB,gBAAiB,iCAAkC,iCAAkC,CAAC,wCAAyC,kBAAmB,6GAAgH,oBAAqB,+CAAgD,YAAa,wBAAyB,gBAAiB,iCAAkC,oCAAoC,SAAU/3G,GAAK,OAAOA,EAAEmxD,QAAS,SAAUnxD,GAAK,OAAOA,EAAEmxD,QAAS,SAAUnxD,GAAK,OAAOA,EAAEmxD,KAAOC,MAAmB,SAAUpxD,GAAK,OAAOA,EAAEmxD,KAAOC,KAF37B,GAE09B,SAAUpxD,GAAK,OAAOA,EAAEsT,SAAU,SAAUtT,GAAK,OAAOA,EAAEsT,SAAU,SAAUtT,GAAK,OAAOA,EAAEsT,QAAU29C,GAC7kCk3D,EAAgBhQ,EAASphF,QAAQgR,IAAI6zE,IAAqBA,EAAmB7D,EAAqB,CAAC,6GAA8G,CAAC,gHACtNz5G,EAAQ+yD,eAAiB,SAAUwlD,GAC/B,IAAIO,EAAKP,EAAG1lD,KAAMA,OAAc,IAAPimD,EAAgB,GAAKA,EAAImE,EAAK1E,EAAGvjG,MAAOA,OAAe,IAAPioG,EAAgB,UAAYA,EACrG,OAAQhF,EAAQx/E,QAAQ9N,cAAck/F,EAAe,KACjD5R,EAAQx/E,QAAQ9N,cAAci/F,EAAM,CAAE/2D,KAAMA,EAAM79C,MAAOA,O,kBCJ9D,CAAC8zB,QAAQnqC,UAAWqqC,cAAcrqC,UAAWsqC,aAAatqC,WAbvDsN,SAAQ,SAAS80E,GACfA,EAAKniF,eAAe,WAGxBF,OAAO+B,eAAesgF,EAAM,SAAU,CACpC+oC,cAAc,EACdppH,YAAY,EACZqpH,UAAU,EACVhpH,MAAO,WACLilB,KAAKsiB,WAAWE,YAAYxiB,a,kBCIjC,CAAC8iB,QAAQnqC,UAAWqqC,cAAcrqC,UAAWsqC,aAAatqC,WAbvDsN,SAAQ,SAAS80E,GACfA,EAAKniF,eAAe,WAGxBF,OAAO+B,eAAesgF,EAAM,SAAU,CACpC+oC,cAAc,EACdppH,YAAY,EACZqpH,UAAU,EACVhpH,MAAO,WACLilB,KAAKsiB,WAAWE,YAAYxiB,a,kBCXpC,IAAMqT,EAAM,IAAIgM,IAAIzjC,OAAOwT,SAAS0D,MAC9BkxG,EAAc,IAAIC,gBAAgB5wF,EAAIkiF,QAEtC2O,EACJF,EAAYhlF,IAAI,2BAC8B,MAA9CglF,EAAYrpH,IAAI,0BAElB,GAAIiB,OAAO4hB,SAAW5hB,QAAUsoH,EAAwB,CACtD,IASIC,EATEC,EAAwB7/F,SAASI,cAAc,OACrDy/F,EAAsBplG,MAAMxR,SAAW,QACvC42G,EAAsBplG,MAAM7gB,aAAe,MAC3CimH,EAAsBplG,MAAM8M,UAA5B,gEAIAvH,SAASU,KAAKC,YAAYk/F,GAI1B59F,aAAY,WAAM,IACRd,EAAkBnB,SAAlBmB,cAER,GAAKA,EAAL,CAHgB,MAOqBA,EAAc6C,wBAA3C1D,EAPQ,EAORA,IAAKD,EAPG,EAOHA,KAAME,EAPH,EAOGA,MAAOC,EAPV,EAOUA,OAEpBs/F,EACoC,YAAxC3+F,EAAc4d,QAAQl5B,cAElBk6G,EAAaD,GAAqC,GAAL,EAC7CE,EAAcF,GAAqC,GAAL,EAC9CG,EAAeH,GAAsC,GAAN,GAC/CnkD,EAAgBmkD,GAAsC,GAAN,GAEtDD,EAAsBplG,MAAMyP,cAAgB,OAC5C21F,EAAsBplG,MAAM6F,IAA5B,UAAqCA,EAAMy/F,EAA3C,MACAF,EAAsBplG,MAAM4F,KAA5B,UAAsCA,EAAO2/F,EAA7C,MACAH,EAAsBplG,MAAM8F,MAA5B,UAAuCA,EAAQ0/F,EAA/C,MACAJ,EAAsBplG,MAAM+F,OAA5B,UAAwCA,EAASm7C,EAAjD,MACAkkD,EAAsBplG,MAAMgG,OAAS,aAEjCm/F,IAAyBz+F,GAOwB,aAFnDy+F,EAAuBz+F,GAEE4d,QAAQl5B,eAC/ByH,QAAQC,IAAI,eAAgBqyG,EAAqB7gF,QAAQl5B,kBAG5D,IAAO,M,+BCrDZ,SAASopG,EAASr5G,GACd,IAAK,IAAIuB,KAAKvB,EAAQH,EAAQpB,eAAe8C,KAAI1B,EAAQ0B,GAAKvB,EAAEuB,IAEpEhD,OAAO+B,eAAeT,EAAS,aAAc,CAAEe,OAAO,IACtDy4G,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,MACjBoC,EAASpC,EAAQ,O,mBCTjBn3G,EAAOD,QAAU+B,IAA0B","file":"module.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([571,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","module.exports = __webpack_public_path__ + \"images/Square.png\";","module.exports = __webpack_public_path__ + \"images/Hotspot_Done.svg\";","import { Block, Blocks } from '@chameleoncreator/creator-app';\n\nexport enum TrackerState {\n  DIRTY,\n  CLEAN,\n  DELETED,\n}\n\nexport interface Tracker {\n  [key: string]: TrackerState;\n}\n\ninterface Timing {\n  firstLoad: number;\n  complete: number;\n  buttonClick: { [key: string]: number };\n}\n\nexport interface Report {\n  key?: number;\n  id: string;\n  question?: string | undefined;\n  reportable: 'multichoice' | 'sortation' | 'likert' | 'fillin' | 'longfillin';\n  type: string;\n  response: string;\n  correct?: string;\n  result: 0 | 1;\n}\n\nexport interface AssessmentData {\n  maxAttempts: number;\n  scoring: boolean;\n  score: number;\n  passMark: number;\n  passed: boolean;\n}\n\nexport interface QuestionData {\n  id: string;\n  questionName: string;\n  answer?: string[];\n  correctAnswer: string[];\n  isCorrect?: boolean | undefined;\n  attemptCount?: string | number;\n  navigateToResults?: boolean;\n  isLocked?: boolean;\n  submitButtonLabel?: string;\n  hasNotBeenAttempted?: boolean | undefined;\n}\n\nexport interface Question {\n  [key: string]: QuestionData;\n}\n\nexport interface Assessment {\n  [key: string]: {\n    data?: AssessmentData;\n    results?: {\n      [key: string]: Question;\n    };\n  };\n}\n\nexport interface Assessments {\n  [key: string]: Assessment;\n}\n\nexport type Audio = {\n  id?: string;\n  src: string;\n  audioSrc: string;\n  autoPlay?: boolean;\n  controls?: boolean;\n  delay?: number;\n  pause?: boolean;\n} | null;\n\nexport type ModuleIsFreeScrolling = {\n  desktop: boolean;\n  device: boolean;\n};\n\nexport type IdSIdMapping = {\n  idToSId: { [key: string]: Number };\n  sIdToId: { [key: string]: string };\n};\n\nexport type LessonStatus = 'completed/incomplete' | 'passed/failed/incomplete';\n\nexport const themeButtonDefault = {\n  label: undefined,\n  shape: 'pill',\n  backgroundColor: '#222222',\n  backgroundOpacity: 100,\n  backgroundColorOnHover: undefined,\n  backgroundOpacityOnHover: 80,\n  borderWidth: 1,\n  focusColor: undefined,\n  includeButtonBackground: true,\n  useLargeButton: false,\n  borderRadius: 0,\n  textColor: '#fff',\n  textColorOnHover: undefined,\n  shadow: true,\n  outline: false,\n  outlineColor: undefined,\n  fontFamily: undefined,\n  fontSize: 14,\n  bold: false,\n  uppercase: false,\n};\n\nexport type TButton = typeof themeButtonDefault & {\n  shape: 'pill' | 'rectangle' | 'circle';\n  label: string | undefined;\n  backgroundColorOnHover: string | undefined;\n  focusColor: string | undefined;\n  textColorOnHover: string | undefined;\n  outlineColor: string | undefined;\n  fontFamily: string | undefined;\n};\n\nexport type TButtons = {\n  [key: string]: TButton;\n};\n\nexport type LandingPagesSeenState = {\n  [sId: number | string]: number[];\n};\n\nexport interface NextState {\n  apiError: { count: number; err: any };\n  blocks: { [key: string]: Block };\n  bookmarkLoaded: boolean;\n  bookmarkLocation: string | undefined;\n  currentInteraction?: string;\n  currentInteractionBlockId?: string | null;\n  currentTopic?: string;\n  audio?: Audio;\n\n  audioAcknowledged: boolean;\n  customFonts: any[];\n  error: any;\n  exit: boolean;\n  exitComplete: boolean;\n  feedback: {\n    [key: string]: {\n      key: string;\n      rating: number;\n      message: string;\n      identity: string;\n      reference: string;\n    };\n  };\n  focusedNodeId?: string;\n  hasError: boolean;\n  hideHeader: boolean;\n  header?: Block;\n  standardHeader?: Block;\n  graphicHeader?: Block;\n  standardHeaderLogo?: Block;\n  graphicHeaderBackground?: Block;\n  graphicHeaderLogo?: Block;\n  interactionsLocked: string[];\n  interactionsOpen: string[];\n  interactionsSeen: string[];\n  landingPagesSeenState: LandingPagesSeenState;\n  isScrolling: boolean;\n  lastFocusedNodeId?: string;\n  links: any;\n  mirrorActive: boolean;\n  idToSIdMap: { [key: string]: number };\n  sIdToIdMap: { [key: string]: number };\n  topicsIdSIdMapping: IdSIdMapping;\n  assessmentQuestionIdSIdMapping: IdSIdMapping;\n  nextInteractionMap: { [key: string]: string };\n  projectId?: string;\n  rootBlockId: string | undefined;\n  scormSettings: {\n    passMark: number;\n    setCompleteFromScore: boolean;\n    setCompleteOnExit: boolean;\n    setCompleteWhenAllPagesViewed: boolean;\n    sendOnlySuccessStatus: boolean;\n    lessonStatus: LessonStatus;\n  };\n  theme: {\n    backgroundColor: string;\n    buttonBackgroundColor: string;\n    buttonBorderRadius: number;\n    buttonOutline: boolean;\n    buttonShadow: boolean;\n    buttonShape: string;\n    useLargeButton: boolean;\n    buttonTextColor: string;\n    buttonHover: string;\n    buttons: TButtons;\n    fontFamilies: any[];\n    fontFamily: string;\n    fontSize: number;\n    lineHeight: number;\n    padding: number;\n    margin: number;\n    paragraphSpacing: number;\n    fontSizes: {\n      'Large screen': number;\n      'Medium screen': number;\n      'Small screen': number;\n    };\n    highContrast: boolean;\n    recoloredChameleonImages: any;\n    loadingSpinnerColor: string;\n    textColor: string;\n    useImagePreloader: boolean;\n    enableBookmarking: boolean;\n    textToSpeech: boolean;\n    textToSpeechVoice: string;\n    moduleIsFreeScrolling: ModuleIsFreeScrolling;\n    giveFocusToFirstSectionOnLoad: boolean;\n    disableLockDownInPreview: boolean;\n    userPalette: any[];\n    menu: {\n      'Menu background colour': string;\n      'Menu text and close colour': string;\n      'Menu text hover colour': string;\n      'Menu text active colour': string;\n    };\n    headings: {\n      h1: string | number;\n      h2: string | number;\n      h3: string | number;\n      h4: string | number;\n      h5: string | number;\n      h6: string | number;\n    };\n    links: {\n      link: string;\n      visited: string;\n      hover: string;\n      focus: string;\n      active: string;\n    };\n    linksSecondary: {\n      link: string;\n      visited: string;\n      hover: string;\n      focus: string;\n      active: string;\n    };\n  };\n  themeId?: string;\n  tracker: Tracker;\n  userBehaviour: {\n    interactionTiming: { [key: string]: Timing };\n    score: { [key: string]: 0 | 1 };\n    scormResponses: {\n      [key: string]: Report;\n    };\n  };\n  moduleVariables: { [key: string]: string };\n  assessments: Assessments;\n}\n\nexport type State = NextState;\n\nexport type Action = { type: string; data: { [key: string]: any } };\n\nexport const initialState: NextState = {\n  apiError: { count: 0, err: undefined },\n  blocks: {},\n  bookmarkLoaded: false,\n  bookmarkLocation: undefined,\n  currentInteraction: undefined,\n  currentInteractionBlockId: undefined,\n  currentTopic: undefined,\n  audio: null,\n  audioAcknowledged: false,\n  customFonts: [],\n  error: undefined,\n  exit: false,\n  exitComplete: false,\n  focusedNodeId: undefined,\n  feedback: {},\n  hasError: false,\n  hideHeader: false,\n  standardHeader: undefined,\n  graphicHeader: undefined,\n  standardHeaderLogo: undefined,\n  graphicHeaderBackground: undefined,\n  graphicHeaderLogo: undefined,\n  interactionsLocked: [],\n  interactionsOpen: [],\n  interactionsSeen: [],\n  landingPagesSeenState: {},\n  isScrolling: false,\n  lastFocusedNodeId: undefined,\n  links: {},\n  mirrorActive: false,\n  idToSIdMap: {},\n  sIdToIdMap: {},\n  topicsIdSIdMapping: {\n    idToSId: {},\n    sIdToId: {},\n  },\n  assessmentQuestionIdSIdMapping: {\n    idToSId: {},\n    sIdToId: {},\n  },\n  nextInteractionMap: {},\n  projectId: undefined,\n  rootBlockId: undefined,\n  scormSettings: {\n    passMark: 80,\n    setCompleteFromScore: false,\n    setCompleteOnExit: false,\n    setCompleteWhenAllPagesViewed: true,\n    sendOnlySuccessStatus: false,\n    lessonStatus: 'completed/incomplete',\n  },\n  theme: {\n    backgroundColor: '#ffffff',\n    buttonBackgroundColor: '#060709',\n    buttonBorderRadius: 0,\n    buttonOutline: false,\n    buttonShadow: false,\n    buttonShape: 'pill',\n    useLargeButton: false,\n    buttonTextColor: '#ffffff',\n    buttonHover: '',\n    fontFamilies: [],\n    fontFamily: '',\n    fontSize: 16,\n    lineHeight: 1.5,\n    padding: 10,\n    margin: 0,\n    paragraphSpacing: 16,\n    fontSizes: {\n      'Large screen': 16,\n      'Medium screen': 16,\n      'Small screen': 16,\n    },\n    loadingSpinnerColor: '#cea5f9',\n    buttons: {\n      main: themeButtonDefault as TButton,\n    },\n    highContrast: false,\n    recoloredChameleonImages: {},\n    textColor: '#060709',\n    useImagePreloader: true,\n    enableBookmarking: true,\n    moduleIsFreeScrolling: {\n      desktop: false,\n      device: false,\n    },\n    giveFocusToFirstSectionOnLoad: true,\n    textToSpeech: false,\n    textToSpeechVoice: '',\n    disableLockDownInPreview: false,\n    userPalette: [],\n    menu: {\n      'Menu background colour': '#ffffff',\n      'Menu text and close colour': '#000000',\n      'Menu text hover colour': '#0000ff',\n      'Menu text active colour': '#ff0000',\n    },\n    headings: {\n      h1: 1,\n      h2: 1,\n      h3: 1,\n      h4: 1,\n      h5: 1,\n      h6: 1,\n    },\n    links: {\n      link: '#0000ff',\n      visited: '#800080',\n      hover: '#0000ff',\n      focus: '#e59700',\n      active: '#ff0000',\n    },\n    linksSecondary: {\n      link: '#0000ff',\n      visited: '#800080',\n      hover: '#0000ff',\n      focus: '#e59700',\n      active: '#ff0000',\n    },\n  },\n  themeId: undefined,\n  tracker: {},\n  userBehaviour: {\n    score: {},\n    interactionTiming: {},\n    scormResponses: {},\n  },\n  moduleVariables: {},\n  assessments: {},\n};\n","import { Block } from '@chameleoncreator/creator-app';\n\nconst findHeaderElementByType = (blocks, type) => {\n  return Object.values(blocks).find(block => {\n    return (block as Block).type === type;\n  });\n};\n\nexport const addHeaderBlocksToStateAction = (dispatch, getState) => {\n  const { blocks } = getState();\n\n  const header = findHeaderElementByType(\n    blocks,\n    'Header'\n  ) as Block;\n\n  const standardHeader = findHeaderElementByType(\n    blocks,\n    'StandardHeader'\n  ) as Block;\n\n  const graphicHeader = findHeaderElementByType(\n    blocks,\n    'GraphicHeader'\n  ) as Block;\n\n  const [standardHeaderLogo] = (\n    (standardHeader?.children as Block[]) || []\n  ).map(child => {\n    return blocks[child.id];\n  });\n\n  const [graphicHeaderBackground, graphicHeaderLogo] = (\n    (graphicHeader?.children as Block[]) || []\n  ).map(child => {\n    return blocks[child.id];\n  });\n\n  dispatch({\n    type: 'ADD_HEADER_BLOCKS_TO_STATE',\n    data: {\n      header,\n      standardHeader,\n      graphicHeader,\n      standardHeaderLogo,\n      graphicHeaderBackground,\n      graphicHeaderLogo,\n    },\n  });\n};\n","export const rehydrateAction = (data: any) => ({\n  type: 'REHYDRATE',\n  data: data,\n});\n","\nexport const setAPIErrorAction = err => {\n  return {\n    type: 'SET_API_ERROR',\n    data: err,\n  };\n};\n","import * as Sentry from '@sentry/browser';\nimport { setAPIErrorAction } from 'actions/setAPIErrorAction';\nimport { Dispatch } from 'redux';\nimport { NextState, TrackerState } from './store';\n\ninterface Callable {\n  (dispatch: Dispatch, getState: () => NextState): Promise<Boolean>;\n}\n\nexport const queue = (fn: Callable): Callable => {\n  let run = [false, false];\n\n  let runner: Callable = async (\n    dispatch: Dispatch,\n    getState: () => NextState\n  ): Promise<Boolean> => {\n    let [isRunning] = run;\n\n    if (isRunning) {\n      run = [true, true];\n      return false;\n    }\n\n    let next = true;\n    while (next) {\n      run = [true, false];\n      await fn(dispatch, getState);\n\n      let [_, runAgain] = run;\n      if (!runAgain) {\n        next = false;\n      }\n    }\n\n    run = [false, false];\n    return true;\n  };\n\n  return runner;\n};\n\nexport const mirror: Callable = async (\n  dispatch,\n  getState\n): Promise<Boolean> => {\n  // Get the current tracker state\n  const state = getState();\n  const tracker = state.tracker;\n  const blocks = state.blocks;\n\n  dispatch({ type: 'MIRROR_ACTIVE', data: true });\n\n  // Reset the tracker for async saving\n  const newTracker = Object.keys(tracker)\n    .map(k => {\n      switch (tracker[k]) {\n        case TrackerState.DIRTY:\n          return TrackerState.CLEAN;\n        case TrackerState.DELETED:\n          return undefined;\n        default:\n          return TrackerState.CLEAN;\n      }\n    })\n    .filter(r => !r);\n\n  dispatch({\n    type: 'SET_TRACKER',\n    data: newTracker,\n  });\n\n  // SAVE and DELETE changes in tracker\n  const toUpdate = Object.keys(tracker).filter(\n    k => tracker[k] !== TrackerState.CLEAN\n  );\n\n  const toSet = toUpdate\n    .filter(k => tracker[k] !== TrackerState.CLEAN)\n    .map(k => blocks[k])\n    .filter(b => b)\n    .map(b => {\n      if (tracker[b.id] === TrackerState.DELETED) {\n        b.__delete = true;\n        b.project_id = state.projectId;\n        return b;\n      } else {\n        b.__isSaving = true;\n        b.project_id = state.projectId;\n        return b;\n      }\n    });\n\n  let stop = false;\n\n  await window.client.blocks\n    .setMany(toSet, state.projectId)\n    .then(result => {\n      if (Array.isArray(result)) {\n        result.forEach(b => {\n          if (b.deleted_at) {\n            // remove\n            dispatch({ type: 'REMOVE_BLOCK_LOCAL', data: b });\n          } else {\n            // maybe validate\n          }\n        });\n      }\n    })\n    .catch(err => {\n      Sentry.withScope(scope => {\n        scope.setExtra('message', err.err);\n        Sentry.captureException(err);\n      });\n\n      dispatch(setAPIErrorAction(err));\n\n      // RESTORE TRACKER\n      const currentStore = getState();\n      const currrentTracker = currentStore.tracker;\n\n      const nextTracker = { ...tracker };\n      Object.keys(currrentTracker).forEach(k => {\n        switch (currrentTracker[k]) {\n          case TrackerState.DELETED: {\n            nextTracker[k] = TrackerState.DELETED;\n            break;\n          }\n          case TrackerState.DIRTY: {\n            nextTracker[k] = TrackerState.DIRTY;\n            break;\n          }\n          default:\n            break;\n        }\n      });\n\n      dispatch({\n        type: 'SET_TRACKER',\n        data: nextTracker,\n      });\n    });\n\n  dispatch({ type: 'MIRROR_ACTIVE', data: false });\n\n  return true;\n};\n\nexport const Mirror = queue(mirror);\n","import { Blocks } from '@chameleoncreator/creator-app';\n\n\nexport const setBlocksLocalAction = (blocks: Blocks) => {\n  return {\n    type: 'SET_BLOCKS',\n    data: blocks,\n  };\n};\n","import { Blocks } from '@chameleoncreator/creator-app';\nimport { Mirror } from 'store/mirror';\nimport { remoteable } from 'store/next';\nimport { setBlocksLocalAction } from './setBlocksLocalAction';\n\nexport var setBlocksAction = (blocks: Blocks): any => {\n  return async (dispatch, getState) => {\n    const s = getState();\n\n    const bs = Object.keys(blocks).map(key => {\n      blocks[key].__isSaving = true;\n      blocks[key].project_id = s.projectId;\n      return blocks[key];\n    });\n\n    const localbs = bs.reduce((acc, b) => {\n      acc[b.id] = b;\n      return acc;\n    }, {});\n\n    dispatch(setBlocksLocalAction(localbs));\n\n    if (remoteable()) {\n      Mirror(dispatch, getState);\n    }\n  };\n};\n","import { State } from '../store/store';\nimport {\n  Block,\n  Blocks,\n  BlockList,\n} from '@chameleoncreator/creator-app/build/utils/block';\n\nexport const getBlock = (blocks: Blocks, id: string): Block => {\n  return blocks[id];\n};\n\nexport const getBlockFromState = (state: State, id: string): Block =>\n  getBlock(state.blocks, id);\n\nexport type Selector = (block: Block) => boolean;\n\nexport const findBlocks = (blocks: Blocks, selector: Selector): Block[] => {\n  const keys = Object.keys(blocks).filter(k => {\n    return selector(blocks[k]);\n  });\n\n  return keys.map(k => blocks[k]).filter(i => i);\n};\n\n// using a BFS search filter blocks down to a single new root block provided\nexport const findBlocksIn = (\n  blocks: Blocks,\n  block: Block,\n  selector: Selector\n): Block[] => {\n  let toVisit = [] as string[];\n  let discovered = [] as string[];\n\n  // Find all initial block children as \"seeds\".\n  if (block && block.children && Array.isArray(block.children)) {\n    block.children.forEach(k => {\n      toVisit.push(k.id);\n      discovered.push(k.id);\n    });\n  }\n\n  for (var i = 0; toVisit.length > 0; i++) {\n    const b = blocks[toVisit.shift()!];\n    if (b && b.children && Array.isArray(b.children)) {\n      b.children.forEach(k => {\n        toVisit.push(k.id);\n        discovered.push(k.id);\n      });\n    }\n  }\n\n  const keys = discovered.filter(k => {\n    return selector(blocks[k]);\n  });\n\n  return keys.map(k => blocks[k]);\n};\n\nconst getBlockChildren = (blocks: Blocks, block: Block): Blocks => {\n  if (Array.isArray(block.children)) {\n    // turn block children from refs into blocks\n    const blockList = [] as Block[];\n\n    block.children.forEach(block => {\n      if (block.type === 'Ref') {\n        blockList.push(blocks[block.id]);\n      } else {\n        blockList.push(block);\n      }\n    });\n\n    // turn an array of blocks into object of blocks and include all the blocks\n    // children\n    return blockList.reduce((acc, cur) => {\n      if (!cur) {\n        return acc;\n      }\n\n      return {\n        ...acc,\n        ...{ [cur.id]: cur },\n        ...getBlockChildren(blocks, cur),\n      };\n    }, {});\n  }\n  // no block children, just return an empty object\n  return {};\n};\n\nexport const filterToNewRoot = (blocks: Blocks, rootBlock: Block): Blocks => {\n  return getBlockChildren(blocks, rootBlock);\n};\n\nexport const getAllTopics = (blocks: Blocks): BlockList => {\n  const keys = Object.keys(blocks).filter(k => {\n    return blocks[k].type === 'Topic';\n  });\n\n  return keys.map(k => blocks[k]).filter(i => i);\n};\n\nexport const getTopicGroup = (blocks: Blocks): Block => {\n  let groupBlock: Block;\n\n  const possibleGroups = findBlocks(\n    blocks,\n    (b => b.meta && b.meta.subType === 'Topic') as Selector\n  );\n\n  if (possibleGroups.length === 1) {\n    groupBlock = possibleGroups[0];\n  } else {\n    throw new Error('Multiple AnimationGroups found in list');\n  }\n\n  return groupBlock;\n};\n\nexport const getTopicInteractionGroup = (\n  blocks: Blocks,\n  block: Block\n): Block => {\n  if (block.type !== 'Topic') {\n    throw new Error(\n      `Must provide a block of type: Topic; type \"${block.type}\" provided instead`\n    );\n  }\n\n  let groupBlock: Block;\n  const newRootBlockList = filterToNewRoot(blocks, block);\n  const possibleGroups = findBlocks(\n    newRootBlockList,\n    (b => b.meta && b.meta.subType === 'Interaction') as Selector\n  );\n\n  if (possibleGroups.length === 1) {\n    groupBlock = possibleGroups[0];\n  } else {\n    throw new Error('Multiple AnimationGroups found in list');\n  }\n\n  return groupBlock;\n};\n\nexport const getTopicGroupFromState = (state: State) =>\n  getTopicGroup(state.blocks);\n\nexport const getTopicsFromGroup = (\n  state: State,\n  topicGroup: Block\n): BlockList => {\n  if (Array.isArray(topicGroup.children)) {\n    return topicGroup.children\n      .map(c => {\n        return state.blocks[c.id];\n      })\n      .filter(i => i);\n  }\n  return [];\n};\n\n//\nexport const getInteractionsFromTopicAndState = (\n  state: State,\n  topic: Block\n): BlockList => {\n  const interactionGroup = getTopicInteractionGroup(state.blocks, topic);\n  if (interactionGroup && Array.isArray(interactionGroup.children)) {\n    let interactions = interactionGroup.children\n      .map(c => {\n        return state.blocks[c.id];\n      })\n      .filter(i => i);\n\n    if (topic?.props?.asAssessment) {\n      // console.log(topic.props, 'isAssessment');\n\n      const introduction: Block | undefined = interactions.find(\n        i => i?.props?.type === 'AssessmentIntroduction'\n      );\n      const questions: Block[] | undefined = interactions.filter(\n        q => q?.props?.type === 'AssessmentQuestion'\n      );\n      const results: Block | undefined = interactions.find(\n        i => i?.props?.type === 'AssessmentResults'\n      );\n\n      if (!introduction || !questions || !results) {\n        throw new Error(\n          'NO ASSESSMENT WILL BE RETURNED HERE. MISSING : introduction || questions || results !!!'\n        );\n      }\n\n      return [introduction, ...questions, results];\n    }\n\n    // return interactionGroup.children\n    //   .map(c => {\n    //     return state.blocks[c.id];\n    //   })\n    //   .filter(i => i);\n\n    return interactions;\n  }\n  return [];\n};\n\n//\nlet allInteractions;\n\nexport const getAllInteractions = (state: State): BlockList => {\n  if (!window.dev?.() && allInteractions) {\n    return allInteractions;\n  }\n\n  allInteractions = getAllTopics(state.blocks)\n    .map((topic: Block) => getInteractionsFromTopicAndState(state, topic))\n    .reduce((acc, cur) => [...acc, ...cur], []);\n\n  return allInteractions;\n};\n\n//\nlet allTopicsOrdered;\n\nexport const getAllTopicsOrdered = (blocks: Blocks): BlockList => {\n  if (!window.dev?.() && allTopicsOrdered) {\n    return allTopicsOrdered;\n  }\n\n  let groupBlock: Block;\n\n  const possibleGroups = findBlocks(\n    blocks,\n    (b =>\n      b.meta && b.type == 'AnimationGroup' && b.meta.subType === 'Topic') as any\n  );\n\n  if (possibleGroups.length === 1) {\n    groupBlock = possibleGroups[0];\n  } else {\n    throw new Error('Multiple AnimationGroups found in list');\n  }\n\n  allTopicsOrdered = (groupBlock.children as Block[])\n    .map((k: Block) => blocks[k.id])\n    .filter(i => i);\n\n  return allTopicsOrdered;\n};\n\n//\nlet allInteractionsOrdered;\n\nexport const getAllInteractionsOrdered = (state: State): BlockList => {\n  if (!window.dev?.() && allInteractionsOrdered) {\n    return allInteractionsOrdered;\n  }\n\n  allInteractionsOrdered = getAllTopicsOrdered(state.blocks)\n    .map((topic: Block) => getInteractionsFromTopicAndState(state, topic))\n    .reduce((acc, cur) => [...acc, ...cur], []);\n\n  return allInteractionsOrdered;\n};\n\nexport const isRefBlock = (block: Block): boolean => {\n  return block.type === 'Ref';\n};\n","import getStore from 'services/getStore';\nimport getTopics from 'services/apiHelpers/getTopics';\n\nlet cachedTopics;\n\nexport default () => {\n  // console.time('getCurrentTopic');\n\n  const state = getStore().getState();\n\n  if (window.dev && !window?.dev() && !cachedTopics) {\n    cachedTopics = getTopics();\n  }\n\n  const topics = cachedTopics || getTopics();\n  const currentTopic = topics.find(t => t.id === state.currentTopic);\n\n  // console.timeEnd('getCurrentTopic');\n\n  return currentTopic || topics[0];\n};\n","import getStore from 'services/getStore';\nimport { getBlockFromState } from 'selectors/block';\n\nexport default id => getBlockFromState(getStore().getState(), id);\n","import getStore from 'services/getStore';\nimport { getTopicGroupFromState, getTopicsFromGroup } from 'selectors/block';\n\nexport default () => {\n  const store = getStore && getStore();\n\n  if (store) {\n    const state = store.getState();\n    if (state) {\n      return getTopicsFromGroup(state, getTopicGroupFromState(state));\n    }\n  }\n\n  return [];\n};\n","import getStore from 'services/getStore';\nimport getCurrentTopic from 'services/apiHelpers/getCurrentTopic';\nimport { getBlock, getInteractionsFromTopicAndState } from 'selectors/block';\nimport { Block } from '@chameleoncreator/creator-app';\n\nlet cachedInteractions = {};\n\nexport default (topic: Block | null = null) => {\n  const state = getStore().getState();\n  const block = getBlock(\n    state.blocks,\n    topic ? topic.id : getCurrentTopic()!.id\n  );\n\n  if (\n    window.dev &&\n    !window?.dev() &&\n    topic?.id &&\n    !cachedInteractions[topic.id]\n  ) {\n    cachedInteractions[topic.id] = getInteractionsFromTopicAndState(\n      state,\n      block\n    );\n\n    return cachedInteractions[topic.id];\n  }\n\n  return getInteractionsFromTopicAndState(state, block);\n};\n","export const getTopicsNotHiddenFromNextAndBackNavigation = (topics: any[]) => {\n  return topics.filter(topic => {\n    // if the topic is hidden from next and back nav. nix it\n    const { hiddenFromNextAndBackNavigation } = topic?.props;\n\n    //\n    return !hiddenFromNextAndBackNavigation;\n  });\n};\n","import getTopics from 'services/apiHelpers/getTopics';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport { Block } from '@chameleoncreator/creator-app';\nimport { getTopicsNotHiddenFromNextAndBackNavigation } from 'services/getTopicsNotHiddenFromNextAndBackNavigation';\n\nexport const ONLY_TOPICS_NOT_HIDDEN_FROM_NEXT_AND_BACK_NAVIGATION =\n  'ONLY_TOPICS_NOT_HIDDEN_FROM_NEXT_AND_BACK_NAVIGATION';\n\nexport default (\n  onlyTopicsNotHiddenFromNextAndBackNavigation:\n    | typeof ONLY_TOPICS_NOT_HIDDEN_FROM_NEXT_AND_BACK_NAVIGATION\n    | undefined = undefined\n) => {\n  let topics = getTopics();\n\n  if (onlyTopicsNotHiddenFromNextAndBackNavigation) {\n    topics = getTopicsNotHiddenFromNextAndBackNavigation(topics);\n  }\n\n  return topics.reduce((acc: Block[], curr: Block) => {\n    return [...acc, ...getInteractionsInTopic(curr).map(i => i?.id)] as Block[];\n  }, []);\n};\n","import { Block } from '@chameleoncreator/creator-app';\nimport getStore from 'services/getStore';\n\nexport function getAllAssessmentQuestions() {\n  const state = getStore().getState();\n\n  const allAssessmentQuestions = (Object.values(\n    state.blocks\n  ) as Block[]).reduce((acc, curr) => {\n    return curr.type.toLowerCase() === 'assessmentquestion'\n      ? [...acc, curr]\n      : acc;\n  }, [] as Block[]);\n\n  return allAssessmentQuestions;\n}\n","import {\n  Block,\n  Blocks,\n  cloneBlock,\n  BlockList,\n} from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport uuid from 'uuidv4';\nimport { findBlocksIn } from 'selectors/block';\nimport getAllInteractionsOfType from 'services/apiHelpers/getAllInteractionsOfType';\nimport getTopics from 'services/apiHelpers/getTopics';\nimport getAllInteractions from 'services/apiHelpers/getAllInteractions';\nimport { getAllAssessmentQuestions } from 'services/apiHelpers/getAllAssessmentQuestions';\nimport { getNameWithoutHashId } from 'services/getNameWithoutHashId';\n\nexport const flatten = (block: Block): [Blocks, string] => {\n  let blocks: Blocks = {};\n  const rootBlockId = block.id;\n  const rootBlock = cloneBlock(block);\n  blocks[rootBlockId] = rootBlock;\n\n  if (Array.isArray(rootBlock.children)) {\n    rootBlock.children.forEach(child => {\n      if (child.type === 'Ref') {\n        return;\n      }\n\n      const [childBlocks] = flatten(child);\n      blocks = {\n        ...blocks,\n        ...childBlocks,\n      };\n    });\n  }\n\n  makeReference(blocks);\n\n  return [blocks, rootBlockId];\n};\n\nexport const makeReference = (blocks: Blocks) => {\n  Object.keys(blocks).forEach(k => {\n    const children = blocks[k].children;\n    if (Array.isArray(children)) {\n      let c = children.map(child => ({ id: child.id, type: 'Ref' })) as Block[];\n      blocks[k].children = c;\n    }\n  });\n};\n\n// TODO: Remove this function it is DANGEROUS because block is a JS REFERENCE POINTER\nexport const expand = (blocks: Blocks, block: Block): Block => {\n  let b;\n\n  if (block.type === 'Ref') {\n    const fetchedBlock = blocks[block.id];\n    b = cloneBlock(fetchedBlock);\n  } else {\n    b = cloneBlock(block);\n  }\n  if (b.children && Array.isArray(b.children)) {\n    b.children = b.children.map(c => expand(blocks, c));\n  }\n\n  return b;\n};\n\nexport const expandBlock = (blocks: Blocks) => (block: Block): Block => {\n  return expand(blocks, block);\n};\n\n// Using the known interactions, create a duplicated interactions name.\nexport const makeInteractionName = (\n  type: string,\n  dupCtx: duplicationCtx\n): string => {\n  const iMap = {\n    TextAndImage: 'Media',\n    DragAndDrop: 'Matching',\n    AssessmentQuestion: 'Question',\n  };\n\n  const typeName = iMap[type] || type;\n\n  const prevDuplicationOfType = dupCtx.interactionDuplications[type] || 0;\n  const totalTypeCount =\n    getAllInteractionsOfType(type).length + prevDuplicationOfType;\n\n  return `${typeName} #${totalTypeCount + 1}`;\n};\n\n// TODO: Change duplicate block to use block provided duplicate function\n// Take a single block and return a new block with all the appropriate data updated correctly\nexport const duplicateBlock = (\n  block: Block,\n  dupCtx: duplicationCtx,\n  index?: number\n): Block => {\n  // Clone Block\n  const nextBlock = cloneBlock(block);\n\n  // Reset ID (uuidv4())\n  nextBlock.id = uuid();\n\n  // Update relevant data within a block\n  switch (block.type) {\n    case 'Topic':\n      //\n      const topics = getTopics();\n      let name;\n\n      if (block.props?.asAssessment) {\n        name = `Assessment #${topics.filter((t: Block) => t.props?.asAssessment)\n          .length + 1}`;\n      } else {\n        name = `Topic #${topics.filter((t: Block) => !t.props?.asAssessment)\n          .length + 1}`;\n      }\n\n      nextBlock.props!.name = name;\n\n      // update with new sId\n      nextBlock.props!.sId = getSId('topic'); // uuid();\n\n      break;\n\n    case 'Interaction':\n      // we'll hit pause on this approach for the moment\n      //\n      // nextBlock.props!.name = makeInteractionName(\n      //   nextBlock.meta!.subType,\n      //   dupCtx\n      // );\n\n      const nameWithoutHashId = getNameWithoutHashId(nextBlock.props!.name);\n\n      // update with new sId\n      const nextSId = getSId('interaction');\n      nextBlock.props!.sId =\n        index === undefined ? nextSId : nextSId + (index - 1); // uuid();\n\n      //\n      // using the sId is as good as any other random hash\n      // mostly meaningless to the author\n      // will look to update with the sequence. . .\n      nextBlock.props!.name = `${nameWithoutHashId} #${nextBlock.props!.sId}`;\n\n      dupCtx.interactionDuplications[block.meta!.subType] =\n        (dupCtx.interactionDuplications[block.meta!.subType] || 0) + 1;\n      break;\n\n    case 'AssessmentQuestion': {\n      const nextSId = getSId('assessmentQuestion');\n      nextBlock.props!.sId = nextSId;\n\n      break;\n    }\n    // By default do nothing\n    default:\n  }\n\n  // console.log(dupCtx);\n\n  // Return new block\n  return nextBlock;\n};\n\ninterface duplicationCtx {\n  interactionDuplications: { [key: string]: number };\n}\n\n// Give a root block and all the blocks that we know about, duplicate a tree of blocks and return them\n// see selectors/block.ts for function findBlocksIn() using identity selector\nexport const duplicateBlocks = (\n  root: Block,\n  blocks: Blocks\n): [Blocks, string] => {\n  // Create a duplication context. This is an object that keeps information relevant to this call\n  // to duplicate. It is like temporary shared state, but shared by an object reference\n  const dupCtx: duplicationCtx = {\n    interactionDuplications: {},\n  };\n\n  // Find a list of all the blocks that use the provided root\n  const list: Block[] = findBlocksIn(blocks, root, () => true);\n\n  // create map for old to new ids\n  const idMap: { [key: string]: string } = {};\n\n  // Loop through all the blocks and duplicate them\n  const nextBlocks: BlockList = [];\n  list.forEach((b, index) => {\n    const nextBlock = duplicateBlock(b, dupCtx, index);\n    nextBlocks.push(nextBlock);\n    idMap[b.id] = nextBlock.id;\n  });\n\n  // Loop through all the blocks a second time to update child refs\n  const finalBlocksList = nextBlocks.map(child => {\n    if (Array.isArray(child.children)) {\n      child.children = child.children.map(ref => {\n        return {\n          type: 'Ref',\n          id: idMap[ref.id],\n        };\n      });\n    }\n    return child;\n  });\n\n  // Update reference ID's\n  const finalBlocks = finalBlocksList.reduce((accu: Blocks, curr: Block) => {\n    accu[curr.id] = curr;\n    return accu;\n  }, {} as Blocks);\n\n  // Duplicate provided root block\n  const newRoot = duplicateBlock(root, dupCtx);\n  if (Array.isArray(newRoot.children)) {\n    newRoot.children = newRoot.children.map(ref => {\n      return {\n        type: 'Ref',\n        id: idMap[ref.id],\n      };\n    });\n  }\n\n  // Add the new root to the object of\n  finalBlocks[newRoot.id] = newRoot;\n\n  // Return the new blocks\n  return [finalBlocks, newRoot.id];\n};\n\nexport const getSId = (\n  type: 'topic' | 'interaction' | 'assessmentQuestion',\n  offset: number = 0\n) => {\n  // when we were dealing with just the 2\n  // const list =\n  //   type === 'topic'\n  //     ? getTopics()\n  //     : getAllInteractions()\n  //         .map(i => getBlockById(i))\n  //         .filter(i => i);\n\n  // console.log({ type });\n\n  let list: Block[];\n\n  switch (type) {\n    case 'topic': {\n      list = getTopics();\n      break;\n    }\n\n    case 'interaction': {\n      list = getAllInteractions()\n        .map(i => getBlockById(i))\n        .filter(i => i);\n      break;\n    }\n\n    case 'assessmentQuestion': {\n      list = getAllAssessmentQuestions();\n      break;\n    }\n  }\n\n  //\n  let SIds = list\n    .map((entry: any) => {\n      return entry.props.sId;\n    })\n    .filter((entry: any) => {\n      return entry;\n    });\n\n  if (!SIds.length) {\n    SIds = [0];\n  }\n\n  const nextSId = Math.max(...SIds) + 1 + offset;\n\n  return nextSId;\n};\n","import uuid from 'uuidv4';\nimport { Block, cloneBlock } from '@chameleoncreator/creator-app';\n\nexport const createBlock = (\n  type: string,\n  children: Block[] = [],\n  extra: any = {}\n): Block => {\n  return {\n    id: uuid(),\n    type: type,\n    props: extra.props,\n    meta: extra.meta,\n    animator: extra.animator,\n    children: children,\n  };\n};\n\nconst reorder = (list: any[], startIndex: number, endIndex: number): any[] => {\n  const reordered = [...list];\n  const [removed] = reordered.splice(startIndex, 1);\n  reordered.splice(endIndex, 0, removed);\n\n  return reordered;\n};\n\nexport const reorderChildren = (\n  block: Block,\n  startIndex: number,\n  endIndex: number\n): Block => {\n  if (Array.isArray(block.children)) {\n    const newBlock = cloneBlock(block);\n    newBlock.children = reorder(block.children, startIndex, endIndex);\n    return newBlock;\n  }\n  return block;\n};\n","import { Block, Blocks } from '@chameleoncreator/creator-app';\nimport banner_primary_creator from 'assets/new_graphic_banner_default.png';\nimport graphic_header_logo from 'assets/chameleon_icon_white.svg';\nimport standard_header_logo from 'assets/Logo_updated.svg';\nimport { flatten } from 'factories/utils';\nimport { createBlock } from './block';\n\nexport type StandardHeader = {\n  headerHeight: number;\n  headerBackgroundColor: string;\n  headerBackgroundOpacity: number;\n  headerTextColor: string;\n  backButton: boolean;\n  topicName: boolean;\n  progressBar: boolean;\n  topicMenu: boolean;\n  headerDropShadow: boolean;\n};\n\nexport type GraphicHeader = {\n  headerHeight: number;\n  headerBackgroundColor: string;\n  headerBackgroundOpacity: number;\n  includeHeaderOverlay: boolean;\n  headerOverlayColor: string;\n  headerOverlayOpacity: number;\n  headerTextColor: string;\n  backButton: boolean;\n  topicName: boolean;\n  progressBar: boolean;\n  topicMenu: boolean;\n  headerDropShadow: boolean;\n};\n\nexport const standardHeaderDefaults = {\n  headerHeight: 70,\n  headerBackgroundColor: '#ffffff',\n  headerBackgroundOpacity: 100,\n  headerTextColor: '#060709',\n  backButton: true,\n  topicName: true,\n  progressBar: true,\n  topicMenu: true,\n  headerDropShadow: true,\n};\n\nexport const graphicHeaderDefaults = {\n  headerHeight: 170,\n  headerBackgroundColor: '#ffffff',\n  headerBackgroundOpacity: 100,\n  includeHeaderOverlay: false,\n  headerOverlayColor: '#000000',\n  headerOverlayOpacity: 70,\n  headerTextColor: '#ffffff',\n  backButton: true,\n  topicName: true,\n  progressBar: true,\n  topicMenu: true,\n  headerDropShadow: false,\n};\n\nexport const createHeader = (): Block => {\n  return createBlock(\n    'Header',\n    [\n      createBlock('StandardHeader', [\n        createBlock('Logo', [], { props: { src: standard_header_logo } }),\n      ]),\n      createBlock('GraphicHeader', [\n        createBlock('Background', [], {\n          props: { src: banner_primary_creator },\n        }),\n        createBlock('Logo', [], { props: { src: graphic_header_logo } }),\n      ]),\n    ],\n    {\n      props: {},\n    }\n  );\n};\n\nexport const addHeaders = (\n  block: Block,\n  props = {},\n  logoProps = {}\n): [Block, Blocks?] => {\n  if (block.type === 'Header') {\n    const headersBlock = createBlock('Headers', [\n      createBlock(\n        'StandardHeader',\n        [\n          createBlock('Logo', [], {\n            props: {\n              src: standard_header_logo,\n              ...logoProps,\n            },\n          }),\n        ],\n        {\n          props,\n        }\n      ),\n      createBlock('GraphicHeader', [\n        createBlock('Background', [], {\n          props: { src: banner_primary_creator },\n        }),\n        createBlock('Logo', [], {\n          props: {\n            src: graphic_header_logo,\n            ...logoProps,\n          },\n        }),\n      ]),\n    ]) as any;\n\n    const headersBlockRef = {\n      id: headersBlock.id,\n      type: 'Ref',\n    };\n\n    const [newHeadersBlocks, rootId] = flatten(headersBlock);\n\n    const nhb = newHeadersBlocks[rootId] as any;\n    block.children = [...nhb.children];\n\n    return [block, newHeadersBlocks];\n  }\n  return [block, undefined];\n};\n","import { Block } from '@chameleoncreator/creator-app';\nimport { setBlocksAction } from 'actions/setBlocksAction';\nimport { addHeaders } from 'factories/header';\nimport { State } from 'store/store';\n\nexport const updateThemeHeadersAction = async (dispatch, getState) => {\n  // return async (getState, dispatch) => {\n  const state = getState() as State;\n\n  const hasStandardHeader = Object.values(state.blocks).find(block => {\n    return block.type === 'StandardHeader';\n  });\n\n  if (hasStandardHeader) {\n    // console.log('updated header exists');\n    return state;\n  }\n\n  // console.log('header needs updating');\n\n  // get saved theme from incoming module\n  const { theme } = state;\n\n  const {\n    headerBackgroundColor,\n    headerTextColor,\n    backButton,\n    progressBar,\n    topicMenu,\n  } = theme as any;\n\n  const logo = Object.values(state.blocks).filter(\n    (b: any) => b.type === 'Logo'\n  )[0] as Block;\n\n  const header = Object.values(state.blocks).find(block => {\n    return block.type === 'Header';\n  }) as Block;\n\n  const [newBlock, newTree] = addHeaders(\n    header,\n    {\n      headerBackgroundColor,\n      headerTextColor,\n      backButton,\n      progressBar,\n      topicMenu,\n    },\n    {\n      src: logo?.props?.src,\n      imageId: logo?.props?.imageId,\n    }\n  );\n\n  // setNewBlockNewTree(newTree, newBlock, getStore(), setBlocksAction);\n\n  newTree![newBlock.id] = newBlock;\n  dispatch(setBlocksAction(newTree!));\n};\n// };\n","import { createBlock } from './block';\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport uuid from 'uuidv4';\nimport { getSId } from './utils';\n\nexport const createTopic = (name: string | undefined): Block => {\n  // console.log({\n  //   name,\n  //   asAssessment,\n  // });\n\n  return createBlock(\n    'Topic',\n    [\n      createBlock('AnimationGroup', [], {\n        meta: {\n          subType: 'Interaction',\n        },\n      }),\n    ],\n    {\n      props: {\n        name: name,\n        sId: getSId('topic'),\n      },\n    }\n  );\n};\n\n// Returns a new block that should be saved in a setBlock\nexport const addInteraction = (blocks: Blocks) => (\n  topic: Block,\n  interaction: Block,\n  position: number\n): Block => {\n  if (topic.type === 'Topic') {\n    // console.log(blocks);\n    // console.log(topic, interaction, position);\n\n    const group = (topic.children as Block[]).find(child => {\n      const block = blocks[child.id];\n      return block.meta && block.meta.subType === 'Interaction';\n    });\n\n    const groupBlock = blocks[group!.id];\n\n    return addInteractionToGroup(blocks)(groupBlock, interaction, position);\n  }\n\n  return topic;\n};\n\nexport const addInteractionToGroup = (blocks: Blocks) => (\n  group: Block,\n  interaction: Block,\n  position: number\n) => {\n  if (!group) {\n    throw new Error(\n      \"Interaction group missing from topic. That shouldn't happen\"\n    );\n  }\n\n  if (!group.meta || group.meta.subType !== 'Interaction') {\n    throw new Error('Group must have a subtype of Interaction');\n  }\n\n  const nextGroup = cloneBlock(blocks[group.id]);\n  (nextGroup.children as Block[]).splice(position, 0, interaction);\n\n  return nextGroup;\n};\n\n// return a new block that needs to be set in the state\n// TODO: Implement\nexport const removeInteractionFromGroup = (group: Block) => (\n  interaction: Block\n): Block => {\n  if (!group) {\n    throw new Error(\n      \"Interaction group missing from topic. That shouldn't happen\"\n    );\n  }\n  if (group.meta!.subType !== 'Interaction') {\n    throw new Error('Group must have a subtype of Interaction');\n  }\n\n  const nextBlock = cloneBlock(group);\n\n  const index = (nextBlock.children as Block[]).findIndex(\n    r => r.id === interaction.id\n  );\n  (nextBlock.children as Block[]).splice(index, 1);\n\n  return nextBlock;\n};\n","import { createBlock } from './block';\nimport { Block } from '@chameleoncreator/creator-app';\nimport { LessonStatus } from 'store/store';\n\nexport type ScoringCriteria =\n  | 'PASSED_ASSESSMENTS'\n  | 'ADDITIVE'\n  | 'AVERAGE'\n  | undefined;\nexport interface SCORMProps {\n  shouldSendScoreWhen: string;\n  moduleCompleteInterationRequirement: string;\n  moduleCompleteScoreRequirement: boolean;\n  scormExitMessage: string;\n  scormExitDelay: boolean;\n  scormControlledExit: boolean;\n  sendOnlySuccessStatus: boolean;\n  lessonStatus: LessonStatus;\n  scoringCriteria: ScoringCriteria;\n}\n\nexport const createScorm = (\n  props: SCORMProps = {\n    scormExitMessage: 'logout',\n    shouldSendScoreWhen: 'NEVER',\n    moduleCompleteInterationRequirement: 'allInteractionsSeen',\n    moduleCompleteScoreRequirement: false,\n    scormControlledExit: false,\n    scormExitDelay: false,\n    sendOnlySuccessStatus: false,\n    lessonStatus: 'completed/incomplete',\n    scoringCriteria: 'ADDITIVE',\n  }\n): Block => {\n  return createBlock('SCORM', [], {\n    props: {\n      shouldSendScoreWhen: props.shouldSendScoreWhen,\n      moduleCompleteInterationRequirement:\n        props.moduleCompleteInterationRequirement,\n      moduleCompleteScoreRequirement: props.moduleCompleteScoreRequirement,\n      scormControlledExit: props.scormControlledExit,\n      scormExitDelay: props.scormExitDelay,\n      scormExitMessage: props.scormExitMessage,\n      sendOnlySuccessStatus: props.sendOnlySuccessStatus,\n      lessonStatus: props.lessonStatus,\n      scoreCriteria: props.scoringCriteria,\n    },\n  });\n};\n","import { initialState, State, Action } from '../store/store';\n\nexport const mirrorActive = (state: State = initialState, { data }: Action): State => {\n  return {\n    ...state,\n    mirrorActive: data as any,\n  };\n};\n","const isAndroidSamsung = () => navigator.userAgent.match(/Android|SAMSUNG/g);\n\nexport default isAndroidSamsung;\n","// https://developer.mozilla.org/en-US/docs/Web/API/Navigator/vendor\n\nconst isAppleComputerInc = () => {\n  return navigator.vendor === 'Apple Computer, Inc.';\n};\n\nexport default isAppleComputerInc;\n","export function removeUndefinedEntriesFromObject(obj: { [key: string]: any }) {\n  return Object.keys(obj).reduce((acc, curr) => {\n    return {\n      ...acc,\n      ...(![undefined, '', null].includes(obj[curr]) && {\n        [curr]: obj[curr],\n      }),\n    };\n  }, {});\n}\n","import { createBlock } from 'factories/block';\n\nexport const oldStylesToNewMap = {\n  buttonShadow: 'shadow',\n  buttonOutline: 'outline',\n  buttonShape: 'shape',\n  background: 'backgroundColor',\n  buttonBackgroundOpacity: 'backgroundOpacity',\n  buttonHover: 'backgroundColorOnHover',\n  buttonHoverBackgroundOpacity: 'backgroundOpacityOnHover',\n  color: 'textColor',\n  textHoverColor: 'textColorOnHover',\n  buttonOutlineColor: 'outlineColor',\n};\nexport const oldDataToNewMap = {\n  id: 'id',\n  label: 'label',\n  location: 'location',\n  linkData: 'linkData',\n  fontFamily: 'fontFamily',\n  // fontSize: 'fontSize',\n  bold: 'bold',\n  uppercase: 'uppercase',\n  useLargeButton: 'useLargeButton',\n  borderRadius: 'borderRadius',\n  focusColor: 'focusColor',\n};\n\nexport const oldButtonPropsToNewMap = {\n  buttonShadow: 'shadow',\n  buttonOutline: 'outline',\n  buttonShape: 'shape',\n  background: 'backgroundColor',\n  buttonBackgroundOpacity: 'backgroundOpacity',\n  buttonHover: 'backgroundColorOnHover',\n  buttonHoverBackgroundOpacity: 'backgroundOpacityOnHover',\n  color: 'textColor',\n  textHoverColor: 'textColorOnHover',\n  buttonOutlineColor: 'outlineColor',\n  //\n  id: 'id',\n  label: 'label',\n  location: 'location',\n  linkData: 'linkData',\n  fontFamily: 'fontFamily',\n  fontSize: 'fontSize',\n  bold: 'bold',\n  uppercase: 'uppercase',\n  useLargeButton: 'useLargeButton',\n  borderRadius: 'borderRadius',\n  focusColor: 'focusColor',\n};\n\nexport const createContinueBtn = ({ ...props }) => {\n  return createBlock('ContinueButton', 'Continue' as any, {\n    props: {\n      label: 'Continue',\n      location: 'next',\n      ...props,\n    },\n    meta: { subType: 'continue' },\n  });\n};\n","import { Action, initialState, State } from 'store/store';\nimport {\n  getAllTopicsOrdered,\n  getInteractionsFromTopicAndState,\n} from 'selectors/block';\nimport { Block } from '@chameleoncreator/creator-app';\nimport isAndroidSamsung from 'services/isAndroidSamsung';\nimport isAppleComputerInc from 'services/isAppleComputerInc';\nimport { removeUndefinedEntriesFromObject } from 'services/removeUndefinedEntriesFromObject';\nimport {\n  // updateButtonProps,\n  oldStylesToNewMap,\n  oldDataToNewMap,\n} from 'factories/interactions/continueBtn';\nimport { findByKeyVal_V2 } from 'services/findByKeyVal';\nimport getBlockById from 'services/apiHelpers/getBlockById';\n\nconst isDevice = isAppleComputerInc() || isAndroidSamsung();\n\nexport const preprocessModule = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  const topics = getAllTopicsOrdered(state.blocks);\n  const nextInteractionMap = {};\n  const idToSIdMap = {};\n  const sIdToIdMap = {};\n\n  let interactionsOpen: string[] = [];\n  let interactionsLocked: string[] = [];\n  // *\n  // when we're wanting to test this locally we need to include this line\n  // since there's different timings to when savedState loads from scorm/localStorage\n  // state.interactionsLocked || [];\n\n  // it's likely ( for sure ) that moduleIsFreeScrolling will not exist on existing modules\n  // that already have their state defined on the server\n  const moduleIsFreeScrolling = state.theme?.moduleIsFreeScrolling || {\n    desktop: false,\n    device: false,\n  };\n\n  const {\n    desktop: moduleIsFreeScrollingDesktop,\n    device: moduleIsFreeScrollingDevice,\n  } = moduleIsFreeScrolling;\n\n  let topicsIdSIdMapping = {\n    idToSId: {},\n    sIdToId: {},\n  };\n\n  topics.forEach((topic: Block) => {\n    const sId = topic.props?.sId;\n    if (sId) {\n      topicsIdSIdMapping.idToSId[topic.id] = sId;\n      topicsIdSIdMapping.sIdToId[sId] = topic.id;\n    }\n\n    const interactions = getInteractionsFromTopicAndState(\n      state as any,\n      (Object.values(state.blocks) as any).find(($: any) => $.id === topic.id)\n    );\n\n    interactions.forEach((interaction, index) => {\n      const { id } = interaction;\n      const { sId, lockDown } = (interaction as any)?.props;\n\n      if (!isDevice) {\n        moduleIsFreeScrollingDesktop && interactionsOpen.push(id);\n        !moduleIsFreeScrollingDesktop &&\n          lockDown &&\n          interactionsLocked.push(id);\n      }\n\n      if (isDevice) {\n        moduleIsFreeScrollingDevice && interactionsOpen.push(id);\n        !moduleIsFreeScrollingDevice && lockDown && interactionsLocked.push(id);\n      }\n\n      // if (lockDown) {\n      //   interactionsLocked.push(id);\n      // }\n\n      idToSIdMap[id] = sId;\n      sIdToIdMap[sId] = id;\n\n      if (index != interactions.length - 1) {\n        nextInteractionMap[id] = interactions[index + 1].id;\n      }\n\n      if (interaction?.meta?.subType === 'TopicPortal') {\n        const { selectedTopics } = interaction?.props || {};\n\n        if (\n          selectedTopics &&\n          Array.isArray(selectedTopics) &&\n          selectedTopics.some(entry => entry.toString().includes('-'))\n        ) {\n          //\n          interaction.props!.selectedTopics = selectedTopics.map(\n            entry => state.blocks[entry]?.props?.sId || entry\n          );\n\n          console.log(\n            'one time updating selected topics references from id to sId ?',\n            interaction?.props?.selectedTopics\n          );\n        }\n      }\n    });\n  });\n\n  let assessmentQuestionIdSIdMapping = {\n    idToSId: {},\n    sIdToId: {},\n  };\n\n  Object.values(state.blocks).forEach((entry, i) => {\n    const assessmentQuestion =\n      entry.type.toLowerCase() === 'assessmentquestion';\n\n    if (assessmentQuestion && entry?.props) {\n      const { sId } = entry.props;\n      assessmentQuestionIdSIdMapping.idToSId[entry.id] = sId;\n      assessmentQuestionIdSIdMapping.sIdToId[sId] = entry.id;\n    }\n\n    const subType = entry?.meta?.subType;\n\n    //\n    // get the root certificate interaction\n    if (subType && subType === 'Certificate') {\n      const certificateInteraction = entry;\n\n      // if it has ' imgSrc ' we can know it was added incorrectly\n      // from the EditCertificate\n      //\n      const {\n        imgSrc,\n        imageId,\n        imgWidth,\n        imgHeight,\n      } = (certificateInteraction as any)?.props;\n\n      let certificate = state.blocks[(entry?.children?.[1] as Block)?.id]\n        ?.children?.[0] as Block;\n\n      certificate = certificate && state.blocks[certificate.id];\n\n      // if the interaction has imgSrc. but we don't yet have img values on the certificate ( props ) itself\n      // move them over\n      if (imgSrc && !certificate?.props?.src) {\n        certificate.props = {\n          src: imgSrc,\n          imageId,\n          imgWidth,\n          imgHeight,\n        };\n\n        delete certificateInteraction.props?.imgSrc;\n        delete certificateInteraction.props?.imageId;\n        delete certificateInteraction.props?.imgWidth;\n        delete certificateInteraction.props?.imgHeight;\n      }\n    }\n\n    if (entry?.type === 'SelectOptions') {\n      (entry?.children as any[])?.forEach((option, index) => {\n        const optionBlock = state.blocks[option.id] as Block;\n\n        if (optionBlock && optionBlock?.props) {\n          const { correctAnswer } = optionBlock.props;\n\n          if (typeof correctAnswer === 'object') {\n            console.log(\n              '___ transform select option correctAnswer from object :',\n              correctAnswer,\n              '>>>'\n            );\n            optionBlock.props.correctAnswer = Object.values(correctAnswer)[0];\n            //\n            console.log('to index :', optionBlock.props.correctAnswer, '___');\n          }\n        }\n      });\n    }\n\n    if (subType && ['continue', 'editableButton'].includes(subType)) {\n      // return;\n\n      //\n\n      const { props = {} } = entry;\n      const { version } = props;\n\n      if (version && version === 1) {\n        // console.log({ version });\n        return;\n      }\n\n      const updatedStyleProps = Object.keys(props).reduce((acc, curr) => {\n        const newKey = oldStylesToNewMap[curr];\n\n        // move this out later. just want to see it inline for the moment\n        // these are the 'local' properties that could be updated by the author in older modules\n        //\n        const hasLocalMap = {\n          // the list of local props that can have been set in the editor\n\n          // localBackgroundColor: true,\n          // localColor: true,\n          // localButtonHover: color ? true : false,\n          // localButtonShadow: true,\n          // localButtonOutline: true,\n          // localUseLargeButton: true,\n          // localShape: true,\n          // localBorderRadius: true,\n\n          background: 'localBackgroundColor',\n          color: 'localColor',\n          buttonHover: 'localButtonHover',\n          buttonShadow: 'localButtonShadow',\n          buttonOutline: 'localButtonOutline',\n          useLargeButton: 'localUseLargeButton',\n          buttonShape: 'localShape',\n          borderRadius: 'localBorderRadius',\n        };\n\n        let hasValue = ![undefined, '', null].includes(props[curr]);\n\n        if (hasLocalMap[curr] && !props[hasLocalMap[curr]]) {\n          // if we have this legacy prop\n          // and its value HAS NOT been set explicitly. the ' local ' prefix\n          // then hasValue should be considered false\n\n          // the intention is to strip out any default props / values that would interfere\n          // with our updated theming\n\n          // console.log({ curr });\n\n          hasValue = false;\n        }\n\n        let updateBackgroundOpacityForOutline;\n\n        // this is the dance to save real old buttons from the ' keyline ' style we went with\n        // if theme.buttonOutline or prop.buttonOutline the rendered effect sets the backgroundOpacity\n        // of the button to 0. but that's never reflected in the settings. only a runtime evaluation and display\n        // so we're gonna actually update it on the prop so our settings are in sync\n        //\n        if (state.theme.buttonOutline || props.buttonOutline) {\n          if ([undefined, '', null].includes(props.buttonBackgroundOpacity)) {\n            updateBackgroundOpacityForOutline = true;\n          }\n        }\n\n        const updatedProps = {\n          ...acc,\n          ...(newKey &&\n            hasValue && {\n              [newKey]: props[curr],\n            }),\n          ...(updateBackgroundOpacityForOutline && {\n            backgroundOpacity: 0,\n          }),\n        };\n\n        return updatedProps;\n      }, {});\n\n      const updatedDataProps = Object.keys(props).reduce((acc, curr) => {\n        const newKey = oldDataToNewMap[curr];\n        const hasValue = ![undefined, '', null].includes(props[curr]);\n\n        return {\n          ...acc,\n          ...(newKey &&\n            hasValue && {\n              [newKey]: props[curr],\n            }),\n        };\n      }, {});\n\n      const $ = {};\n\n      for (const prop in props) {\n        if (oldDataToNewMap[prop]) {\n          $[prop] = props[prop];\n        }\n      }\n\n      entry.props = {\n        ...props,\n        ...updatedStyleProps,\n\n        version: 1,\n        // might want to tidy up and move 'legacy' props to\n        // LEGACY_PROPS: props,\n      };\n    }\n  });\n\n  let mainButton;\n\n  if (!state.theme?.buttons) {\n    //\n    console.log(\n      `updating buttons and theme ( theme.buttons ) for 'legacy' modules on boot`.toUpperCase()\n    );\n    mainButton = getExistingButtonStylesFromTheme(state.theme);\n  }\n\n  return {\n    ...state,\n    ...data,\n    interactionsOpen,\n    interactionsLocked,\n    ...{ nextInteractionMap },\n    ...{ idToSIdMap },\n    ...{ sIdToIdMap },\n    topicsIdSIdMapping,\n    assessmentQuestionIdSIdMapping,\n\n    ...(mainButton && {\n      theme: {\n        ...state.theme,\n        buttons: {\n          ...state.theme.buttons,\n          main: mainButton,\n        },\n      },\n    }),\n  };\n};\n\nfunction getExistingButtonStylesFromTheme(theme) {\n  const {\n    buttonBackgroundColor,\n    buttonBorderRadius,\n    buttonOutline,\n    buttonShadow,\n    buttonShape,\n    useLargeButton,\n    buttonTextColor,\n    buttonHover,\n  } = theme;\n\n  return removeUndefinedEntriesFromObject({\n    backgroundColor: buttonBackgroundColor,\n    borderRadius: buttonBorderRadius,\n    outline: buttonOutline,\n    shadow: buttonShadow,\n    shape: buttonShape,\n    useLargeButton,\n    textColor: buttonTextColor,\n    backgroundColorOnHover: buttonHover,\n  });\n}\n","import { getInteractionsFromTopicAndState } from 'selectors/block';\nimport { Action, initialState, State } from 'store/store';\n\nexport const updateInteractionsLocked = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  const { id } = data;\n  const { interactionsLocked } = state;\n  const updatedInteractionsLocked = [...interactionsLocked];\n\n  const indexOfId = updatedInteractionsLocked.indexOf(id);\n  // console.log(id, interactionsLocked, indexOfId);\n\n  if (indexOfId !== -1) {\n    updatedInteractionsLocked.splice(indexOfId, 1);\n  }\n\n  return {\n    ...state,\n    interactionsLocked: updatedInteractionsLocked,\n  };\n};\n","import { initialState, State, Action } from 'store/store';\n\nexport const addFeedBackData = (state: State = initialState, { data }: Action) => {\n  return {\n    ...state,\n    feedback: {\n      ...state.feedback,\n      [data.key]: data,\n    },\n  };\n};\n","import { Block, Blocks } from '@chameleoncreator/creator-app';\nimport {\n  Assessments,\n  Assessment,\n  QuestionData,\n  State,\n  AssessmentData,\n} from 'store/store';\n\nlet cachedBlocks: Blocks;\n\nfunction updateCachedBlocks(\n  blocks: Blocks,\n  types: string[] = ['AssessmentQuestion', 'AssessmentQuestionOptions']\n) {\n  //\n  if (cachedBlocks) {\n    // console.log('cachedBlocks has been updated. returning cachedBlocks');\n    return cachedBlocks;\n  }\n\n  cachedBlocks = Object.values(blocks).reduce((acc, curr) => {\n    const block = types.includes(curr?.type);\n\n    return {\n      ...acc,\n\n      ...(block && { [curr.id]: curr }),\n    };\n  }, {});\n\n  // console.log('caching questionBlocks :', cachedBlocks);\n\n  return cachedBlocks as Blocks;\n}\n\nexport const resultsKeyMapToSuspendData = {\n  answer: 0,\n  attemptCount: 1,\n  correctAnswer: 2,\n  id: 3,\n  isCorrect: 4,\n  isLocked: 5,\n  navigateToResults: 6,\n  questionName: 7,\n  submitButtonLabel: 8,\n};\n\nexport const resultsKeyMapFromSuspendData = {\n  0: 'answer',\n  1: 'attemptCount',\n  2: 'correctAnswer',\n  3: 'id',\n  4: 'isCorrect',\n  5: 'isLocked',\n  6: 'navigateToResults',\n  7: 'questionName',\n  8: 'submitButtonLabel',\n};\n\nfunction getResultsMinified(results: QuestionData, blocks: Blocks) {\n  const resultsMinified = Object.values(results).reduce(\n    (accA, currA, index) => {\n      const keysRemapped = Object.keys(currA).reduce((accB, currB, index) => {\n        return {\n          ...accB,\n          [resultsKeyMapToSuspendData[currB]]: currA[currB],\n        };\n      }, {});\n\n      // this feels kinda clumsy\n      // but isolates the work we want to do on a given entry\n      //\n      for (const key in keysRemapped) {\n        if (keysRemapped[key] === true) {\n          keysRemapped[key] = 1;\n        }\n\n        if (keysRemapped[key] === false) {\n          keysRemapped[key] = 0;\n        }\n\n        if (key === '7') {\n          keysRemapped[key] = '';\n        }\n\n        if (key === '8') {\n          keysRemapped[key] =\n            keysRemapped[key].toLowerCase() === 'submit' ? 1 : 0;\n        }\n\n        const questionBlock = blocks[Object.keys(results)[index]];\n\n        let questionBlockOptions:\n          | ''\n          | undefined\n          | Block\n          | Block[] = (questionBlock?.children as Block[])?.find(child => {\n          const block = blocks[child.id];\n          return block?.type === 'AssessmentQuestionOptions';\n        });\n\n        //\n\n        const questionBlockOptionsId = questionBlockOptions?.id;\n        questionBlockOptions =\n          questionBlockOptionsId && blocks[questionBlockOptionsId];\n\n        // these could be DRY'd up. leaving for the moment\n        if (key === '0') {\n          keysRemapped['0'] = keysRemapped['0'].map(entry => {\n            return ((questionBlockOptions as Block)?.children as Block[])\n              ?.map(child => child.id)\n              .indexOf(entry);\n          });\n        }\n\n        if (key === '2') {\n          keysRemapped['2'] = keysRemapped['2'].map(entry => {\n            return ((questionBlockOptions as Block)?.children as Block[])\n              ?.map(child => child.id)\n              .indexOf(entry);\n          });\n        }\n        //\n      }\n\n      return {\n        ...accA,\n        // was object\n        // [currA.id]: {\n        //   ...keysRemapped,\n        // },\n        //now array\n        [currA.id]: Object.values(keysRemapped),\n      };\n    },\n    {}\n  );\n\n  return resultsMinified;\n}\n\nfunction getResultsMaxified(results: QuestionData, blocks: Blocks) {\n  const resultsMaxified = Object.values(results).reduce(\n    (accA, currA, index) => {\n      const keysRemapped = Object.keys(currA).reduce((accB, currB) => {\n        return {\n          ...accB,\n          [resultsKeyMapFromSuspendData[currB]]: currA[currB],\n        };\n      }, {});\n\n      // this feels kinda clumsy\n      // but isolates the work we want to do on a given entry\n      //\n      for (const key in keysRemapped) {\n        if (['isCorrect', 'isLocked', 'navigateToResults'].includes(key)) {\n          if (keysRemapped[key] === 1) {\n            keysRemapped[key] = true;\n          }\n\n          if (keysRemapped[key] === 0) {\n            keysRemapped[key] = false;\n          }\n        }\n\n        if (key === 'submitButtonLabel') {\n          keysRemapped['submitButtonLabel'] =\n            keysRemapped['submitButtonLabel'] === 1 ? 'Submit' : 'Continue';\n        }\n\n        const sId = Object.keys(results)[index];\n\n        const questionBlock = Object.values(blocks).find(b => {\n          return (\n            b?.type === 'AssessmentQuestion' && b?.props?.sId === Number(sId)\n          );\n        });\n\n        // my type garbage. needs fixing\n        let questionBlockOptions:\n          | ''\n          | undefined\n          | Block\n          | Block[] = (questionBlock?.children as Block[])?.find(child => {\n          const block = blocks[child.id];\n          return block?.type === 'AssessmentQuestionOptions';\n        });\n\n        const questionBlockOptionsId = questionBlockOptions?.id;\n        questionBlockOptions =\n          questionBlockOptionsId && blocks[questionBlockOptionsId];\n\n        if (key === 'answer' && questionBlockOptions) {\n          keysRemapped['answer'] = keysRemapped['answer'].map(entry => {\n            return ((questionBlockOptions as Block)?.children as Block[])[entry]\n              ?.id;\n          });\n        }\n\n        if (key === 'correctAnswer' && questionBlockOptions) {\n          keysRemapped['correctAnswer'] = keysRemapped['correctAnswer'].map(\n            entry => {\n              return ((questionBlockOptions as Block)?.children as Block[])[\n                entry\n              ]?.id;\n            }\n          );\n        }\n      }\n\n      // we'll check for the '3' before attempting to use it\n      console.log(currA?.[3]);\n\n      return {\n        ...accA,\n        ...(currA?.[3] && {\n          [currA[3]]: {\n            ...keysRemapped,\n          },\n        }),\n      };\n    },\n    {}\n  );\n\n  return resultsMaxified;\n}\n\nfunction transformAssessmentsToSuspendData(\n  assessments: Assessments,\n  state: State = {} as State\n) {\n  const assessmentsMinified = Object.keys(assessments).reduce((acc, key) => {\n    const assessment = assessments[key];\n\n    const sId =\n      state.topicsIdSIdMapping.idToSId[key] || state.blocks[key]?.props?.sId;\n    const assessmentSId = String(sId) || key;\n    //\n\n    const { data, results } = structuredClone(assessment);\n\n    const resultsUpdatingIdToSId = {\n      ...results,\n    };\n\n    //\n    Object.keys(resultsUpdatingIdToSId as any).forEach(k => {\n      if (state?.blocks) {\n        //\n        const sId =\n          state.assessmentQuestionIdSIdMapping.idToSId[k] ||\n          state.blocks[k]?.props?.sId;\n        if (sId) {\n          resultsUpdatingIdToSId[k]['id'] = sId;\n        }\n        //\n      }\n    });\n\n    const resultsMinified = getResultsMinified(\n      resultsUpdatingIdToSId as QuestionData,\n      updateCachedBlocks(state.blocks)\n    );\n\n    const assessmentMinified = {\n      d: {\n        ...data,\n      },\n      r: {\n        ...resultsMinified,\n      },\n    };\n\n    return {\n      ...acc,\n      [assessmentSId]: assessmentMinified,\n    };\n  }, {});\n\n  // console.log(\n  //   'assessments minified bytes size ?',\n  //   JSON.stringify(assessmentsMinified).length\n  // );\n\n  // const assessmentsBytes = JSON.stringify(assessments).length;\n  // const assessmentsMinifiedBytes = JSON.stringify(assessmentsMinified).length;\n  // const savings =\n  //   ((assessmentsBytes - assessmentsMinifiedBytes) / assessmentsBytes) * 100;\n\n  // console.log('% savings :', savings.toFixed());\n\n  return assessmentsMinified;\n}\n\nfunction transformAssessmentsFromSuspendData(\n  assessments: Assessments,\n  state: State = {} as State\n) {\n  return Object.keys(assessments).reduce((acc, key) => {\n    const assessment = assessments[key];\n    const assessmentId =\n      state.topicsIdSIdMapping.sIdToId[key] ||\n      Object.values(state.blocks).find(block => {\n        return block?.props?.sId === Number(key);\n      })?.id ||\n      ''; // if we're undefined here. problems\n\n    const { d, r } = assessment;\n    const resultsUpdatingSIdToId = {\n      ...r,\n    } as QuestionData;\n\n    //\n    Object.values(resultsUpdatingSIdToId).forEach((entry: any) => {\n      if (state?.blocks && entry?.['3']) {\n        const id =\n          state.assessmentQuestionIdSIdMapping.sIdToId[entry['3']] ||\n          Object.values(state.blocks).find(block => {\n            return block?.props?.sId === Number(entry['3']);\n          })?.id;\n\n        if (id) {\n          entry['3'] = id;\n        }\n        //\n      }\n    });\n\n    const resultsMaxified = getResultsMaxified(\n      resultsUpdatingSIdToId as QuestionData,\n      updateCachedBlocks(state.blocks)\n    );\n\n    const assessmentMaxified = {\n      data: {\n        ...d,\n      },\n      results: {\n        ...resultsMaxified,\n      },\n    };\n\n    return {\n      ...acc,\n      ...(assessmentId && {\n        [assessmentId]: assessmentMaxified,\n      }),\n    };\n  }, {});\n}\n\nexport {\n  transformAssessmentsToSuspendData,\n  transformAssessmentsFromSuspendData,\n};\n","import { Block } from '@chameleoncreator/creator-app';\nimport { State } from 'store/store';\n\n// export function transformListFromIdToSId(blocks, list: string[]): number[] {\n//   const transformedList = list.map(id => {\n//     const { sId } = blocks[id]?.props;\n//     //\n//     // we might want to save the original id if there's not an sId on the block ?\n\n//     return sId;\n//   });\n\n//   return transformedList || (list as any);\n// }\n\n// export function transformListFromSIdToId(blocks, list: number[]): string[] {\n//   const transformedList = list.map(sId => {\n//     const block = Object.values(blocks).find(b => {\n//       // based on the above\n//       // if we don't have an sId on this block. for whatever reason. we've saved the id\n//       // and we run some logic to load that back\n//       return (b as Block)?.props?.sId === sId;\n//     }) as Block;\n\n//     return block?.id || block?.props?.id;\n//   });\n\n//   return transformedList;\n// }\n\nexport function transformListFromIdToSId(idToSIdMap, list: string[]): number[] {\n  const transformedList = list.map(id => {\n    return idToSIdMap[id];\n  });\n\n  return transformedList || (list as any);\n}\n\nexport function transformListFromSIdToId(sIdToIdMap, list: number[]): string[] {\n  const transformedList = list.map(sId => {\n    return sIdToIdMap[sId];\n  });\n\n  return transformedList;\n}\n","import { Store } from 'redux';\nimport { State } from './store';\nimport {\n  transformListFromSIdToId,\n  transformListFromIdToSId,\n} from 'services/transformListBetweenIdSId';\nimport {\n  transformAssessmentsToSuspendData,\n  transformAssessmentsFromSuspendData,\n} from 'services/transformAssessmentsToAndFromSuspendData';\n\nconst STORAGE_KEY = 'chameleon_v2';\n\nlet localStorageStateBookmark: string;\n\nexport const setLocalStorageStateBookmark = location => {\n  localStorageStateBookmark = location;\n};\n\nif (window.location.hash.match('clear')) {\n  const location = window.location.href.replace(/#.*$/, '');\n\n  sessionStorage.clear();\n  localStorage.clear();\n\n  window.open(location, '_self');\n}\n\nexport const saveState = (store: Store) => () => {\n  const state = { ...store.getState() };\n\n  // Clear the undesired properties from the store\n  delete state.focusedNodeId;\n  delete state.lastFocusedNodeId;\n  delete state.currentInteractionBlockId;\n\n  delete state.currentInteraction;\n\n  // TODO: use this as ' bookmarking '\n  // to be moved to someplace else\n  // delete state.currentTopic;\n\n  // delete state.interactionsSeen;\n  // delete state.interactionsOpen;\n\n  delete state.audioAcknowledged;\n  delete state.audio;\n  delete state.header;\n  delete state.stndardHeader;\n  delete state.graphicHeader;\n  delete state.standardHeaderLogo;\n  delete state.graphicHeaderBackground;\n  delete state.graphicHeaderLogo;\n\n  delete state.userBehaviour;\n  // state.assessments = {};\n\n  state.interactionsSeen = transformListFromIdToSId(\n    state.idToSIdMap,\n    state.interactionsSeen\n  );\n\n  state.interactionsLocked = transformListFromIdToSId(\n    state.idToSIdMap,\n    state.interactionsLocked\n  );\n\n  const minifiedAssessments = transformAssessmentsToSuspendData(\n    state.assessments,\n    state\n  );\n\n  state.assessments = minifiedAssessments;\n\n  // state.interactionsLocked = [];\n  // state.interactionsOpen = [];\n  // state.interactionsSeen = [];\n  // state.landingPagesSeenState = {};\n\n  // state.moduleVariables = {};\n  // console.log(state.moduleVariables);\n\n  localStorage.setItem(STORAGE_KEY, JSON.stringify(state));\n};\n\nexport const clearState = () => {};\n\nexport const getState = (): State | undefined => {\n  if (window.savedStore) {\n    const s = { ...window.savedStore };\n    if (s.theme && Object.keys(s.theme).length <= 0) {\n      delete s.theme;\n    }\n    return s;\n  }\n  return undefined;\n};\n\nexport const getLocalState = (): State => {\n  let savedState = JSON.parse(localStorage.getItem('chameleon_v2')!) as State;\n\n  if (savedState === null) {\n    return {} as State;\n  }\n\n  const { sIdToIdMap } = savedState;\n\n  let transformedInteractionsSeen: string[] = [];\n  let transformedInteractionsLocked: string[] = [];\n\n  if (savedState?.interactionsSeen?.length) {\n    transformedInteractionsSeen = transformListFromSIdToId(\n      sIdToIdMap,\n      savedState.interactionsSeen as any\n    );\n\n    savedState.interactionsSeen = transformedInteractionsSeen;\n  }\n\n  if (savedState?.interactionsLocked?.length) {\n    transformedInteractionsLocked = transformListFromSIdToId(\n      sIdToIdMap,\n      savedState.interactionsLocked as any\n    );\n\n    savedState.interactionsLocked = transformedInteractionsLocked;\n  }\n\n  const maximisedAssessments = transformAssessmentsFromSuspendData(\n    savedState.assessments,\n    // minifiedAssessments,\n    savedState\n  );\n\n  // savedState.assessments = {};\n  // maximisedAssessments;\n  //\n  // savedState.interactionsSeen = [];\n  // savedState.interactionsLocked = [];\n  // savedState.landingPagesSeenState = {};\n\n  // console.log(savedState);\n  return savedState;\n  //\n};\n\ntype Callable = () => void;\n\nexport const watch = (store: Store): Callable => {\n  let deBounce;\n\n  const unsubscribe = store.subscribe(() => {\n    clearTimeout(deBounce);\n    deBounce = setTimeout(saveState(store), 250);\n  });\n\n  return unsubscribe;\n};\n","import { Block } from '@chameleoncreator/creator-app';\nimport { Mirror } from 'store/mirror';\nimport { remoteable } from 'store/next';\nimport { setBlockLocalAction } from \"./setBlockLocalAction\";\n\nexport const setBlockAction = (block: Block): any => {\n  return (dispatch, getState) => {\n    const s = getState();\n    block.project_id = s.projectId;\n    block.__isSaving = true;\n\n    dispatch(setBlockLocalAction(block));\n\n    if (remoteable()) {\n      Mirror(dispatch, getState);\n    }\n  };\n};\n","import { Block } from '@chameleoncreator/creator-app';\n\n\nexport const setBlockLocalAction = (block: Block) => {\n  return {\n    type: 'SET_BLOCK',\n    data: block,\n  };\n};\n","import { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { createBlock } from './block';\nimport { flatten } from 'factories/utils';\n\nexport const createAdvancedEditing = (): Block => {\n  return createBlock('AdvancedEditing', [], {\n    props: {},\n  });\n};\n\nexport const addAdvancedEditingBlock = (block: Block): [Block, Blocks?] => {\n  if (block.type === 'Module') {\n    const advancedEditingBlock = createAdvancedEditing();\n\n    const advancedEditingBlockRef = {\n      id: advancedEditingBlock.id,\n      type: 'Ref',\n    };\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).push(advancedEditingBlockRef);\n\n    const [newBlocks] = flatten(advancedEditingBlock);\n\n    return [nextBlock, newBlocks];\n  }\n\n  return [block, undefined];\n};\n","import { createBlock } from 'factories/block';\n\nexport const createEditableBtn = ({ ...props }) => {\n  return createBlock('EditableButton', [], {\n    props: {\n      type: props.type || 'editableButton',\n      label: props.label || 'Edit',\n      ...props,\n    },\n    meta: { subType: 'editableButton' },\n  });\n};\n","import { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { createBlock } from './block';\nimport { flatten } from 'factories/utils';\nimport { createEditableBtn } from './interactions/editableBtn';\n\nexport const createBookmark = (): Block => {\n  return createBlock(\n    'Bookmark',\n    [\n      createBlock('Image', [], { props: {} }),\n      createBlock('Text', [], {\n        props: {\n          // content: 'Would you like to return to where you left off?',\n        },\n      }),\n      createEditableBtn({\n        label: 'No',\n        buttonOutline: true,\n        color: '#060709',\n        background: '#fff',\n        localButtonOutline: true,\n        localColor: true,\n      }),\n      createEditableBtn({\n        label: 'Yes',\n      }),\n    ],\n    {\n      props: {},\n    }\n  );\n};\n\nexport const addBookmarkBlock = (\n  block: Block,\n  props = {}\n): [Block, Blocks?] => {\n  if (block.type === 'Module') {\n    const bookmarkBlock = createBookmark();\n\n    const bookmarkBlockRef = {\n      id: bookmarkBlock.id,\n      type: 'Ref',\n    };\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).push(bookmarkBlockRef);\n\n    const [newBlocks] = flatten(bookmarkBlock);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n","import { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { createBlock } from './block';\nimport { flatten } from 'factories/utils';\nimport { createEditableBtn } from './interactions/editableBtn';\n\nexport const createModuleHasAudioMessage = (): Block => {\n  return createBlock(\n    'ModuleHasAudioMessage',\n    [\n      createBlock('Image', [], { props: {} }),\n      createBlock('Text'),\n      createEditableBtn({\n        label: 'Ok',\n      }),\n    ],\n    {\n      props: {},\n    }\n  );\n};\n\nexport const addModuleHasAudioMessageBlock = (\n  block: Block,\n  props = {}\n): [Block, Blocks?] => {\n  if (block.type === 'Module') {\n    const moduleHasAudioMessageBlock = createModuleHasAudioMessage();\n\n    const moduleHasAudioMessageBlockRef = {\n      id: moduleHasAudioMessageBlock.id,\n      type: 'Ref',\n    };\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).push(moduleHasAudioMessageBlockRef);\n\n    const [newBlocks] = flatten(moduleHasAudioMessageBlock);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n","import { Block } from '@chameleoncreator/creator-app';\n\nimport { addAdvancedEditingBlock } from 'factories/advancedediting';\nimport { addBookmarkBlock } from 'factories/bookmark';\nimport { addModuleHasAudioMessageBlock } from 'factories/modulehasaudiomessage';\nimport { setBlocksAction } from 'actions/setBlocksAction';\n\nconst findBlockByType = (blocks, type) => {\n  return Object.values(blocks).find(block => {\n    return (block as Block).type === type;\n  });\n};\n\nexport const addAdvancedEditingBlocksToStateAction = () => (\n  dispatch,\n  getState\n) => {\n  const state = getState();\n  const { blocks } = state;\n\n  const [hasAdvancedEditing, hasBookmark, hasModuleHasAudioMessage] = [\n    'AdvancedEditing',\n    'Bookmark',\n    'ModuleHasAudioMessage',\n  ].map(entry => findBlockByType(blocks, entry));\n\n  if (hasAdvancedEditing && hasBookmark && hasModuleHasAudioMessage) {\n    console.log('module has advancedEditing blocks');\n    return;\n  }\n\n  // console.log('adding advancedEditing blocks to module');\n\n  const Module = Object.values(blocks).find(\n    (b: any) => b.type === 'Module'\n  ) as Block;\n\n  if (!hasAdvancedEditing) {\n    var [newBlockA, newTreeA] = addAdvancedEditingBlock(Module);\n    newTreeA![newBlockA.id] = newBlockA;\n  }\n\n  if (!hasBookmark) {\n    var [newBlockB, newTreeB] = addBookmarkBlock(Module);\n    newTreeB![newBlockB.id] = newBlockB;\n  }\n\n  if (!hasModuleHasAudioMessage) {\n    var [newBlockM, newTreeM] = addModuleHasAudioMessageBlock(Module);\n    newTreeM![newBlockM.id] = newBlockM;\n  }\n\n  // dispatch({\n  //   type: 'ADD_ADVANCED_EDITING_BLOCKS_TO_STATE',\n  //   data: {\n  //     ...(newTreeA || {}),\n  //     ...(newTreeB || {}),\n  //     ...(newTreeM || {}),\n  //   },\n  // });\n\n  // return;\n\n  const data = {\n    ...(newTreeA || {}),\n    ...(newTreeB || {}),\n    ...(newTreeM || {}),\n  };\n\n  requestAnimationFrame(() => {\n    setBlocksAction && dispatch(setBlocksAction(data));\n  });\n};\n","// resetModule\n\n// import { getInteractionsFromTopicAndState } from 'selectors/block';\nimport { Block } from '@chameleoncreator/creator-app';\nimport { Action, initialState, State, NextState } from 'store/store';\n// import { getInteractionsFromTopicAndState } from 'selectors/block';\n\n// import getAllInteractions from 'services/apiHelpers/getAllInteractions';\nimport isAndroidSamsung from 'services/isAndroidSamsung';\nimport isAppleComputerInc from 'services/isAppleComputerInc';\nimport { unlockAssessment } from 'components/lib/AssessmentResults/unlockAssessment';\n\nconst isDevice = isAppleComputerInc() || isAndroidSamsung();\n\nexport const resetModule = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  const interactionsOpen = [];\n  const interactionsLocked = [];\n  const landingPagesSeenState = {};\n\n  Object.values(state.blocks).forEach(block => {\n    if (block.type === 'Interaction') {\n      const { id } = block;\n      const lockDown = block?.props?.lockDown;\n\n      const moduleIsFreeScrolling = state.theme.moduleIsFreeScrolling || {\n        desktop: false,\n        device: false,\n      };\n\n      const {\n        desktop: moduleIsFreeScrollingDesktop,\n        device: moduleIsFreeScrollingDevice,\n      } = moduleIsFreeScrolling;\n\n      if (!isDevice) {\n        moduleIsFreeScrollingDesktop && interactionsOpen.push(id);\n        !moduleIsFreeScrollingDesktop &&\n          lockDown &&\n          interactionsLocked.push(id);\n      }\n\n      if (isDevice) {\n        moduleIsFreeScrollingDevice && interactionsOpen.push(id);\n        !moduleIsFreeScrollingDevice && lockDown && interactionsLocked.push(id);\n      }\n    }\n  });\n\n  //\n\n  // console.log(state.assessments);\n\n  return {\n    ...state,\n    interactionsSeen: [],\n    interactionsOpen: [],\n    landingPagesSeenState: {},\n    interactionsLocked,\n    assessments: {},\n  };\n};\n","import { Block } from '@chameleoncreator/creator-app';\nimport { addHeaderBlocksToStateAction } from 'actions/addHeaderBlocksToStateAction';\nimport { preprocessModuleAction } from 'actions/preprocessModuleAction';\nimport { rehydrateAction } from 'actions/rehydrate';\nimport { updateThemeHeadersAction } from 'actions/updateThemeHeadersAction';\nimport { createModule } from 'factories/module';\nimport { flatten } from 'factories/utils';\nimport { addHeaderBlocksToState } from 'reducers/addHeaderBlocksToState';\nimport { addScormResponse } from 'reducers/addScormResponse';\nimport { audioAcknowledged } from 'reducers/audioAcknowledged';\nimport { controlAudio } from 'reducers/controlAudio';\nimport { focusBlock } from 'reducers/focusBlock';\nimport { hideHeader } from 'reducers/hideHeader';\nimport { loadBookmarkData } from 'reducers/loadBookmarkData';\nimport { loadSuspendData } from 'reducers/loadSuspendData';\nimport { mirrorActive } from 'reducers/mirrorActive';\nimport { preprocessModule } from 'reducers/preprocessModule';\nimport { rehydrate } from 'reducers/rehydrate';\nimport { rehydrateFromLMS } from 'reducers/rehydrateFromLMS';\nimport { removeBlock } from 'reducers/removeBlock';\nimport { removeBlockLocal } from 'reducers/removeBlockLocal';\nimport { setActiveTopic } from 'reducers/setActiveTopic';\nimport { setAPIError } from 'reducers/setAPIError';\nimport { setBlock } from 'reducers/setBlock';\nimport { setBlocks } from 'reducers/setBlocks';\nimport { setCurrentInteraction } from 'reducers/setCurrentInteraction';\nimport { setError } from 'reducers/setError';\nimport { setExit } from 'reducers/setExit';\nimport { setExitComplete } from 'reducers/setExitComplete';\nimport { setFonts } from 'reducers/setFonts';\nimport { setIsScrolling } from 'reducers/setIsScrolling';\nimport { setLinks } from 'reducers/setLinks';\nimport { setProjectId } from 'reducers/setProjectId';\nimport { setRootBlock } from 'reducers/setRootBlock';\nimport { setTheme } from 'reducers/setTheme';\nimport { setThemeId } from 'reducers/setThemeId';\nimport { setTracker } from 'reducers/setTracker';\nimport { updateAssessment } from 'reducers/updateAssessment';\nimport { updateCourseTheme } from 'reducers/updateCourseTheme';\nimport { updateInteractionsOpen } from 'reducers/updateInteractionsOpen';\nimport { updateInteractionsSeen } from 'reducers/updateInteractionsSeen';\nimport { updateRecoloredChameleonImages } from 'reducers/updateRecoloredChameleonImages';\nimport { updateScore } from 'reducers/updateScore';\nimport { updateScormSettings } from 'reducers/updateScormSettigns';\nimport { updateUserPalette } from 'reducers/updateUserPallete';\nimport { updateInteractionsLocked } from 'reducers/updateInteractionsLocked';\nimport { applyMiddleware, compose, createStore } from 'redux';\nimport thunk from 'redux-thunk';\nimport { getTopicGroup } from 'selectors/block';\nimport { addFeedBackData } from '../reducers/addFeedBackData';\nimport { getLocalState, getState, watch } from './localStore';\nimport { Action, initialState, State } from './store';\nimport { updateLegacyBlocksWithSId } from 'services/updateLegacyBlocksWithSId';\nimport { addAdvancedEditingBlocksToStateAction } from 'actions/addAdvancedEditingBlocksToStateAction';\nimport { addAdvancedEditingBlocksToState } from 'reducers/addAdvancedEditingBlocksToState';\nimport { resetModule } from 'reducers/resetModule';\nimport { updateLandingPageSeenState } from 'reducers/updateLandingPageSeenState';\nimport { updateModuleVariables } from 'reducers/updateModuleVariables';\n\nconst hasMode = (mode: string): boolean => {\n  const w = window.hasMode && window.hasMode(mode);\n  return w;\n};\n\nexport const remoteable = (): boolean => {\n  return hasMode('EDIT');\n};\n\nremoteable();\n\nif (hasMode('DEVELOPMENT')) {\n  const mod = createModule('Example');\n  const [flatMod, rootBlockId] = flatten(mod);\n  const cur = (getTopicGroup(flatMod).children![0] as Block).id;\n\n  initialState.blocks = flatMod;\n  initialState.rootBlockId = rootBlockId;\n  initialState.currentTopic = cur;\n}\n\nconst actionHandlers = {\n  ADD_SCORM_RESPONSE: addScormResponse,\n  FOCUS_BLOCK: focusBlock,\n  HIDE_HEADER: hideHeader,\n  LOAD_BOOKMARK_DATA: loadBookmarkData,\n  LOAD_SUSPEND_DATA: loadSuspendData,\n  MIRROR_ACTIVE: mirrorActive,\n  PREPROCESS_MODULE: preprocessModule,\n  REHYDRATE: rehydrate,\n  REHYDRATE_FROM_LMS: rehydrateFromLMS,\n  REMOVE_BLOCK: removeBlock,\n  REMOVE_BLOCK_LOCAL: removeBlockLocal,\n  SET_ACTIVE_TOPIC: setActiveTopic,\n  SET_API_ERROR: setAPIError,\n  SET_BLOCK: setBlock,\n  SET_BLOCKS: setBlocks,\n  SET_CURRENT_INTERACTION: setCurrentInteraction,\n  SET_ERROR: setError,\n  SET_EXIT: setExit,\n  SET_EXIT_COMPLETE: setExitComplete,\n  SET_FONTS: setFonts,\n  SET_IS_SCROLLING: setIsScrolling,\n  SET_LINKS: setLinks,\n  SET_PROJECT_ID: setProjectId,\n  SET_ROOT_BLOCK: setRootBlock,\n  SET_THEME: setTheme,\n  SET_THEME_ID: setThemeId,\n  SET_TRACKER: setTracker,\n  SUBMIT_FEEDBACK: addFeedBackData,\n  UPDATE_COURSE_THEME: updateCourseTheme,\n  UPDATE_INTERACTIONS_OPEN: updateInteractionsOpen,\n  UPDATE_INTERACTIONS_SEEN: updateInteractionsSeen,\n  UPDATE_RECOLORED_CHAMELEON_IMAGES: updateRecoloredChameleonImages,\n  UPDATE_SCORE: updateScore,\n  UPDATE_SCORM_SETTINGS: updateScormSettings,\n  UPDATE_USER_PALETTE: updateUserPalette,\n  UPDATE_ASSESSMENT: updateAssessment,\n  CONTROL_AUDIO: controlAudio,\n  AUDIO_ACKNOWLEDGED: audioAcknowledged,\n  ADD_HEADER_BLOCKS_TO_STATE: addHeaderBlocksToState,\n  ADD_ADVANCED_EDITING_BLOCKS_TO_STATE: addAdvancedEditingBlocksToState,\n  UPDATE_INTERACTIONS_LOCKED: updateInteractionsLocked,\n  RESET_MODULE: resetModule,\n  UPDATE_MODULE_VARIABLES: updateModuleVariables,\n  UPDATE_LANDING_PAGE_SEEN_STATE: updateLandingPageSeenState,\n};\n\n// translate actions into handlers (standard redux reducer)\nexport const reducer = (state: State = initialState, action: Action): State => {\n  const handler = actionHandlers[action.type];\n  return handler ? handler(state, action) : { ...state };\n};\n\n// create the store from the reducer above\n\nconst composeEnhancers =\n  window['__REDUX_DEVTOOLS_EXTENSION_COMPOSE__'] || compose;\n\nconst store = createStore(reducer, composeEnhancers(applyMiddleware(thunk)));\n\n(() => {\n  if (hasMode('PREVIEW')) {\n    const savedStore = getState();\n\n    // if we have saved state, lets load it in.\n    if (savedStore && savedStore !== undefined) {\n      store.dispatch(rehydrateAction(savedStore));\n      store.dispatch(preprocessModuleAction());\n      //\n      updateThemeHeadersAction(store.dispatch, store.getState);\n    }\n\n    // needed to move this out of the savedStore checks for local dev\n    addHeaderBlocksToStateAction(store.dispatch, store.getState);\n  }\n\n  if (hasMode('DEVELOPMENT')) {\n    //\n\n    // rehydrate\n    const savedStore = getLocalState();\n\n    // if we have saved state, lets load it in.\n    if (savedStore && savedStore !== undefined) {\n      store.dispatch(rehydrateAction(savedStore));\n      store.dispatch(preprocessModuleAction());\n      //\n      updateThemeHeadersAction &&\n        updateThemeHeadersAction(store.dispatch, store.getState);\n    }\n\n    // needed to move this out of the savedStore checks for local dev\n    addHeaderBlocksToStateAction(store.dispatch, store.getState);\n\n    addAdvancedEditingBlocksToStateAction()(store.dispatch, store.getState);\n\n    updateLegacyBlocksWithSId(store);\n    //Save changes\n    watch(store as any);\n  }\n})();\n\nexport default store;\n","import { Block, Blocks, cloneBlock } from '@chameleoncreator/creator-app';\nimport { createBlock } from './block';\nimport { createHeader } from './header';\nimport { createTopic } from './topic';\nimport { createScorm } from './scorm';\nimport { createAdvancedEditing } from './advancedediting';\nimport { createBookmark } from './bookmark';\nimport { createModuleHasAudioMessage } from './modulehasaudiomessage';\n\nexport const createModule = (title: string): Block => {\n  return createBlock(\n    'Module',\n    [\n      createScorm(),\n      createHeader(),\n      // createAdvancedEditing(),\n      // createBookmark(),\n      // createModuleHasAudioMessage(),\n      createBlock('AnimationGroup', [createTopic('Topic #1')], {\n        meta: { subType: 'Topic' },\n      }),\n    ],\n    {\n      props: {\n        passMark: 80,\n        name: title,\n        theme: {\n          userPalette: [],\n        },\n      },\n    }\n  );\n};\n\nexport const addScormBlock = (mod: Block) => (scormBlock: Block): Block => {\n  if (mod.type !== 'Module') {\n    return mod;\n  }\n\n  const nextMod = cloneBlock(mod);\n  (nextMod.children as Block[]).unshift(scormBlock);\n\n  return nextMod;\n};\n\n// Returns a new block that should be saved. this will be the TopicGroup block\n// contained within the module\nexport const addTopic = (blocks: Blocks) => (mod: Block) => (\n  topic: Block,\n  position: number\n): Block => {\n  if (mod.type !== 'Module') {\n    return mod;\n  }\n\n  const group = (mod.children as Block[]).find(child => {\n    const block = blocks[child.id];\n    return block.meta && block.meta.subType === 'Topic';\n  });\n\n  if (!group) {\n    throw new Error(\"Topic group missing from topic. That shouldn't happen\");\n  }\n\n  const nextGroup = cloneBlock(blocks[group.id]);\n  (nextGroup.children as Block[]).splice(position, 0, topic);\n\n  return nextGroup;\n};\n\nexport const addTopicToGroup = (blocks: Blocks) => (\n  group: Block,\n  topic: Block,\n  position: number\n): Block => {\n  // console.log(group);\n  if (!group.meta || group.meta.subType !== 'Topic') {\n    throw new Error('Group must contain Topics');\n  }\n\n  const nextGroup = cloneBlock(blocks[group.id]);\n  (nextGroup.children as Block[]).splice(position, 0, topic);\n  return nextGroup;\n};\n\nexport const removeTopic = (blocks: Blocks) => (\n  mod: Block,\n  id: string\n): Block => {\n  if (mod.type !== 'Module') {\n    return mod;\n  }\n\n  let group = (mod.children as Block[]).find(child => {\n    const block = blocks[child.id];\n    return block.meta && block.meta.subType === 'Topic';\n  });\n\n  if (!group) {\n    throw new Error(\"Topic group missing from topic. That shouldn't happen\");\n  }\n\n  group = blocks[group.id];\n\n  return removeTopicFromGroup(blocks)(group, id);\n};\n\nexport const removeTopicFromGroup = (blocks: Blocks) => (\n  group: Block,\n  id: string\n): Block => {\n  if (!group) {\n    throw new Error(\"Topic group missing from module. That shouldn't happen\");\n  }\n\n  if (!group.meta || group.meta.subType !== 'Topic') {\n    throw new Error('Group must contain Topics');\n  }\n\n  const nextGroup = cloneBlock(blocks[group.id]);\n\n  const index = (nextGroup.children as Block[]).findIndex(r => r.id === id);\n\n  (nextGroup.children as Block[]).splice(index, 1);\n  return nextGroup;\n};\n","import { initialState, State, Action } from 'store/store';\n\nexport const addScormResponse = (\n  state: State = initialState,\n  { data }: Action\n) => {\n  return {\n    ...state,\n    userBehaviour: {\n      ...state.userBehaviour,\n      scormResponses: {\n        ...state.userBehaviour.scormResponses,\n        [data.id]: data,\n      },\n    },\n  };\n};\n","import { Action, State } from 'store/store';\n\nexport const focusBlock = (state: State, { data }: Action): State => {\n  const { focusedNodeId, lastFocusedNodeId, currentInteractionBlockId } = state;\n\n  // if (data && data.id === 'advancedEditing') {\n  //   return {\n  //     ...state,\n  //     lastFocusedNodeId: lastFocusedNodeId === '' ? data.id : focusedNodeId,\n  //     focusedNodeId: data ? data.id : null,\n  //     currentInteractionBlockId: 'advancedEditing',\n  //   };\n  // }\n\n  const type = data && (state.blocks as any)[data.id].type;\n  let updatedCurrentInteractionBlockId =\n    type && type === 'Interaction'\n      ? data.id\n      : !data || data.id === null\n      ? null\n      : currentInteractionBlockId;\n\n  return {\n    ...state,\n    lastFocusedNodeId: lastFocusedNodeId === '' ? data.id : focusedNodeId,\n    focusedNodeId: data ? data.id : null,\n    currentInteractionBlockId: updatedCurrentInteractionBlockId,\n  };\n};\n","import { initialState, State, Action } from 'store/store';\n\nexport const hideHeader = (state: State = initialState, { data }: Action) => {\n  return {\n    ...state,\n    hideHeader: data.hide,\n  };\n};\n","import { initialState, State, Action } from 'store/store';\n\nexport const loadBookmarkData = (\n  state: State = initialState,\n  { data }: Action\n) => {\n  const bookmarkLocation = data?.location ?? data;\n  let bookmarkLoaded = true;\n\n  if (data?.bookmarkLoaded !== undefined) {\n    bookmarkLoaded = data?.bookmarkLoaded;\n  }\n\n  return {\n    ...state,\n    bookmarkLocation,\n    bookmarkLoaded,\n    // bookmarkLocation: data,\n    // bookmarkLoaded: true,\n  };\n};\n","import { initialState, State, Action } from '../store/store';\n\nexport const loadSuspendData = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  console.log('loadSuspendData :', data);\n\n  // we're gonna park this for the moment\n  //\n  const hasSavedAssessments =\n    data?.assessments && Object.keys(data.assessments).length;\n\n  let { interactionsLocked, landingPagesSeenState } = data;\n  if (interactionsLocked === undefined || interactionsLocked?.length === 0) {\n    interactionsLocked = state.interactionsLocked;\n  }\n\n  const { moduleVariables = {}, location = '' } = data;\n\n  const newState = {\n    ...state,\n    ...{\n      interactionsSeen: data.interactionsSeen,\n      //\n      interactionsLocked,\n      landingPagesSeenState,\n      //\n      userBehaviour: {\n        ...state.userBehaviour,\n        ...{\n          score: data.score,\n          interactionsReporting: data.interactionsReporting,\n        },\n      },\n      ...(hasSavedAssessments && { assessments: data.assessments }),\n      //\n      moduleVariables,\n      location,\n    },\n  };\n\n  return newState;\n};\n","import { Action, initialState, State } from \"store/store\";\n\nexport const rehydrate = (state: State = initialState, { data }: Action): State => {\n  return { ...state, ...data };\n};\n","import { Action, initialState, State } from \"store/store\";\n\nexport const rehydrateFromLMS = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  const { interactionsSeen } = data as any;\n\n  return {\n    ...state,\n    ...interactionsSeen,\n  } as any;\n};\n","import { Block } from \"@chameleoncreator/creator-app\";\nimport { findBlocksIn } from \"selectors/block\";\nimport { Action, initialState, State, TrackerState } from \"store/store\";\n\nexport const removeBlock = (state: State = initialState, { data }: Action): State => {\n  const nextState = {\n    ...state,\n    blocks: { ...state.blocks },\n    tracker: { ...state.tracker },\n  };\n\n  nextState.tracker[data.id] = TrackerState.DELETED;\n\n  const all = findBlocksIn(nextState.blocks, data as Block, () => true);\n\n  all.forEach(b => {\n    nextState.tracker[b.id] = TrackerState.DELETED;\n  });\n\n  return nextState;\n};\n","import { Action, initialState, State } from \"store/store\";\n\nexport const removeBlockLocal = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  const nextState = {\n    ...state,\n    blocks: { ...state.blocks },\n  };\n\n  delete nextState.blocks[data.id];\n\n  return nextState;\n};","import { Action, initialState, State } from \"store/store\";\n\nexport const setActiveTopic = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  return {\n    ...state,\n    currentTopic: data.id,\n  };\n};","import { initialState, State, Action } from '../store/store';\n\nexport const setAPIError = (state: State = initialState, { data }: Action): State => {\n  const nextState = {\n    ...state,\n    apiError: {\n      count: state.apiError.count + 1,\n      err: data,\n    },\n  };\n\n  if (nextState.apiError.count >= 3) {\n    nextState.hasError = true;\n    nextState.error = data;\n  }\n\n  return nextState;\n};\n","import { Block } from \"@chameleoncreator/creator-app\";\nimport { Action, initialState, State, TrackerState } from \"store/store\";\n\nexport const setBlock = (state: State = initialState, { data }: Action): State => {\n  const nextState = {\n    ...state,\n    blocks: { ...state.blocks },\n    tracker: { ...state.tracker },\n  };\n  nextState.blocks[data.id] = data as Block;\n  nextState.tracker[data.id] = TrackerState.DIRTY;\n  return nextState;\n};\n","import { Action, initialState, State, TrackerState } from \"../store/store\";\nimport { Blocks } from '@chameleoncreator/creator-app';\n\nexport const setBlocks = (state: State = initialState, { data }: Action): State => {\n  const blocks = data as Blocks;\n  const nextState = {\n    ...state,\n    blocks: { ...state.blocks },\n    tracker: { ...state.tracker },\n  };\n\n  Object.keys(blocks).forEach(id => {\n    const block = blocks[id];\n    nextState.blocks[block.id] = block;\n    nextState.tracker[block.id] = TrackerState.DIRTY;\n  });\n\n  return nextState;\n};","import { Action, initialState, State } from \"store/store\";\n\nexport const setCurrentInteraction = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  return {\n    ...state,\n    ...(data.updateFocusedNodeId && {\n      focusedNodeId: data.id,\n    }),\n    currentInteraction: data.id,\n  };\n};\n","import { Action, initialState, State } from \"store/store\";\n\nexport const setError = (state: State = initialState, { data }: Action) => {\n  return {\n    ...state,\n    hasError: true,\n    error: data,\n  };\n};\n","import { Action, initialState, State } from \"store/store\";\n\nexport const setExit = (state: State = initialState, { data }: Action) => {\n  return {\n    ...state,\n    exit: data\n  };\n};","import { Action, initialState, State } from \"store/store\";\n\nexport const setExitComplete = (state: State = initialState, { data }: Action) => {\n  return {\n    ...state,\n    exitComplete: data\n  };\n};","import { Action, initialState, State } from \"store/store\";\n\nexport const setFonts = (state: State = initialState, { data }: Action) => {\n  return {\n    ...state,\n    customFonts: data as any,\n  };\n};","import { Action, initialState, State } from \"store/store\";\n\nexport const setIsScrolling = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  return {\n    ...state,\n    isScrolling: data.isScrolling,\n  };\n};","import { Action, initialState, State } from \"store/store\";\n\nexport const setLinks = (state: State = initialState, { data }: Action) => {\n  return {\n    ...state,\n    links: data,\n  };\n};","import { initialState, State, Action } from '../store/store';\n\nexport const setProjectId = (state: State = initialState, { data }: Action): State => {\n  const nextState = {\n    ...state,\n    projectId: data as any,\n  };\n\n  return nextState;\n};\n","import { Action, initialState, State } from '../store/store';\n\n//\nexport const setRootBlock = (state: State = initialState, { data }: Action): State => {\n  const nextState = {\n    ...state,\n    rootBlockId: data as any,\n  };\n  return nextState;\n};\n","import { Action, initialState, State } from \"store/store\";\n\nexport const setTheme = (state: State = initialState, { data }: Action): State => {\n  const nextState = {\n    ...state,\n    themeId: data.id,\n    theme: { ...(state as any).theme, ...data.data },\n  };\n\n  return nextState;\n};\n","import { Action, initialState, State } from \"store/store\";\n\nexport const setThemeId = (state: State = initialState, { data }: Action): State => {\n  const nextState = {\n    ...state,\n    themeId: (data as unknown) as string,\n  };\n\n  return nextState;\n};\n","import { initialState, State, Action } from 'store/store';\n\nexport const setTracker = (state: State = initialState, { data }: Action): State => {\n  const nextState = {\n    ...state,\n    tracker: data,\n  };\n\n  return nextState;\n};\n","import { Action, initialState, State } from \"store/store\";\n\nexport const updateCourseTheme = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  const nextState = {\n    ...state,\n    theme: {\n      ...(state as any).theme,\n      ...data,\n    },\n  };\n\n  return nextState;\n};","import { getInteractionsFromTopicAndState } from 'selectors/block';\nimport { Action, initialState, State } from 'store/store';\n\nexport const updateInteractionsOpen = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  const { blocks, currentTopic, interactionsOpen, nextInteractionMap } = state;\n  const currentInteractionId = (data as unknown) as string;\n\n  // interactions in currentTopic\n  // get the next interaction.id based on ( current ) data.id\n  // add it to the list. . .\n\n  // add the ability to update with an array\n\n  if (Array.isArray(data)) {\n    const newInteractionsOpen = data.length\n      ? Array.from(new Set([...interactionsOpen, ...data]))\n      : [];\n\n    return {\n      ...state,\n      interactionsOpen: newInteractionsOpen,\n    } as any;\n  }\n\n  const nextInteractionId = nextInteractionMap[currentInteractionId];\n\n  if (!nextInteractionId) {\n    return state;\n  }\n\n  if (interactionsOpen.includes(nextInteractionId)) {\n    return state;\n  } else {\n    return {\n      ...state,\n      interactionsOpen: [...interactionsOpen, nextInteractionId],\n    } as any;\n  }\n};\n","import { Action, initialState, State } from 'store/store';\n\nexport const updateInteractionsSeen = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  // return state;\n\n  // console.log(data);\n\n  let { interactionsSeen = [] } = state as any;\n\n  // interactionsSeen = interactionsSeen.filter(i => {\n  //   return typeof i === 'string';\n  // });\n\n  //\n\n  if (Array.isArray(data)) {\n    const newInteractionsSeen = data.length\n      ? Array.from(new Set([...interactionsSeen, ...data]))\n      : [];\n\n    // console.log({ newInteractionsSeen });\n\n    return {\n      ...state,\n      // interactionsSeen: [\n      //   ...Array.from(new Set([...interactionsSeen, ...data])),\n      // ],\n      interactionsSeen: newInteractionsSeen,\n    } as any;\n  }\n\n  if (interactionsSeen.includes(data.id)) {\n    return state;\n  } else {\n    return {\n      ...state,\n      interactionsSeen: [...interactionsSeen, data.id],\n    } as any;\n  }\n};\n","import { Action, initialState, State } from \"store/store\";\n\nexport const updateRecoloredChameleonImages = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  const nextState = {\n    ...state,\n    theme: {\n      ...(state as any).theme,\n      recoloredChameleonImages: {\n        ...(state as any).theme.recoloredChameleonImages,\n        ...data,\n      },\n    },\n  };\n\n  return nextState;\n};\n","import { initialState, State, Action } from '../store/store';\n\nexport const updateScore = (state: State = initialState, { data }: Action) => {\n  return {\n    ...state,\n    userBehaviour: {\n      ...state.userBehaviour,\n      score: {\n        ...state.userBehaviour.score,\n        [data.id]: data.score,\n      },\n    },\n  };\n};\n","import { Action, initialState, State } from \"store/store\";\n\nexport const updateScormSettings = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  const nextState = {\n    ...state,\n    scormSettings: {\n      ...(state as any).scormSettings,\n      ...data,\n    },\n  };\n\n  return nextState;\n};","import { Action, initialState, State } from \"store/store\";\n\nexport const updateUserPalette = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  const nextState = {\n    ...state,\n    theme: {\n      ...(state as any).theme,\n      userPalette: data,\n    },\n  };\n\n  return nextState;\n};","import { Action, initialState, State } from 'store/store';\n\nexport const updateAssessment = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  const { assessmentId, assessmentData, questionData } = data;\n\n  // console.log({ assessmentId, assessmentData, questionData });\n\n  const assessment = state.assessments[assessmentId];\n\n  let nextState;\n\n  if (data.delete) {\n    // console.log(data);\n\n    delete assessment.results[data.delete.questionId];\n    //\n    nextState = {\n      ...state,\n    };\n\n    // console.log(nextState.assessments[assessmentId]);\n    return nextState;\n  }\n\n  nextState = {\n    ...state,\n\n    assessments: {\n      ...(state as any).assessments,\n\n      [assessmentId]: {\n        ...assessment,\n        data: {\n          ...assessment?.data,\n          ...assessmentData,\n        },\n        results: {\n          ...assessment?.results,\n          ...questionData,\n        },\n      },\n    },\n  };\n\n  // console.log(nextState.assessments);\n\n  return nextState;\n};\n","import { Action, initialState, State, Audio } from 'store/store';\n\n// TODO - update with type for audio\n\nexport const controlAudio = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  // if data is anything falsey or an empty object\n  if (!data || !Object.keys(data).length) {\n    return {\n      ...state,\n      audio: data as Audio,\n    };\n  }\n\n  const newAudio = {\n    ...state.audio,\n    ...(data as Audio),\n  };\n\n  // console.log('controlAudio :', newAudio);\n\n  const nextState = {\n    ...state,\n    audio: { ...newAudio },\n  };\n\n  return nextState as State;\n};\n","import { Action, initialState, State } from 'store/store';\n\nexport const audioAcknowledged = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  console.log('audioAcknowledged :', data);\n\n  const nextState = {\n    ...state,\n    audioAcknowledged: data as any,\n  };\n\n  return nextState;\n};\n","export const addHeaderBlocksToState = (state, { type, data }) => {\n  if (type !== 'ADD_HEADER_BLOCKS_TO_STATE') {\n    return state;\n  }\n\n  const newState = {\n    ...state,\n    ...data,\n  };\n\n  // console.log(\n  //   'header blocks have been added to state :',\n  //   newState.header,\n  //   newState.standardHeader,\n  //   newState.graphicHeader,\n  //   newState.standardHeaderLogo,\n  //   newState.graphicHeaderBackground,\n  //   newState.graphicHeaderLogo\n  // );\n\n  return newState;\n};\n","export const addAdvancedEditingBlocksToState = (state, { type, data }) => {\n  if (type !== 'ADD_ADVANCED_EDITING_BLOCKS_TO_STATE') {\n    return state;\n  }\n\n  const newState = {\n    ...state,\n    blocks: {\n      ...state.blocks,\n      ...data,\n    },\n  };\n\n  return newState;\n};\n","export const updateModuleVariables = (state, $) => {\n  if ($.type === 'UPDATE_MODULE_VARIABLES') {\n    const newState = {\n      ...state,\n      moduleVariables: {\n        ...state.moduleVariables,\n        ...$.data,\n      },\n    };\n\n    // console.log(newState.moduleVariables);\n\n    return newState;\n  }\n\n  return state;\n};\n","import { Action, initialState, State } from 'store/store';\n\nexport const updateLandingPageSeenState = (\n  state: State = initialState,\n  { data }: Action\n): State => {\n  const { landingPagesSeenState = {} } = state;\n  const { parentId, childIndex, clear } = data;\n\n  if (!landingPagesSeenState[parentId]) {\n    landingPagesSeenState[parentId] = [];\n  }\n\n  const updatedLandingPagesSeenState = {\n    ...landingPagesSeenState,\n    [parentId]: clear\n      ? [childIndex]\n      : Array.from(new Set([...landingPagesSeenState[parentId], childIndex])),\n  };\n\n  return {\n    ...state,\n    landingPagesSeenState: updatedLandingPagesSeenState,\n  };\n};\n","export const preprocessModuleAction = () => ({\n  type: 'PREPROCESS_MODULE',\n  data: {},\n});\n","import { setBlockAction } from 'actions/setBlockAction';\nimport { cloneBlock, Block } from '@chameleoncreator/creator-app';\n\nfunction updateLegacyBlocksWithSId(store) {\n  const { blocks } = store.getState();\n  const blocksList = Object.values(blocks) as Block[];\n\n  const topicBlocks = blocksList.filter(block => {\n    return block.type.toLowerCase() === 'topic';\n  });\n\n  const interactionBlocks = blocksList.filter(block => {\n    return block.type.toLowerCase() === 'interaction';\n  });\n\n  const assessmentQuestionBlocks = blocksList.filter(block => {\n    return block.type.toLowerCase() === 'AssessmentQuestion'.toLowerCase();\n  });\n\n  let topicBlocksSIdCounter = Math.max(\n    ...topicBlocks.map(topicBlock => topicBlock?.props?.sId || 0)\n  );\n\n  let interactionBlocksSIdCounter = Math.max(\n    ...interactionBlocks.map(\n      interactionBlock => interactionBlock?.props?.sId || 0\n    )\n  );\n\n  //\n  let assessmentQuestionBlocksSIdCounter = Math.max(\n    ...assessmentQuestionBlocks.map(assessmentQuestionBlock => {\n      const sId = assessmentQuestionBlock?.props?.sId;\n\n      return sId || 0;\n    })\n  );\n\n  const blocksUpdatedWithSId = (blocks: Block[]) => {\n    // filter out the blocks that HAVE sId\n    return blocks\n      .filter((block: Block) => {\n        if (block.props) {\n          const { sId } = block.props;\n          return !sId;\n        }\n      })\n      .map((block: Block) => {\n        const nextBlock = cloneBlock(block);\n\n        let sId;\n\n        switch (nextBlock.type.toLowerCase()) {\n          case 'topic': {\n            topicBlocksSIdCounter += 1;\n            sId = topicBlocksSIdCounter;\n            break;\n          }\n\n          case 'interaction': {\n            interactionBlocksSIdCounter += 1;\n            sId = interactionBlocksSIdCounter;\n            break;\n          }\n\n          case 'assessmentquestion': {\n            assessmentQuestionBlocksSIdCounter += 1;\n            sId = assessmentQuestionBlocksSIdCounter;\n            break;\n          }\n        }\n\n        nextBlock.props = {\n          ...nextBlock.props,\n          sId,\n        };\n\n        return nextBlock;\n      });\n  };\n\n  const updatedBlocks = [\n    ...blocksUpdatedWithSId(topicBlocks),\n    ...blocksUpdatedWithSId(interactionBlocks),\n    ...blocksUpdatedWithSId(assessmentQuestionBlocks),\n  ];\n\n  if (!updatedBlocks.length) {\n    return;\n  }\n\n  updatedBlocks.forEach((block: Block) => {\n    if (block) {\n      store.dispatch(setBlockAction(block));\n    } else {\n      console.log(`WTF. ${block} is not a block !?!?`);\n    }\n  });\n}\n\nexport { updateLegacyBlocksWithSId };\n","// import store from 'store';\nimport _store from 'store/next.ts';\n// that'll need to be updated. store will eventually become the default. . .\n\nexport default () => {\n  if (parent === window) {\n    return _store as any;\n  }\n\n  try {\n    if (parent.getStore) {\n      return parent.getStore();\n    }\n  } catch {\n    return _store;\n  }\n\n  return _store;\n};\n","import getStore from 'services/getStore';\n\nconst store = getStore();\n\nconst values = {\n  headerHeight: 70,\n};\n\nconst colors = {\n  lPink: '#ff0063',\n  lBlue0: '#b3cde0',\n  softBlue: '#5596FF',\n  lGrey0: '#282a2b',\n  lGrey1: '#dee3f3',\n  lGrey2: '#ecedf0',\n  lGrey3: '#eaeffb',\n  lGrey4: '#f5f8fa',\n  lTeal0: '#3c95a4',\n  lTeal1: '#32d0d0',\n  lightBlueGrey: '#e8edff',\n  //\n  mint: '#00D9D3',\n  chameleonMint: '#1D2026',\n  purple: '#9E6CFF',\n};\n\nconst focusBorder = '1px solid #2684FF !important';\nconst focusBoxShadow = '0 0 0 1px #2684FF !important';\n\nfunction getButtonFocus(color, shadowBefore: any = null) {\n  const { highContrast = false } = store.getState().theme;\n\n  return !window.dev()\n    ? `\n    box-shadow: ${\n      shadowBefore ? `${shadowBefore}, ` : ''\n    }0 0 0 2px #fff, 0 0 0 ${highContrast ? 5 : 3}px ${color} !important;`\n    : '';\n}\n\nconst CALCULATED_LINE_HEIGHT_OFFSET = 1.2;\n\nexport {\n  values,\n  colors,\n  focusBorder,\n  focusBoxShadow,\n  getButtonFocus,\n  CALCULATED_LINE_HEIGHT_OFFSET,\n};\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport { colors } from 'styles/variables';\n\nconst { lPink } = colors;\n\nconst EmptyBtn = ({\n  label,\n  tabIndex = null,\n  ariaLabel = '',\n  disabled,\n  onClick,\n  style = {},\n  children,\n  ...props\n}: {\n  label?: string;\n  tabIndex?: any;\n  ariaLabel?: string;\n  disabled?: boolean;\n  style?: {};\n  onClick?: any;\n  children: any;\n}) => {\n  //\n  return (\n    <button\n      css={css`\n        padding: 0;\n        border: none;\n        font: inherit;\n        color: inherit;\n        background-color: transparent;\n        cursor: pointer;\n        &:focus-visible {\n          outline: 1px solid ${lPink};\n          outline-offset: 3px;\n        }\n      `}\n      style={style}\n      {...props}\n      disabled={disabled}\n      onClick={onClick}\n      tab-index={tabIndex}\n      aria-label={ariaLabel}\n    >\n      {children || label}\n    </button>\n  );\n};\n\nexport default EmptyBtn;\n","/** @jsx jsx */\n\nimport React from 'react';\n// import { css as _css } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport EmptyBtn from 'components/UI/EmptyBtn';\nimport { colors } from 'styles/variables';\n\nconst { lPink, lGrey1 } = colors;\n\nconst EditorBtn = ({ label, onClick, style = {}, ...props }) => {\n  let hoverOveride = null as any;\n  if (style['hover']) {\n    hoverOveride = Object.keys(style['hover'])\n      .map(key => `${key}: ${style['hover'][key]} !important;`)\n      .join('');\n  }\n\n  return (\n    <EmptyBtn\n      label={label}\n      css={css`\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        min-height: 35px;\n        min-width: 100px;\n        padding: 5px 15px;\n        border-radius: 9999px;\n        outline: none;\n        background: ${lPink};\n        color: #fff;\n        transition: background 0.1s;\n        &:hover {\n          background: ${lGrey1} !important;\n          color: #000 !important;\n\n          ${hoverOveride && hoverOveride}\n        }\n      `}\n      style={style}\n      {...props}\n      onClick={onClick}\n    />\n  );\n};\n\nexport default EditorBtn;\n","import React from 'react';\nimport { ErrorModal } from './errorModal';\nimport styled from '@emotion/styled';\nimport EditorBtn from './UI/EditorBtn';\nimport * as Sentry from '@sentry/browser';\n\nconst Cont = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100vw;\n  height: 100vh;\n  justify-content: center;\n  align-items: center;\n  display: flex;\n`;\n\nconst Backdrop = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100vw;\n  height: 100vh;\n  background: rgba(0, 0, 0, 0.5);\n  z-index: 1000;\n`;\n\nconst Modal = styled.div`\n  background: rgb(255, 255, 255);\n  border-radius: 30px;\n  padding: 32px;\n  line-height: 1.6;\n  z-index: 1001;\n  max-width: 600px;\n  box-shadow: 0 0 0 12px rgba(0, 0, 0, 0.2);\n\n  & h1 {\n    line-height: 2;\n  }\n\n  & div {\n    line-height: 1.6;\n  }\n\n  & button {\n    margin: 16px 0;\n  }\n`;\n\nexport class ErrorBoundary extends React.Component<\n  any,\n  { hasError: boolean; error: any; eventId: any }\n> {\n  constructor(props) {\n    super(props);\n    this.state = { hasError: false, error: undefined, eventId: undefined };\n  }\n\n  static getDerivedStateFromError(error) {\n    // Update state so the next render will show the fallback UI.\n    return { hasError: true, error: error };\n  }\n\n  componentDidCatch(error, info) {\n    // You can also log the error to an error reporting service\n    Sentry.withScope(scope => {\n      scope.setExtras(info);\n      const eventId = Sentry.captureException(error);\n      this.setState({ eventId });\n    });\n  }\n\n  render() {\n    if (this.state.hasError) {\n      // You can render any custom fallback UI\n      return (\n        <Cont>\n          <Backdrop />\n          <Modal>\n            <div>\n              <h1>Oh no :(</h1>\n              <p>Something has gone wrong. The error message provided is:</p>\n              <p>\n                <strong>\"{this.state.error.toString()}\".</strong>\n              </p>\n              <p>\n                We have been alerted to this error, however if it is\n                consistently occuring please fell free to notify us by clicking\n                on the support button in the bottom right hand corner.\n              </p>\n            </div>\n            <EditorBtn\n              label=\"Reload\"\n              onClick={() => {\n                window.location.reload();\n              }}\n            />\n          </Modal>\n        </Cont>\n      );\n    }\n\n    return this.props.children;\n  }\n}\n","import getSubscriptions from './getSubscriptions';\n\nlet subscriptions: any;\n\ntry {\n  subscriptions = getSubscriptions() || {};\n} catch (err) {\n  subscriptions = {};\n}\n\nconst exposeToChildFrames = () => {\n  subscriptions = getSubscriptions(window as any);\n};\n\nconst pubSub = Object.freeze({\n  subscribe(name, fN) {\n    if (!subscriptions[name]) {\n      subscriptions[name] = {\n        subscribers: [],\n        record: undefined,\n      };\n    }\n\n    if (subscriptions[name].subscribers.includes(fN)) {\n      return () => { };\n    }\n\n    subscriptions[name].subscribers.push(fN);\n\n    return () =>\n      subscriptions[name].subscribers.splice(\n        subscriptions[name].subscribers.indexOf(fN),\n        1\n      );\n  },\n  publish(name, data) {\n    if (!subscriptions[name]) {\n      return;\n    }\n\n    subscriptions[name].record = {\n      ...subscriptions[name].record,\n      ...data,\n    };\n\n    for (const $ of subscriptions[name].subscribers) {\n      $(subscriptions[name].record);\n    }\n  },\n  query(name) {\n    return subscriptions[name]\n      ? { ...subscriptions[name].store }\n      : console.warn(\n        `%c ${`there is no store to query on : '${name}' !!! `.toUpperCase()}`,\n        'background: #ff0000; color: #bada55'\n      );\n  },\n});\n\nexport default pubSub;\nexport { exposeToChildFrames };\n","export const CHAMELEON_CACHE_v1 = 'chameleon-cache-v1';\n\nexport const getCache = async () => {\n  let $;\n  // return caches.open(CHAMELEON_CACHE_v1);\n  try {\n    // throw 'ERRORz';\n\n    $ = caches.open(CHAMELEON_CACHE_v1);\n  } catch (err) {\n    $ = {\n      match() {\n        return Promise.resolve(undefined);\n      },\n      add() {\n        return Promise.resolve(undefined);\n      },\n      put() {\n        return undefined;\n      },\n      delete() {\n        return undefined;\n      },\n    };\n  }\n\n  return $;\n};\n","import uuid from 'uuidv4';\n\nconst getSubscriptionsWindow = (WINDOW = window) => {\n  for (const key of Object.keys(WINDOW)) {\n    const prefix = String(WINDOW.location);\n\n    if (key.includes(prefix)) {\n      const keyId = key.replace(prefix, '');\n      const getId = WINDOW[key][keyId];\n\n      const id = typeof getId === 'function' ? getId(true) : '.';\n\n      if (keyId === id) {\n        return WINDOW[key][id]();\n      }\n    }\n  }\n\n  if (WINDOW === WINDOW.parent) {\n    return;\n  }\n\n  return getSubscriptionsWindow((WINDOW as any).parent);\n};\n\nconst getSubscriptions = (window: any = null) => {\n  if (window) {\n    const id = uuid();\n    const _ = {};\n\n    window[`${String(window.location)}${id}`] = {\n      [id]($) {\n        return $ ? id : _;\n      },\n    };\n  }\n\n  return getSubscriptionsWindow();\n};\n\nexport default getSubscriptions;\n","import { useState, useEffect } from 'react';\nimport pubSub from './pubSub';\n\nconst usePubSub = name => {\n  const [state, setState] = useState(pubSub.query(name));\n\n  useEffect(() => {\n    const pS = pubSub.subscribe(name, setState);\n\n    return () => pS();\n  }, []);\n\n  return [\n    state,\n    $ => {\n      pubSub.publish(name, $);\n    },\n  ];\n};\n\nexport default usePubSub;\n","import pubSub, { exposeToChildFrames } from './pubSub';\nimport usePubSub from './usePubSub';\n\nexport default pubSub;\nexport { exposeToChildFrames, usePubSub };\n","function getIsValidHexColor(_hex_) {\n  return /^#([0-9a-f]{3}){1,2}$/i.test(_hex_);\n}\n\nconst hexToRgb = (_hex_: string) => {\n  const isValidHexColor = getIsValidHexColor(_hex_);\n\n  if (!isValidHexColor) {\n    // console.warn(\n    //   `%c ${_hex_ ||\n    //     'undefined'} is not a valid hex color. rgb(0, 0, 0) will be returned.`,\n    //   'background: #ff0000; color: #bada55'\n    // );\n  }\n\n  let hex: string | string[] = isValidHexColor ? _hex_ : '#000';\n  //\n  if (hex.length === 4) {\n    hex = hex.replace('#', '').split('');\n    hex = `#${hex\n      .map(entry => {\n        return `${entry}${entry}`;\n      })\n      .join('')}`;\n  }\n\n  const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n  return ['r', 'g', 'b'].reduce((acc, curr, i) => {\n    return {\n      ...acc,\n      [curr]: !result ? 0 : parseInt(result[i + 1], 16),\n    };\n  }, {}) as any;\n};\n\nconst getHexToRgbWithDefaultFallback = (\n  hex: string,\n  defaultColor: string = '#fff'\n) => {\n  const isValidHexColor = getIsValidHexColor(hex);\n\n  if (!isValidHexColor) {\n    console.warn(\n      `%c ${hex ||\n        'undefined'} is not a valid hex color. the default color will be returned as rgb(. . .)`,\n      'background: #ff0000; color: #bada55'\n    );\n  }\n\n  if (!isValidHexColor) {\n    return hexToRgb(defaultColor);\n  }\n\n  return hexToRgb(hex);\n};\n\nexport default hexToRgb;\nexport { getHexToRgbWithDefaultFallback };\n","/** @jsx jsx */\n\nimport { Fragment as _, useState, useRef, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { css, jsx } from '@emotion/core';\nimport lizard from 'assets/Loader_Logo_2.gif'; // KeyImage.png'; // lizard.svg';\nimport { colors } from 'styles/variables';\nimport 'services/elementRemovePolyfill';\nimport { getCache } from 'services/imageCache';\nimport { State } from 'store/store';\nimport { useSelector } from 'react-redux';\nimport pubSub from 'services/pubSub';\nimport hexToRGB from 'services/hexToRGB';\n\nconst { lGrey1, mint } = colors;\nconst moduleImagesPreloaderDomContainerId = 'module-images-preloader';\n\n// Image loading creates a new promise and wraps the DOM based\n// image loading element. IF there is an error, we just mark it as resolved and\n// move on, however we probably want to adjust this in the future to report on\n// possible failures\nconst loadImage = (src, cb): Promise<any> => {\n  return new Promise(resolve => {\n    const img = new Image();\n    img.src = src;\n    img.crossOrigin = 'anonymous';\n\n    img.onload = () => {\n      cb(src);\n      resolve(src);\n    };\n\n    img.onerror = () => {\n      cb(src);\n      resolve(src);\n    };\n  });\n};\n\ninterface IModuleImagesPreloader {\n  images: any[];\n}\n\nconst ModuleImagesPreloader = ({ images }: IModuleImagesPreloader) => {\n  //\n  const [imgsLoaded, setImgsLoaded] = useState(false);\n  const [whichImagesLoaded, setImgAsLoaded] = useState<String[]>([]);\n  const [minDisplayTime, setMinDisplayTime] = useState(false);\n  const [boot, setBoot] = useState(false);\n\n  const [showEditPreloader, setShowEditPreloader] = useState<boolean>(false);\n\n  let giveFocusToFirstSectionOnLoad = useSelector((state: State) => {\n    return state?.theme?.giveFocusToFirstSectionOnLoad;\n  });\n\n  // if we're launching an older module that won't yet have the entry on theme\n  // undefined is a true\n  if (giveFocusToFirstSectionOnLoad === undefined) {\n    giveFocusToFirstSectionOnLoad = true;\n  }\n\n  // giveFocusToFirstSectionOnLoad = false; // for patching\n\n  const modulePreloaderSettings = useSelector((state: State) => {\n    const AdvancedEditing = Object.values(state.blocks).find(b => {\n      return b.type === 'AdvancedEditing';\n    });\n\n    if (AdvancedEditing) {\n      return AdvancedEditing.props?.modulePreloaderSettings || {};\n    }\n\n    return {};\n  });\n\n  const {\n    modulePreloaderbackgroundColor = '#fff',\n    moduleLoadingMessage = 'Module loading',\n  } = modulePreloaderSettings;\n\n  let progressBarColor = modulePreloaderSettings.progressBarColor || mint;\n  const { r, g, b } = hexToRGB(progressBarColor);\n\n  let src = lizard;\n\n  if (modulePreloaderSettings.src) {\n    src = modulePreloaderSettings.src;\n  }\n\n  const preLoader = useRef<any>(null);\n  const documentTitle = useRef<string>(document.title);\n\n  const moduleImagesPreloaderDomContainer = useRef(\n    document.querySelector<HTMLDivElement>(\n      `#${moduleImagesPreloaderDomContainerId}`\n    )\n  );\n\n  if (!boot && !moduleImagesPreloaderDomContainer.current) {\n    moduleImagesPreloaderDomContainer.current = document.createElement(\n      'div'\n    ) as HTMLDivElement;\n\n    moduleImagesPreloaderDomContainer.current.id = moduleImagesPreloaderDomContainerId;\n\n    moduleImagesPreloaderDomContainer.current.style.position = 'fixed';\n    moduleImagesPreloaderDomContainer.current.style.left = '0px';\n    moduleImagesPreloaderDomContainer.current.style.top = '0px';\n    moduleImagesPreloaderDomContainer.current.style.width = '100vw';\n    moduleImagesPreloaderDomContainer.current.style.height = '100vh';\n    moduleImagesPreloaderDomContainer.current.style.zIndex = '2147483647';\n    //\n    document.body.appendChild(moduleImagesPreloaderDomContainer.current);\n  }\n\n  useEffect(() => {\n    const root = document.querySelector<HTMLDivElement>('#root');\n\n    if (!boot && root) {\n      document.title = 'Module loading';\n      root.setAttribute('aria-hidden', 'true');\n      root.setAttribute('tabindex', '-1');\n\n      return;\n    }\n\n    document.title = documentTitle.current;\n    root?.setAttribute('aria-hidden', 'false');\n    root?.setAttribute('tabindex', '0');\n\n    if (giveFocusToFirstSectionOnLoad === false) {\n      if (document.activeElement) {\n        (document.activeElement as HTMLElement)?.blur();\n      }\n\n      console.log('DO NOT GIVE CONTENT FOCUS', document.activeElement);\n\n      return;\n    }\n\n    const sections = Array.from(\n      document.querySelectorAll('section')\n    ) as HTMLElement[];\n\n    if (sections && sections[0]) {\n      // might need to do something here if the page jumps to top\n      // from giving first interaction focus\n      //\n\n      if (!window.location.hash) {\n        const modalContainer = document.querySelector(\n          '#modal-container'\n        ) as HTMLElement;\n\n        if (modalContainer?.hasChildNodes()) {\n          // console.log('modal is active. do not take focus away from modal');\n          return;\n        }\n\n        //\n        sections[0].focus();\n      }\n\n      // if we have a hash and have navigated to it\n      // we should give IT focus\n      if (window.location.hash) {\n        const section = sections.find(section => {\n          return section.id === window.location.hash.replace('#', '');\n        });\n\n        if (section) {\n          section.focus();\n          return;\n        }\n      }\n\n      //\n      sections[0].focus();\n    }\n\n    return () => {\n      // set the focus back to root ?\n      // is doing it above. double tap it maybe ?\n    };\n  }, [boot]);\n\n  // Show the loader for at least 1000 ms\n  useEffect(() => {\n    setTimeout(() => {\n      !minDisplayTime && setMinDisplayTime(true);\n    }, 1000);\n  }, []);\n\n  useEffect(() => {\n    if (!imgsLoaded) {\n      console.time('TIME TO IMAGES LOADED');\n    } else {\n      console.timeEnd('TIME TO IMAGES LOADED');\n    }\n  }, [imgsLoaded]);\n\n  useEffect(() => {\n    whichImagesLoaded.length === images.length && setImgsLoaded(true);\n  }, [whichImagesLoaded]);\n\n  // Preload Images on load\n  useEffect(() => {\n    const fun = async () => {\n      const cacheAvailable = 'caches' in self;\n\n      if (!cacheAvailable) {\n        images.map((imgSrc: string) => {\n          return loadImage(imgSrc, () => {\n            setImgAsLoaded(whichImagesLoaded => [...whichImagesLoaded, imgSrc]);\n          });\n        });\n\n        return;\n      }\n\n      const cache = await getCache();\n\n      images.map(async (imgSrc: string) => {\n        const resp = await cache.match(imgSrc);\n\n        if (!resp) {\n          try {\n            await cache.add(imgSrc);\n          } catch (err) {\n            console.log(err);\n          }\n        }\n\n        setImgAsLoaded(whichImagesLoaded => [...whichImagesLoaded, imgSrc]);\n      });\n\n      return;\n    };\n\n    fun();\n  }, []);\n\n  // Fade out the loading screen after the fade out is completed,\n  // remove the loading screen from the DOM\n  useEffect(() => {\n    if (!preLoader.current) {\n      return;\n    }\n\n    const fader = () => {\n      setBoot(true);\n    };\n\n    preLoader.current?.addEventListener('transitionend', fader);\n\n    return () => {\n      preLoader.current?.removeEventListener('transitionend', fader);\n    };\n  }, []);\n\n  useEffect(() => {\n    // do the polyfill for ie ?\n\n    if (boot) {\n      moduleImagesPreloaderDomContainer.current?.remove();\n    }\n  }, [boot]);\n\n  useEffect(() => {\n    const pS = pubSub.subscribe(\n      'SHOW_EDIT_PRELOADER',\n      ({ showEditPreloader }) => {\n        setShowEditPreloader(showEditPreloader);\n      }\n    );\n\n    return () => {\n      setShowEditPreloader(false);\n      pS();\n    };\n  }, []);\n\n  const [mockPercentLoaded, setMockPercentLoaded] = useState<number>(0);\n\n  useEffect(() => {\n    if (!window.dev() || !showEditPreloader) {\n      return;\n    }\n\n    let tick = setInterval(() => {\n      setMockPercentLoaded(Math.round(Math.random() * 100));\n    }, 1000);\n\n    return () => {\n      clearInterval(tick);\n    };\n  }, [showEditPreloader]);\n\n  const percentLoaded = window.dev()\n    ? mockPercentLoaded\n    : (whichImagesLoaded.length / images.length) * 100;\n\n  if (boot || !moduleImagesPreloaderDomContainer.current) {\n    return null;\n  }\n\n  let opacity = `opacity: ${imgsLoaded ? 0 : 1};`;\n\n  if (window.dev()) {\n    if (!showEditPreloader) {\n      // console.log('hide preloader. return null');\n\n      if (moduleImagesPreloaderDomContainer.current) {\n        moduleImagesPreloaderDomContainer.current.style.display = 'none';\n      }\n      return null;\n    } else {\n      // console.log('show preloader');\n\n      if (moduleImagesPreloaderDomContainer.current) {\n        moduleImagesPreloaderDomContainer.current.style.display = '';\n      }\n      opacity = '';\n    }\n  }\n\n  return createPortal(\n    <div\n      ref={preLoader}\n      css={css`\n        position: fixed;\n        display: flex;\n        flex-direction: column;\n        justify-content: center;\n        align-items: center;\n        left: 0;\n        top: 0;\n        width: 100vw;\n        height: 100vh;\n        background: ${modulePreloaderbackgroundColor};\n\n        ${opacity}\n\n        transition: opacity 0.35s;\n        z-index: 2147483638;\n      `}\n    >\n      <img\n        src={src}\n        alt=\"\"\n        css={css`\n          max-width: 265px;\n        `}\n      />\n\n      <div\n        css={css({\n          width: 250,\n          fontFamily: 'Poppins, Sans serif',\n          fontWeight: 200,\n          fontSize: 22,\n        })}\n      >\n        <div\n          css={css({\n            textAlign: 'center',\n            color: progressBarColor,\n          })}\n          tabIndex={0}\n          aria-label={moduleLoadingMessage}\n          aria-valuemin={0}\n          aria-valuemax={100}\n          aria-valuenow={Math.round(percentLoaded)}\n          role=\"progressbar\"\n        >\n          {moduleLoadingMessage}\n        </div>\n\n        <div\n          css={css({\n            width: '100%',\n            height: 15,\n            margin: '30px 0 0 0',\n            borderRadius: 9999,\n            overflow: 'hidden',\n            background: `rgba(${r}, ${g}, ${b}, 0.2)`,\n          })}\n        >\n          <div\n            style={{\n              width: `${percentLoaded}%`,\n              height: 'inherit',\n              borderRadius: 9999,\n              background: progressBarColor,\n              transition: 'width 0.5s',\n            }}\n          />\n        </div>\n      </div>\n    </div>,\n    moduleImagesPreloaderDomContainer.current\n  );\n};\n\nexport default ModuleImagesPreloader;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { State } from 'store/store';\nimport styled from '@emotion/styled';\nimport EditorBtn from './UI/EditorBtn';\n\nconst Cont = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100vw;\n  height: 100vh;\n  justify-content: center;\n  align-items: center;\n  display: flex;\n`;\n\nconst Backdrop = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100vw;\n  height: 100vh;\n  background: rgba(0, 0, 0, 0.5);\n  z-index: 1000;\n`;\n\nconst Modal = styled.div`\n  background: rgb(255, 255, 255);\n  border-radius: 30px;\n  padding: 32px;\n  line-height: 1.6;\n  z-index: 1001;\n  max-width: 600px;\n  box-shadow: 0 0 0 12px rgba(0, 0, 0, 0.2);\n\n  & h1 {\n    line-height: 2;\n  }\n\n  & div {\n    line-height: 1.6;\n  }\n\n  & button {\n    margin: 16px 0;\n  }\n`;\n\nconst errorModal = ({ hasError, error, children }) => {\n  if (hasError) {\n    // You can render any custom fallback UI\n    return (\n      <Cont>\n        <Backdrop />\n        <Modal>\n          {children(error)}\n          <EditorBtn\n            label=\"Reload\"\n            onClick={() => {\n              window.location.reload();\n            }}\n          />\n        </Modal>\n      </Cont>\n    );\n  }\n\n  return null;\n};\n\nexport const ErrorModal = connect((state: State) => {\n  return {\n    hasError: state.hasError,\n    error: state.error,\n  };\n})(errorModal);\n","import getStore from 'services/getStore';\nimport { focusBlockAction } from 'actions/focusBlockAction';\n\nexport default block => {\n  getStore().dispatch(focusBlockAction(block));\n};\n","import { Block } from '@chameleoncreator/creator-app';\n\nexport const focusBlockAction = (block: Block) => ({\n  type: 'FOCUS_BLOCK',\n  data: block,\n});\n","/** @jsx jsx */\r\n\r\nimport { jsx } from '@emotion/core';\r\nimport Edit from 'assets/edit.svg';\r\n\r\nconst EditMarker = ({ style = {} }) => {\r\n  return (\r\n    <div\r\n      className=\"chameleon-edit-marker\"\r\n      style={{\r\n        position: 'absolute',\r\n        right: 0,\r\n        top: 0,\r\n        width: 16,\r\n        height: 16,\r\n        margin: 0,\r\n        padding: 0,\r\n        background: `url(${Edit}) no-repeat`,\r\n        ...style,\r\n      }}\r\n    />\r\n  );\r\n};\r\n\r\nexport default EditMarker;\r\n","import getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\n\nconst getTopicSId = topic => {\n  const topicId = topic.id;\n  let topicSId = topic.props?.sId;\n\n  topicSId = topicSId || topicId;\n\n  const interactions = getInteractionsInTopic(topic);\n\n  // only list topics that have interactions\n  if (!interactions.length) {\n    return undefined;\n  }\n\n  const interaction = interactions[0];\n  const interactionId = interaction.id;\n  let interactionSId = interaction.props?.sId;\n\n  interactionSId = interactionSId || interactionId;\n\n  const location = `${topicSId}/${interactionSId}`;\n  // console.log('LOCATION:', location);\n\n  return location;\n};\n\nexport default getTopicSId;\n","const getSectionInView = () => {\n  const sections = Array.from(document.querySelectorAll('section'));\n\n  // reverse the sections to find the section we want from ' bottom up '\n  const sectionsReversed = sections.slice().reverse();\n\n  //\n  const section: any = sectionsReversed.find((i: any) => {\n    const { height, top } = i.getBoundingClientRect();\n\n    // if height ( is not 0 ). to ignore sections not yet rendered into view\n    if (height && top < window.innerHeight / 2) {\n      return i;\n    }\n  });\n\n  return {\n    sections,\n    section,\n    index: sections.indexOf(section),\n  };\n};\n\nexport default getSectionInView;\n","import getCurrentTopic from 'services/apiHelpers/getCurrentTopic';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport getSectionInView from 'services/getSectionInView';\n\nconst getCurrentLocation = () => {\n  const currentTopic: any = getCurrentTopic();\n  const { sections, section, index } = getSectionInView();\n  const interactions = getInteractionsInTopic(currentTopic);\n\n  if (!interactions || interactions.length === 0) {\n    return;\n  }\n\n  const interaction = interactions[index];\n\n  return `${currentTopic.props.sId || currentTopic.id}/${interaction.props!.sId || interaction.id}`;\n};\n\nexport default getCurrentLocation;\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\n\nconst CloseBtn = ({\n  color,\n  style = {},\n  onClick,\n}: {\n  color: string;\n  style?: { [key: string]: any };\n  onClick?: () => void;\n}) => (\n  <div\n    // css={css({\n    //   ':focus': {\n    //     background: 'blue',\n    //   },\n    // })}\n    style={{\n      position: 'relative',\n      width: 20,\n      height: 20,\n      transform: 'rotate(45deg)',\n      cursor: 'pointer',\n      ...style,\n    }}\n    onClick={onClick}\n  >\n    <div\n      style={{\n        position: 'absolute',\n        left: 0,\n        top: '50%',\n        width: '100%',\n        height: 1,\n        background: color,\n      }}\n    />\n    <div\n      style={{\n        position: 'absolute',\n        left: '50%',\n        top: 0,\n        width: 1,\n        height: '100%',\n        background: color,\n      }}\n    />\n  </div>\n);\n\nexport default CloseBtn;\n","import {\n  graphicHeaderDefaults,\n  standardHeaderDefaults,\n} from 'factories/header';\nimport { useSelector } from 'react-redux';\nimport { State } from 'store/store';\n\nconst getHeaderElement = (blocks, element) => {\n  return element ? blocks[element.id] : {};\n};\n\nconst reRenderSelector = (prev, next) => {\n  if (window.dev()) {\n    return next !== prev;\n  }\n\n  return true;\n};\n\nexport const useHeader = () => {\n  const header = useSelector((state: State) => {\n    return getHeaderElement(state.blocks, state.header);\n  }, reRenderSelector);\n\n  const standardHeader = useSelector((state: State) => {\n    return getHeaderElement(state.blocks, state.standardHeader);\n  }, reRenderSelector);\n\n  const graphicHeader = useSelector((state: State) => {\n    return getHeaderElement(state.blocks, state.graphicHeader);\n  }, reRenderSelector);\n\n  const standardHeaderLogo = useSelector((state: State) => {\n    return getHeaderElement(state.blocks, state.standardHeaderLogo);\n  }, reRenderSelector);\n\n  const graphicHeaderBackground = useSelector((state: State) => {\n    return getHeaderElement(state.blocks, state.graphicHeaderBackground);\n  }, reRenderSelector);\n\n  const graphicHeaderLogo = useSelector((state: State) => {\n    return getHeaderElement(state.blocks, state.graphicHeaderLogo);\n  }, reRenderSelector);\n\n  return {\n    block: header,\n    props: {\n      headerStyle: 'standard',\n      ...header?.props,\n    },\n\n    standard: {\n      block: standardHeader,\n      props: {\n        ...standardHeaderDefaults,\n        ...standardHeader?.props,\n        headerLogo: standardHeaderLogo?.props?.src,\n      },\n      logoBlock: standardHeaderLogo,\n    },\n    graphic: {\n      block: graphicHeader,\n      props: {\n        ...graphicHeaderDefaults,\n        ...graphicHeader?.props,\n        headerBackgroundImage: graphicHeaderBackground?.props?.src,\n        headerLogo: graphicHeaderLogo?.props?.src,\n      },\n      backgroundBlock: graphicHeaderBackground,\n      logoBlock: graphicHeaderLogo,\n    },\n  } as any;\n};\n","/** @jsx jsx */\n\nimport { Fragment as _, useRef, useEffect, useMemo, useCallback } from 'react';\nimport { keyframes } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport { colors } from 'styles/variables';\nimport getTopics from 'services/apiHelpers/getTopics';\nimport getTopicSId from 'services/getTopicSId';\nimport getCurrentLocation from 'services/getCurrentLocation';\nimport getCurrentTopic from 'services/apiHelpers/getCurrentTopic';\nimport { getButtonFocus } from 'styles/variables';\nimport { useSelector } from 'react-redux';\nimport { State } from 'store/store';\nimport CloseBtn from 'components/UI/CloseBtn';\nimport { useHeader } from 'services/useHeader';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport {\n  Block,\n  Blocks,\n  BlockList,\n} from '@chameleoncreator/creator-app/build/utils/block';\n\nconst { lGrey0 } = colors;\n\nconst width = '24px';\n\nconst open_menu_kf = keyframes`\nfrom {\n\topacity: 0;\n\ttransform: translateX(100%);\n}\nto {\n\topacity: 1;\n\ttransform: translateX(-10px);\n}\n`;\n\nconst close_menu_kf = keyframes`\n0% {\n\topacity: 1;\n\ttransform: translateX(0%);\n}\n35% {\n\topacity: 1;\n\ttransform: translateX(-10%);\n}\n100% {\n\topacity: 0;\n\ttransform: translateX(100%);\n}\n`;\n\ninterface IMenuProps {\n  menu?: boolean;\n  color?: string;\n  close?: () => void;\n}\n\nlet topics: BlockList;\nlet interactionsInTopics;\n\nconst getTopicsComplete = (interactionsInTopics, interactionsSeen) => {\n  const temp = {};\n  Object.keys(interactionsInTopics).forEach(key => {\n    const interactions = interactionsInTopics[key];\n    temp[key] = interactions.every(i => {\n      return interactionsSeen.includes(i.id);\n    });\n  });\n\n  return temp;\n};\n\n// const cleanName = name => {\n//   return name?.toLowerCase()?.replace(/ /g, '');\n// };\n\nconst getAnchorId = (a, prefix = 'topic-id-') => {\n  if (!a) {\n    return '';\n  }\n\n  return a?.id?.replace(prefix, '');\n};\n\nconst Menu = ({ menu, color = lGrey0, close }) => {\n  const init = useRef<boolean>(false);\n  const nav = useRef<HTMLDivElement | null>(null);\n  const tabIndex = useRef<number>(-1);\n  const scrollableContainer = useRef<HTMLDivElement>(null);\n  const menuItemsContainer = useRef<HTMLUListElement>(null);\n  const anchors = useRef<HTMLElement[]>([]);\n  const closeButton = useRef<HTMLButtonElement | null>(null);\n\n  const currentTopicId = useSelector((state: State) => {\n    return state.currentTopic;\n  });\n\n  if (window.dev() || !topics) {\n    // console.log('get topics only once in output');\n    topics = getTopics();\n  }\n\n  if (window.dev() || !interactionsInTopics) {\n    // console.log('get interactionsInTopics only once in output');\n    //\n    interactionsInTopics = topics.reduce((acc, curr, index) => {\n      let topicName = curr?.props?.name;\n      //\n      return {\n        ...acc,\n        [curr.id]: getInteractionsInTopic(curr),\n      };\n    }, {});\n  }\n\n  const {\n    menuBackgroundColor,\n    menuTextAndCloseColor,\n    menuTextHoverColor,\n    menuTextActiveColor,\n  } = useSelector((state: State) => {\n    const menuColors = ((state.theme.menu as unknown) as any) || {};\n\n    return {\n      menuBackgroundColor: menuColors['Menu background colour'] || '#fff',\n      menuTextAndCloseColor: menuColors['Menu text and close colour'] || '#000',\n      menuTextHoverColor: menuColors['Menu text hover colour'] || '#0000ff',\n      menuTextActiveColor: menuColors['Menu text active colour'] || '#ff0000',\n    };\n  });\n\n  const header = useHeader();\n  //\n\n  const { disableNavigationToIncompleteTopics } = header[\n    header.props.headerStyle\n  ].props;\n\n  const interactionsSeen = useSelector((state: State) => {\n    return state.interactionsSeen;\n  });\n\n  const topicsComplete = getTopicsComplete(\n    interactionsInTopics,\n    interactionsSeen\n  );\n\n  useEffect(() => {\n    if (closeButton.current && menu) {\n      closeButton.current.focus();\n    }\n  }, [menu]);\n\n  useEffect(() => {\n    if (menu) {\n      // we set the tabIndex at -1 so the first tab action enters the menu at index 0\n      tabIndex.current = -1;\n      window.addEventListener('keydown', keyOverrides);\n    }\n\n    function keyOverrides(e) {\n      switch (e.key) {\n        case 'Escape': {\n          return close();\n        }\n\n        case 'Tab': {\n          e.preventDefault();\n\n          if (nav.current && !anchors.current.length) {\n            //\n            //\n            anchors.current = [\n              ...Array.from(nav.current.querySelectorAll('a'))\n                .filter((a, index) => {\n                  //\n                  if (!disableNavigationToIncompleteTopics) {\n                    return true;\n                  }\n\n                  return topicsComplete[getAnchorId(a)];\n                })\n                .filter((a, index) => {\n                  return getAnchorId(a) !== currentTopicId;\n                }),\n            ];\n          }\n\n          if (e.shiftKey) {\n            if (tabIndex.current > 0) {\n              tabIndex.current = tabIndex.current - 1;\n            }\n          } else {\n            //\n            if (tabIndex.current < anchors.current.length - 1) {\n              tabIndex.current = tabIndex.current + 1;\n            } else {\n              // loop back around to the close btn\n\n              tabIndex.current = 0;\n            }\n          }\n\n          if (\n            closeButton.current &&\n            !anchors.current.includes(closeButton.current)\n          ) {\n            // once we tab into the actual anchors / menu items list\n            // we add the close btn to that list\n            // then we can nav to it with the usual tab flow\n            //\n\n            anchors.current = [closeButton.current, ...anchors.current];\n            tabIndex.current = 1;\n            //\n          }\n\n          anchors.current[tabIndex.current]?.focus();\n        }\n      }\n    }\n\n    return () => {\n      // clear the anchors out so we can start fresh on next menu open\n      anchors.current = [];\n      window.removeEventListener('keydown', keyOverrides);\n    };\n  }, [menu]);\n\n  useEffect(() => {\n    if (!nav.current) {\n      return;\n    }\n\n    const onAnimationEnd = (e: any) => {\n      const { target } = e;\n      if (target == nav.current) {\n        // why wouldn't it be ???\n        if (!menu && init.current) {\n          requestAnimationFrame(() => {\n            if (nav.current) {\n              nav.current.style.visibility = 'hidden';\n            }\n          });\n        }\n      }\n    };\n\n    nav.current.addEventListener('animationend', onAnimationEnd);\n\n    return () => {\n      nav.current &&\n        nav.current.removeEventListener('animationend', onAnimationEnd);\n    };\n  }, [menu]);\n\n  useEffect(() => {\n    if (menu && !init.current) {\n      init.current = true;\n    }\n  }, [menu]);\n\n  useEffect(() => {\n    //\n    // this is so we can that nicer bit of padding around the content\n    // when scrolling kicks in\n    // otherwise it butts right up against the scrollBar\n    if (scrollableContainer.current && menuItemsContainer.current) {\n      const { height } = menuItemsContainer.current.getBoundingClientRect();\n      const maxHeight: number = window.innerHeight - 175;\n\n      scrollableContainer.current.style.padding = `0 ${\n        height > maxHeight ? 10 : 0\n      }px 0 0`;\n    }\n  }, [menu]);\n\n  let closeBtnFocus: any = getButtonFocus(menuTextAndCloseColor);\n\n  closeBtnFocus = closeBtnFocus?.split(',')[1]?.trim();\n\n  return (\n    <nav\n      ref={nav}\n      aria-hidden={!menu}\n      aria-label=\"navigation\"\n      css={css`\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\tright: 30px;\n\t\t\t\t\ttop: 10px;\n\t\t\t\t\tmin-width: 300px;\n\t\t\t\t\tpadding: 65px 20px 20px 20px;\n\t\t\t\t\tbackground: ${menuBackgroundColor};\n\t\t\t\t\t${!menu &&\n            !init.current &&\n            `\n          visibility: hidden;`}\n\n\t\t\t\t\tanimation: ${menu ? open_menu_kf : close_menu_kf} 0.3s forwards;\n          box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n\n          @media (max-width: 480px) {\n            right: 25px;\n            top: 5px;\n            width: calc(100vw - 10px);\n            padding: 45px 10px 20px 15px;\n          }\n        `}\n      style={{\n        ...(menu &&\n          init.current && {\n            visibility: 'visible',\n          }),\n      }}\n      tabIndex={-1}\n    >\n      <button\n        ref={closeButton}\n        className=\"fader_1s\"\n        css={css({\n          outline: 'none',\n          border: 'none',\n          position: 'absolute',\n          display: 'flex',\n          justifyContent: 'center',\n          alignItems: 'center',\n          right: 20,\n          top: 13,\n          width,\n          height: width,\n          background: 'transparent',\n          ':focus': {\n            boxShadow: `0 0 0 2px ${menuBackgroundColor}, ${closeBtnFocus}`,\n          },\n\n          '@media (max-width: 480px)': {\n            right: 10,\n            top: 8,\n          },\n        })}\n        onClick={() => {\n          close();\n        }}\n        aria-label=\"close menu\"\n      >\n        <CloseBtn\n          color={menuTextAndCloseColor}\n          style={{ width, height: width }}\n        />\n      </button>\n\n      <div\n        ref={scrollableContainer}\n        css={css({\n          maxHeight: 'calc(100vh - 175px)',\n          overflowY: 'auto',\n        })}\n      >\n        <ul ref={menuItemsContainer}>\n          {topics\n            .filter((t: any) => {\n              return !t.props.hiddenFromMenu;\n            })\n            .map((t: any, index: number, arr: any) => {\n              const { id } = t;\n              const { name } = t.props;\n              const isCurrentTopic = id === currentTopicId;\n\n              let disableNav = '';\n              if (disableNavigationToIncompleteTopics) {\n                if (!topicsComplete[id]) {\n                  disableNav = `\n                  color: ${menuTextAndCloseColor};\n                  opacity: 0.5;\n                  pointer-events: none;\n                  `;\n                }\n              }\n\n              return (\n                <li\n                  key={id}\n                  css={css`\n                    margin: 5px 0;\n                    text-align: right;\n                    cursor: pointer;\n                    list-style: none;\n                    // font-weight: ${isCurrentTopic ? 700 : 'normal'};\n                   \n                    line-height: ${1.2 * 1.5}em;\n                    pointer-events: ${isCurrentTopic ? 'none' : 'auto'};\n\n                    a:link {\n                      color: ${\n                        isCurrentTopic\n                          ? menuTextActiveColor\n                          : menuTextAndCloseColor\n                      };\n                    }\n                \n                    a:hover {\n                      color: ${menuTextHoverColor};\n                    }\n\n                    a:focus {\n                      opacity: 1 !important;\n                      color: ${menuTextHoverColor};\n                    }\n\n                  ${disableNav}\n                  \n                  `}\n                >\n                  <a\n                    id={`topic-id-${id}`}\n                    href={!disableNav ? `#${id}` : undefined}\n                    onClick={e => {\n                      e.preventDefault();\n\n                      const topic = topics.find((t: any) => {\n                        return t.id === id;\n                      });\n\n                      const targetLocation = getTopicSId(topic);\n\n                      if (!targetLocation) {\n                        return;\n                      }\n\n                      (window as any).locationHistory = getCurrentLocation();\n                      //\n\n                      window.location.hash = targetLocation;\n                    }}\n                    onKeyUp={e => {\n                      if (e.key === ' ') {\n                        e.currentTarget.click();\n                      }\n                    }}\n                    {...(id === getCurrentTopic()?.id\n                      ? { 'aria-current': 'page' }\n                      : {})}\n                    role={disableNav ? 'link' : undefined}\n                    aria-disabled={disableNav ? true : undefined}\n                  >\n                    {name || id}\n                  </a>\n                </li>\n              );\n            })}\n        </ul>\n      </div>\n    </nav>\n  );\n};\n\nexport { Menu };\n","import styled from '@emotion/styled';\n\nexport const VisuallyHidden = styled.span`\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  white-space: nowrap;\n  width: 1px;\n`;\n\nexport const VisuallyHiddenLink = styled.a`\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  white-space: nowrap;\n  width: 1px;\n`;\n","/** @jsx jsx */\n\nimport { useRef, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { colors, getButtonFocus } from 'styles/variables';\nimport getStore from 'services/getStore';\nimport getTopics from 'services/apiHelpers/getTopics';\nimport setCurrentTopic from 'services/apiHelpers/setCurrentTopic';\nimport isIE from 'services/isIE';\nimport { VisuallyHidden } from 'components/UI/VisuallyHidden';\nimport pubSub from 'services/pubSub';\nimport onScrollEnds from 'services/onScrollEnds';\nimport getSectionInView from 'services/getSectionInView';\nimport { getTopicsNotHiddenFromNextAndBackNavigation } from 'services/getTopicsNotHiddenFromNextAndBackNavigation';\n\nconst store = getStore();\nconst { lGrey2 } = colors;\n\nlet firstSection;\nlet scrolling;\n\nexport const backBtnOnClick = () => {\n  // are we in an assessment ?\n  const { blocks } = store.getState();\n\n  const interaction = blocks[window['sectionInView'].id];\n  const interactionIsAnAssessmentQuestion =\n    interaction?.meta?.subType === 'AssessmentQuestion';\n\n  if (window.locationHistory && !interactionIsAnAssessmentQuestion) {\n    const locationHistory = window.locationHistory;\n\n    window.location.hash = locationHistory;\n\n    const checkHistory = setInterval(() => {\n      if (locationHistory !== window.locationHistory) {\n        clearInterval(checkHistory);\n\n        requestAnimationFrame(\n          () =>\n            (window.location.hash = Math.random()\n              .toString(16)\n              .substr(2, 8))\n        );\n\n        (window as any).locationHistory = null;\n      }\n    }, 1000 / 60);\n\n    return;\n  }\n  //\n\n  const { sections, index } = getSectionInView();\n\n  const prevSection = sections[index - 1];\n\n  if (prevSection) {\n    prevSection.scrollIntoView({\n      behavior: 'smooth',\n    });\n\n    onScrollEnds(() => {\n      prevSection.focus();\n    });\n  } else {\n    navToPrevTopic();\n  }\n};\n\nconst Arrow = ({ color }) => {\n  return (\n    <svg width=\"9px\" height=\"15px\" viewBox=\"0 0 9 15\">\n      <g stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n        <g\n          transform=\"translate(-1206.000000, -566.000000)\"\n          stroke={color}\n          strokeWidth=\"2\"\n        >\n          <polyline\n            transform=\"translate(1210.000000, 573.500000) rotate(-90.000000) translate(-1210.000000, -573.500000)\"\n            points=\"1216.5 570.5 1210 576.5 1203.5 570.5\"\n          />\n        </g>\n      </g>\n    </svg>\n  );\n};\n\nconst navToPrevTopic = () => {\n  let { currentTopic } = store.getState();\n  const topics = getTopics();\n\n  const topicsNotHiddenFromNextAndBackNavigation = getTopicsNotHiddenFromNextAndBackNavigation(\n    topics\n  );\n\n  const prevTopic =\n    topicsNotHiddenFromNextAndBackNavigation[\n      topicsNotHiddenFromNextAndBackNavigation.findIndex(\n        t => t.id === currentTopic\n      ) - 1\n    ];\n\n  if (!prevTopic) return;\n\n  setCurrentTopic(prevTopic.id);\n\n  requestAnimationFrame(() => {\n    window.scrollTo(0, document.body.scrollHeight);\n\n    const sections = Array.from(document.querySelectorAll('section'));\n\n    const lastSection = sections[sections.length - 1];\n    // console.log(lastSection);\n\n    if (lastSection) {\n      // const hBB = lastSection.querySelector(\n      //   `#hidden-back-button-${lastSection.id}`\n      // ) as HTMLButtonElement;\n      // console.log({ hBB });\n\n      lastSection.scrollIntoView({\n        behavior: 'instant',\n      });\n\n      // hBB?.focus();\n    }\n  });\n};\n\nconst BackBtn = ({ currentTopic, topics, color, outline = false }) => {\n  if (!currentTopic) {\n    currentTopic = topics[0]?.id;\n  }\n\n  const backBtn = useRef<HTMLAnchorElement | null>(null);\n\n  useEffect(() => {\n    if (window.dev()) {\n      return;\n    }\n\n    // if we're not in the first topic. return;\n    if (topics.findIndex(t => t.id === currentTopic.id) !== 0) {\n      return;\n    }\n\n    if (!firstSection) {\n      firstSection = document.querySelector('section');\n      if (!firstSection) {\n        return;\n      }\n    }\n\n    const onScroll = () => {\n      clearTimeout(scrolling);\n\n      scrolling = setTimeout(() => {\n        const { top } = firstSection.getBoundingClientRect();\n\n        if (top < 0) {\n          backBtn.current!.style.opacity = '1';\n          backBtn.current!.style.pointerEvents = 'auto';\n          backBtn.current!.setAttribute('aria-hidden', 'false');\n        } else {\n          backBtn.current!.style.opacity = '0.1';\n          backBtn.current!.style.pointerEvents = 'none';\n          backBtn.current!.setAttribute('aria-hidden', 'true');\n        }\n\n        // console.log(backBtn.current!.getAttribute('aria-hidden'));\n      }, 100);\n    };\n\n    onScroll();\n    window.addEventListener('scroll', onScroll);\n\n    return () => {\n      firstSection = null;\n      window.removeEventListener('scroll', onScroll);\n    };\n  }, [currentTopic]);\n\n  useEffect(() => {\n    pubSub.subscribe('HILITE_CHAMELEON_BACK_BUTTON', ({ toggle }) => {\n      backBtn.current!.style.boxShadow = toggle\n        ? `0 0 0 2px #fff, 0 0 0 3px ${color}`\n        : '';\n    });\n  }, []);\n\n  // const onClick = () => {\n  //   // are we in an assessment ?\n  //   const { blocks } = store.getState();\n\n  //   const interaction = blocks[window['sectionInView'].id];\n  //   const interactionIsAnAssessmentQuestion =\n  //     interaction?.meta?.subType === 'AssessmentQuestion';\n\n  //   if (window.locationHistory && !interactionIsAnAssessmentQuestion) {\n  //     const locationHistory = window.locationHistory;\n\n  //     window.location.hash = locationHistory;\n\n  //     const checkHistory = setInterval(() => {\n  //       if (locationHistory !== window.locationHistory) {\n  //         clearInterval(checkHistory);\n\n  //         requestAnimationFrame(\n  //           () =>\n  //             (window.location.hash = Math.random()\n  //               .toString(16)\n  //               .substr(2, 8))\n  //         );\n\n  //         (window as any).locationHistory = null;\n  //       }\n  //     }, 1000 / 60);\n\n  //     return;\n  //   }\n  //   //\n\n  //   const { sections, index } = getSectionInView();\n\n  //   const prevSection = sections[index - 1];\n\n  //   if (prevSection) {\n  //     prevSection.scrollIntoView({\n  //       behavior: 'smooth',\n  //     });\n\n  //     onScrollEnds(() => {\n  //       prevSection.focus();\n  //     });\n  //   } else {\n  //     navToPrevTopic();\n  //   }\n  // };\n\n  return (\n    <a\n      ref={node => {\n        if (!backBtn.current) backBtn.current = node;\n      }}\n      id=\"chameleon-back-button\"\n      // href=\"#go-back\"\n      title=\"Return to previous interaction\"\n      css={css`\n        position: relative;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        flex-shrink: 0;\n        width: 30px;\n        height: 30px;\n        border-radius: 50%;\n        transform: scaleX(-1);\n        transition: opacity 0.2s;\n        cursor: pointer;\n        -webkit-backface-visibility: hidden;\n        transition: all 0.2s;\n\n        &:hover {\n          background-color: ${lGrey2};\n        }\n\n        &:focus {\n          ${getButtonFocus(color)}\n        }\n\n        ${outline &&\n          `\n        border: 1px solid ${color};\n\n        &:hover {\n          background-color: rgba(255, 255, 255, 0.1);\n        }\n\n        `}\n      `}\n      onClick={backBtnOnClick}\n    >\n      <VisuallyHidden>Go Back</VisuallyHidden>\n      <Arrow color={color} />\n    </a>\n  );\n};\n\nexport default BackBtn;\n","import getStore from 'services/getStore';\nimport { setActiveTopicAction } from \"actions/setActiveTopicAction\";\n\nexport default id => {\n  getStore().dispatch(setActiveTopicAction(id));\n};\n","\nexport const setActiveTopicAction = (id: string) => {\n  return {\n    type: 'SET_ACTIVE_TOPIC',\n    data: { id: id },\n  };\n};\n","const onScrollEnds = (callback, t = 250) => {\n  window.removeEventListener('scroll', checkScrolling);\n  //\n  let scrolling;\n\n  window.addEventListener('scroll', checkScrolling);\n\n  function checkScrolling() {\n    clearTimeout(scrolling);\n\n    scrolling = setTimeout(() => {\n      callback();\n      window.removeEventListener('scroll', checkScrolling);\n    }, t);\n  }\n};\n\nexport default onScrollEnds;\n","/** @jsx jsx */\n\nimport { useMemo } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { colors } from 'styles/variables';\nimport getAllInteractions, {\n  ONLY_TOPICS_NOT_HIDDEN_FROM_NEXT_AND_BACK_NAVIGATION,\n} from 'services/apiHelpers/getAllInteractions';\nimport { useSelector } from 'react-redux';\n\nconst { lGrey0 } = colors;\n\nconst ProgressBar = ({ color = lGrey0 }) => {\n  const interactionsSeen = useSelector((state: any) => {\n    return state.interactionsSeen;\n  });\n  const allInteractions = useMemo(() => {\n    return getAllInteractions(\n      ONLY_TOPICS_NOT_HIDDEN_FROM_NEXT_AND_BACK_NAVIGATION\n    );\n  }, []);\n\n  const percent = (\n    (interactionsSeen.length / allInteractions.length) *\n    100\n  ).toFixed();\n\n  return (\n    <div\n      role=\"progressbar\"\n      aria-valuenow={Number(percent)}\n      aria-valuemin={0}\n      aria-valuemax={100}\n      aria-label=\"Module progress (%)\"\n      css={css`\n        position: relative;\n        width: 100%;\n        height: 10px;\n        border: 1px solid ${color};\n        border-radius: 5px;\n        overflow: hidden;\n      `}\n    >\n      <div\n        css={css`\n          position: absolute;\n          left: 0px;\n          top: 0px;\n          width: ${percent}%;\n          height: 10px;\n          background: ${color};\n          transition: width 0.2s;\n        `}\n      />\n\n      <span className=\"sr-only\">Progress: {percent}%</span>\n    </div>\n  );\n};\n\nexport default ProgressBar;\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport logo from 'assets/Logo_updated.svg';\nimport { Menu } from 'components/TopicMenu/Menu';\nimport { VisuallyHidden } from 'components/UI/VisuallyHidden';\nimport { Fragment as _, useCallback, useEffect, useRef, useState } from 'react';\nimport { connect, useSelector } from 'react-redux';\nimport isIE from 'services/isIE';\nimport { colors, getButtonFocus, values } from 'styles/variables';\nimport BackBtn from 'components/Header/BackBtn';\nimport ProgressBar from 'components/Header/ProgressBar';\nconst { lPink, lGrey0 } = colors;\nconst { headerHeight } = values;\n\ninterface IColumn {\n  justifyContent?: 'flex-start' | 'center' | 'flex-end' | undefined;\n  children: any;\n}\n\nconst Column = ({ children, justifyContent = undefined }: IColumn) => {\n  return (\n    <div\n      css={css({\n        display: 'flex',\n        flex: 1,\n        alignItems: 'center',\n        ...(justifyContent && {\n          justifyContent,\n        }),\n        height: '100%',\n      })}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport const HeaderLayout = props => {\n  const {\n    headerRef,\n    height,\n    responsiveHeight,\n    backButton,\n    currentTopicIndex,\n    topics,\n    headerTextColor,\n    topicName,\n    currentTopicName,\n    includeLogo = true,\n    headerLogo,\n    progressBar,\n    topicMenu,\n    menu,\n    setMenuState,\n    background,\n    Burger,\n  } = props;\n\n  return (\n    <header\n      ref={node => {\n        if (headerRef) {\n          headerRef(node);\n        }\n      }}\n      aria-label=\"Module header\"\n      css={css({\n        position: 'fixed',\n        left: 0,\n        top: 0,\n        width: '100vw',\n        height,\n        zIndex: 1,\n\n        '@media (max-width: 480px)': {\n          height: responsiveHeight,\n        },\n      })}\n    >\n      {background}\n      <div\n        css={css({\n          position: 'relative',\n          display: 'flex',\n          width: '100%',\n          height: 70,\n          padding: '10px 30px',\n          zIndex: 2,\n\n          '@media (max-width: 480px)': {\n            height: 50,\n            padding: '5px 15px',\n          },\n        })}\n      >\n        <Column>\n          {backButton && (\n            <BackBtn\n              key={currentTopicIndex}\n              currentTopic={topics[currentTopicIndex]}\n              topics={topics}\n              color={headerTextColor}\n              outline={true}\n            />\n          )}\n\n          {topicName && (\n            <div\n              css={css({\n                marginLeft: backButton ? 10 : 0,\n                color: headerTextColor,\n                '@media (max-width: 480px)': {\n                  display: 'none',\n                },\n              })}\n            >\n              <VisuallyHidden>Current Topic: </VisuallyHidden>\n              {currentTopicName}\n            </div>\n          )}\n        </Column>\n\n        {includeLogo && (\n          <Column>\n            <div\n              css={css({\n                display: 'flex',\n                justifyContent: 'center',\n                alignItems: 'center',\n                width: '100%',\n                height: '100%',\n\n                '@media (max-width: 480px)': {\n                  minWidth: 'calc(100vw - 100px)',\n                },\n              })}\n            >\n              <img\n                src={headerLogo || logo}\n                alt=\"\"\n                css={css({\n                  position: 'relative',\n                  maxHeight: '100%',\n                })}\n              />\n            </div>\n          </Column>\n        )}\n\n        <Column justifyContent=\"flex-end\">\n          <div\n            css={css({\n              display: 'flex',\n              flex: 1,\n              alignItems: 'center',\n              justifyContent: 'flex-end',\n            })}\n          >\n            {progressBar && (\n              <div\n                css={css`\n                  flex: 1;\n                  max-width: 250px;\n                  margin-right: ${topicMenu ? '30' : '0'}px;\n\n                  @media (max-width: 480px) {\n                    display: none;\n                  }\n                `}\n              >\n                <ProgressBar color={headerTextColor} />\n              </div>\n            )}\n\n            {topicMenu && (\n              <_>\n                <Burger\n                  color={headerTextColor}\n                  onClick={() => {\n                    setMenuState(true);\n                  }}\n                />\n\n                <div\n                  css={css({\n                    position: 'absolute',\n                    right: -30,\n                    top: 0,\n                  })}\n                >\n                  <Menu\n                    menu={menu}\n                    close={() => {\n                      // console.log('close');\n                      setMenuState(false);\n                    }}\n                  />\n                </div>\n              </_>\n            )}\n          </div>\n        </Column>\n      </div>\n    </header>\n  );\n};\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport { Fragment as _, useCallback, useEffect, useRef, useState } from 'react';\nimport { connect, useSelector } from 'react-redux';\nimport { colors, getButtonFocus, values } from 'styles/variables';\nimport { HeaderLayout } from 'components/Header_v2/HeaderLayout';\n\nconst { lPink, lGrey0 } = colors;\nconst { headerHeight } = values;\n\ninterface IHeader {\n  currentTopicIndex: number;\n  topics: any[];\n  theme: any;\n}\n\nconst SkipToContent = () => {\n  const [skipToContent, setSkipToContent] = useState(false);\n\n  const a = useRef<HTMLAnchorElement>(null);\n\n  return (\n    <a\n      ref={a}\n      css={css`\n        position: absolute;\n        left: 30px;\n        top: 80px;\n        padding: 5px 25px;\n        font-size: 12px;\n        color: ${lGrey0};\n\n        border-radius: 9999px;\n        background: #fff;\n\n        text-decoration: none;\n\n        ${!skipToContent &&\n          `border: 0;\n    clip: rect(0 0 0 0);\n    height: 1px;\n    margin: -1px;\n    overflow: hidden;\n    padding: 0;\n    position: absolute;\n    white-space: nowrap;\n    width: 1px;\n    `}\n      `}\n      href={`#main`}\n      onKeyUp={e => {\n        if (![' ', 'Enter'].includes(e.key)) {\n          return;\n        }\n\n        a.current!.click();\n      }}\n      onFocus={() => {\n        setSkipToContent(true);\n      }}\n      onBlur={() => {\n        setSkipToContent(false);\n      }}\n    >\n      Skip to content\n    </a>\n  );\n};\n\nconst Background = props => {\n  const {\n    headerHeight = 70,\n    background = '#fff',\n    opacity = 100,\n    headerDropShadow = true,\n  } = props;\n\n  return (\n    <div\n      css={css({\n        position: 'absolute',\n        left: 0,\n        top: 0,\n        width: '100%',\n        height: headerHeight,\n        background,\n        opacity: opacity * 0.01,\n\n        zIndex: 0,\n\n        '@media (max-width: 480px)': {\n          height: headerHeight - 20,\n        },\n\n        ...(headerDropShadow && {\n          ':after': {\n            content: `\"\"`,\n            display: 'block',\n            position: 'absolute',\n            left: 0,\n            top: headerHeight - 10,\n            width: '100%',\n            height: 10,\n            boxShadow: '0 2px 10px rgba(0, 0, 0, 0.1)',\n            clipPath: `polygon(0% 10px, 100% 10px, 100% 20px, 0% 20px)`,\n\n            '@media (max-width: 480px)': {\n              top: headerHeight - 30,\n            },\n          },\n        }),\n      })}\n    />\n  );\n};\n\nconst Burger = props => {\n  const width = 24;\n  const { color = '#2a2c2d', onClick } = props;\n\n  return (\n    <div\n      css={css({\n        outline: 'none',\n        border: 'none',\n        background: 'transparent',\n        ':focus': {\n          boxShadow: getButtonFocus(color).replace('box-shadow: ', ''),\n        },\n      })}\n      onClick={onClick}\n    >\n      <div\n        className=\"fader_-5s\"\n        css={css({\n          width: 24,\n          cursor: 'pointer',\n        })}\n      >\n        {[0, 1, 2].map(i => (\n          <div\n            key={i}\n            css={css`\n              width: ${width};\n              height: 4px;\n              background: ${color};\n              margin: 2px 0;\n            `}\n          />\n        ))}\n      </div>\n    </div>\n  );\n};\n\nconst Header = props => {\n  const { currentTopicIndex = 0, topics, headerProps } = props;\n\n  const [menu, setMenuState] = useState(false);\n  const currentTopicName = topics[currentTopicIndex]\n    ? topics[currentTopicIndex].props.name\n    : 'unknown';\n\n  let {\n    headerBackgroundColor = '#fff',\n    headerBackgroundOpacity = 100,\n    headerTextColor = lGrey0,\n    headerDropShadow = true,\n    backButton = true,\n    topicName = true,\n    progressBar = true,\n    topicMenu = true,\n    includeLogo = true,\n    headerLogo,\n  } = headerProps;\n\n  const hideHeader = useSelector((state: any) => {\n    return state.hideHeader;\n  });\n\n  const hideMenu = useCallback(() => {\n    setMenuState(false);\n    requestAnimationFrame(() =>\n      document.removeEventListener('click', hideMenu)\n    );\n  }, []);\n\n  useEffect(() => {\n    menu && document.addEventListener('click', hideMenu);\n  }, [menu]);\n\n  if (hideHeader) {\n    return null;\n  }\n\n  return (\n    <HeaderLayout\n      height={70}\n      responsiveHeight={50}\n      backButton={backButton}\n      currentTopicIndex={currentTopicIndex}\n      topics={topics}\n      headerTextColor={headerTextColor}\n      topicName={topicName}\n      currentTopicName={currentTopicName}\n      includeLogo={includeLogo}\n      headerLogo={headerLogo}\n      progressBar={progressBar}\n      topicMenu={topicMenu}\n      menu={menu}\n      setMenuState={setMenuState}\n      background={\n        <Background\n          headerHeight={headerHeight}\n          background={headerBackgroundColor}\n          opacity={headerBackgroundOpacity}\n          headerDropShadow={headerDropShadow}\n        />\n      }\n      Burger={Burger}\n    />\n  );\n};\n\nexport default connect(({ theme }: any) => ({ theme }))(Header);\n","import Header from './Header';\n\nexport default Header;\n","/** @jsx jsx */\n\nimport { Fragment as _ } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { useSelector } from 'react-redux';\nimport { State } from 'store/store';\nimport { useHeader } from 'services/useHeader';\n\nconst HeaderBackground = props => {\n  // const theme = useSelector((state: State) => {\n  //   return state.theme;\n  // });\n\n  // const {\n  //   headerStyle,\n  //   headerHeight,\n  //   headerBackgroundColor,\n  //   headerBackgroundImage,\n  //   headerBackgroundOpacity,\n  //   headerOverlayColor,\n  //   headerOverlayOpacity,\n  //   headerTextColor,\n  //   headerLogo,\n  // } = theme;\n\n  // const { headers } = useSelector((state: State) => {\n  //   return state.theme;\n  // });\n\n  const { graphic } = useHeader();\n\n  const {\n    headerBackgroundColor,\n    headerBackgroundImage,\n    headerBackgroundOpacity,\n    includeHeaderOverlay,\n    headerOverlayColor,\n    headerOverlayOpacity,\n  } = graphic.props;\n\n  return (\n    <div\n      style={{\n        position: 'absolute',\n        width: '100%',\n        height: '100%',\n      }}\n    >\n      <div\n        css={css({\n          position: 'absolute',\n          width: '100%',\n          height: '100%',\n          background: `url('${headerBackgroundImage}') no-repeat`,\n          backgroundPosition: 'center',\n          backgroundSize: 'cover',\n          opacity: headerBackgroundOpacity * 0.01,\n        })}\n      />\n      {includeHeaderOverlay && (\n        <div\n          style={{\n            position: 'absolute',\n            width: '100%',\n            height: '100%',\n            background: headerOverlayColor,\n            opacity: headerOverlayOpacity * 0.01,\n          }}\n        />\n      )}\n    </div>\n  );\n};\n\nexport { HeaderBackground };\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport { Fragment as _, useCallback, useEffect, useRef, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport getStore from 'services/getStore';\nimport { State } from 'store/store';\nimport { colors, getButtonFocus, values } from 'styles/variables';\nimport { HeaderBackground } from './HeaderBackground';\nimport { HeaderLayout } from 'components/Header_v2/HeaderLayout';\n\nconst store = getStore();\n\nconst { lPink, lGrey0 } = colors;\nconst { headerHeight } = values;\n\ninterface IHeader {\n  currentTopicIndex: number;\n  topics: any[];\n  theme: any;\n}\n\nconst Burger = props => {\n  const width = 24;\n\n  // need to get color from theme\n  const { color = '#2a2c2d', onClick } = props;\n\n  return (\n    <div\n      css={css({\n        outline: 'none',\n        border: 'none',\n        background: 'transparent',\n        ':focus': {\n          boxShadow: getButtonFocus(color).replace('box-shadow: ', ''),\n        },\n      })}\n      onClick={onClick}\n    >\n      <div\n        className=\"fader_-5s\"\n        css={css({\n          width: 24,\n          cursor: 'pointer',\n        })}\n      >\n        {[0, 1, 2].map(i => (\n          <div\n            key={i}\n            css={css`\n              width: ${width};\n              height: 4px;\n              background: ${color};\n              margin: 2px 0;\n            `}\n          />\n        ))}\n      </div>\n    </div>\n  );\n};\n\nconst HeaderGraphic = props => {\n  const {\n    currentTopicIndex = 0,\n    topics,\n    headerProps,\n    isFirstInteraction,\n  } = props;\n\n  const [menu, setMenuState] = useState(false);\n  const currentTopicName = topics[currentTopicIndex]\n    ? topics[currentTopicIndex].props.name\n    : 'unknown';\n\n  const { theme } = useSelector((state: State) => {\n    return state;\n  });\n\n  const {\n    headerHeight,\n    headerBackgroundColor,\n    headerBackgroundOpacity,\n    includeHeaderOverlay,\n    headerOverlayColor,\n    headerOverlayOpacity,\n    headerTextColor,\n    backButton,\n    topicName,\n    progressBar,\n    topicMenu,\n    headerDropShadow,\n    headerBackground,\n    includeLogo = true,\n    headerLogo,\n  } = headerProps;\n\n  const header = useRef<HTMLElement | null>(null);\n\n  const hideHeader = useSelector((state: any) => {\n    return state.hideHeader;\n  });\n\n  const hideMenu = useCallback(() => {\n    setMenuState(false);\n    requestAnimationFrame(() =>\n      document.removeEventListener('click', hideMenu)\n    );\n  }, []);\n\n  useEffect(() => {\n    menu && document.addEventListener('click', hideMenu);\n  }, [menu]);\n\n  useEffect(() => {\n    if (!header.current || window.dev()) {\n      return;\n    }\n\n    // working on a better solution to all this bouncing around headerHeight stuff\n    // feels like using the prop headerHeight for the graphic isn't the right thing\n    // might better be named expandedHeight or something that indicates it's temp nature\n    // since for the duration of module beyond first interaction the ACTUAL headerHeight becomes\n    // 70 > 50 px like the standard\n    // could remove headerHeight from both headers props since they're all defaulting to those values ( 70 > 50 )\n    // and only graphic header has that expandedHeight\n\n    if (screen.availWidth <= 480) {\n      header.current.style.height = '50px';\n      return;\n    }\n\n    if (currentTopicIndex > 0) {\n      header.current.style.height = '70px';\n      return;\n    }\n\n    // this'll come in a frame later. so the scroll listener below still kicks in\n    // needs to be that little bit later to account for the scrollY being 0 when entering the topic\n    // but then immediately scrolling to the bottom of the page to satisfy the navigation\n    // skinning cats one way\n    requestAnimationFrame(() => {\n      if (!header.current) {\n        return;\n      }\n      //\n      if (window.scrollY > headerHeight) {\n        // this check for screen 'should' not be needed since returning above. but...\n        header.current.style.height =\n          screen.availWidth <= 480 ? '50px' : '70px';\n        return;\n      }\n    });\n\n    //\n    //\n\n    const onScroll = () => {\n      if (!header.current) {\n        return;\n      }\n\n      const { scrollY } = window;\n\n      if (scrollY > window.innerHeight) {\n        return;\n      }\n\n      let invertedScrollY = headerHeight - scrollY;\n\n      if (scrollY > headerHeight - 70) {\n        invertedScrollY = 70;\n      }\n\n      header.current.style.height = `${invertedScrollY}px`;\n    };\n\n    window.addEventListener('scroll', onScroll);\n    onScroll();\n\n    return () => {\n      window.removeEventListener('scroll', onScroll);\n    };\n  }, [currentTopicIndex]);\n\n  if (hideHeader) {\n    return null;\n  }\n\n  return (\n    <HeaderLayout\n      headerRef={node => {\n        if (node) {\n          header.current = node;\n        }\n      }}\n      height={`${!isFirstInteraction ? 70 : headerHeight}px`}\n      responsiveHeight={`${\n        !isFirstInteraction ? 50 : screen.availWidth >= 480 ? headerHeight : 50\n      }px`}\n      backButton={backButton}\n      currentTopicIndex={currentTopicIndex}\n      topics={topics}\n      headerTextColor={headerTextColor}\n      topicName={topicName}\n      currentTopicName={currentTopicName}\n      includeLogo={includeLogo}\n      headerLogo={headerLogo}\n      progressBar={progressBar}\n      topicMenu={topicMenu}\n      menu={menu}\n      setMenuState={setMenuState}\n      background={<HeaderBackground />}\n      Burger={Burger}\n    />\n  );\n};\n\nexport { HeaderGraphic };\n","import getBlockById from './apiHelpers/getBlockById';\n\n// we can swap out the implementation of this for the faster / cleaner check\nexport const getIsFirstInteraction = (topics, currentInteraction): boolean => {\n  const firstInteraction = getBlockById(topics[0]?.children[0]?.id)\n    ?.children?.[0] as any;\n\n  // console.log(firstInteraction.id, currentInteraction);\n\n  if (currentInteraction) {\n    return currentInteraction === firstInteraction?.id;\n  }\n\n  return false;\n};\n","/** @jsx jsx */\n\nimport {\n  Fragment as _,\n  useState,\n  createContext,\n  useContext,\n  memo,\n  useEffect,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { useSelector } from 'react-redux';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport EditMarker from 'components/UI/EditMarker';\nimport HeaderStandard from 'components/Header';\nimport { HeaderGraphic } from './HeaderGraphic';\nimport { useHeader } from 'services/useHeader';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport { getIsFirstInteraction } from 'services/getIsFirstInteraction';\n\nconst defaultHeaderHeight = 70;\n\nconst Header = (props: any) => {\n  const { currentTopicIndex, topics } = props;\n  const header = useHeader();\n  const headerId = header?.block?.id;\n  const { standard, graphic } = header;\n  const { headerStyle = 'standard' } = header.props;\n\n  const currentHeader = headerStyle === 'standard' ? standard : graphic;\n\n  const { currentInteraction, focusedNodeId } = useSelector((state: any) => {\n    return {\n      currentInteraction: state.currentInteraction,\n      focusedNodeId: state.focusedNodeId,\n    } as any;\n  });\n\n  // this check is for first FIRST run. where the header might not yet be ' ready '\n  const selected = headerId ? focusedNodeId === headerId : false;\n\n  const { headerHeight = defaultHeaderHeight } = currentHeader?.props;\n  const editWrapperMargin = 3;\n\n  const isFirstInteraction = getIsFirstInteraction(topics, currentInteraction);\n\n  const height =\n    headerStyle === 'standard'\n      ? 60 + editWrapperMargin\n      : (!isFirstInteraction ? defaultHeaderHeight : headerHeight) -\n        editWrapperMargin * 2;\n\n  return (\n    <_>\n      {headerStyle === 'standard' ? (\n        <HeaderStandard\n          currentTopicIndex={currentTopicIndex}\n          topics={topics}\n          headerProps={standard.props}\n        />\n      ) : (\n        <HeaderGraphic\n          currentTopicIndex={currentTopicIndex}\n          topics={topics}\n          headerProps={graphic.props}\n          isFirstInteraction={isFirstInteraction}\n        />\n      )}\n\n      {window.dev() && (\n        <div\n          style={{\n            position: 'fixed',\n            left: 0,\n            top: 0,\n            width: '100vw',\n            height,\n            // setting the index at 1 seems to keep it on top of\n            // 2147483647 < max zIndex not needed\n            zIndex: 1,\n          }}\n        >\n          <div\n            css={css({\n              position: 'absolute',\n              left: editWrapperMargin,\n              top: editWrapperMargin,\n              width: `calc(100vw - ${editWrapperMargin * 2}px)`,\n              height: '100%',\n              boxShadow: `0 0 0 1px ${\n                selected ? '#ff0063' : 'rgba(0,0,0, 0.2)'\n              }`,\n              transition: 'box-shadow 0.2s',\n              ...(!selected && {\n                cursor: 'pointer',\n                ':hover': {\n                  boxShadow: `0 0 0 1px rgba(0,0,0,0.1)`,\n                },\n              }),\n              zIndex: 1,\n            })}\n            onClick={() => {\n              setCurrentBlock({ id: headerId });\n            }}\n          >\n            {!selected && <EditMarker />}\n          </div>\n        </div>\n      )}\n    </_>\n  );\n};\n\nexport default Header;\n// () => null;\n// Header;\n","/** @jsx jsx */\n\nimport { Fragment as _, useState, useEffect, useRef } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { State } from 'store/store';\nimport { killAllAudio } from 'services/killAllAudio';\n\nexport const AudioPlayer = () => {\n  //\n  const audio = useSelector((state: State) => {\n    return state.audio;\n  });\n\n  const {\n    id,\n    audioSrc,\n    autoPlay = false,\n    controls = true,\n    delay = 0,\n    pause = false,\n  } = (audio || {}) as any;\n\n  // const [showAudio, setShowAudio] = useState<boolean>(window.dev() || false);\n  // const [playAudio, setPlayAudio] = useState<boolean>(window.dev() || false);\n\n  const audioPlayer = useRef<HTMLAudioElement>(null);\n  const delayAudioPlay = useRef<ReturnType<typeof setTimeout>>();\n\n  useEffect(() => {\n    if (audioSrc && autoPlay) {\n      delayAudioPlay.current && clearTimeout(delayAudioPlay.current);\n      delayAudioPlay.current = setTimeout(() => {\n        //\n        // setPlayAudio(true);\n        audioPlayer.current && audioPlayer.current.play();\n      }, delay * 1000);\n      return;\n    }\n\n    // setPlayAudio(false);\n  }, [audioSrc, autoPlay]);\n\n  useEffect(() => {\n    if (!audioPlayer.current) {\n      return;\n    }\n\n    if (pause) {\n      audioPlayer.current.pause();\n    }\n  }, [pause]);\n\n  useEffect(() => {\n    let wait;\n    let tick;\n\n    const onFullScreenChange = e => {\n      clearInterval(wait);\n\n      if (document.fullscreenElement) {\n        tick = setInterval(() => {\n          if (!audioPlayer.current) {\n            return;\n          }\n\n          if (!audioPlayer.current.paused) {\n            wait = setTimeout(() => {\n              clearInterval(tick);\n            }, 3000);\n\n            audioPlayer.current.pause();\n          }\n        }, 100);\n      }\n    };\n\n    document.addEventListener('fullscreenchange', onFullScreenChange);\n\n    return () => {\n      clearTimeout(wait);\n      clearInterval(tick);\n      document.removeEventListener('fullscreenchange', onFullScreenChange);\n    };\n  }, []);\n\n  return audioSrc ? (\n    <div\n      className=\"fader_-2s\"\n      css={css({\n        position: 'fixed',\n        display: 'flex',\n        justifyContent: 'center',\n        left: 0,\n        bottom: window.dev() ? 40 : 20,\n        width: '100%',\n        maxWidth: 320,\n        height: 35,\n        padding: '0 20px',\n        zIndex: 100000,\n\n        '@media (max-width: 768px)': {\n          maxWidth: '100%',\n        },\n      })}\n    >\n      <audio\n        ref={audioPlayer}\n        src={audioSrc}\n        onPlay={() => {\n          // setIsPlaying(true);\n        }}\n        onPause={() => {\n          // setIsPlaying(false);\n        }}\n        css={css({\n          width: '100%',\n          height: 35,\n        })}\n        autoPlay={window.dev() ? false : autoPlay}\n        controls={window.dev() ? true : controls}\n      />\n    </div>\n  ) : null;\n};\n","\n\nexport const setCurrentInteractionAction = (\n  id: string,\n  updateFocusedNodeId\n) => {\n  return {\n    type: 'SET_CURRENT_INTERACTION',\n    data: { id: id, updateFocusedNodeId },\n  };\n};\n","export const theme = {\n  breakpoints: ['40em', '52em', '64em'],\n  fontSizes: [12, 14, 16, 20, 24, 32, 48, 64, 96, 128],\n  space: [\n    // margin and padding\n    0,\n    4,\n    8,\n    16,\n    32,\n    64,\n    128,\n    256,\n  ],\n  colors: {},\n  fonts: {\n    default: \"'Poppins', sans-serif\",\n  },\n  Text: {\n    color: '#122212',\n  },\n};\n","export const updateScoreAction = (id: string, score: 0 | 1) => {\n  return {\n    type: 'UPDATE_SCORE',\n    data: { id, score },\n  };\n};\n","import React, {\n  createContext,\n  PropsWithChildren,\n  useContext,\n  useEffect,\n  useState,\n} from 'react';\n\nconst readCookie = (name: string) => {\n  var nameEQ = name + '=';\n  var ca = document.cookie.split(';');\n  for (var i = 0; i < ca.length; i++) {\n    var c = ca[i];\n    while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n    if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n  }\n  return null;\n};\n\ntype HostingContext = ReturnType<typeof createSignalServer> & {};\n\nexport const HostingContext = createContext<HostingContext | undefined>(\n  undefined\n);\n\nexport interface SessionState {\n  currentSession: Session;\n}\n\nexport const HostingProvider = ({\n  url,\n  projectId,\n  children,\n}: PropsWithChildren<{ url: string; projectId: string }>) => {\n  const [state, setState] = useState<SessionState | null>(null);\n\n  const signaler = createSignalServer({\n    url,\n    projectId,\n    setSession(session) {\n      setState(() => ({\n        currentSession: session,\n      }));\n    },\n  });\n\n  // Start a new session\n  useEffect(() => {\n    signaler.start();\n  }, []);\n\n  return (\n    <HostingContext.Provider value={{ ...signaler }}>\n      {children}\n    </HostingContext.Provider>\n  );\n};\n\nexport interface Session {}\n\ninterface Event {}\n\nconst createSignalServer = ({ url, projectId, setSession }) => {\n  return {\n    // Start will either\n    // - create a new session\n    // - create a new session from a bookmark\n    async start(): Promise<Session> {\n      const csrfToken = decodeURIComponent(\n        readCookie('X-CSRF-TOKEN') as string\n      );\n\n      const req = await fetch(`${url}/harp/hosting/${projectId}/session`, {\n        method: 'POST',\n        credentials: 'include',\n        headers: {\n          'X-CSRF-Token': csrfToken,\n          Accept: 'application/json',\n        },\n        body: JSON.stringify({ session: { action: 'start' } }),\n      });\n      const json = await req.json();\n\n      setSession(json);\n      return json;\n    },\n\n    // Pause the current Session. this will cause the application to create a bookmark\n    // and store the current session.\n    async pause(): Promise<boolean> {\n      try {\n        const csrfToken = decodeURIComponent(\n          readCookie('X-CSRF-TOKEN') as string\n        );\n\n        const req = await fetch(`${url}/harp/hosting/${projectId}/session`, {\n          method: 'POST',\n          credentials: 'include',\n          headers: {\n            'X-CSRF-Token': csrfToken,\n            Accept: 'application/json',\n          },\n          body: JSON.stringify({ session: { action: 'pause' } }),\n        });\n        const json = await req.json();\n        return true;\n      } catch (e) {\n        console.log(e);\n        return false;\n      }\n    },\n\n    // Resume the current session\n    async resume(): Promise<boolean> {\n      try {\n        const csrfToken = decodeURIComponent(\n          readCookie('X-CSRF-TOKEN') as string\n        );\n\n        const req = await fetch(`${url}/harp/hosting/${projectId}/session`, {\n          method: 'POST',\n          credentials: 'include',\n          headers: {\n            'X-CSRF-Token': csrfToken,\n            Accept: 'application/json',\n          },\n          body: JSON.stringify({ session: { action: 'resume' } }),\n        });\n        const json = await req.json();\n        setSession(json);\n        return true;\n      } catch (e) {\n        console.log(e);\n        return false;\n      }\n    },\n\n    // end should use sendBeacon as it might be called on window close\n    async end(): Promise<void> {\n      try {\n        const csrfToken = decodeURIComponent(\n          readCookie('X-CSRF-TOKEN') as string\n        );\n\n        const headers = {\n          type: 'application/json',\n          'X-CSRF-Token': csrfToken,\n        };\n\n        navigator.sendBeacon(\n          `${url}/harp/hosting/${projectId}/session`,\n          new Blob([JSON.stringify({ session: { action: 'end' } })], headers)\n        );\n      } catch (e) {\n        console.log(e);\n      }\n    },\n    // Gets the current session\n    async current(): Promise<Session> {\n      const req = await fetch(`${url}/harp/hosting/${projectId}/session`, {\n        method: 'GET',\n        credentials: 'include',\n      });\n      const json = await req.json();\n      setSession(json);\n      return json;\n    },\n\n    //\n    async data(event: Event): Promise<void> {\n      const csrfToken = decodeURIComponent(\n        readCookie('X-CSRF-TOKEN') as string\n      );\n\n      const req = await fetch(`${url}/harp/hosting/${projectId}/session`, {\n        method: 'POST',\n        credentials: 'include',\n        headers: {\n          'X-CSRF-Token': csrfToken,\n          Accept: 'application/json',\n        },\n        body: JSON.stringify({ session: { action: 'data', event: event } }),\n      });\n      const json = await req.json();\n      return json;\n    },\n  };\n};\n\nexport const useHostingSession = () => {\n  const ctx = useContext(HostingContext);\n  return ctx;\n};\n","export default {\n  '2004': {\n    exit: 'cmi.exit',\n    entry: 'cmi.entry',\n    location: 'cmi.location',\n    scoreMin: 'cmi.score.min',\n    scoreMax: 'cmi.score.max',\n    scoreScaled: 'cmi.score.scaled',\n    scoreRaw: 'cmi.score.raw',\n    success: 'cmi.success_status',\n    completion: 'cmi.completion_status',\n    suspend_data: 'cmi.suspend_data',\n    result: {\n      0: \"incorrect\",\n      1: \"correct\"\n    }\n  },\n  '1.2': {\n    exit: 'cmi.core.exit',\n    entry: 'cmi.core.entry',\n    location: 'cmi.core.lesson_location',\n    scoreMin: 'cmi.core.score.min',\n    scoreMax: 'cmi.core.score.max',\n    scoreRaw: 'cmi.core.score.raw',\n    completion: 'cmi.core.lesson_status',\n    suspend_data: 'cmi.suspend_data',\n    result: {\n      0: \"wrong\",\n      1: \"correct\"\n    }\n  },\n};\n","let SCORMToCollectValues: any = {};\nlet delay;\n\nconst SCORMToCollect = ($: object, key: null | string = null) => {\n  const isHosted = (window as any).getParams().hosted;\n  if (!isHosted) {\n    return isHosted;\n  }\n\n  if (key) {\n    SCORMToCollectValues = {\n      ...SCORMToCollectValues,\n      [key]: {\n        ...SCORMToCollectValues[key],\n        ...$,\n      },\n    };\n  } else {\n    SCORMToCollectValues = {\n      ...SCORMToCollectValues,\n      ...$,\n    };\n  }\n\n  clearTimeout(delay);\n  delay = setTimeout(() => {\n    const raw = JSON.stringify({\n      hosting: { learning_module_session_data: SCORMToCollectValues },\n    });\n\n    const myHeaders = new Headers();\n    myHeaders.append('Accept', 'application/json');\n    myHeaders.append('Content-Type', 'application/json');\n\n    const requestOptions: any = {\n      method: 'POST',\n      headers: myHeaders,\n      body: raw,\n      redirect: 'follow',\n    };\n\n    const projectId = (window as any).getParams().projectId;\n\n    const endPoint =\n      `${window.chameleon.CHAMELEON_URL}/harp/hosting/${projectId}/data` ||\n      `https://development.chameleoncreator.com/harp/hosting/${projectId}/data`;\n\n    fetch(endPoint, requestOptions)\n      .then(response => {\n        // console.log({ response });\n        return response.text();\n      })\n      .then(result => {\n        console.log(result);\n      })\n      .catch(error => {\n        console.log('error', error);\n        console.log(raw);\n      });\n  }, 1000 / 60);\n};\n\nexport default SCORMToCollect;\n","import { State } from 'store/store';\n\nexport function transformScoreDataFromIdToSId(\n  scoreData: { [key: string]: true | false | 0 | 1 },\n  state: State\n) {\n  const { blocks } = state;\n  const idToSid = Object.keys(scoreData).reduce((acc, curr) => {\n    let sId = blocks[curr]?.props?.sId;\n\n    return {\n      ...acc,\n      // if we can't get an sId we default to the id ( curr )\n      [sId || curr]: tF(scoreData[curr]),\n    };\n  }, {});\n\n  return idToSid;\n}\n\nexport function transformScoreDataFromSIdToId(\n  scoreData: { [key: string]: 't' | 'f' | 0 | 1 },\n  state: State\n) {\n  const sIdToId = Object.keys(scoreData).reduce((acc, curr) => {\n    const blockWithSIdOrId = Object.values(state.blocks).find(block => {\n      if (block?.props?.sId === Number(curr)) {\n        return true;\n      }\n\n      return block?.id === curr;\n    });\n\n    if (!blockWithSIdOrId) {\n      return acc;\n    }\n\n    return {\n      ...acc,\n      [blockWithSIdOrId.id]: tF(scoreData[curr]),\n    };\n  }, {});\n\n  return sIdToId;\n}\n\nfunction tF(value: 't' | 'f' | true | false | 1 | 0) {\n  switch (value) {\n    case 't': {\n      return true;\n    }\n\n    case 'f': {\n      return false;\n    }\n\n    case true: {\n      return 't';\n    }\n\n    case false: {\n      return 'f';\n    }\n\n    default: {\n      return value;\n    }\n  }\n}\n","import { Block, Blocks } from '@chameleoncreator/creator-app';\nimport { setExitCompleteAction } from 'actions/setExitCompleteAction';\nimport { updateScoreAction } from 'actions/updateScoreAction';\nimport { ModuleContext } from 'components/Module/Module_v2';\nimport { SCORMProps, ScoringCriteria } from 'factories/scorm';\nimport { useHostingSession } from 'hosting/context';\nimport pipwerks, { SCORM } from 'pipwerks-scorm-api-wrapper';\nimport { useContext, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { createSelector } from 'reselect';\nimport getAssessments from 'services/apiHelpers/getAssessments';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport getCurrentTopic from 'services/apiHelpers/getCurrentTopic';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport getCurrentLocation from 'services/getCurrentLocation';\n\nimport { setLocalStorageStateBookmark } from 'store/localStore';\n\nimport getStore from 'services/getStore';\nimport pubSub from 'services/pubSub';\nimport { Report, Assessments, State, LessonStatus } from 'store/store';\nimport { LandingPagesSeenState } from 'store/store';\nimport {\n  findBlocksIn,\n  getAllInteractionsOrdered,\n} from '../../../selectors/block';\nimport API from '../../../services/scorm/API';\nimport SCORMToCollect from './SCORMToCollect';\nimport {\n  transformListFromSIdToId,\n  transformListFromIdToSId,\n} from 'services/transformListBetweenIdSId';\nimport {\n  transformAssessmentsToSuspendData,\n  transformAssessmentsFromSuspendData,\n} from 'services/transformAssessmentsToAndFromSuspendData';\nimport { Assessment, AssessmentData, QuestionData } from 'store/store';\nimport {\n  transformScoreDataFromIdToSId,\n  transformScoreDataFromSIdToId,\n} from 'services/transformScoreData';\n\nconst API_KEYS = API;\n\nenum Version {\n  OnePointTwo = '1.2',\n  TwoThousandAndFour = '2004',\n}\n\nenum SuccessString {\n  Passed = 'passed',\n  Failed = 'failed',\n}\n\nenum CompletionString {\n  Complete = 'completed',\n  Incomplete = 'incomplete',\n}\n\nenum ShouldSendScore {\n  Always = 'ALWAYS',\n  Never = 'NEVER',\n  OnComplete = 'COMPLETE',\n}\n\nexport enum ReportableInteractions {\n  Multichoice = 'multichoice',\n  Sortation = 'sortation',\n  Likert = 'likert',\n  FillIn = 'fillin',\n  LongFillIn = 'longfillin',\n  // quiz ?\n}\n\nlet scormInitialized;\nexport const getSCORMInitialized = () => {\n  return scormInitialized;\n};\n\nconst getResult = (version, result) => {\n  if (version === Version.OnePointTwo) {\n    return result ? 'correct' : 'wrong';\n  }\n\n  return result ? 'correct' : 'incorrect';\n};\n\nconst asPercent = (number: number, total: number) => {\n  return ((number || 0) / total) * 100 || 0;\n};\n\n// TO not DO.\n// for sam. discusss this bit\n// boolean to ensure we only run the scoreData reloading once\nlet hasReloadedScoreData: boolean = false;\n\n// initialize location here and / so as it's updated\n// is available to module\n// sending to suspend_data for example. which comes after a timeout\nlet location = '';\n\n/**\n * ExitProps\n *\n * When the module is preparing to exit, it needs to make sure that all the appropriate\n * controls are triggered in the SCORM container. The data in ExitProps is a complete\n * representation of this data and as such can be used to toggle saving behaviours further\n * down the chain\n */\ninterface ExitProps {\n  lastInteractionSeen: boolean;\n  allInteractionsSeen: boolean;\n  passed: boolean;\n  isComplete: boolean;\n  hasExited: boolean;\n  scoreRaw: number;\n  scoreMax: number;\n  scorePercent: number;\n  percentComplete: number;\n  sendScore: boolean;\n  moduleCompleteInterationRequirement: string;\n  moduleCompleteScoreRequirement: boolean;\n  shouldSendScoreWhen: string;\n  sendOnlySuccessStatus: boolean;\n  lessonStatus: LessonStatus;\n  scoringCriteria: ScoringCriteria;\n}\n\n/**\n * scormFunc\n *\n * A scorm function is a chainable side effect function. It takes some data, possibly performs\n * and action that changes remote data (eg. scorm container function call) updating the props in\n * the process and then returns a new ExitProps object.\n *\n * By chaining these functions we can create easy to follow processes for saving data on exit\n */\ntype scormFunc = (e: ExitProps) => ExitProps;\n\ntype SuspendData = {\n  interactionsSeen: string[];\n  interactionsLocked?: string[];\n  landingPagesSeenState?: LandingPagesSeenState;\n  // 'loosely' typed types here\n  interactionsReporting: { [key: string]: any };\n  scoreData: { [key: string]: any };\n  assessments: Assessments;\n  moduleVariables: { [key: string]: string };\n  location: string;\n};\n\nconst assessmentScoringAverageOrFirstPassed = (data: {\n  scorm: SCORM;\n  version: string;\n  scoringCriteria: ScoringCriteria;\n  lessonStatus: LessonStatus;\n  moduleCompleteScoreRequirement: boolean;\n}) => {\n  const {\n    scorm,\n    version,\n    scoringCriteria,\n    lessonStatus,\n    moduleCompleteScoreRequirement,\n  } = data;\n\n  // get fresh state\n  const state = getStore().getState();\n\n  // get the passMark on module props\n  // can we get this from somewhere else ? prior\n  const module = Object.values(state.blocks).find(b => {\n    return (b as Block)?.type === 'Module';\n  }) as Block;\n\n  const passMark = module?.props?.passMark;\n\n  // get all the assessments from state\n  const { assessments } = state;\n  // filter for scoring\n  const scoringAssessments = Object.keys(assessments)\n    .filter(key => {\n      return assessments[key].data?.scoring;\n    })\n    .map(id => {\n      return {\n        [id]: assessments[id],\n      };\n    });\n\n  // break them down as follows. . .\n  //\n  const passingAssessmentsIds = Object.keys(assessments).filter(key => {\n    const { name, scoring, passed } = assessments[key]?.data || {};\n\n    return scoring && passed;\n  });\n\n  const passingAssessments = passingAssessmentsIds.map(id => {\n    return assessments[id];\n  });\n\n  // we use the first assessment. passingAssessments[0]\n  // might be that at some time later we want to calculate for more than the first\n  const passingAssessment = passingAssessments[0];\n\n  const passingAssessmentResults =\n    (passingAssessments?.length &&\n      Object.values(passingAssessment.results).map(r => {\n        return r as QuestionData;\n      })) ||\n    [];\n\n  let scoreMax = 0;\n  let scoreRaw = 0;\n  let passed = false;\n\n  if (scoringCriteria === 'AVERAGE') {\n    scoreMax = scoringAssessments.length;\n    scoreRaw = passingAssessments.length;\n    passed = asPercent(scoreRaw, scoreMax) >= passMark;\n  }\n\n  if (scoringCriteria === 'PASSED_ASSESSMENTS') {\n    scoreMax = passingAssessmentResults.length;\n\n    //\n    if (passingAssessment && passingAssessment.data) {\n      scoreRaw = passingAssessment.data.score;\n      passed = passingAssessment.data.passed;\n      //\n    }\n  }\n\n  const isComplete = passed;\n\n  if (version === '1.2' && lessonStatus === 'passed/failed/incomplete') {\n    const completionString = isComplete\n      ? 'passed'\n      : moduleCompleteScoreRequirement\n      ? 'failed'\n      : 'incomplete';\n\n    scorm.set(API[version].completion, completionString);\n\n    return {\n      scoreMax,\n      scoreRaw,\n      passed,\n      sendScore: passed,\n    };\n  }\n\n  scorm.set(\n    API[version].completion,\n    isComplete ? CompletionString.Complete : CompletionString.Incomplete\n  );\n\n  return {\n    scoreMax,\n    scoreRaw,\n    passed,\n    sendScore: passed,\n  };\n};\n/**\n * setScoreData\n *\n * saves the score to scorm container IF required\n */\nconst setScoreData = (scorm: SCORM, version: string): scormFunc => props => {\n  const { scoringCriteria } = props;\n\n  let { scoreRaw, scoreMax, passed, sendScore } = props;\n\n  if (\n    (['AVERAGE', 'PASSED_ASSESSMENTS'] as ScoringCriteria[]).includes(\n      scoringCriteria\n    )\n  ) {\n    const assessmentScoringData = assessmentScoringAverageOrFirstPassed({\n      scorm,\n      version,\n      ...props,\n    });\n\n    scoreRaw = assessmentScoringData.scoreRaw;\n    scoreMax = assessmentScoringData.scoreMax;\n    passed = assessmentScoringData.passed;\n    sendScore = assessmentScoringData.sendScore;\n  }\n\n  const shouldSendSuccess = props[props.moduleCompleteInterationRequirement];\n  //\n\n  if (!sendScore) {\n    return props;\n  }\n\n  scorm.set(API[version].scoreMin, 0);\n  scorm.set(API[version].scoreMax, 100);\n\n  scorm.set(API[version].scoreRaw, asPercent(scoreRaw, scoreMax));\n\n  if (version === Version.TwoThousandAndFour) {\n    scorm.set(API[version].scoreScaled, scoreRaw / scoreMax);\n\n    if (shouldSendSuccess) {\n      scorm.set(\n        API[version].success,\n        passed ? SuccessString.Passed : SuccessString.Failed\n      );\n    }\n  }\n\n  return props;\n};\n\n/**\n * setSCORMCompletion\n *\n * If the module has been completed, declare it so.\n */\nconst setSCORMCompletion = (scorm: SCORM, version: string) => (\n  isComplete: boolean,\n  props = {} as ExitProps\n): void => {\n  // bail !!!\n  const scormCompletionString = scorm.get(API[version].completion);\n\n  if (['completed', 'passed'].includes(scormCompletionString)) {\n    return;\n  }\n\n  const { passed, moduleCompleteScoreRequirement, lessonStatus } = props;\n\n  if (version === '1.2' && lessonStatus === 'passed/failed/incomplete') {\n    const completionString = isComplete\n      ? 'passed'\n      : moduleCompleteScoreRequirement\n      ? 'failed'\n      : 'incomplete';\n\n    console.log({ completionString });\n\n    scorm.set(API[version].completion, completionString);\n\n    return;\n  }\n\n  scorm.set(\n    API[version].completion,\n    isComplete ? CompletionString.Complete : CompletionString.Incomplete\n  );\n};\n\n/**\n * setCompletionStatus\n *\n * chainable version of setSCORMCompletion\n */\nconst setCompletionStatus = (\n  scorm: SCORM,\n  version: string\n): scormFunc => props => {\n  const { isComplete } = props;\n\n  if (version === '2004' && props.sendOnlySuccessStatus) {\n    console.log(\n      { sendOnlySuccessStatus: props.sendOnlySuccessStatus },\n      'we bail early and do not send completion'\n    );\n    return props;\n  }\n\n  if (props[props.moduleCompleteInterationRequirement]) {\n    setSCORMCompletion(scorm, version)(isComplete, props);\n  }\n\n  return props;\n};\n\n/**\n * saveAndQuit\n *\n * shut down the scorm container (should be called last)\n */\nconst save = (scorm: SCORM): scormFunc => props => {\n  scorm.save();\n\n  return props;\n};\n\n/**\n * setIsComplete\n *\n * determins whether or not the module is completed based on props\n */\nconst setIsComplete: scormFunc = props => {\n  const interactionCompletion =\n    props[props.moduleCompleteInterationRequirement];\n  const scoreCompletion = props.moduleCompleteScoreRequirement\n    ? props.passed\n    : true;\n\n  const isComplete = interactionCompletion && scoreCompletion;\n\n  return { ...props, isComplete };\n};\n\n/**\n * setShouldSendScore\n *\n * using data provided, decided if we should be sending the score to the scorm container\n * @param props\n */\nconst setShouldSendScore: scormFunc = props => {\n  let shouldSendScore = false;\n\n  switch (props.shouldSendScoreWhen) {\n    case ShouldSendScore.Never:\n      shouldSendScore = false;\n      break;\n    case ShouldSendScore.Always:\n      shouldSendScore = true;\n      break;\n    case ShouldSendScore.OnComplete:\n      shouldSendScore = props.isComplete;\n      break;\n  }\n\n  return {\n    ...props,\n    sendScore: shouldSendScore ? true : false,\n  };\n};\n\n/**\n * setCompleteOnExitOps\n *\n * the chain of operations for saving\n */\nconst setCompleteOnExitOps = (\n  scorm: SCORM,\n  version: string,\n  exitProps: ExitProps\n) => {\n  const funcs = [\n    setIsComplete,\n    setShouldSendScore,\n    setScoreData(scorm, version),\n    setCompletionStatus(scorm, version),\n    save(scorm),\n  ];\n\n  return funcs.reduce((cur: ExitProps, next: scormFunc) => {\n    const props = next(cur);\n\n    return props;\n  }, exitProps);\n};\n\n/**\n * q contains all the data that an interaction sends when it wants to report to\n * the scorm container\n */\n\ntype q = Report & { success: string };\n\ntype qFunc = (p: q) => void;\n\n// returning early on all of these for testing\nconst qid: qFunc = ({ id, key }) => {\n  SCORM.set(`cmi.interactions.${key}.id`, id);\n};\n\nconst qdesc: qFunc = ({ key, question = '' }) => {\n  SCORM.set(`cmi.interactions.${key}.description`, question?.substring(0, 250));\n};\n\nconst qtype: qFunc = ({ key, type }) => {\n  SCORM.set(`cmi.interactions.${key}.type`, type);\n};\n\nconst qstudent: qFunc = ({ key, response }) => {\n  SCORM.set(`cmi.interactions.${key}.student_response`, response);\n};\n\nconst qlearner: qFunc = ({ key, response }) => {\n  SCORM.set(`cmi.interactions.${key}.learner_response`, response);\n};\n\nconst qcorrect: qFunc = ({ key, correct }) => {\n  SCORM.set(`cmi.interactions.${key}.correct_responses.0.pattern`, correct);\n};\n\nconst qresult: qFunc = ({ key, result }) => {\n  SCORM.set(`cmi.interactions.${key}.result`, result);\n};\n\nconst qsave: qFunc = () => {\n  SCORM.save();\n};\n\ntype InteractionsReportingSequence = {\n  [key in Version]: {\n    [key in ReportableInteractions]: qFunc[];\n  };\n};\n\n/**\n * cmiInteractions is a nested map that contains the sequence functions needed\n * to send interaction reporting data to the SCORM container.\n */\nconst cmiInteractions: InteractionsReportingSequence = {\n  [Version.OnePointTwo]: {\n    [ReportableInteractions.Multichoice]: [\n      qid,\n      qtype,\n      qcorrect,\n      qstudent,\n      qresult,\n      qsave,\n    ],\n    [ReportableInteractions.Sortation]: [\n      qid,\n      qtype,\n      qcorrect,\n      qstudent,\n      qresult,\n      qsave,\n    ],\n    [ReportableInteractions.Likert]: [\n      qid,\n      qtype,\n      qcorrect,\n      qstudent,\n      qresult,\n      qsave,\n    ],\n    [ReportableInteractions.FillIn]: [\n      qid,\n      qtype,\n      qstudent,\n      qcorrect,\n      qresult,\n      qsave,\n    ],\n    [ReportableInteractions.LongFillIn]: [\n      qid,\n      qtype,\n      qstudent,\n      qcorrect,\n      qresult,\n      qsave,\n    ],\n  },\n  [Version.TwoThousandAndFour]: {\n    [ReportableInteractions.Multichoice]: [\n      qid,\n      qdesc,\n      qtype,\n      qlearner,\n      qcorrect,\n      qresult,\n      qsave,\n    ],\n    [ReportableInteractions.Sortation]: [\n      qid,\n      qdesc,\n      qtype,\n      qlearner,\n      qcorrect,\n      qresult,\n      qsave,\n    ],\n    [ReportableInteractions.Likert]: [\n      qid,\n      qdesc,\n      qtype,\n      qlearner,\n      qcorrect,\n      qresult,\n      qsave,\n    ],\n    [ReportableInteractions.FillIn]: [\n      qid,\n      qdesc,\n      qtype,\n      qlearner,\n      qcorrect,\n      qresult,\n      qsave,\n    ],\n    [ReportableInteractions.LongFillIn]: [\n      qid,\n      qdesc,\n      qtype,\n      qlearner,\n      qcorrect,\n      qresult,\n      qsave,\n    ],\n  },\n};\n\n/**\n * setCMIInteractions is an internal function for saving an interaction into the scorm container\n *\n * @param interactionType the type of interaction ( Multichoice | Sortation )\n * @param version version of scorm that we are targeting (1.2 | 2004)\n */\nconst setCMIInteractions = (\n  interactionType: ReportableInteractions,\n  version: Version\n) => ({\n  id,\n  question,\n  type,\n  response,\n  correct,\n  result,\n  reportable,\n}: Report) => {\n  let count = SCORM.get('cmi.interactions._count');\n  const resultParsed = getResult(version, result);\n\n  const qProps: q = {\n    key: count,\n    id,\n    question,\n    type,\n    reportable,\n    response: response ? response : 'pending',\n    correct: correct ? correct : 'pending',\n    result: resultParsed as any, // this is BAD\n    success: API_KEYS[version].result[result],\n  };\n\n  cmiInteractions[version][interactionType].reduce((_, next) => {\n    next(qProps);\n    return true;\n  }, false);\n};\n\n/**\n * activeBlockSelector finds blocks that are accessible from the root block\n */\nconst activeBlockSelector = (blocks: Blocks, rootId: string): Block[] => {\n  return findBlocksIn(blocks, blocks[rootId], (i: any) => i);\n};\n\n/**\n * scoringBlocks finds all the blocks that are scorable and have it turned on\n */\nconst scoringBlocks = (blocks: Block[]): string[] => {\n  const moduleBlock = (Object.values(\n    getStore().getState().blocks\n  ) as Block[]).find(b => b.type === 'Module');\n\n  const includeAllScoringInteractions = false;\n\n  const assessments = getAssessments();\n\n  const scoringAssessments = assessments.filter((a: Block) => {\n    return a?.props?.scoring;\n  });\n\n  let assessmentsQuestions: string[] = [];\n\n  if (scoringAssessments.length) {\n    scoringAssessments.forEach((a: any) => {\n      const interactionsInTopic = getInteractionsInTopic(a);\n\n      assessmentsQuestions = [\n        ...assessmentsQuestions,\n        ...interactionsInTopic\n          .filter((q, i) => {\n            return i > 0 && i < interactionsInTopic.length - 1;\n          })\n          .map(q => {\n            return q.id;\n          }),\n      ];\n      //\n    });\n  }\n\n  if (assessmentsQuestions.length) {\n    return assessmentsQuestions;\n  }\n\n  const sB = [\n    ...blocks\n      .filter((b: any) => {\n        return b?.props?.score && b.props.score === true;\n      })\n      .map((b: any) => b.id),\n  ];\n\n  return sB;\n};\n\n/**\n * This selector pulls out all the active blocks from the store\n */\nconst loadActiveBlocks = createSelector(\n  [(state: State) => state.blocks, (state: State) => state.rootBlockId!],\n  activeBlockSelector\n);\n\nconst loadScoringBlocks = createSelector(loadActiveBlocks, scoringBlocks);\n\n/**\n * call exit on scorm based on the options provided to the block\n */\nconst exit = (initialised, scorm, version, exitProps) => {\n  if (!initialised) {\n    return;\n  }\n\n  setCompleteOnExitOps(scorm, version, exitProps);\n\n  scorm.save();\n  scorm.quit();\n};\n\n/**\n * This block is responsible for ALL scorm interaction. The core parts are\n *\n * - saving and loading current users progress\n * - saving score and behaviour into the CMI.interactions\n * - setting the score\n * - provide an exit facility ?? (i'm not convinced of this one)\n *\n * @param props\n */\n\nconst PIPWERKS = pipwerks as any;\n//\nexport const SCORMRenderer = (props: Block) => {\n  // kill all the debug noise in dev\n  if (window.location.toString().match('localhost:') && PIPWERKS?.debug) {\n    PIPWERKS.debug.isActive = false;\n  }\n\n  const scormSettings = props.props;\n\n  const {\n    shouldSendScoreWhen,\n    moduleCompleteInterationRequirement,\n    moduleCompleteScoreRequirement,\n    scormExitMessage = 'logout',\n    scormControlledExit = false,\n    scormExitDelay,\n    sendOnlySuccessStatus = false,\n    lessonStatus = 'completed/incomplete',\n    scoringCriteria,\n  } = scormSettings as SCORMProps;\n\n  const dispatch = useDispatch();\n  const hostingCtx = useHostingSession();\n\n  let { passMark } = useContext(ModuleContext);\n\n  const [initialised, setInitialized] = useState(false);\n  const [version, setVersion] = useState<Version>(Version.OnePointTwo);\n\n  const [lastInteractionSeen, setLastInteractionSeen] = useState(false);\n\n  const [reportedInteractions, setReportedInteractions] = useState({});\n\n  const {\n    interactionsSeen,\n    interactionsLocked,\n    landingPagesSeenState,\n    interactionsReporting,\n    scoreData = {},\n    feedback = {},\n    exiting,\n    exitComplete,\n    assessments,\n    moduleVariables,\n    //\n    enableBookmarking,\n  } = useSelector((state: State) => {\n    const { enableBookmarking } = state.theme;\n\n    return {\n      interactionsSeen: state.interactionsSeen,\n      interactionsLocked: state.interactionsLocked,\n      landingPagesSeenState: state.landingPagesSeenState,\n      interactionsReporting: state.userBehaviour.scormResponses,\n      scoreData: state.userBehaviour.score,\n      feedback: state.feedback,\n      exiting: state.exit,\n      exitComplete: state.exitComplete,\n      assessments: state.assessments,\n      moduleVariables: state.moduleVariables,\n      //\n      enableBookmarking:\n        enableBookmarking === undefined ? true : enableBookmarking,\n    };\n  });\n\n  const allInteractions = useSelector(getAllInteractionsOrdered); //\n\n  const scoringInteractions = useSelector(loadScoringBlocks);\n  const numberOfScorableInteractions = scoringInteractions.length;\n\n  useEffect(() => {\n    if (!allInteractions.length) {\n      return;\n    }\n    if (!interactionsSeen.length) {\n      return;\n    }\n\n    const lastInteraction = allInteractions[allInteractions.length - 1].id;\n\n    if (interactionsSeen.includes(lastInteraction)) {\n      setLastInteractionSeen(() => true);\n    }\n  }, [interactionsSeen, allInteractions, setLastInteractionSeen]);\n\n  const allInteractionsSeen =\n    interactionsSeen &&\n    allInteractions &&\n    interactionsSeen.length === allInteractions.length;\n\n  let scoreRaw = Object.values(scoreData as { [key: string]: number }).reduce<\n    number\n  >((acc, curr) => {\n    // initialize _curr_ default\n    let _curr_ = curr;\n\n    // in the case where we might have exisitng minimized vales of 't' || 'f'\n    //\n    switch (_curr_.toString()) {\n      case 't': {\n        _curr_ = 1;\n        break;\n      }\n      case 'f': {\n        _curr_ = 0;\n        break;\n      }\n      // and tap it again for good measure\n      default:\n        _curr_ = curr;\n    }\n    //\n\n    // in the case where there could still exist a boolean\n    // calculates fine implicitly but lets explicitly numberify it\n    return acc + Number(_curr_);\n  }, 0);\n\n  let scorePercent = ((scoreRaw || 0) / numberOfScorableInteractions) * 100;\n\n  // we'll default the score to 100 if. . . ?\n  if (!moduleCompleteScoreRequirement) {\n    // scorePercent = 100;\n  }\n\n  if (numberOfScorableInteractions <= 0) {\n    scorePercent = 100;\n  }\n\n  const percentComplete =\n    (interactionsSeen.length / allInteractions.length) * 100;\n\n  const exitProps: ExitProps = {\n    lastInteractionSeen,\n    allInteractionsSeen,\n\n    scoreRaw,\n    scoreMax: numberOfScorableInteractions,\n    passed: scorePercent >= Number(passMark),\n    scorePercent,\n    percentComplete,\n    isComplete: false,\n    sendScore: false,\n    hasExited: exiting,\n    shouldSendScoreWhen,\n    moduleCompleteInterationRequirement,\n    moduleCompleteScoreRequirement,\n    sendOnlySuccessStatus,\n    lessonStatus,\n    scoringCriteria,\n  };\n\n  // Refactor this to respond to events\n  SCORMToCollect({\n    ...setShouldSendScore(setIsComplete(exitProps)),\n    feedback,\n  });\n\n  // Initialise SCORM\n\n  useEffect(() => {\n    if (!initialised && !(window as any).hosted) {\n      try {\n        // TODO find a solution to this\n        SCORM.version = (window as any).scormVersion || Version.OnePointTwo;\n\n        scormInitialized = SCORM.init();\n\n        setInitialized(scormInitialized);\n\n        // if any of the interactionsSeen contain sIds that do not exist we nuke:\n        // suspend_data\n        // cmi.location\n        const remoteData = SCORM.get(API[version].suspend_data);\n\n        if (remoteData) {\n          const remoteDataJSONParsed = JSON.parse(remoteData) || {};\n\n          const { interactionsSeen = [] } = remoteDataJSONParsed;\n\n          const sIds = (Object.values(getStore().getState().blocks) as Block[])\n            .filter(entry => {\n              return entry?.type === 'Interaction' && entry?.props?.sId;\n            })\n            .map(entry => {\n              return entry?.props?.sId;\n            });\n\n          if (interactionsSeen.some(entry => !sIds.includes(entry))) {\n            //\n            console.warn(\n              'saved data contains interaction references that no longer exist in module. clearing out suspend_data and lessonLocation to reset'\n            );\n\n            SCORM.set(API[version].suspend_data, '');\n            SCORM.set(API[version].location, '');\n          }\n        }\n\n        //\n      } catch (err) {\n        window.console.log('scorm aint happy outside of LMS');\n      }\n\n      setVersion((SCORM.version as Version) || Version.TwoThousandAndFour);\n    }\n  }, [initialised]);\n\n  // LOAD SAVED DATA\n  useEffect(() => {\n    if (window.location.href === 'http://localhost:3011/module.html') {\n      return;\n    }\n\n    if (!initialised) {\n      return;\n    }\n\n    // force incomplete if not explicitly marked as complete\n    const completionStatus = SCORM.get(API_KEYS[version].completion);\n    if (completionStatus !== CompletionString.Complete) {\n      setSCORMCompletion(SCORM, version)(false);\n    }\n\n    //Get the latest suspend data\n    const remoteData = SCORM.get(API[version].suspend_data);\n\n    //\n    let suspendedData: SuspendData = {\n      interactionsSeen: [],\n      interactionsLocked: [],\n      landingPagesSeenState: {},\n      interactionsReporting: {},\n      scoreData: {},\n      assessments: {},\n      moduleVariables: {},\n      location: '',\n    };\n\n    const state = getStore().getState();\n    const { idToSIdMap, sIdToIdMap } = state;\n\n    if (remoteData) {\n      try {\n        const remoteDataJSONParsed = JSON.parse(remoteData);\n\n        let transformedInteractionsSeen: string[] = [];\n        let transformedInteractionsLocked: string[] = [];\n\n        if (remoteDataJSONParsed?.interactionsSeen?.length) {\n          transformedInteractionsSeen = transformListFromSIdToId(\n            sIdToIdMap,\n            remoteDataJSONParsed.interactionsSeen\n          );\n\n          remoteDataJSONParsed.interactionsSeen = transformedInteractionsSeen;\n        }\n\n        if (remoteDataJSONParsed?.interactionsLocked?.length) {\n          transformedInteractionsLocked = transformListFromSIdToId(\n            sIdToIdMap,\n            remoteDataJSONParsed.interactionsLocked\n          );\n\n          remoteDataJSONParsed.interactionsLocked = transformedInteractionsLocked;\n        }\n\n        let scoreData = remoteDataJSONParsed?.scoreData;\n        if (scoreData) {\n          remoteDataJSONParsed.scoreData = transformScoreDataFromSIdToId(\n            scoreData,\n            state\n          );\n        }\n\n        let assessments = remoteDataJSONParsed?.assessments || {};\n        if (Object.keys(assessments).length) {\n          remoteDataJSONParsed.assessments = transformAssessmentsFromSuspendData(\n            assessments,\n            state\n          );\n        }\n\n        suspendedData = {\n          ...suspendedData, // defaults\n          ...remoteDataJSONParsed,\n        };\n      } catch (err) {\n        // console.log(err);\n        suspendedData = {} as SuspendData;\n      }\n    }\n\n    const entry = SCORM.get(API[version].entry);\n\n    if (entry !== 'ab-initio' && enableBookmarking) {\n      const location =\n        SCORM.get(API[version].location) || suspendedData.location;\n\n      //\n\n      dispatch({\n        type: 'LOAD_BOOKMARK_DATA',\n        data: location,\n      });\n    }\n\n    if (suspendedData && enableBookmarking) {\n      dispatch({\n        type: 'LOAD_SUSPEND_DATA',\n        data: suspendedData,\n      });\n\n      dispatch({\n        type: 'UPDATE_INTERACTIONS_SEEN',\n        data: suspendedData?.interactionsSeen,\n      });\n    }\n\n    const reported = Object.keys(\n      suspendedData?.interactionsReporting || {}\n    ).reduce((k, next: string) => {\n      return {\n        ...k,\n        [next]: true,\n      };\n    }, {});\n\n    setReportedInteractions(reported);\n\n    // for the moment we're disabling the rehydration of scoreData\n    // well. we're gonna not save any so there'd be nada to rehydrate from\n    // return;\n    //\n    if (\n      suspendedData?.scoreData &&\n      !hasReloadedScoreData\n      // &&\n      // enableBookmarking\n    ) {\n      // UPDATE !!!\n      // we're gonna reload scoreData in all cases now\n      // && suspendedData?.assessments\n      //\n      //\n      // we check and only reload the scoreData if we have any scoring assessments\n      // why ?\n      // each question in an assessment locks when it's resolved ( correct. or has met max attempts )\n      // so we can't ' double up ' on the score\n      // if we're scoring mutlichoice / sortation and they're not locking on return\n      // we want them to just do their scroing thing like on first run\n      // so any results pages etc are reading the current session score correctly etc\n      //\n      const { scoreData } = suspendedData;\n\n      if (scoreData) {\n        // instead of putting this in a loop\n        // could update the action > reducer to accept a single object ?\n        // or add a new action > reducer to handle that case ?\n        //\n\n        console.log(scoreData, 'is dispatched and reloaded ?');\n\n        Object.keys(scoreData).forEach((entry: any, index) => {\n          //\n          dispatch(updateScoreAction(entry, scoreData[entry]));\n        });\n      }\n\n      hasReloadedScoreData = true;\n    }\n\n    //\n  }, [initialised]);\n\n  useEffect(() => {\n    // clear saved data\n\n    pubSub.subscribe('RESET_MODULE', () => {\n      SCORM.set(API[version].suspend_data, '');\n    });\n  }, []);\n\n  /**\n   * This piece of code needs to change\n   *\n   * The goal is to execute this only once; and only when requested.\n   *\n   * Possible solution is to listen for events. This makes sense BUT\n   * it seems to not work natively in redux; and that makes sense as\n   * it creates quite a hard dependency\n   *\n   * Another possible solution is to use the store\n   */\n\n  useEffect(() => {\n    let unloaded = false;\n\n    const un = () => {\n      if (unloaded || !initialised) {\n        return;\n      }\n\n      if (exitComplete) {\n        return;\n      }\n\n      const props = setCompleteOnExitOps(SCORM, version, exitProps);\n      SCORMToCollect(props);\n\n      unloaded = true;\n\n      if (!scormControlledExit) {\n        SCORM.handleExitMode = false;\n\n        const completion = SCORM.get(API_KEYS[version].completion);\n\n        let checkedScormExitMessage = '';\n        //\n        if (version === '1.2' && lessonStatus === 'passed/failed/incomplete') {\n          // if passed || failed. send the scormExitMessage\n          // else suspend\n\n          checkedScormExitMessage = ['passed', 'failed'].includes(completion)\n            ? scormExitMessage\n            : 'suspend';\n        } else {\n          // do the thing we were already doing\n          checkedScormExitMessage =\n            completion !== CompletionString.Complete\n              ? 'suspend'\n              : scormExitMessage;\n        }\n\n        SCORM.set(API[version].exit, checkedScormExitMessage); // scormExitMessage\n        SCORM.save();\n        SCORM.quit();\n      }\n    };\n\n    window.addEventListener('beforeunload', un);\n    window.addEventListener('unload', un);\n\n    return () => {\n      window.removeEventListener('beforeunload', un);\n      window.removeEventListener('unload', un);\n    };\n  }, [\n    initialised,\n    version,\n    SCORM,\n    exitProps,\n    exitComplete,\n    scormControlledExit,\n    lastInteractionSeen,\n  ]);\n\n  useEffect(() => {\n    if (!initialised) {\n      return;\n    }\n\n    if (!exiting) {\n      return;\n    }\n\n    if (exitComplete) {\n      return;\n    }\n\n    const exitPropsProcessed = setCompleteOnExitOps(SCORM, version, exitProps);\n\n    SCORMToCollect({\n      ...exitPropsProcessed,\n      feedback,\n    });\n\n    SCORM.handleExitMode = false;\n\n    SCORM.set(API[version].exit, scormExitMessage);\n    SCORM.save();\n\n    let timeoutQuit;\n\n    if (scormExitDelay) {\n      SCORM.quit();\n    } else {\n      timeoutQuit = setTimeout(() => {\n        SCORM.quit();\n      }, 200);\n    }\n\n    const timeout = setTimeout(() => {\n      if (scormControlledExit) {\n        dispatch(setExitCompleteAction());\n      }\n    }, 1000);\n\n    return () => {\n      clearTimeout(timeout);\n      clearTimeout(timeoutQuit);\n    };\n  }, [exiting, exitComplete, version, SCORM, exitProps]);\n\n  /**\n   * END SOLUTION REQUIREMENT\n   */\n\n  // SAVE LOCAL DATA ON CHANGES\n  useEffect(() => {\n    // TODO: remove the magic number here\n    const delaySetSCORM = setTimeout(() => {\n      //\n      // my thinking here is we remove the question and response entries at the 'last minute'\n      const editedInteractionsReporting = Object.keys(\n        interactionsReporting\n      ).reduce((acc, curr) => {\n        const { question, response, ...$ } = interactionsReporting[curr];\n\n        return {\n          ...acc,\n          [curr]: $,\n        };\n      }, {});\n\n      const state = getStore().getState();\n      const { idToSIdMap, sIdToIdMap, moduleVariables } = state;\n\n      const assessmentsWithDataRemoved = structuredClone(assessments);\n\n      for (const entry in assessmentsWithDataRemoved) {\n        if (assessmentsWithDataRemoved[entry].data) {\n          assessmentsWithDataRemoved[entry].data = {};\n        }\n      }\n\n      const assessmentsToSuspendData =\n        assessmentsWithDataRemoved &&\n        transformAssessmentsToSuspendData(assessmentsWithDataRemoved, state);\n\n      const suspendData = {\n        //\n        // if we're not caring about rehydrating score...\n        scoreData: transformScoreDataFromIdToSId(scoreData, state),\n        //\n        interactionsSeen: transformListFromIdToSId(\n          idToSIdMap,\n          interactionsSeen\n        ),\n        interactionsLocked: transformListFromIdToSId(\n          idToSIdMap,\n          interactionsLocked\n        ),\n\n        landingPagesSeenState,\n        //\n        // saving on LMS 'bandwidth'\n        // disabling the sending of these for the moment\n        // interactionsReporting data will appear in the cmi.interactions\n        // interactionsReporting: editedInteractionsReporting,\n        //\n        // this will need to come back i think when we add in\n        // the more targetted 'what assessment are we scoring'\n        assessments: assessmentsToSuspendData,\n\n        moduleVariables,\n        //\n        // !!!\n        // location is not saved on state. but is directly stored in suspend_data\n        // we need to ' cycle ' it back through so as not to be overridden to non-existent / '' / undefined\n        location,\n      };\n\n      SCORMToCollect(suspendData, 'data');\n\n      if (initialised) {\n        SCORM.set(API[version].suspend_data, JSON.stringify(suspendData));\n      }\n\n      const props = setCompleteOnExitOps(SCORM, version, exitProps);\n      SCORMToCollect(props);\n    }, 100);\n\n    return () => {\n      clearTimeout(delaySetSCORM);\n    };\n  }, [\n    initialised,\n    interactionsSeen,\n    landingPagesSeenState,\n    interactionsLocked,\n    interactionsReporting,\n    lastInteractionSeen,\n    assessments,\n    moduleVariables,\n  ]);\n\n  const [ri, setRI] = useState<string[]>([]);\n\n  // Interaction Reporting\n  // Store information about a session and user doing sortations and\n  // multichoices\n  useEffect(() => {\n    const completed = Object.keys(reportedInteractions);\n    const reported = Object.keys(interactionsReporting);\n\n    const delivered = reported\n      .filter(x => !ri.includes(x))\n      .filter(x => !completed.includes(x))\n      .map(r => {\n        const rep = interactionsReporting[r];\n\n        if (initialised) {\n          setCMIInteractions(\n            rep.reportable as ReportableInteractions,\n            version\n          )(rep);\n        }\n\n        const resultParsed = getResult(version, rep.result);\n\n        const qp = {\n          id: rep.id,\n          question: rep.question,\n          type: rep.type,\n          reportable: rep.reportable,\n          response: rep.response ? rep.response : 'pending',\n          correct: rep.correct ? rep.correct : 'pending',\n          result: resultParsed as any, // this is BAD\n          success: API_KEYS[version].result[rep.result],\n        };\n\n        SCORMToCollect({ [rep.id]: qp }, 'interactions');\n\n        return r;\n      });\n\n    setRI([...ri, ...delivered]);\n  }, [initialised, interactionsReporting]);\n\n  // SAVE FEEDBACK AS INTERACTION REPORTING\n  useEffect(() => {\n    if (!initialised) {\n      return;\n    }\n\n    const qid: qFunc = ({ id, key }) => {\n      SCORM.set(`cmi.interactions.${key}.id`, id);\n    };\n\n    const qtype: qFunc = ({ key, type }) => {\n      SCORM.set(`cmi.interactions.${key}.type`, type);\n    };\n\n    const qstudent: qFunc = ({ key, response }) => {\n      SCORM.set(`cmi.interactions.${key}.student_response`, response);\n    };\n\n    for (const [key, value] of Object.entries(feedback)) {\n      let count = SCORM.get('cmi.interactions._count');\n\n      qid({ id: `rating-${key}-fill-in`, key: count } as any);\n      qtype({ key: count, type: 'fill-in' } as any);\n      qstudent({ key: count, response: `${value.rating}` } as any);\n\n      SCORM.save();\n\n      count = SCORM.get('cmi.interactions._count');\n      qid({ id: `message-${key}`, key: count } as any);\n      qtype({ key: count, type: 'fill-in' } as any);\n      qstudent({ key: count, response: value.message } as any);\n\n      SCORM.save();\n    }\n  }, [initialised, feedback]);\n\n  // BOOKMARKING\n  // when the section comes into view, store that in the scorm so that\n  // we can get back there later\n  useEffect(() => {\n    // if there's only 1 interaction in the entire module. NO BOOKMARK\n    if (allInteractions.length === 1) {\n      console.log(\n        'there is only 1 interaction in the module. nothing to bookmark'\n      );\n      return;\n    }\n\n    const setLocationOnSuspendData = location => {\n      let suspend_data = SCORM.get(API[version].suspend_data);\n\n      if (suspend_data) {\n        suspend_data = JSON.parse(suspend_data);\n\n        SCORM.set(\n          API[version].suspend_data,\n          JSON.stringify({\n            ...suspend_data,\n            location,\n          })\n        );\n      }\n    };\n\n    const unsubscribe: any = pubSub.subscribe(\n      'SECTION_IN_VIEW',\n      ({ sectionInView }) => {\n        const currentLocation = getCurrentLocation() as string;\n\n        if (initialised && allInteractions[0]?.id === sectionInView?.id) {\n          //\n          // is first ' page ' of module. some logic to clear bookmarking ? set location to empty string'\n\n          location = '';\n          SCORM.set(API[version].location, location);\n          setLocationOnSuspendData(location);\n\n          return;\n        }\n\n        const [topicSId, interactionSId] =\n          (currentLocation && currentLocation.split('/')) || [];\n        const topic = getCurrentTopic();\n        const interaction = getInteractionsInTopic(topic).find((b: any) => {\n          const block = getBlockById(b.id);\n          //\n          return block && block?.props?.sId == interactionSId;\n        }) as Block;\n\n        // ignore any bookmarking that might happen within the quizEssment ( questions )\n\n        const subType = interaction?.meta?.subType;\n\n        if (topic?.props?.hiddenFromNextAndBackNavigation) {\n          //   DO NOT BOOKMARK WITHIN TOPICS THAT ARE hiddenFromNextAndBackNavigation !!!\n\n          return;\n        }\n\n        if (\n          subType &&\n          ['AssessmentQuestion', 'AssessmentResults'].includes(subType)\n        ) {\n          return;\n        }\n        //\n\n        location = currentLocation;\n\n        SCORMToCollect({\n          location,\n        });\n\n        // adding a temp kinda bookmark on the localStorageState\n        // uncomment etc as needed\n        // setLocalStorageStateBookmark(location);\n\n        if (initialised) {\n          SCORM.set(API[version].location, location);\n          //\n\n          setLocationOnSuspendData(location);\n        }\n      }\n    );\n\n    return () => {\n      unsubscribe();\n    };\n  }, [initialised]);\n\n  return null;\n};\n","import getTopics from 'services/apiHelpers/getTopics';\nimport { Block } from '@chameleoncreator/creator-app';\n\nexport default () => {\n  return getTopics().filter((t: Block) => {\n    return t?.props?.asAssessment;\n  });\n};\n","\nexport const setExitCompleteAction = () => {\n  return {\n    type: 'SET_EXIT_COMPLETE',\n    data: true,\n  };\n};\n","export const updateAssessmentAction = assessment => {\n  // console.log(assessment);\n\n  return {\n    type: 'UPDATE_ASSESSMENT',\n    data: assessment,\n  };\n};\n","import { on } from 'process';\nimport { useState, useEffect } from 'react';\nimport { CHAMELEON_CACHE_v1 } from 'services/imageCache';\n\ntype Src = string | undefined;\n\nexport const useCachedResource = (\n  cacheName: string = CHAMELEON_CACHE_v1,\n\n  src: string\n): Src => {\n  const [$, $$] = useState<Src>(undefined);\n\n  // i think it's these early returns that are breaking it\n\n  // if (!('caches' in self)) {\n  //   return src;\n  // }\n\n  // if (!src) {\n  //   return undefined;\n  // }\n\n  // caches.has(cacheName).then(hasCacheName => {\n  //   if (!hasCacheName) {\n  //     console.warn(`!caches.has(${cacheName})`);\n  //     return src;\n  //   }\n  // });\n\n  // knowing that we're sensitive to this being an antipattern\n  // we need something that at least achieves a ' cancel ' of the setState\n  // since the async / fetch etc\n  const setStateIfMounted = value => {\n    $$(value);\n  };\n\n  useEffect(() => {\n    if (!('caches' in self)) {\n      $$(src);\n      return;\n    }\n\n    if (!src) {\n      $$(undefined);\n      return;\n    }\n\n    try {\n      // console.log('caches.has(cacheName) ?');\n      // throw 'ERRORzzz !!!';\n\n      caches.has(cacheName).then(hasCacheName => {\n        if (!hasCacheName) {\n          console.warn(`!caches.has(${cacheName})`);\n          $$(src);\n          return;\n        }\n      });\n    } catch (err) {\n      console.log('_ _ _ _ _');\n      console.warn(err);\n      console.log('_ _ _ _ _');\n\n      $$(src);\n      return;\n    }\n    //\n\n    // carry on. . .\n\n    caches.open(cacheName).then(cache => {\n      cache\n        .match(src as RequestInfo)\n        .then(response => {\n          if (response) {\n            if (!response.ok) {\n              throw Error('invalid response');\n            }\n\n            return response.blob().then(blob => {\n              const objectURL = URL.createObjectURL(blob);\n              $$(objectURL);\n            });\n          } else {\n            return fetch(src as RequestInfo)\n              .then(response => {\n                if (!response.ok) {\n                  throw Error('invalid response');\n                }\n\n                const clonedResponse = response.clone();\n                cache.put(src as RequestInfo, response);\n                return clonedResponse;\n              })\n              .then(response => {\n                return response.blob();\n              })\n              .then(blob => {\n                const objectURL = URL.createObjectURL(blob);\n                $$(objectURL);\n              });\n          }\n        })\n        .catch(err => {\n          console.warn(err);\n          // if there IS an error we'll return src\n          cache.delete(src);\n          $$(src);\n        });\n    });\n\n    return () => {\n      //\n      // need to figure some solid way to bail from the promise\n    };\n  }, [cacheName, src]);\n\n  return $;\n};\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  createContext,\n  useLayoutEffect,\n  useRef,\n  useCallback,\n  useEffect,\n  useState,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport { Box } from '@chameleoncreator/creator-ui';\nimport useImageLoader from 'hooks/useImageLoader';\nimport { updateAssessmentAction } from 'actions/updateAssessmentAction';\nimport { useDispatch } from 'react-redux';\nimport { useCachedResource } from 'services/useCachedResource';\nimport { CHAMELEON_CACHE_v1 } from 'services/imageCache';\n\nconst Background = ({\n  background,\n  backgroundImageOpacity,\n  backgroundBlur = 0,\n}) => {\n  let cachedBackgroundImage = useCachedResource(CHAMELEON_CACHE_v1, background);\n\n  return (\n    <div\n      style={{\n        position: 'fixed',\n        left: 0,\n        top: 0,\n        width: '100vw',\n        height: '100vh',\n        ...(background && {\n          background: `url('${cachedBackgroundImage ||\n            background}') center / cover no-repeat`,\n        }),\n\n        opacity: backgroundImageOpacity / 100,\n        filter: `blur(${backgroundBlur}px)`,\n        // scale the thing up to not have blurry edges\n        ...(backgroundBlur > 0 && {\n          transformOrigin: 'center',\n          transform: 'scale(1.1)',\n        }),\n        pointerEvents: 'none',\n      }}\n    />\n  );\n};\n\nconst BackgroundWithParallax = props => {\n  const {\n    state,\n    interactions,\n    background,\n    backgroundImageOpacity,\n    backgroundBlur = 0,\n    parallaxValue = 10,\n    width,\n    height,\n  } = props;\n\n  const cachedBackgroundImage = useCachedResource(\n    CHAMELEON_CACHE_v1,\n    background\n  );\n\n  const [\n    refreshParallaxScrollOnTopicChange,\n    setRefreshParallaxScrollOnTopicChange,\n  ] = useState<boolean>(false);\n\n  const img = useRef<HTMLImageElement | null>(null);\n  const setImageRef = useCallback(node => {\n    img.current = node;\n  }, []);\n\n  const minHeight = `${100 + parallaxValue}vh`;\n\n  useEffect(() => {\n    if (!img.current) {\n      return;\n    }\n\n    const parallaxThrottler = () => {\n      // we can implement whatever more specific throttling approach...\n      requestAnimationFrame(parallax);\n    };\n\n    const parallax = () => {\n      if (!img.current) {\n        return;\n      }\n\n      const { innerHeight, scrollY } = window;\n      const imgTravel = img.current.offsetHeight - innerHeight;\n      const scrollTravel = innerHeight * (interactions.length - 1);\n      const scrollUnit = imgTravel / scrollTravel;\n      const scrollValue = scrollY * scrollUnit;\n\n      if (scrollValue > imgTravel) {\n        return;\n      }\n\n      //\n      img.current.style.transform = `translateY(-${scrollValue}px)`;\n    };\n    //\n\n    window.addEventListener('scroll', parallaxThrottler);\n    window.addEventListener('resize', parallaxThrottler);\n    parallax();\n\n    return () => {\n      window.removeEventListener('scroll', parallaxThrottler);\n      window.removeEventListener('resize', parallaxThrottler);\n    };\n  }, [setImageRef, refreshParallaxScrollOnTopicChange]);\n\n  useEffect(() => {\n    if (!img.current) {\n      return;\n    }\n\n    let tick;\n\n    if (document.body.scrollHeight > window.innerHeight) {\n      const imgHeightOnLoad = img.current.offsetHeight;\n\n      let checkLimit = 0;\n\n      tick = setInterval(() => {\n        if (!img.current) {\n          return;\n        }\n\n        if (img.current.offsetHeight !== imgHeightOnLoad) {\n          clearInterval(tick);\n          setRefreshParallaxScrollOnTopicChange(true);\n        }\n\n        //\n        if (checkLimit >= 300) {\n          clearInterval(tick);\n        }\n        checkLimit += 1;\n        //\n      }, 1);\n    }\n\n    return () => {\n      clearInterval(tick);\n    };\n  }, [setImageRef, setRefreshParallaxScrollOnTopicChange]);\n\n  return (\n    <_>\n      <div\n        style={{\n          position: 'fixed',\n          left: 0,\n          top: 0,\n          width: '100vw',\n          height: '100vh',\n          display: 'flex',\n          justifyContent: 'center',\n          pointerEvents: 'none',\n        }}\n      >\n        <img\n          ref={setImageRef}\n          src={cachedBackgroundImage || background}\n          style={{\n            all: 'initial',\n            position: 'absolute',\n            objectFit: 'cover',\n            minWidth: '100vw',\n            minHeight,\n            opacity: backgroundImageOpacity / 100,\n            filter: `blur(${backgroundBlur}px)`,\n          }}\n        />\n      </div>\n    </_>\n  );\n};\n\n// could / would / should put this in the store / redux\ninterface IAssessmentContext {\n  assessmentId: string;\n  submitted: {\n    [id: string]: {\n      answer: string[];\n      correctAnswer: string[];\n      isCorrect: boolean | undefined;\n      attemptCount: number;\n    };\n  };\n  resetQuestion: (id: string) => void;\n  setSubmitted: (\n    id: string,\n    answer: string[],\n    correctAnswer: string[],\n    isCorrect: boolean\n  ) => void;\n  maxAttempts: undefined | number;\n  answersWrappingAlignment?: string;\n  saveData?: boolean;\n  learnMoreResetsAssessment?: boolean;\n  name: string;\n  scoring: boolean | undefined;\n}\n\nconst GradientBackground = ({ backgroundGradientData }) => {\n  const {\n    backgroundPrimaryColor,\n    backgroundSecondaryColor,\n    backgroundGradientAngle = 0,\n  } = backgroundGradientData || {};\n\n  return (\n    <div\n      css={css({\n        position: 'fixed',\n        width: '100vw',\n        height: '100vh',\n        background: `linear-gradient(${backgroundGradientAngle}deg, ${backgroundSecondaryColor}, ${backgroundPrimaryColor})`,\n      })}\n    />\n  );\n};\n\nconst AssessmentContext = createContext<IAssessmentContext>({\n  assessmentId: '',\n  submitted: {},\n  resetQuestion: () => {},\n  setSubmitted: () => {},\n  maxAttempts: undefined,\n  answersWrappingAlignment: 'center',\n  saveData: false,\n  learnMoreResetsAssessment: false,\n  name: '',\n  scoring: undefined,\n});\n\nconst AssessmentContainer = props => {\n  const {\n    // state,\n    theme,\n    topic: assessment,\n    children,\n  } = props as any;\n\n  //\n  const {\n    maxAttempts,\n    answersWrappingAlignment,\n    saveData = false,\n    learnMoreResetsAssessment = false,\n  } = assessment?.props;\n\n  const dispatch = useDispatch();\n\n  const [submitted, setSubmitted] = useState<{\n    [id: string]: {\n      answer: string[];\n      correctAnswer: string[];\n      isCorrect: boolean;\n      attemptCount: number;\n    };\n  }>({});\n\n  const block: any = getBlockById(assessment.id);\n\n  const { name, scoring } = assessment.props;\n\n  let {\n    sId,\n    src,\n    backgroundImage,\n    backgroundImageOpacity = 100,\n\n    width,\n    height,\n    backgroundBlur = 0,\n    parallax = false,\n    parallaxValue = 10,\n    backgroundGradient,\n    backgroundSecondaryColor,\n    backgroundGradientAngle = 0,\n    backgroundGradientFullHeight = false,\n  }: any = getBlockById(assessment.id).props;\n\n  // dirty gotta try and cover for legacy backgroundImage\n  if (src) {\n    backgroundImage = src;\n  }\n\n  let backgroundColor =\n    block.props.backgroundColor || theme.backgroundColor || '';\n\n  if (backgroundGradient && backgroundGradientFullHeight) {\n    backgroundColor = `linear-gradient(${backgroundGradientAngle}deg, ${backgroundSecondaryColor}, ${block.props.backgroundColor})`;\n  }\n\n  const textColor = block.props.textColor || theme.textColor || '';\n\n  const opacity = backgroundImageOpacity / 100;\n\n  return (\n    <AssessmentContext.Provider\n      value={\n        {\n          assessmentId: assessment.id,\n          name: assessment.props.name,\n          scoring: assessment.props.scoring,\n          submitted,\n          resetQuestion(id: string) {\n            const updatedSubmissions = JSON.parse(JSON.stringify(submitted));\n            delete updatedSubmissions[id];\n\n            setSubmitted(updatedSubmissions);\n            //\n          },\n          setSubmitted(\n            id: string,\n            answer: string[],\n            correctAnswer: string[],\n            isCorrect: boolean\n          ) {\n            return;\n\n            // move all this into the question itself since using state\n\n            const attemptCount = submitted[id] ? submitted[id].attemptCount : 0;\n\n            dispatch(\n              updateAssessmentAction({\n                assessmentId: assessment.id,\n                questionData: {\n                  [id]: {\n                    answer,\n                    correctAnswer,\n                    isCorrect,\n                    attemptCount: attemptCount + 1,\n                  },\n                },\n              })\n            );\n\n            setSubmitted({\n              ...submitted,\n              [id]: {\n                answer,\n                correctAnswer,\n                isCorrect,\n                attemptCount: attemptCount + 1,\n              },\n            });\n          },\n          maxAttempts,\n          answersWrappingAlignment,\n          saveData,\n          learnMoreResetsAssessment,\n        } as IAssessmentContext\n      }\n    >\n      <Box\n        className=\"fader_-5s\"\n        id=\"main\"\n        tabindex=\"-1\"\n        css={css`\n          position: relative;\n          // width: 100vw;\n          // height: 100vh;\n          background: ${backgroundColor};\n        `}\n      >\n        {backgroundGradient && !backgroundGradientFullHeight && (\n          <GradientBackground\n            backgroundGradientData={{\n              backgroundGradientAngle,\n              backgroundPrimaryColor: backgroundColor,\n              backgroundSecondaryColor,\n            }}\n          />\n        )}\n\n        {window.dev() || !parallax ? (\n          <Background\n            background={backgroundImage}\n            backgroundImageOpacity={backgroundImageOpacity}\n            backgroundBlur={backgroundBlur}\n          />\n        ) : (\n          <BackgroundWithParallax\n            // state={state}\n            interactions={children.props.interactions}\n            background={backgroundImage}\n            backgroundImageOpacity={backgroundImageOpacity}\n            backgroundBlur={backgroundBlur}\n            parallaxValue={parallaxValue}\n            width={width}\n            height={height}\n          />\n        )}\n\n        {children}\n      </Box>\n    </AssessmentContext.Provider>\n  );\n};\n\nexport default AssessmentContainer;\nexport { AssessmentContext };\n","import { isValidElement } from 'react';\n\n/**\n * detect IE\n * returns version of IE or false, if browser is not Internet Explorer\n */\nfunction isIE() {\n  var ua = window.navigator.userAgent;\n\n  // Test values; Uncomment to check result …\n\n  // IE 10\n  // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';\n\n  // IE 11\n  // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';\n\n  // Edge 12 (Spartan)\n  // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';\n\n  // Edge 13\n  // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';\n\n  var msie = ua.indexOf('MSIE ');\n  if (msie > 0) {\n    // IE 10 or older => return version number\n    return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n  }\n\n  var trident = ua.indexOf('Trident/');\n  if (trident > 0) {\n    // IE 11 => return version number\n    var rv = ua.indexOf('rv:');\n    return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n  }\n\n  // var edge = ua.indexOf('Edge/');\n  // if (edge > 0) {\n  // \t// Edge (IE 12+) => return version number\n  // \treturn parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n  // }\n\n  // other browser\n  return false;\n}\n\nexport default isIE;\n","import isIE from 'services/isIE';\n\nconst ie11VerticalFlexCenterFix = height =>\n\tisIE()\n\t\t? `\n&::before {\n\tdisplay: block;\n\tcontent: '';\n\t${height}\n}`\n\t\t: '';\n\nexport default ie11VerticalFlexCenterFix;\n","function ReplaceWithPolyfill() {\n  'use-strict'; // For safari, and IE > 10\n  var parent = this.parentNode,\n    i = arguments.length,\n    currentNode;\n  if (!parent) return;\n  if (!i)\n    // if there are no arguments\n    parent.removeChild(this);\n  while (i--) {\n    // i-- decrements i and returns the value of i before the decrement\n    currentNode = arguments[i];\n    if (typeof currentNode !== 'object') {\n      currentNode = this.ownerDocument.createTextNode(currentNode);\n    } else if (currentNode.parentNode) {\n      currentNode.parentNode.removeChild(currentNode);\n    }\n    // the value of \"i\" below is after the decrement\n    if (!i)\n      // if currentNode is the first argument (currentNode === arguments[0])\n      parent.replaceChild(currentNode, this);\n    // if currentNode isn't the first\n    else parent.insertBefore(currentNode, this.previousSibling);\n  }\n}\nif (!Element.prototype.replaceWith)\n  Element.prototype.replaceWith = ReplaceWithPolyfill;\nif (!CharacterData.prototype.replaceWith)\n  CharacterData.prototype.replaceWith = ReplaceWithPolyfill;\nif (!DocumentType.prototype.replaceWith)\n  DocumentType.prototype.replaceWith = ReplaceWithPolyfill;\n","import { emptyString } from 'react-select/src/utils';\nimport isIE from 'services/isIE';\nimport 'services/replaceWithPolyfill';\nimport 'services/removePolyfill';\nimport { CALCULATED_LINE_HEIGHT_OFFSET } from 'styles/variables';\nimport getStore from 'services/getStore';\n\nlet linksShouldPopup = false;\n\nconst lineBreak = () => {\n  const _ = document.createElement('span');\n  _.className = 'chameleon-line-break';\n  _.style.display = 'block';\n  _.style.visibility = 'hidden';\n  _.innerHTML = '&#65279;';\n\n  return _;\n};\n\nconst updateReadOnlyText = containerElement => {\n  if (!containerElement) {\n    return;\n  }\n\n  // adding in the selector for multichoice answers\n  // so they can receive the same formatting\n  // they have always had the chamelon-text class removed because their styles are local\n  //\n  const chameleonText = Array.from(\n    containerElement.querySelectorAll(\n      '.chameleon-text *, .chameleon-text-multichoice-answer *'\n    )\n  );\n\n  chameleonText.forEach((entry: any) => {\n    // updated\n    // if entry is a paragraph specifically and has no content\n    // that's slate adding the empty p ( which would have no height )\n    // we replace it with our lineBreak\n\n    if (entry.tagName.toLowerCase() === 'p' && !entry.innerText.toString()) {\n      entry.replaceWith(lineBreak());\n    }\n\n    // since we need to clear out any other tags that could interfere with screen readers\n    //\n    if (\n      ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(entry.tagName.toLowerCase())\n    ) {\n      // because slate wraps the p tag ( which is the content ) with the alignment div\n      // we remove the div and set the appropriate textAlign style on the heading itself\n      const textAlignments = Array.from(entry.querySelectorAll('div'));\n      textAlignments.forEach((div: any) => {\n        if (div.className.includes('chameleon-text-align')) {\n          let dataType = div.getAttribute('data-type');\n\n          const rE = new RegExp(\n            `<div class=\"${div.className}\" data-type=\"${dataType}\">`,\n            'g'\n          );\n\n          div.outerHTML = div.outerHTML.replace(rE, '');\n\n          if (dataType) {\n            dataType = dataType.replace('textAlign', '').toLowerCase();\n          }\n\n          entry.style.textAlign = dataType;\n        }\n      });\n\n      const pTags = Array.from(entry.querySelectorAll('p'));\n      pTags.forEach((p: any) => {\n        if (p.innerText.toString()) {\n          p.outerHTML = p.outerHTML\n            .replace(/\\<p data-type=\\\"paragraph\\\"\\>/g, '')\n            .replace(/\\<\\/p\\>/g, '<br>');\n        }\n      });\n    }\n\n    if (entry.dataset.type === 'indent') {\n      const closestLi = entry.closest('li');\n\n      if (closestLi) {\n        closestLi.classList.add('indent');\n      } else {\n        entry.classList.add('indent-alt');\n      }\n    }\n\n    // if ul, ol is empty. remove it\n    if (['ul', 'ol'].includes(entry.tagName.toLowerCase())) {\n      if (!entry.innerHTML || !entry.innerText) {\n        // entry.remove();\n        // console.log(entry);\n      }\n    }\n\n    // if li doesn't have a span wrapping content. is old way\n    // update\n    if (entry.tagName.toLowerCase() === 'li') {\n      entry.classList.remove('chameleon-li');\n      const liInnerHTML = entry.innerHTML;\n      entry.innerHTML = `<span>${liInnerHTML}</span>`;\n    }\n\n    if (entry.tagName.toLowerCase() === 'a') {\n      const spans = Array.from(entry.querySelectorAll('span'));\n      spans.forEach((span: any) => {\n        // we remove the color if it's been set\n        // since it creates conflict with the link colors and causes confusion\n        span.style.color = '';\n      });\n    }\n\n    const fontSizeSpans = Array.from(\n      entry.querySelectorAll('[data-type=\"fontSize\"]')\n    );\n\n    fontSizeSpans.forEach((s: any) => {\n      const fontSize = parseInt(window.getComputedStyle(s).fontSize, 10);\n      const calculatedLineHeight =\n        fontSize <= 18 ? 1.5 : fontSize * CALCULATED_LINE_HEIGHT_OFFSET;\n      //\n      s.style.lineHeight = `${calculatedLineHeight}px`;\n    });\n\n    if (isIE()) {\n      if (entry.style.fontFamily === '') {\n        entry.style.fontFamily = '';\n      }\n    }\n  });\n\n  chameleonText.forEach((entry: any) => {\n    entry.innerHTML = entry.innerHTML\n      .replace(/…/g, '&hellip;')\n      .replace(/—/g, '&mdash;')\n      .replace(/–/g, '&ndash;');\n  });\n\n  chameleonText.forEach((entry: any) => {\n    entry.innerHTML = entry.innerHTML\n      .replace(/…/g, '&hellip;')\n      .replace(/—/g, '&mdash;')\n      .replace(/–/g, '&ndash;');\n  });\n\n  // chameleonText.forEach((entry: any) => {\n  //   entry.innerHTML = entry.innerHTML.replace(\n  //     /\\$\\$(.*?)\\$\\$/g,\n  //     // getStore().getState().moduleVariables?.learnerName\n  //     window['moduleVariables']?.learnerName\n  //   );\n  // });\n\n  const ulols: HTMLElement[] = Array.from(\n    containerElement.querySelectorAll(\n      '.chameleon-text div > ul, .chameleon-text div > ol, .chameleon-text-multichoice-answer div > ul, .chameleon-text-multichoice-answer div > ol'\n    )\n  );\n\n  // console.log(ulols);\n\n  ulols.forEach((ulol: HTMLElement) => {\n    let ulol_: HTMLElement[] = Array.from(ulol.querySelectorAll('ul, ol'));\n    ulol_.reverse();\n    // const chameleonTextReversed = [...Array.from(ulol_)].reverse();\n\n    ulol_.forEach((entry: HTMLElement) => {\n      if (['ul', 'ol'].includes(entry.tagName.toLowerCase())) {\n        // console.log(entry, entry.previousSibling);\n\n        const previousSibling = entry.previousSibling as HTMLElement;\n\n        if (!previousSibling) {\n          return;\n        }\n\n        let closestLi;\n\n        const previousSiblingTagName = previousSibling?.tagName?.toLowerCase();\n\n        if (previousSiblingTagName === 'li') {\n          closestLi = previousSibling;\n        } else if (['ul', 'ol'].includes(previousSiblingTagName)) {\n          // console.log(previousSibling, 'is of type :', previousSibling.tagName);\n          closestLi = previousSibling.lastChild;\n        }\n\n        if (closestLi) {\n          closestLi.appendChild(entry);\n        }\n      }\n    });\n  });\n\n  if (!linksShouldPopup) {\n    let IS_POPUP;\n\n    const oldWidth = window.innerWidth;\n    const oldHeight = window.innerHeight;\n\n    window.resizeBy(-1, -1);\n\n    setTimeout(() => {\n      const newWidth = window.innerWidth;\n      const newHeight = window.innerHeight;\n\n      if (newWidth !== oldWidth && newHeight !== oldHeight) {\n        IS_POPUP = true;\n        window.resizeBy(1, 1);\n      }\n    }, 1000 / 60);\n\n    document.addEventListener('click', (e: any) => {\n      if (e.target.tagName.toLowerCase() === 'a') {\n        const link = e.target;\n        const { href, target } = link;\n\n        if (IS_POPUP && target === '_blank') {\n          // if we're in a popup context. . .\n          e.preventDefault();\n          //\n          link.setAttribute('target', 'popup');\n\n          window.open(\n            href,\n            'popup',\n            'width=' + screen.width + ', height=' + screen.height\n          );\n        }\n      }\n    });\n    linksShouldPopup = true;\n  }\n\n  console.log();\n};\n\nexport default updateReadOnlyText;\n","import { Block } from '@chameleoncreator/creator-app';\n\nexport interface InteractionStyle {\n  background?: string;\n  foreground?: string;\n  buttonBackground?: string;\n  buttonForeground?: string;\n}\n\nexport interface InteractionProps {\n  name: string;\n  columnCount: number;\n  columnsReversed: boolean;\n  style: InteractionStyle;\n}\n\nexport const reverse = <T = any>(a: T, b: T, reversed: boolean): [T, T] => {\n  return reversed ? [a, b] : [b, a];\n};\n\nexport const repeat = (a: () => Block, count: number): Block[] => {\n  return Array.from(Array(count)).map(a);\n};\n","import { Block, cloneBlock } from '@chameleoncreator/creator-app';\nimport { createBlock } from './block';\nimport { reverse } from './interactions/interaction';\n\nexport type contentFor = (i: number) => () => Block;\n\nexport const createLayout = (\n  content: (i: number) => () => Block,\n  count: number,\n  reversed: boolean\n): Block => {\n  const layout = [\n    (content: contentFor, reversed: boolean): Block => {\n      return createBlock(\n        'SingleColumnLayout',\n        reverse(\n          createBlock('Column', [content(0)()]),\n          createBlock('Column', [content(1)()]),\n          reversed\n        )\n      );\n    },\n    (content: contentFor, reversed: boolean) => {\n      return createBlock(\n        'TwoColumnLayout',\n        reverse(\n          createBlock('Column', [content(0)()]),\n          createBlock('Column', [content(1)()]),\n          reversed\n        )\n      );\n    },\n  ];\n\n  return layout[count](content, reversed);\n};\n\n// returns a new block to be saved\n// TODO: Implement\nconst swapColumnOrder = (block: Block): Block => {\n  const newBlock = cloneBlock(block);\n  const newChildren = [\n    newBlock.children![1] as Block,\n    newBlock.children![0] as Block,\n  ];\n  newBlock.children = newChildren;\n\n  return newBlock;\n};\n\n// returns a new block to be saved\nconst changeColumnCount = (block: Block, count: number): Block => {\n  const newBlock = cloneBlock(block);\n\n  if (count === 2) {\n    newBlock.type = 'TwoColumnLayout';\n  } else {\n    newBlock.type = 'SingleColumnLayout';\n  }\n  return newBlock;\n};\n\nconst isOneColumn = (str: string): boolean => {\n  if (str.includes('OneColumn')) {\n    return true;\n  }\n\n  return false;\n};\n\nconst isReversed = (str: string): boolean => {\n  if (str.includes('Reversed')) {\n    return true;\n  }\n\n  return false;\n};\n\nexport const changeLayout = (\n  block: Block,\n  currentLayout: string,\n  change: string\n): Block => {\n  // console.log(currentLayout, change);\n\n  let newBlock = block;\n  if (currentLayout === change) {\n    return block;\n  }\n\n  if (isReversed(currentLayout) !== isReversed(change)) {\n    newBlock = swapColumnOrder(newBlock);\n  }\n\n  if (isOneColumn(currentLayout) !== isOneColumn(change)) {\n    if (isOneColumn(change)) {\n      newBlock = changeColumnCount(block, 1);\n    } else {\n      newBlock = changeColumnCount(block, 2);\n    }\n  }\n\n  return newBlock;\n};\n","import pdf_default from 'assets/pdf_thumbnail_26012023.png';\nimport { createBlock } from 'factories/block';\nimport { createEditableBtn } from './editableBtn';\n\n// defaults to true\n// useBackgroundControls: useBackgroundControls !== undefined ? useBackgroundControls : true,\n\nexport type MediaBlock = {\n  child?: number;\n  src?: string;\n  name?: string;\n  style?: { [key: string]: number | string };\n  removeTypes?: string[];\n  forceInclude?: string[];\n  useBackgroundControls?: boolean;\n  bulletColor?: string;\n  fit?: string;\n  imgPlaceholderIndex?: number;\n  isAdditionalMedia?: boolean;\n  type?: string;\n};\n\nconst createTranscriptBlock = useBackgroundControls => {\n  return createBlock(\n    'Transcript',\n    [\n      createBlock('Text', [], {\n        props: {\n          useBackgroundControls:\n            useBackgroundControls !== undefined ? useBackgroundControls : true,\n        },\n      }),\n      createEditableBtn({ label: 'Continue' }),\n    ],\n    {}\n  );\n};\n\nexport const createMediaBlock = (props: MediaBlock) => {\n  const {\n    child = 1,\n    src = undefined,\n    removeTypes = [],\n    forceInclude = [],\n    useBackgroundControls,\n    bulletColor,\n    fit,\n    imgPlaceholderIndex,\n    isAdditionalMedia,\n  } = props;\n\n  // if is an image\n  // image specific props;\n\n  return createBlock(\n    'Media',\n    [\n      createBlock('Text', [], {\n        props: {\n          useBackgroundControls:\n            useBackgroundControls !== undefined ? useBackgroundControls : true,\n          bulletColor,\n        },\n      }),\n\n      createBlock('Image', [], {\n        props: {\n          src: child === 1 && src ? src : undefined,\n          fit,\n        },\n      }),\n\n      createBlock('Video', [createTranscriptBlock(useBackgroundControls)], {\n        props: {\n          src: child === 2 && src ? src : 'https://vimeo.com/512335672',\n        },\n      }),\n      createBlock('SVG', [], {\n        props: {\n          src: child === 3 && src,\n        },\n      }),\n      createBlock('Embed', [], {\n        props: {\n          src: child === 4 && src,\n        },\n      }),\n      createBlock('Audio', [createTranscriptBlock(useBackgroundControls)], {\n        props: {\n          src:\n            child === 5 && src\n              ? src\n              : 'https://www.bensound.com/bensound-music/bensound-dubstep.mp3',\n        },\n      }),\n      createBlock(\n        'PDF',\n        [\n          createBlock(\n            'OpenPDF',\n            [\n              createBlock('Text', [], {\n                props: {},\n              }),\n            ],\n            {\n              props: {\n                src: pdf_default,\n                fit: 'cover',\n              },\n            }\n          ),\n        ],\n        {\n          props: {\n            src: child === 6 && src ? src : '',\n            displayInline: false,\n          },\n        }\n      ),\n    ],\n    {\n      props: {\n        name: props.name || '',\n        style: props.style || {},\n        child,\n        removeTypes,\n        forceInclude,\n        src,\n        imgPlaceholderIndex,\n        isAdditionalMedia,\n      },\n      meta: {\n        subType: 'Media',\n      },\n    }\n  );\n};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps, repeat } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { findBlocksIn } from 'selectors/block';\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { flatten } from 'factories/utils';\nimport { colors } from 'styles/variables';\nimport { createContinueBtn } from './continueBtn';\nimport { getSId } from '../utils';\nimport { createMediaBlock } from './media';\nimport placeholder from 'assets/addImg@3x.svg';\n\nconst { lGrey0 } = colors;\n\nexport enum ImageChoice {\n  Left = 'Left',\n  Right = 'Right',\n  Fill = 'Fill',\n  None = 'None',\n}\n\nexport type AccordionInteractionProps = InteractionProps & {\n  numberOfAccordions: number;\n  imgChoice: ImageChoice;\n};\n\nconst makeLeftChoice = (imgBlock: Block, textBlock: Block): Block[] => {\n  return [\n    createBlock('Column', [imgBlock]),\n    createBlock('Column', [textBlock]),\n  ];\n};\n\nconst makeRightChoice = (imgBlock: Block, textBlock: Block): Block[] => {\n  return [\n    createBlock('Column', [textBlock]),\n    createBlock('Column', [imgBlock]),\n  ];\n};\n\nconst makeFillChoice = (imgBlock: Block, textBlock: Block): Block[] => {\n  return [createBlock('Column', [imgBlock, textBlock])];\n};\n\nconst makeNoneChoice = (textBlock: Block): Block[] => {\n  return [createBlock('Column', [textBlock])];\n};\n\nconst createChoice = (choice: ImageChoice = ImageChoice.None): Block[] => {\n  const media = [\n    createBlock('Image'),\n    createMediaBlock({\n      child: 1,\n      type: 'Accordion_Media',\n      removeTypes: ['Embed'],\n    }),\n  ][1];\n\n  switch (choice) {\n    case ImageChoice.Left: {\n      return makeLeftChoice(media, createBlock('Text'));\n    }\n    case ImageChoice.Right: {\n      return makeRightChoice(media, createBlock('Text'));\n    }\n    case ImageChoice.Fill: {\n      return makeFillChoice(media, createBlock('Text'));\n    }\n    case ImageChoice.None: {\n      return makeNoneChoice(createBlock('Text'));\n    }\n  }\n};\n\nconst collectLeftChoice = (b: Block, blocks: Blocks): Block[] => {\n  const bs = b.children as Block[];\n\n  if (bs.length === 1) {\n    // if this is the case then we got broken somewhere\n    // return the content with no image. repeating for right and fill layouts also\n    return collectNoneChoice(b, blocks);\n  }\n\n  const bs0 = (blocks[bs[0].id].children as Block[])[0];\n  const bs1 = (blocks[bs[1].id].children as Block[])[0];\n\n  return [bs0, bs1];\n};\n\nconst collectRightChoice = (b: Block, blocks: Blocks): Block[] => {\n  const bs = b.children as Block[];\n\n  if (bs.length === 1) {\n    return collectNoneChoice(b, blocks);\n  }\n\n  const bs0 = (blocks[bs[0].id].children as Block[])[0];\n  const bs1 = (blocks[bs[1].id].children as Block[])[0];\n  return [bs1, bs0];\n};\n\nconst collectFillChoice = (b: Block, blocks: Blocks): Block[] => {\n  const bs = b.children as Block[];\n  const bs0 = (blocks[bs[0].id].children as Block[])[0];\n  const bs1 = (blocks[bs[0].id].children as Block[])[1];\n\n  return [bs0, bs1];\n};\n\nconst collectNoneChoice = (b: Block, blocks: Blocks): Block[] => {\n  const bs = b.children as Block[];\n  const bs0 = (blocks[bs[0].id].children as Block[])[0];\n\n  return [\n    createMediaBlock({\n      child: 1,\n      type: 'Accordion_Media',\n      src: placeholder,\n      removeTypes: ['Embed'],\n    }),\n    bs0,\n  ];\n};\n\nconst collectFromChoice = (\n  choice: ImageChoice,\n  b: Block,\n  blocks: Blocks\n): Block[] => {\n  switch (choice) {\n    case ImageChoice.Left: {\n      return collectLeftChoice(b, blocks);\n    }\n    case ImageChoice.Right: {\n      return collectRightChoice(b, blocks);\n    }\n    case ImageChoice.Fill: {\n      return collectFillChoice(b, blocks);\n    }\n    case ImageChoice.None: {\n      return collectNoneChoice(b, blocks);\n    }\n  }\n};\n\nexport const createAccordionFieldBlock = (img: ImageChoice) => (): Block => {\n  return createBlock('AccordionField', [\n    createBlock('AccordionHeader', [createBlock('Text')]),\n    createBlock('AccordionBody', [...createChoice(img)], {\n      meta: { imageChoice: img },\n    }),\n  ]);\n};\n\nexport const createAccordionBlock = (\n  count: number,\n  img: ImageChoice\n): Block => {\n  const createAFB = createAccordionFieldBlock(img);\n  return createBlock('Accordion', [...repeat(createAFB, count)]);\n};\n\nexport const removeAccordionField = (block: Block, position: number): Block => {\n  if (block.type !== 'Accordion') {\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 1);\n    return nextBlock;\n  }\n\n  return block;\n};\n\nexport const addAccordionField = (block: Block, position: number): Block => {\n  if (block.type !== 'Accordion') {\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(\n      position,\n      0,\n      createAccordionFieldBlock(ImageChoice.None)()\n    );\n    return nextBlock;\n  }\n  return block;\n};\n\n// TODO: Test\nexport const changeImageChoice = (blocks: Blocks) => (\n  block: Block,\n  imgChoice: ImageChoice\n): [Block, Blocks] => {\n  if (block.type !== 'Interaction' || block.meta!.subType !== 'Accordion') {\n    throw new Error('Must pass an accordion interaction');\n  }\n\n  const newIBlock = cloneBlock(block);\n  const abBlocks = findBlocksIn(\n    blocks,\n    newIBlock,\n    r => r.type === 'AccordionBody'\n  );\n\n  const newBlocks = abBlocks\n    .map(\n      (b: Block): Blocks => {\n        const newBlock = cloneBlock(b);\n        const meta = block.meta as any;\n\n        const current = collectFromChoice(\n          meta.imageChoice || 'Left',\n          newBlock,\n          blocks\n        );\n\n        const currentText =\n          blocks[current[1].id].type === 'Text' ? current[1] : current[0];\n        const currentImage =\n          blocks[current[1].id].type === 'Text' ? current[0] : current[1];\n\n        let newChoice;\n\n        switch (imgChoice) {\n          case ImageChoice.Left: {\n            newChoice = [\n              createBlock('Column', [currentImage]),\n              createBlock('Column', [currentText]),\n            ];\n            break;\n          }\n          case ImageChoice.Right: {\n            newChoice = [\n              createBlock('Column', [currentText]),\n              createBlock('Column', [currentImage]),\n            ];\n            break;\n          }\n          case ImageChoice.Fill: {\n            newChoice = [createBlock('Column', [currentImage, currentText])];\n            break;\n          }\n          case ImageChoice.None: {\n            newChoice = [createBlock('Column', [currentText])];\n            break;\n          }\n        }\n\n        newBlock.children = newChoice;\n\n        const [newBlocks] = flatten(newBlock);\n\n        return newBlocks;\n      }\n    )\n    .reduce((acc, c) => ({ ...acc, ...c }), {} as Blocks);\n\n  newIBlock.meta = { ...newIBlock.meta, imageChoice: imgChoice } as any;\n\n  return [newIBlock, newBlocks];\n};\n\nconst contentForColumn = (count: number, imgChoice: ImageChoice) => (\n  i: number\n) => {\n  return [\n    () =>\n      createMediaBlock({\n        child: 0,\n      }),\n    () =>\n      createBlock('InteractionColumn', [\n        createAccordionBlock(count, imgChoice),\n        createMediaBlock({\n          child: 0,\n          isAdditionalMedia: true,\n        }),\n      ]),\n  ][i];\n};\n\nexport const removeAccordionPanel = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'Accordion') {\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 1);\n\n    return [nextBlock];\n  }\n  return [block, undefined];\n};\n\nexport const addAccordionPanel = (\n  block: Block,\n  position: number,\n  choice: ImageChoice\n): [Block, Blocks?] => {\n  if (block.type === 'Accordion') {\n    const accordionPanelBlock = createAccordionFieldBlock(choice)();\n    const accordionPanelBlockRef = { id: accordionPanelBlock.id, type: 'Ref' };\n    const [newBlocks] = flatten(accordionPanelBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 0, accordionPanelBlockRef);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const createAccordionInteractionBlock = (\n  props: AccordionInteractionProps\n) => {\n  const {\n    headingTextColor = '#fff',\n    headingColor = lGrey0,\n    fieldBodyTextColor,\n    fieldBodyBackgroundColor = '#fff',\n    lockDown = 0,\n    style,\n  } = props as any;\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(\n        contentForColumn(props.numberOfAccordions, props.imgChoice),\n        props.columnCount,\n        props.columnsReversed\n      ),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style,\n        headingTextColor,\n        headingColor,\n        fieldBodyTextColor,\n        fieldBodyBackgroundColor,\n        lockDown,\n      },\n      meta: {\n        subType: 'Accordion',\n        layout: `${props.columnCount === 0 ? 'OneColumn' : 'TwoColumns'}${\n          props.columnsReversed ? 'Reversed' : ''\n        }`,\n        imageChoice: props.imgChoice,\n      },\n    }\n  );\n};\n\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps, repeat } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { colors } from 'styles/variables';\nimport { createMediaBlock } from './media';\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { flatten } from 'factories/utils';\nimport { createContinueBtn } from './continueBtn';\nimport { getSId } from '../utils';\n\nconst { lGrey0 } = colors;\n\nlet parsedFlipCardLayout;\n\nexport type FlipcardInteractionProps = InteractionProps & {\n  answerCount: number;\n};\n\nexport const createFlipcardsBlock = (count: number) => {\n  requestAnimationFrame(() => (parsedFlipCardLayout = null));\n\n  return createBlock('Flipcards', [\n    ...repeat(\n      () =>\n        createBlock('Flipcard', [\n          createMediaBlock({\n            src: undefined,\n            child: parsedFlipCardLayout[0],\n            useBackgroundControls: false,\n          }),\n          createMediaBlock({\n            src: undefined,\n            child: parsedFlipCardLayout[1],\n            useBackgroundControls: false,\n          }),\n        ]),\n      count\n    ),\n  ]);\n};\n\nexport const addFlipcard = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'Flipcards') {\n    const flipcardBlock = createBlock('Flipcard', [\n      createMediaBlock({\n        src: undefined,\n        child: 1,\n        useBackgroundControls: false,\n      }),\n      createMediaBlock({\n        src: undefined,\n        child: 0,\n        useBackgroundControls: false,\n        bulletColor: '#fff',\n      }),\n    ]);\n\n    const flipcardBlockRef = { id: flipcardBlock.id, type: 'Ref' };\n    const [newBlocks] = flatten(flipcardBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 0, flipcardBlockRef);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const removeFlipcard = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'Flipcards') {\n    const flipcardBlock = createBlock('Flipcard', [\n      createMediaBlock({\n        src: undefined,\n        child: 1,\n        useBackgroundControls: false,\n      }),\n      createMediaBlock({\n        src: undefined,\n        child: 0,\n        useBackgroundControls: false,\n        bulletColor: '#fff',\n      }),\n    ]);\n\n    const [newBlocks] = flatten(flipcardBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 1);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nconst contentForColumn = (count: number) => (i: number) => {\n  return [\n    () =>\n      createMediaBlock({\n        child: 0,\n      }),\n    () =>\n      createBlock('InteractionColumn', [\n        createFlipcardsBlock(count),\n        createMediaBlock({\n          child: 0,\n          isAdditionalMedia: true,\n        }),\n      ]),\n  ][i];\n};\n\nexport const createFlipcardInteractionBlock = (\n  props: FlipcardInteractionProps\n) => {\n  const {\n    flipcardFrontColor = '#fff',\n    flipcardBackColor = lGrey0,\n    flipcardFrontTextColor = lGrey0,\n    flipcardBackTextColor = '#fff',\n    flipcardWidth = 300,\n    flipcardHeight = 300,\n    alignTextTop = 0,\n    flipcardLayout,\n    lockDown = 0,\n    style,\n  } = props as any;\n\n  //\n  // this is super dirty. so need to find the ' right ' way to get these props up there\n  parsedFlipCardLayout = {\n    imageText: [1, 0],\n    imageImage: [1, 1],\n    textText: [0, 0],\n  }[flipcardLayout || 'imageText'];\n  //\n  //\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(contentForColumn(props.answerCount), 0, true),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style,\n        flipcardFrontColor,\n        flipcardBackColor,\n        flipcardFrontTextColor,\n        flipcardBackTextColor,\n        flipcardWidth,\n        flipcardHeight,\n        alignTextTop,\n        lockDown,\n      },\n      meta: {\n        subType: 'FlipCard',\n        layout: 'OneColumnReversed',\n      },\n    }\n  );\n};\n\nexport const create = createFlipcardInteractionBlock;\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { createMediaBlock } from './media';\nimport { createContinueBtn } from './continueBtn';\nimport { getSId } from '../utils';\n\nexport type ImageInteractionProps = InteractionProps & {};\n\nconst contentForColumn = props => (i: number) => {\n  return [\n    () =>\n      createMediaBlock({\n        child: 0,\n      }),\n    () =>\n      createBlock('InteractionColumn', [\n        createMediaBlock(props),\n        createMediaBlock({\n          child: 0,\n          isAdditionalMedia: true,\n        }),\n      ]),\n  ][i];\n};\n\nexport const createImageInteractionBlock = (props: any) => {\n  // will fix this up later with the ' prop 'er definitions etc\n\n  const { lockDown = 0, style } = props as any;\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(\n        contentForColumn(props),\n        props.columnCount,\n        props.columnsReversed\n      ),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style,\n        lockDown,\n      },\n      meta: {\n        subType: 'TextAndImage',\n        layout: `${props.columnCount === 0 ? 'OneColumn' : 'TwoColumns'}${\n          props.columnsReversed ? 'Reversed' : ''\n        }`,\n      },\n    }\n  );\n};\n\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { InteractionProps, reverse, repeat } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { colors } from 'styles/variables';\nimport { flatten } from 'factories/utils';\nimport { createContinueBtn } from './continueBtn';\nimport { getSId } from '../utils';\nimport { createMediaBlock } from './media';\n\nconst { lGrey0 } = colors;\n\nexport type CarouselInteractionProps = InteractionProps & {\n  numberOfSlides: number;\n};\n\nexport const createSlideBlock = (): Block => {\n  return createBlock('Slide', [\n    createBlock('Image', [], {\n      props: {\n        src: undefined,\n        fit: 'contain', // was cover\n      },\n    }),\n\n    createBlock('Text'),\n  ]);\n};\n\nexport const createCarouselBlock = (count: number): Block => {\n  return createBlock('Carousel', [...repeat(createSlideBlock, count)]);\n};\n\nexport const removeCarouselSlide = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'Carousel') {\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 1);\n\n    return [nextBlock, undefined];\n  }\n  return [block, undefined];\n};\n\nexport const addCarouselSlide = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'Carousel') {\n    const slideBlock = createSlideBlock();\n    const slideBlockRef = { id: slideBlock.id, type: 'Ref' };\n    const [newBlocks] = flatten(slideBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 0, slideBlockRef);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nconst contentForColumn = (slideCount: number) => (i: number) => {\n  return [\n    () =>\n      createMediaBlock({\n        child: 0,\n      }),\n    () =>\n      createBlock('InteractionColumn', [\n        createCarouselBlock(slideCount),\n        createMediaBlock({\n          child: 0,\n          isAdditionalMedia: true,\n        }),\n      ]),\n  ][i];\n};\n\nexport const createCarouselInteractionBlock = (\n  props: CarouselInteractionProps\n) => {\n  const {\n    carouselColor = '#fff',\n    carouselTextColor = lGrey0,\n    lockDown = 0,\n    style,\n  } = props as any;\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(\n        contentForColumn(props.numberOfSlides),\n        props.columnCount,\n        props.columnsReversed\n      ),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style,\n        carouselColor,\n        carouselTextColor,\n        lockDown,\n      },\n      meta: {\n        subType: 'Carousel',\n        layout: `${props.columnCount === 0 ? 'OneColumn' : 'TwoColumns'}${\n          props.columnsReversed ? 'Reversed' : ''\n        }`,\n      },\n    }\n  );\n};\n\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { createContinueBtn } from './continueBtn';\nimport { createEditableBtn } from './editableBtn';\nimport Correct_default from 'assets/CC_Correct.png';\n//CC_Scorable Images_Correct.png';\nimport Incorrect_default from 'assets/CC_Incorrect.png';\n// CC_Scorable Images_Incorrect.png';\nimport Attempt_default from 'assets/CC_TryAgain.png';\n// CC_Scorable Images_Number of Atempts.png';\nimport { createMediaBlock } from './media';\n\nexport const createFeedbackBlock = ({ ...props }) => {\n  const label = props.label || 'Continue';\n\n  return createBlock(\n    'Feedback',\n    [\n      createBlock(\n        'Correct',\n        [\n          createMediaBlock({\n            src: Correct_default,\n            child: 1,\n            useBackgroundControls: false,\n          }),\n          createBlock('Text'),\n          createContinueBtn({\n            unlocked: true,\n            removeable: false,\n          }),\n        ],\n        {\n          props: { type: 'Correct_Feedback' },\n          meta: {\n            subType: 'Correct_Feedback',\n          },\n        }\n      ),\n      createBlock(\n        'Incorrect',\n        [\n          createMediaBlock({\n            src: Incorrect_default,\n            child: 1,\n            useBackgroundControls: false,\n          }),\n          createBlock('Text'),\n          createContinueBtn({\n            unlocked: true,\n            removeable: false,\n          }),\n        ],\n        {\n          props: { type: 'Incorrect_Feedback' },\n          meta: {\n            subType: 'Incorrect_Feedback',\n          },\n        }\n      ),\n      createBlock(\n        'Attempt',\n        [\n          createMediaBlock({\n            src: Attempt_default,\n            child: 1,\n            useBackgroundControls: false,\n          }),\n\n          createBlock('Text'),\n          createEditableBtn({\n            type: 'Feedback_Button_Attempt',\n            label: 'Try again',\n          }),\n        ],\n        {\n          props: { type: 'Attempt_Feedback' },\n          meta: {\n            subType: 'Attempt_Feedback',\n          },\n        }\n      ),\n      createEditableBtn({ type: 'Feedback_Button', label }),\n    ],\n    {\n      props: {\n        type: 'Feedback',\n        name: props.name || '',\n        style: props.style || {},\n      },\n      meta: {\n        subType: 'Feedback',\n      },\n    }\n  );\n};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps, repeat } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { createFeedbackBlock } from './feedback';\nimport { colors } from 'styles/variables';\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { flatten } from 'factories/utils';\nimport { createContinueBtn } from './continueBtn';\nimport { createEditableBtn } from './editableBtn';\nimport { createMediaBlock } from './media';\nimport { getSId } from '../utils';\n\nconst { lGrey0 } = colors;\n\nexport type MultichoiceInteractionProps = InteractionProps & {\n  answerCount: number;\n  isMultichoiceMedia?: boolean;\n};\n\nconst createMultichoiceMediaOption = () => {\n  return createBlock('MultichoiceMedia', [\n    createMediaBlock({\n      child: 1,\n    }),\n    createBlock('Text'),\n  ]);\n};\n\nexport const createMultichoiceBlock = (count: number, isMultichoiceMedia) => {\n  return createBlock('Multichoice', [\n    ...repeat(\n      () =>\n        createBlock('Answer', [\n          isMultichoiceMedia\n            ? createMultichoiceMediaOption()\n            : createBlock('Text', [], {\n                props: {\n                  bulletColor: '#fff',\n                },\n              }),\n          createFeedbackBlock({}),\n        ]),\n      count\n    ),\n  ]);\n};\n\nexport const createMultichoiceBlockWithText = (\n  count: number,\n  isMultichoiceMedia,\n  sharedQuestionMedia\n) => {\n  return createBlock('MultichoiceWithText', [\n    sharedQuestionMedia,\n    createEditableBtn({\n      type: 'Submit_Button',\n      label: 'Submit',\n    }),\n    createMultichoiceBlock(count, isMultichoiceMedia),\n\n    createEditableBtn({\n      type: 'ReviewFeedback',\n      label: 'Review feedback',\n    }),\n  ]);\n};\n\nconst contentForColumn = (\n  count: number,\n  isMultichoiceMedia,\n  sharedQuestionMedia\n) => (i: number) => {\n  return [\n    () =>\n      isMultichoiceMedia\n        ? createBlock('ColumnContentForMultichoiceMedia', [\n            createMediaBlock({\n              child: 1,\n            }),\n            sharedQuestionMedia,\n          ])\n        : createMediaBlock({\n            child: 1,\n          }),\n\n    () =>\n      createBlock('InteractionColumn', [\n        createMultichoiceBlockWithText(\n          count,\n          isMultichoiceMedia,\n          sharedQuestionMedia\n        ),\n        createMediaBlock({\n          child: 0,\n          isAdditionalMedia: true,\n        }),\n      ]),\n  ][i];\n};\n\nexport const removeMultichoiceOption = (\n  block: Block,\n  position: number,\n  isMultichoiceMedia\n): [Block, Blocks?] => {\n  if (block.type === 'Multichoice') {\n    const optionBlock = createBlock('Answer', [\n      isMultichoiceMedia ? createMultichoiceMediaOption() : createBlock('Text'),\n      createFeedbackBlock({}),\n    ]);\n    const [newBlocks] = flatten(optionBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 1);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const addMultichoiceOption = (\n  block: Block,\n  position: number,\n  isMultichoiceMedia\n): [Block, Blocks?] => {\n  if (block.type === 'Multichoice') {\n    const optionBlock = createBlock('Answer', [\n      isMultichoiceMedia ? createMultichoiceMediaOption() : createBlock('Text'),\n      createFeedbackBlock({}),\n    ]);\n    const optionBlockRef = { id: optionBlock.id, type: 'Ref' };\n    const [newBlocks] = flatten(optionBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 0, optionBlockRef);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const createMultichoiceInteractionBlock = (\n  props: MultichoiceInteractionProps\n) => {\n  const {\n    textColor = '',\n    checkboxColor = '#fff',\n    correctOptions = '1',\n    numberOfAttempts = 1,\n    lockDown = 0,\n    showCorrectAnswer = 1,\n    useUniqueOptionFeedback = false,\n    score = true,\n    style,\n    isMultichoiceMedia,\n  } = props as any;\n\n  const panelBackground = isMultichoiceMedia ? '#fff' : lGrey0;\n  const optionTextColor = isMultichoiceMedia ? '#000' : '#fff';\n\n  const sharedQuestionMedia = createMediaBlock({\n    child: 0,\n    imgPlaceholderIndex: 1,\n  });\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(\n        contentForColumn(\n          props.answerCount,\n          isMultichoiceMedia,\n          sharedQuestionMedia\n        ),\n        isMultichoiceMedia ? 0 : props.columnCount,\n        isMultichoiceMedia ? true : props.columnsReversed\n      ),\n      createFeedbackBlock({}),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style,\n        textColor,\n        correctOptions,\n        numberOfAttempts,\n        lockDown,\n        showCorrectAnswer,\n        useUniqueOptionFeedback,\n        score,\n        isMultichoiceMedia,\n      },\n      meta: {\n        subType: 'Multichoice',\n        layout: isMultichoiceMedia\n          ? 'OneColumnReversed'\n          : `${props.columnCount === 0 ? 'OneColumn' : 'TwoColumns'}${\n              props.columnsReversed ? 'Reversed' : ''\n            }`,\n      },\n    }\n  );\n};\n\nexport const create = createMultichoiceInteractionBlock;\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps, repeat } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { createFeedbackBlock } from './feedback';\nimport { colors } from 'styles/variables';\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { flatten } from 'factories/utils';\nimport { createContinueBtn } from './continueBtn';\nimport { createEditableBtn } from './editableBtn';\nimport Correct_default from 'assets/Correct_loop.gif'; // Correct_default.svg';\nimport Incorrect_default from 'assets/Incorrect_loop.gif'; // Incorrect_default.svg';\nimport uuid from 'uuidv4';\nimport { getSId } from '../utils';\nimport { createMediaBlock } from './media';\n\nconst { lPink, lGrey0, lGrey2, lTeal0 } = colors;\n\nexport type SortationInteractionProps = InteractionProps & {\n  answerCount: number;\n};\n\nconst createSortationContainerBlock = (count: number) => {\n  return createBlock('SortationContainer', [\n    createBlock('Text'),\n    createBlock('SortationAnswers', [\n      ...repeat(\n        () => createBlock('SortationAnswer', [createBlock('Text')]),\n        count\n      ),\n    ]),\n    createBlock('Text'),\n  ]);\n};\n\nconst createSortationFeedbackBlock = type => {\n  return createBlock(\n    'Feedback',\n    [\n      createBlock('Image', [], {\n        props: {\n          src: type === 'Correct' ? Correct_default : Incorrect_default,\n        },\n      }),\n      createBlock('Text'),\n      createEditableBtn({ label: 'Continue' }),\n    ],\n    {\n      props: {\n        type,\n      },\n    }\n  );\n};\n\nconst createAnswerBlock = () => {\n  return createBlock('Answer', [\n    createBlock('Text'),\n    createBlock('SortableImage', [createBlock('Image')], {\n      props: { isSortableImg: true },\n    }),\n  ]);\n};\n\nexport const createSortationBlock = (count: number) => {\n  return createBlock('Sortation', [\n    createBlock('SortationQuestionText', [createBlock('Text')], {\n      props: {\n        type: 'SortationQuestionText',\n      },\n    }),\n    createBlock('SortationHeading0', [createBlock('Text')]),\n    createBlock('SortationHeading1', [createBlock('Text')]),\n    createEditableBtn({ label: 'Submit' }),\n    ...repeat(() => createAnswerBlock(), count),\n  ]);\n};\n\nconst contentForColumn = (count: number) => (i: number) => {\n  return [\n    () => createMediaBlock({ child: 1 }),\n    () =>\n      createBlock('InteractionColumn', [\n        createSortationBlock(count),\n        createMediaBlock({\n          child: 0,\n          isAdditionalMedia: true,\n        }),\n      ]),\n  ][i];\n};\n\nexport const addSortationOption = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'Sortation') {\n    const sortationOptionBlock = createAnswerBlock();\n\n    const sortationOptionBlockRef = {\n      id: sortationOptionBlock.id,\n      type: 'Ref',\n    };\n    const [newBlocks] = flatten(sortationOptionBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(\n      position,\n      0,\n      sortationOptionBlockRef\n    );\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const removeSortationOption = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'Sortation') {\n    const sortationOptionBlock = createAnswerBlock();\n\n    const [newBlocks] = flatten(sortationOptionBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 1);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const createSortationInteractionBlock = (\n  props: SortationInteractionProps\n) => {\n  const {\n    panelBackgroundDragging = lGrey0,\n    textColorDragging = '#fff',\n    baseColor = lGrey2,\n    numberOfAttempts = 1,\n    showCorrectAnswer = 0,\n    lockDown = 0,\n    score = true,\n    style,\n  } = props as any;\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(\n        contentForColumn(props.answerCount),\n        props.columnCount,\n        props.columnsReversed\n      ),\n      createFeedbackBlock({}),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style,\n        baseColor,\n        numberOfAttempts,\n        showCorrectAnswer,\n        lockDown,\n        score,\n      },\n      meta: {\n        subType: 'Sortation',\n        layout: `${props.columnCount === 0 ? 'OneColumn' : 'TwoColumns'}${\n          props.columnsReversed ? 'Reversed' : ''\n        }`,\n      },\n    }\n  );\n};\n\nexport const create = createSortationInteractionBlock;\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { createEditableBtn } from './editableBtn';\n\nexport const createModalWithEditableBtn = ({ ...props }) => {\n  return createBlock('Modal', [createEditableBtn({})], {\n    props: { type: 'ModalWithEditableBtn' },\n    meta: {\n      subType: 'ModalWithEditableBtn',\n    },\n  });\n};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps, repeat } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { createFeedbackBlock } from './feedback';\nimport { colors } from 'styles/variables';\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { flatten } from 'factories/utils';\nimport { createContinueBtn } from './continueBtn';\nimport { createEditableBtn } from './editableBtn';\nimport { createModalWithEditableBtn } from './modalWithEditableBtn';\nimport { createMediaBlock } from './media';\nimport Media_default from 'assets/Media_default.svg';\n\nconst { lPink, lGrey0, lGrey1, lGrey2 } = colors;\n\nexport type DragAndDropInteractionProps = InteractionProps & {\n  answerCount: number;\n};\n\nconst createDragAndDropElement = () => {\n  return createBlock(\n    'DragAndDropElement',\n    [\n      createBlock(\n        'Drag',\n        [\n          createMediaBlock({\n            src: Media_default,\n            child: 1,\n          }),\n        ],\n        {\n          props: {\n            type: 'Drag',\n          },\n          meta: {\n            subType: 'Drag',\n          },\n        }\n      ),\n      createBlock(\n        'Drop',\n        [\n          createMediaBlock({\n            src: Media_default,\n            child: 0,\n          }),\n        ],\n        {\n          props: {\n            type: 'Drop',\n          },\n          meta: {\n            subType: 'Drop',\n          },\n        }\n      ),\n      createFeedbackBlock({}),\n    ],\n    {\n      props: {\n        type: 'DragAndDropElement',\n      },\n      meta: {\n        subType: 'DragAndDropElement',\n      },\n    }\n  );\n};\n\nexport const createDragAndDropBlock = (count: number) => {\n  return createBlock('DragAndDrop', [\n    createEditableBtn({ label: 'SUBMIT' }),\n    createModalWithEditableBtn({}),\n    ...repeat(() => createDragAndDropElement(), count),\n  ]);\n};\n\nconst contentForColumn = (count: number) => (i: number) => {\n  return [() => createBlock('Text'), () => createDragAndDropBlock(count)][i];\n};\n\nexport const addDragAndDropOption = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'DragAndDrop') {\n    const dragAndDropOptionBlock = createDragAndDropElement();\n\n    const dragAndDropOptionBlockRef = {\n      id: dragAndDropOptionBlock.id,\n      type: 'Ref',\n    };\n    const [newBlocks] = flatten(dragAndDropOptionBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(\n      position,\n      0,\n      dragAndDropOptionBlockRef\n    );\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const removeDragAndDropOption = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'DragAndDrop') {\n\n    const dragAndDropOptionBlock = createDragAndDropElement();\n\n    const [newBlocks] = flatten(dragAndDropOptionBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 1);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const createDragAndDropInteractionBlock = (\n  props: DragAndDropInteractionProps\n) => {\n  const {\n    panelBackground = '#fff' || lPink,\n    panelBackgroundDragging = lGrey0,\n    textColorDragging = '#fff',\n    dropZoneColor = lGrey1,\n    baseColor = lGrey2,\n    numberOfAttempts = 1,\n    lockDown = 0,\n    score = false,\n    style,\n  } = props as any;\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(\n        contentForColumn(props.answerCount),\n        0,\n        true\n      ),\n      createFeedbackBlock({}),\n      createBlock('SingleColumnLayout', [\n        createBlock(\n          'Column',\n          [\n            createContinueBtn(style),\n          ],\n          {\n            props: {\n              flexDirection: 'row',\n              alignItems: 'center',\n              justifyContent: 'center',\n              flexWrap: 'wrap',\n            },\n            meta: {\n              subType: 'ButtonBlock',\n            },\n          }\n        ),\n      ]),\n    ],\n    {\n      props: {\n        name: props.name,\n        style: props.style,\n        panelBackground,\n        panelBackgroundDragging,\n        textColorDragging,\n        dropZoneColor,\n        baseColor,\n        numberOfAttempts,\n        lockDown,\n        score,\n      },\n      meta: {\n        subType: 'DragAndDrop',\n        layout: 'OneColumnReversed',\n      },\n    }\n  );\n};\n\nexport const create = createDragAndDropInteractionBlock;\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps, repeat } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { colors } from 'styles/variables';\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { flatten } from 'factories/utils';\nimport { createContinueBtn } from './continueBtn';\nimport { createEditableBtn } from './editableBtn';\nimport { createMediaBlock } from './media';\nimport Media_default from 'assets/Media_default.svg';\nimport uuid from 'uuidv4';\nimport { getSId } from '../utils';\nimport Correct_default from 'assets/Correct_loop.gif'; // Correct_default.svg';\n\nconst { lPink, lGrey0, lGrey1, lGrey2, lTeal0 } = colors;\n\nexport type MatchingInteractionProps = InteractionProps & {\n  answerCount: number;\n};\n\nconst createFeedbackBlock = ({ feedbackId }) => {\n  console.log('createFeedbackBlock for matching', feedbackId);\n\n  return createBlock(\n    'Feedback',\n    [\n      createMediaBlock({ child: 1 }),\n      createBlock('Text'),\n      createEditableBtn({\n        type: 'Feedback_Button_Correct',\n        label: 'Continue',\n      }),\n    ],\n    {\n      props: { type: 'Correct_Feedback', feedbackId },\n      meta: {\n        subType: 'Correct_Feedback',\n      },\n    }\n  );\n};\n\nconst createMatchPairs = (): [\n  string, // shared id\n  Block, // drag\n  Block, // drop\n  Block // feedback\n] => {\n  const id = uuid();\n  return [\n    id,\n    createBlock(\n      'MatchDrag',\n      [\n        createMediaBlock({\n          src: undefined,\n          child: 1,\n        }),\n      ],\n      {\n        props: {\n          draggableId: id,\n        },\n      }\n    ),\n    createBlock(\n      'MatchDrop',\n      [\n        createMediaBlock({\n          src: undefined,\n          child: 0,\n        }),\n      ],\n      {\n        props: {\n          droppableId: id,\n        },\n      }\n    ),\n    createFeedbackBlock({\n      feedbackId: id,\n    }),\n  ];\n};\n\nexport const createMatchingBlock = (count: number) => {\n  const DragContainer = createBlock('DragContainer');\n  const DropContainer = createBlock('DropContainer');\n  const AnswerContainer = createBlock('AnswerContainer');\n\n  Array.from(Array(count)).map(() => {\n    const [, dragBlock, dropBlock, feedback] = createMatchPairs();\n    DragContainer.children = [\n      ...(DragContainer.children as Block[]),\n      dragBlock,\n    ];\n    DropContainer.children = [\n      ...(DropContainer.children as Block[]),\n      dropBlock,\n    ];\n    AnswerContainer.children = [\n      ...(AnswerContainer.children as Block[]),\n      feedback,\n    ];\n  });\n\n  return createBlock('Matching', [\n    DragContainer,\n    DropContainer,\n    AnswerContainer,\n  ]);\n};\n\nconst contentForColumn = (count: number) => (i: number) => {\n  return [\n    () =>\n      createMediaBlock({\n        child: 0,\n      }),\n\n    () =>\n      createBlock('InteractionColumn', [\n        createMatchingBlock(count),\n        createMediaBlock({\n          child: 0,\n          isAdditionalMedia: true,\n        }),\n      ]),\n  ][i];\n};\n\nexport const addMatchPairs = (\n  block: Block,\n  position: number,\n  blocks: Blocks\n): [Block, Blocks?] => {\n  if (block.type === 'Matching') {\n    const [, dragBlock, dropBlock, feedbackBlock] = createMatchPairs();\n    const [\n      dragContainerRef,\n      dropContainerRef,\n      answerContainerRef,\n    ] = block.children as Block[];\n\n    const dragContainer = cloneBlock(blocks[dragContainerRef.id]);\n    const dropContainer = cloneBlock(blocks[dropContainerRef.id]);\n    const answerContainer = cloneBlock(blocks[answerContainerRef.id]);\n\n    const dragRef = {\n      id: dragBlock.id,\n      type: 'Ref',\n    };\n\n    const dropRef = {\n      id: dropBlock.id,\n      type: 'Ref',\n    };\n\n    const feedbackRef = {\n      id: feedbackBlock.id,\n      type: 'Ref',\n    };\n\n    (dragContainer.children as Block[]).splice(position, 0, dragRef);\n    (dropContainer.children as Block[]).splice(position, 0, dropRef);\n    (answerContainer.children as Block[]).splice(position, 0, feedbackRef);\n\n    const [newBlocksDrag] = flatten(dragBlock);\n    const [newBlocksDrop] = flatten(dropBlock);\n    const [newBlocksFeedback] = flatten(feedbackBlock);\n\n    const newBlocks = {\n      ...newBlocksDrag,\n      ...newBlocksDrop,\n      ...newBlocksFeedback,\n      ...{ [dragContainer.id]: dragContainer },\n      ...{ [dropContainer.id]: dropContainer },\n      ...{ [answerContainer.id]: answerContainer },\n    };\n\n    const nextBlock = cloneBlock(block);\n    nextBlock.children = [...(nextBlock.children as Block[])];\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const removeMatchPairs = (\n  block: Block,\n  position: number,\n  blocks: Blocks\n): [Block, Blocks?] => {\n  if (block.type === 'Matching') {\n    const [\n      dragContainerRef,\n      dropContainerRef,\n      answerContainerRef,\n    ] = block.children as Block[];\n\n    const dragContainer = cloneBlock(blocks[dragContainerRef.id]);\n    const dropContainer = cloneBlock(blocks[dropContainerRef.id]);\n    const answerContainer = cloneBlock(blocks[answerContainerRef.id]);\n\n    (dragContainer.children as Block[]).splice(position, 1);\n    (dropContainer.children as Block[]).splice(position, 1);\n    (answerContainer.children as Block[]).splice(position, 1);\n\n    const newBlocks = {\n      ...{ [dragContainer.id]: dragContainer },\n      ...{ [dropContainer.id]: dropContainer },\n      ...{ [answerContainer.id]: answerContainer },\n    };\n\n    const nextBlock = cloneBlock(block);\n    nextBlock.children = [...(nextBlock.children as Block[])];\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const createMatchingInteractionBlock = (\n  props: MatchingInteractionProps\n) => {\n  const {\n    panelBackground = '#fff' || lPink,\n    panelBackgroundDragging = lGrey0,\n    textColorDragging = '#fff',\n    dropZoneColor = lGrey1,\n    panelWidth = 250,\n    panelHeight = 250,\n    baseColor = lGrey2,\n    lockDown = 0,\n    style,\n  } = props as any;\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(contentForColumn(props.answerCount), 0, true),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style,\n        panelBackground,\n        panelBackgroundDragging,\n        textColorDragging,\n        dropZoneColor,\n        panelWidth,\n        panelHeight,\n        baseColor,\n        lockDown,\n      },\n      meta: {\n        subType: 'Matching',\n        layout: 'OneColumnReversed',\n      },\n    }\n  );\n};\n\nexport const create = createMatchingInteractionBlock;\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps } from './interaction';\nimport { colors } from 'styles/variables';\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { flatten } from 'factories/utils';\nimport { createEditableBtn } from './editableBtn';\nimport { createMediaBlock } from './media';\nimport hotspotDefaultSVG from 'assets/HotspotDefault_v3.svg';\n\nconst { lPink } = colors;\n\nexport type HotSpotInteractionProps = InteractionProps & {\n  answerCount: number;\n};\n\n// should add the option to include image in ' popUp '\n// ? createFeedbackBlock({}) : ...\nconst createHotSpotElement = ({ name = '', points = [], ...props }) => {\n  return createBlock(\n    'HotSpotElement',\n    [\n      createMediaBlock({\n        child: 1,\n      }),\n      createMediaBlock({\n        child: 0,\n      }),\n      createEditableBtn({ label: 'Continue' }),\n    ],\n    {\n      props: {\n        type: 'HotSpotElement',\n        name,\n        points,\n        ...props,\n      },\n      meta: {\n        subType: 'HotSpotElement',\n      },\n    }\n  );\n};\n\nexport const createHotSpotBlock = props => {\n  const {\n    numberOfAttempts = 1,\n    lockDown = 0,\n    score = false,\n    image,\n    hotspotType = 'circle',\n    hotSpotColor = lPink,\n    hotSpotSize = 50,\n    hotSpots = {},\n    style,\n    src,\n  } = props as any;\n\n  return createBlock('HotSpotIsolated', [], {\n    props: {\n      name: props.name,\n      style: props.style,\n      numberOfAttempts,\n      lockDown,\n      score,\n      image,\n      hotspotType,\n      hotSpotColor,\n      hotSpotSize,\n      src,\n    },\n    meta: {\n      subType: 'HotSpotIsolated',\n    },\n  });\n};\n\nexport const addHotSpotOption = (\n  block: Block,\n  position: number,\n  props\n): [Block, Blocks?] => {\n  if (block.type === 'HotSpotIsolated') {\n    const hotSpotOptionBlock = createHotSpotElement(props);\n\n    const hotSpotOptionBlockRef = {\n      id: hotSpotOptionBlock.id,\n      type: 'Ref',\n    };\n    const [newBlocks] = flatten(hotSpotOptionBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 0, hotSpotOptionBlockRef);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const removeHotSpotOption = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'HotSpotIsolated') {\n    const hotSpotOptionBlock = createHotSpotElement({});\n\n    const [newBlocks] = flatten(hotSpotOptionBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 1);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const removeAllHotSpotOptions = (\n  block: Block\n): [Block, Blocks?] | undefined => {\n  if (block.type === 'HotSpotIsolated') {\n    const hotSpotOptionBlock = createHotSpotElement({});\n\n    const [newBlocks] = flatten(hotSpotOptionBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(0);\n\n    return [nextBlock, newBlocks];\n  }\n};\n\nexport const getNextHotSpotBlock = (\n  block: Block\n): [Block, Blocks?] | undefined => {\n  if (block.type === 'HotSpotIsolated') {\n    const hotSpotOptionBlock = createHotSpotElement({});\n\n    const [newBlocks] = flatten(hotSpotOptionBlock);\n\n    const nextBlock = cloneBlock(block);\n\n    return [nextBlock, newBlocks];\n  }\n};\n\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps, repeat } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { createContinueBtn } from './continueBtn';\nimport { createHotSpotBlock } from './hotspot_isolated';\nimport { createFeedbackBlock } from './feedback';\nimport { getSId } from '../utils';\nimport { createMediaBlock } from './media';\n\nexport type HotSpotInteractionProps = InteractionProps & {\n  answerCount: number;\n};\n\nconst contentForColumn = (count: number) => (i: number) => {\n  return [\n    () =>\n      createMediaBlock({\n        child: 0,\n      }),\n\n    () =>\n      createBlock('InteractionColumn', [\n        createBlock('HotSpotScorable', [\n          createHotSpotBlock({}),\n          createFeedbackBlock({\n            label: 'Submit',\n          }),\n        ]),\n        createMediaBlock({\n          child: 0,\n          isAdditionalMedia: true,\n        }),\n      ]),\n  ][i];\n};\n\nexport const createHotSpotInteractionBlock = (\n  props: HotSpotInteractionProps\n) => {\n  const {\n    lockDown = 0,\n    style,\n    score,\n    immediateFeedback,\n    isGlobalNavigation,\n    isHotspotLandingPage,\n  } = props as any;\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(contentForColumn(props.answerCount), 0, true),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style,\n        lockDown,\n        score,\n        immediateFeedback,\n        isGlobalNavigation,\n        isHotspotLandingPage,\n      },\n      meta: {\n        subType: 'HotSpot',\n        layout: 'OneColumnReversed',\n      },\n    }\n  );\n};\n\nexport const create = createHotSpotInteractionBlock;\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps, repeat } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { colors } from 'styles/variables';\nimport { createContinueBtn } from './continueBtn';\nimport { createEditableBtn } from './editableBtn';\nimport uuid from 'uuidv4';\nimport { getSId } from '../utils';\n\nconst { lPink } = colors;\n\nexport type FiveStarRatingInteractionProps = InteractionProps & {\n  //\n};\n\nexport const createFiveStarRatingBlock = (count: number) => {\n  return createBlock('FiveStarRating', [\n    createBlock('FiveStarList', [\n      ...repeat(() => createBlock('Star'), count || 5),\n    ]),\n    createBlock('TextArea'),\n    createEditableBtn({ label: 'Submit' }),\n    createBlock('FeedbackSubmitted', [\n      createBlock('Image'),\n      createBlock('Text'),\n    ]),\n  ]);\n};\n\nconst contentForColumn = (count: number) => (i: number) => {\n  return [\n    () => createBlock('Text', [], { props: { useBackgroundControls: true } }),\n    () => createFiveStarRatingBlock(count),\n  ][i];\n};\n\nexport const createFiveStarRatingInteractionBlock = (\n  props: FiveStarRatingInteractionProps\n) => {\n  const {\n    starColor = lPink,\n    submissionEmailDestination = '',\n    subject = '',\n    lockDown = 0,\n    style,\n    isTextEntry = false,\n  } = props as any;\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(contentForColumn(0), 0, true),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        type: 'FiveStarRating',\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style,\n        starColor,\n        submissionEmailDestination,\n        subject,\n        lockDown,\n        isTextEntry,\n      },\n      meta: {\n        subType: 'FiveStarRating',\n        layout: 'OneColumnReversed',\n      },\n    }\n  );\n};\n\nexport const create = createFiveStarRatingInteractionBlock;\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps, repeat } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { colors } from 'styles/variables';\nimport { createContinueBtn } from './continueBtn';\nimport resultsPassed from 'assets/Correct_loop.gif';\nimport resultsFailed from 'assets/Incorrect_loop.gif';\nimport { createMediaBlock } from './media';\nimport { getSId } from '../utils';\n\nconst { lPink } = colors;\n\nexport type ResultsPageProps = InteractionProps & {\n  //\n};\n\nexport const createResultsPageContentBlock = (count: number) => {\n  return createBlock('ResultsPageContent', [\n    createBlock('ResultsPageContentPassed', [\n      createMediaBlock({\n        child: 0,\n      }),\n      createMediaBlock({\n        src: resultsPassed,\n        type: 'passed',\n        child: 1,\n        useBackgroundControls: true,\n      }),\n    ]),\n    createBlock('ResultsPageContentFailed', [\n      createMediaBlock({\n        child: 0,\n      }),\n      createMediaBlock({\n        src: resultsFailed,\n        type: 'failed',\n        child: 1,\n        useBackgroundControls: true,\n      }),\n    ]),\n  ]);\n};\n\nexport const createResultsPageMediaBlock = (count: number) => {\n  return createBlock('ResultsPageMedia', [\n    createMediaBlock({\n      src: resultsPassed,\n      type: 'passed',\n      child: 1,\n      useBackgroundControls: true,\n    }),\n    createMediaBlock({\n      src: resultsFailed,\n      type: 'failed',\n      child: 1,\n      useBackgroundControls: true,\n    }),\n  ]);\n};\n\nconst contentForColumn = (count: number) => (i: number) => {\n  return [\n    () => createResultsPageContentBlock(0),\n    () =>\n      createBlock('InteractionColumn', [\n        createBlock('ResultsPageResult'),\n        createMediaBlock({\n          child: 0,\n          isAdditionalMedia: true,\n        }),\n      ]),\n  ][i];\n};\n\nexport const createResultsPageInteractionBlock = (props: ResultsPageProps) => {\n  const { graphType = 'circle', graphColor = lPink, style } = props as any;\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(contentForColumn(0), 0, true),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        type: 'ResultsPage',\n        name: props.name,\n        sId: getSId('interaction'),\n        graphType,\n        graphColor,\n        style: props.style,\n      },\n      meta: {\n        subType: 'ResultsPage',\n        layout: `${props.columnCount === 0 ? 'OneColumn' : 'TwoColumns'}${\n          props.columnsReversed ? 'Reversed' : ''\n        }`,\n      },\n    }\n  );\n};\n\nexport const create = createResultsPageInteractionBlock;\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { repeat } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { colors } from 'styles/variables';\nimport { createMediaBlock } from './media';\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { flatten } from 'factories/utils';\nimport { createContinueBtn } from './continueBtn';\nimport { createEditableBtn } from './editableBtn';\nimport { getSId } from '../utils';\n\nconst { lGrey0, lGrey2 } = colors;\n\nconst createClickAndRevealBlock = props => {\n  return createBlock('ClickAndReveal', [\n    createMediaBlock({\n      src: undefined,\n      child: 1,\n      fit: 'cover',\n      useBackgroundControls: false,\n    }),\n    createBlock('Text', [], { props: { useBackgroundControls: false } }),\n    createBlock('Content', [\n      createMediaBlock({ name: 'ColumnRowA', child: 0 }),\n      createMediaBlock({ name: 'ColumnRowB', child: 1 }),\n      createEditableBtn({\n        type: 'ClickAndRevealContentButton',\n        label: 'Continue',\n      }),\n    ]),\n  ]);\n};\n\nexport const createClickAndRevealsBlock = (count: number) => {\n  return createBlock('ClickAndReveals', [\n    ...repeat(() => createClickAndRevealBlock({}), count),\n  ]);\n};\n\nexport const addClickAndReveal = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'ClickAndReveals') {\n    const clickAndRevealBlock = createClickAndRevealBlock({});\n\n    const clickAndRevealBlockRef = { id: clickAndRevealBlock.id, type: 'Ref' };\n    const [newBlocks] = flatten(clickAndRevealBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 0, clickAndRevealBlockRef);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const removeClickAndReveal = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'ClickAndReveals') {\n    const clickAndRevealBlock = createClickAndRevealBlock({});\n\n    const [newBlocks] = flatten(clickAndRevealBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 1);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nconst contentForColumn = (count: number) => (i: number) => {\n  return [\n    () =>\n      createMediaBlock({\n        child: 0,\n      }),\n    () =>\n      createBlock('InteractionColumn', [\n        createClickAndRevealsBlock(count),\n        createMediaBlock({\n          child: 0,\n          isAdditionalMedia: true,\n        }),\n      ]),\n  ][i];\n};\n\nexport const createClickAndRevealInteractionBlock = props => {\n  const {\n    backgroundColor,\n    clickAndRevealPanelTextColor = lGrey0,\n    clickAndRevealLabelTextColor = lGrey0,\n    width = 260,\n    height = 210,\n    borderRadius = 10,\n    borderColor = lGrey2,\n    layout = 'One column reversed',\n    lockDown = 0,\n    style,\n  } = props as any;\n\n  const useGlobalNavigation = props.useGlobalNavigation || false;\n  const isLandingPage = props.isLandingPage || false;\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(contentForColumn(props.answerCount), 0, true),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style,\n        backgroundColor,\n        clickAndRevealPanelTextColor,\n        clickAndRevealLabelTextColor,\n        borderRadius,\n        borderColor,\n        width,\n        height,\n        layout,\n        lockDown,\n        ...(useGlobalNavigation && {\n          useGlobalNavigation,\n        }),\n        ...(isLandingPage && {\n          isLandingPage,\n        }),\n      },\n      meta: {\n        subType: 'ClickAndReveal',\n        layout: 'OneColumn',\n      },\n    }\n  );\n};\n\nexport const create = createClickAndRevealInteractionBlock;\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { createLayout } from 'factories/layout';\nimport { createContinueBtn } from './continueBtn';\nimport { getSId } from '../utils';\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { flatten } from 'factories/utils';\nimport { createMediaBlock } from './media';\n\nexport const addTopicPortalMedia = (\n  block: Block,\n  position: number,\n  topicId\n): [Block, Blocks?] => {\n  if (block.type === 'TopicPortalContainer') {\n    const topicPortalMediaBlock = createBlock(\n      'TopicPortalMedia',\n      [\n        createMediaBlock({\n          src: undefined,\n          child: 1,\n          fit: 'cover',\n          useBackgroundControls: false,\n        }),\n        createMediaBlock({\n          src: undefined,\n          child: 0,\n          fit: 'cover',\n          useBackgroundControls: false,\n          bulletColor: '#fff',\n        }),\n      ],\n      {\n        props: {\n          topicId,\n        },\n      }\n    );\n\n    const topicPortalMediaBlockRef = {\n      id: topicPortalMediaBlock.id,\n      type: 'Ref',\n    };\n\n    const [newBlocks] = flatten(topicPortalMediaBlock);\n\n    const nextBlock = cloneBlock(block);\n\n    (nextBlock.children as Block[]).splice(\n      position,\n      0,\n      topicPortalMediaBlockRef\n    );\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const removeTopicPortalMedia = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'TopicPortalContainer') {\n    const topicPortalMediaBlock = createBlock('TopicPortalMedia', [\n      createMediaBlock({\n        src: undefined,\n        child: 1,\n        fit: 'cover',\n        useBackgroundControls: false,\n      }),\n      createMediaBlock({\n        src: undefined,\n        child: 0,\n        fit: 'cover',\n        useBackgroundControls: false,\n        bulletColor: '#fff',\n      }),\n    ]);\n\n    const [newBlocks] = flatten(topicPortalMediaBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 1);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nconst contentForColumn = (count: number) => (i: number) => {\n  return [\n    () =>\n      createMediaBlock({\n        child: 0,\n        imgPlaceholderIndex: 1,\n      }),\n    () =>\n      createBlock('InteractionColumn', [\n        createBlock('TopicPortalContainer', [], {}),\n        createMediaBlock({\n          child: 0,\n          isAdditionalMedia: true,\n        }),\n      ]),\n  ][i];\n};\n\nexport const createTopicPortalInteractionBlock = props => {\n  const { style } = props as any;\n\n  //\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(contentForColumn(0), 0, true),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style,\n      },\n      meta: {\n        subType: 'TopicPortal',\n        layout: 'OneColumnReversed',\n      },\n    }\n  );\n};\n\nexport const create = createTopicPortalInteractionBlock;\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { Block } from '@chameleoncreator/creator-app';\nimport { InteractionProps, reverse } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { createMediaBlock } from './media';\nimport { createContinueBtn } from './continueBtn';\nimport uuid from 'uuidv4';\nimport { getSId } from '../utils';\n\nexport type ImageInteractionProps = InteractionProps & {};\n\nconst createAssessmentIntroduction = (props?: {}) => {\n  return createBlock(\n    'AssessmentIntroduction',\n    [createMediaBlock({}), createBlock('Text')],\n    { props: {} }\n  );\n};\n\nexport const createAssessmentIntroductionInteractionBlock = (\n  props: any,\n  offset: number = 0\n) => {\n  return createBlock(\n    'Interaction',\n    [\n      createAssessmentIntroduction(),\n\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(props.style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        type: 'AssessmentIntroduction',\n        name: props.name,\n        sId: getSId('interaction', offset),\n        style: props.style || {},\n      },\n      meta: {\n        subType: 'AssessmentIntroduction',\n      },\n    }\n  );\n};\n\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps, reverse } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { createMediaBlock } from './media';\nimport { createContinueBtn } from './continueBtn';\nimport { createEditableBtn } from './editableBtn';\nimport uuid from 'uuidv4';\nimport { getSId } from '../utils';\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { flatten } from 'factories/utils';\n\nexport type ImageInteractionProps = InteractionProps & {};\n\nconst createAssessmentQuestionOption = (props?: {}) => {\n  return createBlock('AssessmentQuestionOption', [createBlock('Text')], {\n    props: {},\n  });\n};\n\nconst createAssessmentQuestion = (props?: {}) => {\n  return createBlock(\n    'AssessmentQuestion',\n    [\n      createMediaBlock({ child: 1 }),\n      createMediaBlock({ child: 0 }),\n      createBlock(\n        'AssessmentQuestionOptions',\n        [0, 1, 2, 3].map(option => createAssessmentQuestionOption())\n      ),\n\n      createContinueBtn({\n        label: 'Submit',\n        unlocked: true,\n      }),\n      createBlock('LearnMore', [], {\n        props: {\n          location: '',\n        },\n      }),\n    ],\n    {\n      props: {\n        sId: getSId('assessmentQuestion'),\n      },\n    }\n  );\n};\n\nexport const addAssessmentQuestionOption = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'AssessmentQuestionOptions') {\n    const assessmentOptionBlock = createAssessmentQuestionOption({});\n\n    const contentCardBlockRef = { id: assessmentOptionBlock.id, type: 'Ref' };\n    const [newBlocks] = flatten(assessmentOptionBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 0, contentCardBlockRef);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const removeAssessmentQuestionOption = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'AssessmentQuestionOptions') {\n    const assessmentOptionBlock = createAssessmentQuestionOption({});\n\n    const [newBlocks] = flatten(assessmentOptionBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 1);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const createAssessmentQuestionInteractionBlock = (\n  props,\n  offset: number = 0\n) => {\n  return createBlock(\n    'Interaction',\n    [\n      createAssessmentQuestion(),\n\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        type: 'AssessmentQuestion',\n        name: props.name,\n        sId: getSId('interaction', offset),\n        style: props.style || {},\n      },\n      meta: {\n        subType: 'AssessmentQuestion',\n      },\n    }\n  );\n};\n\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps, reverse } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { createMediaBlock } from './media';\nimport { createContinueBtn } from './continueBtn';\nimport { createEditableBtn } from './editableBtn';\nimport uuid from 'uuidv4';\nimport { getSId } from '../utils';\nimport { colors } from 'styles/variables';\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { flatten } from 'factories/utils';\nimport Correct_default from 'assets/Correct_loop.gif';\nimport Incorrect_default from 'assets/Incorrect_loop.gif';\n\nconst { lPink, lGrey0, lGrey1, mint, purple } = colors;\n\nexport type ImageInteractionProps = InteractionProps & {};\n\nconst createAssessmentResults = (props?: {}) => {\n  return createBlock(\n    'AssessmentResults',\n    [\n      createFeedbackBlock('FeedbackPassed'),\n      createFeedbackBlock('FeedbackFailed'),\n    ],\n    { props: {} }\n  );\n};\n\nconst createFeedbackBlock = type => {\n  return createBlock(type, [\n    createMediaBlock({\n      src: type === 'FeedbackPassed' ? Correct_default : Incorrect_default,\n    }),\n    createBlock('Text'),\n    createContinueBtn({}),\n  ]);\n};\n\nconst createContinueButtonBranchingBlock = props => {\n  return createBlock('ContinueButtonBranching', [\n    createContinueBtn({ ...props?.style, removeable: false }),\n    createContinueBtn({\n      style: props?.style,\n      label: 'Passed',\n      removeable: false,\n    }),\n    createContinueBtn({\n      style: props?.style,\n      label: 'Failed',\n      removeable: false,\n    }),\n  ]);\n};\n\nexport const addNewContinueButtonBranching = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.meta!.subType === 'ButtonBlock') {\n    const buttonBlock = createContinueButtonBranchingBlock({});\n\n    const buttonBlockRef = { id: buttonBlock.id, type: 'Ref' };\n    const [newBlocks] = flatten(buttonBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).push(buttonBlockRef);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const createAssessmentResultsInteractionBlock = (\n  props,\n  offset: number = 0\n) => {\n  return createBlock(\n    'Interaction',\n    [\n      createAssessmentResults(),\n\n      createBlock('SingleColumnLayout', [\n        createBlock(\n          'Column',\n          [\n            createBlock('RetryAssessment', [], {\n              props: {\n                type: 'RetryAssessment',\n                label: 'Retry assessment',\n                background: '#fff',\n                color: '#060709',\n                localColor: true,\n                buttonOutline: true,\n                localButtonOutline: true,\n                removeable: false,\n              },\n            }),\n            createContinueButtonBranchingBlock(props),\n          ],\n          {\n            props: {\n              flexDirection: 'row',\n              alignItems: 'center',\n              justifyContent: 'center',\n              flexWrap: 'wrap',\n            },\n            meta: {\n              subType: 'ButtonBlock',\n            },\n          }\n        ),\n      ]),\n    ],\n    {\n      props: {\n        type: 'AssessmentResults',\n        name: props.name,\n        sId: getSId('interaction', offset),\n        style: props.style || {},\n        graphColor: mint,\n        showAttemptCounter: true,\n        enableLearnMore: true,\n        enableTryAgain: true,\n        enableReVisit: true,\n        includeResultsGraph: true,\n        addAssessmentRetry: true,\n        enableBranching: false,\n        correctColor: mint,\n        incorrectColor: purple,\n        lockDown: 1,\n      },\n      meta: {\n        subType: 'AssessmentResults',\n      },\n    }\n  );\n};\n\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\r\nimport { repeat } from './interaction';\r\nimport { createLayout } from 'factories/layout';\r\nimport contentCard_default from 'assets/Card_Test.png';\r\nimport { colors } from 'styles/variables';\r\nimport { createMediaBlock } from './media';\r\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\r\nimport { flatten } from 'factories/utils';\r\nimport { createContinueBtn } from './continueBtn';\r\nimport { getSId } from '../utils';\r\n\r\nconst { lPink, lGrey0, lGrey2, lTeal0 } = colors;\r\n\r\nconst createContentCardBlock = props => {\r\n  return createBlock('ContentCard', [\r\n    createMediaBlock({\r\n      src: undefined,\r\n      child: 1,\r\n      fit: 'cover',\r\n      useBackgroundControls: false,\r\n    }),\r\n    createBlock('Text', [], { props: { useBackgroundControls: true } }),\r\n    createContinueBtn({\r\n      label: 'Add navigation',\r\n      removeable: false,\r\n      disableLastPageMessage: true,\r\n    }),\r\n  ]);\r\n};\r\n\r\nexport const createContentCardsBlock = (count: number) => {\r\n  return createBlock('ContentCards', [\r\n    ...repeat(() => createContentCardBlock({}), count),\r\n  ]);\r\n};\r\n\r\nexport const addContentCard = (\r\n  block: Block,\r\n  position: number\r\n): [Block, Blocks?] => {\r\n  if (block.type === 'ContentCards') {\r\n    const contentCardBlock = createContentCardBlock({});\r\n\r\n    const contentCardBlockRef = { id: contentCardBlock.id, type: 'Ref' };\r\n    const [newBlocks] = flatten(contentCardBlock);\r\n\r\n    const nextBlock = cloneBlock(block);\r\n    (nextBlock.children as Block[]).splice(position, 0, contentCardBlockRef);\r\n\r\n    return [nextBlock, newBlocks];\r\n  }\r\n  return [block, undefined];\r\n};\r\n\r\nexport const removeContentCard = (\r\n  block: Block,\r\n  position: number\r\n): [Block, Blocks?] => {\r\n  if (block.type === 'ContentCards') {\r\n    const contentCardBlock = createContentCardBlock({});\r\n\r\n    const [newBlocks] = flatten(contentCardBlock);\r\n\r\n    const nextBlock = cloneBlock(block);\r\n    (nextBlock.children as Block[]).splice(position, 1);\r\n\r\n    return [nextBlock, newBlocks];\r\n  }\r\n  return [block, undefined];\r\n};\r\n\r\nconst contentForColumn = (count: number) => (i: number) => {\r\n  return [\r\n    () =>\r\n      createMediaBlock({\r\n        child: 0,\r\n      }),\r\n    () =>\r\n      createBlock('InteractionColumn', [\r\n        createContentCardsBlock(count),\r\n        createMediaBlock({\r\n          child: 0,\r\n          isAdditionalMedia: true,\r\n        }),\r\n      ]),\r\n  ][i];\r\n};\r\n\r\nexport const createContentCardInteractionBlock = props => {\r\n  //\r\n  const {\r\n    grid = 'masonry',\r\n    contentCardBackgroundColor = '#fff',\r\n    contentCardPanelTextColor = lGrey0,\r\n    contentCardContentTextColor = lGrey0,\r\n    width = 33,\r\n    height = 0,\r\n    borderRadius = 20,\r\n    outline = false,\r\n    borderColor = lGrey0,\r\n    imagePosition = 'top',\r\n    includeText = true,\r\n    includeShadow = true,\r\n    uniformHeight = false,\r\n    numColumns = 3,\r\n    style,\r\n  } = props as any;\r\n\r\n  return createBlock(\r\n    'Interaction',\r\n    [\r\n      createLayout(contentForColumn(props.numberOfCards), 0, true),\r\n\r\n      createBlock('SingleColumnLayout', [\r\n        createBlock('Column', [createContinueBtn(style)], {\r\n          props: {\r\n            flexDirection: 'row',\r\n            alignItems: 'center',\r\n            justifyContent: 'center',\r\n            flexWrap: 'wrap',\r\n          },\r\n          meta: {\r\n            subType: 'ButtonBlock',\r\n          },\r\n        }),\r\n      ]),\r\n    ],\r\n    {\r\n      props: {\r\n        name: props.name,\r\n        sId: getSId('interaction'),\r\n        style: props.style,\r\n        grid,\r\n        contentCardBackgroundColor,\r\n        contentCardPanelTextColor,\r\n        contentCardContentTextColor,\r\n        width,\r\n        height,\r\n        outline,\r\n        borderRadius,\r\n        borderColor,\r\n        imagePosition,\r\n        includeText,\r\n        includeShadow,\r\n        uniformHeight,\r\n        numColumns,\r\n      },\r\n      meta: {\r\n        subType: 'ContentCards',\r\n\r\n        layout: 'OneColumn',\r\n      },\r\n    }\r\n  );\r\n};\r\n\r\nexport const create = createContentCardInteractionBlock;\r\nexport const interactionConfig = {};\r\n\r\nexport { contentCard_default };\r\n","import { createBlock } from 'factories/block';\nimport { InteractionProps, repeat } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { createFeedbackBlock } from './feedback';\nimport { colors } from 'styles/variables';\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { flatten } from 'factories/utils';\nimport { createContinueBtn } from './continueBtn';\nimport { createEditableBtn } from './editableBtn';\nimport Correct_default from 'assets/Correct_loop.gif'; // Correct_default.svg';\nimport Incorrect_default from 'assets/Incorrect_loop.gif'; // Incorrect_default.svg';\nimport uuid from 'uuidv4';\nimport { getSId } from '../utils';\nimport { createMediaBlock } from './media';\n\nconst { lPink, lGrey0, lGrey2, lTeal0 } = colors;\n\nexport type SelectOptionsInteractionProps = InteractionProps & {\n  answerCount: number;\n};\n\nexport const createSelectOptionBlock = () => {\n  return createBlock('SelectOption', [createBlock('Text')], {\n    props: {\n      type: 'SelectOption',\n      values: ['Option 1', 'Option 2', 'Option 3'],\n      correctAnswer: 0,\n    },\n  });\n};\n\nexport const createSelectOptionsBlock = (count: number) => {\n  return createBlock('SelectOptionsRoot', [\n    createBlock('Question', [createBlock('Text')]),\n\n    createBlock('SelectOptions', [\n      ...repeat(() => createSelectOptionBlock(), count),\n    ]),\n    createEditableBtn({ type: 'Submit_Button', label: 'Submit' }),\n\n    createFeedbackBlock({}),\n  ]);\n};\n\nconst contentForColumn = (count: number) => (i: number) => {\n  return [\n    () =>\n      createMediaBlock({\n        src: undefined,\n        child: 1,\n        useBackgroundControls: true,\n      }),\n    () =>\n      createBlock('InteractionColumn', [\n        createSelectOptionsBlock(count),\n        createMediaBlock({\n          child: 0,\n          isAdditionalMedia: true,\n        }),\n      ]),\n  ][i];\n};\n\nexport const addSelectOption = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'SelectOptions') {\n    const selectOptionBlock = createSelectOptionBlock();\n\n    const selectOptionBlockRef = {\n      id: selectOptionBlock.id,\n      type: 'Ref',\n    };\n    const [newBlocks] = flatten(selectOptionBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 0, selectOptionBlockRef);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const removeSelectOption = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'SelectOptions') {\n    const selectOptionBlock = createSelectOptionBlock();\n    const [newBlocks] = flatten(selectOptionBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 1);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const createSelectOptionsInteractionBlock = (\n  props: SelectOptionsInteractionProps\n) => {\n  const {\n    numberOfAttempts = 1,\n    showCorrectAnswer = 0,\n    lockDown = 0,\n    score = true,\n    style,\n  } = props as any;\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(\n        contentForColumn(props.answerCount),\n        props.columnCount,\n        props.columnsReversed\n      ),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style,\n\n        numberOfAttempts,\n        showCorrectAnswer,\n        lockDown,\n        score,\n      },\n      meta: {\n        subType: 'SelectOptions',\n        layout: `${props.columnCount === 0 ? 'OneColumn' : 'TwoColumns'}${\n          props.columnsReversed ? 'Reversed' : ''\n        }`,\n      },\n    }\n  );\n};\n\nexport const create = createSelectOptionsInteractionBlock;\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps, reverse } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { createContinueBtn } from './continueBtn';\nimport { createFeedbackBlock } from './feedback';\nimport { createMediaBlock } from './media';\n\nconst contentForColumn = (count: number, sharedQuestionMedia) => (\n  i: number\n) => {\n  return [\n    () =>\n      createBlock('ColumnContent', [\n        createMediaBlock({\n          child: 1,\n        }),\n        sharedQuestionMedia,\n      ]),\n\n    () =>\n      createBlock('InteractionColumn', [\n        createBlock('Slider', [\n          sharedQuestionMedia,\n          createBlock('Text'),\n          createBlock('Text'),\n          createFeedbackBlock({ label: 'Submit' }),\n        ]),\n        createMediaBlock({\n          child: 0,\n          isAdditionalMedia: true,\n        }),\n      ]),\n  ][i];\n};\n\nexport const createSliderInteractionBlock = props => {\n  const sharedQuestionMedia = createMediaBlock({ child: 0 });\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(contentForColumn(0, sharedQuestionMedia), 0, true),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn({})], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        name: props.name,\n        style: props.style,\n      },\n      meta: {\n        subType: 'Slider',\n        layout: 'OneColumnReversed',\n      },\n    }\n  );\n};\n\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps, repeat } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { colors } from 'styles/variables';\nimport { createContinueBtn } from './continueBtn';\nimport { createEditableBtn } from './editableBtn';\nimport resultsPassed from 'assets/Correct_loop.gif';\nimport resultsFailed from 'assets/Incorrect_loop.gif';\nimport { createMediaBlock } from './media';\nimport uuid from 'uuidv4';\nimport { getSId } from '../utils';\nimport { Block, cloneBlock, Blocks } from '@chameleoncreator/creator-app';\nimport { flatten } from 'factories/utils';\n\nconst { lPink } = colors;\n\nconst certificateTextField = (isInputField?: boolean) => {\n  return createBlock(\n    'CertificateTextField',\n    [\n      createBlock('Text', [], {\n        props: {\n          isInputField,\n          placeholder: isInputField\n            ? 'Add placeholder text here...'\n            : undefined,\n          isCertificateField: true,\n        },\n      }),\n    ],\n    {\n      props: {\n        ...(isInputField && {\n          isInputField,\n        }),\n      },\n    }\n  );\n};\n\nexport const createCertificateBlock = () => {\n  return createBlock('Certificate', [\n    createBlock('CertificateTextFields', [certificateTextField()]),\n\n    createEditableBtn({\n      label: 'Download',\n    }),\n  ]);\n};\n\nexport const createCertificateTemplatesBlock = () => {\n  // these would get their own 'names' (types) maybe. . .\n  // just genericized for now\n  return createBlock('CertificateTemplates', [\n    createBlock('CertificateTemplate', [\n      createBlock('Text'),\n      createBlock('Text'),\n    ]),\n    createBlock('CertificateTemplate', [\n      createBlock('Text'),\n      createBlock('Text'),\n    ]),\n    createBlock('CertificateTemplate', [\n      createBlock('Text'),\n      createBlock('Text'),\n    ]),\n  ]);\n};\n\nexport const addCertificateTextField = (\n  block: Block,\n  position: number,\n  isInputField: boolean\n): [Block, Blocks?] => {\n  if (block.type === 'CertificateTextFields') {\n    const certificateTextFieldBlock = certificateTextField(isInputField);\n\n    const certificateTextFieldBlockRef = {\n      id: certificateTextFieldBlock.id,\n      type: 'Ref',\n    };\n    const [newBlocks] = flatten(certificateTextFieldBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(\n      position,\n      0,\n      certificateTextFieldBlockRef\n    );\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const removeCertificateTextField = (\n  block: Block,\n  position: number\n): [Block, Blocks?] => {\n  if (block.type === 'CertificateTextFields') {\n    const certificateTextFieldBlock = certificateTextField();\n\n    const [newBlocks] = flatten(certificateTextFieldBlock);\n\n    const nextBlock = cloneBlock(block);\n    (nextBlock.children as Block[]).splice(position, 1);\n\n    return [nextBlock, newBlocks];\n  }\n  return [block, undefined];\n};\n\nexport const createCertificateInteractionBlock = props => {\n  const { style } = props as any;\n\n  return createBlock(\n    'Interaction',\n    [\n      createBlock('CertificateMedia', [createMediaBlock({ child: 0 })]),\n      createBlock('Certificates', [createCertificateBlock()]),\n\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        type: 'Certificate',\n        name: props.name,\n        sId: getSId('interaction'),\n\n        style: props.style,\n      },\n      meta: {\n        subType: 'Certificate',\n        layout: `${props.columnCount === 0 ? 'OneColumn' : 'TwoColumns'}${\n          props.columnsReversed ? 'Reversed' : ''\n        }`,\n      },\n    }\n  );\n};\n\nexport const create = createCertificateInteractionBlock;\nexport const interactionConfig = {};\n","import {\n  createAccordionInteractionBlock,\n  ImageChoice,\n} from 'factories/interactions/accordion';\nimport { createImageInteractionBlock } from 'factories/interactions/image';\nimport { createCarouselInteractionBlock } from 'factories/interactions/carousel';\nimport { createFlipcardInteractionBlock } from 'factories/interactions/flipcard';\nimport { createFullPageTextBlock } from 'factories/interactions/fullpagetext';\nimport { createMultichoiceInteractionBlock } from 'factories/interactions/multichoice';\nimport { createMultichoiceImageInteractionBlock } from 'factories/interactions/multichoiceimage';\nimport { createSortationInteractionBlock } from 'factories/interactions/sortation';\nimport { createDragAndDropInteractionBlock } from 'factories/interactions/draganddrop';\n// import { createMatchingInteractionBlock } from 'factories/interactions/matching';\nimport { createMatchingInteractionBlock } from 'factories/interactions/matching_v2';\nimport { createHotSpotInteractionBlock } from 'factories/interactions/hotspot';\nimport { createFiveStarRatingInteractionBlock } from 'factories/interactions/fivestarrating';\nimport { createResultsPageInteractionBlock } from 'factories/interactions/resultspage';\nimport { createClickAndRevealInteractionBlock } from 'factories/interactions/clickandreveal';\nimport { createTopicPortalInteractionBlock } from 'factories/interactions/topicportal';\nimport { createAssessmentInteractionBlock } from 'factories/interactions/assessment';\nimport { createAssessmentIntroductionInteractionBlock } from 'factories/interactions/assessmentintroduction';\nimport { createAssessmentQuestionInteractionBlock } from 'factories/interactions/assessmentquestion';\nimport { createAssessmentResultsInteractionBlock } from 'factories/interactions/assessmentresults';\nimport { createContentCardInteractionBlock } from 'factories/interactions/contentcard';\nimport { createTextEntryInteractionBlock } from 'factories/interactions/textentry';\nimport { createTextEntryVariableInteractionBlock } from 'factories/interactions/textentryvariable';\nimport { createTextEntryQuizInteractionBlock } from 'factories/interactions/textentryquiz';\nimport { createSelectOptionsInteractionBlock } from 'factories/interactions/selectoptions';\nimport { createSliderInteractionBlock } from 'factories/interactions/slider';\nimport { createCertificateInteractionBlock } from 'factories/interactions/certificate';\n\nimport { addInteraction } from 'factories/topic';\nimport store from 'store/next';\nimport { flatten } from 'factories/utils';\nimport { getBlock, getInteractionsFromTopicAndState } from 'selectors/block';\nimport { ContainerProperties } from './NewSectionWizard';\nimport { InteractionProps } from 'factories/interactions/interaction';\n\nconst ccount = {\n  center: 0,\n  centerReversed: 0,\n  left: 1,\n  right: 1,\n};\nconst creversed = {\n  center: false,\n  centerReversed: true,\n  // center: true,\n  // centerReversed: false,\n  left: false,\n  right: true,\n  // left: true,\n  // right: false,\n};\n\nconst transformProperties = (\n  name: string,\n  props: ContainerProperties\n): InteractionProps => ({\n  name,\n  columnCount: ccount[props.layout],\n  columnsReversed: creversed[props.layout],\n  style: {\n    background: props.background,\n    foreground: props.textColor,\n    buttonBackground: props.buttonColor,\n    buttonForeground: props.buttonTextColor,\n  },\n});\n\nconst newInteractions = {\n  accordion({\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    name,\n    ...interactionProperties\n  }) {\n    return createAccordionInteractionBlock({\n      ...containerProperties,\n      name,\n      numberOfAccordions: numberOfItems,\n      imgChoice: {\n        left: ImageChoice.Left,\n        right: ImageChoice.Right,\n        fill: ImageChoice.Right,\n        none: ImageChoice.None,\n      }[layout || 'left'],\n      ...interactionProperties,\n    });\n  },\n  image({ name, layout, containerProperties, ...interactionProperties }) {\n    return createImageInteractionBlock({\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  carousel({\n    name,\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    return createCarouselInteractionBlock({\n      numberOfSlides: numberOfItems,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  'flip card'({\n    name,\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    const data = createFlipcardInteractionBlock({\n      answerCount: numberOfItems,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n\n    return data;\n  },\n  'full page text'({\n    name,\n    numberOfItems = 1,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    return createFullPageTextBlock({\n      numberOfSlides: numberOfItems,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  'content cards'({\n    name,\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    return createContentCardInteractionBlock({\n      numberOfCards: numberOfItems,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  'multiple choice'({\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    name,\n    ...interactionProperties\n  }) {\n    return createMultichoiceInteractionBlock({\n      answerCount: numberOfItems,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  'multiple choice media'({\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    name,\n    ...interactionProperties\n  }) {\n    return createMultichoiceInteractionBlock({\n      // createMultichoiceImageInteractionBlock\n      answerCount: numberOfItems,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  sortation({\n    name,\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    // console.log('sortation name', name);\n    return createSortationInteractionBlock({\n      answerCount: numberOfItems,\n      layout,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  slider({\n    // numberOfItems = 3,\n    layout,\n    containerProperties,\n    name,\n    ...interactionProperties\n  }) {\n    return createSliderInteractionBlock({\n      answerCount: 0,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  'drag and drop'({\n    name,\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    return createDragAndDropInteractionBlock({\n      answerCount: numberOfItems,\n      layout,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  matching({\n    name,\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    return createMatchingInteractionBlock({\n      answerCount: numberOfItems,\n      layout,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  hotspot({\n    name,\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    //\n    return createHotSpotInteractionBlock({\n      answerCount: numberOfItems,\n      layout,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  '5 star rating'({\n    name,\n    numberOfItems = 0,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    //\n    return createFiveStarRatingInteractionBlock({\n      answerCount: numberOfItems,\n      layout,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  'results page'({\n    name,\n    numberOfItems = 0,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    //\n    return createResultsPageInteractionBlock({\n      answerCount: numberOfItems,\n      layout,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  certificate({\n    name,\n    numberOfItems = 0,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    //\n    return createCertificateInteractionBlock({\n      answerCount: numberOfItems,\n      layout,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  'click and reveal'({\n    name,\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    const data = createClickAndRevealInteractionBlock({\n      answerCount: numberOfItems,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n\n    return data;\n  },\n  'landing page'({\n    name,\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    const data = createClickAndRevealInteractionBlock({\n      answerCount: numberOfItems,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n\n    return data;\n  },\n  'text entry'({\n    name,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    //createTextEntryInteractionBlock\n    return createFiveStarRatingInteractionBlock({\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  'text entry variable'({\n    name,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    return createTextEntryVariableInteractionBlock({\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  'text entry quiz'({\n    name,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    //createTextEntryInteractionBlock\n    return createTextEntryQuizInteractionBlock({\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n  },\n  'select options'({\n    name,\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    const data = createSelectOptionsInteractionBlock({\n      answerCount: numberOfItems,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n\n    return data;\n  },\n  'topic portal'({\n    name,\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    const data = createTopicPortalInteractionBlock({\n      answerCount: numberOfItems,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n\n    return data;\n  },\n  assessment({\n    name,\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    const data = createAssessmentInteractionBlock({\n      answerCount: numberOfItems,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n\n    return data;\n  },\n  'assessment introduction'({\n    name,\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    const data = createAssessmentIntroductionInteractionBlock({\n      answerCount: numberOfItems,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n\n    return data;\n  },\n  'assessment question'({\n    name,\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    const data = createAssessmentQuestionInteractionBlock({\n      answerCount: numberOfItems,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n\n    return data;\n  },\n  'assessment results'({\n    name,\n    numberOfItems = 3,\n    layout,\n    containerProperties,\n    ...interactionProperties\n  }) {\n    const data = createAssessmentResultsInteractionBlock({\n      answerCount: numberOfItems,\n      ...containerProperties,\n      name,\n      ...interactionProperties,\n    });\n\n    return data;\n  },\n};\n\nconst createInteraction = ({\n  blocks,\n  topic,\n  containerProperties,\n  interactionProperties,\n  setBlocks,\n  setBlock,\n}) => {\n  const topicBlock = getBlock(blocks, topic.id);\n  const p = transformProperties('', containerProperties);\n\n  let { type } = interactionProperties;\n\n  if (type === 'hotspot quiz') {\n    type = 'hotspot';\n  }\n\n  if (type === 'hotspot landing page') {\n    type = 'hotspot';\n  }\n\n  const newInteraction = newInteractions[type]({\n    containerProperties: p,\n    ...interactionProperties,\n  });\n\n  const [newBlocks, rootId] = flatten(newInteraction);\n\n  const newInteractionRef = {\n    type: 'Ref',\n    id: rootId,\n  };\n\n  const newTopicBlock = addInteraction(blocks)(\n    topicBlock,\n    newInteractionRef,\n    getInteractionsFromTopicAndState(store.getState() as any, topicBlock).length\n  );\n\n  setBlocks(newBlocks).then(() => {\n    setBlock(newTopicBlock);\n  });\n};\n\nexport default createInteraction;\n","import { createBlock } from 'factories/block';\nimport { InteractionProps, reverse } from './interaction';\nimport { createContinueBtn } from './continueBtn';\nimport { getSId } from '../utils';\nimport { createMediaBlock } from './media';\n\nexport type ImageInteractionProps = InteractionProps & {};\n\nexport const createFullPageTextBlock = (props: any) => {\n  // will fix this up later with the ' prop 'er definitions etc\n  const { lockDown = 0, style } = props as any;\n\n  return createBlock(\n    'Interaction',\n    [\n      createBlock('FullPageText', [\n        createMediaBlock({\n          child: 0,\n        }),\n      ]),\n\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        type: 'FullPageText',\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style || {},\n        lockDown,\n      },\n      meta: {\n        subType: 'FullPageText',\n      },\n    }\n  );\n};\n\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { createMediaBlock } from './media';\nimport { createContinueBtn } from './continueBtn';\nimport { getSId } from '../utils';\nimport { createEditableBtn } from './editableBtn';\nimport { createFeedbackBlock } from './feedback';\n\nexport type ImageInteractionProps = InteractionProps & {};\n\nconst contentForColumn = props => (i: number) => {\n  return [\n    () =>\n      createBlock('TextEntryVariable', [\n        createEditableBtn({\n          label: 'Submit',\n        }),\n      ]),\n    () =>\n      createBlock('ColumnImageAndText', [\n        createMediaBlock({ child: 1 }),\n        createBlock('Text'),\n      ]),\n  ][i];\n};\n\nexport const createTextEntryVariableInteractionBlock = (props: any) => {\n  // will fix this up later with the ' prop 'er definitions etc\n\n  const { lockDown = 0, style } = props as any;\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(contentForColumn(0), 0, false),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style,\n        lockDown,\n      },\n      meta: {\n        subType: 'TextEntryVariable',\n        layout: 'OneColumnReversed',\n      },\n    }\n  );\n};\n\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { InteractionProps } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { createMediaBlock } from './media';\nimport { createContinueBtn } from './continueBtn';\nimport { getSId } from '../utils';\nimport { createEditableBtn } from './editableBtn';\nimport { createFeedbackBlock } from './feedback';\n\nexport type ImageInteractionProps = InteractionProps & {};\n\nconst contentForColumn = props => (i: number) => {\n  return [\n    () =>\n      createBlock('TextEntryQuiz', [\n        createBlock('Text'),\n        createEditableBtn({\n          label: 'Submit',\n        }),\n\n        createFeedbackBlock({}),\n      ]),\n    () =>\n      createMediaBlock({\n        child: 1,\n      }),\n  ][i];\n};\n\nexport const createTextEntryQuizInteractionBlock = (props: any) => {\n  // will fix this up later with the ' prop 'er definitions etc\n\n  const { lockDown = 0, style } = props as any;\n\n  return createBlock(\n    'Interaction',\n    [\n      createLayout(contentForColumn(props), props.columnCount, true),\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style,\n        lockDown,\n      },\n      meta: {\n        subType: 'TextEntryQuiz',\n        layout: `${props.columnCount === 0 ? 'OneColumn' : 'TwoColumns'}${\n          props.columnsReversed ? 'Reversed' : ''\n        }`,\n      },\n    }\n  );\n};\n\nexport const interactionConfig = {};\n","import { createBlock } from 'factories/block';\nimport { Block } from '@chameleoncreator/creator-app';\nimport { InteractionProps, reverse } from './interaction';\nimport { createLayout } from 'factories/layout';\nimport { createMediaBlock } from './media';\nimport { createContinueBtn } from './continueBtn';\nimport uuid from 'uuidv4';\nimport { getSId } from '../utils';\n\nexport type ImageInteractionProps = InteractionProps & {};\n\nconst createAssessmentIntroduction = (props?: {}) => {\n  return createBlock('AssessmentIntroduction', [], { props: {} });\n};\n\nconst createAssessmentQuestion = (props?: {}) => {\n  return createBlock('AssessmentQuestion', [], { props: {} });\n};\n\nconst createAssessmentResults = (props?: {}) => {\n  return createBlock('AssessmentResults', [], { props: {} });\n};\n\nexport const createAssessmentInteractionBlock = props => {\n  return createBlock(\n    'Interaction',\n    [\n      createBlock('Assessment', [\n        createAssessmentIntroduction(),\n        createAssessmentQuestion(),\n        createAssessmentResults(),\n      ]),\n\n      createBlock('SingleColumnLayout', [\n        createBlock('Column', [createContinueBtn(props.style)], {\n          props: {\n            flexDirection: 'row',\n            alignItems: 'center',\n            justifyContent: 'center',\n            flexWrap: 'wrap',\n          },\n          meta: {\n            subType: 'ButtonBlock',\n          },\n        }),\n      ]),\n    ],\n    {\n      props: {\n        type: 'Assessment',\n        name: props.name,\n        sId: getSId('interaction'),\n        style: props.style || {},\n      },\n      meta: {\n        subType: 'Assessment',\n      },\n    }\n  );\n};\n\nexport const interactionConfig = {};\n","/** @jsx jsx */\n\nimport { useState, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { values, colors } from 'styles/variables';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport Plus from 'assets/Plus.svg';\nimport getCurrentTopic from 'services/apiHelpers/getCurrentTopic';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport { Block } from '@chameleoncreator/creator-app';\nimport createInteraction from 'components/Editor/NewSectionWizard/createInteraction';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setBlockAction } from 'actions/setBlockAction';\nimport { setBlocksAction } from 'actions/setBlocksAction';\nimport { State } from 'store/store';\nimport preview from 'assets/previewInteractionIcon.svg';\n//preview_interaction.svg';\nimport pubSub from 'services/pubSub';\nimport reviewToolReviewsBubble from 'assets/reviewToolReviewsBubble.svg';\nimport { Bubble } from 'components/Editor/EditorUtilities/UI/Bubble';\n\nconst { lPink, mint } = colors;\n// const { headerHeight } = values;\n\nconst color = mint || lPink;\nconst size = 40;\nconst bottomPadding = 30;\nconst getBoxShadow = hover =>\n  `box-shadow: 0 3px 10px rgba(0, 0, 0, ${hover ? 0.25 : 0});`;\n\nconst Wrapper = ({ id, focusedNodeId, headerHeight = 70 }) => {\n  const [reviewToolToggleOn, setReviewToolToggleOn] = useState<boolean>(false);\n  const [hover, setHover] = useState(false);\n\n  const topic = getCurrentTopic() as any;\n  const topicAsAssessment = topic?.props?.asAssessment;\n\n  const state = useSelector((state: State) => {\n    return state;\n  });\n\n  const [infoBubble, setInfoBubble] = useState<{\n    element: HTMLElement;\n    content: string;\n  } | null>();\n\n  const dispatch = useDispatch();\n\n  const setBlock = block => {\n    dispatch(setBlockAction(block));\n  };\n  const setBlocks = blocks => dispatch(setBlocksAction(blocks));\n\n  return (\n    <div\n      css={css`\n        position: absolute;\n        left: 0px;\n        top: 0px;\n        width: 100%;\n        height: 100%;\n        padding: ${headerHeight + 3}px 3px ${bottomPadding}px 3px;\n        pointer-events: none;\n\n        * {\n          font-family: 'Poppins';\n        }\n      `}\n    >\n      <div\n        css={css`\n          width: 100%;\n          height: 100%;\n          box-shadow: 0 0 0 1px\n            ${focusedNodeId === id ? color : hover ? color : 'lightGrey'};\n          transition: box-shadow 0.25s;\n        `}\n      />\n\n      {!topicAsAssessment && (\n        <div\n          css={css`\n          position: absolute;\n          left: 50%;\n          bottom: ${bottomPadding - size / 2}px;\n          width: ${size}px;\n          height: ${size}px;\n          transform: translateX(-50%);\n          border-radius: 50%;\n          background: ${color} url('${Plus}') no-repeat;\n        \n          background-size: 40%;\n          background-position: center;\n          cursor: pointer;\n          pointer-events: auto;\n\n          transition: all 0.3s;\n\n          ${getBoxShadow(false)}\n\n          &:hover {\n            ${getBoxShadow(true)}\n          }\n        \n        `}\n          onClick={() => {\n            if (topicAsAssessment) {\n              const topicAnimationGroup = getBlockById(\n                topic.children[0].id\n              ) as Block;\n              if (topicAnimationGroup && topicAnimationGroup.children) {\n                const numQuestions = topicAnimationGroup.children.length - 2;\n\n                createInteraction({\n                  blocks: state.blocks,\n                  topic,\n                  containerProperties: {},\n                  interactionProperties: {\n                    type: 'assessment question',\n                    name: `Question #${numQuestions + 1}`,\n                    layout: null,\n                  },\n                  setBlocks,\n                  setBlock,\n                });\n              }\n\n              return;\n            }\n\n            parent.setNewSectionWizard && parent.setNewSectionWizard(true);\n          }}\n          // onMouseEnter={e => {\n          //   setInfoBubble({\n          //     element: e.currentTarget,\n          //     content: 'Add new interaction',\n          //   });\n          // }}\n          // onMouseLeave={e => {\n          //   setInfoBubble(null);\n          // }}\n\n          data-info-bubble=\"Add new interaction\"\n        />\n      )}\n\n      <div\n        css={css`\n          position: absolute;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          right: ${175 / 2}px;\n          bottom: ${bottomPadding - size / 2}px;\n          width: 175px;\n          height: ${size}px;\n\n          border-radius: 9999px;\n          background: ${color};\n\n          cursor: pointer;\n          pointer-events: auto;\n\n          color: #fff;\n          font-size: 14px;\n          transition: all 0.3s;\n\n          ${getBoxShadow(false)}\n\n          &:hover {\n            ${getBoxShadow(true)}\n          }\n        `}\n        onMouseOver={() => setHover(true)}\n        onMouseOut={() => setHover(false)}\n        onClick={() => {\n          setCurrentBlock(focusedNodeId !== id ? { id } : null);\n        }}\n      >\n        Settings\n      </div>\n\n      <button\n        css={css({\n          all: 'unset',\n          //\n          position: 'absolute',\n          right: 25,\n          bottom: 10,\n\n          width: size,\n          height: size,\n          background: `${mint} url(${preview}) no-repeat`,\n          // backgroundSize: `44%`,\n          backgroundSize: '100%',\n          backgroundPosition: 'center',\n          borderRadius: '50%',\n          cursor: 'pointer',\n          pointerEvents: 'auto',\n\n          transition: 'all 0.3s',\n\n          boxShadow: `0 3px 10px rgba(0, 0, 0, 0)`,\n          ':hover': {\n            boxShadow: `0 3px 10px rgba(0, 0, 0, 0.25)`,\n          },\n        })}\n        onClick={() => {\n          //\n\n          if (state.currentTopic && state.currentInteraction) {\n            const topicSId = state.blocks[state.currentTopic]?.props?.sId;\n            const currentInteractionSId =\n              state.blocks[state.currentInteraction]?.props?.sId;\n\n            const previewLocation = `#${topicSId}/${currentInteractionSId}`;\n\n            const { links } = state;\n            const previewLink = links.preview;\n            const newWindowUrl = previewLink ? `${previewLink}` : `module.html`;\n            //\n            window.open(`${newWindowUrl}${previewLocation}`, 'preview');\n          }\n        }}\n        // onMouseEnter={e => {\n        //   setInfoBubble({\n        //     element: e.currentTarget,\n        //     content: 'Preview this interaction',\n        //   });\n        // }}\n        // onMouseLeave={e => {\n        //   setInfoBubble(null);\n        // }}\n\n        data-info-bubble=\"Preview this interaction\"\n      />\n\n      {window.reviewModeEnabled && !reviewToolToggleOn && (\n        <button\n          className=\"fader_-2s\"\n          css={css({\n            all: 'unset',\n            //\n            position: 'absolute',\n            left: 25,\n            bottom: 10,\n            width: size,\n            height: size,\n            background: `#F88198 url('${reviewToolReviewsBubble}')no-repeat`,\n            backgroundSize: '50%',\n            backgroundPosition: 'center',\n            borderRadius: '50%',\n            cursor: 'pointer',\n            pointerEvents: 'auto',\n            transition: 'all 0.3s',\n\n            boxShadow: `0 3px 10px rgba(0, 0, 0, 0)`,\n            ':hover': {\n              boxShadow: `0 3px 10px rgba(0, 0, 0, 0.25)`,\n            },\n          })}\n          onClick={() => {\n            const pS = pubSub.publish('SHOW_REVIEW_TOOL', {\n              showReviewTool: true,\n              setReviewToolToggleOff() {\n                setReviewToolToggleOn(false);\n              },\n            });\n\n            setReviewToolToggleOn(true);\n          }}\n        />\n      )}\n    </div>\n  );\n};\n\nexport default Wrapper;\n","/** @jsx jsx */\n\nimport React, { Fragment as _, useState, useEffect, useRef } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport getTopics from 'services/apiHelpers/getTopics';\nimport { useSelector } from 'react-redux';\nimport pubSub from 'services/pubSub';\nimport getStore from 'services/getStore';\nimport { backBtnOnClick } from 'components/Header/BackBtn';\n\nconst store = getStore();\n\nconst HiddenBackButton = ({ id }) => {\n  const [disabled, setDisabled] = useState(false);\n  const currentTopic = useSelector(({ currentTopic }: any) => currentTopic);\n\n  const isMounted = useRef(true);\n\n  const getInteractions = () => {\n    return Array.from(document.querySelectorAll('[data-section]'));\n  };\n\n  const getPrevSection = () => {\n    const interactions = getInteractions();\n\n    const currentSectionIndex = interactions.findIndex(\n      (i: any) => i.id === `i${id}`\n    );\n\n    const prevSection = interactions[currentSectionIndex - 1];\n\n    return prevSection;\n  };\n\n  const isModulesFirstInteraction = () => {\n    const isTopic0 =\n      getTopics().findIndex((t: any) => t.id === currentTopic) === 0;\n    const hasPrevSection = !!getPrevSection();\n\n    if (isTopic0) {\n      if (!hasPrevSection) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  useEffect(() => {\n    if (isModulesFirstInteraction()) {\n      setDisabled(true);\n    }\n\n    return () => {\n      isMounted.current = false;\n    };\n  }, []);\n\n  return (\n    <button\n      id={`hidden-back-button-${id}`}\n      css={css`\n        position: absolute;\n        left: 0;\n        top: 0;\n        width: 0;\n        height: 0;\n        border: 0;\n        outline: 0;\n        overflow: hidden;\n      `}\n      disabled={disabled}\n      onClick={backBtnOnClick}\n      onFocus={() => {\n        pubSub.publish('HILITE_CHAMELEON_BACK_BUTTON', { toggle: true });\n      }}\n      onBlur={() => {\n        pubSub.publish('HILITE_CHAMELEON_BACK_BUTTON', { toggle: false });\n      }}\n      aria-label=\"Go back\"\n    >\n      {/* {id} */}\n      Go back\n    </button>\n  );\n};\n\nexport default HiddenBackButton;\n","/** @jsx jsx */\n\nimport { jsx } from '@emotion/core';\nimport { useCachedResource } from 'services/useCachedResource';\nimport { CHAMELEON_CACHE_v1 } from 'services/imageCache';\n\nconst Background = ({\n  backgroundImage,\n  backgroundImageOpacity,\n  backgroundBlur = 0,\n}) => {\n  const backgroundImageURL = backgroundImage\n    .split(/\\(|\\)/g)[1]\n    .replace(/'/g, '');\n\n  const cachedBackgroundImage = useCachedResource(\n    CHAMELEON_CACHE_v1,\n    backgroundImageURL\n  );\n\n  return (\n    <div\n      style={{\n        position: 'absolute',\n        left: 0,\n        top: 0,\n        width: '100%',\n        height: '100%',\n        background: `url('${cachedBackgroundImage ||\n          backgroundImageURL}') center / cover no-repeat`,\n        opacity: backgroundImageOpacity / 100,\n        filter: `blur(${backgroundBlur}px)`,\n        // scale the thing up to not have blurry edges\n        ...(backgroundBlur > 0 && {\n          transformOrigin: 'center',\n          transform: 'scale(1.1)',\n        }),\n      }}\n    />\n  );\n};\n\nexport default Background;\n","import getTopics from 'services/apiHelpers/getTopics';\nimport getStore from 'services/getStore';\nimport { updateInteractionsOpenAction } from 'actions/updateInteractionsOpenAction';\nimport getCurrentTopic from 'services/apiHelpers/getCurrentTopic';\nimport setCurrentTopic from 'services/apiHelpers/setCurrentTopic';\nimport onScrollEnds from 'services/onScrollEnds';\nimport { Block } from '@chameleoncreator/creator-app';\nimport { getTopicsNotHiddenFromNextAndBackNavigation } from 'services/getTopicsNotHiddenFromNextAndBackNavigation';\n\nconst store = getStore();\n\nlet checkWindowHasScrolled;\n\nconst navToNextTopic = () => {\n  const topics = getTopics();\n\n  const topicsNotHiddenFromNextAndBackNavigation = getTopicsNotHiddenFromNextAndBackNavigation(\n    topics\n  );\n\n  const nextTopic =\n    topicsNotHiddenFromNextAndBackNavigation[\n      topicsNotHiddenFromNextAndBackNavigation.findIndex(\n        t => t.id === (getCurrentTopic() as Block).id\n      ) + 1\n    ];\n\n  if (!nextTopic) return;\n\n  setCurrentTopic(nextTopic.id);\n\n  window.scrollTo(0, 0);\n\n  if (\n    window['CHAMELEON_EVENTS_API'] &&\n    typeof window['CHAMELEON_EVENTS_API'] === 'function'\n  ) {\n    window['CHAMELEON_EVENTS_API']('NAVIGATION_TO_NEXT_TOPIC');\n  }\n};\n\nconst next = (sId: number, id: string) => l => {\n  if (l !== 'next') {\n    // console.log('branching');\n\n    window.location.hash = l;\n    return;\n  }\n\n  (window as any).locationHistory = null;\n\n  store.dispatch(updateInteractionsOpenAction(id));\n\n  const getNextInteraction = () => {\n    // being more specific with the selector here since it appears that certain extensions ' you know loom you are. . . '\n    // are injecting section elements onto the page\n\n    // we only want sections that are within a chameleon topic container\n    const topicContainer =\n      document.querySelector('[class*=\"TopicContainer\"]') ||\n      document.querySelector('[class*=\"AssessmentContainer\"]');\n    //\n    // console.log(topicContainer);\n\n    if (!topicContainer) {\n      return;\n    }\n\n    const interactions = Array.from(topicContainer.querySelectorAll('section'));\n\n    const nextInteraction: HTMLElement =\n      interactions[interactions.findIndex(i => i.id === `i${id}`) + 1];\n\n    // console.log(`'next' navigates to next interaction ?`, nextInteraction);\n\n    return nextInteraction;\n  };\n\n  requestAnimationFrame(() => {\n    const nextInteraction = getNextInteraction();\n\n    const windowScrollY = window.scrollY;\n\n    clearTimeout(checkWindowHasScrolled);\n\n    if (nextInteraction) {\n      nextInteraction.scrollIntoView({\n        behavior: 'smooth',\n      });\n\n      checkWindowHasScrolled = setTimeout(() => {\n        if (window.scrollY === windowScrollY) {\n          nextInteraction.scrollIntoView();\n          // console.log(\n          //   'smooth scrolling failed so we attempt to snap to the nextInteraction'\n          // );\n        } else {\n          // console.log('we have smooth scrolled to the next interaction');\n        }\n      }, 300);\n\n      //\n\n      onScrollEnds(() => {\n        nextInteraction.focus({\n          preventScroll: true,\n        });\n      });\n      //\n    } else {\n      navToNextTopic();\n    }\n  });\n};\n\nexport default next;\n","\nexport const updateInteractionsOpenAction = (id: string) => {\n  return {\n    type: 'UPDATE_INTERACTIONS_OPEN',\n    data: id,\n  };\n};\n","import getStore from 'services/getStore';\n\nconst store = getStore();\n\nconst getFontSize = (base, h) => {\n  return `\n    font-size: ${base + (h > 1 ? h / 10 : 0)}rem;\n  `;\n  //\n};\n\nfunction halfwayBetween2Numbers(a: number, b: number) {\n  return (a + b) / 2;\n}\n\nconst headingsTable = {\n  h1: [4.5, halfwayBetween2Numbers(4.5, 2), 2],\n  h2: [3.5, halfwayBetween2Numbers(3.5, 2), 2],\n  h3: [3, halfwayBetween2Numbers(3, 2), 2],\n  h4: [2.6, halfwayBetween2Numbers(2.6, 2), 2],\n  h5: [2, halfwayBetween2Numbers(2, 1.2), 1.2],\n  h6: [1.6, halfwayBetween2Numbers(1.6, 1.2), 1.2],\n};\n\nconst getLineHeight = (heading: keyof typeof headingsTable, index) => {\n  //\n  // H1 - 4.5 Rem\n  // H2 - 3.5 Rem\n  // H3 - 3 Rem\n  // H4 - 2.6 Rem\n  // H5 - 2 Rem\n  // H6 - 1.6 Rem\n\n  const defaultLineHeight = 1.5;\n  const { lineHeight = defaultLineHeight } = store.getState().theme;\n  const calculatedLineHeight =\n    (headingsTable[heading][index] / defaultLineHeight) * lineHeight;\n\n  return `\n    line-height: ${calculatedLineHeight}rem;\n  `;\n};\n\nconst headingStyles = ({ h1, h2, h3, h4, h5, h6 }) => `\n  h1 {\n    ${getFontSize(2, h1)}\n    ${getLineHeight('h1', 2)}\n  }\n\n  h2 {\n    ${getFontSize(1.5, h2)}\n    ${getLineHeight('h2', 2)}\n  }\n\n  h3 {\n    ${getFontSize(1.3, h3)}\n    ${getLineHeight('h3', 2)}\n   \n  }\n\n  h4 {\n    ${getFontSize(1, h4)}\n    ${getLineHeight('h4', 2)}\n  }\n\n  h5 {\n    ${getFontSize(1 || 0.8, h5)}\n    ${getLineHeight('h5', 2)}\n  }\n\n  h6 {\n    ${getFontSize(1 || 0.6, h6)}\n    ${getLineHeight('h6', 2)}\n  }\n\n  @media(min-width: 480px) {\n    h1 {\n        ${getFontSize(2.5, h1)}\n        ${getLineHeight('h1', 1)}\n    }\n\n    h2 {\n        ${getFontSize(2, h2)}\n        ${getLineHeight('h2', 1)}\n    }\n\n    h3 {\n        ${getFontSize(1.8, h3)}\n        ${getLineHeight('h3', 1)}\n    }\n\n    h4 {\n        ${getFontSize(1.5, h4)}\n        ${getLineHeight('h4', 1)}\n    }\n\n    h5 {\n      ${getFontSize(1, h5)}\n      ${getLineHeight('h5', 1)}\n    }\n  \n    h6 {\n      ${getFontSize(1 || 0.8, h6)}\n      ${getLineHeight('h6', 1)}\n    }\n}\n\n  @media(min-width: 767px) {\n    h1 {\n        ${getFontSize(3.5, h1)}\n        ${getLineHeight('h1', 0)}\n    }\n\n    h2 {\n        ${getFontSize(2.5, h2)}\n        ${getLineHeight('h2', 0)}\n    }\n\n    h3 {\n      ${getFontSize(2, h3)}\n      ${getLineHeight('h3', 0)}\n    }\n\n    h4 {\n      ${getFontSize(1.7, h4)}\n      ${getLineHeight('h4', 0)}\n    }\n  \n    h5 {\n      ${getFontSize(1.2, h5)}\n      ${getLineHeight('h5', 0)}\n    }\n  \n    h6 {\n      ${getFontSize(1, h6)}\n      ${getLineHeight('h6', 0)}\n    }\n}\n`;\n\nexport default headingStyles;\n","export const getScrollBarWidth = () => {\n  return window.innerWidth - document.body.clientWidth;\n};\n","/** @jsx jsx */\n\n// TODO if we change the location of the burger exitCode\n// then the fauxFocus needs to be updated\n\nimport {\n  Fragment as _,\n  useState,\n  useEffect,\n  useRef,\n  useMemo,\n  useLayoutEffect,\n  ReactElement,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { createPortal } from 'react-dom';\nimport { Menu } from '../TopicMenu/Menu';\nimport { getButtonFocus } from 'styles/variables';\nimport { useHeader } from 'services/useHeader';\nimport { getScrollBarWidth } from 'services/getScrollBarWidth';\n\nconst width = 24;\n\ninterface IMenuContainerProps {\n  id: string;\n  rootSelector: string;\n}\n\nconst MenuContainer = (props: IMenuContainerProps) => {\n  const { id, rootSelector } = props;\n  const [root, setRoot] = useState<HTMLElement | null>(null);\n  const [fauxFocus, setFauxFocus] = useState<boolean>(false);\n  const [menu, setMenu] = useState<boolean>(false);\n\n  const header = useHeader();\n\n  const currentHeaderProps = header[header.props.headerStyle].props;\n\n  const {\n    topicMenu,\n    headerBackgroundColor,\n    headerTextColor,\n  } = currentHeaderProps;\n\n  const hiddenButton = useRef<HTMLButtonElement | null>(null);\n\n  useEffect(() => {\n    const root = document.querySelector(rootSelector) as HTMLElement;\n\n    if (root) {\n      setRoot(root);\n    }\n\n    return () => {\n      setRoot(null);\n    };\n  }, []);\n\n  let fauxFocusColor: any = getButtonFocus(headerTextColor);\n\n  fauxFocusColor = fauxFocusColor?.split(',')[1]?.trim();\n\n  return (\n    <_>\n      <button\n        type=\"button\"\n        ref={hiddenButton}\n        id={`hidden-button-menu-${id}`}\n        css={css({\n          outline: 'none',\n          border: 'none',\n          //\n          position: 'fixed',\n\n          right: 33,\n          top: 70,\n          width: 18,\n          height: 1,\n          //\n          background: 'transparent',\n          overflow: 'hidden',\n\n          '@media (max-width: 480px)': {\n            right: 18,\n          },\n        })}\n        onFocus={() => {\n          setFauxFocus(true);\n\n          const section = hiddenButton.current?.closest(\n            'section'\n          ) as HTMLElement;\n        }}\n        onBlur={() => {\n          setFauxFocus(false);\n\n          // return;\n          // give focus to the ACTUAL content container in the section\n          const section = hiddenButton.current?.closest(\n            'section'\n          ) as HTMLElement;\n\n          if (section) {\n            const contentContainer = section.querySelector(\n              `#i${id}-content-container`\n            ) as HTMLElement;\n          }\n        }}\n        onClick={() => {\n          setMenu(menu => !menu);\n        }}\n        aria-label=\"open menu\"\n        // NOTE: removed as potentially the cause of JAWS jumping into form mode. . .\n        // aria-haspopup=\"true\"\n      />\n\n      {\n        (root\n          ? createPortal(\n              <div\n                css={css({\n                  position: 'fixed',\n                  right: 0,\n                  top: 0,\n                  zIndex: 2147483647,\n                })}\n              >\n                {fauxFocus && (\n                  <div\n                    css={css({\n                      position: 'fixed',\n                      right: 30 - getScrollBarWidth(),\n                      top: 25,\n                      width: width,\n                      height: width - 4,\n\n                      boxShadow: `0 0 0 2px ${headerBackgroundColor}, ${fauxFocusColor}`,\n\n                      '@media (max-width: 480px)': {\n                        right: 15,\n                        top: 14.5,\n                      },\n                    })}\n                  />\n                )}\n                <div\n                  style={{\n                    position: 'fixed',\n                    right: -30 - getScrollBarWidth(),\n                  }}\n                >\n                  <Menu\n                    menu={menu}\n                    close={() => {\n                      hiddenButton.current?.focus();\n                      setMenu(false);\n                    }}\n                  />\n                </div>\n              </div>,\n              root\n            )\n          : null) as ReactElement\n      }\n    </_>\n  );\n};\n\nexport { MenuContainer };\n","export const controlAudioAction = audioData => {\n  // console.log(audioData);\n\n  return {\n    type: 'CONTROL_AUDIO',\n    data: audioData,\n  };\n};\n","/** @jsx jsx */\n\nimport { Fragment as _, useState, useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { css as _css } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport { colors } from 'styles/variables';\n\nconst { mint } = colors;\n\nconst Bubble = ({ data }) => {\n  let { element, content } = data;\n\n  const [bubbleCoords, setBubbleCoords] = useState<any>({\n    x: 0,\n    y: window.innerHeight * 2,\n    width: 0,\n    height: 0,\n  });\n\n  const bubble = useRef<HTMLDivElement>(null);\n  const arrow = useRef<SVGPolylineElement>(null);\n\n  const arrowData = useRef({\n    width: 20,\n    height: 10,\n    location: 'bottomLeft',\n  });\n\n  useEffect(() => {\n    if (!bubble.current || !arrow.current) {\n      return;\n    }\n\n    const { width, height } = bubble.current.getBoundingClientRect();\n    const arrowCoords = arrow.current.getBBox();\n\n    const {\n      left: x,\n      top: y,\n      width: elementWidth,\n      height: elementHeight,\n    } = element.getBoundingClientRect();\n\n    let bubbleAlign = 'left';\n    if (x + width >= window.innerWidth) {\n      bubbleAlign = 'right';\n      arrowData.current.location = 'bottomRight';\n    }\n\n    setBubbleCoords({\n      x: x - arrowData.current.width / 2,\n      y: y - (height + 15),\n      ...(bubbleAlign === 'right' && {\n        x: x + elementWidth + 10 - width,\n      }),\n      width,\n      height,\n    });\n  }, []);\n\n  return createPortal(\n    <div\n      ref={bubble}\n      className=\"fader_-2s\"\n      css={css({\n        position: 'fixed',\n        display: 'flex',\n        alignItems: 'center',\n        left: 0,\n        top: 0,\n        maxWidth: 320,\n        minHeight: 40,\n        padding: '10px 20px',\n        transform: `translate3d(${bubbleCoords.x}px, ${bubbleCoords.y}px, 0px)`,\n        background: 'transparent',\n        color: '#fff',\n        fontSize: 12,\n        transition: 'opacity 0.2s',\n        pointerEvents: 'none',\n\n        '*': {\n          fontFamily: 'Poppins !important',\n        },\n      })}\n    >\n      <div\n        style={{\n          position: 'absolute',\n          left: 0,\n          top: 0,\n          width: bubbleCoords.width,\n          height: bubbleCoords.height,\n        }}\n      >\n        <svg\n          viewBox={`0 0 ${bubbleCoords.width + 0} ${bubbleCoords.height + 0}`}\n          style={{\n            filter: 'drop-shadow(5px 10px 10px rgba(0, 0, 0, 0.2))',\n            overflow: 'visible',\n          }}\n        >\n          <g>\n            <rect\n              width={bubbleCoords.width + 0}\n              height={bubbleCoords.height}\n              rx={20}\n              style={{\n                fill: mint,\n              }}\n            />\n            <g\n              style={{\n                transform: `translateX(${\n                  {\n                    bottomLeft: 20,\n                    bottomRight: bubbleCoords.width - 40,\n                  }[arrowData.current.location]\n                }px)`,\n              }}\n            >\n              <polyline\n                ref={arrow}\n                points={`\n              0,${bubbleCoords.height} \n              ${arrowData.current.width},${bubbleCoords.height} \n              ${arrowData.current.width / 2},${bubbleCoords.height +\n                  arrowData.current.height}\n              0,${bubbleCoords.height} \n              `}\n                style={{\n                  fill: mint,\n                }}\n              />\n            </g>\n          </g>\n        </svg>\n      </div>\n\n      <div\n        style={{\n          position: 'relative',\n        }}\n      >\n        {content}\n      </div>\n    </div>,\n    document.body\n  );\n};\n\nconst InfoBubbleContainer = () => {\n  const [bubbleData, setShowBubbleData] = useState<{} | null>(null);\n\n  useEffect(() => {\n    const onMouseOver = e => {\n      const { target } = e;\n      const data = target.dataset.infoBubble;\n\n      if (!data) {\n        return;\n      }\n\n      setShowBubbleData({\n        element: target,\n        content: data,\n      });\n    };\n\n    const onMouseOut = e => {\n      if (!e.target.dataset.infoBubble) {\n        return;\n      }\n\n      setShowBubbleData(null);\n    };\n\n    document.body.addEventListener('mouseover', onMouseOver);\n    document.body.addEventListener('mouseout', onMouseOut);\n\n    return () => {\n      document.body.removeEventListener('mouseover', onMouseOver);\n      document.body.removeEventListener('mouseout', onMouseOut);\n    };\n  }, []);\n\n  return bubbleData ? <Bubble data={bubbleData} /> : null;\n};\n\nexport { InfoBubbleContainer, Bubble };\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useState,\n  useContext,\n  useRef,\n  useEffect,\n  useLayoutEffect,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { colors } from 'styles/variables';\nimport getStore from 'services/getStore';\nimport Modal from 'components/UI/Modal';\nimport getTopics from 'services/apiHelpers/getTopics';\nimport { useSelector } from 'react-redux';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport EditorBtn from 'components/UI/EditorBtn';\nimport Tick from 'components/UI/Tick';\nimport { getBoundingClientObj } from 'react-select/src/utils';\n\nconst { lPink, lGrey0, lGrey1, lTeal0 } = colors;\nconst [darkGrey, lightGrey, blue] = ['#28292b', '#f3f6ff', '#98add9'];\nconst topicPanelWidth = 190;\n\nexport const moduleNavigationActions = {\n  NEXT: 'next',\n  EXIT: 'exit',\n  SET_MODULE_COMPLETE: 'setModuleComplete',\n  SET_MODULE_COMPLETE_AND_EXIT: 'setModuleCompleteAndExit',\n  RESET_MODULE: 'resetModule',\n};\n\nexport const moduleNavigationActionsList = Object.values(\n  moduleNavigationActions\n);\n\nconst {\n  NEXT,\n  EXIT,\n  SET_MODULE_COMPLETE,\n  SET_MODULE_COMPLETE_AND_EXIT,\n  RESET_MODULE,\n} = moduleNavigationActions;\n\nconst TopicPanel = ({ name, color = darkGrey, children }) => {\n  const [titleHeight, setTitleHeight] = useState(30);\n  const height = 135;\n\n  const title = useRef<HTMLDivElement>(null);\n\n  useLayoutEffect(() => {\n    if (title.current) {\n      const { height } = title.current.getBoundingClientRect();\n      setTitleHeight(height);\n    }\n  }, []);\n\n  return (\n    <div\n      css={css`\n        width: ${topicPanelWidth}px;\n        height: ${height}px;\n        margin: 5px;\n        border-radius: 10px;\n        overflow: hidden;\n        box-shadow: 0 0 0 1px ${color};\n      `}\n    >\n      <div\n        ref={title}\n        css={css`\n          display: flex;\n          align-items: center;\n          width: 100%;\n          min-height: ${titleHeight}px;\n          padding: 10px;\n          background: ${color};\n          font-size: 12px;\n          color: #fff;\n        `}\n      >\n        {name}\n      </div>\n      <div\n        css={css`\n          height: ${height - titleHeight}px;\n          overflow-y: auto;\n        `}\n      >\n        {children}\n      </div>\n    </div>\n  );\n};\n\nconst InteractionPanel = ({\n  interaction,\n  usingExternalURL,\n  isCurrentLocation,\n  isTargetLocation,\n  onClick,\n}) => {\n  const { id } = interaction;\n  const { sId, name } = interaction.props;\n\n  return (\n    <div\n      css={css`\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n\n        width: 100%;\n        min-height: 30px;\n        padding: 10px;\n\n        font-size: 12px;\n\n        ${isCurrentLocation &&\n          `\n        color: ${blue};\n        pointer-events: none;\n        `}\n\n        ${!usingExternalURL &&\n          isTargetLocation &&\n          `\n          background: ${lightGrey};\n          `}\n\n        cursor: pointer;\n        transition: all 0.2s;\n\n        &:hover {\n          opacity: 0.45;\n        }\n      `}\n      onClick={onClick}\n    >\n      <div\n        css={css`\n          padding: 0 10px 0 0;\n        `}\n      >\n        {name}\n        {isCurrentLocation ? ' (current)' : ''}\n      </div>\n\n      {!usingExternalURL && isTargetLocation && <Tick width={6} height={8} />}\n    </div>\n  );\n};\n\nconst ModuleGlobalNavigation = ({\n  noActions = false,\n  noDefaults = false,\n  usingExternalURL = false,\n  location = '1/1',\n  onUpdate = (value: {}) => {},\n  onClose,\n}) => {\n  const [localLocation, setLocalLocation] = useState<string>(location);\n\n  const topics = getTopics();\n\n  const { currentInteraction } = useSelector((state: any) => state);\n\n  const topicPanelsContainer = useRef<any>(null);\n\n  // set to false on init\n  // true only when we legit click to update\n  const hasUpdated = useRef<boolean>(false);\n\n  const getLocationAsArray = () => {\n    if (\n      // [NEXT, EXIT, SET_MODULE_COMPLETE, SET_MODULE_COMPLETE_AND_EXIT].includes(\n      moduleNavigationActionsList.includes(localLocation)\n    ) {\n      return null;\n    }\n\n    return localLocation.split('/');\n  };\n\n  const updateLocalLocation = location => {\n    hasUpdated.current = true;\n    setLocalLocation(location);\n  };\n\n  const actions = {\n    id: null,\n    name: 'Actions',\n  };\n\n  useLayoutEffect(() => {\n    if (!topicPanelsContainer.current) {\n      return;\n    }\n\n    const topicPanelsContainerHeight = topicPanelsContainer.current.getBoundingClientRect()\n      .height;\n\n    if (topicPanelsContainerHeight >= 455) {\n      topicPanelsContainer.current.style.height = '455px';\n    }\n  }, []);\n\n  useEffect(() => {\n    if (!hasUpdated.current) {\n      return;\n    }\n\n    onUpdate({\n      location: localLocation,\n    });\n  }, [localLocation]);\n\n  return (\n    <div\n      css={css({\n        width: '100%',\n      })}\n    >\n      <div\n        css={css({\n          position: 'relative',\n          width: '100%',\n          maxHeight: 170 * 2,\n        })}\n      >\n        <div\n          ref={topicPanelsContainer}\n          css={css`\n            left: 0;\n            top: 0;\n            width: 100%;\n            max-height: inherit;\n            display: flex;\n            flex-wrap: wrap;\n            justify-content: center;\n            overflow-y: auto;\n          `}\n        >\n          {!noActions && (\n            <TopicPanel name=\"Actions\" color={blue}>\n              <InteractionPanel\n                interaction={{\n                  id: 'next',\n                  props: {\n                    name: 'Next',\n                  },\n                }}\n                usingExternalURL={usingExternalURL}\n                isCurrentLocation={null}\n                isTargetLocation={localLocation === NEXT}\n                onClick={() => {\n                  updateLocalLocation(localLocation === NEXT ? location : NEXT);\n                }}\n              />\n              <InteractionPanel\n                interaction={{\n                  id: 'exit',\n                  props: {\n                    name: 'Exit',\n                  },\n                }}\n                usingExternalURL={usingExternalURL}\n                isCurrentLocation={null}\n                isTargetLocation={localLocation === EXIT}\n                onClick={() => {\n                  updateLocalLocation(localLocation === EXIT ? location : EXIT);\n                }}\n              />\n\n              <InteractionPanel\n                interaction={{\n                  id: 'set-module-complete',\n                  props: {\n                    name: 'Set module complete',\n                  },\n                }}\n                usingExternalURL={usingExternalURL}\n                isCurrentLocation={null}\n                isTargetLocation={localLocation === SET_MODULE_COMPLETE}\n                onClick={() => {\n                  updateLocalLocation(\n                    localLocation === SET_MODULE_COMPLETE\n                      ? location\n                      : SET_MODULE_COMPLETE\n                  );\n                }}\n              />\n\n              <InteractionPanel\n                interaction={{\n                  id: 'set-module-complete-and-exit',\n                  props: {\n                    name: 'Set module complete\\nand exit',\n                  },\n                }}\n                usingExternalURL={usingExternalURL}\n                isCurrentLocation={null}\n                isTargetLocation={\n                  localLocation === SET_MODULE_COMPLETE_AND_EXIT\n                }\n                onClick={() => {\n                  updateLocalLocation(\n                    localLocation === SET_MODULE_COMPLETE_AND_EXIT\n                      ? location\n                      : SET_MODULE_COMPLETE_AND_EXIT\n                  );\n                }}\n              />\n\n              <InteractionPanel\n                interaction={{\n                  id: 'reset-module',\n                  props: {\n                    name: 'Reset module',\n                  },\n                }}\n                usingExternalURL={usingExternalURL}\n                isCurrentLocation={null}\n                isTargetLocation={localLocation === RESET_MODULE}\n                onClick={() => {\n                  updateLocalLocation(\n                    localLocation === RESET_MODULE ? location : RESET_MODULE\n                  );\n                }}\n              />\n            </TopicPanel>\n          )}\n          {topics\n            .filter((t: any, topicIndex) => {\n              return getInteractionsInTopic(t)?.length;\n            })\n            .map((t: any, topicIndex) => {\n              const topicSId = t.props.sId || t.id;\n\n              const interactions = getInteractionsInTopic(t);\n\n              return (\n                <TopicPanel key={topicSId} name={t.props.name}>\n                  {interactions.map((i: any, interactionIndex) => {\n                    const interactionSId = i.props.sId || i.id;\n\n                    let interactionLocation: any = getLocationAsArray();\n                    if (interactionLocation) {\n                      interactionLocation = interactionLocation[1];\n                    }\n\n                    return (\n                      <InteractionPanel\n                        key={interactionSId}\n                        interaction={i}\n                        usingExternalURL={usingExternalURL}\n                        isCurrentLocation={i.id === currentInteraction}\n                        isTargetLocation={interactionSId == interactionLocation}\n                        onClick={() => {\n                          updateLocalLocation(\n                            interactionSId == interactionLocation\n                              ? location\n                              : `${topicSId}/${interactionSId}`\n                          );\n                        }}\n                      />\n                    );\n                  })}\n                </TopicPanel>\n              );\n            })}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default ModuleGlobalNavigation;\n","export function buttonLayouts(buttonPosition) {\n  switch (buttonPosition) {\n    case 'start': {\n      return `\n      justify-content: start !important;\n      ${\n        window.dev()\n          ? ''\n          : `\n      margin: 0; \n      margin-left: -2px;`\n      }\n      `;\n    }\n\n    case 'center': {\n      return '';\n    }\n\n    case 'end': {\n      return `\n      justify-content: end !important;\n      ${\n        window.dev()\n          ? ''\n          : `\n      margin: 0; \n      margin-right: -2px;`\n      }\n      `;\n    }\n\n    case 'default': {\n      return '';\n    }\n  }\n}\n","interface IUpdateGlobalFontStylesFromTheme {\n  fontSize: number;\n  lineHeight: number;\n  parsedTextColor?: string;\n  headingsStyles?: () => string;\n}\n\nexport function updateGlobalFontStylesFromTheme({\n  fontSize = 16,\n  lineHeight = 1.5,\n  parsedTextColor = '#000',\n  headingsStyles,\n}: IUpdateGlobalFontStylesFromTheme) {\n  return `\n  .chameleon-text {\n    ${parsedTextColor && `color: ${parsedTextColor};`}\n  }\n\n  .chameleon-text > div {\n    p:not(h1 p, h2 p, h3 p, h4 p, h5 p, h6 p, .chameleon-certificate-text p) {\n      font-size: ${fontSize}px !important;\n      line-height: ${(fontSize / 16) * lineHeight}rem;\n    }\n\n    li:not(h1 li, h2 li, h3 li, h4 li, h5 li, h6 li, .chameleon-certificate-text li) {\n      font-size: ${fontSize}px !important;\n      line-height: ${(fontSize / 16) * lineHeight}rem;\n    }\n\n    // \n    ${headingsStyles && headingsStyles()}\n  }\n\n  li > span {\n    ${parsedTextColor && `color: ${parsedTextColor};`}\n  }\n\n  `;\n}\n","let webGLEnabled;\n\nexport const getWebGLEnabled = () => {\n  if (webGLEnabled) {\n    return webGLEnabled;\n  }\n\n  const canvas = document.createElement('canvas');\n  const webgl =\n    canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n\n  webGLEnabled = webgl instanceof WebGLRenderingContext;\n\n  return webGLEnabled;\n};\n","/** @jsx jsx */\n\nimport { jsx, css } from '@emotion/core';\n//\nimport * as PIXI from 'pixi.js-legacy';\n// 'pixi.js';\nimport { KawaseBlurFilter } from '@pixi/filter-kawase-blur';\nimport SimplexNoise from 'simplex-noise';\nimport tinycolor from 'tinycolor2';\nimport hsl from 'hsl-to-hex';\nimport { useEffect, useRef } from 'react';\nimport hexToRGB from 'services/hexToRGB';\nimport { getWebGLEnabled } from 'services/getWebGLEnabled';\n\n// https://codepen.io/georgedoescode/pen/XWNmvro\n\nexport type TAnimatedOrbDefaultValues = {\n  primaryOrbColor: string;\n  secondaryOrbColor: string;\n  tertiaryOrbColor: string;\n  orbOpacity: number;\n  orbBlurStrength: number;\n  orbSpeed: number;\n};\n\nexport const getAnimatedOrbsDefaultValues = (\n  props?: TAnimatedOrbDefaultValues\n) => {\n  return {\n    primaryOrbColor: props?.primaryOrbColor || '#87B5FF' || '#FD7EB8',\n    secondaryOrbColor: props?.secondaryOrbColor || '#B14FEC',\n    tertiaryOrbColor: props?.tertiaryOrbColor || '#00d9d3',\n    orbOpacity: (props?.orbOpacity || 100) * 0.01,\n    orbBlurStrength: props?.orbBlurStrength || 30,\n    orbSpeed: (props?.orbSpeed || 2) * 0.001,\n  };\n};\n\nfunction debounce(func, delay) {\n  let timeoutId;\n\n  return function(...args) {\n    clearTimeout(timeoutId);\n    timeoutId = setTimeout(() => {\n      // @ts-ignore\n      func.apply(this, args);\n    }, delay);\n  };\n}\n\nfunction random(min, max) {\n  return Math.random() * (max - min) + min;\n}\n\nfunction map(n, start1, end1, start2, end2) {\n  return ((n - start1) / (end1 - start1)) * (end2 - start2) + start2;\n}\n\nconst simplex = new SimplexNoise();\n\n// ColorPalette class\nclass ColorPalette {\n  hue: number;\n  complimentaryHue1: string | number;\n  complimentaryHue2: string | number;\n  saturation: number;\n  lightness: number;\n  baseColor: string;\n  complimentaryColor1: string;\n  complimentaryColor2: string;\n  colorChoices: string[];\n\n  constructor() {\n    this.setColors();\n    this.setCustomProperties();\n  }\n\n  setColors() {\n    this.hue = ~~random(220, 360);\n    this.complimentaryHue1 = this.hue + 30;\n    this.complimentaryHue2 = this.hue + 60;\n    this.saturation = 95;\n    this.lightness = 50;\n\n    this.baseColor = hsl(this.hue, this.saturation, this.lightness);\n    this.complimentaryColor1 = hsl(\n      this.complimentaryHue1,\n      this.saturation,\n      this.lightness\n    );\n\n    this.complimentaryColor2 = hsl(\n      this.complimentaryHue2,\n      this.saturation,\n      this.lightness\n    );\n\n    this.colorChoices = [\n      this.baseColor,\n      this.complimentaryColor1,\n      this.complimentaryColor2,\n    ];\n  }\n\n  randomColor() {\n    return this.colorChoices[~~random(0, this.colorChoices.length)].replace(\n      '#',\n      '0x'\n    );\n  }\n\n  setCustomProperties() {\n    //\n  }\n}\n\n// Orb class\nclass Orb {\n  bounds;\n  scale: string | number;\n  fill: string | number;\n  radius: string | number;\n  xOff: number;\n  yOff: number;\n  inc: number;\n  x: number;\n  y: number;\n  graphics;\n\n  // Pixi takes hex colors as hexidecimal literals (0x rather than a string with '#')\n  constructor(fill = 0x000000, orbSpeed = 0.002) {\n    // bounds = the area an orb is \"allowed\" to move within\n    this.bounds = this.setBounds();\n\n    // initialise the orb's { x, y } values to a random point within it's bounds\n    this.x = random(this.bounds['x'].min, this.bounds['x'].max);\n    this.y = random(this.bounds['y'].min, this.bounds['y'].max);\n\n    // how large the orb is vs it's original radius (this will modulate over time)\n    this.scale = 1;\n\n    // what color is the orb?\n    this.fill = fill;\n\n    // the original radius of the orb, set relative to window height\n    this.radius = random(window.innerHeight / 6, window.innerHeight / 3);\n\n    // starting points in \"time\" for the noise/self similar random values\n    this.xOff = random(0, 1000);\n    this.yOff = random(0, 1000);\n\n    // how quickly the noise/self similar random values step through time\n    this.inc = orbSpeed;\n\n    // PIXI.Graphics is used to draw 2d primitives (in this case a circle) to the canvas\n    this.graphics = new PIXI.Graphics();\n    this.graphics.alpha = 0.825;\n\n    // 250ms after the last window resize event, recalculate orb positions.\n    window.addEventListener(\n      'resize',\n      debounce(() => {\n        this.bounds = this.setBounds();\n      }, 250)\n    );\n  }\n\n  setBounds() {\n    // how far from the { x, y } origin can each orb move\n    const maxDist =\n      window.innerWidth < 1000 ? window.innerWidth / 3 : window.innerWidth / 5;\n    // the { x, y } origin for each orb (the bottom right of the screen)\n    const originX = window.innerWidth / 1.25;\n    const originY =\n      window.innerWidth < 1000\n        ? window.innerHeight\n        : window.innerHeight / 1.375;\n\n    // allow each orb to move x distance away from it's x / y origin\n    return {\n      x: {\n        min: originX - maxDist,\n        max: originX + maxDist,\n      },\n      y: {\n        min: originY - maxDist,\n        max: originY + maxDist,\n      },\n    };\n  }\n\n  update() {\n    // self similar \"psuedo-random\" or noise values at a given point in \"time\"\n    const xNoise = simplex.noise2D(this.xOff, this.xOff); // simplex.noise2D\n    const yNoise = simplex.noise2D(this.yOff, this.yOff); // simplex.noise2D\n    const scaleNoise = simplex.noise2D(this.xOff, this.yOff); // simplex.noise2D\n\n    // map the xNoise/yNoise values (between -1 and 1) to a point within the orb's bounds\n    this.x = map(xNoise, -1, 1, this.bounds['x'].min, this.bounds['x'].max);\n    this.y = map(yNoise, -1, 1, this.bounds['y'].min, this.bounds['y'].max);\n    // map scaleNoise (between -1 and 1) to a scale value somewhere between half of the orb's original size, and 100% of it's original size\n    this.scale = map(scaleNoise, -1, 1, 0.5, 1);\n\n    // step through \"time\"\n    this.xOff += this.inc;\n    this.yOff += this.inc;\n  }\n\n  render() {\n    // update the PIXI.Graphics position and scale values\n    this.graphics.x = this.x;\n    this.graphics.y = this.y;\n    this.graphics.scale.set(this.scale);\n\n    // clear anything currently drawn to graphics\n    this.graphics.clear();\n\n    // tell graphics to fill any shapes drawn after this with the orb's fill color\n    this.graphics.beginFill(this.fill);\n    // draw a circle at { 0, 0 } with it's size set by this.radius\n    this.graphics.drawCircle(0, 0, this.radius);\n    // let graphics know we won't be filling in any more shapes\n    this.graphics.endFill();\n  }\n}\n\ninterface IOrbs {\n  orbsFor: 'topic' | 'interaction';\n  primaryOrbColor: string;\n  secondaryOrbColor: string;\n  tertiaryOrbColor: string;\n  orbOpacity: number;\n  orbBlurStrength: number;\n  orbSpeed: number;\n}\n\nexport const Orbs = (props: IOrbs) => {\n  const {\n    orbsFor = 'topic',\n    primaryOrbColor = '#FD7EB8',\n    secondaryOrbColor = '#B14FEC',\n    tertiaryOrbColor = '#00d9d3',\n    orbOpacity = 1,\n    orbBlurStrength = 30,\n    orbSpeed = 0.002,\n  } = props;\n\n  let calculatedOrbColors = tinycolor(primaryOrbColor).analogous();\n\n  calculatedOrbColors = calculatedOrbColors.map(function(t) {\n    return t.toHexString();\n  });\n\n  const pixiCanvas = useRef<HTMLCanvasElement | null>(null);\n\n  useEffect(() => {\n    if (!pixiCanvas.current) {\n      return;\n    }\n\n    // Create PixiJS app\n    const app = new PIXI.Application({\n      // render to <canvas class=\"orb-canvas\"></canvas>\n      view: pixiCanvas.current,\n      //document.querySelector('.orb-canvas'),\n      // auto adjust size to fit the current window\n      resizeTo: window,\n      // transparent background, we will be creating a gradient background later using CSS\n      transparent: true,\n    });\n\n    app.stage.filters = [\n      new (KawaseBlurFilter as any)(orbBlurStrength, 10, true),\n    ];\n\n    // Create colour palette\n    const colorPalette = new ColorPalette();\n\n    type TOrb = {\n      graphics;\n      update: () => void;\n      render: () => void;\n    };\n    // Create orbs\n    const orbs: TOrb[] = [];\n\n    for (let i = 0; i < 10; i++) {\n      const index = i % 3;\n      const color = [\n        Number(calculatedOrbColors[0].replace('#', '0x')),\n        Number(calculatedOrbColors[1].replace('#', '0x')),\n        Number(calculatedOrbColors[2].replace('#', '0x')),\n      ][index]; // index\n\n      const orb: TOrb = new Orb(color, orbSpeed);\n\n      app.stage.addChild(orb.graphics);\n\n      orbs.push(orb);\n    }\n\n    app.ticker.add(() => {\n      orbs.forEach(orb => {\n        orb.update();\n        orb.render();\n      });\n    });\n  }, [\n    primaryOrbColor,\n    secondaryOrbColor,\n    tertiaryOrbColor,\n    orbOpacity,\n    orbBlurStrength,\n    orbSpeed,\n  ]);\n\n  const { r, g, b } = hexToRGB(primaryOrbColor);\n\n  return (\n    <div\n      style={{\n        position: orbsFor === 'topic' ? 'fixed' : 'absolute',\n        left: 0,\n        top: 0,\n        width: '100vw',\n        height: '100vh',\n        background: '#fff',\n        overflow: 'hidden',\n      }}\n    >\n      <div\n        style={{\n          position: 'absolute',\n          left: 'inherit',\n          top: 'inherit',\n          width: 'inherit',\n          height: 'inherit',\n          background: `linear-gradient(to bottom, #fff, rgba(${r}, ${g},${b}, 0.6)`,\n          opacity: orbOpacity,\n        }}\n      >\n        <canvas\n          ref={pixiCanvas}\n          className=\"orb-canvas\"\n          style={{\n            position: 'absolute',\n            left: -20,\n            top: -20,\n            width: 'calc(100vw + 40px)',\n            height: 'calc(100vh + 40px)',\n            ...(!getWebGLEnabled() && {\n              filter: `blur(${orbBlurStrength * 2}px)`,\n            }),\n          }}\n        />\n      </div>\n    </div>\n  );\n};\n","/** @jsx jsx */\n\nimport {\n  Fragment as _,\n  useState,\n  useEffect,\n  useRef,\n  useLayoutEffect,\n  useContext,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { values, colors } from 'styles/variables';\nimport { useSelector, useDispatch } from 'react-redux';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport { createContext } from 'react';\nimport { Flexbox } from '@chameleoncreator/creator-ui';\nimport getStore from 'services/getStore';\nimport getCurrentTopic from 'services/apiHelpers/getCurrentTopic';\nimport Wrapper from './Wrapper';\nimport HiddenBackButton from './HiddenBackButton';\nimport BackgroundImage from './Background';\n\nimport next from './next';\nimport updateReadOnlyText from 'services/updateReadOnlyText';\nimport pubSub from 'services/pubSub';\nimport { createSelector } from 'reselect';\nimport headingsStyles from './headingsStyles';\nimport { MenuContainer } from './MenuContainer';\nimport { State } from 'store/store';\nimport { controlAudioAction } from 'actions/controlAudioAction';\nimport { useHeader } from 'services/useHeader';\nimport getTopics from 'services/apiHelpers/getTopics';\nimport { getIsFirstInteraction } from 'services/getIsFirstInteraction';\nimport { ModuleContext } from 'components/Module/Module_v2';\nimport { InfoBubbleContainer } from 'components/Editor/EditorUtilities/UI/Bubble';\nimport { moduleNavigationActions } from 'components/NavigationSettings/ModuleNavigation';\nimport { updateInteractionsOpenAction } from 'actions/updateInteractionsOpenAction';\nimport { buttonLayouts } from './buttonLayouts';\nimport { updateGlobalFontStylesFromTheme } from 'styles/updateGlobalFontStylesFromTheme';\nimport './highlightActiveElement';\nimport { Orbs, getAnimatedOrbsDefaultValues } from 'components/Module/Orbs';\n\nconst store = getStore();\nconst renderCount = {};\n\nconst AUDIO_FILE_DEFAULT =\n  'https://freesound.org/data/previews/542/542450_5674468-lq.mp3';\n\nexport const InteractionContext = createContext<any>(undefined);\n\nconst getInteractionsOpen = createSelector(\n  (state: any) => state.interactionsOpen,\n  interactionsOpen => interactionsOpen\n);\n\nlet navigateToPreviewLocation = '';\n\n// just totes for convenience right now\n// will refactor\nconst getContinueButton = (\n  section: HTMLTableSectionElement\n): HTMLAnchorElement => {\n  const buttons = Array.from(section?.querySelectorAll('a'));\n  const continueBtn = buttons[buttons.length - 1] as HTMLAnchorElement;\n\n  return continueBtn;\n};\n\nconst getHiddenBackButton = (\n  section: HTMLTableSectionElement,\n  id: string\n): HTMLButtonElement => {\n  const hiddenBackButton = section?.querySelector(\n    `#hidden-back-button-${id}`\n  ) as HTMLButtonElement;\n\n  return hiddenBackButton;\n};\n//\n\nconst ContainerLogical = (props: any) => {\n  const moduleContext = useContext(ModuleContext);\n  const { exit, setComplete, setCompleteAndExit, resetModule } = moduleContext;\n\n  let {\n    id,\n    name,\n    style,\n    children,\n    lockDown,\n    includeAudio = false,\n    audioSrc,\n    autoPlay = false,\n    stopAudioWhenModalIsOpened = true,\n    controls = true,\n    delay = 1,\n    autoOpenNextSection = false,\n\n    //\n    backgroundStyle,\n\n    // primaryOrbColor = '#FD7EB8',\n    // secondaryOrbColor = '#B14FEC',\n    // tertiaryOrbColor = '#00d9d3',\n    // orbOpacity = (props?.orbOpacity || 100) * 0.01,\n    // orbBlurStrength = 30,\n    // orbSpeed = (props?.orbSpeed || 2) * 0.001,\n  } = props;\n\n  const {\n    primaryOrbColor,\n    secondaryOrbColor,\n    tertiaryOrbColor,\n    orbOpacity,\n    orbBlurStrength,\n    orbSpeed,\n  } = getAnimatedOrbsDefaultValues(props);\n\n  const { focusedNodeId, currentInteraction, theme } = useSelector(\n    (state: State) => {\n      return state;\n    }\n  );\n\n  const dispatch = useDispatch();\n\n  // check if nextInteractionMap is in 'order'\n  // for the moment we'll use this dirty check\n  const isFirstInteraction = getIsFirstInteraction(getTopics(), id);\n\n  let {\n    sId,\n    background = undefined,\n    backgroundImage = undefined,\n    backgroundImageOpacity = 100,\n    backgroundBlur = 0,\n    src = undefined,\n    textColor = style.foreground,\n  } = getBlockById(id).props as any;\n\n  const {\n    backgroundGradient,\n    backgroundSecondaryColor,\n    backgroundGradientAngle = 0,\n    fullWidth = false,\n  } = props;\n\n  let buttonPosition = {\n    left: 'start',\n    center: 'center',\n    right: 'end',\n  }[props?.buttonPosition || 'center'];\n\n  const linearGradient = backgroundGradient\n    ? `linear-gradient(${background}, ${backgroundSecondaryColor})`\n    : 'none';\n\n  let interactionsOpen = useSelector(getInteractionsOpen);\n  let isOpen = props.isOpen || interactionsOpen.includes(id);\n\n  // dirty gotta try and cover for legacy backgroundImage\n  if (src) {\n    backgroundImage = `url('${src}') center / cover no-repeat`;\n  }\n\n  const section: any = useRef<HTMLElement>(null);\n  const selected = id === focusedNodeId;\n\n  const header = useHeader();\n  const { headerStyle } = header.props;\n\n  const { backButton, topicMenu } = header[headerStyle].props;\n\n  let headerHeight = header[headerStyle].props.headerHeight;\n\n  if (window.dev() && !isFirstInteraction) {\n    headerHeight = 70;\n  }\n\n  const currentTopic = getCurrentTopic();\n\n  const parsedTextColor =\n    textColor ||\n    (currentTopic && getBlockById(currentTopic.id)?.props?.textColor) ||\n    theme.textColor ||\n    '';\n\n  const { fontSize = 16, lineHeight = 1.5, headings } = theme || {};\n\n  const { h1, h2, h3, h4, h5, h6 } = headings || {};\n\n  const contentContainer = useRef<HTMLDivElement>(null);\n\n  const getHiddenMenuButton = (\n    section: HTMLTableSectionElement\n  ): HTMLButtonElement => {\n    const hiddenMenuButton = section?.querySelector(\n      `#hidden-button-menu-${id}`\n    ) as HTMLButtonElement;\n\n    return hiddenMenuButton;\n  };\n\n  useLayoutEffect(() => {\n    if (!section.current) {\n      section.current = document.querySelector(`#i${id}`);\n    }\n\n    !window.dev() && updateReadOnlyText(section.current);\n  }, [parsedTextColor]);\n\n  useEffect(() => {\n    if (!section?.current) {\n      return;\n    }\n\n    const hiddenBackButton = getHiddenBackButton(section.current, id);\n\n    if (!hiddenBackButton) {\n      return;\n    }\n\n    const onKeyDown = (e: any) => {\n      const { key, shiftKey } = e;\n\n      if (key === 'Tab' && shiftKey) {\n        const continueBtn = getContinueButton(section.current);\n\n        if (continueBtn) {\n          // console.log('give focus to continue button !!!');\n          continueBtn.focus({ preventScroll: true });\n          e.preventDefault();\n        }\n      }\n    };\n\n    hiddenBackButton.addEventListener('keydown', onKeyDown);\n\n    return () => {\n      hiddenBackButton.removeEventListener('keydown', onKeyDown);\n    };\n  }, []);\n\n  useEffect(() => {\n    if (!section?.current) {\n      return;\n    }\n\n    // // this needs to take into account that the continue ' button '\n    // // now is an actual a tag !!!\n\n    const continueBtn = getContinueButton(section.current);\n\n    if (!continueBtn) {\n      return;\n    }\n\n    const onKeyDown = (e: any) => {\n      const { key, shiftKey } = e;\n\n      if (shiftKey) {\n        return;\n      }\n\n      if (key === 'Tab') {\n        const hiddenBackButton = getHiddenBackButton(section.current, id);\n        const hiddenMenuButton = getHiddenMenuButton(section.current);\n\n        if (hiddenBackButton && !hiddenBackButton.disabled) {\n          //\n          hiddenBackButton.focus({ preventScroll: true });\n        } else {\n          hiddenMenuButton ? hiddenMenuButton.focus() : section.current.focus();\n        }\n        e.preventDefault();\n      }\n    };\n\n    continueBtn.addEventListener('keydown', onKeyDown);\n\n    return () => {\n      continueBtn.removeEventListener('keydown', onKeyDown);\n    };\n  }, []);\n\n  useEffect(() => {\n    if (!lockDown) {\n      return;\n    }\n  });\n\n  useEffect(() => {\n    if (!section.current) {\n      return;\n    }\n\n    let tick = setInterval(() => {\n      if (!section.current) {\n        return;\n      }\n      //\n      var scrollBarWidth = window.innerWidth - document.body.clientWidth;\n\n      if (scrollBarWidth > 0) {\n        clearInterval(tick);\n        // if scrollBarWidth calcs to greater than 35\n        // then wtf. wrong things are happening. don't update the padding\n        // but if we're within that range. . .\n        if (scrollBarWidth <= 35) {\n          section.current.style.paddingLeft = `${scrollBarWidth}px`;\n        }\n      }\n    }, 1000 / 12);\n\n    return () => {\n      clearInterval(tick);\n    };\n  }, []);\n\n  useEffect(() => {\n    if (!contentContainer.current) {\n      return;\n    }\n    //\n    // this is gonna get put someplace else\n    // make it part of the hashChange maybe\n    // but needs reference to the interaction sId/id\n    //\n    const anchorNavNextExit = e => {\n      const { target } = e;\n      const tagName = target.tagName.toLowerCase();\n      const href = target.getAttribute('href');\n      const {\n        NEXT,\n        EXIT,\n        SET_MODULE_COMPLETE,\n        SET_MODULE_COMPLETE_AND_EXIT,\n        RESET_MODULE,\n      } = moduleNavigationActions;\n\n      const aNext = next(sId, id);\n\n      if (tagName === 'a') {\n        if ([NEXT, EXIT].includes(href)) {\n          e.preventDefault();\n\n          aNext(href);\n          return;\n        }\n\n        if (\n          [\n            SET_MODULE_COMPLETE,\n            SET_MODULE_COMPLETE_AND_EXIT,\n            RESET_MODULE,\n          ].includes(href)\n        ) {\n          e.preventDefault();\n\n          href === SET_MODULE_COMPLETE && setComplete();\n          href === SET_MODULE_COMPLETE_AND_EXIT && setCompleteAndExit();\n          href === RESET_MODULE && resetModule();\n          return;\n        }\n      }\n    };\n\n    contentContainer.current.addEventListener('click', anchorNavNextExit);\n\n    return () => {\n      contentContainer.current &&\n        contentContainer.current.removeEventListener(\n          'click',\n          anchorNavNextExit\n        );\n    };\n  }, []);\n\n  useEffect(() => {\n    if (window.dev()) {\n      const data = includeAudio\n        ? {\n            id,\n            audioSrc,\n            autoPlay: window.dev() ? false : autoPlay,\n            controls,\n            delay,\n          }\n        : null;\n\n      dispatch(controlAudioAction(data));\n    }\n  }, [includeAudio, audioSrc]);\n\n  useEffect(() => {\n    if (window.dev()) {\n      return;\n    }\n\n    const sectionInViewSubscriber = pubSub.subscribe(\n      'SECTION_IN_VIEW',\n      ({ sectionInView }) => {\n        if (sectionInView.id === id) {\n          const data = includeAudio\n            ? {\n                id,\n                audioSrc,\n                autoPlay: window.dev() ? false : autoPlay,\n                controls,\n                delay,\n                pause: false,\n              }\n            : null;\n\n          dispatch(controlAudioAction(data));\n        }\n      }\n    );\n\n    return () => {\n      sectionInViewSubscriber();\n    };\n  }, []);\n\n  useEffect(() => {\n    if (autoOpenNextSection) {\n      store.dispatch(updateInteractionsOpenAction(id));\n    }\n  }, []);\n\n  let isLocked = lockDown;\n\n  // since the background gets set on the style on creation\n  // kill it if we have a ' local ' background color\n  // goal would be to remove it from the factory. but it's legacy from wizard\n  // WINDING on down. . .\n  const overideStyleBackground = props.hasOwnProperty('background')\n    ? {\n        background: background || '',\n      }\n    : {};\n\n  if (!renderCount[id]) {\n    renderCount[id] = 0;\n  }\n\n  // need to further work on all the concepts going on with the headerHeight\n  // firstInteraction checking\n  // responsive aspect etc\n  // right now it's being spread over a couple places which feels super gross\n  // need to bring it all under some unified solution\n\n  let paddingTop = headerHeight;\n\n  if (!isFirstInteraction && headerStyle === 'graphic') {\n    paddingTop = 70;\n  }\n\n  if (screen.availWidth <= 480) {\n    paddingTop = 50;\n  }\n\n  return (\n    <InteractionContext.Provider\n      value={{\n        id,\n        textColor: parsedTextColor,\n        stopAudioWhenModalIsOpened,\n        next: next(sId, id),\n        isLocked,\n        children,\n      }}\n    >\n      {/* @ts-ignore */}\n      <Flexbox\n        as=\"section\"\n        id={`i${id}`}\n        css={css`\n          ${!isOpen &&\n            `\n            display: none;\n          `}\n\n          ${updateGlobalFontStylesFromTheme({\n            fontSize,\n            lineHeight,\n            parsedTextColor,\n            headingsStyles() {\n              return headingsStyles({ h1, h2, h3, h4, h5, h6 });\n            },\n          })}\n\n          [id*='content-container'] > div:last-child {\n            ${window.dev()\n              ? `margin-${\n                  {\n                    start: 'left',\n                    end: 'right',\n                  }[buttonPosition]\n                }: -9px;`\n              : ''}\n\n            > div {\n              ${buttonLayouts(buttonPosition)}\n            }\n          }\n        `}\n        style={{\n          position: 'relative',\n          overflowX: 'hidden',\n          ...{\n            ...style,\n            ...overideStyleBackground,\n            ...(backgroundGradient && {\n              background: `linear-gradient(${backgroundGradientAngle}deg, ${backgroundSecondaryColor}, ${background})`,\n            }),\n          },\n        }}\n        py={4}\n        flexDirection=\"column\"\n        justifyContent=\"center\"\n        alignItems=\"center\"\n        minHeight={'100vh'}\n        width={['100%']}\n        paddingTop={paddingTop}\n        data-section\n        data-section-text-color={parsedTextColor}\n        aria-label={`${props.name ? `${props.name}—` : ''}${\n          props.sectionLabel\n        }`}\n        tabIndex={-1}\n      >\n        {/* {(backgroundStyle === 'backgroundImage' && backgroundImage) || (backgroundStyle === undefined && backgroundImage) && ( */}\n        {[undefined, 'backgroundImage'].includes(backgroundStyle) &&\n          backgroundImage && (\n            <BackgroundImage\n              key={backgroundImage}\n              backgroundImage={backgroundImage}\n              backgroundImageOpacity={backgroundImageOpacity}\n              backgroundBlur={backgroundBlur}\n            />\n          )}\n\n        {backgroundStyle === 'animatedOrbs' && (\n          <Orbs\n            {...{\n              orbsFor: 'interaction',\n              primaryOrbColor,\n              secondaryOrbColor,\n              tertiaryOrbColor,\n              orbOpacity,\n              orbBlurStrength,\n              orbSpeed,\n            }}\n          />\n        )}\n\n        {backButton && <HiddenBackButton id={id} />}\n        {topicMenu && <MenuContainer id={id} rootSelector=\"#menu-portal\" />}\n\n        {/* @ts-ignore */}\n        <Flexbox\n          ref={contentContainer}\n          id={`i${id}-content-container`}\n          position=\"relative\"\n          flexDirection=\"column\"\n          justifyContent=\"center\"\n          width={['100%']}\n          maxWidth={['100%', null, fullWidth ? '100%' : '1100px']}\n          // tabIndex={-1}\n          css={css({\n            ...(includeAudio &&\n              audioSrc &&\n              controls && {\n                '@media (max-width: 768px)': {\n                  paddingBottom: 20,\n                },\n              }),\n          })}\n        >\n          {children}\n        </Flexbox>\n\n        {window.dev() && (\n          <Wrapper\n            id={id}\n            focusedNodeId={focusedNodeId}\n            headerHeight={headerHeight}\n          />\n        )}\n      </Flexbox>\n\n      <InfoBubbleContainer />\n    </InteractionContext.Provider>\n  );\n};\n\nexport default ContainerLogical;\n","import { controlAudioAction } from 'actions/controlAudioAction';\nimport getStore from './getStore';\n\nconst store = getStore();\n\n// kill all audio if any is playing\nexport const killAllAudio = () => {\n  // const audios = Array.from(\n  //   document.querySelectorAll('audio')\n  // ) as HTMLAudioElement[];\n\n  // audios.forEach(audio => {\n  //   audio.pause();\n  // });\n  store.dispatch(\n    controlAudioAction({\n      pause: true,\n    })\n  );\n};\n","/** @jsx jsx */\n\nimport React, {\n  useContext,\n  useState,\n  useRef,\n  useEffect,\n  useLayoutEffect,\n  memo,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { css, jsx } from '@emotion/core';\nimport ie11VerticalFlexCenterFix from 'services/ie11VerticalFlexCenterFix';\nimport getStore from 'services/getStore';\nimport pubSub from 'services/pubSub';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport { useSelector, useDispatch } from 'react-redux';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport updateReadOnlyText from 'services/updateReadOnlyText';\nimport { motion } from 'framer-motion';\nimport { InteractionContext } from 'components/Layouts/ContainerLogical';\nimport { killAllAudio } from 'services/killAllAudio';\nimport { isIOSSafari } from 'services/isIOSSafari';\nimport { updateGlobalFontStylesFromTheme } from 'styles/updateGlobalFontStylesFromTheme';\nimport { State } from 'store/store';\nimport headingsStyles from 'components/Layouts/headingsStyles';\n\nconst store = getStore();\n\nlet container;\nlet modalOpen = false;\n\ninterface IModal {\n  useFader?: boolean;\n  disableNullSpaceClick?: boolean;\n  minWidth?: string;\n  onClose?: () => void;\n  onOpened?: () => void;\n  contentContainerStyles?: { [key: string]: string | number };\n  children: any;\n}\n\nconst Modal = memo(\n  ({\n    useFader = true,\n    disableNullSpaceClick = false,\n    minWidth = '50vw',\n    onClose,\n    onOpened = () => {},\n    contentContainerStyles = {},\n    children,\n  }: IModal): any => {\n    if (!container) {\n      container = document.querySelector('#modal-container');\n    }\n\n    const interactionContext = useContext(InteractionContext);\n\n    const [btnColor, setBtnColor] = useState<string | undefined>(undefined);\n\n    const focusedNodeIdOnOpen = useSelector<any>(\n      ({ focusedNodeId }) => focusedNodeId\n    );\n\n    const { fontSize = 16, lineHeight = 1.5, headings } = useSelector(\n      (state: State) => {\n        return state.theme;\n      }\n    );\n\n    const { h1, h2, h3, h4, h5, h6 } = headings || {};\n\n    const rootContainer = useRef<HTMLDivElement>(null);\n    const contentContainer = useRef<HTMLDivElement | null>(null);\n    const hiddenButton = useRef(null);\n    const buttonTabIndex = useRef(0);\n    const checkResize = useRef(false);\n\n    const getButtonAsAnchorOrButton = (\n      container: HTMLElement\n    ): HTMLAnchorElement | HTMLButtonElement | null => {\n      if (!container) {\n        return null;\n      }\n\n      return (\n        container.querySelector('[class*=\"navigationButton\"]') ||\n        container.querySelector('[class*=\"genericButton\"]') ||\n        null\n      );\n    };\n\n    useEffect(() => {\n      modalOpen = true;\n      window['MODAL_OPEN'] = true;\n\n      if (!contentContainer.current) {\n        return;\n      }\n\n      // the deal here is following the 'conventional' handling of modals\n      // focus is captured within modal and all access to body content is disabled\n      // only default focusable elements are added to a list of focusableElements\n      // ( unless we explicitly add the contentContainer as the first element )\n      // on first Tab the first focusbable element gains focus. then we cycle <>\n\n      // we can also go with adding the contentContainer as the first element\n      // judgement call ?\n\n      //\n\n      const focusableElements = [\n        contentContainer.current,\n        ...(Array.from(\n          contentContainer.current.querySelectorAll(`a, button`)\n        ) as HTMLElement[]),\n      ];\n\n      let firstFocusElement = focusableElements[0];\n      let lastFocusElement = focusableElements[focusableElements.length - 1];\n      //\n      let tabInit;\n\n      firstFocusElement.focus();\n\n      const tabOveride = e => {\n        if (!['Tab'].includes(e.key)) {\n          return;\n        }\n\n        const reverseTab = e.shiftKey;\n\n        // we only run this if we're NOT giving the contentContainer focus\n        if (!tabInit) {\n          // we do this so that we're not setting the focus of the contentContainer\n          // on modal open. screen reader read content twice\n\n          tabInit = true;\n        }\n\n        if (e.target === firstFocusElement && reverseTab) {\n          e.preventDefault();\n          lastFocusElement?.focus();\n          //\n          return;\n        }\n\n        if (e.target === lastFocusElement && !reverseTab) {\n          e.preventDefault();\n          firstFocusElement?.focus();\n        }\n      };\n\n      window.addEventListener('keydown', tabOveride);\n\n      // give ALL other elements aria-hidden ???\n      const root = document.querySelector('#root')!;\n      root.setAttribute('aria-hidden', 'true');\n\n      document.body.style.overflowY = 'hidden';\n\n      const onResize = () => {\n        if (!rootContainer.current) {\n          return;\n        }\n\n        rootContainer.current.style.alignItems =\n          window.innerHeight < contentContainer.current!.scrollHeight\n            ? 'flex-start'\n            : 'center';\n\n        checkResize.current = true;\n      };\n\n      const tick = setInterval(() => {\n        onResize();\n        window.addEventListener('resize', onResize);\n        if (checkResize.current) {\n          clearInterval(tick);\n        }\n      }, 100);\n\n      return () => {\n        clearInterval(tick);\n\n        modalOpen = false;\n        window['MODAL_OPEN'] = false;\n\n        root.setAttribute('aria-hidden', 'false');\n        document.body.style.overflowY = 'auto';\n\n        checkResize.current = false;\n        window.removeEventListener('resize', onResize);\n\n        window.removeEventListener('keydown', tabOveride);\n      };\n    }, []);\n\n    useEffect(() => {\n      if (!window.dev) {\n        // we're opening the modal from the editor so we don't need these checks\n        return;\n      }\n\n      pubSub.subscribe('CLOSE_MODAL', $ => {\n        onClose!();\n      });\n\n      return () => {\n        const { focusedNodeId } = store.getState();\n\n        if (!focusedNodeId) {\n          return;\n        }\n\n        const block = getBlockById(focusedNodeId);\n\n        const isNotInteraction = [\n          'text',\n          'image',\n          'video',\n          'svg',\n          'embed',\n          'editablebutton',\n          'continuebutton',\n        ].includes(block.type.toLowerCase());\n\n        if (isNotInteraction) {\n          if (focusedNodeIdOnOpen) {\n            setCurrentBlock({ id: focusedNodeIdOnOpen });\n          } else {\n            setCurrentBlock(null);\n          }\n        }\n      };\n    }, []);\n\n    useLayoutEffect(() => {\n      if (window.dev && !window.dev()) {\n        updateReadOnlyText(contentContainer.current);\n      }\n    }, []);\n\n    useEffect(() => {\n      if (window.dev && window.dev()) {\n        return;\n      }\n\n      // find all the hrefs a\n\n      const links = Array.from(contentContainer.current!.querySelectorAll('a'));\n\n      if (!links.length) {\n        return;\n      }\n\n      const closeOnLinkClick = e => {\n        onClose!();\n      };\n\n      const addRemoveCloseOnLinkClick = addOrRemove => {\n        links.forEach(link => {\n          if (link.href.includes('#')) {\n            link[`${addOrRemove}EventListener`]('click', closeOnLinkClick);\n          }\n        });\n      };\n\n      addRemoveCloseOnLinkClick('add');\n\n      return () => {\n        addRemoveCloseOnLinkClick('remove');\n      };\n    }, []);\n\n    useEffect(() => {\n      // ' proof of concept '\n\n      if (interactionContext?.stopAudioWhenModalIsOpened) {\n        killAllAudio();\n      }\n\n      //\n    }, []);\n\n    const globalFontStyles = updateGlobalFontStylesFromTheme({\n      fontSize,\n      lineHeight,\n      // parsedTextColor,\n      headingsStyles() {\n        return headingsStyles({ h1, h2, h3, h4, h5, h6 });\n      },\n    });\n\n    return createPortal(\n      // @ts-ignore\n      <motion.div\n        ref={rootContainer}\n        initial={{ opacity: 0 }}\n        transition={{\n          duration: useFader ? 0.325 : 0,\n          ease: 'easeOut',\n        }}\n        animate={{ opacity: 1 }}\n        onAnimationComplete={onOpened}\n        css={css`\n          position: fixed;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          left: 0px;\n          top: 0px;\n          width: 100vw;\n          min-height: 100vh;\n          max-height: 100%;\n          padding: ${isIOSSafari() ? '65px' : '10px'} 10px;\n          background: rgba(0, 0, 0, 0.6);\n          z-index: 1;\n          ${ie11VerticalFlexCenterFix('height: 100vh;')}\n\n          overflow-y: scroll;\n\n          ${globalFontStyles}\n        `}\n      >\n        <button\n          ref={hiddenButton}\n          css={css`\n            position: absolute;\n            left: 3px;\n            top: 3px;\n            width: calc(100% - 6px);\n            height: calc(100% - 6px);\n\n            border: none;\n            outline: none;\n            background: transparent;\n\n            &:focus {\n              border: 1px solid ${btnColor || '#282a2b'};\n            }\n\n            ${disableNullSpaceClick &&\n              `\n              pointer-events: none;\n          `}\n          `}\n          onClick={(e: any) => {\n            if (disableNullSpaceClick) {\n              return;\n            }\n            //\n            onClose!();\n          }}\n          aria-hidden=\"true\"\n        ></button>\n\n        <div\n          ref={contentContainer}\n          css={css({\n            position: 'relative',\n            display: 'flex',\n            justifyContent: 'center',\n            alignItems: 'center',\n            width: '100%',\n            maxWidth: '1024px',\n            borderRadius: '50px',\n            background: '#fff',\n            boxShadow: '0 0 12px 0 rgba(0, 0, 0, 0.2)',\n            ...contentContainerStyles,\n\n            'button:last-of-type': {\n              position: 'relative',\n            },\n          })}\n          onClick={e => e.stopPropagation()}\n          tabIndex={0}\n        >\n          {children}\n        </div>\n      </motion.div>,\n      container\n    );\n  },\n  () => {\n    // if it doesn't exist\n    if (!window.dev) {\n      return false;\n    }\n\n    return !window.dev();\n  }\n);\n\nconst useModal = ({ children }) => {\n  const [, setState] = useState(true);\n\n  return <Modal onClose={() => setState(false)}>{children}</Modal>;\n};\n\nexport default Modal;\n\nexport { useModal };\n","export const isIOSSafari = () => {\n  const isSafari = !!navigator.userAgent.match(/Version\\/[\\d\\.]+.*Safari/);\n  const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n\n  return isSafari && iOS;\n  // if (isSafari && iOS) {\n  //     alert(\"You are using Safari on iOS!\");\n  // } else if(isSafari) {\n  //     alert(\"You are using Safari.\");\n  // }\n};\n","import React from 'react';\r\nimport { Block } from '@chameleoncreator/creator-app';\r\nimport getBlockById from './getBlockById';\r\n\r\n// TODO\r\n// implement something like this\r\ninterface IRender {\r\n  [key: string]: (props?: any) => {} | null;\r\n}\r\n\r\nconst render = (block: Block, Components: {}): JSX.Element | string => {\r\n  let b: Block | null = block;\r\n  //\r\n  if (b?.type === 'Ref') {\r\n    b = b?.id ? getBlockById(b.id) : null;\r\n  }\r\n\r\n  if (!b) {\r\n    return <div key={`block-is-void-${Math.random()}`} />;\r\n  }\r\n\r\n  const children = Array.isArray(b.children)\r\n    ? (b.children as Block[]).map(c => render(c, Components))\r\n    : b.children;\r\n\r\n  let Component = Components[b.type];\r\n\r\n  if (Component === null) {\r\n    // we can run this check here\r\n    // or we ' enforce ' the function with types\r\n    // yes. let's TODO that\r\n    Component = () => null;\r\n  } else if (!Component) {\r\n    Component = () => null;\r\n  }\r\n\r\n  return (\r\n    <Component key={b.id} id={b.id} {...b.props}>\r\n      {children}\r\n    </Component>\r\n  );\r\n};\r\n\r\nexport default render;\r\n","import React, { Fragment as _ } from 'react';\nimport { css } from 'emotion';\nimport Html from 'slate-html-serializer';\nimport getStore from 'services/getStore';\n\nconst store = getStore();\n\nconst rules = [\n  {\n    deserialize(el, next) {\n      const type = el && el.getAttribute && el.getAttribute('data-type');\n\n      if (!type) return;\n\n      if (\n        [\n          'code',\n          'paragraph',\n          'list-item',\n          'bulleted-list',\n          'numbered-list',\n          'indented-list',\n          'indented',\n          'textAlignLeft',\n          'textAlignCenter',\n          'textAlignRight',\n          'heading-one',\n          'heading-two',\n          'heading-three',\n          'heading-four',\n          'heading-five',\n          'heading-six',\n          'br',\n          'span',\n        ].includes(type)\n      )\n        return {\n          object: 'block',\n          type: type,\n          data: {\n            className: el.getAttribute('class'),\n            element: el,\n          },\n          nodes: next(el.childNodes),\n        };\n    },\n    serialize(obj, children) {\n      if (obj.object == 'block') {\n        switch (obj.type) {\n          case 'paragraph':\n            return (\n              <p className={obj.data.get('className')} data-type={obj.type}>\n                {children}\n              </p>\n            );\n\n          case 'list-item':\n            return (\n              <li className=\"chameleon-li\" data-type={obj.type}>\n                {children}\n              </li>\n            );\n\n          case 'bulleted-list':\n            return (\n              <ul className=\"chameleon-ul\" data-type={obj.type}>\n                {children}\n              </ul>\n            );\n\n          case 'numbered-list':\n            return (\n              <ol className=\"chameleon-ol\" data-type={obj.type}>\n                {children}\n              </ol>\n            );\n\n          case 'indented-list':\n            return (\n              <ul className=\"indented-list\" data-type={obj.type}>\n                {children}\n              </ul>\n            );\n\n          case 'indented':\n            return (\n              <div\n                className=\"indented\"\n                style={{ paddingLeft: 20 }}\n                data-type={obj.type}\n              >\n                {children}\n              </div>\n            );\n\n          case 'textAlignLeft':\n            return (\n              <div className=\"chameleon-text-align-left\" data-type={obj.type}>\n                {children}\n              </div>\n            );\n\n          case 'textAlignCenter':\n            return (\n              <div className=\"chameleon-text-align-center\" data-type={obj.type}>\n                {children}\n              </div>\n            );\n\n          case 'textAlignRight':\n            return (\n              <div className=\"chameleon-text-align-right\" data-type={obj.type}>\n                {children}\n              </div>\n            );\n\n          case 'heading-one':\n            return <h1 data-type={obj.type}>{children}</h1>;\n\n          case 'heading-two':\n            return <h2 data-type={obj.type}>{children}</h2>;\n\n          case 'heading-three':\n            return <h3 data-type={obj.type}>{children}</h3>;\n\n          case 'heading-four':\n            return <h4 data-type={obj.type}>{children}</h4>;\n\n          case 'heading-five':\n            return <h5 data-type={obj.type}>{children}</h5>;\n\n          case 'heading-six':\n            return <h6 data-type={obj.type}>{children}</h6>;\n\n          case 'code':\n            return (\n              <pre\n                className={'prettyprint' || obj.data.get('className')}\n                data-type={obj.type}\n              >\n                <code>{children}</code>\n              </pre>\n            );\n\n          case 'br':\n            return <div data-type=\"br\">&#65279;</div>;\n\n          case 'span':\n            return <span data-type={obj.type}>{children}</span>;\n\n          case '':\n            return <_>{children}</_>;\n        }\n      }\n    },\n  },\n  {\n    deserialize(el, next) {\n      const type = el && el.getAttribute && el.getAttribute('data-type');\n      if (!type) return;\n\n      if (['link'].includes(type))\n        return {\n          object: 'inline',\n          type: type,\n          data: {\n            className: el.getAttribute('class'),\n            href: el.getAttribute('href'),\n            title: el.getAttribute('title'),\n            target: el.getAttribute('target'),\n          },\n          nodes: next(el.childNodes),\n        };\n    },\n    serialize(obj, children) {\n      const isInternalLink = false;\n\n      if (obj.object == 'inline') {\n        switch (obj.type) {\n          case 'link': {\n            const href = obj.data.get('href');\n\n            return (\n              <a\n                href={href}\n                title={obj.data.get('title')}\n                target={obj.data.get('target')}\n                style={\n                  {\n                    // color: 'inherit',\n                    // cursor: 'pointer'\n                  }\n                }\n                data-type={obj.type}\n              >\n                {children}\n              </a>\n            );\n          }\n        }\n      }\n    },\n  },\n\n  {\n    deserialize(el, next) {\n      const type = el && el.getAttribute && el.getAttribute('data-type');\n\n      // !type ||\n      if (\n        ![\n          'bold',\n          'italic',\n          'underline',\n          'superscript',\n          'subscript',\n          'indent',\n        ].includes(type)\n      ) {\n        return;\n      }\n\n      let style = el.getAttribute('style');\n      if (style) {\n        style = style.split(/:/g);\n        style = {\n          [style[0]]: style[1],\n        };\n      } else {\n        style = {};\n      }\n\n      return {\n        object: 'mark',\n        type: type,\n        nodes: next(el.childNodes),\n      };\n    },\n    serialize(obj, children) {\n      if (obj.object === 'mark') {\n        switch (obj.type) {\n          case 'bold':\n            return <strong data-type={obj.type}>{children}</strong>;\n\n          case 'italic':\n            return <em data-type={obj.type}>{children}</em>;\n\n          case 'underline':\n            return <u data-type={obj.type}>{children}</u>;\n\n          case 'superscript':\n            return <sup data-type={obj.type}>{children}</sup>;\n\n          case 'subscript':\n            return <sub data-type={obj.type}>{children}</sub>;\n\n          case 'indent':\n            return <span data-type={obj.type}>{children}</span>;\n        }\n      }\n    },\n  },\n\n  {\n    deserialize(el, next) {\n      const type = el && el.getAttribute && el.getAttribute('data-type');\n\n      // !type ||\n      if (\n        !['fontFamily', 'fontSize', 'color', 'lang', 'variable'].includes(type)\n      ) {\n        return;\n      }\n\n      let style = el.getAttribute('style');\n      if (style) {\n        style = style.split(/:/g);\n        style = {\n          [style[0]]: style[1],\n        };\n      } else {\n        style = {};\n      }\n\n      let fontSize = style['font-size'];\n\n      if (fontSize && fontSize.match('rem')) {\n        let fontSizeNumber = Number(\n          style['font-size'].replace(/px/g, '').replace(/rem/g, '')\n        );\n\n        if (!isNaN(fontSizeNumber)) {\n          fontSize = `${fontSizeNumber * 16}px`;\n        }\n      }\n\n      return {\n        object: 'mark',\n        type: type,\n        data: {\n          className: el.getAttribute('class'),\n          fontFamily: style['font-family'],\n          fontSize,\n          color: style['color'],\n          lang: el.getAttribute('lang'),\n          varName: el.getAttribute('data-varname'),\n        },\n        nodes: next(el.childNodes),\n      };\n    },\n    serialize(obj, children) {\n      const { data } = obj.toJS();\n\n      if (obj.object === 'mark') {\n        switch (obj.type) {\n          case 'fontFamily':\n            const { fontFamily } = data;\n            return (\n              <span style={{ fontFamily }} data-type={obj.type}>\n                {children}\n              </span>\n            );\n          case 'fontSize':\n            const fontSizePXToREM = `${Number(\n              String(data.fontSize).replace(/px/g, '')\n            ) / 16}rem`;\n\n            return (\n              <span\n                style={{\n                  fontSize: fontSizePXToREM,\n                }}\n                data-type={obj.type}\n              >\n                {children}\n              </span>\n            );\n          case 'color':\n            return (\n              <span\n                className={css({\n                  span: {\n                    color: `${data.color} !important`,\n                  },\n                })}\n                style={{ color: data.color }}\n                data-type={obj.type}\n              >\n                {children}\n              </span>\n            );\n          case 'lang':\n            return (\n              <span lang={data.lang} data-type={data.lang && obj.type}>\n                {children}\n              </span>\n            );\n          case 'variable': {\n            // the nuclear backUp option if varName fails. . .\n            let varNameFromChildren;\n            try {\n              varNameFromChildren = children?.toString();\n            } catch (err) {\n              console.warn('COULD NOT CONVERT CHILDREN TO VARNAME', err);\n            }\n\n            const varName = data.varName || varNameFromChildren;\n\n            return (\n              <span data-type=\"variable\" data-varname={varName}>\n                {children}\n              </span>\n            );\n          }\n        }\n      }\n    },\n  },\n];\n\n//\nconst html = new Html({ rules });\n\nexport default html;\n","/** @jsx jsx */\nimport React, {\n  useState,\n  useRef,\n  useEffect,\n  useLayoutEffect,\n  cloneElement,\n  useContext,\n  Fragment as _,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { CALCULATED_LINE_HEIGHT_OFFSET } from 'styles/variables';\nimport Close from 'assets/close.svg';\nimport { InteractionContext } from 'components/Layouts/ContainerLogical';\nimport { Node, Text } from 'slate';\nimport html from './serializer';\n\nconst findUl = node => {\n  if (node === document.body) {\n    return;\n  }\n\n  if (node.parentNode.tagName.toLowerCase() === 'ul') {\n    return node.parentNode;\n  }\n\n  return findUl(node.parentNode);\n};\n\nconst Indent = ({ type, attributes, children }) => {\n  const indent: any = useRef(null);\n\n  useLayoutEffect(() => {\n    const foundUl = findUl(indent.current.parentNode);\n\n    let closestLi;\n    if (foundUl) {\n      closestLi = indent.current.closest('li');\n      if (closestLi) {\n        closestLi.classList.add('indent');\n      }\n    } else {\n      indent.current.classList.add('indent-alt');\n    }\n\n    return () => {\n      closestLi?.classList.remove('indent');\n      indent.current.classList.remove('indent-alt');\n    };\n  }, []);\n\n  useEffect(() => {\n    requestAnimationFrame(() => {\n      const foundUl = findUl(indent.current.parentNode);\n\n      if (!foundUl && indent.current.classList.contains('indent-alt')) {\n        console.log('kill it with fire !!!');\n      }\n    });\n  }, []);\n\n  return (\n    <span ref={indent} data-type={type} {...attributes}>\n      {children}\n    </span>\n  );\n};\n\nconst Lang = ({ type, lang, attributes, children }) => {\n  const langRef: any = useRef(null);\n\n  if (!lang) {\n    return children;\n  }\n\n  return (\n    <span>\n      <span\n        ref={langRef}\n        className=\"lang-bracket\"\n        data-type={type}\n        {...attributes}\n      >\n        {children}\n      </span>\n      {lang && (\n        <sup\n          style={{\n            fontSize: 11,\n          }}\n        >\n          *{lang}\n        </sup>\n      )}\n    </span>\n  );\n};\n\nconst renderMark = (props, editor, next) => {\n  const { children, mark, attributes } = props;\n  const { type, data } = mark;\n\n  switch (type) {\n    case 'bold':\n      return <strong {...attributes}>{children}</strong>;\n    case 'italic':\n      return <em {...attributes}>{children}</em>;\n    case 'underline':\n      return <u {...attributes}>{children}</u>;\n\n    case 'fontFamily':\n      const fontFamily = data.get('fontFamily');\n\n      return (\n        <span style={{ fontFamily }} data-type={type} {...attributes}>\n          {children}\n        </span>\n      );\n\n    case 'fontSize':\n      const fontSize = parseInt(data.get('fontSize'), 10);\n      const calculatedLineHeight =\n        fontSize <= 18 ? 1.5 : fontSize * CALCULATED_LINE_HEIGHT_OFFSET;\n\n      return (\n        <span\n          style={{\n            fontSize,\n            lineHeight: `${calculatedLineHeight}px`,\n          }}\n          data-type={type}\n          {...attributes}\n        >\n          {children}\n        </span>\n      );\n\n    case 'color':\n      return (\n        <span\n          style={{ color: data.get('color') }}\n          data-type={type}\n          {...attributes}\n        >\n          {children}\n        </span>\n      );\n\n    case 'lang':\n      const lang = data.get('lang');\n\n      // if (!children?.props?.text) {\n      //   return null;\n      // }\n      //\n\n      return (\n        <Lang type={type} lang={lang} {...attributes}>\n          {children}\n        </Lang>\n      );\n\n    case 'span': {\n      return children;\n    }\n\n    case 'variable': {\n      const interactionContext = useContext(InteractionContext);\n\n      const { node } = props;\n      const varName = data.get('varName');\n      const { text } = props;\n\n      const [localColor, setLocalColor] = useState<string | undefined>();\n      const variable = useRef<HTMLSpanElement>();\n\n      const widgetColor = localColor || interactionContext?.textColor;\n\n      useLayoutEffect(() => {\n        if (!variable.current) {\n          return;\n        }\n\n        //\n        const chameleonText = variable.current.closest('.chameleon-text p');\n        let spanWithColor = variable.current.closest('[data-type=\"color\"]');\n        //\n\n        if (spanWithColor && !chameleonText?.contains(spanWithColor)) {\n          spanWithColor = null;\n        }\n\n        const chameleonTextComputedStyle =\n          chameleonText && getComputedStyle(chameleonText);\n        const spanWithColorComputedStyle =\n          spanWithColor && getComputedStyle(spanWithColor);\n\n        spanWithColorComputedStyle?.color\n          ? setLocalColor(spanWithColorComputedStyle?.color)\n          : setLocalColor(chameleonTextComputedStyle?.color);\n      });\n\n      useEffect(() => {\n        const onKeyAction = e => {\n          if (variable?.current?.innerText !== text) {\n            editor.moveToRangeOfNode(node).delete();\n          }\n        };\n\n        window.addEventListener('keydown', onKeyAction);\n\n        return () => {\n          window.removeEventListener('keydown', onKeyAction);\n        };\n      }, []);\n\n      return (\n        <span\n          ref={variable}\n          className=\"variable\"\n          data-type={type}\n          //\n          data-varname={varName || text}\n          {...attributes}\n          style={{\n            position: 'relative',\n            display: 'inline-block',\n            padding: '0 25px 0 10px',\n            margin: '0 3px',\n            borderRadius: 5,\n            boxShadow: `0 0 0 1px ${widgetColor}`,\n          }}\n          contentEditable=\"false\"\n          suppressContentEditableWarning\n          onClick={e => {\n            //\n            const target = e.target as HTMLElement;\n            const dataType = target.getAttribute('data-type');\n\n            if (!dataType) {\n              // select whole text ( for deletion )\n              editor.moveToStartOfText().moveFocusForward(text.length);\n              return;\n            }\n\n            if (!variable?.current) {\n              return;\n            }\n\n            const { left, right, width } = target.getBoundingClientRect();\n            const middle = left + width / 2;\n\n            const leftOrRightEdge = e.clientX < middle ? 'left' : 'right';\n\n            const pParent = variable.current?.closest('p');\n\n            if (leftOrRightEdge === 'left') {\n              if (pParent?.firstChild?.contains(variable.current)) {\n                // console.log('is first elem. adding buffer');\n                addEmptyAndRemoveMarks();\n\n                const { document } = html.deserialize('<span> </span>');\n                editor.insertFragment(document);\n\n                // we lose focus / caret / cursor. this doesn't help\n                // maybe we need to manually force a selection ?\n                editor.focus();\n              }\n              return;\n            }\n\n            if (pParent?.lastChild?.contains(variable?.current)) {\n              // console.log('is last elem. adding buffer');\n              addEmptyAndRemoveMarks();\n              editor.moveForward();\n            }\n\n            function addEmptyAndRemoveMarks() {\n              editor.insertText(' ').moveFocusBackward(1);\n\n              const selection = editor.value;\n\n              selection.marks.toJS().forEach(m => {\n                editor.removeMark(m);\n              });\n            }\n          }}\n        >\n          {children}\n          <span\n            style={{\n              display: 'flex',\n              position: 'absolute',\n              justifyContent: 'center',\n              alignItems: 'center',\n\n              right: 5,\n              top: '50%',\n              transform: 'translateY(-50%)',\n            }}\n          >\n            <svg\n              xmlns=\"http://www.w3.org/2000/svg\"\n              width={`${13 * 0.7}px`}\n              height={`${12 * 0.7}px`}\n              viewBox=\"0 0 13 12\"\n              version=\"1.1\"\n              css={css({\n                cursor: 'pointer',\n                ':hover': {\n                  opacity: 0.8,\n                },\n              })}\n              onClick={() => {\n                try {\n                  editor.moveToRangeOfNode(node).delete();\n                } catch (err) {}\n              }}\n            >\n              <g\n                stroke=\"none\"\n                strokeWidth=\"1\"\n                fill={widgetColor}\n                fillRule=\"evenodd\"\n              >\n                <g\n                  transform=\"translate(-1332.000000, -166.000000)\"\n                  fill={widgetColor}\n                >\n                  <g transform=\"translate(1332.000000, 166.000000)\">\n                    <polygon\n                      transform=\"translate(6.500000, 6.000000) rotate(-45.000000) translate(-6.500000, -6.000000) \"\n                      points=\"-0.7625 5.1375 13.75 5.25 13.7625 6.8625 -0.75 6.75\"\n                    />\n                    <polygon\n                      transform=\"translate(6.500000, 6.000000) rotate(45.000000) translate(-6.500000, -6.000000) \"\n                      points=\"-0.75 5.25 13.7625 5.1375 13.75 6.75 -0.7625 6.8625\"\n                    />\n                  </g>\n                </g>\n              </g>\n            </svg>\n          </span>\n        </span>\n      );\n    }\n\n    case 'indent': {\n      return (\n        <Indent type={type} attributes={attributes}>\n          {children}\n        </Indent>\n      );\n    }\n\n    case 'superscript': {\n      return (\n        <sup data-type={type} {...attributes}>\n          {children}\n        </sup>\n      );\n    }\n\n    case 'subscript': {\n      return (\n        <sub data-type={type} {...attributes}>\n          {children}\n        </sub>\n      );\n    }\n\n    default:\n      return next();\n  }\n};\n\nexport default renderMark;\n","/** @jsx jsx */\nimport React, { Fragment as _, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { textAlign } from './textAlign';\n\nconst Li = ({ attributes, children }) => {\n  useEffect(() => {\n    const li = attributes.ref.current;\n    let _fontFamily = '';\n\n    // we don't care about color per li now\n    // global on the field\n    //\n    let _color = '';\n    let lastSpan;\n\n    Array.from(li.querySelectorAll('span')).forEach((span: any) => {\n      //\n      // totally ignore any links\n      if (span.closest('a')) {\n        return;\n      }\n\n      const { fontFamily, color } = span.style;\n\n      if (fontFamily && !_fontFamily) {\n        // set the li font to the first font we encounter\n        _fontFamily = fontFamily;\n      }\n\n      if (!!color) {\n        const childSpanOfSpan = span.querySelector('span');\n\n        if (childSpanOfSpan) {\n          childSpanOfSpan.style.color = color;\n        }\n      }\n    });\n\n    // li.style.fontFamily = _fontFamily;\n  });\n\n  return (\n    <li {...attributes}>\n      {/* <span>{children}</span> */}\n      {children}\n    </li>\n  );\n};\n\nconst renderNode = (props, editor, next) => {\n  const { attributes, children, node, isFocused } = props;\n\n  let style;\n  try {\n    style = props.node.data.toJS().style || {};\n  } catch (err) {\n    console.warn('!!!');\n  }\n\n  switch (node.type) {\n    case 'list-item':\n      return <Li attributes={attributes}>{children}</Li>;\n    // return <li {...attributes}>{children}</li>;\n\n    case 'bulleted-list':\n      return (\n        <ul className=\"chameleon-ul\" {...attributes}>\n          {children}\n        </ul>\n      );\n\n    case 'numbered-list':\n      return (\n        <ol className=\"chameleon-ol\" {...attributes}>\n          {children}\n        </ol>\n      );\n\n    case 'indented-list':\n      return (\n        <ul className=\"indented-list\" {...attributes}>\n          {children}\n        </ul>\n      );\n\n    case 'indented':\n      return (\n        <div className=\"indented\" style={{ paddingLeft: 20 }} {...attributes}>\n          {children}\n        </div>\n      );\n\n    case 'textAlignLeft':\n      return (\n        <div className=\"chameleon-text-align-left\" {...attributes}>\n          {children}\n        </div>\n      );\n\n    case 'textAlignCenter':\n      return (\n        <div className=\"chameleon-text-align-center\" {...attributes}>\n          {children}\n        </div>\n      );\n\n    case 'textAlignRight':\n      return (\n        <div className=\"chameleon-text-align-right\" {...attributes}>\n          {children}\n        </div>\n      );\n\n    case 'heading-one':\n      return (\n        <h1 style={style} {...attributes}>\n          {children}\n        </h1>\n      );\n\n    case 'heading-two':\n      return (\n        <h2 style={style} {...attributes}>\n          {children}\n        </h2>\n      );\n\n    case 'heading-three':\n      return (\n        <h3 style={style} {...attributes}>\n          {children}\n        </h3>\n      );\n\n    case 'heading-four':\n      return (\n        <h4 style={style} {...attributes}>\n          {children}\n        </h4>\n      );\n\n    case 'heading-five':\n      return (\n        <h5 style={style} {...attributes}>\n          {children}\n        </h5>\n      );\n\n    case 'heading-six':\n      return (\n        <h6 style={style} {...attributes}>\n          {children}\n        </h6>\n      );\n\n    case 'paragraph': {\n      return (\n        <p style={style} {...attributes}>\n          {children}\n        </p>\n      );\n    }\n\n    case 'code': {\n      return (\n        <pre style={style} {...attributes}>\n          <code>{children}</code>\n        </pre>\n      );\n    }\n\n    default:\n      return next();\n  }\n};\n\nexport default renderNode;\n","/** @jsx jsx */\nimport React, {\n  Fragment as _,\n  useState,\n  useRef,\n  useLayoutEffect,\n  useEffect,\n  Component,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\n\nconst A = ({ href, title, target, attributes, children }) => {\n  useEffect(() => {\n    const a = attributes.ref.current;\n    const localColor = Array.from(a.querySelectorAll('span')).find(\n      (span: any) => span.style.color\n    ) as any;\n\n    if (localColor) {\n      a.style.textDecorationColor = localColor.style.color;\n    }\n  });\n\n  return (\n    <a\n      {...attributes}\n      href={href}\n      title={title}\n      target={target}\n      style={\n        {\n          // color: 'inherit',\n          // cursor: 'pointer'\n        }\n      }\n      onMouseEnter={\n        window.dev()\n          ? ({ currentTarget }) => {\n              window['CURRENT_LINK_WITH_FOCUS'] = {\n                text: currentTarget.innerText,\n                href,\n              };\n            }\n          : null\n      }\n      onMouseOut={\n        window.dev() ? () => (window['CURRENT_LINK_WITH_FOCUS'] = null) : null\n      }\n    >\n      {children}\n    </a>\n  );\n};\n\nconst renderInline = (props, editor, next) => {\n  const { attributes, children, node } = props;\n\n  switch (node.type) {\n    case 'link': {\n      const { data } = node;\n      const href = data.get('href');\n      const title = data.get('title');\n      const target = data.get('target');\n\n      return (\n        <A href={href} title={title} target={target} attributes={attributes}>\n          {children}\n        </A>\n      );\n    }\n\n    default:\n      return next();\n  }\n};\n\nexport default renderInline;\n","import getStore from 'services/getStore';\nimport { cloneBlock } from '@chameleoncreator/creator-app';\nimport { setBlockAction } from \"actions/setBlockAction\";\n\nlet newBlocks = {};\nlet delayUpdate;\n\nexport default (block, props) => {\n  if (!newBlocks[block.id]) {\n    newBlocks[block.id] = cloneBlock(block);\n  }\n\n  newBlocks[block.id].props = { ...newBlocks[block.id].props, ...props };\n\n  clearTimeout(delayUpdate);\n\n  delayUpdate = setTimeout(() => {\n    Object.values(newBlocks).forEach((b: any) => {\n      getStore().dispatch(setBlockAction(b));\n    });\n    newBlocks = {};\n  }, 1000 / 60);\n};\n","import getStore from 'services/getStore';\nimport { State } from 'store/store';\n\nconst bulletStyles = (bulletColor: string, textColor: string = '') => {\n  const state = getStore().getState() as State;\n\n  const margin = state?.theme?.margin || 0;\n\n  const notHeadings = 'not:(h1 ul, h2 ul, h3 ul, h4 ul, h5 ul, h6 ul)';\n\n  return {\n    'ul, ol': {\n      marginLeft: `20px`,\n    },\n\n    // [`ul${notHeadings}, ol${notHeadings}`]: {\n    //   marginLeft: `${margin + 20}px`,\n    // },\n\n    // 'h1 ul, h2 ul, h3 ul, h4 ul, h5 ul, h6 ul': {\n    //   marginLeft: `20px !important`,\n    // },\n\n    'ul li': {\n      paddingLeft: '7px',\n    },\n\n    'ol li': {\n      paddingLeft: '7px',\n    },\n\n    ...(bulletColor && {\n      li: {\n        color: `${bulletColor} !important`,\n      },\n    }),\n  };\n};\n\nexport default bulletStyles;\n","/** @jsx jsx */\n\nimport { useState, useEffect, useRef, useCallback, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport 'services/ie11closestPolyfill';\nimport pubSub from 'services/pubSub';\nimport { useSelector } from 'react-redux';\nimport { State } from 'store/store';\nimport { InteractionContext } from 'components/Layouts/ContainerLogical';\nimport { speechSynthesisCancel } from 'services/speechSynthesisCancel';\nimport isIOS from 'services/isiOS';\n\nlet speechSynth;\nif ('speechSynthesis' in window) {\n  speechSynth = new SpeechSynthesisUtterance();\n}\n\nconsole.log({ speechSynth });\n\nconst PlayBtn = ({ play = true, color = '' }) => {\n  const style = {\n    stroke: color,\n    strokeWidth: 1.5,\n    strokeLinecap: 'round',\n    strokeLinejoin: 'round',\n  } as { [key: string]: string | number };\n\n  return play ? (\n    <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M12 2C17.5228 2 22 6.47716 22 12C22 17.5228 17.5228 22 12 22C6.47716 22 2 17.5228 2 12C2 6.47716 6.47716 2 12 2Z\"\n        style={style}\n      />\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M15.0501 12.467C14.3211 13.253 12.3371 14.583 11.3221 15.01C11.1601 15.078 10.7471 15.222 10.6581 15.224C10.4691 15.23 10.2871 15.124 10.1991 14.954C10.1651 14.888 10.0651 14.457 10.0331 14.265C9.93811 13.681 9.88911 12.774 9.89011 11.862C9.88911 10.905 9.94211 9.95495 10.0481 9.37695C10.0761 9.22095 10.1581 8.86195 10.1821 8.80395C10.2271 8.69595 10.3091 8.61095 10.4081 8.55795C10.4841 8.51695 10.5711 8.49495 10.6581 8.49795C10.7471 8.49995 11.1091 8.62695 11.2331 8.67595C12.2111 9.05595 14.2801 10.434 15.0401 11.244C15.1081 11.317 15.2951 11.513 15.3261 11.553C15.3971 11.643 15.4321 11.752 15.4321 11.862C15.4321 11.964 15.4011 12.068 15.3371 12.155C15.3041 12.2 15.1131 12.4 15.0501 12.467Z\"\n        style={style}\n        fill={color}\n      />\n    </svg>\n  ) : (\n    <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M12 2C17.5228 2 22 6.47716 22 12C22 17.5228 17.5228 22 12 22C6.47716 22 2 17.5228 2 12C2 6.47716 6.47716 2 12 2Z\"\n        style={style}\n      />\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M13.4057 9H10.5943C9.61429 9 9 9.69362 9 10.6755V13.3244C9 14.3063 9.61143 15 10.5943 15H13.4057C14.3886 15 15 14.3063 15 13.3244V10.6755C15 9.69362 14.3886 9 13.4057 9Z\"\n        style={style}\n        fill={color}\n      />\n    </svg>\n  );\n};\n\nexport const TextToSpeech = props => {\n  const [color, setColor] = useState<string | undefined>(undefined);\n  const [canPlay, setCanPlay] = useState<boolean>(true);\n\n  const voice = useSelector((state: State) => {\n    if (!speechSynth) {\n      return null;\n    }\n\n    const voices = window.speechSynthesis.getVoices();\n\n    //\n    const UK_English_Male_iOS = voices.findIndex(voice => {\n      return voice?.name?.toLowerCase() === 'daniel';\n    });\n\n    const voiceSelection = voices.find(voice => {\n      return voice.name === state.theme.textToSpeechVoice;\n    });\n\n    // this isn't 'right' when defaulting to voices[0]\n    // entry 0 isn't really a default is it\n    // we will update later when we've established our refined pattern\n    // for voice selection and the associated defaults for each platform\n    const voiceFallback =\n      voices[isIOS() && UK_English_Male_iOS > -1 ? UK_English_Male_iOS : 0];\n\n    return voiceSelection || voiceFallback;\n  });\n\n  const chameleonText = useRef<HTMLElement>();\n  const textToSpeechBtn = useRef<HTMLDivElement>(null);\n\n  const onClick = useCallback(\n    e => {\n      if (!speechSynth) {\n        return;\n      }\n\n      e.preventDefault();\n      e.stopPropagation();\n\n      speechSynthesisCancel();\n\n      if (chameleonText.current && canPlay) {\n        //\n\n        // this approach was somewhat problems\n        // reading '.' periods as ' dot ' !!!\n        // const doc = new DOMParser().parseFromString(content, 'text/html');\n        // speechSynth.text = doc.body.innerText || content;\n\n        const text = chameleonText.current.innerText || '';\n        speechSynth.text = text;\n\n        speechSynth.voice = voice;\n        window.speechSynthesis.speak(speechSynth);\n      }\n\n      setCanPlay(canPlay => {\n        return !canPlay;\n      });\n    },\n    [canPlay, voice?.name]\n  );\n\n  useEffect(() => {\n    if (!textToSpeechBtn.current) {\n      return;\n    }\n\n    chameleonText.current = textToSpeechBtn.current.closest(\n      '[class*=\"chameleon-text\"]'\n    ) as HTMLElement;\n    const chameleonTextP = chameleonText.current?.querySelector(\n      'p, h1, h2, h3, h4, h5, h6, li'\n    );\n\n    if (chameleonTextP) {\n      const cssObj = window.getComputedStyle(chameleonTextP, null);\n      setColor(cssObj.color);\n    }\n  });\n\n  useEffect(() => {\n    if (!speechSynth) {\n      return;\n    }\n\n    const onStart = e => {\n      // console.log('speechSynth starts speeching...');\n    };\n    const onEnd = e => {\n      setCanPlay(true);\n    };\n\n    speechSynth.addEventListener('start', onStart);\n    speechSynth.addEventListener('end', onEnd);\n\n    return () => {\n      speechSynth.removeEventListener('start', onStart);\n      speechSynth.removeEventListener('end', onEnd);\n      speechSynthesisCancel();\n    };\n  }, []);\n\n  useEffect(() => {\n    const pS = pubSub.subscribe('SECTION_IN_VIEW', () => {\n      setCanPlay(true);\n    });\n\n    return pS;\n  }, []);\n\n  return (\n    <div\n      key={`text-to-speech-${color}-${canPlay.toString()}`}\n      ref={textToSpeechBtn}\n      css={css({\n        border: 'none',\n        outline: 'none',\n        width: 24,\n        height: 24,\n        margin: '5px 0 0 0',\n        borderRadius: '50%',\n        background: 'transparent',\n        fontSize: 7,\n        cursor: 'pointer',\n\n        transition: 'all 0.2s',\n\n        ':hover': {\n          opacity: 0.8,\n        },\n\n        ':focus-visible': {\n          boxShadow: `0 0 0 3px ${color}`,\n        },\n\n        zIndex: 99999,\n      })}\n      onClick={onClick}\n      onKeyDown={e => {\n        if ([' ', 'Enter'].includes(e.key)) {\n          onClick(e);\n\n          requestAnimationFrame(() => {\n            textToSpeechBtn.current?.focus();\n          });\n        }\n      }}\n      role=\"button\"\n      tabIndex={0}\n      aria-label=\"Click here to have this passage of text read aloud. Click again to stop narration\"\n    >\n      <PlayBtn play={canPlay} color={color} />\n    </div>\n  );\n};\n","export const speechSynthesisCancel = () => {\n  if ('speechSynthesis' in window) {\n    window.speechSynthesis.cancel();\n  }\n};\n","// const isiOS = () => {\n//   return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window['MSStream'];\n// }\n\nconst isiOS = () => {\n  return (\n    [\n      'iPad Simulator',\n      'iPhone Simulator',\n      'iPod Simulator',\n      'iPad',\n      'iPhone',\n      'iPod',\n    ].includes(navigator.platform) ||\n    // iPad on iOS 13 detection\n    (navigator.userAgent.includes('Mac') && 'ontouchend' in document)\n  );\n};\n\nexport default isiOS;\n","import { findBlocksIn } from 'selectors/block';\nimport getStore from 'services/getStore';\n\nconst store = getStore();\n\nconst getActiveBlocks = () => {\n  const { blocks, rootBlockId } = store.getState();\n  return findBlocksIn(blocks, blocks[rootBlockId], () => true);\n};\n\nexport default getActiveBlocks;\n","import getStore from 'services/getStore';\nimport getActiveBlocks from 'services/apiHelpers/getActiveBlocks';\n\nconst getAllScoringInteractions = () => {\n  let blocks;\n\n  try {\n    blocks = getActiveBlocks();\n  } catch (err) {\n    blocks = getStore().getState().blocks;\n  }\n\n  return (\n    Object.values(blocks as any)\n      // Object.values(getActiveBlocks() as any)\n      // Object.values(getStore().getState().blocks as any)\n      .filter((b: any) => b?.props.score && b?.props.score === true)\n      .map((b: any) => b.id)\n  );\n\n  // console.log(getallScoringInteractions());\n};\n\nlet score: {\n  [key: string]: number;\n} = {};\n\nlet dummyScore;\n\nconst setScore = (id, _scoreValue) => {\n  const scoreValue = _scoreValue ? 1 : 0;\n  score[id] = scoreValue;\n};\n\nconst rehydrateScore = savedScore => {\n  // Object.keys(savedScore).forEach(entry => {\n  //   setScore(entry, savedScore[entry]);\n  // });\n\n  score = {\n    ...score,\n    ...savedScore,\n  };\n};\n\nconst getScore = (id?: number) => (id ? score[id] : score);\n\nconst getScoreRaw = () => {\n  const us = Object.values(\n    (getStore().getState().userBehaviour?.score as any) || {}\n  );\n  const scoreRaw = (us as any).reduce((acc, curr) => acc + curr, 0) || 0;\n\n  return scoreRaw;\n};\n\nconst getScorePercent = () =>\n  (getScoreRaw() / getAllScoringInteractions().length) * 100 || 0;\n\nconst getDummyScore = () => {\n  const parsedDummyScore = getScorePercent() || dummyScore;\n  if (parsedDummyScore) {\n    return Number(parsedDummyScore).toFixed();\n  }\n\n  return (dummyScore = (Math.random() * 100).toFixed());\n};\n\nexport {\n  setScore,\n  rehydrateScore,\n  getScore,\n  getScoreRaw,\n  getScorePercent,\n  getAllScoringInteractions,\n  getDummyScore,\n};\n","import React, {\n  useState,\n  useRef,\n  useEffect,\n  useLayoutEffect,\n  Fragment as _,\n} from 'react';\nimport { Block, Blocks } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport { findBlocksIn } from 'selectors/block';\nimport { State } from 'store/store';\nimport { createSelector } from 'reselect';\nimport { getAllScoringInteractions } from 'services/scoring';\n\nexport const getScoreDataFromScoringBlocks = state => {\n  const { blocks } = state;\n  /**\n   * activeBlockSelector finds blocks that are accessible from the root block\n   */\n  const activeBlockSelector = (blocks: Blocks, rootId: string): Block[] => {\n    return findBlocksIn(blocks, blocks[rootId], (i: any) => i);\n  };\n\n  /**\n   * scoringBlocks finds all the blocks that are scorable and have it turned on\n   */\n  const scoringBlocks = (blocks: Block[]): string[] => {\n    return blocks\n      .filter((b: any) => {\n        return b?.props?.score && b.props.score === true;\n      })\n      .map((b: any) => b.id);\n  };\n\n  /**\n   * This selector pulls out all the active blocks from the store\n   */\n  const loadActiveBlocks = createSelector(\n    [(state: State) => state.blocks, (state: State) => state.rootBlockId!],\n    activeBlockSelector\n  );\n\n  const loadScoringBlocks = createSelector(loadActiveBlocks, scoringBlocks);\n\n  const getModuleBlock = createSelector(\n    // (state: State) => state.blocks,\n    () => blocks,\n    (blocks: Blocks) => Object.values(blocks).find(b => b.type === 'Module')\n  );\n\n  const moduleBlock = (Object.values(blocks as Block[]).find(\n    (b: Block) => b.type === 'Module'\n  ) || {}) as Block;\n  let mbProps = { passMark: 80 };\n\n  if (moduleBlock) {\n    mbProps = moduleBlock.props as { passMark: number };\n  }\n\n  const scoreData = state.userBehaviour.score;\n  const passMark = mbProps.passMark;\n\n  const scoringInteractions = loadScoringBlocks(state);\n  const numberOfScorableInteractions = scoringInteractions.length;\n\n  const allScoringInteractions = getAllScoringInteractions();\n\n  const getScoreDataFromScoringInteractions = scoreData => {\n    if (!scoreData) {\n      return {};\n    }\n\n    return allScoringInteractions.reduce((acc, curr) => {\n      return {\n        ...acc,\n        ...(scoreData?.[curr] && {\n          [curr]: !!scoreData[curr] ? 1 : 0,\n        }),\n      };\n    }, {});\n  };\n\n  const scoreDataFromScoringInteractions = getScoreDataFromScoringInteractions(\n    scoreData\n  );\n\n  const scoreRaw = Object.values(\n    // scoringByTopic ? topicScoreData : scoreData\n    scoreDataFromScoringInteractions\n  ).reduce<number>((acc, curr) => acc + Number(curr), 0);\n\n  const scorePercent =\n    ((scoreRaw || 0) / numberOfScorableInteractions) * 100 || 0;\n\n  const hasScoringInteractions = !!allScoringInteractions?.length;\n  // !!getAllScoringInteractions().length;\n\n  const passed = hasScoringInteractions\n    ? scorePercent >= Number(passMark)\n    : true;\n\n  const score = hasScoringInteractions ? scorePercent.toFixed() : 100;\n\n  return {\n    score,\n    passed,\n  };\n};\n","/** @jsx jsx */\n\nimport { useRef, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { Text } from '@chameleoncreator/creator-ui';\nimport 'services/ie11closestPolyfill';\nimport bulletStyles from './bulletStyles';\nimport { TextToSpeech } from './TextToSpeech';\nimport { useSelector } from 'react-redux';\nimport { State } from 'store/store';\nimport { getScoreDataFromScoringBlocks } from 'services/getScoreDataFromScoringBlocks';\nimport { getSCORMInitialized } from 'components/lib/Scorm/SCORM';\n\nconst ReadOnlyText = ({\n  id,\n  content,\n  className,\n  // useBackgroundControls,\n  borderRadius,\n  // backgroundColor,\n  background,\n  bulletColor,\n  liTextColor,\n  linkColors,\n  enableTextToSpeechBtn,\n  ...props\n}) => {\n  const textToSpeech = useSelector((state: State) => state.theme.textToSpeech);\n  //\n  const moduleVariables = useSelector((state: State) => state.moduleVariables);\n\n  const blocks = useSelector((state: State) => state.blocks);\n  const rootBlockId = useSelector((state: State) => state.rootBlockId);\n  const userBehaviour = useSelector((state: State) => state.userBehaviour);\n\n  const readOnlyText = useRef(null);\n  const fontInfo = useRef<{ fontSize: number; lineHeight: number } | undefined>(\n    undefined\n  );\n\n  let padding;\n\n  if (background) {\n    padding = `${12.5 + borderRadius}px ${10 + borderRadius}px`;\n  }\n\n  if (!!borderRadius) {\n    padding = borderRadius * 3;\n  }\n\n  useEffect(() => {\n    if (!readOnlyText.current) {\n      return;\n    }\n\n    const varElems = Array.from(\n      (readOnlyText.current as HTMLDivElement).querySelectorAll(\n        '[data-type=\"variable\"]'\n      )\n    );\n\n    if (!varElems?.length) {\n      return;\n    }\n\n    varElems.forEach(vE => {\n      const varName = vE.getAttribute('data-varname');\n      const { childNodes } = vE;\n\n      if (!varName) {\n        return;\n      }\n\n      if (varName === 'DATE') {\n        vE.textContent = Date()\n          .toString()\n          .split(/ /g)\n          .slice(0, 4)\n          .join(' ');\n        return;\n      }\n\n      if (varName === 'SCORE') {\n        const score =\n          getScoreDataFromScoringBlocks({\n            blocks,\n            rootBlockId,\n            userBehaviour,\n          })?.score || 0;\n\n        console.log(`SCORE: ${score}%`);\n\n        vE.textContent = `${score}%`;\n        return;\n      }\n\n      // if (\n      //   new URLSearchParams(new URL(window.location.href).search).get(\n      //     'testModuleVariables'\n      //   ) === '1'\n      // ) {\n      //   vE.textContent = `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.`;\n      //   return;\n      // }\n\n      if (childNodes?.length) {\n        childNodes[childNodes.length - 1].textContent =\n          moduleVariables[varName];\n        return;\n      }\n\n      vE.textContent = moduleVariables[varName];\n    });\n  });\n\n  useEffect(() => {\n    if (!readOnlyText.current) {\n      return;\n    }\n\n    const span = (readOnlyText.current as HTMLDivElement).querySelector(\n      '[data-type=\"fontSize\"]'\n    ) as HTMLSpanElement;\n\n    if (span) {\n      fontInfo.current = {\n        fontSize: Number(span.style.fontSize.replace(/[^\\d.-]+/g, '')),\n        lineHeight: Number(span.style.lineHeight.replace(/[^\\d.-]+/g, '')),\n      };\n    }\n\n    const links: HTMLAnchorElement[] = Array.from(\n      (readOnlyText.current as HTMLDivElement).querySelectorAll('a')\n    );\n\n    links.forEach(link => {\n      //\n      if (link?.href.includes('mailto:') && getSCORMInitialized()) {\n        link.target = '_blank';\n      }\n    });\n    //\n  }, []);\n\n  return (\n    <Text\n      ref={readOnlyText}\n      className={`chameleon-text${className ? ` ${className}` : ''}`}\n      as=\"div\"\n      css={css`\n        a:link {\n          color: ${linkColors.link} !important;\n        }\n\n        a:visited {\n          color: ${linkColors.visited} !important;\n        }\n\n        a:hover {\n          color: ${linkColors.hover} !important;\n        }\n\n        a:focus-visible {\n          color: ${linkColors.focus} !important;\n\n          outline-offset: 2px !important;\n          outline: 1px solid ${linkColors.focus} !important;\n          text-decoration: none !important;\n        }\n\n        a:active {\n          color: ${linkColors.active} !important;\n        }\n\n        span[data-type='variable'] {\n          white-space: pre-wrap !important;\n        }\n\n        ${bulletStyles(bulletColor, liTextColor)}\n\n        ${fontInfo.current &&\n          !props.certificate &&\n          `\n        @media(max-width: ${360 / window.devicePixelRatio}px) {\n          span {\n            font-size: ${fontInfo.current?.fontSize * 1.6}vw !important;\n            line-height: ${fontInfo.current?.lineHeight / 8}vw !important;      \n          }\n        }\n        `}\n      `}\n      style={\n        background\n          ? {\n              borderRadius,\n              background,\n              padding: `${12.5 + borderRadius}px ${10 + borderRadius}px`,\n            }\n          : {}\n      }\n    >\n      <div\n        dangerouslySetInnerHTML={{\n          __html: content,\n        }}\n      />\n\n      {'speechSynthesis' in window &&\n        textToSpeech &&\n        enableTextToSpeechBtn &&\n        content && (\n          <TextToSpeech id={`text-to-speech-${id}`} content={content} />\n        )}\n    </Text>\n  );\n};\n\nexport default ReadOnlyText;\n","/** @jsx jsx */\n\nimport React, {\n  useState,\n  useRef,\n  useEffect,\n  useLayoutEffect,\n  Fragment as _,\n} from 'react';\nimport { Editor } from 'slate-react';\nimport { Value } from 'slate';\nimport { css, jsx } from '@emotion/core';\nimport { css as css_ } from 'emotion';\nimport EditMarker from 'components/UI/EditMarker';\nimport { connect } from 'react-redux';\nimport renderMark from './renderMark';\nimport renderNode from './renderNode';\nimport renderInline from './renderInline';\nimport html from './serializer';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport setBlock from 'services/apiHelpers/setBlockProps';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport { Text } from '@chameleoncreator/creator-ui';\nimport getStore from 'services/getStore';\nimport { isKeyHotkey } from 'is-hotkey';\nimport ReadOnlyText from './ReadOnlyText';\nimport bulletStyles from './bulletStyles';\nimport { TextToSpeech } from './TextToSpeech';\n//\nimport { State } from 'store/store';\nimport { useSelector } from 'react-redux';\nimport hexToRgb from 'services/hexToRGB';\n\nconst store = getStore();\n\nconst isBoldHotkey = isKeyHotkey('mod+b');\nconst isItalicHotkey = isKeyHotkey('mod+i');\nconst isUnderlinedHotkey = isKeyHotkey('mod+u');\n\nexport const placeholderText = 'Add content...';\n\nlet delayUpdate;\n\nlet CHAMELEON_COPIED_TEXT: string | undefined;\n\nconst schema = {\n  marks: {\n    variable: {\n      isVoid: true,\n    },\n  },\n};\n\nconst EditableText = ({ focusedNodeId, ...props }) => {\n  const { id, className } = props;\n  const block = getBlockById(id) as any;\n  const {\n    content = '',\n    json,\n    borderRadius = 0,\n    useBackgroundControls,\n    backgroundColor,\n    textBackgroundOpacity = 100,\n    bulletColor = undefined,\n    //'#000',\n    liTextColor = undefined,\n    //'#000',\n    enableSecondaryLinkColors,\n    enableCustomLinkColors,\n    customLinkColors = {},\n  } = block?.props;\n\n  const placeholderText = props.placeholder || 'Add content...';\n\n  let enableTextToSpeechBtn = block?.props?.enableTextToSpeechBtn;\n  if (enableTextToSpeechBtn === undefined) {\n    enableTextToSpeechBtn = true;\n  }\n\n  let background;\n  if (backgroundColor) {\n    const { r, g, b } = hexToRgb(backgroundColor);\n    background = `rgba(${r}, ${g}, ${b}, ${textBackgroundOpacity * 0.01}`;\n  }\n\n  const textToSpeech = useSelector((state: State) => state.theme.textToSpeech);\n\n  const linkColors = useSelector((state: State) => {\n    return {\n      ...state.theme.links,\n      // ...block.props.linkColors,\n      ...(enableSecondaryLinkColors && {\n        ...state.theme.linksSecondary,\n      }),\n      ...(enableCustomLinkColors && {\n        // ...state.theme.linksSecondary,\n        ...customLinkColors,\n      }),\n    };\n  });\n\n  const { link, visited, hover, focus, active } = linkColors;\n\n  const paragraphSpacing = store.getState().theme.paragraphSpacing || 16;\n\n  const [state, setState] = useState({\n    value: html.deserialize(content),\n  });\n\n  const text = useRef<HTMLElement>(null);\n  const editor = useRef<any>(null);\n  const clearedFormatting = useRef<boolean>(false);\n  const selected = focusedNodeId === id;\n\n  if (window.dev() && selected)\n    window['__CURRENT_EDITOR_CLEAR_ALL_FORMATTING__'] = (content, id) => {\n      setBlock(getBlockById(id), {\n        content,\n      });\n\n      setState({\n        value: html.deserialize(content),\n      });\n    };\n\n  useEffect(() => {\n    addEventListener('copy', onCopy);\n\n    function onCopy(e) {\n      let copied = (e.clipboardData || (window as any).clipboardData).getData(\n        'text/plain'\n      );\n\n      CHAMELEON_COPIED_TEXT = `CHAMELEON_COPIED_TEXT=${copied}`;\n    }\n\n    return () => {\n      removeEventListener('copy', onCopy);\n    };\n  }, []);\n\n  useEffect(() => {\n    if (!selected) return;\n\n    parent.editor = editor.current;\n  }, [selected]);\n\n  useEffect(() => {\n    if (content) {\n      // console.log('has content');\n      clearedFormatting.current = false;\n    }\n  }, [content]);\n\n  useEffect(() => {\n    if (!text.current) {\n      return;\n    }\n\n    // remove all classes being links\n    text.current.classList.forEach(className => {\n      if (className.match('-links')) {\n        text.current?.classList.remove(className);\n      }\n    });\n\n    const links = css_(`\n    // a {\n    //   transition: all 0.1s;\n    // }\n\n    a:link {\n      color: ${link} !important;\n    }\n\n    a:visited {\n      color: ${visited} !important;\n    }\n\n    a:hover {\n      color: ${hover} !important;\n    }\n\n    a:focus-visible {\n      color: ${focus} !important;\n\n      outline-offset: 2px !important;\n      outline: 1px solid ${focus} !important;\n      text-decoration: none !important;\n    }\n\n    a:active {\n      color: ${active} !important;\n    }\n`);\n\n    text.current.classList.add(links);\n  }, [selected, link, visited, hover, focus, active]);\n\n  useLayoutEffect(() => {\n    //\n    if (!text.current) {\n      return;\n    }\n\n    //\n    const innerText = text.current.innerText\n      .toString()\n      .replace(/\\s\\s+/g, ' ')\n      .trim();\n\n    const hasPlaceholder = innerText === placeholderText;\n\n    text.current.style.textAlign = '';\n\n    if (hasPlaceholder) {\n      requestAnimationFrame(() => {\n        if (text.current) {\n          text.current.style.textAlign = 'left';\n        }\n      });\n    }\n  });\n\n  const onChange = ({ value }) => {\n    if (value.document !== state.value.document) {\n      clearTimeout(delayUpdate);\n      delayUpdate = setTimeout(() => {\n        setBlock(getBlockById(id), {\n          content: html.serialize(value),\n        });\n      }, 500);\n    }\n\n    setState({ value });\n  };\n\n  const onKeyDown = (e, editor, next) => {\n    let mark;\n\n    if (isBoldHotkey(e)) {\n      mark = 'bold';\n    } else if (isItalicHotkey(e)) {\n      mark = 'italic';\n    } else if (isUnderlinedHotkey(e)) {\n      mark = 'underline';\n    } else {\n      return next();\n    }\n\n    e.preventDefault();\n    editor.toggleMark(mark);\n  };\n\n  if (selected && editor.current) parent.editor = editor.current;\n\n  if (!window.dev()) {\n    return (\n      <ReadOnlyText\n        id={`chameleon-text-${id}`}\n        content={content}\n        {...{\n          className,\n          // useBackgroundControls,\n          borderRadius,\n          // backgroundColor,\n          background,\n          bulletColor,\n          liTextColor,\n          linkColors,\n          enableTextToSpeechBtn,\n          ...props,\n        }}\n      />\n    );\n  }\n\n  return (\n    <Text\n      ref={text}\n      id={`chameleon-text-${id}`}\n      className={`chameleon-text${className ? ` ${className}` : ''}`}\n      as=\"div\"\n      css={css`\n\t\t\tposition: relative;\n      width: 100%;\n\t\t\tpadding: 12.5px 10px;\n\t\t\t${!selected && 'background: rgba(161, 188, 211, 0.15);'}\n\t\t\tbox-shadow: ${selected ? '0 0 0 1px #ff0063' : 'none'};\n\t\t\n      transition: background 0.1s, box-shadow 0.2s;\n\n\t\t\t&:hover {\n\t\t\t\tcursor: text;\n\t\t\t\t${!selected && 'box-shadow: 0 0 0 1px lightGrey;'}\n\t\t\t\tbackground: transparent;\n      }\n\t\t\n\t\t\t* {\n        pointer-events: ${selected ? 'auto' : 'none'};\n      }\n\n      ${bulletStyles(bulletColor, liTextColor)}\n\n      [data-slate-editor] {\n        -webkit-user-modify: read-write !important;\n      }\n  \n      // p:has(span[data-slate-length=\"0\"]) {\n      //   position: absolute;\n      // }\n\n      // p:has(span[data-slate-length=\"0\"]) + p::before {\n      //   display: block;\n      //           content: '';\n      //           height: ${paragraphSpacing}px;       \n      // }\n\n  `}\n      // useBackgroundControls ||\n      style={\n        background\n          ? {\n              borderRadius,\n              // background: backgroundColor,\n              background,\n              padding: `${12.5 + borderRadius}px ${10 + borderRadius}px`,\n            }\n          : {}\n      }\n      onClick={e => {\n        e.stopPropagation();\n\n        if (selected) return;\n        setCurrentBlock({ id });\n        setTimeout(() => {\n          editor.current!.focus();\n        }, 10);\n      }}\n      fontFamily={store.getState().theme.fontFamily || ''}\n    >\n      <Editor\n        key={id}\n        id={id}\n        ref={editor}\n        value={state.value}\n        placeholder={placeholderText || 'Add content...'}\n        schema={schema}\n        readOnly={!window.dev()}\n        onChange={onChange}\n        onKeyDown={onKeyDown}\n        onPaste={(e, $, next) => {\n          let pasted = (\n            e.clipboardData || (window as any).clipboardData\n          ).getData('text/plain');\n\n          if (CHAMELEON_COPIED_TEXT === `CHAMELEON_COPIED_TEXT=${pasted}`) {\n            // console.log('pasting CHAMELEON_COPIED_TEXT');\n            return next();\n          }\n\n          // console.log('pasting >> NOT << CHAMELEON_COPIED_TEXT');\n          CHAMELEON_COPIED_TEXT = '';\n\n          // break it\n          const pastedToPs = pasted\n            .split(/(\\r\\n|\\n|\\r)/g)\n            .map(p => p.replace(/\\s\\s+/g, ' ').trim())\n            .filter(p => p !== '')\n            .map(p => `<p data-type=\"paragraph\">${p}</p>`)\n            .join('');\n\n          const { document } = html.deserialize(pastedToPs);\n          editor.current!.insertFragment(document);\n        }}\n        renderMark={renderMark}\n        // renderNode\n        renderBlock={renderNode}\n        renderInline={renderInline}\n      />\n\n      {'speechSynthesis' in window && textToSpeech && enableTextToSpeechBtn && (\n        <TextToSpeech id={id} content={content} {...props} />\n      )}\n\n      {selected && parent.updateEditor && parent.updateEditor(Math.random())}\n\n      {!selected && <EditMarker />}\n    </Text>\n  );\n};\n\nexport default connect(\n  ({ focusedNodeId }: { focusedNodeId: string | number }) => ({\n    focusedNodeId,\n    [Math.random()]: '',\n  })\n)(EditableText);\n","import EditableText from './EditableText';\n\nexport default EditableText;\n","interface IgetBaseButtonStyles {\n  color: string;\n  background: string;\n  buttonShape: string;\n  borderRadius: number | string;\n  fontFamily: string | undefined;\n  fontWeight?: number | string;\n  buttonOutline: boolean;\n  useLargeButton?: boolean;\n  hoverColor?: string;\n  buttonShadow: boolean;\n  type?: 'navigation' | 'generic' | undefined;\n}\n\ninterface IButtonType {\n  type?: 'navigation' | 'generic';\n}\n\nconst getBaseButtonStyles = ({\n  color = '#fff',\n  fontFamily,\n  fontWeight = 400,\n  background = '#060709',\n  buttonShape = 'pill',\n  borderRadius,\n  buttonOutline = false,\n  useLargeButton = false,\n  hoverColor,\n  buttonShadow = false,\n  type = undefined,\n}: IgetBaseButtonStyles) => {\n  //\n  let minWidth = useLargeButton ? 310 : 230;\n  let maxWidth = useLargeButton ? 310 : 230;\n\n  if (buttonShape === 'circle') {\n    minWidth = 80;\n    maxWidth = 180;\n  }\n\n  const buttonShape_ = {\n    pill: {\n      borderRadius: '9999px',\n    },\n    rectangle: {\n      borderRadius,\n    },\n    circle: {\n      // minWidth,\n      // maxWidth,\n      borderRadius: '50%',\n      padding: 20,\n      aspectRatio: '1 / 1',\n    },\n  }[buttonShape];\n\n  return {\n    outline: 'none',\n    border: `1px solid ${background}`,\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    minWidth,\n    maxWidth,\n\n    minHeight: useLargeButton ? '65px !important' : 45,\n    ...(type === 'navigation' && {\n      margin: 10,\n    }),\n\n    padding: '8px 32px',\n    cursor: 'pointer',\n    background,\n    ...buttonShape_,\n    fontSize: 14,\n    fontFamily: `${fontFamily || 'inherit'} !important`,\n    fontWeight: `${fontWeight} !important`,\n    color,\n    ...(buttonOutline && {\n      background: 'transparent',\n    }),\n    textAlign: 'center',\n\n    ...(buttonShadow && {\n      boxShadow: '0 0 12px 3px rgba(0, 0, 0, 0.09)',\n    }),\n\n    ':hover': {\n      ...(hoverColor\n        ? {\n            background: hoverColor,\n            border: `1px solid ${hoverColor || background}`,\n          }\n        : {\n            opacity: 0.8,\n          }),\n    },\n  };\n};\n\nexport { IgetBaseButtonStyles, getBaseButtonStyles };\n","import { useEffect } from 'react';\nimport isIE from 'services/isIE';\nimport { colors, getButtonFocus } from 'styles/variables';\n\nconst { lPink } = colors;\n\nexport type TOldButtonProps = {\n  buttonShadow: boolean;\n  buttonOutline: boolean;\n  buttonShape: string;\n  background: string;\n  buttonBackgroundOpacity: number;\n  buttonHover: string;\n  buttonHoverBackgroundOpacity: number;\n  color: string;\n  textHoverColor: string;\n  buttonOutlineColor: string;\n  id: string;\n  label: string;\n  location: string | undefined;\n  linkData: { [key: string]: string | number };\n  fontFamily: string;\n  fontSize: number;\n  bold: boolean;\n  uppercase: boolean;\n  useLargeButton: boolean;\n  borderRadius: number;\n  focusColor: string;\n};\n\nexport const oldButtonPropsToNewMap = {\n  buttonShadow: 'shadow',\n  buttonOutline: 'outline',\n  buttonShape: 'shape',\n  background: 'backgroundColor',\n  buttonBackgroundOpacity: 'backgroundOpacity',\n  buttonHover: 'backgroundColorOnHover',\n  buttonHoverBackgroundOpacity: 'backgroundOpacityOnHover',\n  color: 'textColor',\n  textHoverColor: 'textColorOnHover',\n  buttonOutlineColor: 'outlineColor',\n  //\n  id: 'id',\n  label: 'label',\n  location: 'location',\n  linkData: 'linkData',\n  fontFamily: 'fontFamily',\n  fontSize: 'fontSize',\n  bold: 'bold',\n  uppercase: 'uppercase',\n  useLargeButton: 'useLargeButton',\n  borderRadius: 'borderRadius',\n  focusColor: 'focusColor',\n};\n\nconst locals = [\n  'localBackgroundColor',\n  'localColor',\n  'localButtonOutline',\n  'localButtonShadow',\n  'localButtonHover',\n  'localBorderRadius',\n].map(entry => entry.toLowerCase());\n\nexport const updateButtonProps = (props, oldButtonPropsToNewMap) => {\n  const updatedBlockProps = Object.keys(props).reduce((acc, curr) => {\n    const newKey = oldButtonPropsToNewMap[curr];\n\n    const hasLocal =\n      curr.includes('local') && locals.includes(`local${curr.toLowerCase()}`);\n    // console.log(curr, `local${curr.toLowerCase()}`, props[curr], hasLocal);\n\n    const hasValue = ![undefined, '', null].includes(props[curr]);\n    //  && hasLocal;\n\n    return {\n      ...acc,\n      ...(newKey &&\n        hasValue && {\n          [newKey]: props[curr],\n        }),\n    };\n  }, {});\n\n  return updatedBlockProps;\n};\n\nconst getObjectsTruthyValues = (obj: {}): {} => {\n  const stripped = {};\n  for (const property in obj) {\n    if (obj[property]) {\n      stripped[property] = obj[property];\n    }\n  }\n\n  return stripped;\n};\n\nconst updateLinkColors = (color = '#fff', hoverColor = undefined) => {\n  return [\n    'link',\n    'visited',\n    // ...(hoverColor && ['hover'])\n  ].reduce((acc, curr) => {\n    return {\n      ...acc,\n      [`:${curr}`]: {\n        color: `${curr === 'hover' ? hoverColor : color} !important`,\n      },\n    };\n  }, {});\n};\n\nconst getFocusColorForCSSObject = (color: string) => {\n  return !window.dev()\n    ? getButtonFocus(color)\n        .split(':')[1]\n        .trim()\n        .replace(';', '')\n    : '';\n};\n\ninterface IParsePropsAndTheme {\n  props: {\n    color: string;\n    background: string;\n    fontFamily: string;\n    buttonShape: string;\n    buttonShadow: boolean;\n    buttonOutline: boolean;\n    hoverColor: string;\n    buttonHover?: string;\n    focusColor: string;\n  };\n  theme: {};\n}\n\nconst parseStylesFromPropsAndTheme = (props, theme) => {\n  // console.log(theme.buttonShape);\n  //\n  // ensure the button returns to standard size if turned off in settings\n  const useLargeButton =\n    props.useLargeButton !== undefined\n      ? props.useLargeButton\n      : theme.useLargeButton;\n  //\n\n  return {\n    background:\n      (props.localBackgroundColor && props.background) ||\n      theme.buttonBackgroundColor ||\n      props.buttonBackground ||\n      lPink,\n\n    color:\n      (props.localColor && props.color) ||\n      theme.buttonTextColor ||\n      props.buttonForeground ||\n      '#fff',\n\n    fontFamily: props.font || theme.fontFamily,\n    buttonShape: props.buttonShape || theme.buttonShape,\n    buttonOutline: props.localButtonOutline\n      ? props.buttonOutline\n      : theme.buttonOutline,\n    buttonShadow: props.localButtonShadow\n      ? props.buttonShadow\n      : theme.buttonShadow,\n    hoverColor: props.localButtonHover\n      ? props.hoverColor || props.buttonHover\n      : theme.hoverColor || theme.buttonHover,\n    focusColor: getFocusColorForCSSObject(\n      props.focusColor || props.background || theme.buttonBackgroundColor\n    ),\n\n    // useLargeButton: props.useLargeButton || theme.useLargeButton,\n    useLargeButton,\n    //\n    borderRadius: props.localBorderRadius\n      ? props.borderRadius\n      : theme.buttonBorderRadius,\n  } as any;\n};\n\nconst updateButtonHeightForIE = (\n  buttonRef: HTMLElement | null,\n  buttonShape: string\n) => {\n  useEffect(() => {\n    if (!(isIE() && buttonRef)) {\n      return;\n    }\n\n    let goalHeight;\n\n    if (buttonShape === 'circle') {\n      goalHeight = buttonRef.offsetWidth;\n    }\n\n    const tick = setInterval(() => {\n      if (!buttonRef) {\n        return;\n      }\n\n      if (!goalHeight) {\n        goalHeight = buttonRef.scrollHeight;\n      }\n\n      if (goalHeight !== 0 && buttonRef.style.height === `${goalHeight}px`) {\n        clearInterval(tick);\n      }\n\n      buttonRef.style.height = `${goalHeight}px`;\n    }, 1000 / 12);\n\n    return () => {\n      clearInterval(tick);\n    };\n  }, [buttonRef, buttonShape]);\n};\n\nexport {\n  getObjectsTruthyValues,\n  updateLinkColors,\n  getFocusColorForCSSObject,\n  parseStylesFromPropsAndTheme,\n  updateButtonHeightForIE,\n};\n","import getTopics from 'services/apiHelpers/getTopics';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport { moduleNavigationActionsList } from 'components/NavigationSettings/ModuleNavigation';\n\nconst hasValidLocationUpdated = location => {\n  if (!location) {\n    return undefined;\n  }\n\n  if (\n    moduleNavigationActionsList.includes(location) ||\n    location.match('http')\n  ) {\n    return true;\n  }\n\n  //\n\n  //\n  let parsedLocation = location.replace(/#/, '').split('/');\n\n  const [topicSId, interactionSId] = parsedLocation;\n\n  const topics = getTopics();\n  const topic = topics.find((t: any) => {\n    const tSId = t.props.sId || t.id;\n    const found = tSId == topicSId;\n\n    return found;\n  });\n\n  if (!topic) {\n    return false;\n  }\n\n  const interactions = getInteractionsInTopic(topic);\n  const interaction = interactions.find((i: any) => {\n    const iSId = i.props.sId || i.id;\n    const found = iSId == interactionSId;\n\n    return found;\n  });\n\n  return interaction ? true : false;\n};\n\nexport default hasValidLocationUpdated;\n","/** @jsx jsx */\n\nimport { useContext, useRef } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { useSelector } from 'react-redux';\nimport EditMarker from 'components/UI/EditMarker';\nimport { colors } from 'styles/variables';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport { State } from 'store/store';\nimport { InteractionContext } from '../../Layouts/ContainerLogical';\nimport { ModuleContext } from 'components/Module/Module_v2';\nimport {\n  // IgetBaseButtonStyles,\n  getBaseButtonStyles,\n} from './getBaseButtonStyles';\nimport {\n  updateLinkColors,\n  // parseStylesFromPropsAndTheme,\n  updateButtonHeightForIE,\n} from './buttonHelpers';\nimport hasValidLocationUpdated from 'services/hasValidLocationUpdated';\nimport { moduleNavigationActionsList } from 'components/NavigationSettings/ModuleNavigation';\nimport hexToRgb from 'services/hexToRGB';\nimport { speechSynthesisCancel } from 'services/speechSynthesisCancel';\n// import { removeFalseyEntriesFromObject } from 'services/removeFalseyEntriesFromObject';\nimport { removeUndefinedEntriesFromObject } from 'services/removeUndefinedEntriesFromObject';\nimport { themeButtonDefault, TButton, TButtons } from 'store/store';\nimport {\n  // updateButtonProps,\n  // oldButtonPropsToNewMap,\n  getFocusColorForCSSObject,\n} from './buttonHelpers';\n\nconst { lPink } = colors;\n\nconst IsExternalLink = ({ color = '#fff' }) => {\n  return (\n    <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n      <path\n        d=\"M17 4.30213V13.6979C17 15.5021 15.533 17 13.6908 17H4.30917C2.50107 17 1 15.5362 1 13.6979V4.30213C1 2.49787 2.46695 1 4.30917 1H13.7249\"\n        style={{\n          stroke: color,\n          strokeWidth: 1.5,\n          strokeMiterlimit: 10,\n          strokeLinecap: 'round',\n          strokeLinejoin: 'round',\n        }}\n      />\n      <path\n        d=\"M11.8145 6.17447L6.18549 11.7915\"\n        style={{\n          stroke: color,\n          strokeWidth: 1.5,\n          strokeMiterlimit: 10,\n          strokeLinecap: 'round',\n          strokeLinejoin: 'round',\n        }}\n      />\n      <path\n        d=\"M6.76538 6.17447H11.8144V11.2128\"\n        style={{\n          stroke: color,\n          strokeWidth: 1.5,\n          strokeMiterlimit: 10,\n          strokeLinecap: 'round',\n          strokeLinejoin: 'round',\n        }}\n      />\n    </svg>\n  );\n};\n\nconst NavigationButton = props => {\n  //\n\n  const moduleContext = useContext(ModuleContext);\n\n  const interactionContext = useContext(InteractionContext) as any;\n\n  const focusedNodeId = useSelector((state: State) => state.focusedNodeId);\n\n  const theme = useSelector((state: State) => state.theme);\n  const themeButtons = theme?.buttons || {};\n  //\n\n  //\n  const cleanedBlockProps = removeUndefinedEntriesFromObject(props);\n\n  const interactionsLocked = useSelector(\n    (state: State) => state.interactionsLocked\n  );\n\n  let isLocked = interactionsLocked.includes(interactionContext.id) ? 1 : 0;\n\n  if (props.unlocked) {\n    isLocked = 0;\n  }\n\n  if (\n    window?.mode &&\n    window?.mode === 'PREVIEW' &&\n    theme.disableLockDownInPreview\n  ) {\n    isLocked = 0;\n  }\n\n  if (\n    !window.dev() &&\n    window.location.toString().match('localhost:') &&\n    theme.disableLockDownInPreview\n  ) {\n    isLocked = 0;\n  }\n\n  const { id, label, location } = props;\n\n  const buttonRef = useRef<HTMLAnchorElement>(null);\n\n  // might remove the defaults from here\n  // declare any defaults somewhere else\n\n  const linkData = {\n    ...props.linkData,\n    ...(location && {\n      url: location,\n      title: '',\n      target: location.match('http') ? '_blank' : '_self',\n    }),\n  };\n\n  //\n\n  const {\n    textColor,\n\n    backgroundColor,\n    fontFamily,\n    shape: buttonShape,\n    borderRadius,\n    shadow,\n    outline,\n    outlineColor,\n    backgroundColorOnHover,\n    textColorOnHover: _textColorOnHover_,\n    useLargeButton,\n    focusColor,\n    includeButtonBackground,\n    backgroundOpacity,\n    backgroundOpacityOnHover,\n    fontSize,\n    bold,\n    uppercase,\n  } = {\n    ...themeButtonDefault,\n    ...themeButtons.main,\n\n    ...cleanedBlockProps,\n  } as TButton;\n\n  const textColorOnHover = _textColorOnHover_ || textColor;\n\n  const baseButtonStyles = getBaseButtonStyles({\n    color: textColor,\n    background: backgroundColor,\n    fontFamily,\n    buttonShape,\n    borderRadius,\n    buttonShadow: shadow,\n    buttonOutline: outline,\n    hoverColor: backgroundColorOnHover,\n    useLargeButton,\n    type: 'navigation',\n  }) as any;\n\n  const _focusColor_ = getFocusColorForCSSObject(focusColor || backgroundColor);\n\n  const { r, g, b } = hexToRgb(backgroundColor);\n\n  let a = backgroundOpacity / 100;\n  let backgroundColorRGBA = `rgba(${r}, ${g}, ${b}, ${a})`;\n\n  const { r: hoverR, g: hoverG, b: hoverB } = hexToRgb(\n    backgroundColorOnHover || backgroundColor\n  );\n\n  let hoverA = (backgroundOpacityOnHover ?? 80) / 100;\n  let backgroundColorOnHoverRGBA = `rgba(${hoverR}, ${hoverG}, ${hoverB}, ${hoverA})`;\n\n  const { url, title, target } = linkData;\n\n  // error checking here against a potentially removed topic\n  let hasValidLocation =\n    moduleNavigationActionsList.includes(url) || hasValidLocationUpdated(url);\n\n  const selected = id === focusedNodeId;\n  const { exit, setComplete, setCompleteAndExit, resetModule } = moduleContext;\n\n  let urlEnabled = url;\n  if (!window.dev() && isLocked) {\n    urlEnabled = '';\n  }\n\n  const navigationButton = (\n    <a\n      ref={buttonRef}\n      id={`navigation-button-${id}`}\n      href={urlEnabled}\n      css={css({\n        position: 'relative',\n\n        ...baseButtonStyles,\n        fontSize,\n        ...(bold && {\n          fontWeight: 700,\n        }),\n        ...(uppercase && {\n          textTransform: 'uppercase',\n        }),\n\n        background: backgroundColorRGBA,\n\n        border: `1px solid ${\n          outline ? outlineColor || backgroundColor : 'transparent'\n        }`,\n\n        textDecoration: 'none',\n        ...updateLinkColors(textColor),\n\n        transition: 'all 0.15s',\n\n        ...(target === '_blank' && {\n          padding: '5px 40px',\n        }),\n\n        ...(textColorOnHover && {\n          ':link': {\n            color: textColor,\n          },\n\n          // kill any visited color so hover plays out\n          ':visited': {\n            color: '',\n          },\n\n          ':hover': {\n            color: `${textColorOnHover} !important`,\n            background: `${backgroundColorOnHoverRGBA} !important`,\n          },\n        }),\n\n        ...(!window.dev() && isLocked\n          ? {\n              // potentially want to be able to customize disabled color ?\n              pointerEvents: 'none',\n              opacity: 0.25,\n            }\n          : {\n              ':focus-visible': {\n                boxShadow: _focusColor_,\n              },\n            }),\n      })}\n      title={urlEnabled && (linkData.title || url)}\n      onKeyUp={e => {\n        if (e.keyCode === 32) {\n          e.currentTarget.click();\n        }\n      }}\n      onMouseOver={e => {\n        e.currentTarget.setAttribute('title', '');\n      }}\n      onMouseOut={e => {\n        e.currentTarget.setAttribute('title', linkData.title || url);\n      }}\n      onClick={e => {\n        e.preventDefault();\n\n        speechSynthesisCancel();\n\n        if (url === 'exit') {\n          exit();\n          return;\n        }\n\n        if (url === 'setComplete') {\n          setComplete();\n          return;\n        }\n\n        if (url === 'setCompleteAndExit') {\n          setCompleteAndExit();\n          return;\n        }\n\n        if (url === 'resetModule') {\n          resetModule();\n          return;\n        }\n\n        if (target === '_blank') {\n          window.open(url);\n          return;\n        }\n\n        if (e.currentTarget.getAttribute('href') === '') {\n          console.log(\n            'href has been intentionally been removed from this link. DO NOT NAVIGATE !!!'\n          );\n          return;\n        }\n\n        interactionContext.next(url);\n      }}\n      //\n\n      aria-disabled={urlEnabled === ''}\n    >\n      {label}\n\n      {buttonShape !== 'circle' && target === '_blank' && (\n        <div\n          css={css({\n            position: 'absolute',\n            display: 'flex',\n            alignItems: 'center',\n            right: 18,\n            top: 0,\n            height: '100%',\n          })}\n        >\n          <IsExternalLink color={textColor} />\n        </div>\n      )}\n    </a>\n  );\n\n  updateButtonHeightForIE(buttonRef.current, buttonShape);\n\n  return window.dev() ? (\n    <div\n      css={css({\n        position: 'relative',\n        width: 'auto !important',\n        margin: '2px 7px',\n\n        ':hover': {\n          a: {\n            background: backgroundColorOnHoverRGBA,\n            color: `${textColorOnHover} !important`,\n          },\n        },\n      })}\n    >\n      {navigationButton}\n\n      <div\n        css={css({\n          position: 'absolute',\n          left: -5,\n          top: -0,\n          width: 'calc(100% + 10px)',\n          height: 'calc(100% + 0px)',\n          boxShadow: selected\n            ? `0 0 0 1px ${lPink}`\n            : `0 0 0 1px ${hasValidLocation ? 'lightGrey' : 'yellow'}`,\n          transition: 'all 0.15s',\n          cursor: 'pointer',\n\n          ':hover': {\n            boxShadow: `0 0 0 1px ${lPink}`,\n          },\n        })}\n        onClick={e => {\n          if (selected) {\n            return;\n          }\n\n          setCurrentBlock({ id });\n        }}\n      >\n        {!selected && <EditMarker />}\n      </div>\n    </div>\n  ) : (\n    navigationButton\n  );\n};\n\nexport { NavigationButton };\n","/** @jsx jsx */\n\nimport {\n  // useContext,\n  useRef,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { useSelector } from 'react-redux';\nimport EditMarker from 'components/UI/EditMarker';\nimport { colors } from 'styles/variables';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport { State } from 'store/store';\n// import { InteractionContext } from '../../Layouts/ContainerLogical';\nimport { getBaseButtonStyles } from './getBaseButtonStyles';\nimport {\n  // parseStylesFromPropsAndTheme,\n  getFocusColorForCSSObject,\n  updateButtonHeightForIE,\n} from './buttonHelpers';\nimport hexToRgb from 'services/hexToRGB';\nimport { speechSynthesisCancel } from 'services/speechSynthesisCancel';\n// import { removeFalseyEntriesFromObject } from 'services/removeFalseyEntriesFromObject';\nimport { removeUndefinedEntriesFromObject } from 'services/removeUndefinedEntriesFromObject';\nimport { themeButtonDefault, TButton, TButtons } from 'store/store';\n// import {\n//   updateButtonProps,\n//   oldButtonPropsToNewMap,\n//   TOldButtonProps,\n// } from './buttonHelpers';\n\nconst { lPink } = colors;\n\nconst GenericButton = props => {\n  //\n  // const interactionContext = useContext(InteractionContext) as any;\n\n  const { focusedNodeId, theme } = useSelector((state: State) => {\n    const { focusedNodeId, theme } = state;\n    return {\n      focusedNodeId,\n      theme,\n    };\n  });\n\n  const themeButtons = theme.buttons;\n\n  const cleanedBlockProps = removeUndefinedEntriesFromObject(props);\n\n  const { id, label, enabled = undefined, onClick } = props;\n\n  const buttonRef = useRef<HTMLButtonElement>(null);\n\n  const {\n    textColor,\n    backgroundColor,\n    fontFamily,\n    shape,\n    borderRadius,\n    shadow,\n    outline,\n    outlineColor,\n    backgroundColorOnHover,\n    textColorOnHover,\n    useLargeButton,\n    focusColor,\n    // includeButtonBackground,\n    backgroundOpacity,\n    backgroundOpacityOnHover,\n    fontSize,\n    bold,\n    uppercase,\n  } = {\n    ...themeButtonDefault,\n    ...themeButtons.main,\n    ...cleanedBlockProps,\n  } as TButton;\n\n  const selected = id === focusedNodeId;\n  const disabled = enabled !== undefined ? !enabled : false;\n\n  let buttonShape = shape;\n\n  const baseButtonStyles = getBaseButtonStyles({\n    color: textColor,\n    background: backgroundColor,\n    fontFamily,\n    buttonShape,\n    borderRadius,\n    buttonShadow: shadow,\n    buttonOutline: outline,\n    hoverColor: backgroundColorOnHover,\n    useLargeButton,\n  }) as any;\n\n  const _focusColor_ = getFocusColorForCSSObject(focusColor || backgroundColor);\n\n  const { r, g, b } = hexToRgb(backgroundColor);\n\n  let a = backgroundOpacity / 100;\n  let backgroundColorRGBA = `rgba(${r}, ${g}, ${b}, ${a})`;\n\n  const { r: hoverR, g: hoverG, b: hoverB } = hexToRgb(\n    backgroundColorOnHover || backgroundColor\n  );\n\n  let hoverA = (backgroundOpacityOnHover ?? 80) / 100;\n\n  let backgroundColorOnHoverRGBA = `rgba(${hoverR}, ${hoverG}, ${hoverB}, ${hoverA})`;\n\n  const genericButton = (\n    <button\n      ref={buttonRef}\n      id={`generic-button-${id}`}\n      css={css({\n        ...baseButtonStyles,\n        fontSize,\n        ...(bold && {\n          fontWeight: 700,\n        }),\n        ...(uppercase && {\n          textTransform: 'uppercase',\n        }),\n\n        background: backgroundColorRGBA,\n\n        border: `1px solid ${\n          outline ? outlineColor || backgroundColor : 'transparent'\n        }`,\n\n        transition: 'all 0.15s',\n\n        ':hover': {\n          color: `${textColorOnHover} !important`,\n          background: backgroundColorOnHoverRGBA,\n        },\n\n        ...(!window.dev() && disabled\n          ? {\n              // potentially want to be able to customize disabled color ?\n              pointerEvents: 'none',\n              opacity: 0.25,\n            }\n          : {\n              ':focus-visible': {\n                boxShadow: _focusColor_,\n              },\n            }),\n      })}\n      disabled={disabled}\n      onClick={() => {\n        speechSynthesisCancel();\n        onClick && onClick();\n      }}\n    >\n      {label}\n    </button>\n  );\n\n  updateButtonHeightForIE(buttonRef.current, buttonShape);\n\n  return window.dev() ? (\n    <div\n      css={css({\n        position: 'relative',\n        display: 'inline-flex',\n\n        ':hover': {\n          button: {\n            background: backgroundColorOnHoverRGBA,\n\n            color: `${textColorOnHover} !important`,\n          },\n        },\n      })}\n    >\n      {genericButton}\n\n      <div\n        css={css({\n          position: 'absolute',\n          left: -15,\n          top: -10,\n          width: 'calc(100% + 30px)',\n          height: 'calc(100% + 20px)',\n          boxShadow: selected ? `0 0 0 1px ${lPink}` : '0 0 0 1px lightGrey',\n          transition: 'all 0.15s',\n          cursor: 'pointer',\n\n          ':hover': {\n            boxShadow: `0 0 0 1px ${lPink}`,\n          },\n        })}\n        onClick={e => {\n          if (selected) {\n            return;\n          }\n\n          setCurrentBlock({ id });\n        }}\n      >\n        {!selected && <EditMarker />}\n      </div>\n    </div>\n  ) : (\n    genericButton\n  );\n};\n\nexport { GenericButton };\n","import EditableBtn from './EditableBtn';\nimport { GenericButton } from 'components/lib/Buttons';\n\nexport default GenericButton;\n//EditableBtn;\n","/** @jsx jsx */\r\n\r\nimport React, { Fragment as _ } from 'react';\r\nimport { keyframes } from 'emotion';\r\nimport { css, jsx } from '@emotion/core';\r\nimport EditMarker from 'components/UI/EditMarker';\r\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\r\nimport { colors } from 'styles/variables';\r\nimport Image from 'assets/Image.svg';\r\n\r\nconst { lPink } = colors;\r\n\r\nconst frameSelected = keyframes`\r\n  from {\r\n    width: 50%;\r\n    height: 50%;\r\n  }\r\n  to {\r\n    width: 75%;\r\n    height: 75%;\r\n  }\r\n`;\r\n\r\nconst frameNotSelected = keyframes`\r\nfrom {\r\n  width: 75%;\r\n  height: 75%;\r\n}\r\nto {\r\n  width: 50%;\r\n  height: 50%;\r\n}\r\n`;\r\n\r\nconst EditWrapper0 = ({\r\n  id,\r\n  mediaParentId,\r\n  padding = 0,\r\n  selected,\r\n  children,\r\n}) => {\r\n  return (\r\n    <div\r\n      css={css`\r\n        position: relative;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        width: 100%;\r\n        height: 100%;\r\n        padding: ${padding}px;\r\n        box-shadow: ${selected ? `0 0 0 1px ${lPink}` : '0 0 0 1px lightGrey'};\r\n        transition: box-shadow 0.2s;\r\n        cursor: pointer;\r\n\r\n        &:hover {\r\n          ${!selected && `box-shadow: 0 0 0 1px ${lPink};`}\r\n        }\r\n\r\n        * {\r\n          pointer-events: ${selected ? 'auto' : 'none'};\r\n        }\r\n\r\n        @media (max-width: 768px) {\r\n          padding: 5px;\r\n        }\r\n      `}\r\n      onClick={e => {\r\n        e.stopPropagation();\r\n\r\n        if (selected) {\r\n          return;\r\n        }\r\n\r\n        setCurrentBlock({ id });\r\n      }}\r\n    >\r\n      {children}\r\n\r\n      {!selected && <EditMarker />}\r\n    </div>\r\n  );\r\n};\r\n\r\nconst EditWrapper1 = ({\r\n  id,\r\n  mediaParentId,\r\n  editWrapperSize = '50%',\r\n  editWrapperUseIcon = true,\r\n  selected,\r\n  children,\r\n}) => {\r\n  // return children;\r\n\r\n  return (\r\n    <div\r\n      css={css`\r\n        // position: absolute;\r\n        position: relative;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        left: 0px;\r\n        top: 0px;\r\n        width: 100%;\r\n        height: 100%;\r\n      `}\r\n    >\r\n      {children}\r\n      <div\r\n        css={css`\r\n          position: absolute;\r\n          display: flex;\r\n          justify-content: center;\r\n          align-items: center;\r\n          left: 0px;\r\n          top: 0px;\r\n          width: 100%;\r\n          height: 100%;\r\n        `}\r\n      >\r\n        <div\r\n          css={css`\r\n          position: relative;\r\n          display: flex;\r\n          justify-content: center;\r\n          align-items: center;\r\n          width: ${selected ? '75%' : editWrapperSize};\r\n          height: ${selected ? '75%' : editWrapperSize};\r\n\r\n          ${selected && `animation: ${frameSelected} 0.2s forwards;`}\r\n        \r\n          ${!selected &&\r\n            `\r\n          background: rgba(0, 0, 0, 0.1);\r\n        `}\r\n          \r\n          box-shadow: ${\r\n            selected ? `0 0 0 1px ${lPink}` : '0 0 0 1px lightGrey'\r\n          };\r\n\r\n          transition: all 0.2s;\r\n\r\n          cursor: pointer;\r\n          &:hover {\r\n            ${!selected && `box-shadow: 0 0 0 1px ${lPink};`}\r\n          }\r\n        `}\r\n          onClick={e => {\r\n            e.stopPropagation();\r\n\r\n            if (selected) {\r\n              return;\r\n            }\r\n\r\n            setCurrentBlock({ id });\r\n          }}\r\n        >\r\n          {!selected && editWrapperUseIcon && (\r\n            <img src={Image} style={{ width: 50, opacity: 0.5 }} />\r\n          )}\r\n\r\n          {!selected && <EditMarker />}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nconst EditWrapper2 = ({ id, mediaParentId, selected, children }) => {\r\n  return (\r\n    <div\r\n      css={css`\r\n        position: absolute;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        left: 0px;\r\n        top: 0px;\r\n        width: 100%;\r\n        height: 100%;\r\n      `}\r\n    >\r\n      {children}\r\n      <div\r\n        css={css`\r\n          position: absolute;\r\n          display: flex;\r\n          justify-content: center;\r\n          align-items: center;\r\n          left: 0px;\r\n          top: 0px;\r\n          width: 100%;\r\n          height: 100%;\r\n        `}\r\n      >\r\n        <div\r\n          css={css`\r\n            position: relative;\r\n            display: flex;\r\n            justify-content: center;\r\n            align-items: center;\r\n            width: 80%;\r\n            height: 80%;\r\n\r\n            box-shadow: ${selected\r\n              ? `0 0 0 1px ${lPink}`\r\n              : '0 0 0 1px lightGrey'};\r\n            transition: all 0.2s;\r\n            cursor: pointer;\r\n            &:hover {\r\n              ${!selected && `box-shadow: 0 0 0 1px ${lPink};`}\r\n            }\r\n          `}\r\n          onClick={e => {\r\n            e.stopPropagation();\r\n            if (selected) {\r\n              return;\r\n            }\r\n            setCurrentBlock({ id });\r\n          }}\r\n        >\r\n          {!selected && <EditMarker />}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nconst EditWrapper3 = ({\r\n  id,\r\n  mediaParentId,\r\n  padding = 0,\r\n  editWrapperPadding = 0,\r\n  selected,\r\n  children,\r\n}) => {\r\n  return (\r\n    <div\r\n      css={css`\r\n        position: relative;\r\n        width: 100%;\r\n        height: 100%;\r\n      `}\r\n    >\r\n      {children}\r\n\r\n      <div\r\n        css={css({\r\n          position: 'absolute',\r\n          left: editWrapperPadding,\r\n          top: editWrapperPadding,\r\n          width: `calc(100% - ${editWrapperPadding * 2}px)`,\r\n          height: `calc(100% - ${editWrapperPadding * 2}px)`,\r\n          boxShadow: selected ? `0 0 0 1px ${lPink}` : '0 0 0 1px lightGrey',\r\n          transition: 'box-shadow 0.2s',\r\n          cursor: 'pointer',\r\n\r\n          ...(!selected && {\r\n            '&:hover': {\r\n              boxShadow: `0 0 0 1px ${lPink}`,\r\n            },\r\n          }),\r\n        })}\r\n        onClick={e => {\r\n          e.stopPropagation();\r\n\r\n          if (selected) {\r\n            return;\r\n          }\r\n\r\n          setCurrentBlock({ id });\r\n        }}\r\n      >\r\n        {!selected && <EditMarker />}\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport { EditWrapper0, EditWrapper1, EditWrapper2, EditWrapper3 };\r\n","/** @jsx jsx */\n\nimport { css as _css, keyframes } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport { useSelector } from 'react-redux';\nimport { State } from 'store/store';\n\n// const lineWeight = 5;\n\nconst dualRingAnimation = keyframes`\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n`;\n\nconst dualRing = (size, color, lineWeight) => _css`\n  {\n    display: inline-block;\n    width: ${size}px;\n    height: ${size}px;\n    animation: 1.2s linear infinite;\n  }\n  &:after {\n    content: \"\";\n    display: block;\n    width: ${size - lineWeight * 2}px;\n    height: ${size - lineWeight * 2}px;\n    border-radius: 50%;\n    border: ${lineWeight}px solid ${color};\n    border-color: ${color} transparent ${color} transparent;\n    animation: ${dualRingAnimation} 1.2s linear infinite;\n  }\n`;\n\ninterface ILoadingSpinnerProps {\n  size?: number;\n  color?: string | undefined;\n  lineWeight?: number;\n}\n\nconst LoadingSpinner = ({\n  size = 46,\n  color,\n  lineWeight = 5,\n}: ILoadingSpinnerProps) => {\n  const loadingSpinnerColor = useSelector((state: State) => {\n    return state.theme.loadingSpinnerColor || '#cea5f9';\n  });\n\n  return (\n    <div\n      css={css`\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        width: 100%;\n        height: 100%;\n      `}\n    >\n      <div\n        className={dualRing(\n          size,\n          color ? color : loadingSpinnerColor,\n          lineWeight\n        )}\n      />\n    </div>\n  );\n};\n\nexport default LoadingSpinner;\n","import LoadingSpinner from './LoadingSpinner';\n\nexport default LoadingSpinner;\n","const srcIsGif = src => {\n  return /\\.(gif)$/i.test(src);\n};\n\nconst checkImgSrcIsGif = src => {\n  // const updatedSrc = srcIsGif(src) ? `${src}?a=${Math.random()}` : src;\n\n  const updatedSrc = /\\.(gif)$/i.test(src) ? `${src}?a=${Math.random()}` : src;\n  return updatedSrc;\n};\n\nexport default checkImgSrcIsGif;\nexport { srcIsGif };\n","import React, { useState, useRef, useEffect } from 'react';\n\nconst useImgLoader = src => {\n  let [loadedState, setLoadedState] = useState(0);\n\n  const mounted = useRef(true);\n\n  useEffect(() => () => { mounted.current = false }, []);\n\n  useEffect(() => {\n    setLoadedState(0);\n\n    if (!src) {\n      return;\n    }\n\n    const img = new window['Image']();\n    img.src = src;\n\n    let loaded = false;\n\n    img.onload = () => {\n      loaded = true;\n      mounted.current && setLoadedState(2);\n    };\n\n    img.onerror = (e) => {\n      window.console.log(e)\n      window.console.log(\"error loading image\")\n    }\n\n    setTimeout(() => {\n      if (loaded) return;\n      mounted.current && setLoadedState(1);\n    }, 300);\n  }, [src]);\n\n  return loadedState;\n};\n\nexport default useImgLoader;\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useRef,\n  useLayoutEffect,\n  useEffect,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { values, colors } from 'styles/variables';\nimport useImageLoader from 'hooks/useImageLoader';\nimport LoadingSpinner from 'components/UI/LoadingSpinner';\nimport { Box } from 'theme-ui';\nimport { useSelector } from 'react-redux';\nimport { State } from 'store/store';\n\nconst { headerHeight } = values;\nconst { lPink, lGrey4 } = colors;\n\nconst Circle = ({\n  id,\n  src,\n  fit = 'cover',\n  cachedSrc,\n  children,\n}: {\n  id: string | number;\n  src: string;\n  fit?: string;\n  cachedSrc?: any;\n  children?: any;\n}) => {\n  const imgLoadedState = useImageLoader(src);\n  //\n\n  return imgLoadedState === 1 ? (\n    <LoadingSpinner />\n  ) : (\n    <Box\n      sx={{\n        display: 'flex',\n        justifyContent: 'center',\n        alignItems: 'center',\n        width: '100%',\n        height: '100%',\n      }}\n    >\n      <Box\n        sx={{\n          width: '100%',\n          height: '100%',\n          maxWidth: '50vh',\n          maxHeight: '50vh',\n        }}\n      >\n        <Box\n          sx={{\n            position: 'relative',\n            width: '100%',\n            paddingTop: '100%',\n            background: `url('${src}') no-repeat, ${lGrey4}`,\n            backgroundPosition: 'center',\n            backgroundSize: fit,\n            borderRadius: '50%',\n            img: {\n              position: 'absolute',\n              left: 0,\n              top: 0,\n              width: 0,\n              height: 0,\n              opacity: 0,\n            },\n          }}\n        >\n          {children}\n        </Box>\n      </Box>\n    </Box>\n  );\n};\n\nconst cachedCircleSize = {};\n\ninterface ICircleCalculatedProps {\n  id: string;\n  src?: string;\n  cachedSrc?: any;\n  fit?: string;\n  alt: string;\n  linkData?: {\n    url: string;\n    title: string;\n    target: string;\n  };\n}\n\nconst CircleCalculated = (props: ICircleCalculatedProps) => {\n  let { id, alt, linkData } = props;\n\n  const { src, fit = 'cover' } = useSelector((state: State) => {\n    return state.blocks[id].props!;\n  });\n\n  const imgLoadedState = useImageLoader(src);\n  //\n\n  const init = useRef<boolean>(false);\n  const container = useRef<HTMLDivElement>(null);\n  const circle = useRef<HTMLDivElement | HTMLAnchorElement>(null);\n  const img = useRef<HTMLImageElement>(null);\n  const hyperLink = useRef<HTMLAnchorElement>(null);\n\n  const pageBackgroundColor = useRef<string>('#fff');\n  const aHiliteColor = useRef<string>('#060709');\n\n  useLayoutEffect(() => {\n    const tick = setInterval(() => {\n      if (container.current && circle.current && img.current) {\n        //\n        const parentNode = container.current.parentNode as HTMLDivElement;\n        const parentHeight = parentNode.offsetHeight;\n        const circleWidth = img.current.offsetWidth;\n        const circleHeight = img.current.offsetHeight;\n        const useParentHeight = parentHeight < circleWidth;\n\n        container.current.style.minHeight = `${circleHeight}px`;\n\n        cachedCircleSize[id] = `${\n          useParentHeight ? parentHeight : circleWidth\n        }px`;\n\n        circle.current.style.width = circle.current.style.height =\n          cachedCircleSize[id];\n\n        if (\n          !init.current &&\n          circle.current.style.height === cachedCircleSize[id]\n        ) {\n          setTimeout(() => {\n            if (circle.current) {\n              circle.current.style.opacity = '1';\n            }\n            init.current = true;\n          }, 1000 / 12);\n        }\n\n        //\n        if (hyperLink.current) {\n          hyperLink.current.style.width = hyperLink.current.style.height =\n            cachedCircleSize[id];\n        }\n      }\n    }, 1000 / 24);\n\n    return () => {\n      clearInterval(tick);\n    };\n  }, []);\n\n  useEffect(() => {\n    if (!container.current) {\n      return;\n    }\n\n    const section = container.current.closest('section') as HTMLElement;\n\n    if (!section) {\n      return;\n    }\n\n    pageBackgroundColor.current = window.getComputedStyle(\n      section\n    ).backgroundColor;\n\n    if (pageBackgroundColor.current === 'rgba(0, 0, 0, 0)') {\n      pageBackgroundColor.current = '#fff';\n    }\n\n    const button = section?.querySelector<HTMLButtonElement>(\n      '[data-as-exit-btn]'\n    );\n\n    if (button) {\n      // get find button background color\n      const buttonStyles = window.getComputedStyle(button);\n      aHiliteColor.current = buttonStyles.backgroundColor;\n    }\n  }, []);\n\n  return imgLoadedState === 1 ? (\n    <LoadingSpinner />\n  ) : (\n    <Box\n      ref={container}\n      sx={{\n        position: 'relative',\n        display: 'flex',\n        flexDirection: 'column',\n        justifyContent: 'center',\n        alignItems: 'center',\n        width: '100%',\n        height: '100%',\n\n        a: {\n          cursor: 'pointer',\n          transition: 'box-shadow 0.1s',\n          ...(window.dev &&\n            window.dev() && {\n              pointerEvents: 'none',\n            }),\n        },\n\n        'a:hover': {\n          boxShadow: `0 0 0 2px ${pageBackgroundColor.current ||\n            '#fff'}, 0 0 0 3px ${aHiliteColor.current} !important`,\n        },\n\n        'a:focus': {\n          boxShadow: `0 0 0 1px ${aHiliteColor.current}, 0 0 0 3px ${pageBackgroundColor.current}, 0 0 0 4px ${aHiliteColor.current} !important`,\n        },\n      }}\n    >\n      <img\n        ref={img}\n        src={src}\n        style={{\n          position: 'absolute',\n          width: '100%',\n          maxWidth: 'calc(50vh)',\n          opacity: 0,\n        }}\n        alt={alt}\n      />\n\n      <Box\n        ref={circle}\n        as={linkData && 'a'}\n        href={linkData && linkData.url}\n        title={linkData && linkData.title}\n        target={linkData && linkData.target}\n        tabIndex={linkData && 0}\n        sx={{\n          position: 'relative',\n\n          ...(cachedCircleSize[id] && {\n            width: cachedCircleSize[id],\n            height: cachedCircleSize[id],\n          }),\n\n          background: `url(\"${src}\") no-repeat`,\n          backgroundSize: fit,\n          backgroundPosition: 'center',\n          borderRadius: '50%',\n          opacity: cachedCircleSize[id] ? 1 : 0,\n        }}\n      ></Box>\n    </Box>\n  );\n};\n\nexport default CircleCalculated;\nexport { CircleCalculated };\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useRef,\n  useEffect,\n  useState,\n  useLayoutEffect,\n  useMemo,\n  createContext,\n  useContext,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { css, jsx } from '@emotion/core';\nimport closeFullscreen from 'assets/CloseFullscreenEmbed.svg';\nimport expand from 'assets/expand.svg';\nimport hexToRGB from 'services/hexToRGB';\n\nexport const ImageZoomContext = createContext({ overideStyles: {} });\n\nconst OPEN = 'open';\nconst CLOSE = 'close';\n\nconst ImageZoom = props => {\n  const {\n    src,\n    description,\n    noDescription,\n    imageZoomBackgroundColor,\n    imageZoomIconColor,\n  } = props;\n\n  const [zoom, setZoom] = useState<undefined | 'open' | 'close'>(undefined);\n  const { overideStyles } = useContext(ImageZoomContext);\n\n  const imageZoom = useRef<HTMLButtonElement>(null);\n\n  const { r, g, b } = hexToRGB(imageZoomIconColor);\n\n  const background = imageZoomIconColor\n    ? `rgba(${r}, ${g}, ${b}, 1)`\n    : 'rgba(0, 0, 0, 0.1)';\n\n  useEffect(() => {\n    if (zoom === undefined) {\n      return;\n    }\n\n    document.body.style.overflowY = zoom === OPEN ? 'hidden' : 'auto';\n\n    if (zoom === 'close') {\n      requestAnimationFrame(() => {\n        imageZoom?.current?.focus();\n        setZoom(undefined);\n      });\n    }\n  }, [zoom]);\n\n  if (window.dev()) {\n    // return null;\n  }\n\n  return (\n    <_>\n      <div\n        css={css({\n          position: 'absolute',\n          display: 'flex',\n          justifyContent: 'flex-end' || 'center',\n          alignItems: 'center',\n          bottom: '5px',\n          width: '100%',\n          height: 40,\n          padding: '0 5px',\n\n          //\n          ...overideStyles,\n          pointerEvents: 'none',\n        })}\n      >\n        <button\n          ref={imageZoom}\n          className=\"zoom-image\"\n          css={css({\n            all: 'unset',\n            position: 'absolute',\n            display: 'flex',\n            justifyContent: 'center',\n            alignItems: 'center',\n            width: 40,\n            height: 40,\n            borderRadius: '50%',\n            cursor: 'pointer',\n\n            background,\n\n            ':hover': {\n              opacity: 0.5,\n            },\n\n            pointerEvents: 'auto',\n\n            '*': {\n              pointerEvents: 'none',\n            },\n\n            ':focus': {\n              boxShadow: `0 0 0 1px ${'#000'}`,\n              // TODO potentially add some color from somewhere\n              // aHiliteColor.current\n            },\n\n            // color: '#000',\n          })}\n          onClick={e => {\n            e.stopPropagation();\n            setZoom(OPEN);\n          }}\n          aria-label=\"expand image\"\n          title={description}\n        >\n          <img\n            src={expand}\n            css={css({\n              position: 'relative',\n              // top: 1,\n              width: 15,\n              height: 15,\n            })}\n          />\n        </button>\n      </div>\n\n      {zoom &&\n        (createPortal(\n          <ImageZoomed\n            setZoom={setZoom}\n            src={src}\n            description={description}\n            noDescription={noDescription}\n            imageZoomBackgroundColor={imageZoomBackgroundColor}\n          />,\n          document.querySelector('#image-zoom-container') as HTMLDivElement\n        ) as React.ReactNode)}\n    </_>\n  );\n};\n\nconst ImageZoomed = props => {\n  const {\n    setZoom,\n    src,\n    description,\n    noDescription,\n    imageZoomBackgroundColor,\n  } = props;\n\n  const imageZoomed = useRef<HTMLDivElement>(null);\n  const closeBtn = useRef<HTMLButtonElement>(null);\n  useEffect(() => {\n    if (window.dev()) {\n      return;\n    }\n\n    if (!closeBtn.current) {\n      return;\n    }\n\n    // give focus when opened\n    closeBtn.current.focus();\n  }, []);\n\n  useEffect(() => {\n    if (window.dev()) {\n      return;\n    }\n\n    if (!imageZoomed.current) {\n      return;\n    }\n\n    const onKeyDown = e => {\n      switch (e.key) {\n        case 'Tab': {\n          // console.log('Tab captured in imageZoom', e.key);\n          e.preventDefault();\n          closeBtn?.current?.focus();\n          return;\n        }\n\n        case 'Escape': {\n          setZoom(CLOSE);\n        }\n      }\n    };\n\n    window.addEventListener('keydown', onKeyDown);\n\n    return () => {\n      window.removeEventListener('keydown', onKeyDown);\n    };\n  }, []);\n\n  return (\n    <div\n      ref={imageZoomed}\n      css={css({\n        all: 'unset',\n        position: 'fixed',\n        display: 'flex',\n        justifyContent: 'center',\n        alignItems: 'center',\n        left: 0,\n        top: 0,\n        width: '100vw',\n        height: '100vh',\n        background: 'rgba(0, 0, 0, 0.8)',\n        zIndex: 2147483647,\n      })}\n      onClick={e => {\n        e.stopPropagation();\n      }}\n    >\n      <div\n        className=\"fader_-5s\"\n        style={{\n          padding: 50,\n          borderRadius: 10,\n          background: imageZoomBackgroundColor,\n          maxWidth: '90%',\n          overflow: 'hidden',\n        }}\n      >\n        <img\n          src={src}\n          alt={description || noDescription}\n          style={{\n            maxHeight: '90vh',\n          }}\n        />\n      </div>\n\n      <button\n        ref={closeBtn}\n        css={css({\n          all: 'unset',\n          position: 'absolute',\n          display: 'flex',\n          justifyContent: 'center',\n          alignItems: 'center',\n          right: 20,\n          top: 20,\n          width: 40,\n          height: 40,\n          borderRadius: '50%',\n          backgroundColor: 'rgba(255, 255, 255, 0.2)',\n          cursor: 'pointer',\n\n          ':hover': {\n            backgroundColor: 'rgba(255, 255, 255, 0.05)',\n          },\n\n          ':focus': {\n            boxShadow: '0 0 0 1px #fff',\n          },\n\n          transition: 'box-shadow 0.2s',\n        })}\n        aria-label=\"close expanded image view\"\n        onClick={e => {\n          e.stopPropagation();\n          setZoom(CLOSE);\n        }}\n      >\n        <img src={closeFullscreen} />\n      </button>\n    </div>\n  );\n};\n\nexport { ImageZoom };\n","/** @jsx jsx */\r\n\r\nimport React, {\r\n  Fragment as _,\r\n  useRef,\r\n  useEffect,\r\n  useState,\r\n  useLayoutEffect,\r\n  memo,\r\n  useMemo,\r\n  createContext,\r\n  useContext,\r\n} from 'react';\r\nimport { css, jsx } from '@emotion/core';\r\nimport { useSelector } from 'react-redux';\r\nimport placeholder from 'assets/addImg@3x.svg';\r\nimport getBlockById from 'services/apiHelpers/getBlockById';\r\nimport {\r\n  EditWrapper0,\r\n  EditWrapper1,\r\n  EditWrapper2,\r\n  EditWrapper3,\r\n} from './EditWrappers';\r\nimport LoadingSpinner from 'components/UI/LoadingSpinner';\r\nimport checkImgSrcIsGif from 'services/checkImgSrcIsGif';\r\nimport Circle from './Circle';\r\nimport getStore from 'services/getStore';\r\nimport { ImageZoom } from './ImageZoom';\r\nimport { getCache } from 'services/imageCache';\r\n\r\nconst store = getStore();\r\nconst cachedSrcs = {};\r\n\r\nconst cachedSrc = (id, src = null) => {\r\n  if (src) {\r\n    cachedSrcs[id] = src;\r\n    return;\r\n  }\r\n  return cachedSrcs[id];\r\n};\r\n\r\nconst getCalculatedHeight = (\r\n  imageWidth,\r\n  imageHeight,\r\n  maxHeight = 50,\r\n  containerWidth\r\n) => {\r\n  const ratio = imageWidth / imageHeight;\r\n  const calculatedMaxHeight = window.innerHeight * (maxHeight / 100);\r\n  let calculatedHeight = containerWidth / ratio;\r\n\r\n  if (calculatedHeight > calculatedMaxHeight) {\r\n    calculatedHeight = calculatedMaxHeight;\r\n  }\r\n\r\n  return calculatedHeight;\r\n};\r\n\r\nexport const ImageContext = createContext<{\r\n  editWrapperType?: 0 | 1 | 2 | 3;\r\n  editWrapperSize?: string;\r\n  editWrapperUseIcon?: boolean;\r\n  placeholder?: string;\r\n  canUpdateContainerHeight?: boolean;\r\n  padding?: number;\r\n}>({});\r\n\r\nconst Image = props => {\r\n  const imageContext = useContext(ImageContext) as any;\r\n\r\n  let {\r\n    id,\r\n    mediaParentId = null,\r\n    editWrapperType = imageContext?.editWrapperType ??\r\n      props?.editWrapperType ??\r\n      0,\r\n    editWrapperSize = imageContext?.editWrapperSize ||\r\n      props?.editWrapperSize ||\r\n      '50%',\r\n    editWrapperUseIcon = imageContext?.editWrapperUseIcon ??\r\n      props?.editWrapperUseIcon ??\r\n      true,\r\n    padding = imageContext?.padding ?? props?.padding ?? 0,\r\n    usePlaceholderValue = false,\r\n    maxHeight = 50,\r\n\r\n    //\r\n    editWrapperPadding = 0,\r\n  } = props;\r\n\r\n  const block = getBlockById(id);\r\n\r\n  const focusedNodeId = useSelector((state: any) => state.focusedNodeId);\r\n\r\n  let {\r\n    src = imageContext.placeholder || props.placeholder || placeholder,\r\n    borderStyle = 'rectangle',\r\n    fit = 'contain',\r\n    fixedHeight = false,\r\n    fixedHeightValue = 350,\r\n    imgSize = 0,\r\n    defaultHeight = true,\r\n    imgContainerHeight = 0,\r\n    imgMagnification = 100,\r\n    description,\r\n    layout = '',\r\n    width = 800,\r\n    height = 600,\r\n    linkData,\r\n    imageZoom = false,\r\n    imageZoomIconColor,\r\n    imageZoomBackgroundColor = '#fff',\r\n\r\n    //\r\n  } = (block && block.props) || ({} as any);\r\n\r\n  const canUpdateContainerHeight =\r\n    imageContext.canUpdateContainerHeight ??\r\n    props.canUpdateContainerHeight ??\r\n    true;\r\n\r\n  const pageBackgroundColor = useRef<string>('#fff');\r\n  const aHiliteColor = useRef<string>('#060709');\r\n\r\n  src = useMemo(() => {\r\n    if (window.dev()) {\r\n      return src;\r\n    }\r\n\r\n    return checkImgSrcIsGif(src);\r\n  }, [src]);\r\n\r\n  let [imgLoadedState, setLoadedState] = useState(0);\r\n  let [realSrc, setRealSrc] = useState<string | undefined>(undefined);\r\n\r\n  useEffect(() => {\r\n    const cacheAvailable = 'caches' in self;\r\n\r\n    if (!cacheAvailable) {\r\n      setLoadedState(2);\r\n      return;\r\n    }\r\n\r\n    const cache = getCache();\r\n\r\n    cache.then(c => {\r\n      c.match(src)\r\n        .then(response => {\r\n          if (response) {\r\n            if (!response.ok) {\r\n              throw Error('invalid response');\r\n            }\r\n            // turn it into a usable src value\r\n            // console.log('response is in the cache');\r\n            return response.blob().then(blob => {\r\n              // console.log('response is now a blob');\r\n\r\n              const objectURL = URL.createObjectURL(blob);\r\n              setRealSrc(objectURL);\r\n              setLoadedState(2);\r\n            });\r\n          } else {\r\n            // put in the cache for the future\r\n            // console.log('not in cache');\r\n            return fetch(src)\r\n              .then(resp => {\r\n                if (!resp.ok) {\r\n                  throw Error('invalid response');\r\n                }\r\n\r\n                const r2 = resp.clone();\r\n                c.put(src, resp);\r\n                return r2;\r\n              })\r\n              .then(resp => resp.blob())\r\n              .then(blob => {\r\n                // throw new Error('forced error');\r\n                const objectURL = URL.createObjectURL(blob);\r\n                setRealSrc(objectURL);\r\n                setLoadedState(2);\r\n              });\r\n          }\r\n        })\r\n        .catch(e => {\r\n          console.log(e);\r\n          c.delete(src);\r\n          setLoadedState(2);\r\n        });\r\n    });\r\n\r\n    setTimeout(() => {\r\n      if (imgLoadedState !== 2) return;\r\n      setLoadedState(1);\r\n    }, 300);\r\n\r\n    return () => {\r\n      // console.log('ive been unmounted');\r\n    };\r\n  }, [src]);\r\n\r\n  const selected = focusedNodeId === id;\r\n\r\n  const image: any = useRef(null);\r\n  const hasResized = useRef(false);\r\n\r\n  const borderRadius = 50;\r\n\r\n  useLayoutEffect(() => {\r\n    if (!usePlaceholderValue || !image.current) {\r\n      return;\r\n    }\r\n\r\n    const targetHeight = getCalculatedHeight(\r\n      width,\r\n      height,\r\n      maxHeight,\r\n      image.current.getBoundingClientRect().width\r\n    );\r\n\r\n    image.current.style.height = `${targetHeight}px`;\r\n\r\n    const onResize = () => {\r\n      if (!hasResized.current) {\r\n        image.current.style.height = '';\r\n        //\r\n        window.removeEventListener('resize', onResize);\r\n        hasResized.current = true;\r\n      }\r\n    };\r\n\r\n    if (!hasResized.current && imgLoadedState === 2) {\r\n      onResize();\r\n      window.addEventListener('resize', onResize);\r\n    }\r\n\r\n    return () => {\r\n      window.removeEventListener('resize', onResize);\r\n    };\r\n  }, [imgLoadedState]);\r\n\r\n  useEffect(() => {\r\n    if (!image.current) {\r\n      return;\r\n    }\r\n\r\n    const section = image.current.closest('section') as HTMLElement;\r\n\r\n    if (!section) {\r\n      return;\r\n    }\r\n\r\n    pageBackgroundColor.current = window.getComputedStyle(\r\n      section\r\n    ).backgroundColor;\r\n\r\n    if (pageBackgroundColor.current === 'rgba(0, 0, 0, 0)') {\r\n      pageBackgroundColor.current = '#fff';\r\n    }\r\n\r\n    const button = section?.querySelector<HTMLButtonElement>(\r\n      '[data-as-exit-btn]'\r\n    );\r\n\r\n    if (button) {\r\n      // get find button background color\r\n      const buttonStyles = window.getComputedStyle(button);\r\n      aHiliteColor.current = buttonStyles.backgroundColor;\r\n    }\r\n  }, []);\r\n\r\n  if (realSrc) {\r\n    src = realSrc;\r\n  }\r\n\r\n  const EditWrapper = window.dev()\r\n    ? useMemo(\r\n        () => ({ children }) =>\r\n          ({\r\n            '0': (\r\n              <EditWrapper0\r\n                id={id}\r\n                mediaParentId={mediaParentId}\r\n                padding={padding}\r\n                selected={selected}\r\n              >\r\n                {children}\r\n              </EditWrapper0>\r\n            ),\r\n            '1': (\r\n              <EditWrapper1\r\n                id={id}\r\n                mediaParentId={mediaParentId}\r\n                editWrapperUseIcon={editWrapperUseIcon}\r\n                editWrapperSize={editWrapperSize}\r\n                selected={selected}\r\n              >\r\n                {children}\r\n              </EditWrapper1>\r\n            ),\r\n            '2': (\r\n              <EditWrapper2\r\n                id={id}\r\n                mediaParentId={mediaParentId}\r\n                selected={selected}\r\n              >\r\n                {children}\r\n              </EditWrapper2>\r\n            ),\r\n            '3': (\r\n              <EditWrapper3\r\n                id={id}\r\n                mediaParentId={mediaParentId}\r\n                padding={padding}\r\n                editWrapperPadding={editWrapperPadding}\r\n                selected={selected}\r\n              >\r\n                {children}\r\n              </EditWrapper3>\r\n            ),\r\n          }[editWrapperType]),\r\n        [selected]\r\n      )\r\n    : ({ children }) => <_>{children}</_>;\r\n\r\n  // parsed is not the correct term is it. but. . .\r\n  let parsedImgSize;\r\n\r\n  if (imgSize) {\r\n    parsedImgSize = window.innerHeight / 2 + imgSize;\r\n  }\r\n\r\n  if (props.fullHeight) {\r\n    parsedImgSize = window.innerHeight - 70 * 2;\r\n  }\r\n\r\n  const noDescription = '';\r\n\r\n  if (borderStyle === 'circle') {\r\n    return (\r\n      <EditWrapper key={src}>\r\n        <Circle\r\n          id={id}\r\n          src={src}\r\n          alt={description || noDescription}\r\n          fit={fit}\r\n          cachedSrc={cachedSrc}\r\n          linkData={linkData}\r\n        />\r\n      </EditWrapper>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <_>\r\n      <EditWrapper>\r\n        <div\r\n          ref={image}\r\n          id={`chameleon-image-${id}`}\r\n          className=\"chameleon-image\"\r\n          css={css`\r\n            position: relative;\r\n            width: 100%;\r\n\r\n            img:not(.zoom-image img) {\r\n              width: 100%;\r\n              max-height: ${50 + imgContainerHeight}vh;\r\n              //\r\n\r\n              ${imgContainerHeight >= 0\r\n                ? `padding: ${imgContainerHeight / 2}px 0;`\r\n                : `\r\n                  width: calc(100% - ${Math.abs(imgContainerHeight)}px);\r\n                  padding: 0;\r\n                  `}\r\n\r\n              opacity: 0;\r\n\r\n              @media (max-width: 768px) {\r\n                max-height: unset;\r\n              }\r\n            }\r\n\r\n            ${imgMagnification > 100 ? 'overflow: hidden;' : ''}\r\n\r\n            ${window.dev &&\r\n              !window.dev() &&\r\n              linkData &&\r\n              linkData.url &&\r\n              `\r\n          a {\r\n            display: block;\r\n            transition: box-shadow 0.1s;\r\n\r\n            ${borderStyle === 'roundedRectangle' &&\r\n              `border-radius: ${borderRadius}px;`}\r\n            \r\n            ${window.dev && window.dev() && 'pointer-events: none;'}\r\n          }\r\n\r\n          a:hover {\r\n            box-shadow: 0 0 0 2px ${pageBackgroundColor.current ||\r\n              '#fff'}, 0 0 0 3px ${aHiliteColor.current} !important;\r\n          }\r\n\r\n          a:focus {\r\n            box-shadow: 0 0 0 1px ${aHiliteColor.current}, 0 0 0 3px ${\r\n                pageBackgroundColor.current\r\n              }, 0 0 0 4px ${aHiliteColor.current} !important;\r\n          }\r\n        \r\n          `}\r\n          `}\r\n          data-can-update-container-height={canUpdateContainerHeight}\r\n        >\r\n          {imgLoadedState !== 2 ? (\r\n            <LoadingSpinner />\r\n          ) : (\r\n            <div\r\n              // id={id}\r\n              css={css`\r\n\t\t\t\t\t\twidth: 100%;\r\n          \r\n            \r\n            transform: scale(${imgMagnification * 0.01});\r\n\r\n\t\t\t\t\t\t${borderStyle === 'roundedRectangle' &&\r\n              fit === 'contain' &&\r\n              'min-height: auto;'}\r\n\t\t\t\t\t\t\tbackground: url('${src}') no-repeat;\r\n\t\t\t\t\t\t\tbackground-size: ${fit};\r\n\t\t\t\t\t\t\tbackground-position: center;\r\n            ${borderStyle === 'roundedRectangle' &&\r\n              `border-radius: ${borderRadius}px;`}\r\n\r\n\t\t\t\t\t`}\r\n            >\r\n              {linkData ? (\r\n                <a\r\n                  href={linkData.url}\r\n                  title={linkData.title}\r\n                  target={linkData.target}\r\n                >\r\n                  <img\r\n                    id={`img-${id}`}\r\n                    src={src}\r\n                    alt={description || noDescription}\r\n                    style={{ pointerEvents: 'none' }}\r\n                  />\r\n                </a>\r\n              ) : (\r\n                <img\r\n                  id={`img-${id}`}\r\n                  src={src}\r\n                  alt={description || noDescription}\r\n                />\r\n              )}\r\n            </div>\r\n          )}\r\n\r\n          {imageZoom && (\r\n            <ImageZoom\r\n              src={src}\r\n              description={description}\r\n              noDescription={noDescription}\r\n              imageZoomIconColor={imageZoomIconColor}\r\n              imageZoomBackgroundColor={imageZoomBackgroundColor}\r\n            />\r\n          )}\r\n        </div>\r\n      </EditWrapper>\r\n    </_>\r\n  );\r\n};\r\n\r\n// moved the focusedNodeId into the component > react-redux useSelector hook\r\n// this makes sure our component updates when src changed\r\nexport default props => {\r\n  return <Image key={props.src} {...props} />;\r\n};\r\n","import imagePlaceholder from 'assets/Wide Image 2.png';\nimport genericAdditionalPlaceholder from 'assets/genericAdditionalPlaceholder.png';\n\nexport const imgPlaceholders = {\n  0: imagePlaceholder,\n  1: genericAdditionalPlaceholder,\n};\n","import Image from './Image';\nimport { ImageContext } from './Image';\nimport { imgPlaceholders } from './imgPlaceholders';\nexport default Image;\nexport { ImageContext, imgPlaceholders };\n","/** @jsx jsx */\n\nimport { useState, useEffect, cloneElement } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport Modal from 'components/UI/Modal';\nimport { ThemeProvider } from 'emotion-theming';\nimport { theme } from 'theme';\nimport getStore from 'services/getStore';\nimport getTopics from 'services/apiHelpers/getTopics';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport setCurrentTopic from 'services/apiHelpers/setCurrentTopic';\nimport { getButtonFocus } from 'styles/variables';\nimport { clearLocationHistory } from 'services/clearLocationHistory';\nimport { useSelector } from 'react-redux';\nimport { State } from 'store/store';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport EditableText from 'components/lib/EditableText';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport Image from 'components/lib/Image';\nimport bookmark_graphic from 'assets/Character C.png';\nimport pubSub from 'services/pubSub';\nimport LoadingSpinner from 'components/UI/LoadingSpinner';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport setBlockProps from 'services/apiHelpers/setBlockProps';\n//\nimport isAndroidSamsung from 'services/isAndroidSamsung';\nimport isiOS from 'services/isiOS';\n//\nconst store = getStore();\nconst breakpoint = 540;\n\nconst Button = props => {\n  const { style, onClick, children } = props;\n\n  return (\n    <button\n      css={css({\n        display: 'flex',\n        justifyContent: 'center',\n        alignItems: 'center',\n        border: 'none',\n        outline: 'none',\n        width: 197,\n        height: 46,\n        margin: '20px 0 0 0',\n        padding: 20,\n        borderRadius: '9999px',\n        background: '#19D1CF',\n        fontSize: 14,\n        color: '#fff',\n        cursor: 'pointer',\n\n        transition: 'opacity 0.2s',\n\n        ':focus': {\n          boxShadow: getButtonFocus('#060709').replace('box-shadow: ', ''),\n        },\n\n        ':hover': {\n          opacity: 0.8,\n        },\n\n        ...style,\n      })}\n      onClick={onClick}\n    >\n      {children}\n    </button>\n  );\n};\n\nconst Bookmark = props => {\n  const { updateBookmarkState } = props;\n  const [bookmark, setBookmark] = useState<string | null>(\n    // (!window.dev() && 'true') ||\n    // 'true' || null\n    null\n  );\n\n  const [showLoadingBookmark, setShowLoadingBookmark] = useState<boolean>(\n    false\n  );\n\n  const {\n    textColor,\n    buttonBackgroundColor,\n    buttonTextColor,\n    fontFamily,\n  } = store.getState().theme;\n\n  const { bookmarkLocation, bookmarkLoaded } = useSelector((state: State) => {\n    return {\n      bookmarkLocation: state.bookmarkLocation,\n      bookmarkLoaded: state.bookmarkLoaded,\n    };\n  });\n\n  const bookmarkBlock = useSelector((state: State) => {\n    return Object.values(state.blocks).find(block => {\n      return block?.type === 'Bookmark';\n    });\n  });\n\n  let renderedBookmarkBlock;\n  if (bookmarkBlock) {\n    renderedBookmarkBlock = renderBlock(bookmarkBlock, {\n      Image,\n      Text: EditableText,\n      EditableButton: EditableBtn,\n    });\n  }\n\n  const [img, txt, noBtn, yesBtn] =\n    renderedBookmarkBlock?.props?.children || [];\n\n  const hasTextContent = txt?.props?.content ? 'true' : 'false';\n\n  const resetAriaAndOverflowY = () => {\n    const tick = setInterval(() => {\n      const root = document.querySelector('#root')!;\n\n      root.setAttribute('aria-hidden', 'false');\n      document.body.style.overflowY = 'auto';\n\n      if (document.body.style.overflowY === 'auto') {\n        clearInterval(tick);\n      }\n    }, 100);\n  };\n\n  useEffect(() => {\n    if (hasTextContent === 'false') {\n      requestAnimationFrame(() => {\n        setBlockProps(getBlockById(txt.props.id), {\n          content:\n            '<p data-type=\"paragraph\">Would you like to return to where you left off?</p>',\n        });\n      });\n    }\n  }, []);\n\n  useEffect(() => {\n    if (window.dev && window.dev()) {\n      return;\n    }\n\n    if (!bookmarkLocation || bookmarkLocation === 'null') {\n      return;\n    }\n\n    console.log('bookmark prevents body from scrolling');\n\n    const root = document.querySelector('#root')!;\n\n    const tick = setInterval(() => {\n      const ariaHidden = root.getAttribute('aria-hidden');\n\n      if (ariaHidden === 'false') {\n        root.setAttribute('aria-hidden', 'true');\n\n        // run the check for mobile device and don't hide the overflow\n        // why ? this is to prevent what SEEMS to be a very rare timing issue\n        // brought to attention with an etrainu module that is ONLY an assessment but with bookmarking\n        // tested with client and working to solve the problem. but would like to investigate more\n        //\n        // if (!(isAndroidSamsung || isiOS)) {\n        //   document.body.style.overflowY = 'hidden';\n        // }\n\n        document.body.style.overflowY = 'hidden';\n\n        clearInterval(tick);\n      }\n    }, 1000 / 60);\n\n    return () => {\n      clearInterval(tick);\n    };\n  }, [bookmarkLocation]);\n\n  useEffect(() => {\n    const location = bookmarkLocation;\n\n    if (!location || location === 'null') {\n      return;\n    }\n\n    // testing this as 1/1\n    // but need to calculate what the actual first topic / interaction is\n\n    const firstTopic: any = getTopics()[0];\n    const firstInteraction: any = getInteractionsInTopic(firstTopic)[0];\n\n    if (!firstTopic || !firstInteraction) {\n      return;\n    }\n\n    const firstTopicSId = firstTopic.props.sId || firstTopic.id;\n    const firstInteractionSId =\n      firstInteraction.props.sId || firstInteraction.id;\n\n    if (\n      location &&\n      location !== '' &&\n      location !== `${firstTopicSId}/${firstInteractionSId}`\n    ) {\n      //\n\n      setBookmark(location);\n    }\n  }, [bookmarkLoaded, bookmarkLocation]);\n\n  useEffect(() => {\n    // testing this out\n    if (!bookmark) {\n      updateBookmarkState(0);\n      return;\n    }\n\n    updateBookmarkState(1);\n  }, [bookmark]);\n\n  useEffect(() => {\n    if (!window.dev()) {\n      return;\n    }\n\n    const pS = pubSub.subscribe('SHOW_BOOKMARK', ({ showBookmark }) => {\n      setBookmark(showBookmark ? 'true' : null);\n    });\n\n    return () => {\n      pS();\n    };\n  }, []);\n\n  useEffect(() => {\n    if (!bookmark) {\n      return;\n    }\n\n    const pS = pubSub.subscribe('MODULE_NAVIGATION', ({ navToHash }) => {\n      // i'm ' turning this off ' for the moment to get a better idea\n      // of the blocking that happens when we attempt to show the loading spinner\n      // from this event\n      //\n      // if (navToHash === 'starts') {\n      //   setShowLoadingBookmark(true);\n      //   return;\n      // }\n\n      if (navToHash === 'ends') {\n        requestAnimationFrame(() => {\n          clearLocationHistory();\n          setBookmark(null);\n          setShowLoadingBookmark(false);\n          //\n          updateBookmarkState(2);\n\n          resetAriaAndOverflowY();\n        });\n      }\n    });\n\n    return () => {\n      pS();\n      //\n    };\n  }, [bookmark]); //\n\n  const noBtnOnClick = () => {\n    setCurrentTopic(getTopics()[0].id);\n    setBookmark(null);\n    setShowLoadingBookmark(false);\n    //\n    updateBookmarkState(2);\n\n    resetAriaAndOverflowY();\n  };\n\n  const yesBtnOnClick = () => {\n    if (bookmark) {\n      // this seems to work to display the spinner\n      //\n      setShowLoadingBookmark(true);\n\n      requestAnimationFrame(() => {\n        window.location.hash = bookmark;\n\n        // we do this to clear these values which are set when navigating\n        // nav to bookmark is its own special case where we do not want / need them\n        // and always want to nav to the logical prev section or topic\n        setTimeout(() => {\n          window.persistHistory = false;\n          window.locationHistory = null;\n        }, 800);\n      });\n    }\n  };\n\n  return !!bookmark ? (\n    <ThemeProvider theme={theme}>\n      <Modal\n        key={hasTextContent}\n        disableNullSpaceClick\n        useFader={window.dev() ? true : false}\n        onClose={() => {\n          setBookmark(null);\n          //\n          updateBookmarkState(2);\n\n          resetAriaAndOverflowY();\n        }}\n      >\n        <div\n          id=\"chameleon-bookmark\"\n          css={css({\n            display: 'flex',\n            flexDirection: 'column',\n            alignItems: 'center',\n            width: '100%',\n            maxWidth: '540px',\n            padding: '100px 0',\n            pointerEvents: showLoadingBookmark ? 'none' : 'auto',\n          })}\n        >\n          {img ? (\n            cloneElement(img, {\n              placeholder: bookmark_graphic,\n            })\n          ) : (\n            <img\n              src={bookmark_graphic}\n              css={css({\n                width: '100%',\n                maxWidth: 540,\n                margin: '0 0 30px 0',\n              })}\n            />\n          )}\n\n          <div\n            css={css({\n              width: '100%',\n              margin: '10px 0 0 0',\n              fontWeight: 400,\n              fontSize: 18,\n              textAlign: 'center',\n\n              [`@media (max-width: ${breakpoint}px)`]: {\n                padding: '0 20px',\n              },\n            })}\n          >\n            {txt ? (\n              txt\n            ) : (\n              <p\n                className=\"chameleon-text\"\n                css={css({\n                  fontWeight: 400,\n                  fontSize: 18,\n                  textAlign: 'center',\n                })}\n              >\n                Would you like to return to where you left off?\n              </p>\n            )}\n          </div>\n\n          <div\n            css={css({\n              display: 'flex',\n              justifyContent: 'center',\n              flexWrap: 'wrap',\n              margin: '30px 0',\n              button: {\n                minWidth: 197,\n                margin: '0 20px',\n                [`@media (max-width: ${breakpoint}px)`]: {\n                  ':first-child': {\n                    marginBottom: 20,\n                  },\n                },\n              },\n\n              'div [class*=\"GenericButton\"]': {\n                //\n\n                left: '10px',\n                top: '-10px',\n                width: 'calc(100% - 20px)',\n              },\n            })}\n          >\n            {noBtn ? (\n              cloneElement(noBtn, {\n                onClick() {\n                  noBtnOnClick();\n                },\n              })\n            ) : (\n              <Button\n                style={{\n                  background: '#fff',\n                  outline: '1px solid #060709',\n                  color: '#060709',\n                  opacity: showLoadingBookmark ? 0.3 : 1,\n                  transition: 'opacity 0.2s',\n                }}\n                onClick={() => {\n                  noBtnOnClick();\n                }}\n              >\n                No\n              </Button>\n            )}\n            {/*  */}\n            {yesBtn ? (\n              cloneElement(yesBtn, {\n                onClick() {\n                  yesBtnOnClick();\n                },\n              })\n            ) : (\n              <Button\n                style={{\n                  position: 'relative',\n                  color: '#fff',\n                  background: '#060709',\n                  fontFamily,\n                  boxShadow:\n                    '-16px -16px 27px rgba(255, 255, 255, 0.5), 16px 16px 27px rgba(37, 59, 176, 0.14393)',\n                }}\n                onClick={() => {\n                  yesBtnOnClick();\n                }}\n              >\n                Yes{' '}\n                <div\n                  style={{\n                    position: 'absolute',\n                    right: 10,\n                    top: 46 / 2 - 30 / 2,\n                  }}\n                >\n                  {showLoadingBookmark && <LoadingSpinner size={30} />}\n                </div>\n              </Button>\n            )}\n          </div>\n        </div>\n      </Modal>\n    </ThemeProvider>\n  ) : null;\n};\n\nexport default Bookmark;\n","const clearLocationHistory = () => {\n  const locationHistory = window.locationHistory;\n\n  const checkHistory = setInterval(() => {\n    if (locationHistory !== window.locationHistory) {\n      clearInterval(checkHistory);\n\n      requestAnimationFrame(\n        () =>\n          (window.location.hash = Math.random()\n            .toString(16)\n            .substr(2, 8))\n      );\n\n      (window as any).locationHistory = null;\n    }\n  }, 1000 / 60);\n};\n\nexport { clearLocationHistory };\n","import React, { useEffect } from 'react';\nimport { connect } from 'react-redux';\n\nexport const FontManager = connect((s: any) => {\n  return {\n    fonts: s.customFonts,\n  };\n})(({ fonts = [] }: any) => {\n  useEffect(() => {\n    if (!fonts.length) {\n      return;\n    }\n    //\n\n    if (window.FontFace) {\n      fonts.map(family => {\n        family.fonts.map(font => {\n          const ff = new window.FontFace(family.name, `url(${font.url})`, {\n            weight: font.weight,\n            style: font.style,\n          });\n          ff.load().then(() => {\n            document.fonts.add(ff);\n          });\n        });\n      });\n    }\n  }, [fonts]);\n\n  return null;\n});\n","/** @jsx jsx */\n\nimport { Fragment as _, useState } from 'react';\n\nimport { css, jsx } from '@emotion/core';\n\nimport { GettingStartedVideo } from './GettingStartedVideo';\nimport CC_Phone_Character from 'assets/CC_Phone Character.png';\nimport addInteractionDefault from 'assets/addInteractionDefault.svg';\nimport addInteractionHover from 'assets/addInteractionHover.svg';\nimport playVideoDefault from 'assets/playVideoDefault.svg';\nimport playVideoHover from 'assets/playVideoHover.svg';\nimport PlayDefault from 'assets/Play Default.svg';\nimport PlayHover from 'assets/Play Hover.svg';\nimport theGwillest from 'assets/the Gwillest.png';\nimport pubSub from 'services/pubSub';\nimport { useSelector } from 'react-redux';\nimport { State } from 'store/store';\nimport addInteractionBKG from 'assets/addInteractionBKG.svg';\nimport theresNothingHereYet from 'assets/theresNothingHereYet.png';\nimport watchAQuickHowToVideo from 'assets/watchAQuickHowToVideo.png';\n\nconst Hover = ({ children }) => {\n  const [hover, setHover] = useState(false);\n\n  return (\n    <div onMouseOver={() => setHover(true)} onMouseOut={() => setHover(false)}>\n      {children(hover)}\n    </div>\n  );\n};\n\nconst DashboardRow = props => {\n  const { color = '#000', background = '#fff', children } = props;\n\n  return (\n    <div\n      css={css({\n        display: 'flex',\n        flex: 1,\n        justifyContent: 'center',\n        width: '100%',\n        padding: 20,\n        borderRadius: 20,\n        margin: '10px 0',\n        color,\n        background,\n      })}\n    >\n      {children}\n    </div>\n  );\n};\n\nconst Templates = () => {\n  return (\n    <_>\n      <div style={{ margin: '20px 0', fontSize: 18, fontWeight: 500 }}>\n        Start with a template\n      </div>\n      <div style={{ fontSize: 12, fontWeight: 500 }}>\n        Click here to access library\n      </div>\n      <div>\n        <button\n          css={css({\n            all: 'unset',\n            width: 200,\n            height: 45,\n            margin: '25px 0',\n            background: '#19D1CF',\n            color: '#fff',\n            textAlign: 'center',\n            borderRadius: 9999,\n            cursor: 'pointer',\n            transition: 'opacity 0.2s',\n            ':hover': {\n              opacity: 0.8,\n            },\n          })}\n          onClick={() => {\n            pubSub.publish('SHOW_MODULE_TEMPLATES', {\n              showModuleTemplates: true,\n            });\n          }}\n        >\n          Templates\n        </button>\n      </div>\n    </_>\n  );\n};\n\nconst DashBoard = () => {\n  // const [gettingStarted, setGettingStarted] = useState<boolean>(false);\n\n  const paddingX = '10vw';\n  const paddingY = '108px';\n\n  return (\n    <div\n      css={css({\n        position: 'fixed',\n        display: 'flex',\n        flexDirection: 'column',\n        justifyContent: 'center',\n        alignItems: 'center',\n        left: 0,\n        top: 70,\n        width: '100vw',\n        height: 'calc(100vh - 70px)',\n        padding: `${paddingY} ${paddingX}`,\n      })}\n    >\n      <DashboardRow color={'#fff'} background={'#9338FF'}>\n        <div\n          css={css({\n            flex: 1,\n            height: `calc(100% + 50px)`,\n            background: `url('${CC_Phone_Character}') no-repeat`,\n            backgroundSize: 'contain',\n            backgroundPosition: 'center bottom',\n            transform: 'translate(50px, -50px)',\n          })}\n        />\n\n        <div\n          css={css({\n            display: 'flex',\n            flex: 1,\n            flexDirection: 'column',\n            justifyContent: 'center',\n            alignItems: 'center',\n            padding: '0 20px',\n          })}\n        >\n          <div>\n            <h1\n              style={{\n                fontSize: 24,\n                fontWeight: 500,\n                margin: '0 0 15px 0',\n                textAlign: 'center',\n              }}\n            >\n              Jump straight into it\n            </h1>\n            <h2\n              style={{\n                fontSize: 16,\n                fontWeight: 200,\n                textAlign: 'center',\n              }}\n            >\n              Start with an interaction\n            </h2>\n          </div>\n        </div>\n\n        <div\n          css={css({\n            display: 'flex',\n            flex: 1,\n            flexDirection: 'column',\n            justifyContent: 'center',\n            alignItems: 'center',\n            fontSize: 12,\n          })}\n        >\n          <Hover>\n            {hover => (\n              <img\n                src={hover ? addInteractionHover : addInteractionDefault}\n                style={{\n                  width: 60,\n                  margin: '0 0 15px 0',\n                  cursor: 'pointer',\n                  transition: 'all 0.2s',\n                  transform: `scale(${hover ? 1.1 : 1})`,\n                  transformOrigin: 'center',\n                }}\n                onClick={e => {\n                  parent.setNewSectionWizard &&\n                    parent.setNewSectionWizard(true);\n                }}\n              />\n            )}\n          </Hover>\n          <div>Add an interaction</div>\n        </div>\n      </DashboardRow>\n\n      <DashboardRow background={'#F5F6FB'}>\n        <div\n          css={css({\n            display: 'flex',\n            justifyContent: 'center',\n            alignItems: 'center',\n            position: 'relative',\n\n            flex: 1,\n          })}\n        >\n          <Hover>\n            {hover => (\n              <div\n                style={{\n                  display: 'flex',\n                  justifyContent: 'center',\n                  alignItems: 'center',\n                  position: 'relative',\n                }}\n              >\n                <div\n                  style={{\n                    position: 'relative',\n                  }}\n                >\n                  <img\n                    src={hover ? PlayHover : PlayDefault}\n                    css={css({\n                      width: 60,\n                      height: 60,\n                      cursor: 'pointer',\n                      transition: 'all 0.2s',\n                      transform: `scale(${hover ? 1.1 : 1})`,\n                      transformOrigin: 'center',\n                    })}\n                    onClick={e => {\n                      pubSub.publish('SHOW_GETTING_STARTED_VIDEO', {\n                        showGettingStartedVideo: true,\n                      });\n                    }}\n                  />\n\n                  <img\n                    src={theGwillest}\n                    style={{\n                      position: 'absolute',\n                      right: -15,\n                      top: -15,\n                      width: 30,\n                      height: 30,\n                      border: '2px solid #fff',\n                      borderRadius: '50%',\n                      pointerEvents: 'none',\n                    }}\n                  />\n                </div>\n              </div>\n            )}\n          </Hover>\n        </div>\n\n        <div\n          style={{\n            display: 'flex',\n            flex: 1,\n            flexDirection: 'column',\n            justifyContent: 'center',\n            alignItems: 'center',\n            position: 'relative',\n            color: '#000',\n            fontSize: 24,\n            fontWeight: 500,\n            textAlign: 'center',\n          }}\n        >\n          <div>Watch a quick</div>\n          <div>“how to” video</div>\n        </div>\n\n        <div\n          css={css({\n            flex: 1,\n            height: `calc(100% + 20px)`,\n            background: `url('${watchAQuickHowToVideo}') no-repeat`,\n            backgroundSize: 'contain',\n            backgroundPosition: 'center bottom',\n            transform: 'translate(-30px, -20px)',\n          })}\n        />\n      </DashboardRow>\n    </div>\n  );\n};\n\nconst EmptySection = () => {\n  const moduleHasInteractions = useSelector((state: State) => {\n    return Object.values(state.blocks)\n      .filter(b => {\n        return b?.meta?.subType === 'Interaction';\n      })\n      .some(i => {\n        return i?.children?.length;\n      });\n  });\n\n  if (window.dev() && !moduleHasInteractions) {\n    return <DashBoard />;\n  }\n\n  return (\n    <div\n      style={{\n        position: 'relative',\n        display: 'flex',\n        flexDirection: 'column',\n        justifyContent: 'center',\n        alignItems: 'center',\n        height: '100vh',\n      }}\n    >\n      {!window.dev() ? (\n        <_>\n          <div\n            style={{\n              width: '50%',\n              height: '50%',\n              background: `url('${theresNothingHereYet}') no-repeat`,\n              backgroundSize: 'contain',\n              backgroundPosition: 'center',\n            }}\n          />\n          <div\n            style={{\n              position: 'relative',\n              top: '30px',\n              textAlign: 'center',\n              color: '#0094ff',\n              fontWeight: 300,\n            }}\n          >\n            There are no interactions here yet\n          </div>\n        </_>\n      ) : (\n        <_>\n          <div\n            style={{\n              position: 'absolute',\n              width: '50%',\n              height: '50%',\n              background: `url('${addInteractionBKG}') no-repeat`,\n              backgroundSize: 'contain',\n              backgroundPosition: 'center',\n            }}\n          />\n          <button\n            style={{\n              all: 'unset',\n              position: 'relative',\n              width: 60,\n              height: 60,\n            }}\n            onClick={e => {\n              parent.setNewSectionWizard && parent.setNewSectionWizard(true);\n            }}\n          >\n            <AddInteractionBtn />\n          </button>\n          <div\n            style={{\n              position: 'relative',\n              top: '15px',\n              textAlign: 'center',\n              color: '000',\n              fontWeight: 500,\n            }}\n          >\n            Add an interaction.\n          </div>\n        </_>\n      )}\n    </div>\n  );\n};\n\nconst AddInteractionBtn = () => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"60\"\n      height=\"60\"\n      viewBox=\"0 0 60 60\"\n      css={css({\n        position: 'relative',\n        cursor: 'pointer',\n        fill: 'none',\n        ':hover': {\n          '.actual-btn': {\n            fill: '#00D9D3',\n          },\n        },\n      })}\n    >\n      <rect\n        className=\"actual-btn\"\n        width=\"60\"\n        height=\"60\"\n        rx=\"12\"\n        css={css({\n          fill: '#1D2026',\n          transition: 'fill 0.2s',\n        })}\n      />\n      <rect x=\"28\" y=\"18\" width=\"4\" height=\"24\" fill=\"white\" />\n      <rect\n        x=\"18\"\n        y=\"32\"\n        width=\"4\"\n        height=\"24\"\n        transform=\"rotate(-90 18 32)\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n};\n\nexport default EmptySection;\n","import EmptySection from './EmptySection';\n\nexport default EmptySection;\n","import React from 'react';\nimport styled from '@emotion/styled-base';\ninterface WrapParams {\n  width: number;\n  height: number;\n  weight: number;\n  delay: number;\n  rotate: number;\n}\n\nconst Wrapper = styled('div') <WrapParams>`\n  position: relative;\n  width: ${p => p.width + p.weight}px;\n  height: ${p => p.height + p.weight}px;\n  transform: rotate(${p => p.rotate}deg);\n  transform-origin: 50% 50%;\n  transition: transform 0.2s;\n  ${p => p.delay && `transition-delay: ${p => p.delay}s;`}\n`;\ninterface LineProps {\n  color: string;\n  weight: number;\n}\n\nconst Line = styled('polyline') <LineProps>`\n  fill: none;\n  stroke: ${p => p.color};\n  stroke-width: ${p => p.weight};\n  stroke-linejoin: miter;\n  stroke-miterlimit: 10;\n  transform: translateY(${p => p.weight / 4}px) scale(0.8);\n  transform-origin: 50% 50%;\n`;\n\nconst Arrow = ({\n  color = '#fff',\n  height = 16,\n  rotate = 0,\n  delay = 0,\n  weight = 2,\n  width = 8,\n  onClick = () => { },\n}) => {\n  return (\n    <Wrapper\n      height={height}\n      width={width}\n      rotate={rotate}\n      weight={weight}\n      delay={delay}\n    >\n      <svg width=\"100%\" height=\"100%\">\n        <Line\n          points={`0,0 ${width},${height / 2} 0,${height}`}\n          weight={weight}\n          color={color}\n        />\n      </svg>\n    </Wrapper>\n  );\n};\n\nexport default Arrow;\n","import getBlockById from 'services/apiHelpers/getBlockById';\nimport setBlockProps from 'services/apiHelpers/setBlockProps';\nimport { setInteractionsLockedData } from 'services/scorm/scormService';\nimport getStore from 'services/getStore';\n\nconst unlockInteraction = (id, length = 0) => {\n  // console.log('unlock interaction', id, length);\n\n  // return () => {};\n\n  if (window.dev()) {\n    return () => {};\n  }\n\n  const block = getBlockById(id);\n\n  //\n\n  if (!!!length) {\n    // resolve any truthy value\n    // was strict equality === 1\n    if (block.props!.lockDown) {\n      // setInteractionsLockedData(id);\n      // setBlockProps(block, { lockDown: 0 });\n\n      getStore().dispatch({\n        type: 'UPDATE_INTERACTIONS_LOCKED',\n        data: { id },\n      });\n    }\n\n    return () => {};\n  }\n\n  let itemsSeen = [] as any[];\n\n  return entry => {\n    // resolve any falsey value\n    // was strict equality === 0\n    if (!block.props!.lockDown) {\n      return;\n    }\n\n    itemsSeen = itemsSeen.includes(entry) ? itemsSeen : [...itemsSeen, entry];\n    itemsSeen.length === length &&\n      setTimeout(() => {\n        // setInteractionsLockedData(id);\n        // setBlockProps(block, { lockDown: 0 });\n\n        getStore().dispatch({\n          type: 'UPDATE_INTERACTIONS_LOCKED',\n          data: { id },\n        });\n      }, 100);\n\n    return itemsSeen;\n  };\n};\n\nexport default unlockInteraction;\nexport { unlockInteraction };\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","/** @jsx jsx */\n\nimport { Box, Flexbox, Row, Text } from '@chameleoncreator/creator-ui';\nimport { css, jsx } from '@emotion/core';\nimport Arrow from 'components/UI/Arrow';\nimport { keyframes } from 'emotion';\nimport { ThemeProvider } from 'emotion-theming';\nimport { motion } from 'framer-motion';\nimport React, {\n  cloneElement,\n  createContext,\n  useContext,\n  useEffect,\n  useLayoutEffect,\n  useRef,\n  useState,\n} from 'react';\nimport { useSelector } from 'react-redux';\nimport hexToRgb, { getHexToRgbWithDefaultFallback } from 'services/hexToRGB';\nimport isAndroidSamsung from 'services/isAndroidSamsung';\nimport isAppleComputerInc from 'services/isAppleComputerInc';\nimport unlockInteraction from 'services/unlockInteraction';\nimport updateReadOnlyText from 'services/updateReadOnlyText';\nimport { State } from 'store/store';\nimport { interactionContext as InteractionContext } from './interactionContext';\n\nconst fader = keyframes`\nfrom {\n  opacity: 0;\n}\nto {\n  opacity: 1;\n}\n`;\n\n//\nconst defaultBorderRadius = 6;\nconst highContrastBorderThickness = 4;\n\n// Close all the accordions (used when e)\nconst close = (obj: {}): {} => {\n  return Object.keys(obj).reduce((a, k) => {\n    a[k] = false;\n    return a;\n  }, {});\n};\n\nconst clearFieldHilites = () => {\n  const fieldsClosed = Array.from(\n    document.querySelectorAll('.accordion-field') as NodeList\n  ) as HTMLElement[];\n\n  fieldsClosed.forEach(field => {\n    field.style.boxShadow = `none`;\n  });\n};\n\n// The useAccordion hook is a state object that allows\n// for accordions open/close state to be tracked and altered.\n// If the exclusive tag is passed in, it will close all the\n// fields when one is openned\nconst useAccordion = (\n  unlock: () => void,\n  count: number,\n  exclusive?: boolean\n) => {\n  const [state, setState] = useState({\n    open: {},\n    viewed: {},\n  });\n\n  const toggle = (key: string) => {\n    const past = exclusive ? close(state.open) : { ...state.open };\n    const viewed = state.viewed[key.toString()]\n      ? state.viewed\n      : { ...state.viewed, [key.toString()]: true };\n\n    if (Object.keys(viewed).length === count) {\n      unlock();\n    }\n\n    setState({\n      ...state,\n      viewed,\n      open: { ...past, [key]: !state.open[key] },\n    });\n  };\n\n  const isOpen = (key: string) => {\n    return state.open[key] || false;\n  };\n\n  return { toggle, isOpen };\n};\n\ninterface AccordionCtx {\n  toggle(key: string): void;\n  isOpen(key: string): boolean;\n}\n\nconst AccordionContext = createContext<AccordionCtx>({\n  toggle: () => {},\n  isOpen: () => false,\n});\n\n// A field is the grouping of headers and bodies of accordion fields.\n// It passes information down the the header / body to toggle and\n// open status\nexport const Field = ({ children, ...props }) => {\n  const interactionContext = useContext(InteractionContext);\n\n  const { toggle, isOpen } = useContext(AccordionContext);\n  const {\n    headingColor,\n    borderColor,\n    includeBorder = true,\n    borderRadius = defaultBorderRadius,\n    includeFieldBodyBackground = true,\n    fieldBodyBackgroundOpacity = 100,\n    fieldBodyBackgroundColor = '#fff',\n  } = interactionContext.props;\n  const idx = props.idx;\n  const trigger = () => {\n    toggle(idx);\n  };\n\n  const interactionIsOpen = useSelector((state: State) => {\n    return state.interactionsOpen.includes(interactionContext.id);\n  });\n\n  const isFieldOpen = isOpen(idx);\n\n  const { r, g, b } = getHexToRgbWithDefaultFallback(\n    fieldBodyBackgroundColor,\n    '#ffffff'\n  );\n\n  let a = fieldBodyBackgroundOpacity / 100;\n  if (!fieldBodyBackgroundColor) {\n    a = 0;\n  }\n\n  useEffect(() => {\n    const onFocus = () => {\n      const { activeElement } = document;\n\n      // used for when we tab out of the accordion 'boundary'\n      // if the element with focus is not a fieldHeader\n      // clearFieldHilites\n      if (!activeElement?.className.match('FieldHeader')) {\n        clearFieldHilites();\n      }\n    };\n\n    document.addEventListener('focus', onFocus, true);\n\n    return () => {\n      document.removeEventListener('focus', onFocus, true);\n    };\n  }, []);\n\n  const fieldBody = useRef<HTMLDivElement>(null);\n  const headerHeight = useRef<number>(0);\n\n  useLayoutEffect(() => {\n    if (!fieldBody.current) {\n      return;\n    }\n\n    const header = fieldBody.current.querySelector(\n      '[class*=\"FieldHeader\"]'\n    ) as HTMLElement;\n    headerHeight.current = header.getBoundingClientRect().height;\n  }, [interactionIsOpen, isFieldOpen]);\n\n  return (\n    <Box\n      ref={fieldBody}\n      className={`accordion-field ${isFieldOpen ? 'accordion-field-open' : ''}`}\n      mt={1}\n      mb={1}\n      css={css({\n        position: 'relative',\n        border: includeBorder\n          ? `1px solid ${borderColor || headingColor || '#222'}`\n          : 'none',\n        borderRadius,\n      })}\n    >\n      <div\n        style={{\n          position: 'absolute',\n          left: 0,\n          top: 0,\n          width: '100%',\n          height: '100%',\n          ...(headerHeight.current && {\n            background: includeFieldBodyBackground\n              ? `rgba(${r}, ${g}, ${b}, ${a})` || fieldBodyBackgroundColor\n              : 'transparent',\n            borderRadius,\n\n            clipPath: `polygon(0 ${headerHeight.current}px, 100% ${headerHeight.current}px, 100% 100%, 0 100%)`,\n          }),\n        }}\n      />\n      <div\n        style={{\n          position: 'relative',\n        }}\n      >\n        {React.Children.map(children, child =>\n          cloneElement(child, { trigger, isOpen: isFieldOpen })\n        )}\n      </div>\n    </Box>\n  );\n};\n\ninterface HeaderProps {\n  children: JSX.Element | string;\n  foreground?: string;\n  background?: string;\n}\n\ninterface InjectdProps {\n  isOpen: boolean;\n  trigger(key: string): void;\n}\n\n// The Field Header is\nexport const FieldHeader = ({\n  children,\n  foreground = '#fff',\n  background = '#222',\n  ...props\n}: HeaderProps) => {\n  const { isOpen, trigger } = props as InjectdProps;\n\n  const {\n    includeHeadingBackground = true,\n    headingBackgroundOpacity = 100,\n    headingColor,\n    headingTextColor,\n    includeBorder = true,\n    borderRadius = defaultBorderRadius,\n  } = useContext(InteractionContext).props;\n\n  const highContrast = useSelector((state: State) => {\n    return state.theme.highContrast;\n  });\n\n  const fieldHeaderRef = useRef<HTMLElement>(null);\n\n  const fieldFauxFocus = `0 0 0 1px #fff, 0 0 0 ${\n    highContrast ? highContrastBorderThickness : 2\n  }px ${headingColor}`;\n\n  const { r, g, b } = hexToRgb(headingColor || background);\n  const a = headingBackgroundOpacity / 100;\n\n  //\n  const borderRadiusRealculatedForCSSBug =\n    borderRadius + (includeBorder ? -1 : 0);\n\n  return (\n    <ThemeProvider theme={{ Text: { color: headingTextColor || foreground } }}>\n      <Flexbox\n        ref={fieldHeaderRef}\n        as=\"button\"\n        border=\"none\"\n        flexDirection=\"row\"\n        alignItems=\"center\"\n        css={css`\n          position: relative;\n          // left: -1px;\n          // width: calc(100% + 2px);\n          width: 100%;\n\n          background: ${includeHeadingBackground\n            ? `rgba(${r}, ${g}, ${b}, ${a})` || headingColor || background\n            : 'transparent'};\n\n          .chameleon-text {\n            padding: 10px ${window.dev() ? '5px' : '7px'};\n          }\n\n          border-radius: ${isOpen\n            ? `${borderRadiusRealculatedForCSSBug}px ${borderRadiusRealculatedForCSSBug}px 0 0`\n            : `${borderRadiusRealculatedForCSSBug}px`};\n\n          transition: border-radius ${0.225 / 1.5}s;\n\n          &:focus-visible {\n            box-shadow: ${!isOpen ? fieldFauxFocus : 'none'};\n          }\n\n          ${!isOpen &&\n            `\n          &:focus {\n            // box-shadow: ${fieldFauxFocus};\n          }\n\n          &:focus-visible {\n            // box-shadow: ${fieldFauxFocus};\n          }\n\n          `}\n\n          cursor: pointer;\n        `}\n        onFocus={e => {\n          clearFieldHilites();\n\n          if (isOpen) {\n            const fieldOpen = document.querySelector(\n              '.accordion-field-open'\n            ) as HTMLElement;\n\n            if (fieldOpen) {\n              //\n              fieldOpen.style.boxShadow = fieldFauxFocus;\n              //\n            }\n          }\n        }}\n        onClick={e => {\n          trigger('');\n        }}\n        onKeyUp={e => {\n          if (window.dev()) {\n            e.preventDefault();\n            return;\n          }\n\n          if (e.keyCode === 32) {\n            e.currentTarget.click();\n          }\n        }}\n        p={2}\n        aria-expanded={isOpen}\n      >\n        <Text\n          as=\"div\"\n          flex=\"1\"\n          textAlign=\"left\"\n          css={css`\n            * div {\n              color: ${headingTextColor};\n            }\n\n            p {\n              // line-height: auto !important;\n            }\n          `}\n        >\n          {children}\n        </Text>\n        <Box flex={0} p={1} pl={3} pr={2}>\n          <Arrow\n            color={headingTextColor || '#fff'}\n            rotate={isOpen ? 90 : 0}\n            delay={isOpen ? 0.25 : 0}\n          />\n        </Box>\n      </Flexbox>\n    </ThemeProvider>\n  );\n};\n\n// This posed element is responsible for the transition between open and closed states\n// const Collapse = posed.div({\n//   closed: { height: 0 },\n//   open: { height: 'auto' },\n// });\n\nexport const FieldBody = ({ children, ...props }) => {\n  const { isOpen } = props as InjectdProps;\n  const { id } = props;\n\n  const fieldBody = useRef<HTMLDivElement>(null);\n\n  const { fieldBodyTextColor, borderRadius = 0 } = useContext(\n    InteractionContext\n  ).props;\n\n  //\n  // var it for testing . . .\n  const isDevice = isAppleComputerInc() || isAndroidSamsung();\n\n  useEffect(() => {\n    if (!fieldBody.current || !isOpen) {\n      return;\n    }\n\n    // .chameleon-text,\n    const fieldBodyElements = Array.from(\n      fieldBody.current.querySelectorAll(\n        'img, .video-player-container, [class*=\"Audio\"] img, audio, svg'\n      )\n    ) as HTMLElement[];\n\n    if (!fieldBodyElements?.length) {\n      return;\n    }\n\n    fieldBodyElements.forEach(entry => {\n      entry.setAttribute('tabIndex', '0');\n    });\n\n    fieldBodyElements[0].focus();\n  }, [isOpen]);\n\n  if (window.dev && !window.dev() && isDevice) {\n    const IsAppleAndroid = ({ children }) => {\n      useLayoutEffect(() => {\n        const rowFieldBody = document.querySelector(`#i${id}`);\n        rowFieldBody && updateReadOnlyText(rowFieldBody);\n      }, []);\n\n      return (\n        <Row\n          id={`i${id}`}\n          className={isOpen ? 'fader_1s' : ''}\n          css={css`\n            height: ${isOpen ? 'auto' : 0};\n            margin: 0 !important;\n            padding: 0 !important;\n            border-radius: 0 0 ${borderRadius}px ${borderRadius}px;\n\n            p,\n            li > span {\n              color: ${fieldBodyTextColor};\n            }\n\n            overflow: hidden;\n          `}\n          aria-hidden={!isOpen}\n          aria-live=\"assertive\"\n        >\n          {children}\n        </Row>\n      );\n    };\n\n    return <IsAppleAndroid>{children}</IsAppleAndroid>;\n  }\n\n  return (\n    <motion.div\n      ref={fieldBody}\n      id={`i${id}`}\n      style={{\n        display: 'none',\n        overflow: 'hidden',\n        borderRadius: `0 0 ${borderRadius}px ${borderRadius}px`,\n      }}\n      initial={{\n        height: 0,\n        opacity: 0,\n      }}\n      transition={{\n        duration: 0.225,\n        ease: 'easeOut',\n      }}\n      animate={{\n        height: isOpen ? 'auto' : 0,\n        opacity: isOpen ? 1 : 0,\n        //\n      }}\n      onAnimationStart={() => {\n        if (isOpen && fieldBody.current) {\n          fieldBody.current.style.display = '';\n        }\n      }}\n      onAnimationComplete={() => {\n        if (!isOpen && fieldBody.current) {\n          fieldBody.current.style.display = 'none';\n        }\n      }}\n      aria-hidden={!isOpen}\n      aria-live=\"assertive\"\n    >\n      <Row\n        css={css`\n          p,\n          li > span {\n            color: ${fieldBodyTextColor};\n          }\n        `}\n      >\n        {children}\n      </Row>\n    </motion.div>\n  );\n};\n\n// An accordion is made up of 1 or more children\ninterface AccordionProps {\n  children: JSX.Element[] | JSX.Element;\n}\n\nexport const Accordion = ({ children }: AccordionProps) => {\n  const iContext = useContext(InteractionContext);\n  const interactionsLocked = useSelector((state: State) => {\n    return state.interactionsLocked;\n  });\n\n  // made this tweak here to fix the issue anglia revealed\n  // problem is i'm kinda sure this was different code at some earlier point\n  // works now. all good. but might want to chat with sam\n  // . . .\n  const unlock = () => {\n    if (window.dev && window.dev()) {\n      return;\n    }\n\n    if (!interactionsLocked?.includes(iContext.id)) {\n      return;\n    }\n\n    unlockInteraction(iContext.id);\n  };\n\n  const ctx = useAccordion(unlock, React.Children.count(children), true);\n\n  return (\n    <AccordionContext.Provider value={{ ...ctx }}>\n      {React.Children.map(children, (c, i) => cloneElement(c, { idx: i }))}\n    </AccordionContext.Provider>\n  );\n};\n","/** @jsx jsx */\n\nimport { useContext, useRef } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { getButtonFocus } from 'styles/variables';\nimport { Button } from '@chameleoncreator/creator-ui';\nimport { InteractionContext } from '../../Layouts/ContainerLogical';\nimport { useLayoutEffect } from 'react';\nimport getStore from 'services/getStore';\nimport isIE from 'services/isIE';\nimport { ModuleContext } from 'components/Module/Module_v2';\nimport { useSelector } from 'react-redux';\n\nconst store = getStore();\nconst ieCircleBtnPadding = 20;\n\nconst DButton = ({\n  id,\n  shape,\n  background = 'pink',\n  foreground = 'white',\n  borderWidth,\n  borderColor,\n  borderRadius,\n  buttonOutline,\n  useLargeButton,\n  buttonShadow,\n  buttonHover,\n  font = '',\n  children,\n  location,\n  focusColor,\n  enabled,\n  ...props\n}) => {\n  const shapeStyle = {\n    pill: 'border-radius: 9999px',\n    rectangle: `border-radius: ${borderRadius}px`,\n    circle: 'border-radius: 50%',\n  }[shape];\n\n  const ctx = useContext(InteractionContext) as any;\n  const { exit: runExit } = useContext(ModuleContext);\n  const btn = useRef<HTMLButtonElement>(null);\n  // const exit = isLastInteraction(ctx.id);\n\n  const exit = location === 'exit';\n\n  const { fontFamily: fontFromTheme } = store.getState().theme;\n\n  // the glitch found\n  // using continue button in modals or anywhere outside of the ' root page '\n  // they'll have this same locking behaviour\n  let isLocked;\n\n  if (window.dev()) {\n    isLocked = false;\n  } else {\n    isLocked = ctx.isLocked === undefined ? false : ctx.isLocked;\n    if (props.unlocked && props.unlocked === true) {\n      isLocked = false;\n    }\n  }\n\n  const _isLocked = useSelector((state: any) => {\n    return state.blocks[ctx.id].props.lockDown;\n  });\n\n  if (_isLocked === 0) {\n    isLocked = _isLocked;\n  }\n\n  useLayoutEffect(() => {\n    if (!btn.current) {\n      return;\n    }\n\n    if (shape === 'circle' && isIE()) {\n      const size = btn.current.querySelector('#ie-btn-children-container')!\n        .scrollWidth;\n      btn.current.style.width = `${size + ieCircleBtnPadding}px`;\n      btn.current.style.height = `${size + ieCircleBtnPadding}px`;\n    }\n  }, [btn.current]);\n\n  useLayoutEffect(() => {\n    if (!btn.current) {\n      return;\n    }\n\n    if (shape === 'circle') {\n      btn.current.style.height = `${btn.current.offsetWidth}px`;\n      return;\n    }\n    btn.current.style.height = 'auto';\n    btn.current.style.minHeight = '45px';\n\n    if (isIE()) {\n      const h = btn.current.querySelector('#ie-btn-children-container')!\n        .scrollHeight;\n\n      btn.current.style.height = `${h + 10}px`;\n    }\n  });\n\n  // old vals\n  // ${borderColor && `border: ${borderWidth}px solid ${borderColor};`}\n\n  const disabled = !window.dev() ? !!isLocked : false;\n\n  // console.log({\n  //   disabled,\n  //   isLocked,\n  // });\n\n  // boxShadow: getButtonFocus(focusColor || background).replace(\n  //   'box-shadow',\n  //   ''\n  // ),\n\n  // console.log(\n  //   focusColor,\n  //   background,\n  //   // 'getButtonFocus :',\n  //   getButtonFocus(focusColor || background)\n  //     .replace('box-shadow', '')\n  //     .split(':')[1]\n  //     .trim()\n  // );\n\n  const buttonFocus = getButtonFocus(focusColor || background)\n    .replace('box-shadow', '')\n    ?.split(':')[1]\n    ?.trim();\n\n  // console.log(buttonFocus);\n\n  return (\n    <Button\n      ref={btn}\n      px={4}\n      py={2}\n      // bg={borderWidth === 0 ? background : 'transparent'}\n      bg={buttonOutline ? 'transparent' : background}\n      color={foreground}\n      display={'flex'}\n      disabled={disabled}\n      css={css({\n        position: 'relative',\n        justifyContent: 'center',\n        alignItems: 'center',\n        margin: !window.dev() ? '5px 10px' : 0,\n        ...(shape !== 'circle' && {\n          width: useLargeButton ? '308px' : '230px',\n          minHeight: useLargeButton ? '64px !important' : '',\n        }),\n        wordBreak: shape === 'circle' ? 'normal' : 'break-word',\n        lineHeight: 1.2,\n\n        borderRadius: {\n          pill: '9999px',\n          rectangle: `${borderRadius}px`,\n          circle: '50%',\n        }[shape],\n        cursor: 'pointer',\n        outline: 'none',\n        border: `1px solid ${background}`,\n        fontFamily: `${font || fontFromTheme || 'inherit'} !important`,\n        fontSize: '14px',\n\n        ...((!font || !fontFromTheme) && {\n          fontWeight: 400,\n          fontStyle: 'normal',\n        }),\n\n        boxShadow: buttonShadow ? `0 0 12px 3px rgba(0, 0, 0, 0.09)` : 'none',\n\n        '&:hover': {\n          ...(buttonHover\n            ? {\n                background: buttonHover,\n                border: `1px solid ${buttonHover}`,\n              }\n            : {\n                opacity: 0.45,\n              }),\n        },\n\n        '&:focus': {\n          boxShadow: buttonFocus,\n        },\n\n        transition: 'all 0.2s',\n      })}\n      // css={css`\n      //   position: relative;\n      //   justify-content: center;\n      //   align-items: center;\n      //   ${shape !== 'circle' && `width: ${useLargeButton ? '308px' : '230px'};`}\n      //   ${shape !== 'circle' &&\n      //     useLargeButton &&\n      //     'min-height: 64px !important;'}\n      //   word-break: ${shape === 'circle' ? 'normal' : 'break-word'};\n      //   line-height: 1.2;\n      //   ${shapeStyle};\n      //   cursor: pointer;\n      //   outline: none;\n      //   border: 1px solid ${background};\n      //   font-family: ${font || fontFromTheme || 'inherit'} !important;\n      //   font-size: 14px;\n      //   ${(!font || !fontFromTheme) &&\n      //     `\n      //     font-weight: 400 !important;\n      //     font-style: normal;\n      //     `}\n      //   ${buttonShadow && `box-shadow: 0 0 12px 3px rgba(0, 0, 0, 0.09);`}\n\n      //   transition: background, border, color, opacity 0.2s;\n\n      //   ${!window.dev() && 'margin: 5px 10px;'}\n\n      //   &:hover {\n      //     ${buttonHover ? `background: ${buttonHover}` : `opacity: 0.45`};\n      // }\n      //   }\n\n      //   &:focus {\n      //     ${getButtonFocus(focusColor || background)}\n      //   }\n\n      // `}\n\n      data-as-exit-btn={exit && id}\n      fontWeight=\"normal\"\n      onClick={e => {\n        if (window.dev()) {\n          return;\n        }\n\n        exit ? runExit() : ctx.next(location);\n      }}\n      style={{\n        ...(isLocked && {\n          opacity: 0.25,\n          pointerEvents: 'none',\n        }),\n      }}\n    >\n      {isIE() ? (\n        <div\n          id=\"ie-btn-children-container\"\n          css={css`\n            position: absolute;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            left: 0;\n            top: 50%;\n            width: 100%;\n            padding: 0 15px;\n            ${shape === 'circle' &&\n              `\n              padding: ${ieCircleBtnPadding}px !important;\n            `}\n            transform: translateY(-50%);\n          `}\n        >\n          {children}\n        </div>\n      ) : (\n        children\n      )}\n    </Button>\n  );\n};\n\nexport default DButton;\n","import { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from './apiHelpers/getBlockById';\n\nconst findByKeyVal = (o, key, val) => {\n  if (o[key] && o[key] === val) return o;\n  let result;\n  for (const p in o) {\n    if (o.hasOwnProperty(p) && typeof o[p] === 'object') {\n      result = findByKeyVal(o[p], key, val);\n      if (result) {\n        return result;\n      }\n    }\n  }\n};\n\nexport default findByKeyVal;\n\nexport const findByKeyVal_V2 = (\n  rootId: string,\n  type: string,\n  val: string\n): Block | undefined => {\n  const root = getBlockById(rootId);\n\n  if (!root) {\n    return undefined;\n  }\n\n  if (root[type] === val) {\n    return root;\n  }\n\n  let found: Block | undefined = undefined;\n  if (Array.isArray(root.children)) {\n    root.children.forEach(c => {\n      const block = findByKeyVal_V2(c.id, type, val);\n      if (block) {\n        found = block;\n      }\n    });\n  }\n\n  return found;\n};\n","/** @jsx jsx */\n\nimport { useState, useContext, useRef, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { colors } from 'styles/variables';\nimport getStore from 'services/getStore';\n\nconst store = getStore();\n\nconst { lPink, mint } = colors;\n\nlet lastPageMessageReceived = false;\n\nconst LastPageMessage = () => {\n  const [showLastPageMessage, setShowLastPageMessage] = useState(\n    lastPageMessageReceived\n  );\n\n  const Arrow = ({ width = 5, height = 13 }) => (\n    <div\n      css={css`\n        position: absolute;\n        left: -5px;\n        top: 50%;\n        width: ${width}px;\n        height: ${height}px;\n        transform: translateY(-50%);\n      `}\n    >\n      <svg width={width} height={height}>\n        <polygon\n          points={`${width},0 0,${height / 2} ${width},${height}`}\n          style={{\n            fill: mint || lPink,\n          }}\n        />\n      </svg>\n    </div>\n  );\n\n  return !lastPageMessageReceived ? (\n    <div\n      className=\"fader_-5s\"\n      css={css`\n        position: absolute;\n        left: calc(100% + 15px);\n        top: 50%;\n        min-width: 250px;\n        padding: 20px;\n        transform: translateY(-50%);\n        background: ${mint || lPink};\n        border-radius: 10px;\n        font-size: 12px;\n        color: #fff;\n        box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);\n        pointer-events: none;\n        z-index: 2147483638;\n      `}\n    >\n      <div>\n        This is the last page of your module. Consider adding an 'Exit' action\n        and label, or removing the button altogether.\n      </div>\n\n      <div\n        css={css`\n          display: inline-block;\n          margin: 10px 0 0 0;\n          padding: 5px 10px;\n\n          background: #fff;\n          font-size: 12px;\n          color: ${mint || lPink};\n          border-radius: 9999px;\n          cursor: pointer;\n\n          pointer-events: auto;\n        `}\n        onClick={e => {\n          e.stopPropagation();\n          setShowLastPageMessage((lastPageMessageReceived = true));\n        }}\n      >\n        Got it!\n      </div>\n      <Arrow />\n    </div>\n  ) : null;\n};\n\nexport default LastPageMessage;\n","/** @jsx jsx */\n\nimport { useContext, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditMarker from 'components/UI/EditMarker';\nimport { colors } from 'styles/variables';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport setBlockProps from 'services/apiHelpers/setBlockProps';\nimport { useSelector, connect } from 'react-redux';\nimport { Box } from '@chameleoncreator/creator-ui';\nimport { InteractionContext } from '../../Layouts/ContainerLogical';\nimport checkButtonColors from 'services/checkButtonColors';\nimport getAllInteractions from 'services/apiHelpers/getAllInteractions';\nimport isLastInteraction from 'services/apiHelpers/isLastInteraction';\nimport getBlockById from 'services/apiHelpers/getBlockById';\n\nimport DButton from './DButton';\nimport { findByKeyVal_V2 } from 'services/findByKeyVal';\nimport LastPageMessage from 'components/Editor/EditorUtilities/UI/LastPageMessage';\nimport hasValidLocationUpdated from 'services/hasValidLocationUpdated';\nimport { useMemo } from 'react';\n\nimport { NavigationButton } from 'components/lib/Buttons';\n\nconst { lPink } = colors;\n\ninterface IEditable {\n  isEditActive: boolean;\n  children: any;\n  lockDown: boolean;\n  unlocked?: boolean;\n  id: string;\n  shape?: string;\n  background?: string;\n  foreground?: string;\n  label?: string;\n  color?: string;\n  borderWidth?: string;\n  borderColor?: string;\n  localBorderColor?: boolean;\n  buttonShape?: string;\n  localShape?: boolean;\n  borderRadius?: number | string;\n  localBorderRadius?: boolean;\n  localButtonOutline?: boolean;\n  buttonOutline?: boolean;\n  useLargeButton?: boolean;\n  localUseLargeButton?: boolean;\n  buttonShadow?: boolean;\n  localShadow?: boolean;\n  font?: string;\n  location?: string;\n  style?: {};\n  hasSetRemoveable?: boolean;\n  removeable?: boolean;\n  focusColor?: string;\n  disableLastPageMessage?: boolean;\n  enabled?: boolean;\n  buttonHover?: string;\n  localButtonHover?: boolean;\n  linkData?: { [key: string]: string };\n}\n\nconst ContinueBtn = (props: IEditable) => {\n  const {\n    isEditActive,\n    id,\n    label,\n    font,\n    // location,\n    unlocked,\n    disableLastPageMessage,\n    focusColor,\n  } = props as any;\n\n  // console.log('getButtonFocus :', { focusColor });\n\n  // might not need this just yet\n  // button is ' disabled ' by isLocked on interaction context\n  let { enabled } = props;\n  // so we can map it something else if need be\n\n  let { location } = props;\n\n  const {\n    buttonShape,\n    buttonShadow,\n    buttonOutline,\n    useLargeButton,\n    borderColor,\n    buttonBorderRadius = 0,\n    buttonHover,\n  } = useSelector((state: any) => {\n    // props.localShape props.localShadow\n    // if this is set. means author has made a decision on the button props\n    // we preference this setting true or false\n\n    const {\n      buttonShape,\n      buttonShadow,\n      buttonOutline,\n      useLargeButton,\n      buttonBorderColor,\n      buttonBorderRadius,\n      buttonHover,\n    } = state.theme;\n\n    return {\n      buttonShape: props.localShape ? props.buttonShape : buttonShape,\n      buttonShadow: props.localShadow ? props.buttonShadow : buttonShadow,\n      buttonOutline: props.localButtonOutline\n        ? props.buttonOutline\n        : buttonOutline,\n      useLargeButton: props.localUseLargeButton\n        ? props.useLargeButton\n        : useLargeButton,\n      borderColor: props.localBorderColor\n        ? props.borderColor\n        : buttonBorderColor,\n      buttonBorderRadius: props.localBorderRadius\n        ? props.borderRadius\n        : buttonBorderRadius,\n      buttonHover: props.localButtonHover ? props.buttonHover : buttonHover,\n    };\n  });\n\n  const { background, color } = checkButtonColors(props);\n\n  const interactionContext = useContext(InteractionContext) as any;\n\n  // const interactionBlock = getBlockById(interactionContext.id);\n\n  const exit = useMemo(() => {\n    if (!window.dev()) {\n      return;\n    }\n    // console.log('checking for if to display isLastInteractionMessage');\n    return (\n      getAllInteractions().length > 1 &&\n      location !== 'exit' &&\n      isLastInteraction(interactionContext.id)\n    );\n  }, []);\n\n  useEffect(() => {\n    // this is the hack to get this onto the legacy buttons\n    // would want to set it from the factory but that would only work for newly created buttons\n    //\n    if (props.hasOwnProperty('removeable')) {\n      const { hasSetRemoveable, removeable } = props;\n      if (!hasSetRemoveable) {\n        setBlockProps(getBlockById(id), { hasSetRemoveable: true, removeable });\n      }\n    }\n  }, []);\n\n  // error checking here against a potentially removed topic\n  let hasValidLocation = hasValidLocationUpdated(location);\n\n  if (props?.linkData && props?.linkData.url) {\n    location = props.linkData.url;\n    hasValidLocation = true;\n  }\n\n  console.log({ location, linkData: props.linkData });\n\n  let buttonBlock = findByKeyVal_V2(\n    interactionContext.id,\n    'type',\n    'Column'\n  ) as any;\n\n  const buttonCount =\n    buttonBlock.meta &&\n    buttonBlock.meta.subType === 'ButtonBlock' &&\n    buttonBlock.children.length;\n\n  return window.dev() ? (\n    <Box\n      id={`continue-btn-${id}`}\n      p={2}\n      px={3}\n      flex={0}\n      css={css`\n        position: relative;\n        box-shadow: ${isEditActive\n          ? `0 0 0 1px ${lPink}`\n          : `0 0 0 1px ${hasValidLocation ? 'lightGrey' : 'yellow'}`};\n        transition: box-shadow 0.2s;\n        cursor: pointer;\n      `}\n      onClick={e => {\n        e.stopPropagation();\n        if (isEditActive) {\n          return;\n        }\n        setCurrentBlock({ id });\n      }}\n    >\n      <DButton\n        enabled={enabled}\n        id={id}\n        shape={buttonShape}\n        background={background}\n        foreground={color}\n        borderWidth={buttonOutline ? 1 : 0}\n        borderColor={background}\n        buttonHover={buttonHover}\n        buttonOutline={buttonOutline}\n        useLargeButton={useLargeButton}\n        borderRadius={buttonBorderRadius}\n        buttonShadow={buttonShadow}\n        font={font}\n        location={location}\n        focusColor={focusColor}\n      >\n        {label}\n      </DButton>\n      {!isEditActive && <EditMarker />}\n\n      {/* can only have the one button. else assumption is made author knows what they're up to */}\n      {buttonCount === 1 && exit && !disableLastPageMessage && (\n        <LastPageMessage />\n      )}\n    </Box>\n  ) : (\n    <DButton\n      enabled={enabled}\n      borderWidth={buttonOutline ? 1 : 0}\n      borderColor={background}\n      font={font}\n      location={hasValidLocation ? location : 'next'}\n      focusColor={focusColor}\n      unlocked={unlocked}\n      {...{\n        ...props,\n        background,\n        foreground: color,\n        shape: buttonShape,\n        borderRadius: buttonBorderRadius,\n        buttonShadow,\n        buttonOutline,\n        useLargeButton,\n        buttonHover,\n      }}\n    >\n      {label}\n    </DButton>\n  );\n};\n\n// export default connect(\n//   ({ focusedNodeId }: { focusedNodeId: string | number }, props: any) => {\n//     return {\n//       isEditActive: focusedNodeId === props.id && props.id !== undefined,\n//       // [Math.random()]: '',\n//     };\n//   }\n// )(ContinueBtn);\n\nexport default NavigationButton;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","import React, { useState, useRef, useEffect } from 'react';\n\nconst useIntersectionObserver = (updateWhenIsNotIntersecting = false) => {\n  const [entry, update] = useState<any>(null);\n  // {} as any\n  const mounted = useRef(false);\n\n  useEffect(() => {\n    mounted.current = true;\n    return () => { mounted.current = false };\n  }, []);\n\n  return {\n    entry,\n    init(entries, options) {\n      const io = new IntersectionObserver(entries => {\n        entries.forEach(entry => {\n          if (entry.isIntersecting) {\n            update(entry);\n          }\n          if (updateWhenIsNotIntersecting && entry && !entry.isIntersecting) {\n            mounted.current && update(entry);\n          }\n        });\n      }, options);\n      //\n      try {\n        entries.forEach(entry => io.observe(entry));\n      } catch (err) {\n        console.warn(entries);\n      }\n    },\n  };\n};\n\nexport default useIntersectionObserver;\n","/** @jsx jsx */\n\nimport React, { Fragment as _, useRef, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport Modal from 'components/UI/Modal';\n\nconst Transcript = ({\n  onClose,\n  children,\n}: {\n  id?: any;\n  onClose?: any;\n  children?: any;\n}) => {\n  let [text, btn] = children[0].props.children;\n\n  btn = React.cloneElement(btn, {\n    onClick() {\n      onClose();\n    },\n  });\n\n  const buttonContainer = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (!buttonContainer.current) {\n      return;\n    }\n\n    const continueButton = buttonContainer.current.querySelector(\n      'button'\n    ) as HTMLButtonElement;\n    if (!continueButton) {\n      return;\n    }\n\n    continueButton.removeAttribute('aria-label');\n  }, []);\n\n  return (\n    <Modal onClose={onClose}>\n      <div\n        css={css`\n          position: relative;\n          display: flex;\n          flex-direction: column;\n          align-items: space-between;\n          width: 100%;\n          min-height: 50vh;\n          padding: 30px;\n        `}\n      >\n        <div\n          css={css`\n            display: flex;\n            flex: 1;\n            align-items: center;\n            margin: 0 0 20px 0;\n          `}\n        >\n          {text}\n        </div>\n        <div\n          css={css`\n            display: flex;\n            justify-content: center;\n            width: 100%;\n          `}\n        >\n          <div ref={buttonContainer}>{btn}</div>\n        </div>\n      </div>\n    </Modal>\n  );\n};\n\nexport default Transcript;\n","/** @jsx jsx */\n\nimport { Block } from '@chameleoncreator/creator-app';\nimport { Stream } from '@cloudflare/stream-react';\nimport { css, jsx } from '@emotion/core';\nimport playVideo from 'assets/playVideo.svg';\nimport VideoIcon from 'assets/Video.svg';\nimport { interactionContext } from 'components/lib/TextAndImage/interactionContext';\nimport EditMarker from 'components/UI/EditMarker';\nimport { keyframes } from 'emotion';\nimport useIntersectionObserver from 'hooks/useIntersectionObserver';\nimport {\n  Fragment as _,\n  useContext,\n  useEffect,\n  useLayoutEffect,\n  useRef,\n  useState,\n} from 'react';\nimport ReactPlayer from 'react-player';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport { killAllAudio } from 'services/killAllAudio';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport { colors, getButtonFocus } from 'styles/variables';\nimport Transcript from './Transcript';\n\nconst { lPink } = colors;\n\nconst frameSelected = keyframes`\n  from {\n    width: 50%;\n    height: 50%;\n  }\n  to {\n    width: 75%;\n    height: 75%;\n  }\n`;\n\nconst ShowTranscriptBtn = ({\n  id,\n  setShowTranscript,\n  showTranscriptFontSize = 12,\n  showTranscriptFontColor = '#000',\n  showTranscriptLabel = 'Show transcript',\n}) => {\n  return (\n    <button\n      id={`show-transcript-${id}`}\n      css={css`\n        width: 100%;\n\n        font-size: ${showTranscriptFontSize}px;\n\n        border: none;\n        outline: none;\n        background: transparent;\n\n        text-decoration: underline;\n        text-align: center;\n        cursor: pointer;\n\n        color: ${showTranscriptFontColor};\n        &:focus {\n          ${getButtonFocus('#2684FF')}\n        }\n      `}\n      onClick={() => {\n        setShowTranscript(true);\n      }}\n    >\n      {showTranscriptLabel}\n    </button>\n  );\n};\n\nconst EditWrapper = ({ id, selected }) => {\n  return (\n    <div\n      css={css`\n        position: absolute;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        left: 0px;\n        top: 0px;\n        width: 100%;\n        height: 100%;\n        pointer-events: none;\n      `}\n    >\n      <div\n        css={css`\n                position: relative;\n                display: flex;\n                justify-content: center;\n                align-items: center;\n                width: ${selected ? '75%' : '50%'};\n                height: ${selected ? '75%' : '50%'};\n\n                ${selected && `animation: ${frameSelected} 0.2s forwards;`}\n\n                ${!selected &&\n                  `\n                background: rgba(0, 0, 0, 0.1);\n                `}\n\n                box-shadow: ${\n                  selected ? `0 0 0 1px ${lPink}` : '0 0 0 1px lightGrey'\n                };\n                transition: all 0.2s;\n                pointer-events: all;\n                cursor: pointer;\n                &:hover {\n                  ${!selected && `box-shadow: 0 0 0 1px ${lPink};`}\n                }\n            `}\n        onClick={e => {\n          e.stopPropagation();\n          if (selected) return;\n          setCurrentBlock({ id });\n        }}\n      >\n        {!selected && (\n          <img src={VideoIcon} style={{ width: 50, opacity: 0.5 }} />\n        )}\n\n        {!selected && <EditMarker />}\n      </div>\n    </div>\n  );\n};\n\ntype IProps = {\n  src: string;\n  videoSrc: string;\n  maxWidth: number;\n  hideControls: boolean;\n  useTranscript: boolean;\n  showTranscriptFontSize: number;\n  showTranscriptFontColor: string;\n  showTranscriptLabel: string;\n  viewingTranscriptUnlocksInteraction: boolean;\n  cloudflareUid: string;\n  posterSrc: boolean;\n  autoPlay: boolean;\n  playInline: boolean;\n};\n\nconst Video = ({\n  id,\n  focusedNodeId,\n  children,\n  ...props\n}: {\n  id?: any;\n  focusedNodeId?: any;\n  children?: any;\n}) => {\n  const { entry, init } = useIntersectionObserver(true);\n  const {\n    src,\n    videoSrc,\n    maxWidth = 960,\n    useTranscript,\n    showTranscriptFontSize = 12,\n    showTranscriptFontColor = '#000',\n    showTranscriptLabel = 'Show transcript',\n    viewingTranscriptUnlocksInteraction = false,\n    cloudflareUid,\n    // cloudflareUid = '5cf27df9948930e8611e2a27c584b40e',\n    posterSrc,\n  } = props as IProps;\n\n  // defaults\n  let {\n    hideControls = false,\n    autoPlay = false,\n    playInline = false,\n  } = props as IProps;\n\n  // forced false in dev\n  if (window.dev()) {\n    hideControls = false;\n    autoPlay = false;\n    playInline = false;\n  }\n\n  const isYouTube = (videoSrc || src).match(\n    /^(https?\\:\\/\\/)?((www\\.)?youtube\\.com|youtu\\.be)\\/.+$/\n  );\n\n  const [isPlaying, setIsPlaying] = useState(false);\n  const [calcHeight, setCalcHeight] = useState(maxWidth * 0.5625);\n\n  const [showTranscript, setShowTranscript] = useState(false);\n  const [showPoster, setShowPoster] = useState<boolean | null>(posterSrc);\n\n  const selected = focusedNodeId === id;\n  const context = useContext(interactionContext)! as Block;\n  const mounted = useRef(false);\n  const video = useRef<HTMLDivElement>(null);\n\n  // need to get the correct type for player\n  const player = useRef<any>(null);\n\n  const hasAutoPlayed = useRef<boolean>(false);\n\n  useLayoutEffect(() => {\n    if (!mounted.current) {\n      init([video.current], {\n        threshold: 0.5,\n      });\n    }\n\n    mounted.current = true;\n\n    return () => {\n      mounted.current = false;\n    };\n  }, []);\n\n  useEffect(() => {\n    const onWindowResize = () => {\n      const { width } = video.current!.getBoundingClientRect();\n      const calcHeightTarget = width * 0.5625;\n\n      if (calcHeight === calcHeightTarget) {\n        return;\n      }\n\n      setCalcHeight(calcHeightTarget);\n    };\n\n    onWindowResize();\n    window.addEventListener('resize', onWindowResize);\n\n    return () => {\n      window.removeEventListener('resize', onWindowResize);\n    };\n  });\n\n  useEffect(() => {\n    // pauses cloudflare player\n    //\n    if (!cloudflareUid || !player.current) {\n      return;\n    }\n\n    if (isPlaying && entry && !entry.isIntersecting) {\n      player.current.pause();\n    }\n  }, [entry?.isIntersecting]);\n\n  useEffect(() => {\n    if (isPlaying) {\n      killAllAudio();\n    }\n  }, [isPlaying]);\n\n  useEffect(() => {\n    const onFullScreenChange = e => {\n      if (!document.fullscreenElement && video?.current) {\n        // this specific selector fails when video is added as media to interactions NOT\n        // a standalone video interaction\n        // const section = document.querySelector(`#i${context.id}`);\n\n        // let's be more generic and get whichever section element is closest to the video\n        const section = video.current.closest('section');\n        section?.scrollIntoView();\n      }\n    };\n\n    video?.current?.addEventListener('fullscreenchange', onFullScreenChange);\n\n    return () => {\n      video?.current?.removeEventListener(\n        'fullscreenchange',\n        onFullScreenChange\n      );\n    };\n  }, []);\n\n  useEffect(() => {\n    if (viewingTranscriptUnlocksInteraction && showTranscript) {\n      unlockInteraction(context.id);\n    }\n  }, [showTranscript]);\n\n  useEffect(() => {\n    if (!autoPlay) {\n      return;\n    }\n\n    if (entry?.isIntersecting && !hasAutoPlayed.current) {\n      // console.log('browser allows autoPlay !?!?');\n      //\n\n      cloudflareUid ? player?.current?.play() : setIsPlaying(true);\n      hasAutoPlayed.current = true;\n    }\n  }, [entry?.isIntersecting]);\n\n  useEffect(() => {\n    if (entry?.isIntersecting) {\n      return;\n    }\n\n    // reset the hasAutoPlayed\n    if (autoPlay) {\n      hasAutoPlayed.current = false;\n    }\n  }, [entry?.isIntersecting]);\n\n  const continuePlayingInFullscreen =\n    isPlaying && document.fullscreenElement !== null ? true : false;\n\n  const videoPlayer = (\n    <div\n      ref={video}\n      className=\"video-player-container\"\n      css={css`\n        position: relative;\n        width: 100%;\n        max-width: ${maxWidth}px;\n        // height: ${calcHeight ? `${calcHeight}px` : '100%'};\n        // margin: 50px 0;\n      `}\n      // i want to keep this on the periphery i think\n      // if we're not happy with the behaviours we're getting out of the box for these players\n      // ( reactPlayer feels kinda janky )\n      // if we roll our own solution we can standardise the output\n      // onMouseOver={() => {\n      //   setShowPoster(false);\n      // }}\n      // onMouseOut={() => {\n      //   if (player.current.getCurrentTime() === 0) {\n      //     setShowPoster(true);\n      //   }\n      // }}\n    >\n      <_>\n        {cloudflareUid ? (\n          <CloudflareVideo\n            streamRef={player}\n            id={id}\n            cloudflareUid={cloudflareUid}\n            height={calcHeight ? `${calcHeight}px` : '100%'}\n            onPlay={() => {\n              setIsPlaying(true);\n            }}\n            onPause={() => {\n              setIsPlaying(false);\n            }}\n            onEnded={() => {\n              unlockInteraction(context.id);\n            }}\n            controls={!hideControls}\n            poster={posterSrc}\n            {...(playInline && {\n              autoplay: true,\n              loop: true,\n              muted: true,\n              playsinline: true,\n              controls: false,\n            })}\n            {...(entry?.isIntersecting &&\n              autoPlay && {\n                autoplay: true,\n              })}\n          />\n        ) : (\n          <ReactPlayer\n            ref={player}\n            url={videoSrc || src}\n            width=\"100%\"\n            height={calcHeight || '100%'}\n            onStart={() => {}}\n            onPlay={() => {\n              setIsPlaying(true);\n            }}\n            onPause={() => {\n              setIsPlaying(false);\n            }}\n            onEnded={() => {\n              unlockInteraction(context.id);\n            }}\n            playing={\n              continuePlayingInFullscreen ||\n              (isPlaying && entry && entry.isIntersecting)\n            }\n            controls={!hideControls}\n            light={posterSrc}\n            {...(playInline && {\n              playing: true,\n              loop: true,\n              muted: true,\n              playsinline: true,\n              controls: false,\n            })}\n            // {...(!window.dev() &&\n            //   autoPlay && {\n            //     playing: true,\n            //   })}\n          />\n        )}\n      </_>\n\n      {!window.dev() && (\n        <_>\n          {hideControls && !isYouTube && (\n            <div\n              style={{\n                position: 'absolute',\n                display: 'flex',\n                justifyContent: 'center',\n                alignItems: 'center',\n                left: 0,\n                top: 0,\n                width: '100%',\n                height: '100%',\n                background: 'transparent',\n                cursor: 'pointer',\n              }}\n              onClick={() => {\n                hasAutoPlayed.current = true;\n\n                if (cloudflareUid) {\n                  // play for cloudflare. . .\n\n                  player?.current[isPlaying ? 'pause' : 'play']();\n                  return;\n                }\n\n                setIsPlaying(isPlaying => !isPlaying);\n              }}\n            >\n              {!isPlaying && (\n                <div\n                  className=\"fader_-2s\"\n                  style={{\n                    width: 50,\n                    height: 50,\n                    borderRadius: '50%',\n                    border: '2px solid #000',\n                    background: `url('${playVideo}') no-repeat`,\n                    backgroundPosition: 'center',\n                    boxShadow: '0 0 10px rgba(0,0,0, 0.2)',\n                  }}\n                />\n              )}\n            </div>\n          )}\n        </_>\n      )}\n\n      {window.dev() && <EditWrapper id={id} selected={selected} />}\n    </div>\n  );\n\n  const showTranscriptBtn = (\n    <div style={{ margin: '5px 0 0 0' }}>\n      <ShowTranscriptBtn\n        id={id}\n        setShowTranscript={setShowTranscript}\n        showTranscriptFontSize={showTranscriptFontSize}\n        showTranscriptFontColor={showTranscriptFontColor}\n        showTranscriptLabel={showTranscriptLabel}\n      />\n    </div>\n  );\n\n  return (\n    <_>\n      {window.dev() ? (\n        <div\n          css={css`\n            position: relative;\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n            align-items: center;\n            left: 0px;\n            top: 0px;\n            width: 100%;\n            // height: ${calcHeight}px;\n\n            // * {\n            //   max-height: ${calcHeight}px;\n            // }\n          `}\n        >\n          {videoPlayer}\n\n          {useTranscript && showTranscriptBtn}\n        </div>\n      ) : (\n        <div\n          css={css`\n            position: relative;\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n            align-items: center;\n            width: 100%;\n            height: 100%;\n          `}\n        >\n          {videoPlayer}\n\n          {useTranscript && showTranscriptBtn}\n        </div>\n      )}\n\n      {showTranscript && (\n        <Transcript\n          onClose={() => {\n            const tick = setInterval(() => {\n              const showTranscriptButtonElement: any = document.querySelector(\n                `#show-transcript-${id}`\n              );\n\n              if (showTranscriptButtonElement) {\n                showTranscriptButtonElement.focus();\n\n                clearInterval(tick);\n              }\n            }, 0);\n\n            setShowTranscript(false);\n          }}\n        >\n          {children}\n        </Transcript>\n      )}\n    </_>\n  );\n};\n\nexport const CloudflareVideo = props => {\n  const { id, cloudflareUid, ...rest } = props;\n  const { height } = rest;\n\n  return (\n    <div\n      css={css({\n        height: height,\n        '*': {\n          maxHeight: height,\n          // pointerEvents: window.dev() ? 'none' : 'auto',\n        },\n      })}\n    >\n      <Stream\n        controls\n        src={cloudflareUid}\n        {...{\n          ...rest,\n          //\n        }}\n      />\n    </div>\n  );\n};\n\nexport default Video;\n","import Video from './Video';\n\nexport default Video;\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  memo,\n  useMemo,\n  useCallback,\n  useContext,\n  useRef,\n  useState,\n  useEffect,\n  useLayoutEffect,\n} from 'react';\nimport { keyframes } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport { colors } from 'styles/variables';\nimport Modal from 'components/UI/Modal';\n\nconst { lPink } = colors;\n\nconst Transcript = ({\n  id,\n  onClose,\n  children,\n  ...props\n}: {\n  id?: any;\n  onClose?: any;\n  children?: any;\n}) => {\n  //\n\n  let [text, btn] = children?.props?.children;\n\n  btn = React.cloneElement(btn, {\n    onClick() {\n      onClose();\n    },\n  });\n\n  return (\n    <Modal onClose={onClose}>\n      <div\n        css={css`\n          position: relative;\n          display: flex;\n          flex-direction: column;\n          align-items: space-between;\n          width: 100%;\n          min-height: 50vh;\n          padding: 30px;\n        `}\n      >\n        <div\n          css={css`\n            display: flex;\n            flex: 1;\n            align-items: center;\n            margin: 0 0 20px 0;\n          `}\n        >\n          {text}\n        </div>\n        <div\n          css={css`\n            display: flex;\n            justify-content: center;\n            width: 100%;\n          `}\n        >\n          <div>{btn}</div>\n        </div>\n      </div>\n    </Modal>\n  );\n};\n\nexport default Transcript;\n","// prettier-ignore\r\nexport default {\"v\":\"5.7.4\",\"fr\":24,\"ip\":0,\"op\":169,\"w\":980,\"h\":685,\"nm\":\"headphonesWoman\",\"ddd\":0,\"assets\":[{\"id\":\"comp_0\",\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":4,\"nm\":\"potStroke01\",\"parent\":3,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[34.063,31.243,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[13.799,33.452,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"ef\":[{\"ty\":28,\"nm\":\"Set Matte\",\"np\":8,\"mn\":\"ADBE Set Matte3\",\"ix\":1,\"en\":1,\"ef\":[{\"ty\":10,\"nm\":\"Take Matte From Layer\",\"mn\":\"ADBE Set Matte3-0001\",\"ix\":1,\"v\":{\"a\":0,\"k\":3,\"ix\":1}},{\"ty\":7,\"nm\":\"Use For Matte\",\"mn\":\"ADBE Set Matte3-0002\",\"ix\":2,\"v\":{\"a\":0,\"k\":4,\"ix\":2}},{\"ty\":7,\"nm\":\"Invert Matte\",\"mn\":\"ADBE Set Matte3-0003\",\"ix\":3,\"v\":{\"a\":0,\"k\":0,\"ix\":3}},{\"ty\":7,\"nm\":\"If Layer Sizes Differ\",\"mn\":\"ADBE Set Matte3-0004\",\"ix\":4,\"v\":{\"a\":0,\"k\":1,\"ix\":4}},{\"ty\":7,\"nm\":\"Composite Matte with Original\",\"mn\":\"ADBE Set Matte3-0005\",\"ix\":5,\"v\":{\"a\":0,\"k\":1,\"ix\":5}},{\"ty\":7,\"nm\":\"Premultiply Matte Layer\",\"mn\":\"ADBE Set Matte3-0006\",\"ix\":6,\"v\":{\"a\":0,\"k\":1,\"ix\":6}}]}],\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[5.5,-2.25],[0,0],[-0.098,-5.157],[2.043,-13.038],[1.72,-1.891]],\"o\":[[-5.5,2.25],[0,0],[0.286,15.178],[-0.609,3.887],[0,0]],\"v\":[[2.173,-41.184],[-8.416,-30.952],[-12.113,-20.638],[10.168,22.464],[6.399,30.952]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":1,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[14.711,33.452],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"tm\",\"s\":{\"a\":0,\"k\":10,\"ix\":1},\"e\":{\"a\":0,\"k\":100,\"ix\":2},\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":84,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":85,\"s\":[0]},{\"t\":169,\"s\":[360]}],\"ix\":3},\"m\":1,\"ix\":2,\"nm\":\"Trim Paths 1\",\"mn\":\"ADBE Vector Filter - Trim\",\"hd\":false}],\"ip\":0,\"op\":219,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":2,\"ty\":4,\"nm\":\"potStroke02\",\"parent\":3,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[92.41,37.477,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[51.483,44.652,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"ef\":[{\"ty\":28,\"nm\":\"Set Matte\",\"np\":8,\"mn\":\"ADBE Set Matte3\",\"ix\":1,\"en\":1,\"ef\":[{\"ty\":10,\"nm\":\"Take Matte From Layer\",\"mn\":\"ADBE Set Matte3-0001\",\"ix\":1,\"v\":{\"a\":0,\"k\":3,\"ix\":1}},{\"ty\":7,\"nm\":\"Use For Matte\",\"mn\":\"ADBE Set Matte3-0002\",\"ix\":2,\"v\":{\"a\":0,\"k\":4,\"ix\":2}},{\"ty\":7,\"nm\":\"Invert Matte\",\"mn\":\"ADBE Set Matte3-0003\",\"ix\":3,\"v\":{\"a\":0,\"k\":0,\"ix\":3}},{\"ty\":7,\"nm\":\"If Layer Sizes Differ\",\"mn\":\"ADBE Set Matte3-0004\",\"ix\":4,\"v\":{\"a\":0,\"k\":1,\"ix\":4}},{\"ty\":7,\"nm\":\"Composite Matte with Original\",\"mn\":\"ADBE Set Matte3-0005\",\"ix\":5,\"v\":{\"a\":0,\"k\":1,\"ix\":5}},{\"ty\":7,\"nm\":\"Premultiply Matte Layer\",\"mn\":\"ADBE Set Matte3-0006\",\"ix\":6,\"v\":{\"a\":0,\"k\":1,\"ix\":6}}]}],\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-23.608,14.889],[0,0]],\"o\":[[0,0],[23.608,-14.89],[0,0]],\"v\":[[1.734,36.147],[-17.142,-21.257],[40.75,11.531]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":1,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[43.25,38.647],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"tm\",\"s\":{\"a\":0,\"k\":10,\"ix\":1},\"e\":{\"a\":0,\"k\":100,\"ix\":2},\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":84,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":85,\"s\":[0]},{\"t\":169,\"s\":[360]}],\"ix\":3},\"m\":1,\"ix\":2,\"nm\":\"Trim Paths 1\",\"mn\":\"ADBE Vector Filter - Trim\",\"hd\":false}],\"ip\":0,\"op\":219,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":3,\"ty\":4,\"nm\":\"pot\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.304],\"y\":[1]},\"o\":{\"x\":[0.611],\"y\":[0]},\"t\":24,\"s\":[0]},{\"i\":{\"x\":[0.562],\"y\":[1]},\"o\":{\"x\":[0.604],\"y\":[0]},\"t\":45,\"s\":[20]},{\"i\":{\"x\":[0.522],\"y\":[1]},\"o\":{\"x\":[0.4],\"y\":[0]},\"t\":73,\"s\":[-10]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.429],\"y\":[0]},\"t\":94,\"s\":[5]},{\"i\":{\"x\":[0.546],\"y\":[1]},\"o\":{\"x\":[0.41],\"y\":[0]},\"t\":112,\"s\":[-2.5]},{\"i\":{\"x\":[0.546],\"y\":[1]},\"o\":{\"x\":[0.41],\"y\":[0]},\"t\":127,\"s\":[1.3]},{\"i\":{\"x\":[0.553],\"y\":[1]},\"o\":{\"x\":[0.405],\"y\":[0]},\"t\":142,\"s\":[-0.6]},{\"t\":158,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.304,\"y\":1},\"o\":{\"x\":0.611,\"y\":0},\"t\":24,\"s\":[645.795,535.312,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.562,\"y\":1},\"o\":{\"x\":0.604,\"y\":0},\"t\":45,\"s\":[666.295,535.312,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.522,\"y\":1},\"o\":{\"x\":0.4,\"y\":0},\"t\":73,\"s\":[634.795,535.312,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.429,\"y\":0},\"t\":94,\"s\":[650.695,535.312,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.546,\"y\":1},\"o\":{\"x\":0.41,\"y\":0},\"t\":112,\"s\":[643.195,535.312,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.546,\"y\":1},\"o\":{\"x\":0.41,\"y\":0},\"t\":127,\"s\":[647.895,535.312,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.553,\"y\":1},\"o\":{\"x\":0.405,\"y\":0},\"t\":142,\"s\":[644.695,535.312,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"t\":158,\"s\":[645.795,535.312,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[58.944,3.121,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[32.408,0.013],[-0.014,32.408],[0,0]],\"o\":[[-0.013,32.408],[-32.408,-0.013],[0,0],[0,0]],\"v\":[[58.687,-29.311],[-0.017,29.345],[-58.673,-29.358],[-33.844,-29.348]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.588235318661,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[58.937,32.48],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":219,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":4,\"ty\":4,\"nm\":\"potPlantShadow\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.408,\"y\":1},\"o\":{\"x\":0.51,\"y\":0},\"t\":24,\"s\":[699.315,594.493,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.562,\"y\":1},\"o\":{\"x\":0.565,\"y\":0},\"t\":45,\"s\":[717.815,594.493,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.505,\"y\":1},\"o\":{\"x\":0.417,\"y\":0},\"t\":73,\"s\":[687.515,594.493,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.577,\"y\":1},\"o\":{\"x\":0.429,\"y\":0},\"t\":94,\"s\":[706.115,594.493,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.558,\"y\":1},\"o\":{\"x\":0.448,\"y\":0},\"t\":112,\"s\":[697.315,594.493,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.558,\"y\":1},\"o\":{\"x\":0.448,\"y\":0},\"t\":127,\"s\":[705.315,594.493,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.565,\"y\":1},\"o\":{\"x\":0.441,\"y\":0},\"t\":142,\"s\":[698.015,594.493,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"t\":158,\"s\":[699.315,594.493,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[168.712,2.435,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.408,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.51,0.333,0.333],\"y\":[0,0,0]},\"t\":24,\"s\":[100,100,100]},{\"i\":{\"x\":[0.562,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.565,0.333,0.333],\"y\":[0,0,0]},\"t\":45,\"s\":[84.2,100,100]},{\"i\":{\"x\":[0.505,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.417,0.333,0.333],\"y\":[0,0,0]},\"t\":73,\"s\":[106,100,100]},{\"i\":{\"x\":[0.577,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.429,0.333,0.333],\"y\":[0,0,0]},\"t\":94,\"s\":[97.1,100,100]},{\"i\":{\"x\":[0.558,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.448,0.333,0.333],\"y\":[0,0,0]},\"t\":112,\"s\":[101.3,100,100]},{\"i\":{\"x\":[0.558,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.448,0.333,0.333],\"y\":[0,0,0]},\"t\":127,\"s\":[100.6,100,100]},{\"i\":{\"x\":[0.565,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.441,0.333,0.333],\"y\":[0,0,0]},\"t\":142,\"s\":[100.7,100,100]},{\"t\":158,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,1.207],[-46.519,0],[0,-1.207],[46.52,0]],\"o\":[[0,-1.207],[46.52,0],[0,1.207],[-46.519,0]],\"v\":[[-84.231,0],[0,-2.185],[84.231,0],[0,2.185]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.137254901961,0.149019607843,0.192156877705,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[84.481,2.435],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":219,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":5,\"ty\":4,\"nm\":\"mainStem\",\"parent\":3,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.342],\"y\":[1]},\"o\":{\"x\":[0.432],\"y\":[0]},\"t\":24,\"s\":[-0.027]},{\"i\":{\"x\":[0.574],\"y\":[1]},\"o\":{\"x\":[0.544],\"y\":[0]},\"t\":49,\"s\":[16.279]},{\"i\":{\"x\":[0.6],\"y\":[1]},\"o\":{\"x\":[0.449],\"y\":[0]},\"t\":77,\"s\":[-8.612]},{\"i\":{\"x\":[0.589],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":98,\"s\":[4.619]},{\"i\":{\"x\":[0.574],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":116,\"s\":[-2.851]},{\"i\":{\"x\":[0.574],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":131,\"s\":[1.129]},{\"i\":{\"x\":[0.579],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":146,\"s\":[-0.538]},{\"t\":162,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[58.804,22.221,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0.851,242.57,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[0.851,0.851],[0.851,242.57]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.137254901961,0.16862745098,0.219607858097,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":1.702,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":219,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":6,\"ty\":4,\"nm\":\"mainLeaf\",\"parent\":5,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[0.851,30.213,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[21.344,29.612,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.494,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":24,\"s\":[{\"i\":[[0,11.65],[-11.65,0],[0,-11.65],[0,0]],\"o\":[[0,-11.65],[11.65,0],[0,11.65],[0,0]],\"v\":[[-21.094,-8.268],[0,-29.362],[21.094,-8.268],[0,29.362]],\"c\":true}]},{\"i\":{\"x\":0.488,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":53,\"s\":[{\"i\":[[-4.163,10.881],[-10.881,-4.163],[4.163,-10.881],[0,0]],\"o\":[[4.163,-10.881],[10.881,4.163],[-4.163,10.881],[0,0]],\"v\":[[-15.889,-16.118],[11.351,-28.281],[23.514,-1.042],[0,29.362]],\"c\":true}]},{\"i\":{\"x\":0.429,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":81,\"s\":[{\"i\":[[3.01,11.254],[-11.254,3.01],[-3.01,-11.254],[0,0]],\"o\":[[-3.01,-11.254],[11.254,-3.01],[3.01,11.254],[0,0]],\"v\":[[-21.658,-2.978],[-6.73,-28.806],[19.098,-13.879],[0,29.362]],\"c\":true}]},{\"i\":{\"x\":0.389,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":102,\"s\":[{\"i\":[[-4.767,10.63],[-10.63,-4.767],[4.767,-10.63],[0,0]],\"o\":[[4.767,-10.63],[10.63,4.767],[-4.767,10.63],[0,0]],\"v\":[[-17.969,-17.818],[9.91,-28.433],[20.525,-0.554],[0,29.362]],\"c\":true}]},{\"i\":{\"x\":0.333,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":120,\"s\":[{\"i\":[[2.097,11.46],[-11.46,2.097],[-2.097,-11.46],[0,0]],\"o\":[[-2.097,-11.46],[11.46,-2.097],[2.097,11.46],[0,0]],\"v\":[[-20.899,-4.798],[-3.947,-29.345],[20.599,-12.393],[0,29.362]],\"c\":true}]},{\"i\":{\"x\":0.333,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":135,\"s\":[{\"i\":[[-1.23,11.585],[-11.585,-1.23],[1.23,-11.585],[0,0]],\"o\":[[1.23,-11.585],[11.585,1.23],[-1.23,11.585],[0,0]],\"v\":[[-20.725,-10.521],[2.478,-29.271],[21.228,-6.068],[0,29.362]],\"c\":true}]},{\"i\":{\"x\":0.354,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":150,\"s\":[{\"i\":[[1.444,11.56],[-11.56,1.444],[-1.444,-11.56],[0,0]],\"o\":[[-1.444,-11.56],[11.56,-1.444],[1.444,11.56],[0,0]],\"v\":[[-20.846,-5.69],[-2.529,-29.236],[21.017,-10.918],[0,29.362]],\"c\":true}]},{\"t\":166,\"s\":[{\"i\":[[0,11.65],[-11.65,0],[0,-11.65],[0,0]],\"o\":[[0,-11.65],[11.65,0],[0,11.65],[0,0]],\"v\":[[-21.094,-8.268],[0,-29.362],[21.094,-8.268],[0,29.362]],\"c\":true}]}],\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.913725550034,0.850980451995,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[21.344,29.612],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":219,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":7,\"ty\":4,\"nm\":\"stem01\",\"parent\":5,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.396],\"y\":[1]},\"o\":{\"x\":[0.416],\"y\":[0]},\"t\":24,\"s\":[0]},{\"i\":{\"x\":[0.574],\"y\":[1]},\"o\":{\"x\":[0.544],\"y\":[0]},\"t\":54,\"s\":[18.686]},{\"i\":{\"x\":[0.6],\"y\":[1]},\"o\":{\"x\":[0.449],\"y\":[0]},\"t\":82,\"s\":[-12.441]},{\"i\":{\"x\":[0.589],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":103,\"s\":[10.079]},{\"i\":{\"x\":[0.574],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":121,\"s\":[-6.018]},{\"i\":{\"x\":[0.574],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":136,\"s\":[5.849]},{\"i\":{\"x\":[0.579],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":151,\"s\":[-1.111]},{\"t\":167,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[0.85,100.468,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[55.38,55.38,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[-27.264,-27.265],[27.264,27.265]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.137254901961,0.16862745098,0.219607858097,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":1.702,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[28.115,28.116],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":219,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":8,\"ty\":4,\"nm\":\"leaf01\",\"parent\":7,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[42.375,42.375,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[50.012,41.774,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-8.238,-8.237],[0,0]],\"o\":[[-8.238,8.238],[8.238,8.238],[0,0]],\"v\":[[-16.643,-20.762],[-16.643,9.069],[24.881,20.762]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.913725550034,0.850980451995,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[25.131,21.012],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":219,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":9,\"ty\":4,\"nm\":\"stem02\",\"parent\":5,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.387],\"y\":[1]},\"o\":{\"x\":[0.428],\"y\":[0]},\"t\":24,\"s\":[0]},{\"i\":{\"x\":[0.574],\"y\":[1]},\"o\":{\"x\":[0.544],\"y\":[0]},\"t\":50,\"s\":[22.386]},{\"i\":{\"x\":[0.6],\"y\":[1]},\"o\":{\"x\":[0.449],\"y\":[0]},\"t\":78,\"s\":[-12.541]},{\"i\":{\"x\":[0.589],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":99,\"s\":[8.579]},{\"i\":{\"x\":[0.574],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":117,\"s\":[-7.918]},{\"i\":{\"x\":[0.574],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":132,\"s\":[4.149]},{\"i\":{\"x\":[0.579],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":147,\"s\":[-2.811]},{\"t\":173,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[0.851,128.351,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0.851,69.505,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[34.327,-34.327],[-34.327,34.327]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.137254901961,0.16862745098,0.219607858097,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":1.702,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[35.178,35.178],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":219,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":10,\"ty\":4,\"nm\":\"leaf02\",\"parent\":9,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[27.981,42.375,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0.25,50.012,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-8.238,8.238],[-8.237,-8.238],[8.238,-8.237],[0,0]],\"o\":[[8.238,-8.238],[8.238,8.238],[-8.237,8.238],[0,0]],\"v\":[[-13.188,-16.643],[16.643,-16.643],[16.643,13.188],[-24.881,24.881]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.913725550034,0.850980451995,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[25.131,25.131],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":219,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":11,\"ty\":4,\"nm\":\"stem03\",\"parent\":5,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.377],\"y\":[1]},\"o\":{\"x\":[0.422],\"y\":[0]},\"t\":24,\"s\":[0]},{\"i\":{\"x\":[0.574],\"y\":[1]},\"o\":{\"x\":[0.544],\"y\":[0]},\"t\":52,\"s\":[21.386]},{\"i\":{\"x\":[0.6],\"y\":[1]},\"o\":{\"x\":[0.449],\"y\":[0]},\"t\":80,\"s\":[-10.941]},{\"i\":{\"x\":[0.589],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":101,\"s\":[6.579]},{\"i\":{\"x\":[0.574],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":119,\"s\":[-6.518]},{\"i\":{\"x\":[0.574],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":134,\"s\":[3.249]},{\"i\":{\"x\":[0.579],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":149,\"s\":[-0.311]},{\"t\":165,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[1.131,175.301,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[69.505,69.505,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[-34.327,-34.327],[34.327,34.327]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.137254901961,0.16862745098,0.219607858097,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":1.702,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[35.178,35.178],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":219,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":12,\"ty\":4,\"nm\":\"leaf03\",\"parent\":11,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[42.375,42.375,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[50.012,50.012,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-8.238,-8.237],[0,0]],\"o\":[[-8.238,8.238],[8.238,8.238],[0,0]],\"v\":[[-16.643,-20.762],[-16.643,9.069],[24.881,20.762]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.913725550034,0.850980451995,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[25.131,29.25],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[8.238,8.238],[8.237,-8.238],[-8.238,-8.237],[0,0]],\"o\":[[-8.238,-8.238],[-8.238,8.238],[8.237,8.238],[0,0]],\"v\":[[13.188,-16.643],[-16.643,-16.643],[-16.643,13.188],[24.881,24.881]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.913725550034,0.850980451995,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[25.131,25.131],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":219,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":13,\"ty\":4,\"nm\":\"stem04\",\"parent\":5,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.366],\"y\":[1]},\"o\":{\"x\":[0.416],\"y\":[0]},\"t\":24,\"s\":[0]},{\"i\":{\"x\":[0.574],\"y\":[1]},\"o\":{\"x\":[0.544],\"y\":[0]},\"t\":54,\"s\":[14.686]},{\"i\":{\"x\":[0.6],\"y\":[1]},\"o\":{\"x\":[0.449],\"y\":[0]},\"t\":82,\"s\":[-17.441]},{\"i\":{\"x\":[0.589],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":103,\"s\":[11.779]},{\"i\":{\"x\":[0.574],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":121,\"s\":[-7.218]},{\"i\":{\"x\":[0.574],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":136,\"s\":[0.749]},{\"i\":{\"x\":[0.579],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":151,\"s\":[-0.311]},{\"t\":167,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[0.851,197.255,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0.851,58.709,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[28.929,-28.929],[-28.929,28.929]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0.137254901961,0.16862745098,0.219607858097,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":1.702,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[29.78,29.78],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":219,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":14,\"ty\":4,\"nm\":\"leaf04\",\"parent\":13,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[41.036,21.613,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[24.101,21.012,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[8.238,-8.237],[0,0]],\"o\":[[8.238,8.238],[-8.238,8.238],[0,0]],\"v\":[[16.643,-20.762],[16.643,9.069],[-24.881,20.762]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.913725550034,0.850980451995,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[25.131,21.012],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":219,\"st\":0,\"bm\":0}]},{\"id\":\"comp_1\",\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":4,\"nm\":\"waveMask\",\"td\":1,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[970,489,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0,0,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.958823529412,0.06768172021,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Shape 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-125.625,-42.75],[-124.375,41],[-124.625,42.75],[-124.625,-42.75]],\"c\":true}]},{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":55,\"s\":[{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[93.625,-41.75],[93.625,42],[-124.625,42.75],[-124.625,-42.75]],\"c\":true}]},{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":119,\"s\":[{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[93.625,-41.75],[93.625,42],[-124.625,42.75],[-124.625,-42.75]],\"c\":true}]},{\"t\":162,\"s\":[{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[93.625,-41.75],[93.625,42],[93.375,42.75],[93.375,-42.75]],\"c\":true}]}],\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.958823529412,0.06768172021,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-663.875,-181.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Rectangle 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":163,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":2,\"ty\":4,\"nm\":\"eyeBallRef/wideShotLaptopWoman Outlines 2\",\"parent\":4,\"tt\":1,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[154.354,49,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[54,49,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-6.273,-6.171],[-6.273,6.171],[-6.273,-6.171],[-6.274,6.171]],\"o\":[[6.273,-6.171],[6.273,6.171],[6.273,-6.171],[6.273,6.171],[0,0]],\"v\":[[-50.186,0],[-25.093,0],[0,0],[25.093,0],[50.186,0]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":3.5,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[53.983,87.951],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-6.273,-6.171],[-6.273,6.171],[-6.273,-6.171],[-6.274,6.171]],\"o\":[[6.273,-6.171],[6.273,6.171],[6.273,-6.171],[6.273,6.171],[0,0]],\"v\":[[-50.186,0],[-25.093,0],[0,0],[25.093,0],[50.186,0]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":3.5,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[53.983,74.181],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":163,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":3,\"ty\":4,\"nm\":\"waveMask 3\",\"td\":1,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[970,489,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0,0,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.958823529412,0.06768172021,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Shape 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-125.625,-42.75],[-124.375,41],[-124.625,42.75],[-124.625,-42.75]],\"c\":true}]},{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":55,\"s\":[{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[93.625,-41.75],[93.625,42],[-124.625,42.75],[-124.625,-42.75]],\"c\":true}]},{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":119,\"s\":[{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[93.625,-41.75],[93.625,42],[-124.625,42.75],[-124.625,-42.75]],\"c\":true}]},{\"t\":162,\"s\":[{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[93.625,-41.75],[93.625,42],[93.375,42.75],[93.375,-42.75]],\"c\":true}]}],\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.958823529412,0.06768172021,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[-663.875,-181.75],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Rectangle 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":163,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":4,\"ty\":4,\"nm\":\"eyeBallRef/wideShotLaptopWoman Outlines\",\"tt\":1,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[291,237,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"t\":48,\"s\":[64.6,237,0]}],\"ix\":2,\"x\":\"var $bm_rt;\\n$bm_rt = loopOut();\",\"l\":2},\"a\":{\"a\":0,\"k\":[54,49,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[225.7,225.7,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-6.273,-6.171],[-6.273,6.171],[-6.273,-6.171],[-6.274,6.171]],\"o\":[[6.273,-6.171],[6.273,6.171],[6.273,-6.171],[6.273,6.171],[0,0]],\"v\":[[-50.186,0],[-25.093,0],[0,0],[25.093,0],[50.186,0]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":3.5,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[53.983,87.951],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-6.273,-6.171],[-6.273,6.171],[-6.273,-6.171],[-6.274,6.171]],\"o\":[[6.273,-6.171],[6.273,6.171],[6.273,-6.171],[6.273,6.171],[0,0]],\"v\":[[-50.186,0],[-25.093,0],[0,0],[25.093,0],[50.186,0]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":3.5,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[53.983,74.181],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":163,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":6,\"ty\":4,\"nm\":\"pupil Outlines\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0,\"y\":1},\"o\":{\"x\":0.45,\"y\":0},\"t\":0,\"s\":[295,198,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":18,\"s\":[295,173.7,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.478,\"y\":0.478},\"o\":{\"x\":0.333,\"y\":0.333},\"t\":29,\"s\":[295,185,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0,\"y\":1},\"o\":{\"x\":0.725,\"y\":0},\"t\":51,\"s\":[295,185,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0,\"y\":0},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":71,\"s\":[255,185,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0,\"y\":1},\"o\":{\"x\":0.689,\"y\":0},\"t\":102,\"s\":[255,185,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"t\":129,\"s\":[295,185,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[40,40,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"ef\":[{\"ty\":28,\"nm\":\"Set Matte\",\"np\":8,\"mn\":\"ADBE Set Matte3\",\"ix\":1,\"en\":1,\"ef\":[{\"ty\":10,\"nm\":\"Take Matte From Layer\",\"mn\":\"ADBE Set Matte3-0001\",\"ix\":1,\"v\":{\"a\":0,\"k\":7,\"ix\":1}},{\"ty\":7,\"nm\":\"Use For Matte\",\"mn\":\"ADBE Set Matte3-0002\",\"ix\":2,\"v\":{\"a\":0,\"k\":4,\"ix\":2}},{\"ty\":7,\"nm\":\"Invert Matte\",\"mn\":\"ADBE Set Matte3-0003\",\"ix\":3,\"v\":{\"a\":0,\"k\":0,\"ix\":3}},{\"ty\":7,\"nm\":\"If Layer Sizes Differ\",\"mn\":\"ADBE Set Matte3-0004\",\"ix\":4,\"v\":{\"a\":0,\"k\":1,\"ix\":4}},{\"ty\":7,\"nm\":\"Composite Matte with Original\",\"mn\":\"ADBE Set Matte3-0005\",\"ix\":5,\"v\":{\"a\":0,\"k\":1,\"ix\":5}},{\"ty\":7,\"nm\":\"Premultiply Matte Layer\",\"mn\":\"ADBE Set Matte3-0006\",\"ix\":6,\"v\":{\"a\":0,\"k\":1,\"ix\":6}}]}],\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,21.619],[-21.619,0],[0,-21.619],[21.619,0]],\"o\":[[0,-21.619],[21.619,0],[0,21.619],[-21.619,0]],\"v\":[[-39.144,0],[0,-39.144],[39.144,0],[0,39.144]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.161000001197,0.33300000359,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[39.706,39.927],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":211,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":7,\"ty\":4,\"nm\":\"eye\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[294.25,184.75,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[-665.75,-355.25,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0,0,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.45,0.47,0.333],\"y\":[0,0,0]},\"t\":0,\"s\":[100,0,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.474,0.474,0.269],\"y\":[0,0,0]},\"t\":14,\"s\":[100,114.2,100]},{\"i\":{\"x\":[0.099,0.158,0.684],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":22,\"s\":[100,100,100]},{\"i\":{\"x\":[0,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.739,0.706,0.167],\"y\":[0,0,0]},\"t\":148,\"s\":[100,100,100]},{\"t\":160,\"s\":[100,0,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":1,\"k\":[{\"i\":{\"x\":0,\"y\":1},\"o\":{\"x\":0.45,\"y\":0},\"t\":0,\"s\":[{\"i\":[[64.5,0],[0,0],[-70,0],[0,0]],\"o\":[[-64.5,0],[0,0],[70,0],[0,0]],\"v\":[[-665,-414.5],[-777,-355],[-665,-296],[-554.5,-355.5]],\"c\":true}]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.167,\"y\":0},\"t\":14,\"s\":[{\"i\":[[64.5,0],[0,0],[-70,0],[0,0]],\"o\":[[-64.5,0],[0,0],[70,0],[0,0]],\"v\":[[-665,-414.5],[-777,-355],[-665,-296],[-554.5,-355.5]],\"c\":true}]},{\"i\":{\"x\":0,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":22,\"s\":[{\"i\":[[64.5,0],[0,0],[-70,0],[0,0]],\"o\":[[-64.5,0],[0,0],[70,0],[0,0]],\"v\":[[-665,-414.5],[-777,-355],[-665,-296],[-554.5,-355.5]],\"c\":true}]},{\"i\":{\"x\":0,\"y\":1},\"o\":{\"x\":0.739,\"y\":0},\"t\":148,\"s\":[{\"i\":[[64.5,0],[0,0],[-70,0],[0,0]],\"o\":[[-64.5,0],[0,0],[70,0],[0,0]],\"v\":[[-665,-414.5],[-777,-355],[-665,-296],[-554.5,-355.5]],\"c\":true}]},{\"t\":160,\"s\":[{\"i\":[[64.5,0],[0,0],[-70,0],[0,0]],\"o\":[[-64.5,0],[0,0],[70,0],[0,0]],\"v\":[[-665,-414.5],[-777,-355],[-665,-296],[-554.5,-355.5]],\"c\":true}]}],\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Shape 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":211,\"st\":0,\"bm\":0}]},{\"id\":\"comp_2\",\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":3,\"nm\":\"cloudHandle\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":0,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":0,\"s\":[251.438,123,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":20,\"s\":[214.06,123,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"t\":135,\"s\":[170.309,123,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0,0,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"ip\":0,\"op\":169,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":2,\"ty\":4,\"nm\":\"cloudPart01\",\"parent\":1,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[22.529,-0.036,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[22.636,22.636,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":0,\"s\":[100,0,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":5,\"s\":[100,120,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":10,\"s\":[100,90,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":15,\"s\":[100,105,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":20,\"s\":[100,100,100]},{\"i\":{\"x\":[0.123,0.343,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":120,\"s\":[100,100,100]},{\"i\":{\"x\":[0.433,0.433,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.524,0.615,0.333],\"y\":[0,0,0]},\"t\":125.625,\"s\":[100,140,100]},{\"t\":131.25,\"s\":[100,0,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[12.364,0],[0,-12.363],[0,0]],\"o\":[[-12.364,0],[0,0],[0,-12.363]],\"v\":[[0,-11.193],[-22.386,11.193],[22.386,11.193]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.862745157878,0.501960784314,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[22.636,11.443],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":169,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":3,\"ty\":4,\"nm\":\"cloudPart02\",\"parent\":1,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[67.301,-0.036,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[22.636,22.636,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":5,\"s\":[100,0,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":10,\"s\":[100,120,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":15,\"s\":[100,90,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":20,\"s\":[100,105,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":25,\"s\":[100,100,100]},{\"i\":{\"x\":[0.308,0.308,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":121.875,\"s\":[100,100,100]},{\"i\":{\"x\":[0.433,0.433,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.524,0.524,0.333],\"y\":[0,0,0]},\"t\":127.5,\"s\":[100,140,100]},{\"t\":133.125,\"s\":[100,0,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[12.364,0],[0,-12.363],[0,0]],\"o\":[[-12.364,0],[0,0],[0,-12.363]],\"v\":[[0,-11.193],[-22.386,11.193],[22.386,11.193]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.862745157878,0.501960784314,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[22.636,11.443],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":5,\"op\":169,\"st\":5,\"bm\":0},{\"ddd\":0,\"ind\":4,\"ty\":4,\"nm\":\"cloudPart03\",\"parent\":1,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[112.073,-0.036,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[22.636,22.636,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":9,\"s\":[100,0,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":14,\"s\":[100,120,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":19,\"s\":[100,90,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":24,\"s\":[100,105,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":29,\"s\":[100,100,100]},{\"i\":{\"x\":[0.308,0.308,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":123.75,\"s\":[100,100,100]},{\"i\":{\"x\":[0.433,0.433,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.524,0.524,0.333],\"y\":[0,0,0]},\"t\":129.375,\"s\":[100,140,100]},{\"t\":135,\"s\":[100,0,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[12.364,0],[0,-12.363],[0,0]],\"o\":[[-12.364,0],[0,0],[0,-12.363]],\"v\":[[0,-11.193],[-22.386,11.193],[22.386,11.193]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.862745157878,0.501960784314,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[22.636,11.443],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":9,\"op\":169,\"st\":9,\"bm\":0}]}],\"layers\":[{\"ddd\":0,\"ind\":2,\"ty\":4,\"nm\":\"totterStroke01 Outlines\",\"parent\":4,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[129,90.5,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[115,103.5,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"ef\":[{\"ty\":28,\"nm\":\"Set Matte\",\"np\":8,\"mn\":\"ADBE Set Matte3\",\"ix\":1,\"en\":1,\"ef\":[{\"ty\":10,\"nm\":\"Take Matte From Layer\",\"mn\":\"ADBE Set Matte3-0001\",\"ix\":1,\"v\":{\"a\":0,\"k\":4,\"ix\":1}},{\"ty\":7,\"nm\":\"Use For Matte\",\"mn\":\"ADBE Set Matte3-0002\",\"ix\":2,\"v\":{\"a\":0,\"k\":4,\"ix\":2}},{\"ty\":7,\"nm\":\"Invert Matte\",\"mn\":\"ADBE Set Matte3-0003\",\"ix\":3,\"v\":{\"a\":0,\"k\":0,\"ix\":3}},{\"ty\":7,\"nm\":\"If Layer Sizes Differ\",\"mn\":\"ADBE Set Matte3-0004\",\"ix\":4,\"v\":{\"a\":0,\"k\":1,\"ix\":4}},{\"ty\":7,\"nm\":\"Composite Matte with Original\",\"mn\":\"ADBE Set Matte3-0005\",\"ix\":5,\"v\":{\"a\":0,\"k\":1,\"ix\":5}},{\"ty\":7,\"nm\":\"Premultiply Matte Layer\",\"mn\":\"ADBE Set Matte3-0006\",\"ix\":6,\"v\":{\"a\":0,\"k\":1,\"ix\":6}}]}],\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-5,12],[0,0],[-70.236,-33.345],[0,0],[3,1]],\"o\":[[5,-12],[0,0],[70.237,33.345],[0,0],[-17.181,-5.727]],\"v\":[[-123.013,19.518],[-109.207,-2.452],[38.97,-65.091],[7.428,98.437],[-7.013,109.518]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":4,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[115.013,103.482],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"tm\",\"s\":{\"a\":0,\"k\":0,\"ix\":1},\"e\":{\"a\":0,\"k\":90,\"ix\":2},\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":27,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":123,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":139,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":140,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":236,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":252,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":253,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":349,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":365,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":366,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":462,\"s\":[360]},{\"t\":478,\"s\":[360]}],\"ix\":3},\"m\":1,\"ix\":2,\"nm\":\"Trim Paths 1\",\"mn\":\"ADBE Vector Filter - Trim\",\"hd\":false}],\"ip\":0,\"op\":261,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":3,\"ty\":4,\"nm\":\"totterStroke02 Outlines\",\"parent\":4,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[275,95.5,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[78,99.5,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"ef\":[{\"ty\":28,\"nm\":\"Set Matte\",\"np\":8,\"mn\":\"ADBE Set Matte3\",\"ix\":1,\"en\":1,\"ef\":[{\"ty\":10,\"nm\":\"Take Matte From Layer\",\"mn\":\"ADBE Set Matte3-0001\",\"ix\":1,\"v\":{\"a\":0,\"k\":4,\"ix\":1}},{\"ty\":7,\"nm\":\"Use For Matte\",\"mn\":\"ADBE Set Matte3-0002\",\"ix\":2,\"v\":{\"a\":0,\"k\":4,\"ix\":2}},{\"ty\":7,\"nm\":\"Invert Matte\",\"mn\":\"ADBE Set Matte3-0003\",\"ix\":3,\"v\":{\"a\":0,\"k\":0,\"ix\":3}},{\"ty\":7,\"nm\":\"If Layer Sizes Differ\",\"mn\":\"ADBE Set Matte3-0004\",\"ix\":4,\"v\":{\"a\":0,\"k\":1,\"ix\":4}},{\"ty\":7,\"nm\":\"Composite Matte with Original\",\"mn\":\"ADBE Set Matte3-0005\",\"ix\":5,\"v\":{\"a\":0,\"k\":1,\"ix\":5}},{\"ty\":7,\"nm\":\"Premultiply Matte Layer\",\"mn\":\"ADBE Set Matte3-0006\",\"ix\":6,\"v\":{\"a\":0,\"k\":1,\"ix\":6}}]}],\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-4.278,-5.039],[-48.801,-46.839],[-9.5,2]],\"o\":[[0,0],[47.927,56.456],[0,0],[9.5,-2]],\"v\":[[24.49,-102.104],[32.767,-94.065],[-23.293,94.065],[-5.01,99.896]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":4,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[78.01,99.604],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"tm\",\"s\":{\"a\":0,\"k\":0,\"ix\":1},\"e\":{\"a\":0,\"k\":91.5,\"ix\":2},\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":71.787,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":83.752,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":84.499,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":156.287,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":168.252,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":169,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":322,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":338,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":339,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":435,\"s\":[360]},{\"t\":451,\"s\":[360]}],\"ix\":3},\"m\":1,\"ix\":2,\"nm\":\"Trim Paths 1\",\"mn\":\"ADBE Vector Filter - Trim\",\"hd\":false}],\"ip\":0,\"op\":261,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":4,\"ty\":4,\"nm\":\"totter Outlines\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.317],\"y\":[1]},\"o\":{\"x\":[0.553],\"y\":[0]},\"t\":0,\"s\":[0]},{\"i\":{\"x\":[0.386],\"y\":[1]},\"o\":{\"x\":[0.51],\"y\":[0]},\"t\":25.5,\"s\":[45.1]},{\"i\":{\"x\":[0.344],\"y\":[1]},\"o\":{\"x\":[0.536],\"y\":[0]},\"t\":57.098,\"s\":[-27.9]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.643],\"y\":[0]},\"t\":76.753,\"s\":[15.2]},{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":89.29,\"s\":[-5]},{\"t\":100.45703125,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.317,\"y\":1},\"o\":{\"x\":0.553,\"y\":0},\"t\":0,\"s\":[794.312,465.989,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.386,\"y\":1},\"o\":{\"x\":0.51,\"y\":0},\"t\":25.5,\"s\":[860.312,465.989,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.344,\"y\":1},\"o\":{\"x\":0.536,\"y\":0},\"t\":57.098,\"s\":[754.312,465.989,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.643,\"y\":0},\"t\":76.753,\"s\":[818.512,465.989,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":89.29,\"s\":[788.912,465.989,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"t\":100.45703125,\"s\":[794.312,465.989,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[195.312,0.489,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[45.3,45.3,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-107.682,1.37],[1.37,107.682],[0,0]],\"o\":[[1.371,107.681],[107.68,-1.37],[0,0],[0,0]],\"v\":[[-195.658,-94.451],[1.796,98.042],[194.288,-99.413],[111.788,-98.362]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.862745157878,0.501960784314,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[195.989,99.902],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":261,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":5,\"ty\":4,\"nm\":\"purpleBall Outlines\",\"parent\":4,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.475,\"y\":1},\"o\":{\"x\":0.498,\"y\":0},\"t\":3.682,\"s\":[194.973,-77.453,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.52,\"y\":1},\"o\":{\"x\":0.46,\"y\":0},\"t\":27.718,\"s\":[360.373,-82.153,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.597,\"y\":0},\"t\":59.315,\"s\":[15.673,-77.453,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":78.971,\"s\":[282.573,-80.453,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":93.712,\"s\":[181.973,-77.453,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"t\":106,\"s\":[194.973,-77.453,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[83.5,83,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[108.2,108.2,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-5.572,42.582],[-42.581,-5.571],[5.572,-42.582],[42.581,5.571]],\"o\":[[5.571,-42.582],[42.582,5.572],[-5.571,42.581],[-42.582,-5.572]],\"v\":[[-77.1,-10.088],[10.088,-77.101],[77.1,10.088],[-10.088,77.101]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.913725550034,0.850980451995,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[83.473,82.98],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":261,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":6,\"ty\":4,\"nm\":\"totterShadow\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[879.316,555.416,0],\"ix\":2,\"x\":\"var $bm_rt;\\n$bm_rt = thisComp.layer('totter Outlines').transform.position;\",\"l\":2},\"a\":{\"a\":0,\"k\":[100.299,-88.363,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[104.4,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,1.318],[-50.823,0],[0,-1.318],[50.824,0]],\"o\":[[0,-1.318],[50.824,0],[0,1.318],[-50.823,0]],\"v\":[[-92.024,0],[0,-2.387],[92.024,0],[0,2.387]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.137254901961,0.149019607843,0.192156877705,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[92.274,2.637],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":169,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":7,\"ty\":0,\"nm\":\"potplantTwoAnimated\",\"refId\":\"comp_0\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[248,555.5,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[647,594.5,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[96.4,96.4,100],\"ix\":6,\"l\":2}},\"ao\":0,\"w\":980,\"h\":685,\"ip\":0,\"op\":77,\"st\":-92,\"bm\":0},{\"ddd\":0,\"ind\":8,\"ty\":0,\"nm\":\"potplantTwoAnimated\",\"refId\":\"comp_0\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[248,555.5,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[647,594.5,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[96.4,96.4,100],\"ix\":6,\"l\":2}},\"ao\":0,\"w\":980,\"h\":685,\"ip\":77,\"op\":169,\"st\":77,\"bm\":0},{\"ddd\":0,\"ind\":9,\"ty\":4,\"nm\":\"kneeJoint\",\"parent\":10,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.133],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":30,\"s\":[0]},{\"i\":{\"x\":[0.42],\"y\":[1]},\"o\":{\"x\":[0.553],\"y\":[0.024]},\"t\":46,\"s\":[16]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.552],\"y\":[0]},\"t\":61,\"s\":[-8]},{\"i\":{\"x\":[0.667],\"y\":[0.95]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":78,\"s\":[4]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[-0.092]},\"t\":91,\"s\":[-2]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":103,\"s\":[1]},{\"t\":115,\"s\":[0]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[0.188,19.461,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[19.461,19.461,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,-10.61],[10.61,0],[0,10.61],[-10.61,0]],\"o\":[[0,10.61],[-10.61,0],[0,-10.61],[10.61,0]],\"v\":[[19.211,0],[0,19.211],[-19.211,0],[0,-19.211]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.192156877705,0.403921598547,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[19.461,19.461],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":169,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":10,\"ty\":4,\"nm\":\"upperLeg01\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[542.412,265.982,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[54.157,19.461,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0],[-0.862,0.078],[0,0],[0,0],[0,14.733],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0.882,0],[0,0],[0,0],[14.288,-1.657],[0,0],[0,0],[0,0]],\"v\":[[-53.907,19.087],[7.163,19.087],[7.149,19.211],[25.182,19.211],[27.797,19.087],[28.526,19.087],[28.526,19.011],[53.907,-9.514],[53.907,-18.66],[-53.907,-19.211]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.192156877705,0.403921598547,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[54.157,19.461],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":169,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":11,\"ty\":4,\"nm\":\"shoelaceBow01\",\"parent\":12,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":30,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.167],\"y\":[0]},\"t\":48,\"s\":[17.4]},{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.167],\"y\":[0]},\"t\":63,\"s\":[-8.4]},{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.167],\"y\":[0]},\"t\":80,\"s\":[8]},{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.167],\"y\":[0]},\"t\":93,\"s\":[-2.3]},{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.167],\"y\":[0]},\"t\":105,\"s\":[0.6]},{\"t\":117,\"s\":[-6.4]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[45.585,127.896,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[14.057,11.756,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.589,-0.823],[0,0],[-2.056,1.978],[-1.043,-1.455]],\"o\":[[-2.532,1.312],[0,0],[1.289,-1.24],[1.042,1.455]],\"v\":[[4.495,1.384],[-6.283,5.124],[0.719,-3.884],[5.241,-3.138]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.603,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[20.324,6.632],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-1.589,-0.823],[0,0],[2.056,1.978],[1.043,-1.455]],\"o\":[[2.532,1.312],[0,0],[-1.289,-1.24],[-1.042,1.455]],\"v\":[[-4.495,1.384],[6.283,5.124],[-0.719,-3.884],[-5.241,-3.138]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.603,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[7.79,6.632],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":169,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":12,\"ty\":4,\"nm\":\"lowerLeg01\",\"parent\":9,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[-2.152,85.616,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[41.142,85.616,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[81.729,162.447],[1.44,162.447]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.602,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-0.886,0],[-1.722,-7.702],[0,0]],\"o\":[[0.85,-0.129],[8.221,0],[0,0],[0,0]],\"v\":[[-3.397,-6.521],[-0.794,-6.73],[16.021,6.73],[-16.021,6.73]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.602,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[17.526,155.718],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[48.821,132.164],[39.409,132.164]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.602,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[46.113,136.431],[36.701,136.431]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.602,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 4\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[42.42,140.699],[33.008,140.699]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.602,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 5\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":5,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[6.311,-2.954],[0,0]],\"o\":[[-2.272,6.578],[0,0],[0,0]],\"v\":[[14.929,-8.872],[2.361,8.872],[-14.929,8.872]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.602,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[37.186,137.628],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 6\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":6,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,-10.576],[0,0],[0,0],[16.334,-3.969],[0,-13.951],[0,0],[0,0]],\"o\":[[-10.576,0],[0,0],[0,0],[-0.529,2.564],[-14.369,3.491],[0,0],[0,0],[0,0]],\"v\":[[21.675,-85.366],[2.526,-66.217],[2.526,34.263],[2.619,34.263],[-18.885,60.884],[-40.824,85.366],[40.824,85.366],[40.824,-66.217]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.192156877705,0.403921598547,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[41.142,85.616],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 7\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":7,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":169,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":13,\"ty\":4,\"nm\":\"shoulderLine\",\"parent\":17,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":0,\"s\":[5.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":9,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":17,\"s\":[5.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":26,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":34,\"s\":[5.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":43,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":51,\"s\":[5.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":60,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":68,\"s\":[5.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":77,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":85,\"s\":[5.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":93,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":101,\"s\":[5.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":110,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":118,\"s\":[5.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":127,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":135,\"s\":[5.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":144,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":152,\"s\":[5.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":161,\"s\":[0]},{\"t\":169,\"s\":[5.6]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[22.442,10.454,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[16.495,2.928,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[1.785,-4.428],[0,0]],\"o\":[[0,0],[-4.428,-1.785],[0,0],[0,0]],\"v\":[[7.362,-5.811],[7.362,-5.811],[-3.888,-1.025],[-7.362,7.595]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0,0.094117654539,0.121568634931,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.709,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[9.134,9.368],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":169,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":14,\"ty\":4,\"nm\":\"arm\",\"parent\":13,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[8.262,22.304,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[55.264,4.001,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-8.331,4.362],[-2.675,6.85],[0,0],[8.885,-4.652],[18.685,6.056],[0,0]],\"o\":[[5.517,-2.889],[0,0],[-4.003,10.474],[-12.091,6.331],[0,0],[14.649,4.747]],\"v\":[[4.854,-3.103],[17.181,-17.768],[31.513,-12.678],[11.911,10.376],[-31.513,11.712],[-28.726,-1.342]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.823529471603,0.443137284821,0.403921598547,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[31.764,18.019],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":169,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":15,\"ty\":4,\"nm\":\"hand\",\"parent\":14,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":-6,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":2,\"s\":[7.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":10,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":18,\"s\":[7.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":27,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":35,\"s\":[7.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":44,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":52,\"s\":[7.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":61,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":69,\"s\":[7.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":78,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":86,\"s\":[7.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":94,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":102,\"s\":[7.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":111,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":119,\"s\":[7.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":128,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":136,\"s\":[7.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":145,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":153,\"s\":[7.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":162,\"s\":[0]},{\"t\":170,\"s\":[7.8]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[3.378,24.666,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[25.472,14.208,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[3.056,1.3],[0.2,-0.537],[0,0],[-0.465,-0.209],[0,0],[0.076,-0.28],[0.317,0.096],[0,0],[0.091,-0.397],[0,0],[-0.339,-0.118],[0,0],[0.137,-0.354],[-0.281,-1.315],[-0.473,-0.153],[0,0],[-0.864,6.788],[0,0]],\"o\":[[-0.524,-0.223],[0,0],[-0.177,0.478],[0,0],[0.265,0.119],[-0.087,0.32],[0,0],[-0.39,-0.118],[0,0],[-0.081,0.35],[0,0],[0.358,0.125],[-1.361,3.523],[0.104,0.487],[0,0],[0,0],[0.875,-6.875],[0,0]],\"v\":[[-1.375,-9.288],[-2.7,-8.713],[-2.709,-8.691],[-2.198,-7.471],[1.827,-5.666],[2.154,-4.973],[1.415,-4.564],[-11.449,-8.46],[-12.339,-7.945],[-12.36,-7.856],[-11.906,-7.033],[-3.342,-4.038],[-2.934,-3.165],[-3.708,4.506],[-2.775,5.537],[9.653,9.511],[18.805,4.293],[12.441,-3.544]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.823529471603,0.443137284821,0.403921598547,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[12.691,9.762],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":169,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":16,\"ty\":4,\"nm\":\"phone\",\"parent\":15,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[14.144,6.397,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[24.31,17.234,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-0.747,1.152],[0,0],[1.152,0.747],[0,0],[0.747,-1.152],[-1.152,-0.747],[0,0]],\"o\":[[0,0],[0.747,-1.152],[0,0],[-1.152,-0.746],[-0.746,1.152],[0,0],[1.152,0.747]],\"v\":[[13.313,8.628],[13.313,8.628],[12.579,5.19],[-9.876,-9.363],[-13.314,-8.63],[-12.58,-5.191],[9.875,9.362]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.913725550034,0.850980451995,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[14.31,10.36],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":169,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":17,\"ty\":4,\"nm\":\"chest\",\"parent\":21,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":-17,\"s\":[-3.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":-8.598,\"s\":[2.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":-0.195,\"s\":[-3.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":8.207,\"s\":[2.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":16.609,\"s\":[-3.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":25.011,\"s\":[2.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":33.413,\"s\":[-3.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":41.815,\"s\":[2.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":50.218,\"s\":[-3.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":58.62,\"s\":[2.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":67.022,\"s\":[-3.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":75.425,\"s\":[2.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":83.827,\"s\":[-3.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":92.229,\"s\":[2.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":100.631,\"s\":[-3.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":109.033,\"s\":[2.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":117.436,\"s\":[-3.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":125.838,\"s\":[2.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":134.24,\"s\":[-3.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":142.643,\"s\":[2.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":151.045,\"s\":[-3.8]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":159.447,\"s\":[2.8]},{\"t\":167.849609375,\"s\":[-3.8]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[197.391,64.976,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[36.208,58.384,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[10.194,0],[0,-10.194]],\"o\":[[0,0],[0,0],[0,-10.194],[-10.194,0],[0,0]],\"v\":[[-18.458,29.134],[18.458,29.134],[18.458,-10.676],[0,-29.134],[-18.458,-10.676]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.913725550034,0.850980451995,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[18.708,29.384],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":-25,\"op\":234,\"st\":-9,\"bm\":0},{\"ddd\":0,\"ind\":18,\"ty\":4,\"nm\":\"eye\",\"parent\":19,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[9.996,25.066,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[1.564,1.858,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":26,\"s\":[100,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":27.92,\"s\":[100,8,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":31.76,\"s\":[100,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":69,\"s\":[100,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":70.92,\"s\":[100,8,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":74.76,\"s\":[100,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":112,\"s\":[100,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":113.92,\"s\":[100,8,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":117.76,\"s\":[100,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":155,\"s\":[100,100,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0]},\"t\":156.92,\"s\":[100,8,100]},{\"t\":160.759765625,\"s\":[100,100,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.385,0.741],[0.514,-0.266],[-0.385,-0.741],[-0.513,0.266]],\"o\":[[-0.385,-0.741],[-0.513,0.267],[0.385,0.741],[0.513,-0.267]],\"v\":[[0.929,-0.483],[-0.698,-1.342],[-0.929,0.483],[0.697,1.342]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[1.564,1.858],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":-13,\"op\":184,\"st\":3,\"bm\":0},{\"ddd\":0,\"ind\":19,\"ty\":4,\"nm\":\"head\",\"parent\":17,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":-14.899,\"s\":[-4.9]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":-6.497,\"s\":[6.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":1.905,\"s\":[8.2]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":10.308,\"s\":[6.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":18.71,\"s\":[-4.9]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":27.111,\"s\":[6.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":35.514,\"s\":[8.2]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":43.916,\"s\":[6.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":52.318,\"s\":[-4.9]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":60.721,\"s\":[6.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":69.123,\"s\":[8.2]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":77.525,\"s\":[6.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":85.928,\"s\":[-4.9]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":94.33,\"s\":[6.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":102.731,\"s\":[8.2]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":111.134,\"s\":[6.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":119.536,\"s\":[-4.9]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":127.938,\"s\":[6.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":136.341,\"s\":[8.2]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":144.743,\"s\":[6.6]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":153.146,\"s\":[-4.9]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":161.548,\"s\":[6.6]},{\"t\":169.9501953125,\"s\":[8.2]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":-15.95,\"s\":[14.864,-7.952,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":-7.548,\"s\":[19.464,-12.252,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":0.854,\"s\":[18.964,-7.952,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":9.257,\"s\":[19.464,-12.252,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":17.659,\"s\":[14.864,-7.952,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":26.062,\"s\":[19.464,-12.252,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":34.464,\"s\":[18.964,-7.952,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":42.866,\"s\":[19.464,-12.252,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":51.269,\"s\":[14.864,-7.952,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":59.67,\"s\":[19.464,-12.252,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":68.072,\"s\":[18.964,-7.952,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":76.475,\"s\":[19.464,-12.252,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":84.877,\"s\":[14.864,-7.952,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":93.279,\"s\":[19.464,-12.252,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":101.682,\"s\":[18.964,-7.952,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":110.084,\"s\":[19.464,-12.252,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":118.486,\"s\":[14.864,-7.952,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":126.889,\"s\":[19.464,-12.252,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":135.29,\"s\":[18.964,-7.952,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":143.692,\"s\":[19.464,-12.252,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":152.095,\"s\":[14.864,-7.952,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":160.497,\"s\":[19.464,-12.252,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"t\":168.8994140625,\"s\":[18.964,-7.952,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[22.056,33.55,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[4.668,9.656],[1.367,10.637],[-4.668,-9.656],[-1.368,-10.637]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.913725550034,0.850980451995,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[16.64,13.944],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.312,2.928],[-2.928,1.313],[-1.312,-2.928],[2.928,-1.312]],\"o\":[[-1.312,-2.928],[2.928,-1.312],[1.312,2.928],[-2.928,1.313]],\"v\":[[-5.301,2.376],[-2.376,-5.302],[5.301,-2.376],[2.376,5.301]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.913725550034,0.850980451995,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[19.658,24.091],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.837,1.543],[-1.544,0.838],[-0.837,-1.543],[1.543,-0.838]],\"o\":[[-0.837,-1.543],[1.543,-0.837],[0.838,1.543],[-1.544,0.837]],\"v\":[[-2.795,1.516],[-1.516,-2.795],[2.794,-1.516],[1.516,2.795]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[20.705,23.622],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.413,-1.43],[-2.71,-6.973],[-0.232,-0.141],[-5.454,1.905],[5.608,8.007],[5.614,-8.178]],\"o\":[[0,0],[0.096,0.246],[0,0],[0,0],[-5.692,-8.124],[-0.791,1.151]],\"v\":[[-15.123,-1.36],[-2.714,7.178],[1.514,6.323],[9.893,11.499],[9.515,-4.956],[-13.28,-5.226]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[20.102,16.282],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 4\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-5.394,-11.564],[0,0],[0,0],[1.021,-1.346],[-1.371,0.218],[-0.18,0.026],[-2.455,-0.24],[-2.357,1.417],[-0.891,0.633],[0,0],[-0.613,0.407],[3.473,6.501]],\"o\":[[0,0.001],[0,0],[0,0],[-1.021,1.346],[0.193,-0.031],[0.606,0.859],[1.3,0.127],[0.849,-0.417],[0,0],[0.527,-0.374],[6.434,-4.279],[-14.462,-13.861]],\"v\":[[-10.684,6.48],[-10.684,6.482],[-10.684,6.48],[-10.758,10.563],[-9.133,12.75],[-8.574,12.666],[-1.582,19.205],[5.393,16.094],[7.95,14.49],[7.957,14.485],[9.645,13.312],[11.429,-5.471]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.823529471603,0.443137284821,0.403921598547,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[16.328,19.582],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 5\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":5,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":-25,\"op\":234,\"st\":-9,\"bm\":0},{\"ddd\":0,\"ind\":20,\"ty\":4,\"nm\":\"hair\",\"parent\":19,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":-13.85,\"s\":[-4.5]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":-5.447,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":2.955,\"s\":[-8.2]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":11.357,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":19.76,\"s\":[-4.5]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":28.162,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":36.564,\"s\":[-8.2]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":44.967,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":53.369,\"s\":[-4.5]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":61.771,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":70.173,\"s\":[-8.2]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":78.575,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":86.978,\"s\":[-4.5]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":95.38,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":103.782,\"s\":[-8.2]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":112.185,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":120.587,\"s\":[-4.5]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":128.989,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":137.391,\"s\":[-8.2]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":145.793,\"s\":[0]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":154.195,\"s\":[-4.5]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":162.598,\"s\":[0]},{\"t\":171,\"s\":[-8.2]}],\"ix\":10},\"p\":{\"a\":0,\"k\":[26.257,14.683,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0,6.016,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[2.434,0],[1.527,0.482],[1.893,3.642],[-1.237,3.914],[-0.589,0.999],[1.135,0.358],[1.893,3.642],[-2.609,4.418],[1.137,0.36],[1.893,3.642],[-1.237,3.913],[-1.068,1.397],[0,0],[0,0],[-3.913,-1.237],[-1.894,-3.643],[1.236,-3.914],[0.592,-1.002],[-2.536,-4.879],[1.237,-3.914],[0.592,-1.002],[-2.536,-4.878],[3.496,-4.589],[0,0],[0,0]],\"o\":[[-1.556,0],[-3.913,-1.236],[-1.893,-3.642],[0.358,-1.134],[-1.156,-0.092],[-3.914,-1.237],[-2.535,-4.878],[-1.16,-0.091],[-3.914,-1.236],[-1.893,-3.641],[0.545,-1.727],[0,0],[0,0],[3.641,-1.892],[3.914,1.237],[1.892,3.64],[-0.36,1.137],[5.116,0.401],[1.893,3.642],[-0.359,1.137],[5.116,0.402],[2.832,5.449],[0,0],[0,0],[-2.222,1.154]],\"v\":[[15.069,44.584],[10.421,43.863],[1.416,36.298],[0.398,24.581],[1.825,21.375],[-1.62,20.701],[-10.625,13.135],[-10.204,-1.786],[-13.66,-2.462],[-22.665,-10.027],[-23.683,-21.742],[-21.242,-26.455],[-27.928,-39.32],[-22.138,-42.33],[-10.422,-43.347],[-1.415,-35.781],[-0.397,-24.065],[-1.831,-20.849],[10.624,-12.621],[11.642,-0.904],[10.21,2.312],[22.664,10.541],[21.237,26.962],[27.928,39.835],[22.138,42.845]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[28.178,44.835],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":-25,\"op\":234,\"st\":-9,\"bm\":0},{\"ddd\":0,\"ind\":21,\"ty\":4,\"nm\":\"leg02\",\"parent\":23,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[217.531,-55.083,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[95.352,57.077,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[65.432,104.512],[1.505,104.512]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.602,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[1.589,-0.823],[0,0],[-2.056,1.978],[-1.043,-1.455]],\"o\":[[-2.532,1.312],[0,0],[1.289,-1.24],[1.042,1.455]],\"v\":[[4.495,1.384],[-6.283,5.124],[0.719,-3.884],[5.241,-3.138]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.603,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[52.312,64.837],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0],[0,0],[-5.709,1.434],[-4.649,-3.611],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0],[2.392,-5.379],[5.71,-1.433],[0,0],[0,0]],\"v\":[[50.039,54.613],[-26.057,-4.487],[-38.535,23.578],[-73.53,8.02],[-51.12,-42.387],[-38.287,-53.18],[-21.877,-49.731],[73.53,24.367]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.082352941176,0.082352941176,0.086274509804,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[116.856,54.863],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 3\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-1.589,-0.823],[0,0],[2.056,1.978],[1.043,-1.455]],\"o\":[[2.532,1.312],[0,0],[-1.289,-1.24],[-1.042,1.455]],\"v\":[[-4.495,1.384],[6.283,5.124],[-0.719,-3.884],[-5.241,-3.138]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.603,\"ix\":5},\"lc\":2,\"lj\":2,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[39.318,64.837],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 4\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-1.722,-7.702],[0,0],[-6.447,2.878],[-0.886,0]],\"o\":[[0,0],[1.924,-6.153],[0.85,-0.129],[8.221,0]],\"v\":[[16.021,6.729],[-16.021,6.729],[-3.397,-6.521],[-0.794,-6.729]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.602,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[17.526,97.782],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 5\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":5,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[48.821,74.228],[39.409,74.228]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.602,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 6\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":6,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[46.113,78.496],[36.701,78.496]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.602,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 7\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":7,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[42.42,82.763],[33.008,82.763]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.602,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 8\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":8,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[6.311,-2.954],[0,0]],\"o\":[[-2.272,6.578],[0,0],[0,0]],\"v\":[[14.929,-8.872],[2.361,8.872],[-14.929,8.872]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":0.602,\"ix\":5},\"lc\":2,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[37.186,79.692],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 9\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":9,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,-13.952],[0,0],[0,0],[0,0],[17.454,-4.241]],\"o\":[[0,0],[0,0],[0,0],[0,0],[-14.369,3.492]],\"v\":[[-40.705,25.688],[40.705,25.688],[40.705,-25.688],[2.791,-25.688],[-18.766,1.205]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.082352941176,0.082352941176,0.086274509804,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[41.024,87.359],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 10\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":10,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":-13,\"op\":184,\"st\":3,\"bm\":0},{\"ddd\":0,\"ind\":22,\"ty\":0,\"nm\":\"eyeballJones\",\"refId\":\"comp_1\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[592.5,377.5,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[302,238,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[50,50,100],\"ix\":6,\"l\":2}},\"ao\":0,\"w\":1920,\"h\":1080,\"ip\":0,\"op\":212,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":23,\"ty\":4,\"nm\":\"block\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[480.897,376.874,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[205.105,93.148,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[204.855,92.898],[-204.855,92.898],[-204.855,-92.898],[204.855,-92.898]],\"c\":true},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0.588235294118,1,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[205.105,93.148],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":0,\"op\":169,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":24,\"ty\":3,\"nm\":\"Null 4\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":0,\"ix\":11},\"r\":{\"a\":0,\"k\":71,\"ix\":10},\"p\":{\"a\":0,\"k\":[276.75,158.25,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0,0,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[39.2,39.2,100],\"ix\":6,\"l\":2}},\"ao\":0,\"ip\":0,\"op\":169,\"st\":0,\"bm\":0},{\"ddd\":0,\"ind\":25,\"ty\":4,\"nm\":\"triaDisappearSparkPop\",\"parent\":24,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[-22.5,0.5,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0,0,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[12.312,-3.75],[42.75,-21.25]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,0.862745157878,0.501960784314,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":7,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tm\",\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":145,\"s\":[0]},{\"t\":157.48046875,\"s\":[100]}],\"ix\":1},\"e\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.078],\"y\":[1]},\"o\":{\"x\":[0.447],\"y\":[0]},\"t\":145,\"s\":[0]},{\"t\":157.48046875,\"s\":[100]}],\"ix\":2},\"o\":{\"a\":0,\"k\":0,\"ix\":3},\"m\":1,\"ix\":3,\"nm\":\"Trim Paths 1\",\"mn\":\"ADBE Vector Filter - Trim\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[9.062,15.5],[31.5,43.75]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,0.862745157878,0.501960784314,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":7,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tm\",\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":145.96,\"s\":[0]},{\"t\":158.4404296875,\"s\":[100]}],\"ix\":1},\"e\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.078],\"y\":[1]},\"o\":{\"x\":[0.447],\"y\":[0]},\"t\":145.96,\"s\":[0]},{\"t\":158.4404296875,\"s\":[100]}],\"ix\":2},\"o\":{\"a\":0,\"k\":0,\"ix\":3},\"m\":1,\"ix\":3,\"nm\":\"Trim Paths 1\",\"mn\":\"ADBE Vector Filter - Trim\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 2\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":2,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[-7.188,15],[-30.5,42.75]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,0.862745157878,0.501960784314,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":7,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tm\",\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":145,\"s\":[0]},{\"t\":157.48046875,\"s\":[100]}],\"ix\":1},\"e\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.078],\"y\":[1]},\"o\":{\"x\":[0.447],\"y\":[0]},\"t\":145,\"s\":[0]},{\"t\":157.48046875,\"s\":[100]}],\"ix\":2},\"o\":{\"a\":0,\"k\":0,\"ix\":3},\"m\":1,\"ix\":3,\"nm\":\"Trim Paths 1\",\"mn\":\"ADBE Vector Filter - Trim\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 3\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":3,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[-10.188,-0.25],[-44.25,-16.5]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,0.862745157878,0.501960784314,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":7,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tm\",\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":145.96,\"s\":[0]},{\"t\":158.4404296875,\"s\":[100]}],\"ix\":1},\"e\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.078],\"y\":[1]},\"o\":{\"x\":[0.447],\"y\":[0]},\"t\":145.96,\"s\":[0]},{\"t\":158.4404296875,\"s\":[100]}],\"ix\":2},\"o\":{\"a\":0,\"k\":0,\"ix\":3},\"m\":1,\"ix\":3,\"nm\":\"Trim Paths 1\",\"mn\":\"ADBE Vector Filter - Trim\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 4\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":4,\"mn\":\"ADBE Vector Group\",\"hd\":false},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0]],\"o\":[[0,0],[0,0]],\"v\":[[-0.438,-14.5],[-0.25,-47]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,0.862745157878,0.501960784314,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":7,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":4,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tm\",\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"t\":145,\"s\":[0]},{\"t\":157.48046875,\"s\":[100]}],\"ix\":1},\"e\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.078],\"y\":[1]},\"o\":{\"x\":[0.447],\"y\":[0]},\"t\":145,\"s\":[0]},{\"t\":157.48046875,\"s\":[100]}],\"ix\":2},\"o\":{\"a\":0,\"k\":0,\"ix\":3},\"m\":1,\"ix\":3,\"nm\":\"Trim Paths 1\",\"mn\":\"ADBE Vector Filter - Trim\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 5\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":5,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":145,\"op\":161,\"st\":-83,\"bm\":0},{\"ddd\":0,\"ind\":26,\"ty\":4,\"nm\":\"triStroke02 Outlines\",\"parent\":28,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[146.5,87.5,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[55.5,57.5,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"ef\":[{\"ty\":28,\"nm\":\"Set Matte\",\"np\":8,\"mn\":\"ADBE Set Matte3\",\"ix\":1,\"en\":1,\"ef\":[{\"ty\":10,\"nm\":\"Take Matte From Layer\",\"mn\":\"ADBE Set Matte3-0001\",\"ix\":1,\"v\":{\"a\":0,\"k\":28,\"ix\":1}},{\"ty\":7,\"nm\":\"Use For Matte\",\"mn\":\"ADBE Set Matte3-0002\",\"ix\":2,\"v\":{\"a\":0,\"k\":4,\"ix\":2}},{\"ty\":7,\"nm\":\"Invert Matte\",\"mn\":\"ADBE Set Matte3-0003\",\"ix\":3,\"v\":{\"a\":0,\"k\":0,\"ix\":3}},{\"ty\":7,\"nm\":\"If Layer Sizes Differ\",\"mn\":\"ADBE Set Matte3-0004\",\"ix\":4,\"v\":{\"a\":0,\"k\":1,\"ix\":4}},{\"ty\":7,\"nm\":\"Composite Matte with Original\",\"mn\":\"ADBE Set Matte3-0005\",\"ix\":5,\"v\":{\"a\":0,\"k\":1,\"ix\":5}},{\"ty\":7,\"nm\":\"Premultiply Matte Layer\",\"mn\":\"ADBE Set Matte3-0006\",\"ix\":6,\"v\":{\"a\":0,\"k\":1,\"ix\":6}}]}],\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[-34.28,-20.88],[0,0],[-5.291,15.344]],\"o\":[[0,0],[0,0],[25.083,15.276],[0,0],[5.291,-15.344]],\"v\":[[40.797,-73.416],[9.869,-51.615],[-15.524,36.339],[49.804,4.01],[75.521,-43.438]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"tm\",\"s\":{\"a\":0,\"k\":0,\"ix\":1},\"e\":{\"a\":0,\"k\":90,\"ix\":2},\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":26,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":136,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":143,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":144,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":254,\"s\":[360]},{\"t\":261,\"s\":[360]}],\"ix\":3},\"m\":1,\"ix\":2,\"nm\":\"Trim Paths 1\",\"mn\":\"ADBE Vector Filter - Trim\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":5,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[55.626,57.432],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":8,\"op\":161,\"st\":8,\"bm\":0},{\"ddd\":0,\"ind\":27,\"ty\":4,\"nm\":\"triStroke01 Outlines\",\"parent\":28,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[109.5,134,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[54.5,54,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"ef\":[{\"ty\":28,\"nm\":\"Set Matte\",\"np\":8,\"mn\":\"ADBE Set Matte3\",\"ix\":1,\"en\":1,\"ef\":[{\"ty\":10,\"nm\":\"Take Matte From Layer\",\"mn\":\"ADBE Set Matte3-0001\",\"ix\":1,\"v\":{\"a\":0,\"k\":28,\"ix\":1}},{\"ty\":7,\"nm\":\"Use For Matte\",\"mn\":\"ADBE Set Matte3-0002\",\"ix\":2,\"v\":{\"a\":0,\"k\":4,\"ix\":2}},{\"ty\":7,\"nm\":\"Invert Matte\",\"mn\":\"ADBE Set Matte3-0003\",\"ix\":3,\"v\":{\"a\":0,\"k\":0,\"ix\":3}},{\"ty\":7,\"nm\":\"If Layer Sizes Differ\",\"mn\":\"ADBE Set Matte3-0004\",\"ix\":4,\"v\":{\"a\":0,\"k\":1,\"ix\":4}},{\"ty\":7,\"nm\":\"Composite Matte with Original\",\"mn\":\"ADBE Set Matte3-0005\",\"ix\":5,\"v\":{\"a\":0,\"k\":1,\"ix\":5}},{\"ty\":7,\"nm\":\"Premultiply Matte Layer\",\"mn\":\"ADBE Set Matte3-0006\",\"ix\":6,\"v\":{\"a\":0,\"k\":1,\"ix\":6}}]}],\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[31.998,17.625],[0,0],[-25.086,48.889],[0,0],[17.272,-12]],\"o\":[[-31.998,-17.625],[0,0],[18.14,-35.351],[0,0],[-17.272,12]],\"v\":[[108.149,66.279],[48.802,48.307],[-23.716,-7.334],[-39.844,-48.307],[-81.842,-43.701]],\"c\":false},\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"tm\",\"s\":{\"a\":0,\"k\":0,\"ix\":1},\"e\":{\"a\":0,\"k\":90,\"ix\":2},\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":8,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":98.809,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":131,\"s\":[360]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":131.826,\"s\":[0]},{\"i\":{\"x\":[0.833],\"y\":[0.833]},\"o\":{\"x\":[0.167],\"y\":[0.167]},\"t\":222.635,\"s\":[360]},{\"t\":228.4130859375,\"s\":[360]}],\"ix\":3},\"m\":1,\"ix\":2,\"nm\":\"Trim Paths 1\",\"mn\":\"ADBE Vector Filter - Trim\",\"hd\":false},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[1,1,1,1],\"ix\":3},\"o\":{\"a\":0,\"k\":100,\"ix\":4},\"w\":{\"a\":0,\"k\":5,\"ix\":5},\"lc\":1,\"lj\":1,\"ml\":10,\"bm\":0,\"nm\":\"Stroke 1\",\"mn\":\"ADBE Vector Graphic - Stroke\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[54.655,54.127],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":3,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":8,\"op\":161,\"st\":8,\"bm\":0},{\"ddd\":0,\"ind\":28,\"ty\":4,\"nm\":\"tri Outlines\",\"parent\":24,\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0],\"y\":[1]},\"o\":{\"x\":[0.811],\"y\":[0]},\"t\":10,\"s\":[180.8]},{\"i\":{\"x\":[0.278],\"y\":[1]},\"o\":{\"x\":[0.553],\"y\":[0]},\"t\":29.843,\"s\":[-3.5]},{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.167],\"y\":[0]},\"t\":54,\"s\":[0]},{\"i\":{\"x\":[0.296],\"y\":[1]},\"o\":{\"x\":[1],\"y\":[0]},\"t\":135,\"s\":[0]},{\"t\":149,\"s\":[189]}],\"ix\":10},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0,\"y\":1},\"o\":{\"x\":0.811,\"y\":0},\"t\":8.157,\"s\":[-22,15.5,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.474,\"y\":1},\"o\":{\"x\":0.553,\"y\":0},\"t\":28,\"s\":[-22,-9.7,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.167,\"y\":0},\"t\":52.157,\"s\":[-22,8,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":90,\"s\":[-22,31.8,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"t\":136,\"s\":[-22,-21.8,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"t\":149,\"s\":[-22,0.2,0]}],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[131,111.1,0],\"ix\":1,\"l\":2},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0,0,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.811,0.811,0.333],\"y\":[0,0,0]},\"t\":8.843,\"s\":[6,6,100]},{\"i\":{\"x\":[0.474,0.474,0.667],\"y\":[1,1,1]},\"o\":{\"x\":[0.553,0.553,0.333],\"y\":[0,0,0]},\"t\":28.843,\"s\":[115.1,115.1,100]},{\"i\":{\"x\":[0.833,0.833,0.833],\"y\":[1,1,1]},\"o\":{\"x\":[0.167,0.167,0.167],\"y\":[0,0,0]},\"t\":53,\"s\":[100,100,100]},{\"i\":{\"x\":[0.296,0.296,0.833],\"y\":[1,1,1]},\"o\":{\"x\":[1,1,0.167],\"y\":[0,0,0]},\"t\":136,\"s\":[100,100,100]},{\"t\":150,\"s\":[0,0,100]}],\"ix\":6,\"l\":2}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":1,\"k\":[{\"i\":{\"x\":0,\"y\":1},\"o\":{\"x\":0.811,\"y\":0},\"t\":11,\"s\":[{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[-6.259,12.447],[0.281,51.763],[29.698,22.775]],\"c\":true}]},{\"i\":{\"x\":0.474,\"y\":1},\"o\":{\"x\":0.553,\"y\":0},\"t\":30.843,\"s\":[{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[-6.563,-110.679],[-147.291,106.436],[150.956,100.784]],\"c\":true}]},{\"i\":{\"x\":0.833,\"y\":0.833},\"o\":{\"x\":0.167,\"y\":0},\"t\":55,\"s\":[{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[0.075,-91.124],[-130.674,90.915],[130.674,90.839]],\"c\":true}]},{\"i\":{\"x\":0.833,\"y\":1},\"o\":{\"x\":0.167,\"y\":0.167},\"t\":97,\"s\":[{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[22.307,-99.965],[-123.79,67.756],[134.211,104.418]],\"c\":true}]},{\"i\":{\"x\":0.296,\"y\":1},\"o\":{\"x\":1,\"y\":0},\"t\":134,\"s\":[{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[0.075,-91.124],[-130.674,90.915],[130.674,90.839]],\"c\":true}]},{\"t\":148,\"s\":[{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[-18.213,-65.953],[-43.034,68.934],[81.566,23.694]],\"c\":true}]}],\"ix\":2},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\",\"hd\":false},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,0.862745157878,0.501960784314,1],\"ix\":4},\"o\":{\"a\":0,\"k\":100,\"ix\":5},\"r\":1,\"bm\":0,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\",\"hd\":false},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[131.028,91.567],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"bm\":0,\"ix\":1,\"mn\":\"ADBE Vector Group\",\"hd\":false}],\"ip\":8,\"op\":161,\"st\":8,\"bm\":0},{\"ddd\":0,\"ind\":29,\"ty\":0,\"nm\":\"cloudAnimated\",\"refId\":\"comp_2\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[447.5,54.25,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0,0,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"w\":980,\"h\":685,\"ip\":0,\"op\":81,\"st\":-88,\"bm\":0},{\"ddd\":0,\"ind\":30,\"ty\":0,\"nm\":\"cloudAnimated\",\"refId\":\"comp_2\",\"sr\":1,\"ks\":{\"o\":{\"a\":0,\"k\":100,\"ix\":11},\"r\":{\"a\":0,\"k\":0,\"ix\":10},\"p\":{\"a\":0,\"k\":[447.5,54.25,0],\"ix\":2,\"l\":2},\"a\":{\"a\":0,\"k\":[0,0,0],\"ix\":1,\"l\":2},\"s\":{\"a\":0,\"k\":[100,100,100],\"ix\":6,\"l\":2}},\"ao\":0,\"w\":980,\"h\":685,\"ip\":81,\"op\":169,\"st\":81,\"bm\":0}],\"markers\":[]}\r\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport Audio_default from 'assets/Audio.png';\nimport { interactionContext } from 'components/lib/TextAndImage/interactionContext';\nimport EditMarker from 'components/UI/EditMarker';\nimport { keyframes } from 'emotion';\nimport useIntersectionObserver from 'hooks/useIntersectionObserver';\nimport {\n  Fragment as _,\n  useContext,\n  useEffect,\n  useLayoutEffect,\n  useRef,\n  useState,\n} from 'react';\nimport { useSelector } from 'react-redux';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport { CHAMELEON_CACHE_v1 } from 'services/imageCache';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport { useCachedResource } from 'services/useCachedResource';\nimport { colors, getButtonFocus } from 'styles/variables';\nimport Transcript from './Transcript';\n\nimport SVG from 'components/lib/SVG';\nimport ReactBodymovin from 'react-lottie';\nimport imagePlaceholder from 'assets/Character A.png';\n\nimport headphonesWoman from 'assets/animations/headphonesWoman.js';\n\nconst AUDIO_FILE_DEFAULT =\n  'https://freesound.org/data/previews/542/542450_5674468-lq.mp3';\n\nconst { lPink } = colors;\n\nconst frameSelected = keyframes`\n  from {\n    width: 50%;\n    height: 50%;\n  }\n  to {\n    width: 75%;\n    height: 75%;\n  }\n`;\n\nlet audioResizeDelay;\n\nconst AudioImage = ({ src, description, maxHeight }) => {\n  const cachedImgSrc = useCachedResource(CHAMELEON_CACHE_v1, src);\n\n  return cachedImgSrc ? (\n    <img\n      src={cachedImgSrc}\n      alt={description}\n      css={css({\n        ...(maxHeight && {\n          maxHeight: 'calc(100vh - 230px)',\n        }),\n      })}\n    />\n  ) : null;\n};\n\nconst ShowTranscriptBtn = ({\n  id,\n  setShowTranscript,\n  showTranscriptFontSize = 12,\n  showTranscriptFontColor = '#000',\n  showTranscriptLabel = 'Show transcript',\n}) => {\n  return (\n    <button\n      id={`show-transcript-${id}`}\n      css={css`\n        width: 100%;\n        // position: absolute;\n        // left: 50%;\n        // bottom: -25px;\n        font-size: ${showTranscriptFontSize}px;\n\n        // transform: translateX(-50%);\n        border: none;\n        outline: none;\n        background: transparent;\n\n        text-decoration: underline;\n        text-align: center;\n        cursor: pointer;\n        color: ${showTranscriptFontColor};\n        &:focus {\n          ${getButtonFocus('#2684FF')}\n        }\n      `}\n      onClick={() => {\n        setShowTranscript(true);\n      }}\n      aria-label=\"Show transcript\"\n    >\n      {showTranscriptLabel}\n    </button>\n  );\n};\n\nconst Audio = ({ id, children, ...props }: { id?: any; children?: any }) => {\n  const { entry, init } = useIntersectionObserver(true) as any;\n\n  const block: any = getBlockById(id);\n\n  const {\n    audioSrc = AUDIO_FILE_DEFAULT,\n    imgSrc = Audio_default,\n    description = '',\n    useTranscript,\n    showTranscriptFontSize = 12,\n    showTranscriptFontColor = '#000',\n    viewingTranscriptUnlocksInteraction = false,\n    showTranscriptLabel = 'Show transcript',\n    maxHeight = false,\n  } = block.props;\n\n  // console.log({\n  //   useTranscript,\n  //   showTranscriptFontSize,\n  //   showTranscriptFontColor,\n  //   showTranscriptLabel,\n  // });\n\n  const [isPlaying, setIsPlaying] = useState(false);\n  const [showTranscript, setShowTranscript] = useState(false);\n\n  const focusedNodeId = useSelector((state: any) => {\n    return state.focusedNodeId;\n  });\n\n  const selected = focusedNodeId === id;\n  const context: any = useContext(interactionContext);\n  const mounted = useRef(false);\n  const audioInteraction = useRef<HTMLDivElement>(null);\n  const audio = useRef<any>(null);\n  const audioPausedByUser = useRef<boolean>(false);\n  const player = useRef(null);\n\n  let autoPlay = block.props.autoPlay || false;\n  if (audioPausedByUser.current) {\n    autoPlay = false;\n  }\n\n  //\n  let transcript;\n  if (children) {\n    [transcript] = children;\n  }\n\n  useLayoutEffect(() => {\n    if (!mounted.current) {\n      init([audioInteraction.current], {\n        threshold: 0.25,\n      });\n    }\n\n    mounted.current = true;\n\n    return () => {\n      mounted.current = false;\n    };\n  }, []);\n\n  useEffect(() => {\n    if (window.dev && window.dev()) {\n      return;\n    }\n\n    if (!audio.current) {\n      return;\n    }\n\n    const onEnded = () => {\n      console.log('audio ended');\n      unlockInteraction(context.id);\n    };\n\n    audio.current.addEventListener('ended', onEnded);\n\n    return () => {\n      audio.current.removeEventListener('ended', onEnded);\n    };\n  }, []);\n\n  useEffect(() => {\n    if (viewingTranscriptUnlocksInteraction && showTranscript) {\n      unlockInteraction(context.id);\n    }\n  }, [showTranscript]);\n\n  if (window.dev && !window.dev() && entry) {\n    if (entry.isIntersecting) {\n      //\n      if (autoPlay && !isPlaying) {\n        //  && isPlaying\n        audio.current.currentTime = 0;\n        audio.current.play();\n        // setIsPlaying(true);\n      }\n    } else {\n      audio.current.pause();\n      // setIsPlaying(false);\n    }\n  }\n\n  const updatedProps = {\n    ...block.props,\n    src: JSON.stringify(headphonesWoman),\n  };\n\n  let Img =\n    imgSrc === Audio_default ? (\n      <ReactBodymovin\n        options={{\n          loop: true,\n          autoplay: true,\n          prerender: true,\n          renderer: 'svg',\n          animationData: headphonesWoman,\n        }}\n      />\n    ) : (\n      <AudioImage\n        src={imgSrc}\n        description={description}\n        maxHeight={maxHeight}\n      />\n    );\n\n  Img = (\n    <AudioImage\n      src={imgSrc === Audio_default ? imagePlaceholder : imgSrc}\n      description={description}\n      maxHeight={maxHeight}\n    />\n  );\n\n  const showTranscriptBtn = (\n    <div>\n      <ShowTranscriptBtn\n        id={id}\n        setShowTranscript={setShowTranscript}\n        showTranscriptFontSize={showTranscriptFontSize}\n        showTranscriptFontColor={showTranscriptFontColor}\n        showTranscriptLabel={showTranscriptLabel}\n      />\n    </div>\n  );\n\n  return (\n    <_>\n      {window.dev() ? (\n        <div\n          css={css`\n            position: relative;\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n            align-items: center;\n            left: 0px;\n            top: 0px;\n            width: 100%;\n            height: 100%;\n          `}\n        >\n          {Img}\n\n          <div\n            css={css({\n              width: '100%',\n              padding: 10,\n            })}\n          >\n            <audio\n              ref={audio}\n              src={audioSrc}\n              controls\n              css={css({\n                width: '100%',\n              })}\n            />\n          </div>\n          {useTranscript && showTranscriptBtn}\n          <div\n            css={css`\n              position: absolute;\n              display: flex;\n              justify-content: center;\n              align-items: center;\n              left: 0px;\n              top: 0px;\n              width: 100%;\n              height: 100%;\n              pointer-events: none;\n            `}\n          >\n            <div\n              css={css`\n                position: relative;\n                display: flex;\n                justify-content: center;\n                align-items: center;\n\n                width: 100%;\n                height: 100%;\n\n                box-shadow: ${selected\n                  ? `0 0 0 1px ${lPink}`\n                  : '0 0 0 1px lightGrey'};\n                transition: all 0.2s;\n                pointer-events: all;\n                cursor: pointer;\n                &:hover {\n                  ${!selected && `box-shadow: 0 0 0 1px ${lPink};`}\n                }\n\n                ${selected && 'pointer-events: none;'}\n              `}\n              onClick={e => {\n                e.stopPropagation();\n                if (selected) return;\n                setCurrentBlock({ id });\n              }}\n            >\n              {!selected && <EditMarker />}\n            </div>\n          </div>\n        </div>\n      ) : (\n        <div\n          ref={audioInteraction}\n          css={css`\n            position: relative;\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n            align-items: center;\n            width: 100%;\n            height: 100%;\n          `}\n        >\n          {Img}\n\n          <div\n            css={css({\n              width: '100%',\n              padding: 10,\n            })}\n          >\n            <audio\n              ref={audio}\n              src={audioSrc}\n              onPlay={() => {\n                setIsPlaying(true);\n              }}\n              onPause={() => {\n                audioPausedByUser.current = true;\n                setIsPlaying(false);\n              }}\n              css={css({\n                width: '100%',\n              })}\n              autoPlay={autoPlay && entry && entry.isIntersecting}\n              controls\n            />\n          </div>\n          {useTranscript && showTranscriptBtn}\n        </div>\n      )}\n\n      {showTranscript && (\n        <Transcript\n          onClose={() => {\n            const tick = setInterval(() => {\n              const showTranscriptButtonElement: any = document.querySelector(\n                `#show-transcript-${id}`\n              );\n\n              if (showTranscriptButtonElement) {\n                showTranscriptButtonElement.focus();\n\n                clearInterval(tick);\n              }\n            }, 0);\n\n            setShowTranscript(false);\n          }}\n        >\n          {transcript}\n        </Transcript>\n      )}\n    </_>\n  );\n};\n\nexport default Audio;\n","import Audio from './Audio';\n\nexport default Audio;\n","/** @jsx jsx */\n\nimport { Fragment as _ } from 'react';\nimport { keyframes } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport EditMarker from 'components/UI/EditMarker';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport { colors } from 'styles/variables';\nimport Image from 'assets/Image.svg';\n\nconst { lPink } = colors;\n\nconst frameSelected = keyframes`\n  from {\n    width: 50%;\n    height: 50%;\n  }\n  to {\n    width: 75%;\n    height: 75%;\n  }\n`;\n\nconst EditWrapper0 = ({ id, selected, children }) => {\n  return (\n    <div\n      css={css`\n        position: relative;\n        width: 100%;\n        height: 100%;\n        box-shadow: ${selected ? `0 0 0 1px ${lPink}` : '0 0 0 1px lightGrey'};\n        transition: box-shadow 0.2s;\n        cursor: pointer;\n\n        &:hover {\n          ${!selected && `box-shadow: 0 0 0 1px ${lPink};`}\n        }\n\n        * {\n          pointer-events: ${selected ? 'auto' : 'none'};\n        }\n\n        @media (max-width: 768px) {\n          padding: 5px;\n        }\n      `}\n      onClick={e => {\n        e.stopPropagation();\n\n        if (selected) return;\n\n        setCurrentBlock({ id });\n      }}\n    >\n      {children}\n\n      {!selected && <EditMarker />}\n    </div>\n  );\n};\n\nconst EditWrapper1 = ({ id, selected, children }) => {\n  return (\n    <div\n      css={css`\n        position: absolute;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        left: 0px;\n        top: 0px;\n        width: 100%;\n        height: 100%;\n      `}\n    >\n      {children}\n      <div\n        css={css`\n          position: absolute;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          left: 0px;\n          top: 0px;\n          width: 100%;\n          height: 100%;\n        `}\n      >\n        <div\n          css={css`\n          position: relative;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          width: ${selected ? '75%' : '50%'};\n          height: ${selected ? '75%' : '50%'};\n\n          ${selected && `animation: ${frameSelected} 0.2s forwards;`}\n        \n          ${!selected &&\n            `\n          background: rgba(0, 0, 0, 0.1);\n        `}\n          \n          box-shadow: ${\n            selected ? `0 0 0 1px ${lPink}` : '0 0 0 1px lightGrey'\n          };\n          transition: all 0.2s;\n          cursor: pointer;\n          &:hover {\n            ${!selected && `box-shadow: 0 0 0 1px ${lPink};`}\n          }\n        `}\n          onClick={e => {\n            e.stopPropagation();\n\n            if (selected) return;\n\n            setCurrentBlock({ id });\n          }}\n        >\n          {!selected && <img src={Image} style={{ width: 50, opacity: 0.5 }} />}\n\n          {!selected && <EditMarker />}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nconst EditWrapper2 = ({ id, selected, children }) => {\n  return children;\n};\n\nexport { EditWrapper0, EditWrapper1, EditWrapper2 };\n","export default {\"v\":\"4.6.8\",\"fr\":25,\"ip\":0,\"op\":201,\"w\":180,\"h\":180,\"nm\":\"visualDesignerIcon\",\"ddd\":0,\"assets\":[{\"id\":\"comp_1\",\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":4,\"nm\":\"i-dot Outlines\",\"ks\":{\"o\":{\"a\":0,\"k\":100},\"r\":{\"a\":0,\"k\":0},\"p\":{\"a\":0,\"k\":[108.5,57.5,0]},\"a\":{\"a\":0,\"k\":[2.5,3.5,0]},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,0.667]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0.333]},\"n\":[\"0p667_1_0p333_0\",\"0p667_1_0p333_0\",\"0p667_0p667_0p333_0p333\"],\"t\":33,\"s\":[0,0,100],\"e\":[120,120,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,0.667]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0.333]},\"n\":[\"0p667_1_0p333_0\",\"0p667_1_0p333_0\",\"0p667_0p667_0p333_0p333\"],\"t\":38,\"s\":[120,120,100],\"e\":[90,90,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,0.667]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0.333]},\"n\":[\"0p667_1_0p333_0\",\"0p667_1_0p333_0\",\"0p667_0p667_0p333_0p333\"],\"t\":43,\"s\":[90,90,100],\"e\":[105,105,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,0.667]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0.333]},\"n\":[\"0p667_1_0p333_0\",\"0p667_1_0p333_0\",\"0p667_0p667_0p333_0p333\"],\"t\":48,\"s\":[105,105,100],\"e\":[97.5,97.5,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,0.667]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0.333]},\"n\":[\"0p667_1_0p333_0\",\"0p667_1_0p333_0\",\"0p667_0p667_0p333_0p333\"],\"t\":53,\"s\":[97.5,97.5,100],\"e\":[100,100,100]},{\"t\":58}]}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-0.021,0.01],[0.001,-1.224],[0.808,-0.443],[0.021,-0.01],[0,1.224],[-0.808,0.443]],\"o\":[[0.78,-0.38],[0,1.263],[-0.021,0.012],[-0.78,0.38],[0.001,-1.263],[0.02,-0.011]],\"v\":[[0.064,-2.248],[1.488,-0.815],[-0.002,2.216],[-0.064,2.248],[-1.489,0.816],[0.002,-2.215]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7218.622,7232.345],[7181.378,7232.345],[7181.378,-7167.655],[-7218.622,-7167.655]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7218.622,-7167.655],[7181.378,-7167.655],[7181.378,7232.345],[-7218.622,7232.345]],\"c\":true}},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"ix\":2,\"mn\":\"ADBE Vector Group\"},{\"ty\":\"mm\",\"mm\":4,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\"},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1]},\"o\":{\"a\":0,\"k\":100},\"r\":1,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[2.622,3.655],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":4,\"cix\":2,\"ix\":1,\"mn\":\"ADBE Vector Group\"}],\"ip\":33,\"op\":234,\"st\":33,\"bm\":0,\"sr\":1},{\"ddd\":0,\"ind\":2,\"ty\":4,\"nm\":\"in Outlines\",\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"n\":[\"0p833_1_0p333_0\"],\"t\":16,\"s\":[0],\"e\":[100]},{\"t\":23}]},\"r\":{\"a\":0,\"k\":0},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"n\":\"0p667_1_0p333_0\",\"t\":16,\"s\":[113.625,75.65,0],\"e\":[113.625,63.85,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"n\":\"0p667_1_0p333_0\",\"t\":23,\"s\":[113.625,63.85,0],\"e\":[113.625,70.75,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"n\":\"0p667_1_0p333_0\",\"t\":30,\"s\":[113.625,70.75,0],\"e\":[113.625,66.85,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"n\":\"0p667_1_0p333_0\",\"t\":37,\"s\":[113.625,66.85,0],\"e\":[113.625,68.25,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"t\":44}]},\"a\":{\"a\":0,\"k\":[9,12,0]},\"s\":{\"a\":0,\"k\":[100,100,100]}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-0.037,0.018],[-0.001,-2.768],[0.175,-0.988],[0,0],[-0.003,-0.302],[-0.31,0.151],[-0.481,2.277],[0,0],[1.29,-0.703],[0.047,-0.023],[0,1.794],[-0.112,0.621],[0,0],[-0.004,0.372],[0.764,-0.373],[0.026,-0.014],[0.355,-2.347],[0,0],[0,0],[0,0],[1.236,-0.677],[0.048,-0.024],[-0.003,1.888],[-0.091,0.611],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-0.369],[-0.323,0.068],[-0.039,0.019],[-0.767,3.005],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.29,0.712]],\"o\":[[1.331,-0.649],[-0.003,0.732],[0,0],[-0.065,0.434],[-0.001,0.641],[0.354,-0.19],[0,0],[-0.567,3.32],[-0.049,0.027],[-1.409,0.687],[0.003,-0.527],[0,0],[0.088,-0.477],[0.001,-1.215],[-0.025,0.012],[-1.03,0.56],[0,0],[0,0],[0,0],[-0.72,2.188],[-0.05,0.027],[-1.384,0.674],[-0.004,-0.498],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.109,0.685],[0,0.623],[0.017,-0.003],[0.387,-0.189],[0,0],[0,0],[0,0],[0,0],[0,0],[0.657,-2.206],[0.038,-0.02]],\"v\":[[4.225,-10.25],[6.627,-7.235],[6.385,-4.689],[5.682,-0.5],[5.573,0.587],[6.05,1.315],[7.302,-1.749],[8.262,-1.717],[5.375,4.129],[5.231,4.204],[3.145,2.141],[3.302,0.407],[4.023,-3.898],[4.135,-5.151],[2.899,-6.485],[2.823,-6.446],[0.763,-2.054],[-0.637,7.201],[-3.087,8.543],[-2.648,5.631],[-5.603,10.148],[-5.751,10.225],[-7.783,8.094],[-7.654,6.357],[-6.533,-1.153],[-8.262,-0.203],[-7.736,-3.421],[-3.583,-5.692],[-5.225,5.05],[-5.379,6.651],[-4.855,7.281],[-4.77,7.249],[-2.26,3.038],[-1.177,-4.077],[-2.928,-3.125],[-2.4,-6.343],[1.34,-8.389],[0.856,-4.798],[4.112,-10.192]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7223.185,7222.922],[7176.815,7222.922],[7176.815,-7177.078],[-7223.185,-7177.078]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7223.185,-7177.078],[7176.815,-7177.078],[7176.815,7222.922],[-7223.185,7222.922]],\"c\":true}},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"ix\":2,\"mn\":\"ADBE Vector Group\"},{\"ty\":\"mm\",\"mm\":4,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\"},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1]},\"o\":{\"a\":0,\"k\":100},\"r\":1,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[9.184,12.078],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":4,\"cix\":2,\"ix\":1,\"mn\":\"ADBE Vector Group\"}],\"ip\":16,\"op\":217,\"st\":16,\"bm\":0,\"sr\":1},{\"ddd\":0,\"ind\":3,\"ty\":4,\"nm\":\"inDesignLogo Outlines\",\"ks\":{\"o\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.833],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"n\":[\"0p833_1_0p333_0\"],\"t\":13,\"s\":[0],\"e\":[100]},{\"t\":20}]},\"r\":{\"a\":0,\"k\":0},\"p\":{\"a\":1,\"k\":[{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"n\":\"0p667_1_0p333_0\",\"t\":13,\"s\":[112.5,71.9,0],\"e\":[112.5,60.1,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"n\":\"0p667_1_0p333_0\",\"t\":20,\"s\":[112.5,60.1,0],\"e\":[112.5,67,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"n\":\"0p667_1_0p333_0\",\"t\":27,\"s\":[112.5,67,0],\"e\":[112.5,63.1,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"i\":{\"x\":0.667,\"y\":1},\"o\":{\"x\":0.333,\"y\":0},\"n\":\"0p667_1_0p333_0\",\"t\":34,\"s\":[112.5,63.1,0],\"e\":[112.5,64.5,0],\"to\":[0,0,0],\"ti\":[0,0,0]},{\"t\":41}]},\"a\":{\"a\":0,\"k\":[12.5,24.5,0]},\"s\":{\"a\":0,\"k\":[100,100,100]}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[1.214,-0.666],[0,0],[0.03,-0.014],[0,1.8],[0,0],[-1.215,0.666],[0,0],[-0.03,0.014],[0,-1.8]],\"o\":[[0,1.837],[0,0],[-0.03,0.016],[-1.178,0.575],[0,0],[0,-1.845],[0,0],[0.03,-0.016],[1.178,-0.575],[0,0]],\"v\":[[12.163,8.427],[9.955,12.973],[-9.973,23.866],[-10.063,23.912],[-12.178,21.734],[-12.163,-8.426],[-9.955,-12.972],[9.973,-23.865],[10.063,-23.911],[12.178,-21.733]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.42,0.749,0.733,1]},\"o\":{\"a\":0,\"k\":100},\"r\":1,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[12.652,24.495],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"ix\":1,\"mn\":\"ADBE Vector Group\"}],\"ip\":13,\"op\":188,\"st\":-13,\"bm\":0,\"sr\":1},{\"ddd\":0,\"ind\":4,\"ty\":4,\"nm\":\"diamond Outlines\",\"ks\":{\"o\":{\"a\":0,\"k\":100},\"r\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"n\":[\"0p667_1_0p333_0\"],\"t\":0,\"s\":[23.2],\"e\":[-10]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"n\":[\"0p667_1_0p333_0\"],\"t\":8.6,\"s\":[-10],\"e\":[5]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"n\":[\"0p667_1_0p333_0\"],\"t\":17.2,\"s\":[5],\"e\":[-2.5]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"n\":[\"0p667_1_0p333_0\"],\"t\":25.8,\"s\":[-2.5],\"e\":[1]},{\"i\":{\"x\":[0.667],\"y\":[1]},\"o\":{\"x\":[0.333],\"y\":[0]},\"n\":[\"0p667_1_0p333_0\"],\"t\":34.4,\"s\":[1],\"e\":[0]},{\"t\":43}]},\"p\":{\"a\":0,\"k\":[73.564,109.013,0]},\"a\":{\"a\":0,\"k\":[15.564,43.013,0]},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,0.667]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0.333]},\"n\":[\"0p667_1_0p333_0\",\"0p667_1_0p333_0\",\"0p667_0p667_0p333_0p333\"],\"t\":0,\"s\":[0,0,100],\"e\":[120,120,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,0.667]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0.333]},\"n\":[\"0p667_1_0p333_0\",\"0p667_1_0p333_0\",\"0p667_0p667_0p333_0p333\"],\"t\":7.679,\"s\":[120,120,100],\"e\":[90,90,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,0.667]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0.333]},\"n\":[\"0p667_1_0p333_0\",\"0p667_1_0p333_0\",\"0p667_0p667_0p333_0p333\"],\"t\":15.357,\"s\":[90,90,100],\"e\":[105,105,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,0.667]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0.333]},\"n\":[\"0p667_1_0p333_0\",\"0p667_1_0p333_0\",\"0p667_0p667_0p333_0p333\"],\"t\":23.036,\"s\":[105,105,100],\"e\":[97.5,97.5,100]},{\"i\":{\"x\":[0.667,0.667,0.667],\"y\":[1,1,0.667]},\"o\":{\"x\":[0.333,0.333,0.333],\"y\":[0,0,0.333]},\"n\":[\"0p667_1_0p333_0\",\"0p667_1_0p333_0\",\"0p667_0p667_0p333_0p333\"],\"t\":30.714,\"s\":[97.5,97.5,100],\"e\":[100,100,100]},{\"t\":38.392578125}]}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[2.263,14.131],[5.534,-8.208],[11.996,-11.675]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[0.669,16.23],[-4.234,-2.97],[4.136,-7.459]],\"c\":true}},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ind\":2,\"ty\":\"sh\",\"ix\":3,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[-12.093,1.246],[-5.631,-2.221],[-1.008,15.885]],\"c\":true}},\"nm\":\"Path 3\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ind\":3,\"ty\":\"sh\",\"ix\":4,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[-7.681,-10.253],[-6.076,-3.969],[-11.955,-0.815]],\"c\":true}},\"nm\":\"Path 4\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ind\":4,\"ty\":\"sh\",\"ix\":5,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[5.738,-18.419],[4.45,-9.614],[-4.678,-4.718],[-6.502,-11.854]],\"c\":true}},\"nm\":\"Path 5\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ind\":5,\"ty\":\"sh\",\"ix\":6,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0]],\"v\":[[6.981,-18.117],[11.727,-13.517],[5.847,-10.364]],\"c\":true}},\"nm\":\"Path 6\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ind\":6,\"ty\":\"sh\",\"ix\":7,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.136,0.103],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.008,0.238]],\"o\":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.09,-0.215],[-0.009,-0.279]],\"v\":[[13.745,-14.324],[6.544,-20.838],[-7.938,-12.753],[-13.982,0.589],[-13.986,1.86],[0.513,20.838],[0.725,20.824],[0.822,20.781],[1.046,20.61],[1.352,20.104],[13.841,-13.023],[13.978,-13.731]],\"c\":true}},\"nm\":\"Path 7\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"mm\",\"mm\":1,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\"},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7182.818,7202.326],[7217.182,7202.326],[7217.182,-7197.674],[-7182.818,-7197.674]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7182.818,-7197.674],[7217.182,-7197.674],[7217.182,7202.326],[-7182.818,7202.326]],\"c\":true}},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"ix\":9,\"mn\":\"ADBE Vector Group\"},{\"ty\":\"mm\",\"mm\":4,\"nm\":\"Merge Paths 2\",\"mn\":\"ADBE Vector Filter - Merge\"},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.431,0.753,0.737,1]},\"o\":{\"a\":0,\"k\":100},\"r\":1,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[14.818,21.674],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":11,\"cix\":2,\"ix\":1,\"mn\":\"ADBE Vector Group\"}],\"ip\":0,\"op\":201,\"st\":0,\"bm\":0,\"sr\":1}]}],\"layers\":[{\"ddd\":0,\"ind\":1,\"ty\":0,\"nm\":\"visualDesignerIconsAppear\",\"refId\":\"comp_1\",\"ks\":{\"o\":{\"a\":0,\"k\":100},\"r\":{\"a\":0,\"k\":0},\"p\":{\"a\":0,\"k\":[90,90,0]},\"a\":{\"a\":0,\"k\":[90,90,0]},\"s\":{\"a\":0,\"k\":[100,100,100]}},\"ao\":0,\"w\":180,\"h\":180,\"ip\":31,\"op\":232,\"st\":31,\"bm\":0,\"sr\":1},{\"ddd\":0,\"ind\":2,\"ty\":0,\"nm\":\"visualDesignerIconsAppear\",\"refId\":\"comp_1\",\"ks\":{\"o\":{\"a\":0,\"k\":34},\"r\":{\"a\":0,\"k\":0},\"p\":{\"a\":0,\"k\":[80,85.75,0]},\"a\":{\"a\":0,\"k\":[90,90,0]},\"s\":{\"a\":0,\"k\":[100,100,100]}},\"ao\":0,\"w\":180,\"h\":180,\"ip\":35,\"op\":236,\"st\":35,\"bm\":0,\"sr\":1},{\"ddd\":0,\"ind\":4,\"ty\":4,\"nm\":\"button Outlines\",\"ks\":{\"o\":{\"a\":0,\"k\":100},\"r\":{\"a\":0,\"k\":0},\"p\":{\"a\":0,\"k\":[129,112.5,0]},\"a\":{\"a\":0,\"k\":[8,4.5,0]},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0,0,0.667],\"y\":[1,1,0.667]},\"o\":{\"x\":[1,1,0.333],\"y\":[0,0,0.333]},\"n\":[\"0_1_1_0\",\"0_1_1_0\",\"0p667_0p667_0p333_0p333\"],\"t\":27,\"s\":[0,0,100],\"e\":[100,100,100]},{\"t\":46}]}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-1.524,-0.887],[1.534,-0.884],[0,0],[1.52,0.888],[-1.535,0.883]],\"o\":[[1.534,-0.883],[1.523,0.887],[0,0],[-1.533,0.884],[-1.523,-0.887],[0,0]],\"v\":[[0.073,-3.231],[5.604,-3.228],[5.574,-0.024],[-0.082,3.232],[-5.604,3.224],[-5.583,0.025]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7238.927,7177.39],[7161.073,7177.39],[7161.073,-7222.61],[-7238.927,-7222.61]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7238.927,-7222.61],[7161.073,-7222.61],[7161.073,7177.39],[-7238.927,7177.39]],\"c\":true}},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"ix\":2,\"mn\":\"ADBE Vector Group\"},{\"ty\":\"mm\",\"mm\":4,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\"},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1]},\"o\":{\"a\":0,\"k\":100},\"r\":1,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[7.927,4.611],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":4,\"cix\":2,\"ix\":1,\"mn\":\"ADBE Vector Group\"}],\"ip\":27,\"op\":228,\"st\":27,\"bm\":0,\"sr\":1},{\"ddd\":0,\"ind\":5,\"ty\":4,\"nm\":\"screen Outlines\",\"ks\":{\"o\":{\"a\":0,\"k\":100},\"r\":{\"a\":0,\"k\":0},\"p\":{\"a\":0,\"k\":[87.5,88.5,0]},\"a\":{\"a\":0,\"k\":[70.5,41.5,0]},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0,0,0.667],\"y\":[1,1,0.667]},\"o\":{\"x\":[1,1,0.333],\"y\":[0,0,0.333]},\"n\":[\"0_1_1_0\",\"0_1_1_0\",\"0p667_0p667_0p333_0p333\"],\"t\":19,\"s\":[0,0,100],\"e\":[100,100,100]},{\"t\":38}]}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0.949,0.552],[0,0],[0.955,-0.55],[0,0],[-0.954,-0.556],[0,0],[-0.956,0.55],[0,0]],\"o\":[[0,0],[-0.956,-0.557],[0,0],[-0.957,0.549],[0,0],[0.949,0.553],[0,0],[0.959,-0.55]],\"v\":[[68.86,0.857],[-1.055,-39.887],[-4.567,-39.897],[-68.842,-2.891],[-68.857,-0.854],[1.059,39.891],[4.579,39.896],[68.853,2.891]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7197.736,7201.393],[7202.264,7201.393],[7202.264,-7198.607],[-7197.736,-7198.607]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7197.736,-7198.607],[7202.264,-7198.607],[7202.264,7201.393],[-7197.736,7201.393]],\"c\":true}},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"ix\":2,\"mn\":\"ADBE Vector Group\"},{\"ty\":\"mm\",\"mm\":4,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\"},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1]},\"o\":{\"a\":0,\"k\":100},\"r\":1,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[70.736,41.607],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":4,\"cix\":2,\"ix\":1,\"mn\":\"ADBE Vector Group\"}],\"ip\":19,\"op\":220,\"st\":19,\"bm\":0,\"sr\":1},{\"ddd\":0,\"ind\":6,\"ty\":4,\"nm\":\"face Outlines\",\"ks\":{\"o\":{\"a\":0,\"k\":100},\"r\":{\"a\":0,\"k\":0},\"p\":{\"a\":0,\"k\":[91.5,90,0]},\"a\":{\"a\":0,\"k\":[79.5,46,0]},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0,0,0.667],\"y\":[1,1,0.667]},\"o\":{\"x\":[1,1,0.333],\"y\":[0,0,0.333]},\"n\":[\"0_1_1_0\",\"0_1_1_0\",\"0p667_0p667_0p333_0p333\"],\"t\":11,\"s\":[0,0,100],\"e\":[100,100,100]},{\"t\":30}]}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[-3.854,-2.248],[0,0],[3.887,-2.238],[0,0],[3.864,2.252],[0,0],[-3.879,2.234]],\"o\":[[3.89,-2.239],[0,0],[3.857,2.249],[0,0],[-3.88,2.233],[0,0],[-3.857,-2.248],[0,0]],\"v\":[[-13.96,-42.752],[0.122,-42.73],[75.018,0.916],[72.492,7.629],[11.48,42.756],[-2.597,42.739],[-75.019,0.531],[-74.971,-7.627]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7201.47,7199.939],[7198.53,7199.939],[7198.53,-7200.061],[-7201.47,-7200.061]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7201.47,-7200.061],[7198.53,-7200.061],[7198.53,7199.939],[-7201.47,7199.939]],\"c\":true}},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"ix\":2,\"mn\":\"ADBE Vector Group\"},{\"ty\":\"mm\",\"mm\":4,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\"},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.129,0.129,0.137,1]},\"o\":{\"a\":0,\"k\":100},\"r\":1,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[79.47,46.06],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":4,\"cix\":2,\"ix\":1,\"mn\":\"ADBE Vector Group\"}],\"ip\":11,\"op\":212,\"st\":11,\"bm\":0,\"sr\":1},{\"ddd\":0,\"ind\":7,\"ty\":4,\"nm\":\"base Outlines\",\"ks\":{\"o\":{\"a\":0,\"k\":100},\"r\":{\"a\":0,\"k\":0},\"p\":{\"a\":0,\"k\":[91,94.5,0]},\"a\":{\"a\":0,\"k\":[78,47.5,0]},\"s\":{\"a\":0,\"k\":[100,100,100]}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":1,\"k\":[{\"i\":{\"x\":0,\"y\":1},\"o\":{\"x\":1,\"y\":0},\"n\":\"0_1_1_0\",\"t\":30,\"s\":[{\"i\":[[0.001,2.156],[0,0],[0.956,-0.55],[0.001,1.47],[-0.004,-2.155],[-1.918,-1.117],[0,0],[-3.88,2.234],[0,0],[0.004,1.451]],\"o\":[[0.001,1.451],[-0.956,-0.557],[0,0],[0.003,2.156],[0.001,1.471],[0,0],[3.864,2.25],[0,0],[2.521,-1.45],[-0.002,-2.154]],\"v\":[[77.415,-1.496],[-4.322,-46.118],[-7.834,-46.127],[-77.427,-8.304],[-77.417,-8.714],[-74.539,-4.656],[-2.117,37.551],[11.959,37.568],[72.969,2.443],[77.424,-1.906]],\"c\":true}],\"e\":[{\"i\":[[0.001,2.156],[0,0],[0.956,-0.55],[0.001,1.47],[-0.004,-2.155],[-1.918,-1.117],[0,0],[-3.88,2.234],[0,0],[0.004,1.451]],\"o\":[[0.001,1.451],[-0.956,-0.557],[0,0],[0.003,2.156],[0.001,1.471],[0,0],[3.864,2.25],[0,0],[2.521,-1.45],[-0.002,-2.154]],\"v\":[[77.415,-1.496],[-4.322,-46.118],[-7.834,-46.127],[-77.427,-8.304],[-77.417,-1.839],[-74.539,2.219],[-2.117,44.426],[11.959,44.443],[72.969,9.318],[77.424,4.969]],\"c\":true}]},{\"t\":46}]},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7201.002,7195.162],[7198.998,7195.162],[7198.998,-7204.838],[-7201.002,-7204.838]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7201.002,-7204.838],[7198.998,-7204.838],[7198.998,7195.162],[-7201.002,7195.162]],\"c\":true}},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"ix\":2,\"mn\":\"ADBE Vector Group\"},{\"ty\":\"mm\",\"mm\":4,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\"},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.843,0.906,0.969,1]},\"o\":{\"a\":0,\"k\":100},\"r\":1,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[78.002,47.838],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":4,\"cix\":2,\"ix\":1,\"mn\":\"ADBE Vector Group\"}],\"ip\":30,\"op\":231,\"st\":30,\"bm\":0,\"sr\":1},{\"ddd\":0,\"ind\":8,\"ty\":4,\"nm\":\"backCircle Outlines 2\",\"ks\":{\"o\":{\"a\":0,\"k\":100},\"r\":{\"a\":0,\"k\":0},\"p\":{\"a\":0,\"k\":[89.5,90,0]},\"a\":{\"a\":0,\"k\":[73.5,73,0]},\"s\":{\"a\":1,\"k\":[{\"i\":{\"x\":[0,0,0.667],\"y\":[1,1,0.667]},\"o\":{\"x\":[1,1,0.333],\"y\":[0,0,0.333]},\"n\":[\"0_1_1_0\",\"0_1_1_0\",\"0p667_0p667_0p333_0p333\"],\"t\":0,\"s\":[0,0,100],\"e\":[100,100,100]},{\"t\":19}]}},\"ao\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[-2.998,38.259],[-38.259,-2.998],[2.997,-38.259],[38.258,2.998]],\"o\":[[2.998,-38.259],[38.259,2.998],[-2.998,38.259],[-38.259,-2.998]],\"v\":[[-69.273,-5.428],[5.428,-69.274],[69.274,5.428],[-5.428,69.274]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"gr\",\"it\":[{\"ind\":0,\"ty\":\"sh\",\"ix\":1,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7199.5,7200.309],[7200.5,7200.309],[7200.5,-7199.691],[-7199.5,-7199.691]],\"c\":true}},\"nm\":\"Path 1\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ind\":1,\"ty\":\"sh\",\"ix\":2,\"ks\":{\"a\":0,\"k\":{\"i\":[[0,0],[0,0],[0,0],[0,0]],\"o\":[[0,0],[0,0],[0,0],[0,0]],\"v\":[[-7199.5,-7199.691],[7200.5,-7199.691],[7200.5,7200.309],[-7199.5,7200.309]],\"c\":true}},\"nm\":\"Path 2\",\"mn\":\"ADBE Vector Shape - Group\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[0,0],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":2,\"cix\":2,\"ix\":2,\"mn\":\"ADBE Vector Group\"},{\"ty\":\"mm\",\"mm\":4,\"nm\":\"Merge Paths 1\",\"mn\":\"ADBE Vector Filter - Merge\"},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0.914,0.914,0.949,1]},\"o\":{\"a\":0,\"k\":100},\"r\":1,\"nm\":\"Fill 1\",\"mn\":\"ADBE Vector Graphic - Fill\"},{\"ty\":\"tr\",\"p\":{\"a\":0,\"k\":[73.5,72.691],\"ix\":2},\"a\":{\"a\":0,\"k\":[0,0],\"ix\":1},\"s\":{\"a\":0,\"k\":[100,100],\"ix\":3},\"r\":{\"a\":0,\"k\":0,\"ix\":6},\"o\":{\"a\":0,\"k\":100,\"ix\":7},\"sk\":{\"a\":0,\"k\":0,\"ix\":4},\"sa\":{\"a\":0,\"k\":0,\"ix\":5},\"nm\":\"Transform\"}],\"nm\":\"Group 1\",\"np\":4,\"cix\":2,\"ix\":1,\"mn\":\"ADBE Vector Group\"}],\"ip\":0,\"op\":201,\"st\":0,\"bm\":0,\"sr\":1}]}","import SVG from './SVG';\n\nexport default SVG;\n","/** @jsx jsx */\n\nimport { Fragment as _, useRef, useEffect } from 'react';\nimport { keyframes } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport { connect } from 'react-redux';\nimport EditMarker from 'components/UI/EditMarker';\nimport { colors } from 'styles/variables';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport { EditWrapper0, EditWrapper1, EditWrapper2 } from './EditWrappers';\nimport svgPlaceholder from 'assets/animations/placeholder.js';\nimport isIE from 'services/isIE';\n\nimport ReactBodymovin from 'react-lottie';\n\nconst { lPink } = colors;\n\nconst SVG = ({ id, focusedNodeId, src, editWrapperType = 0, ...rest }) => {\n  let animationData;\n  // this : src != undefined seemed to break it ?\n  if (src) {\n    try {\n      animationData = JSON.parse(src);\n    } catch {\n      animationData = svgPlaceholder;\n    }\n  } else {\n    animationData = svgPlaceholder;\n  }\n\n  const selected = focusedNodeId === id;\n\n  const svg = useRef<HTMLSpanElement>(null);\n  const reactBodyMovin = useRef<any>(null);\n\n  const bodymovinOptions = {\n    loop: true,\n    autoplay: true,\n    prerender: true,\n    renderer: 'svg',\n    animationData,\n  };\n\n  const hasAnimationData = Object.keys(animationData).length > 0;\n\n  useEffect(() => {\n    if (!isIE()) return;\n    if (!svg.current) return;\n\n    const svg_ = svg.current.querySelector('svg')!;\n\n    if (!svg_) {\n      return;\n    }\n\n    svg_.removeAttribute('width');\n    svg_.removeAttribute('height');\n\n    const onResize = () => {\n      svg_.style.width = '100%';\n      svg_.style.height = `${window.innerHeight / 2}px`;\n    };\n    onResize();\n    window.addEventListener('resize', onResize);\n\n    return () => window.removeEventListener('resize', onResize);\n  });\n\n  useEffect(() => {\n    if (!reactBodyMovin.current) {\n      return;\n    }\n\n    const { el } = reactBodyMovin.current;\n\n    ['title', 'role', 'aria-label', 'tabindex'].forEach(entry => {\n      el.removeAttribute(entry);\n    });\n\n    // console.log(el);\n  }, []);\n\n  // console.log('svg editWrapperType :', editWrapperType, rest);\n\n  const EditWrapper = window.dev()\n    ? ({ children }) => {\n        return [\n          <EditWrapper0 id={id} selected={selected}>\n            {children}\n          </EditWrapper0>,\n          <EditWrapper1 id={id} selected={selected}>\n            {children}\n          </EditWrapper1>,\n          <EditWrapper2 id={id} selected={selected}>\n            {children}\n          </EditWrapper2>,\n        ][editWrapperType];\n        // editWrapperType === 0 ? (\n        //   <EditWrapper0 id={id} selected={selected}>\n        //     {children}\n        //   </EditWrapper0>\n        // ) : (\n        //   <EditWrapper1 id={id} selected={selected}>\n        //     {children}\n        //   </EditWrapper1>\n        // )\n      }\n    : ({ children }) => <_>{children}</_>;\n\n  return (\n    <span\n      ref={svg}\n      css={css`\n        width: 100%;\n        height: 100%;\n        svg {\n          max-height: 50vh !important;\n        }\n      `}\n    >\n      <EditWrapper>\n        {hasAnimationData ? (\n          <ReactBodymovin ref={reactBodyMovin} options={bodymovinOptions} />\n        ) : (\n          ''\n        )}\n      </EditWrapper>\n    </span>\n  );\n};\n\nexport default connect(\n  ({ focusedNodeId }: { focusedNodeId: string | number }, { id }: any) => {\n    // const { src } = getBlockById(id).props!;\n    return {\n      focusedNodeId,\n      // ...(focusedNodeId === id && { [Math.random()]: '' }),\n      // src,\n    };\n  }\n)(SVG);\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  createContext,\n  useContext,\n  useState,\n  useEffect,\n  useRef,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { useSelector } from 'react-redux';\nimport { State } from 'store/store';\nimport setBlockProps from 'services/apiHelpers/setBlockProps';\n\nexport interface IMediaContext {\n  id?: string;\n  onMediaChange: () => void | null;\n  imgPlaceholderIndex?: number;\n  isAdditionalMedia?: boolean;\n}\n\nexport const MediaContext = createContext({\n  onMediaChange: null,\n}) as any;\n\ninterface IMediaProps {\n  id: string;\n  onMediaChange?: (props: any) => void;\n\n  children: any;\n}\n\nconst Media = (props: IMediaProps) => {\n  const mediaContext = useContext(MediaContext) as IMediaContext;\n\n  const { children } = props;\n\n  const onMediaChange =\n    props?.onMediaChange || mediaContext.onMediaChange || null;\n\n  const { parent, child } = useSelector((state: State) => {\n    const parent = state.blocks[props.id];\n    return {\n      parent,\n      child: parent?.props?.child,\n    };\n  });\n\n  const isSafeToCallOnMediaChange = useRef(false);\n\n  useEffect(() => {\n    if (!children[child]) {\n      console.log(\n        `children[( index = ) ${child}] does not exist on legacy block. resetting media component to image`\n      );\n      setBlockProps(parent, { child: 1 });\n    }\n  }, [child]);\n\n  useEffect(() => {\n    //\n    if (!onMediaChange || typeof onMediaChange !== 'function') {\n      return;\n    }\n\n    if (isSafeToCallOnMediaChange.current) {\n      onMediaChange(child);\n    }\n\n    isSafeToCallOnMediaChange.current = true;\n\n    return () => {\n      //\n    };\n  }, [child]);\n\n  if (!children[child]) {\n    // return null if child doesn't exist. reset in effect\n    return null;\n  }\n\n  return (\n    <MediaContext.Provider\n      value={{\n        ...props,\n      }}\n    >\n      {children[child]}\n    </MediaContext.Provider>\n  );\n};\n\nexport default Media;\n","import Media from './Media';\nimport { MediaContext, IMediaContext } from './Media';\n\nexport default Media;\nexport { MediaContext, IMediaContext };\n","import getStore from 'services/getStore';\n\nconst store = getStore();\n\nconst shouldUpdate = () => {\n  if (window.dev && !window.dev()) {\n    return true;\n  }\n\n  const { focusedNodeId, blocks } = store.getState();\n  const { type } = blocks[focusedNodeId] || {};\n\n  const typeIsText = type ? type.toLowerCase() === 'text' : undefined;\n\n  return typeIsText;\n};\n\nexport default shouldUpdate;\n","/** @jsx jsx */\n\nimport React, { Fragment as _ } from 'react';\nimport { keyframes } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport EditMarker from 'components/UI/EditMarker';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport { colors } from 'styles/variables';\nimport embedIcon from 'assets/Embed.svg';\n\nconst { lPink } = colors;\n\nconst frameSelected = keyframes`\n  from {\n    width: 50%;\n    height: 50%;\n  }\n  to {\n    width: 75%;\n    height: 75%;\n  }\n`;\n\nconst frameNotSelected = keyframes`\nfrom {\n  width: 75%;\n  height: 75%;\n}\nto {\n  width: 50%;\n  height: 50%;\n}\n`;\n\nconst EditWrapper0 = ({ id, mediaParentId, selected, children }) => {\n  return (\n    <div\n      css={css`\n        position: relative;\n        width: 100%;\n        height: 100%;\n        box-shadow: ${selected ? `0 0 0 1px ${lPink}` : '0 0 0 1px lightGrey'};\n        transition: box-shadow 0.2s;\n        cursor: pointer;\n\n        &:hover {\n          ${!selected && `box-shadow: 0 0 0 1px ${lPink};`}\n        }\n\n        * {\n          pointer-events: ${selected ? 'auto' : 'none'};\n        }\n\n        @media (max-width: 768px) {\n          padding: 5px;\n        }\n      `}\n      onClick={e => {\n        e.stopPropagation();\n\n        if (selected) return;\n\n        // console.log({ mediaParentId });\n\n        setCurrentBlock({ id });\n      }}\n    >\n      {children}\n\n      {!selected && <EditMarker />}\n    </div>\n  );\n};\n\n// ${!selected && 'border-radius:  50%;'}\nconst EditWrapper1 = ({ id, mediaParentId, selected, children }) => {\n  return (\n    <div\n      css={css`\n        position: absolute;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        left: 0px;\n        top: 0px;\n        width: 100%;\n        height: 100%;\n      `}\n    >\n      {children}\n      <div\n        css={css`\n          position: absolute;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          left: 0px;\n          top: 0px;\n          width: 100%;\n          height: 100%;\n        `}\n      >\n        <div\n          css={css`\n          position: relative;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          width: ${selected ? '75%' : '50%'};\n          height: ${selected ? '75%' : '50%'};\n\n          ${selected && `animation: ${frameSelected} 0.2s forwards;`}\n        \n          ${!selected &&\n            `\n          background: rgba(0, 0, 0, 0.1);\n        `}\n          \n          box-shadow: ${\n            selected ? `0 0 0 1px ${lPink}` : '0 0 0 1px lightGrey'\n          };\n          transition: all 0.2s;\n          cursor: pointer;\n          &:hover {\n            ${!selected && `box-shadow: 0 0 0 1px ${lPink};`}\n          }\n        `}\n          onClick={e => {\n            e.stopPropagation();\n\n            if (selected) return;\n\n            // console.log({ mediaParentId });\n\n            setCurrentBlock({ id });\n          }}\n        >\n          {!selected && (\n            // <i\n            //   className=\"fas fa-code\"\n            //   css={css`\n            //     font-size: 50px;\n            //     color: rgba(0, 0, 0, 0.5);\n            //   `}\n            // />\n            <img\n              src={embedIcon}\n              css={css`\n                width: 50px;\n              `}\n            />\n          )}\n\n          {!selected && <EditMarker />}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport { EditWrapper0, EditWrapper1 };\n","\nexport const hideHeaderAction = (hide: boolean) => {\n  return {\n    type: 'HIDE_HEADER',\n    data: { hide },\n  };\n};\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  memo,\n  useMemo,\n  useCallback,\n  useContext,\n  useRef,\n  useState,\n  useEffect,\n  useLayoutEffect,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { Box } from 'theme-ui';\nimport { keyframes } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport { useSelector, useDispatch, connect } from 'react-redux';\nimport { colors } from 'styles/variables';\nimport { EditWrapper0, EditWrapper1 } from './EditWrappers';\nimport LoadingSpinner from 'components/UI/LoadingSpinner';\nimport FullScreenIcon from 'assets/FullScreenIcon.svg';\nimport isAndroidSamsung from 'services/isAndroidSamsung';\nimport isiOS from 'services/isiOS';\nimport CloseFullscreenEmbed from 'assets/CloseFullscreenEmbed.svg';\nimport { hideHeaderAction } from 'actions/hideHeaderAction';\n\nconst { lPink, lGrey0, lGrey2 } = colors;\n\nconst frameSelected = keyframes`\n  from {\n    width: 50%;\n    height: 50%;\n  }\n  to {\n    width: 75%;\n    height: 75%;\n  }\n`;\n\nconst minHeight = '50vh';\nconst getMinHeight = fullWindowHeight => {\n  return fullWindowHeight ? 'calc(100vh - 250px)' : minHeight;\n};\n\nconst IFrame = ({\n  src,\n  fullWindowHeight,\n  fullscreenMode = false,\n  aspectRatio,\n}: {\n  src: string;\n  fullWindowHeight?: string;\n  fullscreenMode?: boolean | undefined;\n  aspectRatio?: string;\n}) => {\n  const [loaded, setLoaded] = useState(false);\n\n  // console.log('fullscreenMode :', fullscreenMode);\n\n  return (\n    <_>\n      <iframe\n        src={src || 'https://www.chameleoncreator.com'}\n        css={css`\n          position: absolute;\n          left: 0;\n          top: 0;\n          width: 100%;\n          height: 100%;\n          // ${loaded && `min-height: ${getMinHeight(fullWindowHeight)};`}\n\n          ${\n            !aspectRatio\n              ? loaded && `min-height: ${getMinHeight(fullWindowHeight)};`\n              : `aspect-ratio: ${aspectRatio};`\n          }\n\n          border: none;\n\n          ${!loaded &&\n            `\n            width: 0;\n            height: 0;\n          `}\n\n          ${fullscreenMode &&\n            `\n            width: 100vw;\n            height: 100vh;\n          `}\n        `}\n        onLoad={(e: any) => {\n          setLoaded(true);\n        }}\n      ></iframe>\n      {!loaded && (\n        <div\n          css={css({\n            display: 'flex',\n            justifyContent: 'center',\n            alignItems: 'center',\n            // width: fullscreenMode ? '100vw' : '100%',\n            // height: fullscreenMode ? '100vh' : '100%',\n            width: '100%',\n            height: '100%',\n            // minHeight: getMinHeight(fullWindowHeight),\n\n            ...(!aspectRatio\n              ? { minHeight: getMinHeight(fullWindowHeight) }\n              : { aspectRatio }),\n          })}\n        >\n          <LoadingSpinner />\n        </div>\n      )}\n    </_>\n  );\n};\n\nconst Embed = props => {\n  const {\n    id,\n    src,\n    fullWindowHeight = false,\n    mediaParentId = null,\n    dropShadow = 1,\n    borderRadius = 0,\n    includeBorder = 1,\n    borderColor = lGrey2,\n    includeAspectRatio = 0,\n  } = props;\n\n  let borderSize = includeBorder ? 1 : 0;\n\n  let aspectRatio = (props.aspectRatio || [1, 1]).join('/');\n\n  const [iFrameHovered, setIFrameHovered] = useState<boolean>(false);\n  const [fullscreenMode, setFullscreenMode] = useState<boolean>(false);\n\n  const focusedNodeId = useSelector((state: any) => state.focusedNodeId);\n  const dispatch = useDispatch();\n\n  const selected = id === focusedNodeId;\n\n  //\n  const allowFullScreen = window.dev && !window.dev() && props.allowFullScreen;\n  // alert(`allowFullScreen : ${allowFullScreen}`);\n\n  const hideHeader = (hide: boolean) => {\n    dispatch(hideHeaderAction(hide));\n  };\n\n  useEffect(() => {\n    if (\n      isAndroidSamsung() ||\n      isiOS() ||\n      window.matchMedia('(hover: none)').matches\n    ) {\n      // hover unavailable\n      setIFrameHovered(true);\n    } else {\n      // console.log('HOVER IS AVAILABLE');\n    }\n    //\n  }, []);\n\n  useEffect(() => {\n    const exitFullscreen = e => {\n      if (e.key === 'Escape') {\n        hideHeader(false);\n        document.removeEventListener('keydown', exitFullscreen);\n        setFullscreenMode(false);\n      }\n    };\n\n    if (fullscreenMode) {\n      hideHeader(true);\n      document.addEventListener('keydown', exitFullscreen);\n    } else {\n      hideHeader(false);\n      document.removeEventListener('keydown', exitFullscreen);\n      // fullscreenContainer.current && fullscreenContainer.current.remove();\n    }\n\n    return () => {\n      //\n    };\n  }, [fullscreenMode]);\n\n  return (\n    <div\n      css={css({\n        position: 'relative',\n        width: '100%',\n        height: '100%',\n        // minHeight: getMinHeight(fullWindowHeight),\n\n        ...(!!!includeAspectRatio\n          ? { minHeight: getMinHeight(fullWindowHeight) }\n          : { aspectRatio }),\n\n        outline: `${borderSize}px solid ${borderColor}`,\n        boxShadow: dropShadow\n          ? '5px 10px 20px 10px rgba(0, 0, 0, 0.05)'\n          : 'none',\n\n        borderRadius,\n        overflow: 'hidden',\n\n        ...(fullscreenMode && {\n          position: 'fixed',\n          left: 0,\n          top: 0,\n          width: '100vw',\n          height: '100vh',\n          background: '#fff',\n          zIndex: 2147483647,\n        }),\n      })}\n      onMouseOver={() => {\n        setIFrameHovered(true);\n      }}\n      onMouseOut={() => {\n        setIFrameHovered(false);\n      }}\n    >\n      {window.dev() ? (\n        <EditWrapper1 id={id} mediaParentId={mediaParentId} selected={selected}>\n          <IFrame src={src} fullWindowHeight={fullWindowHeight} />\n        </EditWrapper1>\n      ) : (\n        <IFrame\n          src={src}\n          fullWindowHeight={fullWindowHeight}\n          fullscreenMode={fullscreenMode}\n          aspectRatio={aspectRatio}\n        />\n      )}\n\n      {!!allowFullScreen &&\n        (!fullscreenMode ? (\n          <button\n            css={css({\n              border: 'none',\n              outline: 'none',\n              position: 'absolute',\n              display: 'flex',\n              alignItems: 'center',\n              left: 0,\n              bottom: '0px',\n              width: '100%',\n              height: 55,\n              padding: 15,\n              background: `rgba(7, 9, 17, ${iFrameHovered ? 0.7 : 0})`,\n              transform: `translateY(${iFrameHovered ? 0 : '55px'})`,\n              transition: 'transform 0.25s ease-out',\n              color: '#fff',\n              cursor: 'pointer',\n            })}\n            onClick={() => {\n              setFullscreenMode(true);\n            }}\n          >\n            <img src={FullScreenIcon} style={{ margin: '0 15px 0 0' }} />\n            Full screen\n          </button>\n        ) : (\n          <button\n            css={css({\n              border: 'none',\n              outline: 'none',\n              position: 'absolute',\n              right: 35,\n              top: 20,\n              width: 35,\n              height: 35,\n              background: `url('${CloseFullscreenEmbed}') no-repeat`,\n              cursor: 'pointer',\n\n              '&:hover': {\n                opacity: 0.5,\n              },\n            })}\n            onClick={() => {\n              setFullscreenMode(false);\n            }}\n          />\n        ))}\n    </div>\n  );\n};\n\nexport default Embed;\n","import Embed from './Embed';\n\nexport default Embed;\n","/** @jsx jsx */\n\nimport React, { Fragment as _ } from 'react';\nimport { keyframes } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport EditMarker from 'components/UI/EditMarker';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport { colors } from 'styles/variables';\nimport PDF_smallIcon from 'assets/PDF_smallIcon.svg';\n\nconst { lPink } = colors;\n\nconst frameSelected = keyframes`\n  from {\n    width: 85%;\n    height: 85%;\n  }\n  to {\n    width: 95%;\n    height: 95%;\n  }\n`;\n\nconst frameNotSelected = keyframes`\nfrom {\n  width: 75%;\n  height: 75%;\n}\nto {\n  width: 50%;\n  height: 50%;\n}\n`;\n\nconst EditWrapper0 = ({ id, mediaParentId, selected, children }) => {\n  return (\n    <div\n      css={css`\n        position: relative;\n        width: 100%;\n        height: 100%;\n        box-shadow: ${selected ? `0 0 0 1px ${lPink}` : '0 0 0 1px lightGrey'};\n        transition: box-shadow 0.2s;\n        cursor: pointer;\n\n        &:hover {\n          ${!selected && `box-shadow: 0 0 0 1px ${lPink};`}\n        }\n\n        * {\n          pointer-events: ${selected ? 'auto' : 'none'};\n        }\n\n        @media (max-width: 768px) {\n          padding: 5px;\n        }\n      `}\n      onClick={e => {\n        e.stopPropagation();\n\n        if (selected) return;\n\n        // console.log({ mediaParentId });\n\n        setCurrentBlock({ id });\n      }}\n    >\n      {children}\n\n      {!selected && <EditMarker />}\n    </div>\n  );\n};\n\n// ${!selected && 'border-radius:  50%;'}\n\nconst EditWrapper1 = ({ id, mediaParentId, selected, children }) => {\n  // console.log({ selected });\n\n  return (\n    <div\n      css={css`\n        position: absolute;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        left: 0px;\n        top: 0px;\n        width: 100%;\n        height: 100%;\n      `}\n    >\n      {children}\n      <div\n        css={css`\n          position: absolute;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          left: 0px;\n          top: 0px;\n          width: 100%;\n          height: 100%;\n        `}\n      >\n        <div\n          css={css`\n          position: relative;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          // width: ${selected ? '100%' : '85%'};\n          // height: ${selected ? '100%' : '85%'};\n          \n          \n          width: ${selected ? '95%' : '85%'};\n          height: ${selected ? '95%' : '85%'};\n\n          ${selected && `animation: ${frameSelected} 0.2s forwards;`}\n        \n          ${!selected &&\n            `\n          background: rgba(0, 0, 0, 0.1);\n        `}\n          \n          box-shadow: ${\n            selected ? `0 0 0 1px ${lPink}` : '0 0 0 1px lightGrey'\n          };\n          transition: all 0.2s;\n          cursor: pointer;\n          &:hover {\n            ${!selected && `box-shadow: 0 0 0 1px ${lPink};`}\n          }\n        `}\n          onClick={e => {\n            e.stopPropagation();\n\n            if (selected) return;\n\n            // console.log({ mediaParentId });\n\n            setCurrentBlock({ id });\n          }}\n        >\n          {!selected && (\n            // <i\n            //   className=\"fas fa-code\"\n            //   css={css`\n            //     font-size: 50px;\n            //     color: rgba(0, 0, 0, 0.5);\n            //   `}\n            // />\n            <img\n              src={PDF_smallIcon}\n              css={css`\n                width: 50px;\n              `}\n            />\n          )}\n\n          {!selected && <EditMarker />}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport { EditWrapper0, EditWrapper1 };\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  memo,\n  useMemo,\n  useCallback,\n  useContext,\n  useRef,\n  useState,\n  useEffect,\n  useLayoutEffect,\n  FC,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { Box } from 'theme-ui';\nimport { keyframes } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport { useSelector, useDispatch, connect } from 'react-redux';\nimport { colors } from 'styles/variables';\nimport { EditWrapper0, EditWrapper1 } from './EditWrappers';\nimport LoadingSpinner from 'components/UI/LoadingSpinner';\nimport FullScreenIcon from 'assets/FullScreenIcon.svg';\nimport isAndroidSamsung from 'services/isAndroidSamsung';\nimport isiOS from 'services/isiOS';\nimport CloseFullscreenEmbed from 'assets/CloseFullscreenEmbed.svg';\nimport { hideHeaderAction } from 'actions/hideHeaderAction';\nimport PDFIcon from 'assets/PDF.svg';\nimport PDFHero from 'assets/PDF_HERO.svg';\nimport { OpenPDF } from './OpenPDF';\nimport clickPreviewToSeeOutput from 'assets/clickPreviewToSeeOutput.png';\n\nconst { lPink, lGrey0, lGrey2 } = colors;\n\nconst frameSelected = keyframes`\n  from {\n    width: 50%;\n    height: 50%;\n  }\n  to {\n    width: 75%;\n    height: 75%;\n  }\n`;\n\nconst minHeight = '50vh';\nconst getMinHeight = fullWindowHeight => {\n  return fullWindowHeight ? 'calc(100vh - 250px)' : minHeight;\n};\n\nconst IFrame = ({\n  src,\n  fullWindowHeight,\n  fullscreenMode = false,\n}: {\n  src: string;\n  fullWindowHeight?: string;\n  fullscreenMode?: boolean | undefined;\n}) => {\n  const [loaded, setLoaded] = useState(false);\n\n  return (\n    <_>\n      <iframe\n        src={src}\n        css={css`\n          position: absolute;\n          left: 0;\n          top: 0;\n          width: 100%;\n          height: 100%;\n          ${loaded && `min-height: ${getMinHeight(fullWindowHeight)};`}\n          border: none;\n\n          ${!loaded &&\n            `\n            width: 0;\n            height: 0;\n          `}\n\n          ${fullscreenMode &&\n            `\n            width: 100vw;\n            height: 100vh;\n          `}\n        `}\n        onLoad={(e: any) => {\n          setLoaded(true);\n        }}\n      ></iframe>\n      {!loaded && (\n        <div\n          css={css({\n            display: 'flex',\n            justifyContent: 'center',\n            alignItems: 'center',\n            width: '100%',\n            height: '100%',\n            minHeight: getMinHeight(fullWindowHeight),\n          })}\n        >\n          <LoadingSpinner />\n        </div>\n      )}\n    </_>\n  );\n};\n\nconst PDF = props => {\n  const {\n    id,\n    src,\n    imgSrc,\n    displayInline,\n    fullWindowHeight = false,\n    mediaParentId = null,\n    //\n    cardColor = '#fff',\n    cardOutline = '#060709' || 'transparent',\n    includeImage = true,\n    description = '',\n    cardBorderRadius = 25,\n    includeText = true,\n    includeShadow = true,\n    focusColor = '#000',\n    //\n    children,\n  } = props;\n\n  // console.log('PDF :', src);\n  // http://developer.amd.com/wordpress/media/2013/02/NPAR07_IllustrativeRenderingInTeamFortress2.pdf\n\n  const img = children[0];\n  const PDFThumbnail = children[0].props.src;\n\n  const [iFrameHovered, setIFrameHovered] = useState<boolean>(false);\n  const [fullscreenMode, setFullscreenMode] = useState<boolean>(false);\n\n  const focusedNodeId = useSelector((state: any) => state.focusedNodeId);\n  const dispatch = useDispatch();\n\n  const selected = id === focusedNodeId;\n\n  //\n  const allowFullScreen = window.dev && !window.dev() && props.allowFullScreen;\n\n  const hideHeader = (hide: boolean) => {\n    dispatch(hideHeaderAction(hide));\n  };\n\n  useEffect(() => {\n    if (\n      isAndroidSamsung() ||\n      isiOS() ||\n      window.matchMedia('(hover: none)').matches\n    ) {\n      // hover unavailable\n      setIFrameHovered(true);\n    } else {\n      // console.log('HOVER IS AVAILABLE');\n    }\n    //\n  }, []);\n\n  useEffect(() => {\n    const exitFullscreen = e => {\n      if (e.key === 'Escape') {\n        hideHeader(false);\n        document.removeEventListener('keydown', exitFullscreen);\n        setFullscreenMode(false);\n      }\n    };\n\n    if (fullscreenMode) {\n      hideHeader(true);\n      document.addEventListener('keydown', exitFullscreen);\n    } else {\n      hideHeader(false);\n      document.removeEventListener('keydown', exitFullscreen);\n    }\n\n    return () => {\n      //\n    };\n  }, [fullscreenMode]);\n\n  const openPDF = React.cloneElement(children[0], {\n    id,\n    mediaParentId,\n    selected,\n    src: PDFThumbnail,\n    pdfSrc: src,\n    cardColor,\n    cardOutline,\n    includeImage,\n    description,\n    cardBorderRadius,\n    includeText,\n    includeShadow,\n    focusColor,\n  });\n\n  if (!displayInline) {\n    return openPDF;\n  }\n\n  return (\n    <div\n      css={css({\n        position: 'relative',\n        width: '100%',\n        height: '100%',\n        minHeight: getMinHeight(fullWindowHeight),\n        outline: `1px solid ${lGrey2}`,\n        boxShadow: '5px 10px 20px 10px rgba(0, 0, 0, 0.05)',\n        overflow: 'hidden',\n\n        ...(fullscreenMode && {\n          position: 'fixed',\n          left: 0,\n          top: 0,\n          width: '100vw',\n          height: '100vh',\n          background: '#fff',\n          zIndex: 2147483647,\n        }),\n      })}\n      onMouseOver={() => {\n        setIFrameHovered(true);\n      }}\n      onMouseOut={() => {\n        setIFrameHovered(false);\n      }}\n    >\n      {window.dev() ? (\n        <EditWrapper1 id={id} mediaParentId={mediaParentId} selected={selected}>\n          <img src={clickPreviewToSeeOutput} style={{ maxWidth: '100%' }} />\n        </EditWrapper1>\n      ) : (\n        <IFrame\n          src={src}\n          fullWindowHeight={fullWindowHeight}\n          fullscreenMode={fullscreenMode}\n        />\n      )}\n\n      {!!allowFullScreen &&\n        (!fullscreenMode ? (\n          <button\n            css={css({\n              border: 'none',\n              outline: 'none',\n              position: 'absolute',\n              display: 'flex',\n              alignItems: 'center',\n              left: 0,\n              bottom: '0px',\n              width: '100%',\n              height: 55,\n              padding: 15,\n              background: `rgba(7, 9, 17, ${iFrameHovered ? 0.7 : 0})`,\n              transform: `translateY(${iFrameHovered ? 0 : '55px'})`,\n              transition: 'transform 0.25s ease-out',\n              color: '#fff',\n              cursor: 'pointer',\n            })}\n            onClick={() => {\n              setFullscreenMode(true);\n            }}\n          >\n            <img src={FullScreenIcon} style={{ margin: '0 15px 0 0' }} />\n            Full screen\n          </button>\n        ) : (\n          <button\n            css={css({\n              border: 'none',\n              outline: 'none',\n              position: 'absolute',\n              right: 35,\n              top: 75,\n              width: 35,\n              height: 35,\n              background: `url('${CloseFullscreenEmbed}') no-repeat`,\n              cursor: 'pointer',\n\n              '&:hover': {\n                opacity: 0.5,\n              },\n            })}\n            onClick={() => {\n              setFullscreenMode(false);\n            }}\n          />\n        ))}\n    </div>\n  );\n};\n\nexport default PDF;\n","import PDF from './PDF';\n\nexport default PDF;\n","/** @jsx jsx */\n\nimport React, { Fragment as _, useState, useRef, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { useSelector } from 'react-redux';\nimport { EditWrapper0 } from './EditWrappers';\nimport { useCachedResource } from 'services/useCachedResource';\nimport { CHAMELEON_CACHE_v1 } from 'services/imageCache';\nimport { State } from 'store/store';\nimport { interactionContext as InteractionContext } from 'components/lib/TextAndImage/interactionContext';\n\nconst OpenPDFImage = ({ src, cardBorderRadius, includeText, description }) => {\n  const cachedImgSrc = useCachedResource(CHAMELEON_CACHE_v1, src);\n\n  return cachedImgSrc ? (\n    <img\n      src={cachedImgSrc}\n      alt={description}\n      style={{\n        width: '100%',\n        borderRadius: includeText\n          ? `${cardBorderRadius}px ${cardBorderRadius}px 0 0`\n          : cardBorderRadius,\n      }}\n    />\n  ) : null;\n};\n\nconst OpenPDF = ({\n  id,\n  mediaParentId,\n  selected,\n  src: imgSrc,\n  pdfSrc,\n  children,\n  cardColor,\n  cardBorderRadius,\n  cardOutline,\n  includeImage,\n  description,\n  includeText,\n  includeShadow,\n  focusColor,\n}) => {\n  const interactionContext = useContext(InteractionContext);\n\n  const layout = interactionContext?.meta?.layout;\n  let hasOneColumnLayout;\n\n  if (layout && layout.toLowerCase().includes('one')) {\n    hasOneColumnLayout = true;\n  }\n  //\n  const highContrast = useSelector((state: State) => {\n    return state.theme.highContrast;\n  });\n\n  const [containerHilite, setContainerHilite] = useState<boolean>(false);\n  const container = useRef<HTMLDivElement>(null);\n\n  return (\n    <div\n      style={{\n        position: 'relative',\n        display: 'flex',\n        justifyContent: 'center',\n        alignItems: 'center',\n        width: '100%',\n        height: '100%',\n      }}\n    >\n      <div\n        ref={container}\n        css={css({\n          position: 'relative',\n          // width: '100%',\n          // height: '100%',\n          fontSize: '14px',\n          fontWeight: 500,\n          cursor: window.dev && !window.dev() ? 'pointer' : 'auto',\n          ...(includeShadow && {\n            boxShadow: '0px 0px 11.7411px rgba(13, 16, 40, 0.15)',\n          }),\n\n          borderRadius: cardBorderRadius,\n\n          ...(containerHilite && {\n            boxShadow: `0 0 0 2px #fff, 0 0 0 ${\n              highContrast ? 5 : 3\n            }px ${focusColor}`,\n            transition: 'box-shadow 0.2s',\n          }),\n\n          ...(hasOneColumnLayout && {\n            maxWidth: '50vw',\n          }),\n        })}\n      >\n        {window.dev() ? (\n          <div\n            css={css({\n              display: 'flex',\n              flexDirection: 'column',\n            })}\n          >\n            <EditWrapper0\n              id={id}\n              mediaParentId={mediaParentId}\n              selected={selected}\n            >\n              <OpenPDFImage\n                src={imgSrc}\n                cardBorderRadius={cardBorderRadius}\n                includeText={includeText}\n                description={description}\n              />\n            </EditWrapper0>\n          </div>\n        ) : (\n          <a\n            href={pdfSrc}\n            title={'Click to open pdf'}\n            target=\"_blank\"\n            onFocus={e => {\n              setContainerHilite(true);\n            }}\n            onBlur={() => {\n              setContainerHilite(false);\n            }}\n            onKeyUp={e => {\n              if (e.keyCode === 32) {\n                e.currentTarget.click();\n              }\n            }}\n            onMouseOver={e => {\n              e.currentTarget.focus();\n            }}\n            onMouseOut={e => {\n              e.currentTarget.blur();\n            }}\n            onClick={e => {\n              if (!pdfSrc) {\n                alert(\n                  'Oops! No file has been specified. Check the source in your pdf settings.'\n                );\n                e.preventDefault();\n                return;\n              }\n            }}\n          >\n            <OpenPDFImage\n              src={imgSrc}\n              cardBorderRadius={cardBorderRadius}\n              includeText={includeText}\n              description={description}\n            />\n          </a>\n        )}\n\n        {includeText && (\n          <div\n            css={css({\n              position: 'relative',\n              textAlign: 'center',\n              padding: window.dev() ? '3px 0' : '13px',\n              fontWeight: 300,\n              //\n              background: cardColor,\n              borderRadius: `0 0 ${cardBorderRadius}px ${cardBorderRadius}px`,\n            })}\n            tabIndex={0}\n          >\n            {children}\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport { OpenPDF };\n","import React, { Fragment as _, memo, useContext } from 'react';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport { Block } from '@chameleoncreator/creator-app';\nimport { Accordion, Field, FieldHeader, FieldBody } from './Accordion';\nimport EditableText from 'components/lib/EditableText';\nimport Image from '../Image';\nimport Container from 'components/Layouts/ContainerLogical';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport EditableButton from 'components/lib/EditableBtn';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport Video from 'components/lib/Video';\nimport Audio from 'components/lib/Audio';\nimport Transcript from 'components/lib/Video/Transcript';\nimport SVG from 'components/lib/SVG';\nimport Media, { MediaContext, IMediaContext } from 'components/lib/Media';\nimport { imgPlaceholders } from 'components/lib/Image';\nimport shouldUpdate from 'services/shouldUpdate';\nimport imagePlaceholder from 'assets/CC_Add In Image Transparent_min.png';\nimport Embed from 'components/lib/Embed';\nimport PDF from 'components/lib/PDF';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst ComponentsObject = {\n  Row,\n  Column,\n  Text: EditableText,\n  InteractionColumn: ({ children, ...props }) => {\n    const interactionContext = useContext(InteractionContext);\n    const { includeAdditionalTextField } = interactionContext.props;\n\n    const [accordion, txt] = children;\n\n    if (!includeAdditionalTextField) {\n      return accordion;\n    }\n\n    return (\n      <_>\n        {accordion}\n        <div\n          style={{\n            margin: '20px 0 0 0',\n          }}\n        >\n          {txt}\n        </div>\n      </_>\n    );\n  },\n\n  Accordion: ({ children, ...props }) => {\n    return (\n      <div style={{ width: '100%' }}>\n        <Accordion {...props}>{children}</Accordion>\n      </div>\n    );\n  },\n  AccordionField: Field,\n  AccordionHeader: FieldHeader,\n  AccordionBody: FieldBody,\n\n  Image: ({ children, ...props }) => {\n    const mediaContext = useContext(MediaContext) as IMediaContext;\n    const { isAdditionalMedia } = mediaContext;\n\n    return (\n      <Image\n        {...{\n          ...props,\n          placeholder: imgPlaceholders[1],\n        }}\n      />\n    );\n  },\n\n  Video: ({ children, ...props }) => {\n    return (\n      <_>\n        <Video {...props}>{children}</Video>\n        {props.useTranscript && <div style={{ height: 30 }} />}\n      </_>\n    );\n  },\n  Audio,\n  Transcript,\n  Modal: () => null,\n  SVG,\n  Embed,\n  Media,\n  PDF,\n  OpenPDF,\n  TwoColumnLayout: TwoColumnLayout,\n  SingleColumnLayout: SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  EditableButton,\n};\n\nconst render = (block: Block, Components: {}): JSX.Element | string => {\n  let b = block;\n  if (b.type === 'Ref') {\n    b = getBlockById(b.id);\n  }\n\n  const children = Array.isArray(b.children)\n    ? (b.children as Block[]).map(c => render(c, Components))\n    : b.children;\n\n  const Component = Components[b.type];\n\n  return (\n    <Component key={b.id} id={b.id} {...b.props}>\n      {children}\n    </Component>\n  );\n};\n\ninterface DisplayProps {\n  blockId: string;\n  interactionBlock?: Block;\n}\n\nconst AccordionDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider value={interactionBlock}>\n        {(interactionBlock.children as Block[]).map(child => {\n          return render(child, ComponentsObject);\n        })}\n      </InteractionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default AccordionDisplay;\n","let checkSwipeIsLive: number | undefined;\n\nexport const swipeGesture = (navigate: (dir: 'prev' | 'next') => void) => {\n  return e => {\n    const { currentTarget } = e;\n    const x = e.touches[0].clientX;\n\n    let pointerTravel = 0;\n    let swipeIsLive = true;\n\n    clearTimeout(checkSwipeIsLive);\n    checkSwipeIsLive = window.setTimeout(() => {\n      swipeIsLive = false;\n    }, 300);\n\n    const onTouchMove = e => {\n      // get mouse travel\n      pointerTravel = e.touches[0].clientX - x;\n    };\n\n    const onTouchEnd = e => {\n      if (swipeIsLive) {\n        if (pointerTravel > 10) {\n          // console.log('swipe prev !!!');\n          navigate('prev');\n        }\n\n        if (pointerTravel < -10) {\n          // console.log('swipe next !!!');\n          navigate('next');\n        }\n      }\n      //\n      currentTarget.removeEventListener('touchmove', onTouchMove);\n      currentTarget.removeEventListener('touchend', onTouchEnd);\n    };\n    //\n    currentTarget.addEventListener('touchmove', onTouchMove);\n    currentTarget.addEventListener('touchend', onTouchEnd);\n  };\n};\n","import AccordionDisplay from './AccordionDisplay_v2';\n\nexport default AccordionDisplay;\n","/** @jsx jsx */\n\nimport { Fragment as _ } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { getButtonFocus } from 'styles/variables';\nimport EmptyBtn from 'components/UI/EmptyBtn';\nimport hexToRgb from 'services/hexToRGB';\n\nconst Arrow = ({ color = '#ffffff' }) => {\n  return (\n    <svg\n      width=\"18\"\n      height=\"18\"\n      viewBox=\"0 0 18 18\"\n      fill=\"none\"\n      aria-hidden=\"true\"\n    >\n      <path\n        d=\"M6.375 3.75L11.625 9L6.375 14.25\"\n        style={{\n          stroke: color,\n          strokeWidth: 1.5,\n          strokeLinecap: 'round',\n          strokeLinejoin: 'round',\n        }}\n      />\n    </svg>\n  );\n};\n\nconst Btn = ({\n  dir = 'next',\n  size = 60,\n  top = '',\n  enabled = true,\n  color = '#494949',\n  hoverColor,\n  arrowColor = '#ffffff',\n  style = {},\n  onClick,\n  ...props\n}) => {\n  const height = props.height || '100%';\n  const heightOffset = 150;\n\n  const ariaDisabled = {};\n  if (!enabled) {\n    ariaDisabled['aria-disabled'] = true;\n  }\n\n  const { r, g, b } = hexToRgb(color);\n  const hoverColorToRGB = hexToRgb(hoverColor || color);\n\n  return (\n    <div\n      css={css`\n        position: absolute;\n        display: flex;\n        flex-shrink: 0;\n        justify-content: center;\n        align-items: center;\n        ${`${dir === 'prev' ? 'left' : 'right'} : 0px;`}\n        top: ${heightOffset / 2}px;\n        width: ${size + 20}px;\n        height: ${height - heightOffset}px;\n        background: transparent;\n      `}\n      onClick={e => {\n        onClick();\n      }}\n    >\n      <EmptyBtn\n        css={css`\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        flex-shrink: 0;\n        ${`${dir === 'prev' ? 'left' : 'right'} : 10px;`}\n        width: ${size}px;\n        height: ${size}px;\n        background-color: rgba(${r}, ${g}, ${b}, ${enabled ? 1 : 0.45});\n        background-position: center;\n        border-radius: 50%;\n        transform: scaleX(${dir === 'next' ? 1 : -1});\n        transition: opacity 0.2s;\n        cursor: ${enabled ? 'pointer' : 'auto'};\n        transition: background-color 0.1s;\n        :-webkit-backface-visibility: hidden;\n\n        ${enabled &&\n          `&:hover {\n            background-color: rgba(${hoverColorToRGB.r}, ${\n            hoverColorToRGB.g\n          }, ${hoverColorToRGB.b}, ${hoverColor ? 1 : 0.45});\n          }\n        `}\n\n        &:focus {\n          ${getButtonFocus('#494949')}\n        }\n        \n        @media (max-width: 480px) {\n          ${`${dir === 'prev' ? 'left' : 'right'} : 5px;`}\n          transform: scale(${dir === 'next' ? 0.75 : -0.75});\n          transform-origin: center;\n        }\n      `}\n        style={style}\n        tabIndex={props.tabIndex}\n        ariaLabel={dir === 'prev' ? 'Previous slide' : 'Next slide'}\n        {...ariaDisabled}\n        disabled={!enabled}\n      >\n        <div\n          style={{\n            position: 'relative',\n            left: 1,\n\n            width: 18,\n            height: 18,\n          }}\n        >\n          <Arrow color={arrowColor} />\n        </div>\n      </EmptyBtn>\n    </div>\n  );\n};\n\nexport default Btn;\n","/** @jsx jsx */\n\nimport { Fragment as _, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { colors } from 'styles/variables';\nimport { CarouselContext } from './Carousel';\nimport hexToRgb from 'services/hexToRGB';\n//\n\nconst { lPink } = colors;\n\nconst Marker = ({ size = 10, current = false }) => {\n  return (\n    <div\n      css={css`\n        position: relative;\n        flex-shrink: 0;\n        width: ${size}px;\n        height: ${size}px;\n        margin: 0 5px;\n        background: ${current ? lPink : 'transparent'};\n        border: 1px solid ${lPink};\n        border-radius: 50%;\n        transform: scale(${current ? 1.35 : 1});\n        transition: all 0.25s;\n      `}\n    />\n  );\n};\n\nconst Marker_v2 = ({\n  size = 15,\n  index,\n  current = false,\n  color = '#959595',\n}: {\n  size?: number;\n  index?: number;\n  current?: boolean;\n  color?: string;\n}) => {\n  const carouselContext = useContext(CarouselContext)!;\n  const { goto, animate } = carouselContext;\n\n  const isDefaultColor = color === '#959595';\n\n  const { r, g, b } = hexToRgb(color);\n  const notCurrentMarkerColor = isDefaultColor\n    ? 'rgba(73,73,73,1)'\n    : `rgba(${r}, ${g}, ${b}, 0.5)`;\n\n  return (\n    <div\n      css={css`\n        position: relative;\n        flex-shrink: 0;\n        width: ${size}px;\n        height: ${size}px;\n        margin: 0 5px;\n        background: ${current ? color : notCurrentMarkerColor};\n        border-radius: 50%;\n        ${animate && 'transition: all 0.25s;'}\n\n        ${!current &&\n          `\n          cursor: pointer;\n          &:hover {\n            background: ${color};\n          }\n        `}\n\n        @media (max-width: 480px) {\n          top: 5px;\n          width: ${size / 2}px;\n          height: ${size / 2}px;\n        }\n      `}\n      onClick={e => {\n        !current && goto(index!);\n      }}\n      aria-label={`Go to slide ${index! + 1}`}\n      // aria-pressed={current}\n      role=\"button\"\n    />\n  );\n};\n\nexport default Marker_v2;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","const isEDGE = () => {\n  const ua = window.navigator.userAgent;\n\n  const edge = ua.indexOf('Edge/');\n  if (edge > 0) {\n    return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n  }\n\n  // other browser\n  return false;\n};\n\nexport default isEDGE;\n","/** @jsx jsx */\n\nimport React, { useContext, useState, useRef, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport Btn from './CarouselBtn';\nimport Marker from './CarouselMarker';\nimport { colors } from 'styles/variables';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport { CarouselContext } from './Carousel';\nimport isEDGE from 'services/isEDGE';\nimport { swipeGesture } from './swipeGesture';\nimport { useSelector } from 'react-redux';\nimport { State } from 'store/store';\n\nconst { lGrey0, lGrey2 } = colors;\n\nenum Direction {\n  Prev = 'prev',\n  Next = 'next',\n}\n\nconst CarouselLayout = React.memo(({ children }: any) => {\n  const interactionContext = useContext(InteractionContext);\n  const carouselContext = useContext(CarouselContext)!;\n  const { currentIndex, animate } = carouselContext;\n\n  // const imgHeight = window['innerHeight'] - 70 * 2 || 350;\n\n  const {\n    backGround = true,\n    carouselColor = '#fff',\n    backgroundOpacity = 100,\n    border = true,\n    borderColor = lGrey2,\n    borderRadius = 10,\n    carouselTextColor = lGrey0,\n    animation = 'natural',\n    includeText = true,\n    includeSlideIndicators = true,\n    prevNextBtnColor = '#494949',\n    prevNextBtnHoverColor,\n    prevNextArrowColor = '#ffffff',\n    fullWidth = false,\n    carouselHeight = 350,\n    fullHeight = false,\n  } = interactionContext.props;\n\n  const { layout } = interactionContext.meta;\n\n  const OneColumn = layout.toLowerCase().includes('one');\n\n  const itemsSeen = useRef(\n    unlockInteraction(interactionContext.id, (children as any).length)\n  );\n\n  const isOpen = useSelector((state: State) => {\n    return state.interactionsOpen.includes(\n      interactionContext.props.sId || interactionContext.id\n    );\n  });\n\n  const checkSwipeIsLive = useRef<number | undefined>(undefined);\n\n  const [imgHeight, setImgHeight] = useState(carouselHeight);\n  const debounceSetImgHeight = useRef<any>();\n\n  useEffect(() => {\n    if (fullHeight) {\n      return;\n    }\n\n    setImgHeight(carouselHeight);\n  }, [carouselHeight, fullHeight, isOpen]);\n\n  useEffect(() => {\n    if (!fullHeight) {\n      removeEventListener('resize', onResize);\n      return;\n    }\n\n    if (fullHeight) {\n      addEventListener('resize', onResize);\n      onResize();\n    } else {\n      setImgHeight(350); //\n    }\n\n    function onResize() {\n      clearTimeout(debounceSetImgHeight.current);\n      debounceSetImgHeight.current = setTimeout(() => {\n        setImgHeight(window.innerHeight - 70 * 3); //\n      }, 300);\n    }\n\n    return () => {\n      removeEventListener('resize', onResize);\n    };\n  }, [fullHeight, isOpen]);\n\n  useEffect(() => {\n    if (window.dev()) {\n      return;\n    }\n    if (interactionContext.props.lockDown === 0) return;\n    itemsSeen.current(currentIndex);\n  });\n\n  const overflow = backGround ? 'hidden' : 'visible';\n\n  return (\n    <div\n      css={css({\n        width: '100%',\n        padding: `10px ${!OneColumn ? '30px' : 0}`,\n\n        ...(!OneColumn &&\n          !fullWidth && {\n            '@media (max-width: 1100px)': {\n              // if viewport is < 1100px\n              width: '50vw',\n            },\n            '@media (max-width: 768px)': {\n              // if viewport is < 768px\n              // this is our breakpoint where behaviour should\n              // be like we're in single column\n              width: 'calc(100vw - 30px)',\n            },\n\n            '@media (min-width: 1100px)': {\n              // if viewport is > 1100px\n              maxWidth: 1100 / 2,\n            },\n          }),\n\n        ...(!OneColumn &&\n          fullWidth && {\n            // maxWidth: 1100 / 2,\n            // width: '100%',\n            maxWidth: 'unset',\n          }),\n      })}\n      onTouchStart={swipeGesture((dir: 'prev' | 'next') => {\n        carouselContext[dir === 'next' ? Direction.Next : Direction.Prev]();\n      })}\n    >\n      <div\n        css={css({\n          position: 'relative',\n          width: '100%',\n          ...(border && {\n            border: !backGround ? 'none' : `1px solid ${borderColor}`,\n          }),\n          borderRadius: borderRadius,\n          boxShadow: !backGround\n            ? 'none'\n            : '5px 10px 20px 10px rgba(0, 0, 0, 0.05)',\n          overflow,\n        })}\n      >\n        {backGround && (\n          <div\n            css={css({\n              position: 'absolute',\n              left: 0,\n              top: 0,\n              width: '100%',\n              height: '100%',\n              background: carouselColor,\n              opacity: backgroundOpacity * 0.01,\n            })}\n          />\n        )}\n        <ul\n          css={css`\n            display: flex;\n            width: 100%;\n            height: auto;\n            margin: 0;\n            padding: 0 !important;\n            overflow: ${overflow};\n\n            ${isEDGE() &&\n              !['OneColumn', 'OneColumnReversed'].includes(layout) &&\n              `\n              max-width: 490px;\n        \n            `}\n          `}\n        >\n          {(children as any).map((slide, index) =>\n            React.cloneElement(slide, {\n              index,\n              currentIndex,\n              animate,\n              imgHeight,\n              carouselColor,\n              carouselTextColor,\n              animation,\n              slide,\n              includeText,\n              includeSlideIndicators,\n            })\n          )}\n        </ul>\n\n        <span className=\"sr-only\">\n          Showing slide {currentIndex + 1} of {React.Children.count(children)}:\n        </span>\n\n        {includeSlideIndicators && (\n          <div\n            css={css`\n              position: absolute;\n              display: flex;\n              justify-content: center;\n              width: 100%;\n              top: ${imgHeight - 25}px;\n            `}\n          >\n            <div\n              css={css`\n                display: flex;\n              `}\n            >\n              {React.Children.map(children, (_, i) => (\n                <Marker\n                  key={`marker-${i}`}\n                  index={i}\n                  current={currentIndex === i}\n                  color={prevNextBtnColor}\n                />\n              ))}\n            </div>\n          </div>\n        )}\n\n        <Btn\n          dir={Direction.Prev}\n          size={40}\n          top={`${imgHeight / 2}px`}\n          height={imgHeight}\n          enabled={currentIndex > 0}\n          color={prevNextBtnColor}\n          hoverColor={prevNextBtnHoverColor}\n          arrowColor={prevNextArrowColor}\n          onClick={carouselContext[Direction.Prev]}\n        />\n        <Btn\n          dir={Direction.Next}\n          size={40}\n          top={`${imgHeight / 2}px`}\n          height={imgHeight}\n          enabled={currentIndex < React.Children.count(children) - 1}\n          color={prevNextBtnColor}\n          hoverColor={prevNextBtnHoverColor}\n          arrowColor={prevNextArrowColor}\n          onClick={carouselContext[Direction.Next]}\n        />\n      </div>\n    </div>\n  );\n});\n\nexport default CarouselLayout;\n","import React, {\n  ReactElement,\n  useState,\n  useRef,\n  createContext,\n  useEffect,\n} from 'react';\n\nimport { interactionContext as _interactionContext } from './interactionContext';\nimport CarouselLayout from './CarouselLayout';\n\ninterface CarouselProps {\n  children: ReactElement[] | ReactElement | string | null;\n}\n\ninterface CarouselContext {\n  previousIndex: number;\n  currentIndex: number;\n  animate: boolean;\n  hasAnimated: boolean;\n  next: () => void;\n  prev: () => void;\n  goto: (slideNum: number) => void;\n}\n\nconst CarouselContext = createContext<CarouselContext | undefined>(undefined);\n\nconst Carousel = (props: CarouselProps) => {\n  const { children } = props as any;\n\n  const [currentIndex, setCurrentIndex] = useState(0);\n  const [previousIndex, setPreviousIndex] = useState(0);\n\n  const slideCache = useRef([]);\n\n  // rename to something like shouldAnimateTransition\n  const animate = useRef(true);\n  const hasAnimated = useRef(false);\n\n  const next = (): void => {\n    if (currentIndex < React.Children.count(children) - 1) {\n      setPreviousIndex(currentIndex);\n      setCurrentIndex(_currentIndex => _currentIndex + 1);\n\n      hasAnimated.current = true;\n    }\n  };\n  const prev = (): void => {\n    if (currentIndex >= 1) {\n      setPreviousIndex(currentIndex);\n      setCurrentIndex(_currentIndex => _currentIndex - 1);\n    }\n  };\n  const goto = (slideNum: number): void => {\n    console.log('goto :', slideNum);\n\n    setPreviousIndex(currentIndex);\n    setCurrentIndex(slideNum);\n  };\n\n  useEffect(() => {\n    if (!window.dev()) {\n      return;\n    }\n\n    if (slideCache.current.length > children.length) {\n      const slideCacheIds = slideCache.current.map((s: any) => s.props.id);\n      const childrenIds = children.map(c => c.props.id);\n      const diff = slideCacheIds.filter(s => !childrenIds.includes(s));\n      const removedIndex = slideCacheIds.indexOf(diff[0]);\n\n      if (\n        removedIndex < currentIndex ||\n        (currentIndex === children.length && removedIndex === children.length)\n      ) {\n        animate.current = false;\n        setCurrentIndex(_currentIndex => _currentIndex - 1);\n      }\n    }\n\n    slideCache.current = children;\n    requestAnimationFrame(() => (animate.current = true));\n  }, [children.length]);\n\n  return (\n    <CarouselContext.Provider\n      value={{\n        currentIndex,\n        previousIndex,\n        animate: animate.current,\n        hasAnimated: hasAnimated.current,\n\n        next,\n        prev,\n        goto,\n      }}\n    >\n      <CarouselLayout>{children}</CarouselLayout>\n    </CarouselContext.Provider>\n  );\n};\n\nexport default Carousel;\nexport { CarouselContext };\n","/** @jsx jsx */\n\nimport { useContext, useEffect, useRef } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { motion } from 'framer-motion';\nimport { CarouselContext } from './Carousel';\nimport isAppleComputerInc from 'services/isAppleComputerInc';\nimport { ImageZoomContext } from 'components/lib/Image/ImageZoom';\n\nconst defaultBulletFormatting = `\nul {\n  list-style-type: disc;\n  ul {\n    list-style-type: circle;\n    ul {\n      list-style-type: square;\n    }\n  }\n}\n\nol {\n  ul {\n    list-style-type: circle;\n    ul {\n      list-style-type: square;\n    }\n  }\n}\n\n.chameleon-text > div {\n\n  ul, ol {\n    list-style-position: inside;\n  }\n\n  > ul, > ol {\n    display: inline-block;\n    margin-left: 0px;\n  }\n}\n`;\nconst CarouselSlide = ({\n  index,\n  currentIndex,\n  imgHeight,\n  carouselTextColor,\n  animation,\n  slide,\n  includeText,\n  includeSlideIndicators,\n}) => {\n  const img = slide.props.children[0];\n  const text = slide.props.children[1];\n\n  const { hasAnimated } = useContext(CarouselContext)!;\n\n  const slideRef = useRef<HTMLLIElement | null>(null);\n  const ar = {};\n\n  if (currentIndex !== 0 && currentIndex === index) {\n    ar['role'] = 'alert';\n  }\n\n  let content = text?.props?.content;\n  if (content === '<p data-type=\"paragraph\"></p>') {\n    content = false;\n  }\n\n  const textHasContent = window.dev() || content;\n  const imageZoomContextValue = {\n    overideStyles: {\n      right: 5,\n      bottom: 25,\n    },\n  };\n\n  useEffect(() => {\n    if (!slideRef.current) {\n      return;\n    }\n\n    // do we chack for selectableElems in the slide\n    // and if any. give the slide focus ?\n\n    const selectableElems = Array.from(\n      slideRef.current.querySelectorAll('a, button')\n    ) as HTMLElement[];\n\n    const toggleSelectableElemsEnabled = (toggle: boolean) => {\n      if (!slideRef.current) {\n        return;\n      }\n\n      // seems NOTHING wants to work to nix the elements\n      //\n      selectableElems.forEach(elem => {\n        //\n      });\n    };\n\n    // inert holds up !!!\n    if (currentIndex !== index) {\n      slideRef.current.setAttribute('inert', '');\n      // toggleSelectableElemsEnabled(false);\n    } else {\n      slideRef.current.removeAttribute('inert');\n      // toggleSelectableElemsEnabled(true);\n    }\n  }, [currentIndex]);\n\n  // isiOS()\n  return isAppleComputerInc() ? (\n    <li\n      ref={slideRef}\n      css={css`\n        display: flex;\n        flex-direction: column;\n        flex-shrink: 0;\n        width: 100%;\n        list-style-type: none;\n\n        opacity: ${currentIndex === index ? 1 : 0};\n        transition: opacity 0.35s;\n\n        transform: translateX(-${100 * currentIndex}%);\n      `}\n      {...ar}\n      aria-hidden={currentIndex !== index}\n    >\n      <div\n        css={css`\n          height: ${imgHeight}px;\n          // padding: ${window.dev() ? '5px' : '0px'};\n\n          .chameleon-image,\n          .chameleon-image img {\n            width: 100%;\n            height: ${imgHeight}px !important;\n          }\n        `}\n      >\n        <ImageZoomContext.Provider value={imageZoomContextValue}>\n          {img}\n        </ImageZoomContext.Provider>\n      </div>\n\n      {includeText && (\n        <div\n          css={css`\n          position: relative;\n          display: flex;\n          align-items: center;\n          width: 100%;\n          padding: ${window.dev() ? '3px 5px' : '13px 7px'};\n          word-break: break-word;\n          * div {\n            ${!window.dev() && `padding: 5px 10px;`}\n            color: ${carouselTextColor};\n          }\n          text-align: center;\n          ${defaultBulletFormatting}\n          \n          display: ${currentIndex !== index ? 'none' : ''}\n        `}\n        >\n          {text}\n        </div>\n      )}\n    </li>\n  ) : (\n    <motion.li\n      ref={slideRef}\n      css={css`\n        display: flex;\n        flex-direction: column;\n        flex-shrink: 0;\n        width: 100%;\n        list-style-type: none;\n      `}\n      animate={{\n        transform: `translateX(-${100 * currentIndex}%)`,\n        opacity: currentIndex === index ? 1 : 0,\n      }}\n      transition={\n        {\n          natural: {\n            duration: 0.35,\n            type: 'spring',\n            stiffness: 260 / 1.5,\n            damping: 19,\n          },\n          smooth: {\n            duration: 0.35,\n          },\n          none: {\n            duration: 0,\n          },\n        }[animation]\n      }\n      onAnimationComplete={() => {\n        if (!hasAnimated) {\n          if (index === 0) {\n          }\n          return;\n        }\n\n        if (window.dev && !window.dev() && slideRef.current) {\n          if (currentIndex !== index) {\n            return;\n          }\n        }\n      }}\n      {...ar}\n      aria-hidden={currentIndex !== index}\n      // tabIndex={currentIndex !== index ? -1 : undefined}\n      // inert={currentIndex !== index}\n      // inert\n    >\n      <div\n        css={css`\n          height: ${imgHeight}px;\n          // padding: ${window.dev() ? '5px' : '0px'};\n\n          .chameleon-image,\n          .chameleon-image img {\n            width: 100%;\n            height: ${imgHeight}px !important;\n          }\n\n      \n        `}\n      >\n        <ImageZoomContext.Provider value={imageZoomContextValue}>\n          {img}\n        </ImageZoomContext.Provider>\n      </div>\n\n      {includeText && (\n        <div\n          css={css`\n            position: relative;\n            display: flex;\n            align-items: center;\n            width: 100%;\n            height: ${currentIndex === index ? 'auto' : 0};\n\n            padding: 13px 7px;\n            ${window.dev() && currentIndex === index && 'padding: 3px 5px;'}\n\n            overflow: hidden;\n            word-break: break-word;\n\n            ${currentIndex === index && 'transition: height 0.2s;'}\n            transition: height 0.2s;\n\n            * div {\n              color: ${carouselTextColor};\n            }\n\n            text-align: center;\n\n            ${defaultBulletFormatting}\n          `}\n        >\n          {text}\n        </div>\n      )}\n    </motion.li>\n  );\n};\n\nexport default CarouselSlide;\n","import React, {\n  Fragment as _,\n  memo,\n  useRef,\n  useEffect,\n  useContext,\n} from 'react';\nimport EditableText from 'components/lib/EditableText';\nimport Carousel from './Carousel';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport Image from 'components/lib/Image';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport CarouselSlide from './CarouselSlide';\nimport shouldUpdate from 'services/shouldUpdate';\nimport SVG from 'components/lib/SVG';\nimport Carousel_default from 'assets/Wide Image.png';\nimport Media, { MediaContext, IMediaContext } from 'components/lib/Media';\nimport { imgPlaceholders } from 'components/lib/Image';\nimport Transcript from 'components/lib/Video/Transcript';\nimport Video from 'components/lib/Video';\nimport Audio from 'components/lib/Audio';\nimport Embed from 'components/lib/Embed';\nimport PDF from 'components/lib/PDF';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport { ImageContext } from 'components/lib/Image';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  InteractionColumn: ({ children, ...props }) => {\n    const interactionContext = useContext(InteractionContext);\n    const { includeAdditionalTextField } = interactionContext.props;\n    const [carousel, txt] = children;\n\n    if (!includeAdditionalTextField) {\n      return carousel;\n    }\n\n    return (\n      <_>\n        {carousel}\n        <div\n          style={{\n            margin: '20px 0 0 0',\n          }}\n        >\n          {txt}\n        </div>\n      </_>\n    );\n  },\n  Video,\n  Media,\n  Carousel,\n  Slide: ({ children, ...props }) => {\n    return (\n      <ImageContext.Provider\n        value={{\n          editWrapperType: 1,\n          placeholder: Carousel_default,\n          editWrapperUseIcon: false,\n          padding: 0,\n          //\n          canUpdateContainerHeight: false,\n        }}\n      >\n        <CarouselSlide {...(props as any)}>{children}</CarouselSlide>\n      </ImageContext.Provider>\n    );\n  },\n  Image: ({ children, ...props }) => {\n    const interactionContext_ = useContext(InteractionContext);\n    const interactionLayout = useRef('TwoColumns');\n    const mediaContext = useContext(MediaContext) as IMediaContext;\n    const { isAdditionalMedia } = mediaContext;\n\n    useEffect(() => {\n      interactionLayout.current = interactionContext_.meta.layout;\n    }, []);\n\n    return (\n      <Image\n        {...{\n          ...props,\n          placeholder: isAdditionalMedia\n            ? imgPlaceholders[1]\n            : Carousel_default,\n        }}\n      />\n    );\n  },\n  TwoColumnLayout: TwoColumnLayout,\n  SingleColumnLayout: SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  Audio,\n  Transcript,\n  SVG,\n  Embed,\n  PDF,\n  OpenPDF,\n};\n\nconst CarouselDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n  //\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{ ...interactionBlock, updateItemsSeen: null }}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </InteractionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default CarouselDisplay;\n","import CarouselDisplay from './CarouselDisplay';\n\nexport default CarouselDisplay;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  ReactElement,\n  useContext,\n  useRef,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext } from './interactionContext';\nimport { unlockInteraction } from 'services/unlockInteraction';\ninterface FlipcardsProps {\n  children: ReactElement[];\n}\n\nconst Flipcards = (props: FlipcardsProps) => {\n  const { children } = props;\n  const context = useContext(interactionContext);\n\n  const itemsSeen = useRef(\n    unlockInteraction(context.id, (children as any).length)\n  );\n\n  const updateFlipCardSeen = id => {\n    if (context.props.lockDown === 0) return;\n    itemsSeen.current(id);\n  };\n\n  return (\n    <div\n      css={css`\n        position: relative;\n        display: flex;\n        justify-content: center;\n        width: 100%;\n      `}\n    >\n      <span\n        css={css`\n          position: absolute;\n          left: 0;\n          top: 0;\n          width: 0;\n          height: 0;\n          overflow: hidden;\n        `}\n      >\n        Click a button to change the content\n      </span>\n\n      <div\n        css={css`\n          display: flex;\n          flex-wrap: wrap;\n          justify-content: center;\n        `}\n        role=\"list\"\n      >\n        {children.map((child: any, index) =>\n          React.cloneElement(child, {\n            updateFlipCardSeen,\n            numFlipCards: children.length,\n            index,\n          })\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default Flipcards;\n","import getStore from 'services/getStore';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\n\nexport default (noop = false) => {\n  const { currentInteractionBlockId, focusedNodeId } = getStore().getState();\n\n  if (noop && currentInteractionBlockId === focusedNodeId) {\n    return;\n  }\n  //\n  if (currentInteractionBlockId === focusedNodeId) {\n    return setCurrentBlock(null);\n  }\n\n  if (currentInteractionBlockId) {\n    return setCurrentBlock({ id: currentInteractionBlockId });\n  }\n\n  setCurrentBlock(null);\n};\n","// gonna add some overrides for other headings but we've not yet seen\n// what they look like in the wild\n// we could add our own of course but i'll check with gwil as to his preference\n\nexport const headingStylesForPanelsAndCards = `.chameleon-text {\n\n  h3, h3 * {\n    line-height: 1em !important;\n  }\n\n  h4 {\n    font-size: 1.2rem !important;\n    line-height: 1.2em !important;\n  }\n\n  h5 {\n    font-size: 1rem !important;\n    line-height: 1.2em !important;\n  }\n\n  h6 {\n    font-size: 1rem !important;\n    line-height: 1.2em !important;\n  }\n}`;\n","/** @jsx jsx */\n\nimport React, {\n  ReactElement,\n  useRef,\n  useEffect,\n  cloneElement,\n  useState,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport isEDGE from 'services/isEDGE';\nimport { getHexToRgbWithDefaultFallback } from 'services/hexToRGB';\nimport { headingStylesForPanelsAndCards } from 'styles/headingStylesForPanelsAndCards';\n\ninterface FaceProps {\n  id: string;\n  face: string;\n  color: string;\n  includeFlipcardBackground?: boolean;\n  cardBackgroundOpacity?: number;\n  includeShadow?: boolean;\n  textColor: string;\n  alignTextTop: boolean;\n  flipcardOutline?: boolean;\n  flipcardOutlineColor?: number;\n  flipcardBorderRadius?: number;\n  zIndex: number;\n  transform: string;\n  visibleFace: string;\n  visibility: boolean;\n  children: ReactElement;\n}\n\nconst Face = ({\n  id,\n  face,\n  color,\n  includeFlipcardBackground = true,\n  cardBackgroundOpacity = 100,\n  includeShadow = true,\n  textColor,\n  alignTextTop,\n  flipcardOutline,\n  flipcardOutlineColor,\n  flipcardBorderRadius = 10,\n  zIndex,\n  transform = '',\n  visibleFace,\n  visibility,\n  children,\n  ...props\n}: FaceProps) => {\n  //\n\n  const [mediaType, mediaTypeUpdated] = useState<number>(\n    children?.props?.child ?? face === 'front' ? 1 : 0\n  );\n\n  const faceMedia = cloneElement(children, {\n    onMediaChange(child) {\n      mediaTypeUpdated(child);\n    },\n  });\n\n  const { opacity } = props as any;\n  const faceElement: any = useRef(null);\n  const anchors: any = useRef(undefined);\n\n  const { r, g, b } = getHexToRgbWithDefaultFallback(\n    color,\n    face === 'front' ? '#ffffff' : '#282A2B'\n  );\n\n  let a = cardBackgroundOpacity / 100;\n  if (!color) {\n    a = 0;\n  }\n\n  useEffect(() => {\n    const stopPropagation = e => {\n      e.stopPropagation();\n    };\n\n    const addRemoveStopPropagation = addRemove => {\n      if (anchors.current && anchors.current.length) {\n        anchors.current.forEach((a: any) => {\n          a[`${addRemove}EventListener`]('click', stopPropagation);\n        });\n      }\n    };\n\n    if (!anchors.current) {\n      anchors.current = Array.from(faceElement.current.querySelectorAll('a'));\n      addRemoveStopPropagation('add');\n    }\n\n    return () => {\n      addRemoveStopPropagation('remove');\n    };\n  }, []);\n\n  useEffect(() => {\n    if (anchors.current && anchors.current.length) {\n      anchors.current.forEach((a: any) => {\n        a.style.visibility = ['all', face].includes(visibleFace)\n          ? 'visible'\n          : 'hidden';\n      });\n    }\n  }, [visibleFace]);\n\n  let checkedTextColor = textColor;\n  if (!textColor) {\n    checkedTextColor = '#282a2b';\n  }\n\n  checkedTextColor = '';\n\n  return (\n    <div\n      ref={faceElement}\n      id={id}\n      className=\"flipCardFace\"\n      css={css`\n        position: absolute;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        left: 0px;\n        top: 0px;\n        width: 100%;\n        height: 100%;\n\n        ${mediaType === 0 &&\n          `\n          padding: ${window.dev() ? '10px' : '20px'};\n          ${alignTextTop && 'align-items: flex-start;'}\n        `}\n\n        -webkit-backface-visibility: hidden;\n        -moz-backface-visibility: hidden;\n        backface-visibility: hidden;\n\n        white-space: pre-wrap;\n        overflow-wrap: break-word;\n\n        // background-color: ${color};\n        background: ${\n          includeFlipcardBackground\n            ? `rgba(${r}, ${g}, ${b}, ${a})`\n            : 'transparent'\n        };\n        color: ${textColor};\n        // color: #fff;\n        z-index: ${zIndex};\n        border: ${\n          flipcardOutline ? `1px solid ${flipcardOutlineColor}` : 'none'\n        };\n        border-radius: ${flipcardBorderRadius}px;\n        overflow: hidden;\n\n        ${isEDGE() && `opacity: ${!opacity ? 1 : 0};`}\n\n        ${transform && `transform: ${transform};`}\n        transition: opacity 0.2s, transform 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);\n\n        -webkit-transform-style: preserve-3d;\n        transform-style: preserve-3d;\n\n        ${includeShadow && 'box-shadow: 0 8px 24px 5px rgba(0, 0, 0, 0.2)'};\n\n        * {\n          line-height: 1.2em;\n        }\n\n        li {\n          color: ${textColor};\n        }\n\n        li > span {\n          color: ${textColor};\n        }\n\n        //double up needed for editing. . .\n        * div {\n          color: ${textColor};\n        }\n\n        ${headingStylesForPanelsAndCards}\n\n       \n\n      `}\n      aria-hidden={!visibility}\n    >\n      {faceMedia}\n    </div>\n  );\n};\n\nexport default Face;\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport { useContext, useEffect, useRef, useState, cloneElement } from 'react';\nimport { useSelector } from 'react-redux';\nimport checkReturnToInteractionEditing from 'services/checkReturnToInteractionEditing';\nimport { getButtonFocus } from 'styles/variables';\nimport Face from './Face';\nimport { interactionContext } from './interactionContext';\nimport { State } from 'store/store';\n\nconst Flipcard = props => {\n  const { id, updateFlipCardSeen, numFlipCards, index, children } = props;\n  const [cardHasFocus, setCardHasFocus] = useState(false);\n  const [{ rotation, visibleFace }, updateCardDisplay] = useState({\n    rotation: 0,\n    visibleFace: 'front',\n  });\n  const [cardContent, setCardContent] = useState<string | undefined>();\n\n  let [frontFaceMedia, backFaceMedia] = children;\n\n  const [edgeOpacityHack, setEdgeOpacityHack] = useState(0);\n  const context = useContext(interactionContext);\n  const {\n    includeFlipcardBackground = true,\n    flipcardFrontColor,\n    flipcardBackColor,\n    flipcardFrontTextColor,\n    flipcardBackTextColor,\n    flipcardBackgroundOpacity = 100,\n    focusColor,\n    flipcardWidth,\n    flipcardHeight,\n    flipcardOutline = false,\n    flipcardOutlineColor = '#282A2B',\n    flipcardBorderRadius = 10,\n    alignTextTop,\n    includeShadow = true,\n  } = context.props;\n\n  const flipCard = useRef<HTMLDivElement>(null);\n  const flipCardFaces = useRef<any>(undefined);\n  const flipCardInit = useRef(false);\n  const hiddenButton = useRef<HTMLButtonElement>(null);\n  const delayReadingCardContent = useRef<number>(0);\n\n  const frontFaceMediaIsSVG = frontFaceMedia?.props?.child === 3;\n  const backFaceMediaIsSVG = backFaceMedia?.props?.child === 3;\n\n  const frontFaceMediaIsSVGKey = useRef('front');\n  const backFaceMediaIsSVGKey = useRef('back');\n\n  const isOpen = useSelector((state: State) => {\n    return state.interactionsOpen.includes(context.id);\n  });\n\n  const updateRotation = e => {\n    window.dev() && checkReturnToInteractionEditing(true);\n\n    if (visibleFace !== 'all') {\n      // we only want these keys to update when the visibleFace is front or back\n      if (visibleFace !== frontFaceMediaIsSVGKey.current) {\n        frontFaceMediaIsSVGKey.current = visibleFace;\n      }\n\n      if (visibleFace !== backFaceMediaIsSVGKey.current) {\n        backFaceMediaIsSVGKey.current = visibleFace;\n      }\n    }\n\n    let bounds;\n    let left;\n    let width;\n    let side = 'left';\n\n    if (e) {\n      bounds = e.currentTarget.getBoundingClientRect();\n      left = bounds.left;\n      width = bounds.width;\n      side = e.clientX < left + width / 2 ? 'left' : 'right';\n    }\n\n    updateCardDisplay({\n      rotation: rotation + (side === 'left' ? -180 : 180),\n      visibleFace: 'all',\n    });\n\n    setEdgeOpacityHack(edgeOpacityHack => (edgeOpacityHack === 0 ? 1 : 0));\n\n    updateFlipCardSeen(id);\n  };\n\n  const updateCardContent = (\n    face: 'front' | 'back' | undefined = undefined\n  ) => {\n    if (!flipCard.current) {\n      return;\n    }\n\n    const faceElement = flipCard.current.querySelector(\n      `#${visibleFace}-${id}`\n    ) as HTMLElement | null;\n\n    if (!faceElement) {\n      return;\n    }\n\n    let faceContent: string | undefined = faceElement.innerText;\n\n    if (!faceContent) {\n      const img = faceElement.querySelector('img');\n\n      if (img) {\n        faceContent = `${String(img.getAttribute('alt'))}`;\n      }\n    }\n\n    if (faceContent && !/\\.$/.test(faceContent)) {\n      // console.log(\n      //   \"if faceContent doesn't end with a period. we add it so screenReader pauses appropriately\"\n      // );\n\n      faceContent = `${faceContent}.`;\n    }\n\n    setCardContent(faceContent || '');\n  };\n\n  const flipCardBaseShadow = '0 8px 24px 5px rgba(0, 0, 0, 0.2)';\n\n  const getFocusColor = () => {\n    if (focusColor) {\n      return focusColor;\n    }\n\n    return (Math.abs(rotation) / 180) % 2 == 0\n      ? ['#fff', '#ffffff', 'rgb(255, 255, 255)'].includes(flipcardFrontColor)\n        ? flipcardBackColor\n        : flipcardFrontColor\n      : flipcardBackColor;\n  };\n\n  const getFocusColor_2 = () =>\n    getButtonFocus(getFocusColor(), flipCardBaseShadow)\n      .replace(/box-shadow:|;|!important/g, '')\n      .trim();\n\n  useEffect(() => {\n    if (!flipCardFaces.current) {\n      flipCardFaces.current = Array.from(flipCard.current!.children);\n    }\n\n    const onTransitionEnd = e => {\n      const visibleFace =\n        (Math.abs(rotation) / 180) % 2 === 1 ? 'back' : 'front';\n\n      // if we want to NOT use state. . .\n      const hiddenCardElement: any = flipCardFaces.current.filter(element =>\n        element.id.includes(visibleFace)\n      )[0];\n\n      if (flipCardInit.current) {\n        updateCardDisplay({\n          rotation,\n          visibleFace,\n        });\n        flipCard.current!.removeEventListener('transitionend', onTransitionEnd);\n      }\n\n      flipCardInit.current = true;\n    };\n\n    flipCard.current!.addEventListener('transitionend', onTransitionEnd);\n\n    return () => {\n      flipCard.current!.removeEventListener('transitionend', onTransitionEnd);\n    };\n  }, [rotation]);\n\n  useEffect(() => {\n    if (visibleFace === 'all') {\n      return;\n    }\n\n    clearTimeout(delayReadingCardContent.current);\n\n    delayReadingCardContent.current = window.setTimeout(() => {\n      updateCardContent();\n    }, 500);\n\n    return () => {\n      clearTimeout(delayReadingCardContent.current);\n    };\n  }, [visibleFace]);\n\n  useEffect(() => {\n    if (window.dev()) {\n      return;\n    }\n\n    const texts = Array.from(\n      flipCard.current!.querySelectorAll(`[class*=\"flipcard-text\"]`)\n    ) as HTMLElement[];\n\n    const padding = 60;\n\n    const checkFlipCardSize = () => {\n      if (window.innerWidth - padding <= flipcardWidth) {\n        flipCard.current!.style.width = `calc(100vw - ${padding}px)`;\n\n        if (texts) {\n          flipCard.current!.style.minHeight = `${Math.max(\n            ...texts.map(t => t.offsetHeight)\n          )}px`;\n        }\n\n        return;\n        //\n      }\n\n      if (flipCard.current!.style.width === `${flipcardWidth}px`) {\n        return;\n      }\n\n      flipCard.current!.style.width = `${flipcardWidth}px`;\n      flipCard.current!.style.height = `${flipcardHeight}px`;\n    };\n\n    checkFlipCardSize();\n\n    // we're just tapping the checkFlipCardSize a couple times\n    // useful if flipCard interaction is the first interaction in topic\n    let counter = 0;\n    const tick = setInterval(() => {\n      counter += 1;\n\n      if (counter >= 3) {\n        // console.log('counter has checked to resize flipCard 3x @ 12fps');\n        clearInterval(tick);\n      }\n\n      checkFlipCardSize();\n    }, 1000 / 12);\n    //\n\n    window.addEventListener('resize', checkFlipCardSize);\n\n    return () => {\n      clearInterval(tick);\n      window.removeEventListener('resize', checkFlipCardSize);\n    };\n  }, [isOpen, visibleFace]);\n\n  return (\n    <div\n      ref={flipCard}\n      id={`i${id}`}\n      css={css`\n        background: transparent;\n\n        border-radius: ${flipcardBorderRadius}px;\n        width: ${flipcardWidth}px;\n        height: ${flipcardHeight}px;\n        margin: 10px;\n        perspective: 1000px;\n        cursor: pointer;\n\n        .chameleon-image,\n        .chameleon-image > div,\n        .chameleon-image img:not(.zoom-image img) {\n          position: absolute;\n          left: 0px;\n          top: 0px;\n\n          width: 100% !important;\n          height: 100% !important;\n\n          max-width: ${flipcardWidth}px !important;\n          max-height: ${flipcardHeight}px !important;\n        }\n\n        .zoom-image {\n          bottom: 5px;\n          right: ${5 + flipcardBorderRadius / 2}px;\n          transform: scale(0.8);\n        }\n\n        ${cardHasFocus &&\n          `\n        #${visibleFace}-${id} {\n          ${getButtonFocus(\n            getFocusColor(),\n            '0 8px 24px 5px rgba(0, 0, 0, 0.2)'\n          )}\n        }\n        `}\n      `}\n      onClick={(e: any) => {\n        e.stopPropagation();\n\n        updateRotation(e);\n        // return from the click. do not focus button\n        return;\n\n        if (hiddenButton.current) {\n          requestAnimationFrame(() => hiddenButton.current!.focus());\n        }\n      }}\n      role=\"listitem\"\n    >\n      {!window.dev() && (\n        <button\n          ref={hiddenButton}\n          css={css`\n            position: absolute;\n            left: 0;\n            top: 0;\n            width: 0;\n            height: 0;\n            border: 0;\n            outline: none;\n            overflow: hidden;\n          `}\n          onFocus={e => {\n            updateCardContent();\n            //\n            setCardHasFocus(true);\n          }}\n          onBlur={() => {\n            setCardHasFocus(false);\n          }}\n          onClick={e => {\n            e?.stopPropagation();\n            updateRotation(null);\n          }}\n          aria-pressed={visibleFace !== 'front'}\n          aria-label={`flip card ${index + 1} of ${numFlipCards}.${\n            cardContent ? ` ${cardContent}` : ''\n          }`}\n        />\n      )}\n\n      <Face\n        id={`front-${id}`}\n        face=\"front\"\n        color={flipcardFrontColor}\n        includeFlipcardBackground={includeFlipcardBackground}\n        cardBackgroundOpacity={flipcardBackgroundOpacity}\n        includeShadow={includeShadow}\n        textColor={flipcardFrontTextColor}\n        alignTextTop={alignTextTop}\n        flipcardOutline={!!flipcardOutline}\n        flipcardOutlineColor={flipcardOutlineColor}\n        flipcardBorderRadius={flipcardBorderRadius}\n        zIndex={1}\n        transform={`rotateY(${rotation}deg)`}\n        {...{\n          opacity: edgeOpacityHack === 1,\n        }}\n        visibleFace={visibleFace}\n        visibility={['front', 'all'].includes(visibleFace)}\n      >\n        {frontFaceMediaIsSVG\n          ? cloneElement(frontFaceMedia, {\n              key: frontFaceMediaIsSVGKey.current,\n            })\n          : frontFaceMedia}\n      </Face>\n      <Face\n        id={`back-${id}`}\n        face=\"back\"\n        color={flipcardBackColor}\n        includeFlipcardBackground={includeFlipcardBackground}\n        cardBackgroundOpacity={flipcardBackgroundOpacity}\n        includeShadow={includeShadow}\n        textColor={flipcardBackTextColor}\n        alignTextTop={alignTextTop}\n        flipcardOutline={!!flipcardOutline}\n        flipcardOutlineColor={flipcardOutlineColor}\n        flipcardBorderRadius={flipcardBorderRadius}\n        zIndex={2}\n        transform={`rotateY(${rotation + 180}deg)`}\n        {...{\n          opacity: edgeOpacityHack === 0,\n        }}\n        visibleFace={visibleFace}\n        visibility={['back', 'all'].includes(visibleFace)}\n      >\n        {backFaceMediaIsSVG\n          ? cloneElement(backFaceMedia, {\n              key: backFaceMediaIsSVGKey.current,\n            })\n          : backFaceMedia}\n      </Face>\n    </div>\n  );\n};\n\nexport default Flipcard;\n","/** @jsx jsx */\n\nimport { Fragment as _, useEffect, memo, useContext } from 'react';\nimport { jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport Flipcards_v2 from './Flipcards_v2';\nimport Flipcard_v2 from './Flipcard_v2';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column, Button, Box } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport Audio from 'components/lib/Audio';\nimport SVG from 'components/lib/SVG';\nimport Media, { MediaContext, IMediaContext } from 'components/lib/Media';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport Container from 'components/Layouts/ContainerLogical';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport continueBtn from '../ContinueBtn/continueBtn_v2';\nimport { Block } from '@chameleoncreator/creator-app';\nimport shouldUpdate from 'services/shouldUpdate';\nimport Embed from 'components/lib/Embed';\nimport PDF from 'components/lib/PDF';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport imagePlaceholder from 'assets/Square.png';\nimport { imgPlaceholders } from 'components/lib/Image';\nimport { ImageContext } from 'components/lib/Image';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: ({ children, ...props }) => (\n    <EditableText {...{ ...props, className: 'flipcard-text' }} />\n  ),\n  InteractionColumn: ({ children, ...props }) => {\n    const interactionContext = useContext(InteractionContext);\n    const { includeAdditionalTextField } = interactionContext.props;\n\n    const [flipcards, txt] = children;\n\n    if (!includeAdditionalTextField) {\n      return flipcards;\n    }\n\n    return (\n      <_>\n        {flipcards}\n        <div\n          style={{\n            margin: '20px 0 0 0',\n          }}\n        >\n          {txt}\n        </div>\n      </_>\n    );\n  },\n\n  Flipcards: Flipcards_v2,\n  Flipcard({ children, ...props }) {\n    return (\n      <ImageContext.Provider\n        value={{\n          editWrapperType: 1,\n          placeholder: imagePlaceholder,\n          //\n          canUpdateContainerHeight: false,\n        }}\n      >\n        <Flipcard_v2 {...props}>{children}</Flipcard_v2>\n      </ImageContext.Provider>\n    );\n  },\n  FlipcardSide: ({ children }) => children,\n  Front: ({ children }) => children,\n  Back: ({ children }) => children,\n\n  Image: ({ children, ...props }) => {\n    const mediaContext = useContext(MediaContext) as IMediaContext;\n    const { isAdditionalMedia } = mediaContext;\n\n    return (\n      <Image\n        {...{\n          ...props,\n\n          placeholder: imgPlaceholders[1],\n        }}\n      />\n    );\n  },\n\n  Video,\n  Audio,\n  // these can return null\n  Transcript: () => null,\n  EditableButton: () => null,\n  //\n  SVG: ({ children, ...props }) => (\n    <SVG {...{ ...props, editWrapperType: 1 }} />\n  ),\n  Embed,\n  Media,\n  TwoColumnLayout: TwoColumnLayout,\n  SingleColumnLayout: SingleColumnLayout,\n  ContinueButton: continueBtn,\n  PDF,\n  OpenPDF,\n};\n\nconst FlipCardDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{ ...interactionBlock, updateItemsSeen: null }}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </InteractionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default FlipCardDisplay;\n","import FlipCardDisplay from './FlipCardDisplay_v2';\n\nexport default FlipCardDisplay;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","/** @jsx jsx */\n\nimport { useState, useEffect, Fragment as _, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext } from './interactionContext';\nimport { getButtonFocus } from 'styles/variables';\nimport unlockInteraction from 'services/unlockInteraction';\n\nconst Tick = ({ tickColor }) => {\n  return (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n      <path\n        fill={`${tickColor}`}\n        d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"\n      />\n    </svg>\n  );\n};\n\nconst TermsAndConditions = ({ size = 15, onClick = null, ...props }) => {\n  const context: any = useContext(interactionContext);\n  const { id } = props;\n\n  const {\n    accept,\n    acceptContent = 'e.g. I accept these terms and conditions.',\n    acceptBorderRadius = 0,\n    acceptTextColor = undefined,\n    acceptBackgroundColor = undefined,\n    lockDown,\n  } = context.props;\n\n  //\n  const [toggle, setToggle] = useState(lockDown === 0 ? true : false);\n\n  const tickColor = acceptTextColor || '#000';\n\n  useEffect(() => {\n    if (toggle) {\n      unlockInteraction(context.id);\n    }\n  }, [toggle]);\n\n  return accept ? (\n    <form onSubmit={e => e.preventDefault()}>\n      <div\n        css={css`\n          position: relative;\n          display: inline-flex;\n          align-items: center;\n          margin: 20px 0 0 0;\n          padding: ${acceptBackgroundColor ? '10px' : '10px 0 10px 0'};\n          border-radius: ${acceptBorderRadius}px;\n          background: ${acceptBackgroundColor};\n          cursor: pointer;\n          ${(window.dev() || toggle) && 'pointer-events: none;'}\n\n          &:focus {\n            ${getButtonFocus(acceptBackgroundColor || tickColor)}\n          }\n        `}\n        onClick={() => {\n          setToggle(true);\n        }}\n        onKeyUp={\n          window.dev()\n            ? () => {}\n            : (e: any) => {\n                console.log(e);\n                if ([' ', 'Enter'].includes(e.key)) {\n                  setToggle(true);\n                }\n              }\n        }\n        tabIndex={!toggle ? 0 : -1}\n      >\n        <input\n          id={`i${id}`}\n          type=\"checkbox\"\n          value={`i${id}`}\n          name={`i${id}`}\n          checked={toggle}\n          readOnly\n          css={css`\n            position: absolute;\n            left: 0;\n            top: 0;\n            opacity: 0;\n          `}\n          tabIndex={-1}\n        />\n        <label\n          htmlFor={`i${id}`}\n          css={css`\n            color: ${acceptTextColor};\n            pointer-events: none;\n          `}\n          tabIndex={-1}\n        >\n          {acceptContent}\n        </label>\n\n        <div\n          css={css`\n            display: inline-flex;\n            justify-content: center;\n            align-items: center;\n            width: ${size}px;\n            height: ${size}px;\n            margin: 0 0 0 10px;\n            padding: 2px;\n            border: 1px solid ${acceptTextColor || 'lightGrey'};\n          `}\n        >\n          <Tick\n            tickColor={window.dev() || toggle ? tickColor : 'rgba(0, 0, 0, 0)'}\n          />\n        </div>\n      </div>\n    </form>\n  ) : null;\n};\n\nexport default TermsAndConditions;\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport TermsAndConditions from './TermsAndConditions';\n\nconst FullPageText = ({ children, ...props }) => {\n  return (\n    <div\n      css={css`\n        padding: 10px;\n      `}\n    >\n      {children}\n\n      <TermsAndConditions />\n    </div>\n  );\n};\n\nexport default FullPageText;\n","/** @jsx jsx */\n\nimport { Fragment as _, memo } from 'react';\nimport { jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport SVG from 'components/lib/SVG';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { interactionContext } from './interactionContext';\nimport Media from 'components/lib/Media';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport shouldUpdate from 'services/shouldUpdate';\nimport FullPageText from './FullPageText';\nimport { imgPlaceholders } from 'components/lib/Image';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  FullPageText,\n  Image: ({ children, ...props }) => {\n    return (\n      <Image\n        {...{\n          ...props,\n          placeholder: imgPlaceholders[1],\n          usePlaceholderValue: true,\n        }}\n      />\n    );\n    //\n  },\n  TwoColumnLayout,\n  SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  Video,\n  SVG,\n  Media,\n};\n\nconst FullPageTextDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <interactionContext.Provider\n        value={{ ...interactionBlock, updateItemsSeen: null }}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </interactionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default FullPageTextDisplay;\n","import FullPageTextDisplay from './FullPageTextDisplay';\n\nexport default FullPageTextDisplay;\n","import { Report } from 'store/store';\n\nexport const addScormResponseAction = (scormAction: Report) => {\n  return {\n    type: 'ADD_SCORM_RESPONSE',\n    data: scormAction,\n  };\n};\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport Audio from 'components/lib/Audio';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport EditableText from 'components/lib/EditableText';\nimport Embed from 'components/lib/Embed';\nimport Image from 'components/lib/Image';\nimport Media from 'components/lib/Media';\nimport PDF from 'components/lib/PDF';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport SVG from 'components/lib/SVG';\nimport Video from 'components/lib/Video';\nimport Modal from 'components/UI/Modal';\nimport { useContext, useEffect, useMemo, useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport checkReturnToInteractionEditing from 'services/checkReturnToInteractionEditing';\nimport { findByKeyVal_V2 } from 'services/findByKeyVal';\nimport { State } from 'store/store';\nimport { InteractionContext } from '../../Layouts/ContainerLogical';\nimport { VisuallyHidden } from 'components/UI/VisuallyHidden';\nimport { ImageContext } from 'components/lib/Image';\n\nconst maxWidth = 512;\n\nconst useFreshProps = id => {\n  return useSelector((state: State) => {\n    return state.blocks[id].props;\n  });\n};\n\nconst Feedback = ({\n  id,\n  block,\n  correct,\n  attempt,\n  numberOfAttempts,\n  showAttemptNumber = true,\n  useMediaInFeedback = true,\n  onOpened,\n  onClose,\n  showCorrectAnswer,\n  navigationBehaviour,\n}: {\n  id?: any;\n  block?: any;\n  correct: boolean | string;\n  useAttemptFeedback?: boolean;\n  attempt?: number;\n  numberOfAttempts?: number;\n  showAttemptNumber?: boolean;\n  useMediaInFeedback?: boolean;\n  onOpened?: () => void;\n  onClose?: any;\n  showCorrectAnswer?: any;\n  navigationBehaviour?: any;\n}) => {\n  const ctx = useContext(InteractionContext) as any;\n\n  //   <ImageContext.Provider\n  //   value={{\n  //     editWrapperType: 0,\n  //     editWrapperSize: '100%',\n  //     // placeholder: modalPlaceholder,\n  //     padding: 5,\n  //   }}\n  // >\n  // </ImageContext.Provider>\n\n  const Components = {\n    Feedback: ({ children }) => children,\n    Modal: ({ children }) => children,\n    ModalWithEditableBtn: ({ children }) => children,\n    Correct: ({ children }: { children?: any; props?: any }) => children,\n    Incorrect: ({ children }) => children,\n    Attempt: ({ children }) => children,\n    Image: ({ children, ...props }) => {\n      let freshProps = useFreshProps(props.id);\n      freshProps = {\n        ...props,\n        ...freshProps,\n      };\n\n      return (\n        <Image\n          {...{\n            ...freshProps,\n            // usePlaceholderValue: true,\n            // maxHeight: 30,\n            editWrapperType: 0,\n            editWrapperSize: '100%',\n            padding: 5,\n          }}\n        />\n      );\n    },\n    Video: ({ children, ...props }) => {\n      let freshProps = useFreshProps(props.id);\n      freshProps = {\n        ...props,\n        ...freshProps,\n      };\n\n      return <Video {...freshProps}>{children}</Video>;\n    },\n\n    Transcript: ({ children, ...props }) => {\n      return children;\n    },\n    SVG: ({ children, ...props }) => {\n      let freshProps = useFreshProps(props.id);\n      freshProps = {\n        ...props,\n        ...freshProps,\n      };\n      return <SVG {...freshProps} />;\n    },\n    Embed,\n    Media,\n    Audio: ({ children, ...props }) => {\n      let freshProps = useFreshProps(props.id);\n      freshProps = {\n        ...props,\n        ...freshProps,\n      };\n\n      return <Audio {...freshProps}>{children}</Audio>;\n    },\n    PDF,\n    OpenPDF,\n    Text: EditableText,\n    EditableButton: ({ ...props }) => {\n      let freshProps = useFreshProps(props.id);\n      freshProps = {\n        ...props,\n        ...freshProps,\n      };\n\n      return <EditableBtn {...freshProps} onClick={onClose} />;\n    },\n    ContinueButton: ({ ...props }) => {\n      let freshProps = useFreshProps(props.id);\n      freshProps = {\n        ...props,\n        ...freshProps,\n      };\n\n      return (\n        <ContinueBtn\n          {...{\n            ...freshProps,\n            unlocked: true,\n            removeable: false,\n            disableLastPageMessage: true,\n            //\n            keyEventsDisabled: true,\n          }}\n          onClick={() => {}}\n        />\n      );\n    },\n  };\n\n  //\n  const renderedBlock = useMemo(() => {\n    return renderBlock(\n      block || findByKeyVal_V2(id, 'type', 'Feedback'),\n      Components\n    ) as any;\n  }, []);\n\n  const Feedbacks = renderedBlock.props.children;\n\n  const Correct_Feedback = Feedbacks[0];\n  const Incorrect_Feedback = Feedbacks[1];\n\n  const Attempt_Feedback =\n    Feedbacks[2].props.type === 'Attempt_Feedback'\n      ? Feedbacks[2]\n      : Feedbacks[1];\n\n  const FeedbackButtonCorrect = Correct_Feedback.props.children[2];\n  const FeedbackButtonIncorrect = Incorrect_Feedback.props.children[2];\n\n  const buttonContainer = useRef<HTMLDivElement>(null);\n\n  const parsedOnClose = () => {\n    if (window.dev()) {\n      checkReturnToInteractionEditing(true);\n      onClose();\n      return;\n    }\n\n    onClose();\n\n    if (correct === 'attempt') {\n      return;\n    }\n\n    if (!correct && attempt && attempt < numberOfAttempts!) {\n      return;\n    }\n\n    // this code has been updated since\n    // from here the correct / incorrect <a> tags ( buttons ) navigate to their hrefs\n  };\n\n  let img;\n  let text;\n  let button;\n  let targetFeedbackElements;\n\n  if (correct === 'attempt') {\n    targetFeedbackElements = Attempt_Feedback.props.children;\n  } else {\n    targetFeedbackElements = Feedbacks[correct ? 0 : 1].props.children;\n  }\n\n  img = targetFeedbackElements[0];\n  text = targetFeedbackElements[1];\n  button = targetFeedbackElements[2];\n\n  // reassign button\n  if (correct !== 'attempt') {\n    if (FeedbackButtonCorrect && FeedbackButtonIncorrect) {\n      button = correct ? FeedbackButtonCorrect : FeedbackButtonIncorrect;\n    } else {\n      // for ' legacy ' feedback that won't have FeedbackButtonCorrect || FeedbackButtonIncorrect\n      button = renderedBlock.props.children[2];\n    }\n  }\n\n  if (!button) {\n    button = renderedBlock.props.children[2];\n  }\n\n  const showAttemptNumberComputed =\n    showAttemptNumber &&\n    correct !== true &&\n    numberOfAttempts! > 1 &&\n    attempt! < numberOfAttempts!;\n\n  let nullSpaceCloseAction = () => {};\n\n  if (button.props.location) {\n    if (\n      button.props.location === 'next' ||\n      (numberOfAttempts! > 1 && attempt! < numberOfAttempts!)\n    ) {\n      if (correct !== true) {\n        nullSpaceCloseAction = onClose;\n      }\n    }\n  } else {\n    nullSpaceCloseAction = onClose;\n  }\n\n  const feedbackText = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (!feedbackText.current) {\n      return;\n    }\n\n    // this is wrong. just testing something\n    const chameleonText = feedbackText.current.querySelector(\n      '.chameleon-text'\n    ) as HTMLDivElement;\n\n    chameleonText?.removeAttribute('tabindex');\n  });\n\n  useEffect(() => {\n    if (!buttonContainer.current) {\n      return;\n    }\n\n    const anchorButton = buttonContainer.current.querySelector('a');\n\n    if (!anchorButton) {\n      return;\n    }\n\n    anchorButton.style.margin = '0';\n\n    const killKeyAndPointerEvents = () => {\n      // we've taken the href off the anchorButton to prevent key events from firing\n      anchorButton.href = '';\n      anchorButton.style.pointerEvents = 'none';\n    };\n\n    if (!correct && attempt && attempt < numberOfAttempts!) {\n      killKeyAndPointerEvents();\n      return;\n    }\n\n    if (correct && navigationBehaviour.correct) {\n      killKeyAndPointerEvents();\n      return;\n    }\n\n    if (!correct && navigationBehaviour.incorrect) {\n      killKeyAndPointerEvents();\n      return;\n    }\n  });\n\n  return (\n    <Modal\n      disableNullSpaceClick={window.dev() ? false : true}\n      onOpened={onOpened}\n      onClose={window.dev() ? onClose : nullSpaceCloseAction}\n    >\n      <div\n        css={css`\n          position: relative;\n          display: flex;\n          flex-direction: column;\n          align-items: center;\n          width: 100%;\n          height: 100%;\n          max-width: 768px;\n          padding: 50px;\n        `}\n      >\n        {useMediaInFeedback && (\n          <div\n            css={css`\n              position: relative;\n              width: 100%;\n\n              margin-bottom: 30px;\n\n              .chameleon-image img {\n                // max-height: 30vh !important;\n\n                height: auto !important;\n                object-fit: contain;\n              }\n\n              @media (max-width: 768px) {\n                width: 100%;\n                margin-bottom: 25px;\n              }\n            `}\n          >\n            {img}\n          </div>\n        )}\n\n        {correct === 'attempt' && showAttemptNumberComputed && (\n          <div\n            style={{\n              margin: '0 0 15px 0',\n              fontFamily: 'inherit',\n              fontWeight: 700,\n              color: '#333',\n            }}\n            aria-hidden=\"true\"\n          >\n            <p>\n              Attempt {attempt} of {numberOfAttempts}\n            </p>\n          </div>\n        )}\n        <div\n          ref={feedbackText}\n          css={css`\n            position: relative;\n            width: 100%;\n            margin-bottom: 30px;\n          `}\n        >\n          {text}\n        </div>\n\n        {correct === 'attempt' && showAttemptNumberComputed && (\n          <span className=\"sr-only\">\n            Attempt {attempt} of {numberOfAttempts}\n          </span>\n        )}\n        <div\n          ref={buttonContainer}\n          css={css`\n            position: relative;\n            display: flex;\n            justify-self: flex-end;\n            justify-content: center;\n            width: 100%;\n          `}\n        >\n          <span\n            css={css`\n              cursor: pointer;\n\n              &:hover {\n                opacity: 0.8;\n              }\n\n              button {\n                pointer-events: none;\n              }\n\n              div [class*='NavigationButton'] {\n                top: -10px;\n                height: calc(100% + 20px);\n              }\n            `}\n            onClick={e => {\n              !window.dev() ? parsedOnClose() : null;\n            }}\n          >\n            {button}\n          </span>\n        </div>\n      </div>\n    </Modal>\n  );\n};\n\nexport default Feedback;\n","/** @jsx jsx */\n\nimport { Fragment as _ } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport Modal from 'components/UI/Modal';\nimport checkReturnToInteractionEditing from 'services/checkReturnToInteractionEditing';\n\nconst maxWidth = 512;\n\nconst FeedbackWithEditableBtn = ({\n  getFeedbackDisplay,\n  ContinueBtn,\n  onClose,\n}: {\n  getFeedbackDisplay?: any;\n  ContinueBtn?: any;\n  onClose?: any;\n}) => {\n  const parsedOnClose = () => {\n    window.dev() && checkReturnToInteractionEditing(true);\n    onClose();\n  };\n  //\n  return (\n    <Modal onClose={parsedOnClose}>\n      <div\n        css={css`\n          position: relative;\n          display: flex;\n          flex-direction: column;\n          align-items: center;\n          width: 100%;\n          height: 100%;\n          max-width: 768px;\n          padding: 50px;\n        `}\n      >\n        <div\n          css={css`\n            width: 75%;\n            max-width: ${maxWidth * 0.75}px;\n            margin-bottom: 30px;\n\n            @media (max-width: 768px) {\n              width: 100%;\n              margin-bottom: 25px;\n            }\n          `}\n        >\n          {getFeedbackDisplay().props.children[0]}\n        </div>\n        <div\n          css={css`\n            width: 100%;\n            margin-bottom: 30px;\n          `}\n        >\n          {getFeedbackDisplay().props.children[1]}\n        </div>\n        <div\n          css={css`\n            display: flex;\n            justify-self: flex-end;\n            justify-content: center;\n            width: 100%;\n          `}\n        >\n\n          <span onClick={() => (!window.dev() ? parsedOnClose() : null)}>\n            {ContinueBtn}\n          </span>\n        </div>\n      </div>\n    </Modal>\n  );\n};\n\nexport default FeedbackWithEditableBtn;\n","import Feedback from './Feedback';\nimport FeedbackWithEditableBtn from './FeedbackWithEditableBtn';\n\nexport default Feedback;\nexport { FeedbackWithEditableBtn };\n","import { useSelector } from 'react-redux';\nimport { State } from 'store/store';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getTopics from 'services/apiHelpers/getTopics';\n\nexport const useScoringQuizzes = () => {\n  const scoringQuizzes = useSelector((state: State) => {\n    const topics = getTopics();\n    return topics.filter((t: Block) => {\n      return t?.props?.asAssessment && t?.props?.scoring;\n    });\n  });\n\n  return scoringQuizzes;\n};\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport { addScormResponseAction } from 'actions/addScormResponseAction';\nimport { updateScoreAction } from 'actions/updateScoreAction';\nimport Feedback from 'components/lib/Feedback';\nimport React, {\n  createContext,\n  ReactElement,\n  useContext,\n  useEffect,\n  useRef,\n  useState,\n} from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useScoringQuizzes } from 'services/apiHelpers/useScoringQuizzes';\nimport { getScore, setScore } from 'services/scoring';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport { State } from 'store/store';\nimport { interactionContext as _interactionContext } from './interactionContext';\nimport { ImageContext } from 'components/lib/Image/Image';\n//\nimport CC_Multi_Choice_Media_Placeholders_1 from 'assets/CC_Multi Choice Media Placeholders_1.svg';\nimport CC_Multi_Choice_Media_Placeholders_2 from 'assets/CC_Multi Choice Media Placeholders_2.svg';\nimport CC_Multi_Choice_Media_Placeholders_3 from 'assets/CC_Multi Choice Media Placeholders_3.svg';\nimport CC_Multi_Choice_Media_Placeholders_4 from 'assets/CC_Multi Choice Media Placeholders_4.svg';\nimport CC_Multi_Choice_Media_Placeholders_5 from 'assets/CC_Multi Choice Media Placeholders_5.svg';\nimport CC_Multi_Choice_Media_Placeholders_6 from 'assets/CC_Multi Choice Media Placeholders_6.svg';\nimport pubSub from 'services/pubSub';\nimport { Report } from 'store/store';\n\nconst multichoiceMediaPlaceholders = [\n  CC_Multi_Choice_Media_Placeholders_1,\n  CC_Multi_Choice_Media_Placeholders_2,\n  CC_Multi_Choice_Media_Placeholders_3,\n  CC_Multi_Choice_Media_Placeholders_4,\n  CC_Multi_Choice_Media_Placeholders_5,\n  CC_Multi_Choice_Media_Placeholders_6,\n];\n\n// this will create the relationship of id to placeholder image\n// for the current session\nconst placeholderMappingToImageId = {};\n\nenum SubmitState {\n  Initial = 0,\n  Resolved = 2,\n}\n\ninterface MultichoiceProps {\n  children: ReactElement[] | ReactElement | string | null;\n}\n\ninterface MultichoiceContext {\n  selected: number | string[];\n  updateSelected: (optionId: number | string) => void;\n  correct: number | string[];\n  isMultiSelect: boolean;\n  answerCount: number;\n  isLive: boolean;\n  randomizeOptions?: boolean;\n  submit: SubmitState;\n  onSubmit: () => void;\n}\n\nconst MultichoiceContext = createContext<MultichoiceContext | undefined>(\n  undefined\n);\n\n// keeping this local to the session\n// if the interaction is set to score &&\n// if the score is not undefined ( has value )\n// true\nlet sessionLock = {};\nlet attempts = {};\n\nlet randomAnswers = {};\n\npubSub.subscribe('RESET_MODULE', () => {\n  console.log('multichoice resets');\n\n  sessionLock = {};\n  attempts = {};\n\n  randomAnswers = {};\n});\n\nconst getRandomAnswers = (id, Answers) => {\n  if (!randomAnswers[id]) {\n    randomAnswers[id] = [...Answers].sort(() => Math.random() - 0.5);\n  }\n\n  return randomAnswers[id];\n};\n\nconst Multichoice = (props: MultichoiceProps) => {\n  const interactionContext = useContext(_interactionContext);\n\n  const { id: interactionContextId } = interactionContext;\n  let {\n    correctOptions = '',\n    score,\n    randomizeOptions = false,\n    useFeedback = true,\n    useMediaInFeedback = true,\n    useUniqueOptionFeedback,\n    showAttemptNumber,\n    showCorrectAnswer,\n    navigationBehaviour = {\n      correct: false,\n      incorrect: false,\n    },\n\n    isMultichoiceMedia,\n    mediaPanelWidth = 320,\n\n    showReviewFeedback = false,\n  } = interactionContext.props;\n\n  let { includeQuestionTextPlusImage } = interactionContext.props; // undefined by default. falsey\n\n  const numberOfAttempts = interactionContext.hasAttemptFeedback\n    ? interactionContext.props.numberOfAttempts\n    : 0;\n\n  // state (s)\n  //\n  const [selected, setSelected] = useState<any[]>([]);\n  const [submit, setSubmit] = useState(\n    sessionLock[interactionContextId]\n      ? SubmitState.Resolved\n      : SubmitState.Initial\n  );\n  const [feedback, setFeedback] = useState(false);\n\n  const scoringQuizzes = useScoringQuizzes();\n  const { scoreAll } = useSelector((state: State) => {\n    return Object.values(state.blocks).find(b => b.type === 'Module')\n      ?.props as any;\n  });\n\n  sessionLock[interactionContextId] =\n    attempts[interactionContextId] === numberOfAttempts &&\n    score &&\n    getScore(interactionContextId) !== undefined;\n\n  const dispatch = useDispatch();\n\n  const { children } = props as any;\n  const [Question, SubmitBtn, AnswersContainer, ReviewFeedback] = children;\n\n  const Answers = AnswersContainer.props.children;\n\n  // refs\n  const multichoice = useRef<HTMLFormElement>(null);\n\n  if (!attempts[interactionContextId]) {\n    attempts[interactionContextId] = 0;\n  }\n  const isCorrect = useRef(false);\n\n  // correctOptions array from string\n  correctOptions = correctOptions\n    .split(/,/g)\n    .filter(entry => entry !== '')\n    .sort();\n\n  // Correct contains an array of ids of correct answers\n  const correct = correctOptions.map((o, i) => {\n    return Answers[o - 1]?.props?.id;\n  });\n  const isMultiCorrect = correct.length > 1;\n  const isLive = selected.length && submit === 0;\n\n  // Toggle options\n  const updateSelected = optionId => {\n    let _selected;\n\n    if (isMultiCorrect) {\n      if (selected.includes(optionId)) {\n        // Toggle off\n        _selected = selected.filter(o => optionId !== o);\n      } else {\n        // Toggle on\n        _selected = [...selected, optionId];\n      }\n    } else {\n      _selected = selected[0] === optionId ? [] : [optionId];\n    }\n\n    // Maintain \"correct\" state\n    isCorrect.current = _selected.sort().join() === correct.sort().join();\n\n    // updating setScore for old ways ( display results )\n    setScore(interactionContextId, isCorrect.current);\n    //\n    //\n\n    setSelected(_selected);\n  };\n\n  const showFeedback = correct => {\n    useFeedback && setFeedback(true);\n\n    if (window.dev()) {\n      return;\n    }\n\n    if (\n      // score &&\n      correct ||\n      attempts[interactionContextId] >= numberOfAttempts\n    ) {\n      //\n      let questionText: HTMLDivElement | string = document.querySelector(\n        !isMultichoiceMedia\n          ? `#i${interactionContext.id} form .chameleon-text`\n          : `#multichoice-media-question-text-${interactionContext.id}`\n      ) as HTMLDivElement;\n\n      if (questionText) {\n        questionText = questionText?.innerText;\n      }\n\n      const response = selected\n        .map(s => {\n          let result = '-1';\n          Answers.forEach((a, i) => {\n            if (s === a.props.id) {\n              result = `${i + 1}`;\n              return;\n            }\n          });\n          return result;\n        })\n        .sort()\n        .join(',');\n\n      const getCorrectAndResponseOptions = entry => {\n        let answer = '';\n        Answers.forEach((a, i) => {\n          if (entry === a.props.id) {\n            const { id } = a.props;\n            const content = document.querySelector(\n              `#i${id}`\n            ) as HTMLInputElement;\n\n            answer = content?.innerText;\n\n            if (!answer && isMultichoiceMedia) {\n              // get the alt off the image\n              const imgAltText = content.querySelector('img')?.alt || '';\n              answer = imgAltText;\n            }\n          }\n        });\n\n        return answer;\n      };\n\n      const responseExpanded = selected\n        .map(getCorrectAndResponseOptions)\n        .join(',');\n\n      const correctExpanded = correctOptions\n        .map((o, i) => {\n          return Answers[o - 1]?.props?.id;\n        })\n        .map(getCorrectAndResponseOptions)\n        .join(',');\n\n      const action: Report = {\n        id: interactionContextId,\n        type: 'fill-in',\n        // 'choice',\n        question: questionText,\n        reportable: 'multichoice' as 'multichoice',\n        // ,\n        response: responseExpanded,\n        correct: correctExpanded,\n        result: correct ? 1 : 0,\n      };\n\n      // console.log(JSON.stringify(action, null, 2));\n\n      // dispatch if there's no scoringQuizzes etc\n      let shouldDispatchScore = score;\n\n      if (scoringQuizzes.length) {\n        shouldDispatchScore = false;\n      }\n\n      if (shouldDispatchScore) {\n        dispatch(updateScoreAction(interactionContextId, correct ? 1 : 0));\n      }\n\n      dispatch(addScormResponseAction(action));\n    }\n\n    //\n    // we do our unlocking here if !useFeedback\n    //\n    const unlock =\n      isCorrect.current || attempts[interactionContextId] === numberOfAttempts;\n\n    if (!useFeedback && unlock) {\n      setSubmit(SubmitState.Resolved);\n      unlockInteraction(interactionContextId);\n    }\n  };\n\n  const onSubmit = () => {\n    attempts[interactionContextId] += 1;\n    showFeedback(isCorrect.current);\n  };\n\n  const onClose = () => {\n    setFeedback(false);\n  };\n\n  // effects\n  useEffect(() => {\n    if (!window.dev()) {\n      return;\n    }\n\n    try {\n      if (\n        parent.multichoiceIsLive &&\n        parent.multichoiceIsLive[interactionContextId]\n      ) {\n        parent.multichoiceIsLive[interactionContextId]({\n          isLive: !!isLive,\n          isCorrect: isCorrect.current,\n        });\n      }\n\n      if (parent.showFeedback) {\n        parent.showFeedback[interactionContextId] = correct => {\n          if (useUniqueOptionFeedback && !isMultiCorrect && !isLive) {\n            return alert('No options have been selected');\n          }\n\n          if (correct === null) {\n            return setSelected([]);\n          }\n\n          if (correct === 'attempt') {\n            //\n          }\n\n          if (feedback) {\n            setFeedback(false);\n            requestAnimationFrame(() =>\n              showFeedback((isCorrect.current = correct))\n            );\n            //\n            return;\n          }\n\n          showFeedback((isCorrect.current = correct));\n        };\n      }\n    } catch (err) {\n      console.log(err);\n    }\n  });\n\n  useEffect(() => {\n    if (window.dev()) {\n      return;\n    }\n\n    const content = Array.from(\n      multichoice.current!.querySelectorAll('label')\n    ) as any;\n\n    const answerIds = Answers.map((answer: any) => answer.props.id);\n\n    const answers = content.map((t: any) => t.innerText);\n\n    const alphabetized = selected.map((entry: any) => {\n      return 'abcdefghijklmnopqrstuvwxyz'.split('')[answerIds.indexOf(entry)];\n    });\n  });\n\n  let parsedIsCorrect;\n\n  if (\n    !useUniqueOptionFeedback &&\n    attempts[interactionContextId] < numberOfAttempts\n  ) {\n    parsedIsCorrect = isCorrect.current || 'attempt';\n  } else {\n    parsedIsCorrect = isCorrect.current;\n  }\n\n  const _Answers_ =\n    window.dev && !window.dev() && randomizeOptions\n      ? getRandomAnswers(interactionContextId, Answers)\n      : Answers;\n\n  const feedbackOpenerButton = useRef<HTMLButtonElement>();\n\n  return (\n    <MultichoiceContext.Provider\n      value={{\n        isMultiSelect: isMultiCorrect,\n        selected,\n        isLive: !!isLive,\n        correct,\n        updateSelected,\n        submit,\n        answerCount: Answers.length || 1,\n        randomizeOptions,\n        onSubmit: () => {\n          attempts[interactionContextId] += 1;\n          showFeedback(isCorrect.current);\n        },\n      }}\n    >\n      <form ref={multichoice} onSubmit={e => e.preventDefault()}>\n        {!isMultichoiceMedia || includeQuestionTextPlusImage ? (\n          <div style={{ marginBottom: 15 }}>{Question}</div>\n        ) : null}\n\n        {isMultichoiceMedia ? (\n          <div\n            key={`multichoice-media-container-${_Answers_.length}`}\n            css={css({\n              display: 'flex',\n              flexWrap: 'wrap',\n              justifyContent: ['space-between', 'center'][1],\n\n              width: '100%',\n\n              '> div': {\n                margin: '10px',\n                // auto\n              },\n\n              // '[class*=\"EditWrapper\"]': {\n              //   left: 10,\n              //   top: 10,\n              //   width: 'calc(100% - 20px)',\n              //   height: 'calc(100% - 20px)',\n              // },\n\n              '.chameleon-image': {\n                flexShrink: 0,\n              },\n\n              '.chameleon-text': {\n                margin: '10px 0 0 0',\n              },\n            })}\n          >\n            {_Answers_.map((answer, index) => {\n              const { id } = answer?.props;\n\n              const placeholder =\n                multichoiceMediaPlaceholders[\n                  index % multichoiceMediaPlaceholders.length\n                ];\n\n              if (!placeholderMappingToImageId[id]) {\n                placeholderMappingToImageId[id] = placeholder;\n              }\n\n              return (\n                <ImageContext.Provider\n                  key={`image-context-provider-${id}`}\n                  value={{\n                    //\n                    editWrapperType: 1,\n                    editWrapperSize: '80%',\n                    placeholder: placeholderMappingToImageId[id],\n                    canUpdateContainerHeight: false,\n                  }}\n                >\n                  {answer}\n                </ImageContext.Provider>\n              );\n            })}\n          </div>\n        ) : (\n          _Answers_\n        )}\n\n        {(!showReviewFeedback || submit !== SubmitState.Resolved) && (\n          <div\n            css={css({\n              margin: '20px 0 0 0',\n              ...(!window.dev() && {\n                opacity: isLive ? 1 : 0,\n                pointerEvents: isLive ? 'auto' : 'none',\n                transition: 'opacity 0.2s',\n              }),\n\n              ...(isMultichoiceMedia && {\n                display: 'flex',\n                justifyContent: 'center',\n                width: '100%',\n              }),\n            })}\n          >\n            {React.cloneElement(SubmitBtn, {\n              enabled: !!isLive,\n              onClick: onSubmit,\n            })}\n          </div>\n        )}\n\n        {showReviewFeedback &&\n          (window.dev() || submit === SubmitState.Resolved) && (\n            <div\n              style={{\n                margin: window.dev() ? '25px 0 0 0' : '20px 0 0 0',\n                ...(isMultichoiceMedia && {\n                  display: 'flex',\n                  justifyContent: 'center',\n                  width: '100%',\n                }),\n              }}\n            >\n              {React.cloneElement(ReviewFeedback, {\n                onClick() {\n                  showFeedback(parsedIsCorrect);\n                },\n              })}\n            </div>\n          )}\n      </form>\n\n      {feedback && (\n        <Feedback\n          id={\n            !isMultiCorrect\n              ? !useUniqueOptionFeedback\n                ? interactionContextId\n                : selected[0]\n              : interactionContextId\n          }\n          correct={window.dev() ? isCorrect.current : parsedIsCorrect}\n          useAttemptFeedback={!useUniqueOptionFeedback}\n          attempt={attempts[interactionContextId]}\n          numberOfAttempts={numberOfAttempts}\n          showAttemptNumber={showAttemptNumber}\n          useMediaInFeedback={useMediaInFeedback}\n          navigationBehaviour={navigationBehaviour}\n          onOpened={(...$) => {\n            if (window.dev()) {\n              return;\n            }\n          }}\n          onClose={() => {\n            if (!window.dev()) {\n              const unlock =\n                isCorrect.current ||\n                attempts[interactionContextId] === numberOfAttempts;\n\n              if (unlock) {\n                setSubmit(SubmitState.Resolved);\n                unlockInteraction(interactionContextId);\n              }\n            }\n\n            const { correct, incorrect } = navigationBehaviour;\n            // if any of these checks is true. we want to return focus back to the button we're in\n            // or. perhaps we give focus back to the question > options ?\n            if (parsedIsCorrect === 'attempt' || correct || incorrect) {\n              const section = document.querySelector(\n                `#i${interactionContextId}`\n              ) as HTMLElement;\n              //\n              const feedbackButton =\n                section &&\n                (section.querySelector(\n                  '[class*=\"genericButton\"]'\n                ) as HTMLButtonElement);\n              //\n              const focusedElement = feedbackButton || section;\n\n              let abortCounter = 0;\n\n              const tick = setInterval(() => {\n                if (document.activeElement === focusedElement) {\n                  clearInterval(tick);\n                  return;\n                }\n\n                if (abortCounter >= 10) {\n                  console.warn(\n                    'something has somethinged and we cannot give button focus'\n                  );\n                  clearInterval(tick);\n                  return;\n                }\n\n                //\n\n                focusedElement?.focus();\n                abortCounter += 1;\n                //\n              }, 10);\n\n              //\n            }\n\n            onClose();\n          }}\n          {...interactionContext.props}\n        />\n      )}\n    </MultichoiceContext.Provider>\n  );\n};\n\nexport default Multichoice;\n\nexport { MultichoiceContext };\n","import { SCORM } from 'pipwerks-scorm-api-wrapper';\nimport API from 'services/scorm/API';\nimport pubSub from 'services/pubSub';\n\nlet interactionsLockedData = {};\nlet suspend_data: any = undefined;\n\n// pubSub.subscribe('RESET_MODULE', () => {\n//   // interactionsLockedData = {};\n//   // suspend_data = undefined;\n// });\n\nconst getSuspendData = (): string | undefined => {\n  let version = SCORM.version;\n  return version ? SCORM.get(API[version].suspend_data) : undefined;\n};\n\nconst getInteractionsLockedData = (id: string | null = null) => {\n  return id ? interactionsLockedData[id] : interactionsLockedData;\n};\n\nconst setInteractionsLockedData = id => {\n  interactionsLockedData[id] = 0;\n};\n\nconst getMultichoiceData = () => {\n  let local_suspend_data;\n\n  if (suspend_data) {\n    local_suspend_data = suspend_data;\n  } else {\n    local_suspend_data = getSuspendData();\n    local_suspend_data = local_suspend_data\n      ? JSON.parse(local_suspend_data)\n      : {};\n\n    suspend_data = local_suspend_data;\n  }\n\n  return local_suspend_data?.multichoiceData || {};\n};\n\nexport {\n  getInteractionsLockedData,\n  setInteractionsLockedData,\n  getMultichoiceData,\n};\n","/** @jsx jsx */\n\nimport React, { useContext, Fragment } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext as _interactionContext } from './interactionContext';\nimport { getMultichoiceData } from 'services/scorm/scormService';\n\nexport const NewTick = ({ width = 9, height = 7, color }) => {\n  // updated again. . .\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"10\"\n      height=\"10\"\n      viewBox=\"0 0 8 8\"\n    >\n      <g>\n        <path\n          style={{\n            stroke: color,\n            strokeWidth: 1.5,\n            strokeMiterlimit: 10,\n            fill: 'none',\n          }}\n          d=\"M.5,4.46l2.41,2L7.44,1.55\"\n        />\n      </g>\n    </svg>\n  );\n};\n\nexport const Tick = ({ type = 'radio', width = 11, height = 11, color }) => {\n  return (\n    <div\n      css={css({\n        display: 'flex',\n        justifyContent: 'center',\n        alignItems: 'center',\n        width: 20,\n        height: 20,\n      })}\n    >\n      <NewTick color={color} />\n    </div>\n  );\n};\n\nexport const Radio = props => {\n  let {\n    id,\n    selected,\n    updateSelected,\n    correct,\n    resolved,\n    checkboxColor,\n    style,\n    isMulti,\n    isSquare,\n    //\n    hasFocus,\n  } = props;\n\n  // contexts\n  const interactionContext: any = useContext(_interactionContext);\n  const { showCorrectAnswer, isMultichoiceMedia } = interactionContext.props;\n\n  let savedMultichoiceData = getMultichoiceData();\n\n  let lockedBySCORM;\n  if (savedMultichoiceData && savedMultichoiceData[interactionContext.id]) {\n    savedMultichoiceData = savedMultichoiceData[interactionContext.id];\n    //\n    selected = savedMultichoiceData.selected.includes(id);\n    resolved = true;\n    lockedBySCORM = true;\n  }\n\n  return (\n    <Fragment>\n      <div\n        className=\"checkbox-radio\"\n        css={css`\n          all: unset;\n          position: relative;\n          flex: 0 0 auto;\n          width: 20px;\n          height: 20px;\n          ${!isMulti && !isSquare && 'border-radius: 50%;'}\n          border: 1px solid ${checkboxColor};\n          outline: ${checkboxColor};\n          background: ${selected ? checkboxColor : 'transparent'};\n          ${!!showCorrectAnswer &&\n            resolved &&\n            correct &&\n            'background: transparent;'}\n\n          // cursor: pointer;\n\n          ${!(resolved || lockedBySCORM) &&\n            `\n          &:hover {\n            opacity: 0.8;\n            background: ${selected ? checkboxColor : 'transparent'};\n          }\n\n          &:focus {\n            box-shadow: 0 0 0 2px ${checkboxColor};\n            transition: box-shadow 0.2s;\n            ${!isMultichoiceMedia && 'display: none;'}\n          }\n          `}\n\n          // pointer-events: auto;\n\n          ${(resolved || lockedBySCORM) &&\n            `\n            pointer-events: none !important;\n            * {\n              pointer-events: none !important;\n            }\n          `}\n\n       \n        `}\n        style={style}\n        onClick={\n          window.dev()\n            ? e => {\n                e.stopPropagation();\n                updateSelected(id);\n              }\n            : () => {}\n        }\n        // tabIndex={isMultichoiceMedia && 0}\n        // aria-live=\"assertive\"\n      >\n        {!!showCorrectAnswer && resolved && correct && (\n          <div\n            css={css`\n              display: flex;\n              justify-content: center;\n              align-items: center;\n              width: 100%;\n              height: 100%;\n            `}\n          >\n            <Tick\n              type={isMulti || isSquare ? 'checkbox' : 'radio'}\n              color={checkboxColor}\n            />\n          </div>\n        )}\n\n        {/* <div className=\"sr-only\">{selected ? 'checked' : 'not checked'}</div> */}\n      </div>\n    </Fragment>\n  );\n};\n","/** @jsx jsx */\n\nimport React, {\n  useState,\n  useContext,\n  useRef,\n  useLayoutEffect,\n  Fragment as _,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { colors, getButtonFocus } from 'styles/variables';\nimport { interactionContext as _interactionContext } from './interactionContext';\nimport { MultichoiceContext } from './Multichoice_v2';\nimport hexToRgb from 'services/hexToRGB';\nimport { Radio, Tick, NewTick } from './Radio';\n\nconst { lPink, lGrey0, lGrey4, lTeal0 } = colors;\n\nexport const defaultProps = {\n  panelBackground: lGrey0,\n  panelBorderRadius: 5,\n  optionTextColor: '#fff',\n  checkboxColor: '#fff',\n  dropShadow: false,\n};\n\nexport const multichoiceMediaDefaultProps = {\n  panelBackground: '#fff',\n  panelBorderRadius: 20,\n  optionTextColor: '#000',\n  checkboxColor: '#000',\n  dropShadow: true,\n  hasSetWidthHeight: false,\n  mediaPanelWidth: 320,\n  mediaPanelHeight: 360,\n};\n\nconst Answer = props => {\n  const { id, children, style = {} } = props;\n\n  // contexts\n  const interactionContext = useContext<any>(_interactionContext);\n  const multichoiceContext = useContext<any>(MultichoiceContext);\n\n  // refs\n  const answer = useRef<HTMLDivElement | null>(null);\n  const label = useRef(null);\n  const optionText = useRef<HTMLDivElement | null>(null);\n\n  const {\n    panelBackgroundOpacity: _panelBackgroundOpacity = 100,\n    includeText = true,\n    isMultichoiceMedia,\n    mediaPanelWidth = multichoiceMediaDefaultProps.mediaPanelWidth,\n    mediaPanelHeight = multichoiceMediaDefaultProps.mediaPanelHeight,\n    fixedPanelHeight = true,\n    focusColor = '#000',\n  } = interactionContext.props;\n\n  let panelBackground = interactionContext.props.panelBackground;\n  if (panelBackground === undefined) {\n    panelBackground = isMultichoiceMedia ? '#fff' : lGrey0;\n  }\n\n  const { r, g, b } = hexToRgb(panelBackground);\n  const panelBackgroundOpacity = _panelBackgroundOpacity * 0.01;\n  panelBackground = `rgba(${r}, ${g}, ${b}, ${panelBackgroundOpacity})`;\n\n  let { panelOutline } = interactionContext.props;\n\n  if (isMultichoiceMedia && panelOutline === undefined) {\n    panelOutline = true;\n  }\n\n  let { panelOutlineColor } = interactionContext.props;\n  if (isMultichoiceMedia && !panelOutlineColor) {\n    panelOutlineColor = lGrey4;\n  }\n\n  let panelBorderRadius = interactionContext.props.panelBorderRadius;\n  if (panelBorderRadius === undefined) {\n    panelBorderRadius = isMultichoiceMedia ? 20 : 5;\n  }\n\n  let { dropShadow } = interactionContext.props;\n  if (isMultichoiceMedia && dropShadow === undefined) {\n    dropShadow = true;\n  }\n\n  let optionTextColor = interactionContext.props.optionTextColor;\n\n  if (optionTextColor === undefined) {\n    optionTextColor = isMultichoiceMedia ? '#000' : '#fff';\n  }\n\n  let checkboxColor = optionTextColor;\n\n  let {\n    selected,\n    correct,\n    updateSelected,\n    submit,\n    isMultiSelect,\n    answerCount,\n  } = multichoiceContext;\n\n  const isSelected = (selected as any).includes(id);\n\n  correct = (correct as any).includes(id);\n  const resolved = submit === 2;\n\n  const [hasFocus, setHasFocus] = useState<boolean>(false);\n\n  useLayoutEffect(() => {\n    if (!optionText.current) {\n      return;\n    }\n    //\n    // remove the chameleon-text class\n    // so only responds to local color\n    const chameleonText = optionText.current.querySelector('.chameleon-text');\n    if (chameleonText) {\n      // can't use replace without polyfill for ie\n      // this will do\n      chameleonText.classList.remove('chameleon-text');\n      chameleonText.classList.add('chameleon-text-multichoice-answer');\n    }\n  });\n\n  let boxShadow: string | undefined = undefined;\n\n  if (window.dev() && correct) {\n    boxShadow = `0 0 0 1px #fff, 0 0 0 3px ${lPink}`;\n  }\n\n  if (dropShadow) {\n    boxShadow = `${boxShadow ? `${boxShadow}, ` : ''}0px 0px ${\n      isMultichoiceMedia ? 20 : 5\n    }px rgba(0, 0, 0, 0.15)`;\n  }\n\n  let textToSpeechButton;\n\n  if (answer.current) {\n    textToSpeechButton = answer.current.querySelector(\n      '[class*=\"TextToSpeech\"]'\n    );\n  }\n\n  const buttonFocus = getButtonFocus(\n    isMultichoiceMedia ? focusColor : panelBackground\n  )\n    ?.split(':')[1]\n    ?.trim()\n    ?.replace(';', '');\n\n  const optionStyles = {\n    position: 'relative',\n    display: 'flex',\n    alignItems: 'center',\n    width: '100%',\n    minHeight: 60,\n    margin: '7.5px 0',\n    outline: 'none',\n    border: `1px solid\n             ${\n               panelOutline && panelOutlineColor\n                 ? panelOutlineColor\n                 : 'transparent'\n             }`,\n    borderRadius: panelBorderRadius,\n    textAlign: 'left',\n    background: panelBackground,\n\n    color: optionTextColor,\n\n    p: {\n      color: optionTextColor,\n    },\n\n    li: {\n      color: '#fff !important',\n    },\n\n    'li span': {\n      color: optionTextColor,\n    },\n\n    boxShadow: hasFocus ? buttonFocus : boxShadow,\n    transition: 'box-shadow 0.2s',\n    ':hover': {\n      '.checkbox-radio': {\n        opacity: 0.8,\n      },\n    },\n\n    ...(resolved && {\n      pointerEvents: 'none',\n    }),\n  };\n\n  if (isMultichoiceMedia) {\n    //\n\n    const [media, txt] = children[0].props.children;\n\n    const mediaIsText = media?.props?.child === 0;\n    const mediaIsImage = media?.props?.child === 1;\n\n    let imgDescription;\n\n    if (!includeText && mediaIsImage) {\n      imgDescription = answer?.current?.querySelector('img')?.alt;\n    }\n\n    const eventHandlers = {\n      onKeyUp: window.dev()\n        ? () => {}\n        : (e: any) => {\n            if ([' ', 'Enter'].includes(e.key)) {\n              updateSelected(id);\n            }\n          },\n\n      onClick: window.dev()\n        ? () => {}\n        : (e: any) => {\n            updateSelected(id);\n          },\n    };\n\n    // //\n\n    return (\n      <div\n        ref={answer}\n        css={css({\n          position: 'relative',\n          display: 'flex',\n          flexDirection: 'column',\n          width: mediaPanelWidth,\n          height: fixedPanelHeight ? mediaPanelHeight : 'auto',\n          border: `1px solid ${\n            panelOutline && panelOutlineColor\n              ? panelOutlineColor\n              : 'transparent'\n          }`,\n          borderRadius: panelBorderRadius,\n          background: panelBackground,\n          overflow: 'hidden',\n          boxShadow: hasFocus ? buttonFocus : boxShadow,\n          transition: 'box-shadow 0.2s',\n          pointerEvents: submit === 0 ? 'auto' : 'none',\n          ...(resolved && {\n            pointerEvents: 'none',\n          }),\n        })}\n        {...eventHandlers}\n      >\n        <div\n          style={{\n            ...(!mediaIsImage && {\n              minHeight: 110,\n            }),\n            padding: mediaIsText ? '0 10px' : 0,\n          }}\n        >\n          {media}\n        </div>\n\n        <div\n          id={`i${id}`}\n          css={css({\n            display: 'flex',\n            flex: 1,\n            flexDirection: 'column',\n            justifyContent: 'space-between',\n\n            padding: `${window.dev() ? '0px' : '10px'} 10px 10px 10px`,\n          })}\n        >\n          {!!includeText && (\n            <div\n              css={css({\n                flex: 1,\n\n                margin: 0,\n\n                '.chameleon-text p': {\n                  color: optionTextColor,\n                },\n\n                '&li': {\n                  color: '#fff !important',\n                },\n                '&li span': {\n                  color: optionTextColor,\n                },\n              })}\n            >\n              {window.dev() ? (\n                txt\n              ) : (\n                <_>\n                  <label\n                    htmlFor={`input-${id}`}\n                    css={css({\n                      cursor: 'pointer',\n\n                      '.chameleon-text': {\n                        padding: '10px 15px',\n                      },\n                    } as any)}\n                    onClick={e => {\n                      e.stopPropagation();\n                    }}\n                  >\n                    {txt}\n                  </label>\n                </_>\n              )}\n            </div>\n          )}\n\n          {imgDescription && (\n            <label htmlFor={`input-${id}`} className=\"sr-only\">\n              {imgDescription}\n            </label>\n          )}\n\n          {!resolved && (\n            <input\n              type={isMultiSelect ? 'checkbox' : 'radio'}\n              id={`input-${id}`}\n              name={`input-${id}`}\n              value={id}\n              css={css({\n                position: 'absolute',\n                left: 0,\n                top: 0,\n                transform: 'scale(0)',\n              })}\n              checked={selected.includes(id) ? true : false}\n              onFocus={() => {\n                setHasFocus(true);\n              }}\n              onBlur={() => {\n                setHasFocus(false);\n              }}\n              onKeyUp={e => {\n                if (e.key === 'Enter') {\n                  e.preventDefault();\n                  e.stopPropagation();\n\n                  // console.log(`should fire 'click' event !!!`);\n                  return;\n                }\n              }}\n              onChange={(e: any) => {\n                // console.log('updateSelected', id);\n                updateSelected(id);\n              }}\n            />\n          )}\n\n          <div\n            css={css({\n              display: 'flex',\n              justifyContent: 'center',\n              width: '100%',\n              margin: '10px 0 5px 0',\n\n              input: {\n                pointerEvents: 'none',\n              },\n\n              cursor: 'pointer',\n              pointerEvents: resolved ? 'none' : 'auto',\n            })}\n          >\n            <Radio\n              id={id}\n              isMulti={isMultiSelect}\n              isSquare={answerCount === 1}\n              correct={correct}\n              selected={(selected as any).includes(id)}\n              updateSelected={updateSelected}\n              resolved={resolved}\n              checkboxColor={checkboxColor}\n              style={style}\n            />\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div id={`i${id}`}>\n      {' '}\n      {window.dev() ? (\n        <div\n          css={css({\n            ...optionStyles,\n\n            '.chameleon-text': {\n              margin: '0 15px 0 5px',\n            },\n          } as any)}\n        >\n          {children}\n          <Radio\n            id={id}\n            isMulti={isMultiSelect}\n            isSquare={answerCount === 1}\n            correct={correct}\n            selected={(selected as any).includes(id)}\n            updateSelected={updateSelected}\n            resolved={resolved}\n            checkboxColor={checkboxColor}\n            style={{\n              ...style,\n            }}\n          />\n          <div style={{ width: 15 }} />\n        </div>\n      ) : (\n        <div style={{ position: 'relative' }}>\n          <label\n            htmlFor={`input-${id}`}\n            css={css({\n              ...optionStyles,\n\n              cursor: 'pointer',\n\n              '.chameleon-text': {\n                padding: '8px 50px 8px 15px',\n              },\n            } as any)}\n            onClick={e => {\n              e.stopPropagation();\n            }}\n          >\n            {children}\n\n            <div\n              css={css({\n                position: 'absolute',\n                display: 'flex',\n                alignItems: 'center',\n                right: 15,\n                top: 0,\n                width: 20,\n                height: '100%',\n\n                pointerEvents: 'none',\n\n                '*': {\n                  pointerEvents: 'none',\n                },\n              })}\n            >\n              <Radio\n                id={id}\n                isMulti={isMultiSelect}\n                isSquare={answerCount === 1}\n                correct={correct}\n                selected={(selected as any).includes(id)}\n                updateSelected={updateSelected}\n                resolved={resolved}\n                checkboxColor={checkboxColor}\n                style={style}\n              />\n            </div>\n          </label>\n\n          {!resolved && (\n            <input\n              type={isMultiSelect ? 'checkbox' : 'radio'}\n              id={`input-${id}`}\n              name={`input-${id}`}\n              value={id}\n              css={css({\n                position: 'absolute',\n                left: 0,\n                top: 0,\n                transform: 'scale(0)',\n              })}\n              checked={selected.includes(id) ? true : false}\n              onFocus={() => {\n                setHasFocus(true);\n              }}\n              onBlur={() => {\n                setHasFocus(false);\n              }}\n              onKeyUp={e => {\n                if (e.key === 'Enter') {\n                  e.preventDefault();\n                  e.stopPropagation();\n\n                  // console.log(`should fire 'click' event !!!`);\n                  return;\n                }\n              }}\n              onChange={(e: any) => {\n                // console.log('updateSelected', id);\n                updateSelected(id);\n              }}\n            />\n          )}\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport default Answer;\n","/** @jsx jsx */\n\nimport React, { Fragment as _, memo, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport Container from 'components/Layouts/ContainerLogical';\nimport Multichoice_v2 from './Multichoice_v2';\nimport Media, { MediaContext, IMediaContext } from 'components/lib/Media';\nimport { imgPlaceholders } from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport Audio from 'components/lib/Audio';\nimport SVG from 'components/lib/SVG';\nimport Embed from 'components/lib/Embed';\nimport Answer from './Answer';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport shouldUpdate from 'services/shouldUpdate';\nimport PDF from 'components/lib/PDF';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport MultiChoice_default from 'assets/Rectangle.png';\nimport CC_QuestionTextImage from 'assets/CC_Question Text + Image.svg';\nimport { ImageContext } from 'components/lib/Image/Image';\nimport { findByKeyVal_V2 } from 'services/findByKeyVal';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  ColumnContentForMultichoiceMedia: ({ children, ...props }) => {\n    const interactionContext = useContext(InteractionContext);\n\n    const { includeQuestionTextPlusImage } = interactionContext.props;\n\n    const [img, txt] = children;\n\n    return includeQuestionTextPlusImage ? (\n      <ImageContext.Provider\n        value={{\n          placeholder: CC_QuestionTextImage,\n        }}\n      >\n        {img}\n      </ImageContext.Provider>\n    ) : (\n      <span id={`multichoice-media-question-text-${interactionContext.id}`}>\n        {txt}\n      </span>\n    );\n  },\n  InteractionColumn: ({ children, ...props }) => {\n    const interactionContext = useContext(InteractionContext);\n    const { includeAdditionalTextField } = interactionContext.props;\n\n    const [multichoice, txt] = children;\n\n    if (!includeAdditionalTextField) {\n      return multichoice;\n    }\n\n    return (\n      <_>\n        {multichoice}\n        <div\n          style={{\n            margin: '20px 0 0 0',\n          }}\n        >\n          {txt}\n        </div>\n      </_>\n    );\n  },\n  Text: EditableText,\n\n  Image: ({ children, ...props }) => {\n    const mediaContext = useContext(MediaContext) as IMediaContext;\n    const { isAdditionalMedia } = mediaContext;\n\n    return (\n      <Image\n        {...{\n          ...props,\n          placeholder: imgPlaceholders[1],\n        }}\n      />\n    );\n  },\n  TwoColumnLayout: TwoColumnLayout,\n  SingleColumnLayout: SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  EditableButton: EditableBtn,\n  ReviewFeedback: EditableBtn,\n  Video,\n  Audio,\n  Transcript: ({ children, props }) => {\n    return children;\n  },\n  SVG,\n  Embed,\n  Media,\n  MultichoiceMedia: ({ children, props }) => children,\n  MultichoiceWithText: Multichoice_v2,\n  //\n  Answer,\n  Feedback: () => null,\n  Correct: () => null,\n  Incorrect: () => null,\n  Attempt: () => null,\n  PDF,\n  OpenPDF,\n  Modal: () => null,\n};\n\nconst MultichoiceDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  const hasAttemptFeedback = findByKeyVal_V2(\n    interactionBlock.id,\n    'type',\n    'Attempt'\n  );\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{\n          ...interactionBlock,\n          updateItemsSeen: null,\n          hasAttemptFeedback,\n        }}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </InteractionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default MultichoiceDisplay;\n","import MultichoiceDisplay from './MultichoiceDisplay_v2';\n\nexport default MultichoiceDisplay;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","const setNewBlockNewTree = (newTree, newBlock, store, setBlocksAction) => {\n  newTree[newBlock.id] = newBlock;\n  store.dispatch(setBlocksAction(newTree));\n};\n\nexport default setNewBlockNewTree;\n","import React, { useState, useEffect } from 'react';\n\ninterface IProps {\n\t[key: string]: any;\n}\n\nconst useSetState = (initialState: IProps = {}) => {\n\tconst [state, setState] = useState(initialState);\n\n\tuseEffect(() => {\n\t\t//\n\t}, []);\n\n\treturn {\n\t\tstate,\n\t\tsetState: $ =>\n\t\t\tsetState({ ...state, ...(typeof $ === 'function' ? $(state) : $) }),\n\t};\n};\n\nexport default useSetState;\n","import React from 'react';\n\nconst Dot = ({ color, onOpen, style = {} }) => (\n  <div\n    style={{\n      width: 20,\n      height: 20,\n      border: `1px solid ${\n        [\n          '#fff',\n          '#ffffff',\n          '#FFF',\n          '#FFFFFF',\n          '',\n          // 'transparent',\n          undefined,\n          null,\n        ].includes(color)\n          ? '#ff0063'\n          : color\n      }`,\n      borderRadius: '50%',\n      background: color,\n      cursor: 'pointer',\n      ...style,\n    }}\n    onClick={onOpen}\n  />\n);\n\nexport default Dot;\n","\nexport const setErrorAction = err => {\n  return {\n    type: 'SET_ERROR',\n    data: err,\n  };\n};\n","import * as Sentry from '@sentry/browser';\nimport { remoteable } from 'store/next';\nimport { setErrorAction } from \"./setErrorAction\";\n\n\n\nexport const updateUserPaletteAction = (data): any => {\n  return (dispatch, getState) => {\n    const n = {\n      type: 'UPDATE_USER_PALETTE',\n      data,\n    };\n\n    dispatch(n);\n\n    if (remoteable()) {\n      const { theme, themeId } = getState();\n      const nextTheme = {\n        ...theme,\n        userPalette: data,\n      };\n\n      window.client.themes\n        .set(`/api/v2/themes/${themeId}`, nextTheme)\n        .catch(err => {\n          Sentry.withScope(scope => {\n            scope.setExtra('message', err.err);\n            Sentry.captureException(err);\n          });\n          dispatch(setErrorAction(err));\n        });\n    }\n  };\n};\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\n\nconst AddRemmoveBtn = ({\n  color = '#000',\n  left = 0,\n  top = 0,\n  size = 24,\n  rotation = 0,\n  style = {},\n  onClick,\n}: {\n  color?: string;\n  left?: number;\n  top?: number;\n  size?: number;\n  rotation?: number;\n  style?: object;\n  onClick?: (e?: any) => void;\n}) => (\n  <div\n    css={css`\n      cursor: pointer;\n      &:hover {\n        opacity: 0.8;\n      }\n    `}\n    style={{\n      ...style,\n      position: 'relative',\n      left,\n      top,\n      width: size,\n      height: size,\n      transform: `rotate(${rotation}deg)`,\n      transformOrigin: '50% 50%',\n    }}\n    onClick={onClick}\n  >\n    <svg width={`${size}px`} height={`${size}px`} viewBox=\"0 0 24 24\">\n      <g\n        id=\"Page-1\"\n        stroke=\"none\"\n        strokeWidth=\"1\"\n        fill=\"none\"\n        fillRule=\"evenodd\"\n      >\n        <g\n          id=\"Second\"\n          transform=\"translate(-308.000000, -366.000000)\"\n          stroke={color}\n        >\n          <g id=\"Delete\" transform=\"translate(309.000000, 367.000000)\">\n            <path\n              d=\"M11,4.88888889 L11,17.1111111\"\n              id=\"Line-Copy-4\"\n              strokeLinecap=\"square\"\n              transform=\"translate(11.000000, 11.000000) rotate(-45.000000) translate(-11.000000, -11.000000) \"\n            />\n            <path\n              d=\"M17.1111111,11 L4.88888889,11\"\n              id=\"Line-Copy-5\"\n              strokeLinecap=\"square\"\n              transform=\"translate(11.000000, 11.000000) rotate(-45.000000) translate(-11.000000, -11.000000) \"\n            />\n          </g>\n        </g>\n      </g>\n    </svg>\n  </div>\n);\n\nexport default AddRemmoveBtn;\n","/** @jsx jsx */\n\nimport { connect } from 'react-redux';\nimport { css, jsx } from '@emotion/core';\nimport { updateUserPaletteAction } from 'actions/updateUserPaletteAction';\nimport { colors } from 'styles/variables';\nimport AddRemoveBtn from 'components/UI/AddRemoveBtn';\nimport getStore from 'services/getStore';\nimport { themeButtonDefault } from 'store/store';\n\nconst store = getStore();\n\nconst { lPink, lGrey0 } = colors;\n\nconst Swatch = ({ color, onClick }) => {\n  return (\n    <div\n      css={css`\n        flex-shrink: 0;\n      `}\n      style={{\n        width: 20,\n        height: 20,\n        marginRight: 5,\n        border: `1px solid ${\n          ['#fff', '#ffffff', '#FFF', '#FFFFFF', '', undefined, null].includes(\n            color\n          )\n            ? '#ff0063'\n            : color\n        }`,\n        borderRadius: '50%',\n        background: color,\n        cursor: 'pointer',\n      }}\n      onClick={onClick}\n    />\n  );\n};\n\nconst AddRemoveBtnWrapped = ({ rotation = 0, onClick }) => {\n  return (\n    <div\n      css={css`\n        margin-right: 5px;\n        cursor: pointer;\n        &:hover {\n          opacity: 0.8;\n        }\n      `}\n    >\n      <AddRemoveBtn\n        color={lPink}\n        rotation={rotation}\n        size={20}\n        onClick={onClick}\n      />\n    </div>\n  );\n};\n\nconst UserPalette = ({\n  currentColor,\n  selectColor,\n  theme,\n}: {\n  currentColor?: string;\n  selectColor?: any;\n  theme?: any;\n}) => {\n  const {\n    headerBackgroundColor = '#fff',\n    headerTextColor = lGrey0,\n    backgroundColor = '#fff',\n    textColor = lGrey0,\n    buttonBackgroundColor = lPink,\n    buttonTextColor = '#fff',\n  } = theme;\n\n  const colorsFromTheme = {\n    headerBackgroundColor,\n    headerTextColor,\n    backgroundColor,\n    textColor,\n    buttonBackgroundColor,\n    buttonTextColor,\n  };\n\n  //\n  // updating from the new theme.buttons.main etc\n  const themeButtonsMain = {\n    ...themeButtonDefault,\n    ...theme?.buttons?.main,\n  };\n\n  colorsFromTheme.buttonBackgroundColor = themeButtonsMain.backgroundColor;\n  colorsFromTheme.buttonTextColor = themeButtonsMain.textColor;\n  //\n  //\n\n  let userPalette: string[] = [];\n  if (theme?.userPalette && Array.isArray(theme.userPalette)) {\n    userPalette = Array.from(theme.userPalette) as string[];\n  }\n\n  const addToPalette = () => {\n    if (currentColor && userPalette.includes(currentColor)) {\n      return;\n    }\n\n    store.dispatch(updateUserPaletteAction([...userPalette, currentColor]));\n  };\n\n  const removeFromPalette = () => {\n    const confirm = window.confirm('Remove this color from your palette?');\n    if (!confirm) return;\n\n    store.dispatch(\n      updateUserPaletteAction([...userPalette.filter(c => c !== currentColor)])\n    );\n  };\n\n  return (\n    <div>\n      <h4 style={{ marginBottom: 5, fontSize: 14 }}>Colours from theme:</h4>\n      <div\n        css={css`\n          display: flex;\n          flexwrap: wrap;\n        `}\n      >\n        {Object.keys(colorsFromTheme).map((color, i) => (\n          <Swatch\n            key={color}\n            color={colorsFromTheme[color]}\n            onClick={() => selectColor(colorsFromTheme[color])}\n          />\n        ))}\n      </div>\n\n      <h4 style={{ margin: '15px 0 5px 0', fontSize: 14 }}>\n        Add or remove current colour:\n      </h4>\n\n      <div\n        css={css`\n          display: flex;\n        `}\n      >\n        <AddRemoveBtnWrapped rotation={45} onClick={addToPalette} />\n        <AddRemoveBtnWrapped rotation={0} onClick={removeFromPalette} />\n      </div>\n      <div\n        css={css`\n          display: flex;\n          flex-wrap: wrap;\n          margin-top: 10px;\n        `}\n      >\n        {userPalette.map((color, i) => (\n          <Swatch\n            key={color + i}\n            color={color}\n            onClick={() => selectColor(color)}\n          />\n        ))}\n      </div>\n    </div>\n  );\n};\n\nexport default connect(({ theme }: { theme: any }) => ({\n  theme,\n}))(UserPalette);\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport { addScormResponseAction } from 'actions/addScormResponseAction';\nimport { updateScoreAction } from 'actions/updateScoreAction';\nimport CorrectAnswersWidget from 'components/Editor/EditMultichoiceImage/CorrectAnswersWidget';\nimport SelectOptionAddRemoveWidget from 'components/Editor/EditSelectOptions/SelectOptionAddRemoveWidget';\nimport Feedback from 'components/lib/Feedback';\nimport React, {\n  Fragment as _,\n  createContext,\n  ReactElement,\n  useContext,\n  useEffect,\n  useRef,\n  cloneElement,\n  useState,\n} from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useScoringQuizzes } from 'services/apiHelpers/useScoringQuizzes';\nimport { getScore, setScore } from 'services/scoring';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport { State } from 'store/store';\nimport { interactionContext as _interactionContext } from './interactionContext';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport Modal from 'components/UI/Modal';\nimport { ShowMultichoiceMediaFeedback } from 'components/Editor/EditMultichoiceImage/EditMultichoiceImage';\nimport pubSub from 'services/pubSub';\nimport { findByKeyVal_V2 } from 'services/findByKeyVal';\n\nconst findChildByType = (type, parent) => {\n  let result;\n  const children = parent?.props?.children;\n\n  if (Array.isArray(children)) {\n    for (let i = 0; i < children.length; i += 1) {\n      const child = children[i];\n      if (!result && child?.props?.type === type) {\n        result = child;\n        break;\n      }\n\n      if (Array.isArray(child?.props?.children)) {\n        findChildByType(type, child);\n      }\n    }\n  }\n\n  return result;\n};\n\nexport type TMultichoiceImageContextValue = {\n  selected: number[];\n  setSelected: (index: number) => void;\n  isLive: boolean;\n  isResolved: boolean;\n  onSubmit: () => void;\n};\n\ntype Result = 'correct' | 'incorrect' | 'attempt' | undefined;\n\nexport const MultichoiceImageContext = createContext({});\n\nconst MultichoiceImage = props => {\n  const interactionContext = useContext(_interactionContext);\n  const { defaultFeedback } = interactionContext;\n  //\n  const {\n    correctOptions,\n    numberOfAttempts = 2,\n    showAttemptNumber = true,\n    navigationBehaviour = {\n      correct: false,\n      incorrect: false,\n    },\n    useUniqueOptionFeedback,\n    useMediaInFeedback = true,\n    showCorrectAnswer,\n  } = interactionContext.props;\n\n  const { children } = props;\n\n  const [media, answers, submitBtn] = children;\n\n  const [selected, setSelected] = useState<number[]>([]);\n  const [isResolved, setIsResolved] = useState<boolean>(false);\n  const [isCorrect, setIsCorrect] = useState<boolean>(false);\n  const [result, setResult] = useState<Result>(undefined);\n  const [showFeedback, setShowFeedback] = useState<boolean>(false);\n\n  const attempt = useRef<number>(0);\n\n  const isLive: boolean = !!selected.length;\n\n  let feedback = defaultFeedback;\n\n  if (correctOptions.length === 1 && useUniqueOptionFeedback) {\n    feedback = findChildByType(\n      'Feedback',\n      answers.props.children[parseInt(correctOptions, 10)]\n    );\n  }\n\n  console.log(feedback);\n\n  useEffect(() => {\n    unlockInteraction(interactionContext.id);\n  }, [isResolved]);\n\n  useEffect(() => {\n    if (!window.dev()) {\n      return;\n    }\n\n    pubSub.subscribe(\n      `${ShowMultichoiceMediaFeedback}${interactionContext.id}`,\n      ({ result }) => {\n        setResult(result);\n        setShowFeedback(true);\n      }\n    );\n  }, []);\n\n  return (\n    <MultichoiceImageContext.Provider\n      value={\n        {\n          selected,\n          setSelected(index) {\n            setSelected(selected => {\n              const $ = [...selected];\n\n              if ($.includes(index)) {\n                console.log('remove', index);\n                $.splice($.indexOf(index), 1);\n              } else {\n                console.log('add', index);\n                $.push(index);\n              }\n\n              console.log($.sort());\n              return $.sort();\n            });\n          },\n          onSubmit() {\n            const isCorrect = selected.sort().join(',') === correctOptions;\n\n            let result: Result = isCorrect ? 'correct' : 'incorrect';\n\n            attempt.current += 1;\n            if (attempt.current < numberOfAttempts && result !== 'correct') {\n              result = 'attempt';\n            }\n\n            setResult(result);\n\n            if (['correct', 'incorrect'].includes(result)) {\n              setIsResolved(true);\n            }\n\n            setShowFeedback(true);\n          },\n          isLive,\n          isResolved,\n        } as TMultichoiceImageContextValue\n      }\n    >\n      <div\n        style={{\n          display: 'flex',\n          flex: 0,\n          flexWrap: 'wrap',\n          justifyContent: 'space-around',\n        }}\n      >\n        {answers.props.children.map((answer, index) => {\n          return cloneElement(answer, { index: index + 1 });\n        })}\n      </div>\n      <div\n        style={{\n          margin: '20px 0 0 0',\n        }}\n      >\n        {submitBtn}\n      </div>\n\n      {showFeedback &&\n        feedback &&\n        React.cloneElement(feedback, {\n          result,\n          showAttemptNumber,\n          attempt: attempt.current,\n          numberOfAttempts,\n          navigationBehaviour,\n          onClose() {\n            setShowFeedback(false);\n          },\n          useMediaInFeedback,\n        })}\n    </MultichoiceImageContext.Provider>\n  );\n};\n\nexport default MultichoiceImage;\n","/** @jsx jsx */\n\nimport React, { Fragment as _, useState, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport setBlockProps from 'services/apiHelpers/setBlockProps';\nimport { colors } from 'styles/variables';\nimport { TwoColumnElement, SingleColumnElement } from '../EditorUtilities/grid';\nimport { Flexbox } from '@chameleoncreator/creator-ui';\nimport { findByKeyVal_V2 } from 'services/findByKeyVal';\nimport { setBlocksAction } from 'actions/setBlocksAction';\nimport getStore from 'services/getStore';\nimport CorrectAnswersWidget from './CorrectAnswersWidget';\nimport MultichoiceImageOptionAddRemoveWidget from './MultichoiceImageOptionAddRemoveWidget';\n// updated UI\nimport { H1 as H1_v2, H2 } from '../EditorUtilities/UI/Headings';\nimport TogglePanel from '../EditorUtilities/UI/TogglePanel';\nimport CheckBox_v2 from '../EditorUtilities/UI/CheckBox';\nimport Button from '../EditorUtilities/UI/Button';\nimport NumberPicker_v2 from '../EditorUtilities/UI/NumberPicker';\nimport ColorPicker_v2 from '../EditorUtilities/UI/ColorPicker';\nimport Info from '../EditorUtilities/UI/Info';\nimport { useScoringQuizzes } from 'services/apiHelpers/useScoringQuizzes';\nimport setNewBlockNewTree from 'services/apiHelpers/setNewBlockNewTree';\nimport pubSub from 'services/pubSub';\n\nconst { lGrey0 } = colors;\n\nconst togglePanelsCache = {};\n\nexport const ShowMultichoiceMediaFeedback = 'showMultichoiceMediaFeedback';\n\nconst EditMultichoiceImage = ({ block }: { block?: any }) => {\n  //\n  const {\n    imageBackground = '#fff',\n    imageBorderRadius = 5,\n    optionTextColor,\n    numberOfAttempts,\n    correctOptions,\n    lockDown,\n    score,\n    useFeedback = true,\n    navigationBehaviour = {\n      correct: false,\n      incorrect: false,\n    },\n    randomizeOptions = false,\n    useMediaInColumn = true,\n    useMediaInFeedback = true,\n    useUniqueOptionFeedback,\n    showCorrectAnswer = true,\n    showAttemptNumber = true,\n    dropShadow = false,\n    imageWidth = 130,\n    imageHeight = 130,\n    outlineColor = '#000',\n    focusColor = '#000',\n    selectedColor = '#000',\n    outlineStyle = '1px solid transparent',\n  } = block.props;\n\n  const [{ isLive, isCorrect }, setIsLive] = useState({\n    isLive: false,\n    isCorrect: false,\n  });\n\n  const { id } = block;\n\n  const scoringQuizzes = useScoringQuizzes();\n\n  const multichoiceImageBlock = findByKeyVal_V2(\n    block.id,\n    'type',\n    'MultichoiceImage'\n  );\n\n  // get the feedbackBlock checking if it has the Attempt feedback\n  const hasAttemptFeedback = findByKeyVal_V2(block.id, 'type', 'Attempt');\n\n  //\n  const numOptions = multichoiceImageBlock!.children!.length;\n  const correctOptionsToArray = correctOptions.split(/,/g);\n  const multi = correctOptionsToArray.length > 1;\n\n  const saveTogglePanelState = (panel, open) => {\n    togglePanelsCache[id] = {\n      ...togglePanelsCache[id],\n      [panel]: open,\n    };\n\n    setBlockProps(block, { ...block.props });\n  };\n\n  window.multichoiceIsLive[id] = $ => setIsLive($);\n\n  useEffect(() => {\n    if (!useFeedback) {\n      setBlockProps(block, {\n        lockDown: 1,\n        numberOfAttempts: 1,\n      });\n    }\n  }, [useFeedback]);\n\n  useEffect(\n    () => () => {\n      window.multichoiceIsLive[id] = null;\n    },\n    []\n  );\n\n  return (\n    <_>\n      {/* <Box mt={3}> */}\n      <TogglePanel\n        label={<H1_v2>interaction: settings</H1_v2>}\n        toggle={\n          togglePanelsCache[id]\n            ? togglePanelsCache[id]['interaction: settings']\n            : true\n        }\n        onToggle={open => saveTogglePanelState('interaction: settings', open)}\n      >\n        <CheckBox_v2\n          label=\"Lock down\"\n          on={!!lockDown}\n          onClick={() => setBlockProps(block, { lockDown: !!lockDown ? 0 : 1 })}\n        />\n\n        <div\n          // css={css({\n          //   ...(scoringQuizzes.length && {\n          //     opacity: 0.5,\n          //     pointerEvents: 'none',\n          //   }),\n          // })}\n          style={{\n            ...(scoringQuizzes.length && {\n              opacity: 0.5,\n              pointerEvents: 'none',\n            }),\n          }}\n        >\n          {!!scoringQuizzes.length && (\n            <div\n              style={{\n                margin: '0 0 5px 0',\n                fontSize: 12,\n                fontWeight: 500,\n                color: 'red',\n              }}\n            >\n              Scoring is disabled for this interaction while an assessment is\n              scoring.\n            </div>\n          )}\n          <CheckBox_v2\n            label=\"Score\"\n            on={!!score}\n            onClick={() => setBlockProps(block, { score: !score })}\n          />\n        </div>\n      </TogglePanel>\n\n      <TogglePanel\n        label={<H1_v2>multichoice: settings</H1_v2>}\n        toggle={\n          togglePanelsCache[id]\n            ? togglePanelsCache[id]['multichoice: settings']\n            : true\n        }\n        onToggle={open => saveTogglePanelState('multichoice: settings', open)}\n      >\n        <div>\n          <Info\n            info=\"Click '+' to add a new answer. Click the number of an answer\n        you wish to remove.\"\n            style={{ margin: '0 0 5px 0' }}\n          >\n            Answers\n          </Info>\n\n          <MultichoiceImageOptionAddRemoveWidget\n            multichoiceImageBlock={multichoiceImageBlock}\n            correctOptions={correctOptions}\n            updateCorrectOptions={(add, newTree, newBlock) => {\n              const parsedCorrectOptions = correctOptions\n                .split(/,/g)\n                .filter(entry => entry !== '')\n                .sort();\n              const lastCorrectOption = Number(\n                parsedCorrectOptions[parsedCorrectOptions.length - 1]\n              );\n              const numOptions = multichoiceImageBlock!.children!.length;\n\n              if (!add && lastCorrectOption === numOptions) {\n                // remove the last option from correctOptions\n                parsedCorrectOptions.splice(\n                  parsedCorrectOptions.indexOf(lastCorrectOption),\n                  1\n                );\n\n                setBlockProps(block, {\n                  correctOptions: parsedCorrectOptions.sort().join(),\n                });\n              }\n\n              const store = getStore();\n\n              setNewBlockNewTree(newTree, newBlock, store, setBlocksAction);\n            }}\n          />\n        </div>\n\n        <div>\n          <Info\n            info=\"Select 1 or more correct answers\"\n            style={{ margin: '0 0 5px 0' }}\n          >\n            Correct answers\n          </Info>\n\n          <CorrectAnswersWidget\n            numOptions={numOptions}\n            correctOptions={correctOptions}\n            onUpdate={val => {\n              // reset selected options\n              isLive && window.showFeedback[id](null);\n\n              // just hacking this in to keep the current format. will update\n              const parsedVal = val.toString();\n              const parsedCorrectOptions = correctOptions\n                .split(/,/g)\n                .filter(entry => entry !== '')\n                .sort();\n\n              const updatedCorrectOptions = parsedCorrectOptions.includes(\n                parsedVal\n              )\n                ? parsedCorrectOptions.filter(option => option !== parsedVal)\n                : [...parsedCorrectOptions, val];\n\n              if (!!!updatedCorrectOptions.length)\n                return alert('At least one option must be selected.');\n\n              setBlockProps(block, {\n                correctOptions: updatedCorrectOptions.sort().join(),\n                ...(updatedCorrectOptions.length > 1 && {\n                  useUniqueOptionFeedback: false,\n                }),\n              });\n            }}\n          />\n        </div>\n\n        <div>\n          <CheckBox_v2\n            label=\"Randomise answers\"\n            on={randomizeOptions}\n            onClick={() =>\n              setBlockProps(block, {\n                randomizeOptions: !randomizeOptions,\n              })\n            }\n          />\n        </div>\n\n        <div>\n          <CheckBox_v2\n            label=\"Include feedback\"\n            on={useFeedback ? 1 : 0}\n            onClick={() =>\n              setBlockProps(block, {\n                useFeedback: !useFeedback,\n              })\n            }\n            // style={{\n            //   ...(multi && { opacity: 0.25, pointerEvents: 'none' }),\n            // }}\n          />\n        </div>\n\n        {useFeedback && (\n          <_>\n            <H1_v2>multichoice feedback</H1_v2>\n            <div\n              css={css`\n                display: flex;\n                width: 100%;\n              `}\n            >\n              {multi || !useUniqueOptionFeedback ? (\n                <TwoColumnElement>\n                  <Button\n                    enabled={true}\n                    onClick={e => {\n                      // window.showFeedback[id](true)\n                      pubSub.publish(`${ShowMultichoiceMediaFeedback}${id}`, {\n                        result: 'correct',\n                      });\n                    }}\n                  >\n                    Show correct\n                  </Button>\n\n                  <Button\n                    enabled={true}\n                    onClick={e => {\n                      //window.showFeedback[id](false)\n                      pubSub.publish(`${ShowMultichoiceMediaFeedback}${id}`, {\n                        result: 'incorrect',\n                      });\n                    }}\n                  >\n                    Show incorrect\n                  </Button>\n                </TwoColumnElement>\n              ) : (\n                <SingleColumnElement>\n                  <Flexbox\n                    alignItems=\"center\"\n                    justifyContent=\"center\"\n                    style={{\n                      ...(!isLive && { opacity: 0.25, pointerEvents: 'none' }),\n                    }}\n                  >\n                    <Button\n                      enabled={true}\n                      onClick={e => {\n                        // window.showFeedback[id](isCorrect)\n                        pubSub.publish(`${ShowMultichoiceMediaFeedback}${id}`, {\n                          result: 'correct',\n                        });\n                      }}\n                    >\n                      Show feedback\n                    </Button>\n                  </Flexbox>\n                </SingleColumnElement>\n              )}\n            </div>\n\n            <CheckBox_v2\n              label=\"Use unique feedback\"\n              on={useUniqueOptionFeedback ? 1 : 0}\n              onClick={() =>\n                setBlockProps(block, {\n                  useUniqueOptionFeedback: !useUniqueOptionFeedback,\n                })\n              }\n              style={{\n                ...(multi && { opacity: 0.25, pointerEvents: 'none' }),\n              }}\n            />\n\n            <div\n              css={css`\n                margin: 10px 0 ${useUniqueOptionFeedback ? '10px' : '0'} 0;\n              `}\n            >\n              {hasAttemptFeedback && (\n                <NumberPicker_v2\n                  label=\"Number of attempts\"\n                  min={1}\n                  value={numberOfAttempts}\n                  onChange={value => {\n                    setBlockProps(block, { numberOfAttempts: value });\n                  }}\n                />\n              )}\n            </div>\n\n            {hasAttemptFeedback &&\n            !useUniqueOptionFeedback &&\n            numberOfAttempts > 1 ? (\n              <_>\n                <SingleColumnElement>\n                  <Flexbox>\n                    <Button\n                      enabled={true}\n                      onClick={e => {\n                        //window.showFeedback[id]('attempt')\n                        pubSub.publish(`${ShowMultichoiceMediaFeedback}${id}`, {\n                          result: 'attempt',\n                        });\n                      }}\n                    >\n                      Show attempted\n                    </Button>\n                  </Flexbox>\n                </SingleColumnElement>\n              </_>\n            ) : null}\n\n            {hasAttemptFeedback && numberOfAttempts > 1 && (\n              <CheckBox_v2\n                label=\"Show attempt number\"\n                on={showAttemptNumber ? 1 : 0}\n                onClick={() =>\n                  setBlockProps(block, {\n                    showAttemptNumber: !showAttemptNumber,\n                  })\n                }\n              />\n            )}\n\n            <div\n              css={css`\n                margin: 10px 0 0 0;\n              `}\n            >\n              <CheckBox_v2\n                label=\"Include media in feedback\"\n                on={useMediaInFeedback ? 1 : 0}\n                onClick={() =>\n                  setBlockProps(block, {\n                    useMediaInFeedback: !useMediaInFeedback,\n                  })\n                }\n              />\n            </div>\n          </_>\n        )}\n\n        <CheckBox_v2\n          label=\"Show tick on completion\"\n          on={showCorrectAnswer ? 1 : 0}\n          onClick={() =>\n            setBlockProps(block, {\n              showCorrectAnswer: !!showCorrectAnswer ? 0 : 1,\n            })\n          }\n        />\n\n        <div>\n          <Info\n            info=\"Control how you would like the interaction to progress when resolved.\"\n            style={{ margin: '0 0 5px 0' }}\n          >\n            Navigation\n          </Info>\n\n          <div>\n            <CheckBox_v2\n              label=\"Remain on page when answered correct\"\n              on={navigationBehaviour.correct ? 1 : 0}\n              style={{\n                margin: '0 0 10px 0',\n              }}\n              onClick={() =>\n                setBlockProps(block, {\n                  navigationBehaviour: {\n                    ...navigationBehaviour,\n                    correct: !navigationBehaviour.correct,\n                  },\n                })\n              }\n            />\n\n            <CheckBox_v2\n              label=\"Remain on page when answered incorrect\"\n              on={navigationBehaviour.incorrect ? 1 : 0}\n              style={{\n                margin: '0 0 10px 0',\n              }}\n              onClick={() =>\n                setBlockProps(block, {\n                  navigationBehaviour: {\n                    ...navigationBehaviour,\n                    incorrect: !navigationBehaviour.incorrect,\n                  },\n                })\n              }\n            />\n          </div>\n        </div>\n\n        <H1_v2>multichoice appearance: settings</H1_v2>\n\n        <div\n          css={css`\n            margin: 10px 0 0 0;\n          `}\n        >\n          <CheckBox_v2\n            label=\"Include media\"\n            on={useMediaInColumn ? 1 : 0}\n            onClick={() =>\n              setBlockProps(block, {\n                useMediaInColumn: !useMediaInColumn,\n              })\n            }\n          />\n        </div>\n\n        <NumberPicker_v2\n          label=\"Image width\"\n          min={0}\n          value={imageWidth}\n          onChange={value => {\n            setBlockProps(block, { imageWidth: value });\n          }}\n        />\n\n        <NumberPicker_v2\n          label=\"Image height\"\n          min={0}\n          value={imageHeight}\n          onChange={value => {\n            setBlockProps(block, { imageHeight: value });\n          }}\n        />\n\n        <ColorPicker_v2\n          inColor={imageBackground}\n          outColor={color => setBlockProps(block, { imageBackground: color })}\n          label=\"Image background colour\"\n          clearedColor=\"\"\n        />\n\n        <ColorPicker_v2\n          inColor={optionTextColor}\n          outColor={color =>\n            setBlockProps(block, {\n              optionTextColor: color,\n            })\n          }\n          label=\"Text colour\"\n          clearedColor=\"#000\"\n        />\n\n        <CheckBox_v2\n          label=\"Drop shadow\"\n          on={dropShadow ? 1 : 0}\n          onClick={() =>\n            setBlockProps(block, {\n              dropShadow: !dropShadow,\n            })\n          }\n        />\n\n        <NumberPicker_v2\n          label=\"Image border radius\"\n          min={0}\n          value={imageBorderRadius}\n          onChange={value => {\n            setBlockProps(block, { imageBorderRadius: value });\n          }}\n        />\n\n        <ColorPicker_v2\n          inColor={outlineColor}\n          outColor={color =>\n            setBlockProps(block, {\n              outlineColor: color,\n            })\n          }\n          label=\"Outline colour\"\n          clearedColor=\"#000\"\n        />\n\n        <ColorPicker_v2\n          inColor={focusColor}\n          outColor={color =>\n            setBlockProps(block, {\n              focusColor: color,\n            })\n          }\n          label=\"Focus colour\"\n          clearedColor=\"#000\"\n        />\n\n        <ColorPicker_v2\n          inColor={selectedColor}\n          outColor={color =>\n            setBlockProps(block, {\n              selectedColor: color,\n            })\n          }\n          label=\"Selected colour\"\n          clearedColor=\"#000\"\n        />\n      </TogglePanel>\n      {/* </Box> */}\n    </_>\n  );\n};\n\nexport default EditMultichoiceImage;\n","/** @jsx jsx */\n\nimport { Fragment as _, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport isIE from 'services/isIE';\nimport getBlockById from 'services/apiHelpers/getBlockById';\n\n\nconst IELayout = interactionContext => {\n  return isIE()\n    ? {\n      Row: ({ children, ...props }) => {\n        return (\n          <div\n            css={css`\n                display: flex;\n              `}\n          >\n            {children}\n          </div>\n        );\n      },\n      Column: ({ children, ...props }) => {\n        const context = useContext(interactionContext);\n\n        const testBorder = children.length === 1 ? 'lightBlue' : 'lime';\n\n        const block = getBlockById(props.id);\n        const isButtonBlock =\n          block && block.meta && block.meta.subType === 'ButtonBlock';\n\n        return (\n          <div\n            css={css`\n            display: flex;\n            ${isButtonBlock &&\n              `\n              justify-content: center;\n              flex-wrap: wrap;\n              `}\n            align-items: center;\n            width: 100%;\n\n           \n            padding: 8px;\n            \n\n          `}\n          >\n            {children}\n          </div>\n        );\n      },\n      TwoColumnLayout: ({ children }) => {\n        return (\n          <div\n            css={css`\n                display: flex;\n              `}\n          >\n            {children}\n          </div>\n        );\n      },\n      SingleColumnLayout: ({ children }) => {\n        return (\n          <div\n            css={css`\n                display: flex;\n                flex-direction: column;\n                width: 100%;\n\n                ${children.length > 1 && 'height: auto;'}\n\n                .chameleon-text {\n                  width: 100%;\n\n                  * {\n                    width: 100%;\n                  }\n                }\n              `}\n          >\n            {children}\n          </div>\n        );\n      },\n    }\n    : {};\n};\n\nexport default IELayout;\n","/** @jsx jsx */\n\nimport React, {\n  useContext,\n  useState,\n  useRef,\n  useLayoutEffect,\n  Fragment,\n  useEffect,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { colors, getButtonFocus } from 'styles/variables';\nimport { interactionContext as _interactionContext } from './interactionContext';\nimport {\n  MultichoiceImageContext,\n  TMultichoiceImageContextValue,\n} from './MultichoiceImage';\n\nconst { lPink, lGrey0, lTeal0 } = colors;\n\nconst Tick = ({ background, color }) => {\n  return (\n    <div\n      style={{\n        position: 'absolute',\n        display: 'flex',\n        justifyContent: 'center',\n        alignItems: 'center',\n        right: -22,\n        top: -22,\n        width: 44,\n        height: 44,\n\n        background: '#fff',\n        borderRadius: '50%',\n        border: `1px solid ${background}`,\n      }}\n    >\n      <svg\n        width=\"16px\"\n        height=\"15px\"\n        viewBox=\"0 0 16 15\"\n        version=\"1.1\"\n        aria-describedby=\"title\"\n      >\n        <title>Correct</title>\n        <g\n          id=\"Page-1\"\n          stroke=\"none\"\n          strokeWidth=\"1\"\n          fill=\"none\"\n          fillRule=\"evenodd\"\n        >\n          <polyline\n            id=\"Path\"\n            stroke={color}\n            strokeWidth=\"2\"\n            transform=\"translate(7.486953, 6.527846) rotate(6.000000) translate(-7.486953, -6.527846) \"\n            points=\"0.886953048 9.1308343 6.78684502 13.1278461 14.086953 -0.0721539421\"\n          />\n        </g>\n      </svg>\n    </div>\n  );\n};\n\nconst Answer = props => {\n  const interactionContext = useContext(_interactionContext);\n  // console.log(interactionContext);\n  //\n  const {\n    imageWidth = 130,\n    imageHeight = 130,\n    correctOptions,\n    focusColor = lTeal0,\n    selectedColor = lPink,\n    imageBorderRadius = 5,\n    imageBackground = '#fff',\n    showCorrectAnswer = true,\n  } = interactionContext.props;\n\n  const multichoiceImageContext = useContext(\n    MultichoiceImageContext\n  ) as TMultichoiceImageContextValue;\n  const { selected, setSelected, isLive, isResolved } = multichoiceImageContext;\n\n  const { index, children } = props;\n\n  const [hasFocus, setHasFocus] = useState<boolean>(false);\n  const isSelected = selected.includes(index);\n  const isCorrectOption = correctOptions.includes(index);\n  const [img, txt] = children;\n\n  let boxShadow = 'none';\n\n  if (hasFocus) {\n    boxShadow = getButtonFocus(focusColor).replace(/box-shadow: /, '');\n  }\n\n  if (isSelected) {\n    boxShadow = getButtonFocus(selectedColor).replace(/box-shadow: /, '');\n  }\n\n  if (window.dev() && correctOptions.includes(index)) {\n    boxShadow = `0 0 0 3px ${lPink}`;\n  }\n\n  return (\n    <button\n      type=\"button\"\n      css={css({\n        // border: 'none',\n        // outline: 'none',\n        all: 'unset',\n        margin: 20,\n        cursor: 'pointer',\n\n        pointerEvents: isResolved ? 'none' : 'auto',\n      })}\n      onClick={e => {\n        setSelected(index);\n      }}\n      onFocus={() => {\n        // give image focus\n        setHasFocus(true);\n      }}\n      onBlur={() => {\n        // give image focus\n        setHasFocus(false);\n      }}\n      disabled={isResolved}\n      aria-disabled={isResolved}\n    >\n      <div\n        css={css({\n          position: 'relative',\n          width: imageWidth,\n          height: imageHeight,\n\n          // // boxShadow: `0 0 0 2px ${isSelected ? focusColor : 'transparent'}`,\n          // boxShadow: hasFocus\n          //   ? getButtonFocus(focusColor).replace(/box-shadow: /, '')\n          //   : 'none',\n\n          // ...(window.dev() && {\n          //   boxShadow: `0 0 0 2px ${\n          //     correctOptions.includes(index) ? 'red' : 'transparent'\n          //   }`,\n          // }),\n          boxShadow,\n          borderRadius: imageBorderRadius,\n          transition: 'box-shadow 0.2s',\n          background: imageBackground,\n        })}\n      >\n        {img}\n\n        {showCorrectAnswer && isResolved && isCorrectOption && (\n          <Tick background={imageBackground} color={selectedColor} />\n        )}\n      </div>\n      <div\n        style={{\n          margin: '5px 0 0 0',\n          textAlign: 'center',\n        }}\n      >\n        {txt}\n      </div>\n    </button>\n  );\n};\n\nexport default Answer;\n","/** @jsx jsx */\n\nimport { useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext as _interactionContext } from './interactionContext';\nimport {\n  MultichoiceImageContext,\n  TMultichoiceImageContextValue,\n} from './MultichoiceImage';\nimport EditableBtn from 'components/lib/EditableBtn';\n\nconst SubmitBtn = props => {\n  const { children } = props;\n\n  const multichoiceImageContext = useContext(\n    MultichoiceImageContext\n  ) as TMultichoiceImageContextValue;\n\n  const { isLive, isResolved, onSubmit } = multichoiceImageContext;\n\n  return (\n    <div\n      css={css`\n        margin-top: 20px;\n        ${!window.dev() &&\n          `\n          opacity: ${isLive && !isResolved ? 1 : 0};\n          pointer-events: ${isLive && !isResolved ? 'auto' : 'none'};\n          transition: opacity 0.2s;\n        `}\n      `}\n    >\n      <EditableBtn\n        {...{ enabled: isLive && !isResolved, ...props }}\n        onClick={onSubmit}\n      >\n        {children}\n      </EditableBtn>\n    </div>\n  );\n};\n\nexport default SubmitBtn;\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useContext,\n  useEffect,\n  useMemo,\n  useRef,\n  useCallback,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport Modal from 'components/UI/Modal';\nimport checkReturnToInteractionEditing from 'services/checkReturnToInteractionEditing';\n\nconst Feedback = props => {\n  const {\n    result = '',\n    attempt,\n    navigationBehaviour = {},\n    showAttemptNumber,\n    numberOfAttempts,\n    useMediaInFeedback = true,\n    onOpened,\n    onClose = () => {},\n    children,\n    id,\n    block,\n    correct,\n    showCorrectAnswer,\n  } = props;\n\n  const targetFeedback = children.filter(child => {\n    return child.props.type.replace('_Feedback', '').toLowerCase() === result;\n  })[0];\n\n  // console.log({ targetFeedback });\n\n  let [img, txt, btn] = targetFeedback?.props?.children || [];\n\n  const isImg = img?.props?.child === 1;\n\n  const parsedOnClose = () => {\n    if (window.dev()) {\n      checkReturnToInteractionEditing(true);\n      onClose();\n      return;\n    }\n\n    onClose();\n\n    if (result === 'attempt') {\n      return;\n    }\n\n    if (result !== 'correct' && attempt && attempt < numberOfAttempts!) {\n      return;\n    }\n\n    // this code has been updated since\n    // from here the correct / incorrect <a> tags ( buttons ) navigate to their hrefs\n  };\n\n  const showAttemptNumberComputed =\n    showAttemptNumber &&\n    result !== 'correct' &&\n    numberOfAttempts! > 1 &&\n    attempt! < numberOfAttempts!;\n\n  let nullSpaceCloseAction = () => {};\n\n  if (btn && btn.props.location) {\n    if (\n      btn.props.location === 'next' ||\n      (numberOfAttempts! > 1 && attempt! < numberOfAttempts!)\n    ) {\n      if (result !== 'correct') {\n        nullSpaceCloseAction = onClose;\n      }\n    }\n  } else {\n    nullSpaceCloseAction = onClose;\n  }\n\n  const feedbackTextCB = useCallback((node: HTMLDivElement | null) => {\n    if (node !== null) {\n      const chameleonText = node.querySelector(\n        '.chameleon-text'\n      ) as HTMLDivElement;\n\n      chameleonText?.removeAttribute('tabindex');\n    }\n  }, []);\n\n  const buttonContainerCB = useCallback(\n    (node: HTMLDivElement | null) => {\n      if (!node) {\n        return;\n      }\n\n      const anchorButton = node.querySelector('a');\n      if (!anchorButton) {\n        return;\n      }\n\n      anchorButton.style.margin = '0';\n\n      if (result !== 'correct' && attempt && attempt < numberOfAttempts - 1) {\n        anchorButton.style.pointerEvents = 'none';\n        return;\n      }\n\n      if (result === 'correct' && navigationBehaviour.correct) {\n        anchorButton.style.pointerEvents = 'none';\n        anchorButton.href = '';\n        return;\n      }\n\n      if (result !== 'correct' && navigationBehaviour.incorrect) {\n        anchorButton.style.pointerEvents = 'none';\n        anchorButton.href = '';\n        return;\n      }\n    },\n    [\n      result,\n      attempt,\n      numberOfAttempts,\n      navigationBehaviour.incorrect,\n      navigationBehaviour.correct,\n    ]\n  );\n\n  if (!result) {\n    return null;\n  }\n\n  return (\n    <Modal\n      disableNullSpaceClick={window.dev() ? false : true}\n      onOpened={onOpened}\n      onClose={window.dev() ? onClose : nullSpaceCloseAction}\n    >\n      <div\n        css={css`\n          position: relative;\n          display: flex;\n          flex-direction: column;\n          align-items: center;\n          width: 100%;\n          height: 100%;\n          max-width: 768px;\n          padding: 50px;\n        `}\n      >\n        {useMediaInFeedback && (\n          <div\n            css={css`\n              position: relative;\n              width: 100%;\n              margin-bottom: 30px;\n\n              .chameleon-image img {\n                // max-height: 30vh !important;\n\n                height: auto !important;\n                object-fit: contain;\n              }\n\n              @media (max-width: 768px) {\n                width: 100%;\n                margin-bottom: 25px;\n              }\n            `}\n          >\n            {img}\n          </div>\n        )}\n\n        {result === 'attempt' && showAttemptNumberComputed && (\n          <div\n            style={{\n              margin: '0 0 15px 0',\n              fontFamily: 'inherit',\n              fontWeight: 700,\n              color: '#333',\n            }}\n          >\n            <p>\n              Attempt {attempt} of {numberOfAttempts}\n            </p>\n          </div>\n        )}\n        <div\n          ref={feedbackTextCB}\n          css={css`\n            width: 100%;\n            margin-bottom: 30px;\n          `}\n        >\n          {txt}\n        </div>\n        <div\n          ref={buttonContainerCB}\n          css={css`\n            display: flex;\n            justify-self: flex-end;\n            justify-content: center;\n            width: 100%;\n          `}\n        >\n          <span\n            css={css`\n              cursor: pointer;\n\n              &:hover {\n                opacity: 0.8;\n              }\n\n              button {\n                pointer-events: none;\n              }\n\n              div [class*='NavigationButton'] {\n                top: -10px;\n                height: calc(100% + 20px);\n              }\n            `}\n            onClick={e => {\n              !window.dev() ? parsedOnClose() : null;\n            }}\n          >\n            {btn}\n          </span>\n        </div>\n      </div>\n    </Modal>\n  );\n};\n\nexport default Feedback;\n","/** @jsx jsx */\n\nimport React, { Fragment as _, memo, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport Container from 'components/Layouts/ContainerLogical';\nimport MultichoiceImage from './MultichoiceImage';\nimport Media from 'components/lib/Media';\nimport Video from 'components/lib/Video';\nimport Audio from 'components/lib/Audio';\nimport Transcript from 'components/lib/Video/Transcript';\nimport SVG from 'components/lib/SVG';\nimport Embed from 'components/lib/Embed';\nimport { interactionContext } from './interactionContext';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport IELayout from 'components/Layouts/IELayout';\nimport shouldUpdate from 'services/shouldUpdate';\nimport PDF from 'components/lib/PDF';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport { interactionContext as _interactionContext } from './interactionContext';\nimport MultiChoice_default from 'assets/Rectangle.png';\nimport Answer from './Answer';\nimport SubmitBtn from './SubmitBtn';\nimport Feedback from 'components/lib/Feedback/Feedback_updated_022022';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  InteractionColumn: ({ children }) => {\n    return children?.[0] || null;\n  },\n  Image: ({ children, ...props }) => {\n    const updatedProps = {\n      ...props,\n    };\n\n    if (!props.src) {\n      updatedProps.placeholder = MultiChoice_default;\n    }\n\n    return <Image {...{ ...updatedProps, usePlaceholderValue: true }} />;\n  },\n  TwoColumnLayout: TwoColumnLayout,\n  SingleColumnLayout: SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  EditableButton: SubmitBtn,\n  Video,\n  Audio,\n  Transcript: ({ children, props }) => {\n    return children;\n  },\n  SVG,\n  Embed,\n  Media,\n  MultichoiceImageWithText: MultichoiceImage,\n  ColumnImageAndText: ({ children, ...props }) => {\n    const interactionContext = useContext(_interactionContext);\n    const { useMediaInColumn = true } = interactionContext.props;\n\n    const [img, txt] = children;\n    return useMediaInColumn ? children : txt;\n  },\n  //\n  Answer,\n  Feedback,\n  Correct: ({ children, ...props }) => children,\n  Incorrect: ({ children, ...props }) => children,\n  Attempt: ({ children, ...props }) => children,\n  PDF,\n  OpenPDF,\n  Modal: () => null,\n  ...IELayout(interactionContext),\n};\n\nconst MultichoiceImageDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  const renderedChildren = (interactionBlock.children as Block[]).map(child => {\n    return renderBlock(child, Components);\n  });\n\n  const defaultFeedback = renderedChildren[1];\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <interactionContext.Provider\n        value={{\n          ...interactionBlock,\n          updateItemsSeen: null,\n          defaultFeedback,\n        }}\n      >\n        {renderedChildren}\n      </interactionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default MultichoiceImageDisplay;\n","import MultichoiceImageDisplay from './MultichoiceImageDisplay';\n\nexport default MultichoiceImageDisplay;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","import { Block } from '@chameleoncreator/creator-app';\nimport getStore from 'services/getStore';\n\nexport default (type: string, key: string | undefined = undefined) => {\n  const blocks = Object.values<Block>(getStore().getState().blocks).filter(\n    (b: any) => b.type === type\n  );\n\n  if (key) {\n    return blocks.map(b => b[key])\n  }\n\n  return blocks;\n};\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useLayoutEffect,\n  useEffect,\n  useRef,\n  useContext,\n  useState,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { colors } from 'styles/variables';\nimport { interactionContext } from './interactionContext';\nimport isIE from 'services/isIE';\nimport onScrollEnds from 'services/onScrollEnds';\nimport hexToRgb from 'services/hexToRGB';\nimport { rgbaFromHexAndOpacity } from 'services/rgbaFromHexAndOpacity';\n\nconst { lPink, lGrey0, lGrey1, lGrey2 } = colors;\n\nexport const sortationPanelDefaultStyling = {\n  panelBackgroundDragging: '#949595',\n};\n\nconst Option = ({ option, isDragging }) => {\n  const { id, children } = option;\n\n  const context = useContext<any>(interactionContext);\n\n  const optionContainer = useRef<any>(null);\n\n  const { includeImage } = context.props;\n\n  const {\n    panelBackground: _panelBackground = includeImage ? '#fff' : lGrey0,\n    panelBackgroundDragging: _panelBackgroundDragging = sortationPanelDefaultStyling.panelBackgroundDragging,\n    textColor = includeImage ? '#000' : '#fff',\n    textColorDragging = '#000',\n    optionBorderRadius = 5,\n    optionBackgroundOpacity = includeImage ? 0 : 100,\n    optionBackgroundOpacityDragging: _optionBackgroundOpacityDragging = 100,\n    optionOutline = false,\n    optionOutlineColor = '',\n    includeText = true,\n    imagePosition = 'top',\n  } = context.props;\n\n  const [txt, img] = children;\n\n  const panelBackground = rgbaFromHexAndOpacity(\n    _panelBackground,\n    optionBackgroundOpacity\n  );\n\n  const panelTextColor = context.props.panelTextColor || textColor || '#fff'; // doubleTap the default\n  const panelTextColorDragging =\n    context.props.panelTextColorDragging || textColorDragging || '#000'; // doubleTap the default\n\n  const { r: rr, g: gg, b: bb } = hexToRgb(_panelBackgroundDragging);\n  const optionBackgroundOpacityDragging =\n    _optionBackgroundOpacityDragging * 0.01;\n  const panelBackgroundDragging = `rgba(${rr}, ${gg}, ${bb}, 1)`; // ${optionBackgroundOpacityDragging}\n\n  useLayoutEffect(() => {\n    // remove the chameleon-text class\n    // so only responds to local color\n    const chameleonText = optionContainer.current.querySelector(\n      '.chameleon-text'\n    );\n    chameleonText && chameleonText.classList.remove('chameleon-text');\n  });\n\n  useEffect(() => {\n    if (!isIE() || !optionContainer.current) {\n      return;\n    }\n    //\n    let tick;\n\n    const onResize = () => {\n      const content = optionContainer.current.firstElementChild;\n\n      clearInterval(tick);\n\n      tick = setInterval(() => {\n        if (content.scrollHeight === 0) {\n          return;\n        }\n\n        if (\n          optionContainer.current.scrollHeight ===\n          content.scrollHeight + 10\n        ) {\n          clearInterval(tick);\n        }\n\n        optionContainer.current.style.height = `${content.scrollHeight + 10}px`;\n      }, 1000 / 60);\n    };\n\n    onScrollEnds(onResize);\n    addEventListener('resize', onResize);\n\n    onResize();\n\n    return () => {\n      removeEventListener('resize', onResize);\n    };\n  }, []);\n\n  let flexDirection = {\n    top: 'column',\n    bottom: 'column-reverse',\n    left: 'row',\n    right: 'row-reverse',\n  }[imagePosition];\n\n  const columnWidth =\n    includeImage && includeText && ['left', 'right'].includes(imagePosition)\n      ? '50%'\n      : '100%';\n\n  return (\n    <div\n      ref={optionContainer}\n      id={`sortation-option-${id}`}\n      className=\"sortation-option\"\n      css={css({\n        display: 'flex',\n        alignItems: 'center',\n\n        ...(includeImage && {\n          flexDirection,\n        }),\n\n        minHeight: 55,\n        background: isDragging ? panelBackgroundDragging : panelBackground,\n        margin: '5px 0',\n        padding: optionBackgroundOpacity === 0 ? 0 : '5px 10px',\n        //\n\n        border: `1px solid ${\n          optionOutline && optionOutlineColor\n            ? optionOutlineColor\n            : 'transparent'\n        }`,\n\n        borderRadius: optionBorderRadius,\n\n        [`* ${!isDragging ? ':not(span)' : ''}`]: {\n          color: isDragging\n            ? `${panelTextColorDragging} !important`\n            : panelTextColor,\n        },\n\n        'h1, h2, h3, p': {\n          margin: 0,\n        },\n\n        '[class*=\"ReadOnlyText\"]': {\n          width: '100%',\n        },\n\n        ...(!window.dev() && {\n          userSelect: 'none',\n        }),\n\n        '[class*=\"ReadOnlyText\"]': {\n          width: '100%',\n        },\n      })}\n    >\n      {!!includeImage && (\n        <div\n          style={{\n            flex: 1,\n          }}\n        >\n          {img}\n        </div>\n      )}\n\n      {!!!includeImage && txt}\n    </div>\n  );\n};\n\nexport default Option;\n","import hexToRgb from 'services/hexToRGB';\n\nexport const rgbaFromHexAndOpacity = (hex: string, opacity: number) => {\n  const { r, g, b } = hexToRgb(hex);\n\n  const _0_100_ = opacity < 0 ? 0 : opacity > 100 ? 100 : opacity;\n\n  return `rgba(${r}, ${g}, ${b}, ${_0_100_ * 0.01})`;\n};\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport { addScormResponseAction } from 'actions/addScormResponseAction';\nimport { updateScoreAction } from 'actions/updateScoreAction';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport Feedback from 'components/lib/Feedback';\nimport { SCORM } from 'pipwerks-scorm-api-wrapper';\nimport { Fragment as _, useContext, useEffect, useRef, useState } from 'react';\nimport { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';\nimport { useDispatch, useSelector } from 'react-redux';\nimport getBlocksByType from 'services/apiHelpers/getBlocksByType';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { useScoringQuizzes } from 'services/apiHelpers/useScoringQuizzes';\nimport { findByKeyVal_V2 } from 'services/findByKeyVal';\nimport { getScore, setScore } from 'services/scoring';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport { Report, State } from 'store/store';\nimport { colors, getButtonFocus } from 'styles/variables';\nimport { interactionContext } from './interactionContext';\nimport Option from './Option';\nimport hexToRgb from 'services/hexToRGB';\nimport pubSub from 'services/pubSub';\n\nconst { lGrey0, lGrey2 } = colors;\n\nlet sessionLock = {};\nlet attempts = {};\n\npubSub.subscribe('RESET_MODULE', () => {\n  console.log('sortation resets');\n\n  sessionLock = {};\n  attempts = {};\n});\n\nexport const sortationDefaultStyling = {\n  baseColor: lGrey2,\n  baseColorOpacity: 100,\n  baseOutline: false,\n  baseOutlineColor: '',\n  baseBorderRadius: 10,\n  // numberOfAttempts,\n  score: true,\n  showCorrectAnswer: 0,\n};\n\nfunction shuffle(array) {\n  let m = array.length,\n    t,\n    i;\n\n  let n = [...array];\n\n  // While there remain elements to shuffle…\n\n  while (m) {\n    // Pick a remaining element…\n\n    const i = Math.floor(Math.random() * m--);\n\n    // And swap it with the current element.\n\n    t = n[m];\n\n    n[m] = n[i];\n\n    n[i] = t;\n  }\n\n  i = Math.floor(Math.random() * n.length);\n\n  if (n.every((option, k) => option.id === array[k].id)) {\n    let j = Math.floor(Math.random() * n.length);\n\n    while (j === i) {\n      j = Math.floor(Math.random() * n.length);\n    }\n\n    t = n[i];\n\n    n[i] = n[j];\n\n    n[j] = t;\n  }\n\n  return n;\n}\n\nconst Sortation = props => {\n  const context = useContext(interactionContext);\n  const {\n    baseColor: _baseColor = lGrey2,\n    baseColorOpacity: _baseColorOpacity = 100,\n    baseOutline = false,\n    baseOutlineColor = '',\n    baseBorderRadius = 10,\n    // numberOfAttempts,\n    score,\n    showCorrectAnswer,\n    showAttemptNumber,\n    useMediaInFeedback = true,\n    useFeedback = true,\n    navigationBehaviour = {\n      correct: false,\n      incorrect: false,\n    },\n    // direction = 'vertical',\n  } = context.props;\n\n  let direction = context.props.direction || 'vertical';\n\n  const { r, g, b } = hexToRgb(_baseColor);\n  const baseColorOpacity = _baseColorOpacity * 0.01;\n  const baseColor = `rgba(${r}, ${g}, ${b}, ${baseColorOpacity})`;\n\n  const numberOfAttempts = context.hasAttemptFeedback\n    ? context.props.numberOfAttempts\n    : 0;\n\n  const { id, children } = props;\n\n  let questionText =\n    children[0]?.props?.type === 'SortationQuestionText' ? children[0] : null;\n\n  const answers = getBlocksByType('Answer', 'id');\n  const heading0 = getBlocksByType('SortationHeading0', 'id');\n  const heading1 = getBlocksByType('SortationHeading1', 'id');\n  const options = children\n    .filter(c => answers.includes(c.props.id))\n    .map((c, i) => {\n      const { id, children } = c.props;\n      return { id, children };\n    });\n  const sortFrom = children.find(c => heading0.includes(c.props.id));\n  const sortTo = children.find(c => heading1.includes(c.props.id));\n\n  const [order, setOrder] = useState(() =>\n    !window.dev() ? shuffle(options) : options\n  );\n\n  const [isLive, setIsLive] = useState(false);\n  const [submit, setSubmit] = useState(sessionLock[context.id] ? 2 : 0);\n\n  const scoringQuizzes = useScoringQuizzes();\n  const { scoreAll } = useSelector((state: State) => {\n    return Object.values(state.blocks).find(b => b.type === 'Module')\n      ?.props as any;\n  });\n\n  const sortation = useRef<HTMLDivElement>(null);\n  const hasAttempt = useRef<Boolean>(false);\n\n  if (!attempts[context.id]) {\n    attempts[context.id] = 0;\n  }\n\n  const isCorrect = useRef(false);\n\n  sessionLock[context.id] =\n    attempts[context.id] === numberOfAttempts &&\n    score &&\n    getScore(context.id) !== undefined;\n\n  const [feedback, setFeedback] = useState(false);\n\n  // console.log({ direction_ });\n  // const [direction, setDirection] = useState<'vertical' | 'horizontal'>(\n  //   direction_\n  // );\n\n  // console.log({ direction });\n\n  const [localDirection, setLocalDirection] = useState<\n    'vertical' | undefined\n  >();\n\n  if (localDirection) {\n    direction = localDirection;\n  }\n\n  // console.log({ localDirection });\n\n  const dispatch = useDispatch();\n\n  const updateOrder = $ => {\n    const { source, destination } = $;\n\n    const reorder = (list, startIndex, endIndex) => {\n      const reordered = [...list];\n      const [removed] = reordered.splice(startIndex, 1);\n      reordered.splice(endIndex, 0, removed);\n\n      return reordered;\n    };\n\n    const newOrder = reorder(order, source.index, destination.index);\n\n    isCorrect.current = options.every((o, i) => o.id === newOrder[i].id);\n\n    setScore(context.id, isCorrect.current);\n    setOrder(newOrder);\n  };\n\n  const showFeedback = correct => {\n    useFeedback && setFeedback(true);\n\n    if (window.dev()) {\n      return;\n    }\n\n    const sortationResolved =\n      correct || attempts[context.id] === numberOfAttempts;\n\n    if (sortationResolved && showCorrectAnswer === 1) {\n      setOrder(options);\n    }\n\n    if (sortationResolved) {\n      // && score\n      const alphabetized = Array.from(\n        sortation.current!.querySelectorAll('.sortation-option')\n      ).map((option: any) => {\n        const id = option.id.replace('sortation-option-', '');\n        return 'abcdefghijklmnopqrstuvwxyz'.split('')[\n          options.findIndex((o: any) => o.id === id)\n        ];\n      });\n\n      // dispatch if there's no scoringQuizzes etc\n      let shouldDispatchScore = score;\n      //\n      if (scoringQuizzes.length) {\n        shouldDispatchScore = false;\n      }\n\n      let questionText:\n        | NodeList\n        | string[]\n        | string = document.querySelectorAll(\n        `#i${context.id} [class*=\"SortationHeading\"]`\n      ) as NodeList;\n\n      if (questionText) {\n        questionText = Array.from(questionText).map(q => {\n          return (q as HTMLElement).innerText;\n        });\n\n        questionText = `Sort items from ${questionText[0]} to ${questionText[1]}`;\n      }\n\n      const getCorrectAndResponseOptions = entry => {\n        let optionText: HTMLElement | string = document.querySelector(\n          `#sortation-option-${entry.id}`\n        ) as HTMLElement;\n        if (optionText) {\n          optionText = optionText.innerText;\n        }\n\n        return optionText;\n      };\n\n      const alphabetToArray = 'abcdefghijklmnopqrstuvwxyz'.split('');\n\n      const correctExpanded = alphabetToArray\n        .slice(0, options.length)\n        .join(SCORM.version == '1.2' ? ',' : '[,]');\n\n      const optionsIds = options.map(o => o.id || o.props.id);\n      const orderIds = order.map(o => o.id || o.props.id);\n\n      const responseExpanded = orderIds\n        .map(id => {\n          return alphabetToArray[optionsIds.indexOf(id)];\n        })\n        .join(SCORM.version == '1.2' ? ',' : '[,]');\n\n      //\n      const isCorrectCurrentToScore: 0 | 1 = isCorrect.current ? 1 : 0;\n\n      const action = {\n        id: context.id,\n        type: 'sequencing',\n        question: questionText,\n        reportable: 'sortation',\n        response: responseExpanded,\n        correct: correctExpanded,\n        // @sam. updated this from the bool it was. to send a 1 | 0\n        result: isCorrectCurrentToScore,\n      } as Report;\n\n      if (shouldDispatchScore) {\n        dispatch(updateScoreAction(context.id, isCorrectCurrentToScore));\n      }\n\n      dispatch(addScormResponseAction(action));\n    }\n\n    if (isCorrect.current || attempts[context.id] === numberOfAttempts) {\n      setSubmit(2);\n      unlockInteraction(context.id);\n    }\n  };\n\n  const onClose = () => {\n    setFeedback(false);\n  };\n\n  //\n  const idDep = options\n    .map(entry => {\n      return entry.id;\n    })\n    .join('_');\n\n  //\n  useEffect(() => {\n    if (!window.dev()) {\n      return;\n    }\n\n    setOrder(options);\n  }, [idDep]);\n  //\n\n  useEffect(() => {\n    if (hasAttempt.current && !isLive) {\n      setIsLive(true);\n    }\n\n    if (window.dev()) {\n      if (parent.showFeedback) {\n        parent.showFeedback[context.id] = correct => {\n          if (feedback) {\n            setFeedback(false);\n            requestAnimationFrame(() =>\n              showFeedback((isCorrect.current = correct))\n            );\n            //\n          } else {\n            showFeedback((isCorrect.current = correct));\n          }\n        };\n      }\n    }\n\n    if (order.length !== options.length) {\n      setOrder(options);\n    }\n  });\n\n  const SubmitBtn: any = renderBlock(\n    findByKeyVal_V2(props.id, 'type', 'EditableButton')!,\n    {\n      EditableButton: ({ ...props }) => (\n        <EditableBtn\n          {...{ enabled: !!isLive, ...props }}\n          onClick={() => {\n            attempts[context.id] += 1;\n            showFeedback(isCorrect.current);\n          }}\n        />\n      ),\n    }\n  );\n\n  useEffect(() => {\n    if (direction === 'vertical') {\n      return;\n    }\n\n    var mq = window.matchMedia('(max-width: 768px)');\n\n    onMQChange(mq);\n    mq.addEventListener('change', onMQChange);\n\n    function onMQChange(mq) {\n      setLocalDirection(mq.matches ? 'vertical' : undefined);\n    }\n\n    return () => {\n      mq.removeEventListener('change', onMQChange);\n    };\n  }, []);\n\n  useEffect(() => {\n    if (window.dev() || !sortation.current) {\n      return;\n    }\n\n    const alphabetized = Array.from(\n      sortation.current.querySelectorAll('.sortation-option')\n    ).map((option: any) => {\n      const id = option.id.replace('sortation-option-', '');\n      return 'abcdefghijklmnopqrstuvwxyz'.split('')[\n        options.findIndex((o: any) => o.id === id)\n      ];\n    });\n  });\n\n  let submitBtnTotalHeight;\n\n  const getSubmitButtonTotalHeight = () => {\n    const submitBtn = document.querySelector(\n      `#sortation-submit-btn-${id} [class*='genericButton']`\n    ) as HTMLElement;\n\n    if (!submitBtn) {\n      return;\n    }\n    //\n    return submitBtn.getBoundingClientRect().height + 20;\n  };\n\n  let parsedIsCorrect;\n\n  if (attempts[context.id] < numberOfAttempts) {\n    parsedIsCorrect = isCorrect.current || 'attempt';\n  } else {\n    parsedIsCorrect = isCorrect.current;\n  }\n\n  return (\n    <div\n      css={css({\n        wordBreak: 'break-word',\n      })}\n    >\n      {questionText && (\n        <div\n          style={{\n            margin: '0 0 20px 0',\n          }}\n        >\n          {questionText}\n        </div>\n      )}\n      <div\n        ref={sortation}\n        css={css`\n          position: relative;\n \n          width: 100%;\n          // margin: ${getSubmitButtonTotalHeight()}px 0 0 0;\n          padding: 10px 10px;\n\n          border: 1px solid\n            ${\n              baseOutline && baseOutlineColor ? baseOutlineColor : 'transparent'\n            };\n\n          border-radius: ${baseBorderRadius}px;\n          background: ${baseColor};\n          pointer-events: ${submit === 0 ? 'auto' : 'none'};\n        `}\n      >\n        {sortFrom}\n        <DragDropContext\n          onDragEnd={data => {\n            if (!data.destination) {\n              return;\n            }\n\n            updateOrder(data);\n          }}\n        >\n          <Droppable\n            droppableId={`Sortation_${id}`}\n            type=\"droppableSortation\"\n            {...(direction === 'horizontal' && {\n              direction,\n            })}\n          >\n            {provided => (\n              <div\n                ref={provided.innerRef}\n                css={css({\n                  ...(direction === 'horizontal'\n                    ? {\n                        display: 'flex',\n                      }\n                    : {}),\n                })}\n              >\n                {order.map((option, i) => (\n                  <Draggable\n                    key={option.id}\n                    draggableId={option.id}\n                    {...(window.dev() && {\n                      isDragDisabled: true,\n                    })}\n                    index={i}\n                  >\n                    {(provided, snapshot) => {\n                      if (!hasAttempt.current && snapshot.isDragging)\n                        hasAttempt.current = true;\n                      return (\n                        <div\n                          ref={provided.innerRef}\n                          {...provided.draggableProps}\n                          {...provided.dragHandleProps}\n                          css={css`\n                            // display: flex;\n                            margin: 5px;\n                            border-radius: 5px;\n\n                            // flex: 1;\n                            // outline: 2px solid red;\n                            ${!snapshot.isDragging &&\n                              `&:focus {\n                              //\n                              ${getButtonFocus(\n                                context.props.panelBackground || lGrey0\n                              )}\n                            }`}\n                          `}\n                          style={{\n                            ...provided.draggableProps.style,\n                          }}\n                        >\n                          <Option\n                            key={option.id}\n                            option={option}\n                            isDragging={snapshot.isDragging}\n                          />\n                        </div>\n                      );\n                    }}\n                  </Draggable>\n                ))}\n                {provided.placeholder}\n              </div>\n            )}\n          </Droppable>\n        </DragDropContext>\n        {sortTo}\n      </div>\n\n      <div\n        id={`sortation-submit-btn-${id}`}\n        // class={}\n        css={css`\n          margin-top: 20px;\n          ${!window.dev() &&\n            `\n            opacity: ${isLive && submit === 0 ? 1 : 0};\n            pointer-events: ${isLive && submit === 0 ? 'auto' : 'none'};\n            transition: opacity 0.2s;\n          `}\n        `}\n      >\n        {SubmitBtn}\n      </div>\n\n      {feedback && (\n        <Feedback\n          id={context.id}\n          correct={window.dev() ? isCorrect.current : parsedIsCorrect}\n          attempt={attempts[context.id]}\n          numberOfAttempts={numberOfAttempts}\n          showAttemptNumber={showAttemptNumber}\n          showCorrectAnswer={showCorrectAnswer}\n          useMediaInFeedback={useMediaInFeedback}\n          navigationBehaviour={navigationBehaviour}\n          onClose={() => {\n            const tick = setInterval(() => {\n              const submitButtonElement: any = document.querySelector(\n                `#i${SubmitBtn?.props?.id}`\n              );\n\n              if (submitButtonElement) {\n                submitButtonElement.focus();\n\n                clearInterval(tick);\n              }\n            }, 0);\n\n            onClose();\n          }}\n        />\n      )}\n    </div>\n  );\n};\n\nexport default Sortation;\n","/** @jsx jsx */\n\nimport { Fragment as _ } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { colors } from 'styles/variables';\n\n\nconst SortationHeading = ({ children, ...props }) => (\n  <div\n    css={css`\n      margin: 10px 0;\n    `}\n  >\n    {children}\n  </div>\n);\n\nexport default SortationHeading;\n","/** @jsx jsx */\n\nimport { Fragment as _, useMemo, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport Image from 'components/lib/Image';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport Sortation from './Sortation';\nimport SortationHeading from './SortationHeading';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport { Block } from '@chameleoncreator/creator-app';\nimport IELayout from 'components/Layouts/IELayout';\nimport Media, { MediaContext, IMediaContext } from 'components/lib/Media';\nimport Video from 'components/lib/Video';\nimport Transcript from 'components/lib/Video/Transcript';\nimport SVG from 'components/lib/SVG';\nimport Embed from 'components/lib/Embed';\nimport { findByKeyVal_V2 } from 'services/findByKeyVal';\nimport Media_default from 'assets/CC_Sortation_Placeholder.png';\nimport PDF from 'components/lib/PDF';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport Audio from 'components/lib/Audio';\nimport { SortableImage } from './SortableImage';\nimport { imgPlaceholders } from 'components/lib/Image';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  InteractionColumn: ({ children }) => {\n    return children?.[0] || null;\n  },\n  SortationQuestionText: ({ children, ...props }) => children,\n  Image: ({ children, ...props }) => {\n    // const updatedProps = {\n    //   ...props,\n    // };\n\n    // if (!props.src) {\n    //   updatedProps.placeholder = props.placeholder || Media_default;\n    // }\n\n    const mediaContext = useContext(MediaContext) as IMediaContext;\n    const { isAdditionalMedia } = mediaContext;\n\n    return (\n      <Image\n        {...{\n          ...props,\n          // ...updatedProps,\n          placeholder: !isAdditionalMedia ? Media_default : imgPlaceholders[1],\n\n          usePlaceholderValue: true,\n        }}\n      />\n    );\n    // return <Image {...{ ...updatedProps, usePlaceholderValue: true }} />;\n    //\n  },\n  Video,\n  Transcript,\n  SVG,\n  Embed,\n  Media,\n  TwoColumnLayout: TwoColumnLayout,\n  SingleColumnLayout: SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  EditableButton: () => null,\n  InteractionColumn: ({ children, ...props }) => {\n    const interactionContext = useContext(InteractionContext);\n    const { includeAdditionalTextField } = interactionContext.props;\n\n    const [sortation, txt] = children;\n\n    if (!includeAdditionalTextField) {\n      return sortation;\n    }\n\n    return (\n      <_>\n        {sortation}\n        <div\n          style={{\n            margin: '20px 0 0 0',\n          }}\n        >\n          {txt}\n        </div>\n      </_>\n    );\n  },\n  Sortation: ({ children, ...props }) => {\n    // <div\n    //   css={css`\n    //     width: 100%;\n    //   `}\n    // >\n    return <Sortation {...{ children, ...props }} />;\n    // </div>\n  },\n  SortationHeading0: SortationHeading,\n  SortationHeading1: SortationHeading,\n  SortableImage,\n  Answer: () => null,\n  Feedback: ({ children }) => children,\n  // Feedback: () => null,\n  Correct: () => null,\n  Incorrect: () => null,\n  Attempt: () => null,\n  PDF,\n  OpenPDF,\n  Audio,\n  Modal: () => null,\n};\n\nconst SortationDisplay = props => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  const hasAttemptFeedback = findByKeyVal_V2(\n    interactionBlock.id,\n    'type',\n    'Attempt'\n  );\n\n  const container = (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{\n          ...interactionBlock,\n          updateItemsSeen: null,\n          hasAttemptFeedback,\n        }}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </InteractionContext.Provider>\n    </Container>\n  );\n\n  return window.dev()\n    ? container\n    : useMemo(() => {\n        return container;\n      }, [props.isOpen, interactionBlock.props!.lockDown]);\n};\n\nexport default SortationDisplay;\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useLayoutEffect,\n  useEffect,\n  useRef,\n  useContext,\n  cloneElement,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport CC_Sortation_Placeholder_Panel_Media from 'assets/CC_Sortation Placeholder_Panel Media 4.png';\n// CC_Sortation Placeholder_Panel Media 3.png';\n// CC_Sortation_Placeholder_Panel_Media.png';\n\nexport const SortableImage = props => {\n  const context = useContext<any>(InteractionContext);\n\n  const { children } = props;\n  const Img = children[0];\n\n  return (\n    <div\n      css={css({\n        img: {\n          maxHeight: '150px !important',\n        },\n      })}\n    >\n      {cloneElement(Img, {\n        placeholder: CC_Sortation_Placeholder_Panel_Media,\n      })}\n    </div>\n  );\n};\n","import SortationDisplay from './SortationDisplay_v2';\n\nexport default SortationDisplay;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  memo,\n  useMemo,\n  useCallback,\n  useContext,\n  useRef,\n  useState,\n  useEffect,\n  useLayoutEffect,\n  cloneElement,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { Box } from 'theme-ui';\nimport { keyframes } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext } from './interactionContext';\nimport hexToRgb from 'services/hexToRGB';\nimport pubSub from 'services/pubSub';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport { updateScoreAction } from 'actions/updateScoreAction';\nimport { addScormResponseAction } from 'actions/addScormResponseAction';\nimport { useScoringQuizzes } from 'services/apiHelpers/useScoringQuizzes';\nimport { useDispatch } from 'react-redux';\nimport { Report } from 'store/store';\n\nexport const defaultColor = '#845cff';\n\nconst FromToField = props => {\n  const { field } = props;\n\n  const { content } = field?.props;\n  const alignment =\n    !content || content === '<p data-type=\"paragraph\"></p>' ? 'left' : 'center';\n\n  return (\n    <div\n      css={css({\n        width: 320 / 2,\n        margin: `0 0 0 ${window.dev() ? -10 : 0}`,\n\n        textAlign: alignment,\n      })}\n    >\n      {field}\n    </div>\n  );\n};\n\nexport type Result = 'correct' | 'incorrect' | 'attempt' | undefined;\nenum SubmitState {\n  Initial = 0,\n  Resolved = 2,\n}\n\nconst Slider = props => {\n  const InteractionContext = useContext(interactionContext);\n  const { id } = InteractionContext;\n\n  let {\n    sliderMin,\n    sliderMax,\n    sliderStartValue,\n    sliderTrackColor = defaultColor,\n    sliderTrackOpacity = 60,\n    sliderHandleColor = defaultColor,\n    showSliderStepMarkers = true,\n    sliderStepMarkerColor = defaultColor,\n    numberOfSliderSteps = 10,\n    sliderAnswerFormat = 'fixed',\n    includeSliderAnswerInputBox = true,\n    SliderAnswerTextColor = '#000',\n    sliderContentColor,\n    sliderInputBoxBackgroundColor = '#fff',\n    sliderInputBoxBackgroundOpacity = 100,\n    sliderInputBoxOutline = true,\n    sliderInputBoxOutlineColor = defaultColor,\n\n    //\n    lockDown = 0,\n    numberOfAttempts = 2,\n    showAttemptNumber = true,\n    useMediaInFeedback = true,\n    // correctAnswer,\n    showCorrectAnswer = true,\n    navigationBehaviour = {\n      correct: false,\n      incorrect: false,\n    },\n    score,\n    includeFeedback = true,\n    includeQuestionTextPlusImage,\n  } = InteractionContext.props;\n\n  if (sliderMin === undefined) {\n    sliderMin = 0;\n  }\n\n  if (sliderMax === undefined) {\n    sliderMax = 10;\n  }\n\n  if (!sliderStartValue) {\n    sliderStartValue = sliderMin;\n  }\n\n  const scoringQuizzes = useScoringQuizzes();\n\n  let correctAnswer = InteractionContext.props.correctAnswer || sliderMin;\n\n  // console.log({ sliderMin, sliderMax, correctAnswer });\n\n  const { children } = props;\n\n  const { r, g, b } = hexToRgb(sliderTrackColor);\n  const a = sliderTrackOpacity * 0.01;\n  const rgba = `rgba(${r}, ${g}, ${b}, ${a})`;\n\n  const { r: sliderInputR, g: sliderInputG, b: sliderInputB } = hexToRgb(\n    sliderInputBoxBackgroundColor\n  );\n  const sliderInputA = sliderInputBoxBackgroundOpacity * 0.01;\n  sliderInputBoxBackgroundColor = `rgba(${sliderInputR}, ${sliderInputG}, ${sliderInputB}, ${sliderInputA})`;\n\n  const sliderHandleSize = 35;\n\n  const getSliderHandleColor = (replaceHash = false) => {\n    return !replaceHash\n      ? sliderHandleColor\n      : sliderHandleColor.replace('#', '%23');\n  };\n  const sliderHandle = `url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${sliderHandleSize}\" height=\"${sliderHandleSize}\" viewBox=\"0 0 ${sliderHandleSize} ${sliderHandleSize}\"><circle r=\"${sliderHandleSize /\n    2}\" cx=\"${sliderHandleSize / 2}\" cy=\"${sliderHandleSize /\n    2}\" fill=\"${getSliderHandleColor(true)}\" />\n    \n    <circle r=\"${sliderHandleSize / 3}\" cx=\"${sliderHandleSize /\n    2}\" cy=\"${sliderHandleSize / 2}\" fill=\"black\" fill-opacity=\"0.15\" />\n\n    </svg>')`;\n\n  //\n  const [value, setValue] = useState<number | undefined>();\n  const [inputFieldHasFocus, setInputFieldHasFocus] = useState<boolean>(false);\n  const [attempt, setAttempt] = useState<number>(0);\n  const [result, setResult] = useState<Result>(undefined);\n  const [resolved, setResolved] = useState<SubmitState>(0);\n  const [showFeedback, setShowFeedback] = useState<Result>(result);\n  const [isLive, setIsLive] = useState<boolean | undefined>(undefined);\n  const dispatch = useDispatch();\n\n  const [sharedQuestionMedia, from, to, feedback] = children;\n  const [, , , submitBtn] = feedback?.props.children;\n\n  const _value_ = value || sliderStartValue;\n\n  const onSubmit = () => {\n    let result: Result;\n    if (value == correctAnswer) {\n      result = 'correct';\n    }\n\n    // logic for attempts...\n    if (result !== 'correct') {\n      if (attempt < numberOfAttempts - 1) {\n        setAttempt(attempt => {\n          return (attempt += 1);\n        });\n        result = 'attempt';\n      } else {\n        result = 'incorrect';\n      }\n    }\n\n    setResult(result);\n    setShowFeedback(result);\n  };\n\n  useEffect(() => {\n    if ((['correct', 'incorrect'] as Result[]).includes(result)) {\n      setResolved(SubmitState.Resolved);\n      //\n\n      let questionElement = document.querySelector(\n        `#i${InteractionContext.id} .chameleon-text p`\n      ) as HTMLParagraphElement;\n      let question;\n\n      if (questionElement) {\n        question = questionElement.innerText;\n      }\n\n      const action = {\n        id: InteractionContext.id,\n        type: 'likert',\n        question,\n        reportable: 'likert' as 'likert',\n        response: String(value),\n        correct: String(correctAnswer),\n        result: (result === 'correct' ? 1 : 0) as Report['result'],\n      };\n\n      // dispatch if there's no scoringQuizzes etc\n      let shouldDispatchScore = score;\n\n      if (scoringQuizzes.length) {\n        shouldDispatchScore = false;\n      }\n      //\n\n      if (shouldDispatchScore) {\n        dispatch(\n          updateScoreAction(InteractionContext.id, result === 'correct' ? 1 : 0)\n        );\n      }\n\n      dispatch(addScormResponseAction(action));\n\n      const unlock = result === 'correct' || attempt === numberOfAttempts - 1;\n\n      if (unlock) {\n        unlockInteraction(InteractionContext.id);\n        setIsLive(false);\n      }\n\n      if (result === 'incorrect' && showCorrectAnswer) {\n        requestAnimationFrame(() => {\n          setValue(correctAnswer);\n        });\n      }\n    }\n  }, [result]);\n\n  useEffect(() => {\n    if (!window.dev()) {\n      return;\n    }\n\n    const showFeedbackSubscription = pubSub.subscribe(\n      `${InteractionContext.id}`,\n      ({ result }) => {\n        console.log(result);\n        setResult(result);\n        setShowFeedback(result);\n      }\n    );\n\n    return () => {\n      showFeedbackSubscription();\n    };\n  }, []);\n\n  const sliderThumb = {\n    appearance: 'none',\n    width: sliderHandleSize,\n    height: sliderHandleSize,\n    borderRadius: '50%',\n    background: sliderHandle,\n    boxShadow: '0 0 3px 0 rgba(0,0,0,0.2)',\n    transition: 'box-shadow 0.2s',\n\n    cursor: 'pointer',\n  } as any;\n\n  const sliderThumbFocus = {\n    appearance: 'none',\n    boxShadow: `0 0 0 1px #fff, 0 0 0 3px ${getSliderHandleColor()}`,\n  } as any;\n\n  return (\n    <div\n      style={{\n        width: '100%',\n        pointerEvents: resolved === SubmitState.Resolved ? 'none' : 'auto',\n      }}\n    >\n      {includeQuestionTextPlusImage ? (\n        <div style={{ marginBottom: 15 }}>{sharedQuestionMedia}</div>\n      ) : null}\n\n      <div\n        css={css({\n          display: 'flex',\n          justifyContent: 'space-between',\n          margin: '0 0 15px 0',\n        })}\n      >\n        <FromToField field={from} />\n        <FromToField field={to} />\n      </div>\n\n      <input\n        type=\"range\"\n        role=\"slider\"\n        min={sliderMin}\n        aria-valuemin={sliderMin}\n        max={sliderMax}\n        aria-valuemax={sliderMax}\n        step={sliderAnswerFormat === 'variable' ? 0.01 : undefined}\n        value={_value_}\n        aria-valuenow={_value_}\n        css={css({\n          appearance: 'none',\n          width: '100%',\n          height: 10,\n          background: rgba,\n          borderRadius: 99999,\n\n          '&::-webkit-slider-thumb': sliderThumb,\n          '&::-moz-range-thumb': sliderThumb,\n\n          ':focus': {\n            outline: 'none !important',\n            border: 'none !important',\n            '&::-webkit-slider-thumb': sliderThumbFocus,\n            '&::-moz-range-thumb': sliderThumbFocus,\n          },\n        })}\n        onChange={(e: any) => {\n          setIsLive(true);\n          setValue(e.currentTarget.value);\n        }}\n      />\n\n      <div\n        style={{\n          margin: '20px 0',\n        }}\n      >\n        {!!showSliderStepMarkers && (\n          <div\n            style={{\n              width: '100%',\n              padding: `0 ${35 / 2}px`,\n            }}\n          >\n            <div\n              style={{\n                position: 'relative',\n                height: 30,\n                margin: '10px 0',\n              }}\n            >\n              {Array.from({ length: numberOfSliderSteps + 1 })\n                .map((_, index) => index)\n                .map((marker: number, index: number, arr) => {\n                  const distance = 100 / (arr.length - 1);\n                  const markerPosition = Math.round(marker * distance);\n\n                  return (\n                    <div\n                      key={`marker-${marker}`}\n                      style={{\n                        position: 'absolute',\n                        left: `calc(${markerPosition}%)`,\n                        width: 1,\n                        height: 10,\n                        background: sliderStepMarkerColor,\n                      }}\n                    />\n                  );\n                })}\n            </div>\n          </div>\n        )}\n\n        {!!includeSliderAnswerInputBox && (\n          <div\n            style={{\n              display: 'flex',\n              justifyContent: 'center',\n              width: '100%',\n            }}\n          >\n            <div\n              css={css({\n                display: 'flex',\n                justifyContent: 'center',\n                padding: 10,\n                background: sliderInputBoxBackgroundColor,\n                borderRadius: 15,\n                border: `1px solid ${\n                  sliderInputBoxOutline\n                    ? sliderInputBoxOutlineColor\n                    : 'transparent'\n                }`,\n\n                boxShadow: 'none',\n                transition: 'box-shadow 0.2s',\n                ...(inputFieldHasFocus && {\n                  boxShadow: `0 0 0 1px #fff, 0 0 0 3px ${sliderInputBoxOutlineColor}`,\n                }),\n              })}\n            >\n              <input\n                key={value}\n                type=\"number\"\n                aria-label=\"Type a value and click enter to update.\"\n                min={sliderMin}\n                max={sliderMax}\n                defaultValue={_value_}\n                css={css({\n                  all: 'unset',\n                  border: 'none !important',\n                  outline: 'none !important',\n                  width: 100,\n                  color: SliderAnswerTextColor,\n                  textAlign: 'center',\n                  fontFamily: 'inherit',\n                  fontSize: 16,\n\n                  '&:focus': {\n                    border: 'none !important',\n                    outline: 'none !important',\n                  },\n                  '&:focus-visible': {\n                    //\n                  },\n\n                  '::-webkit-inner-spin-button': {\n                    appearance: 'none',\n                    margin: 0,\n                  },\n\n                  MozAppearance: 'textfield',\n                })}\n                onKeyUp={e => {\n                  const { value } = e.currentTarget;\n\n                  if (e.key === 'Enter') {\n                    if (value < sliderMin) {\n                      e.preventDefault();\n                      setValue((sliderMin as unknown) as number);\n                      return;\n                    }\n\n                    if (value > sliderMax) {\n                      e.preventDefault();\n                      setValue((sliderMax as unknown) as number);\n                      return;\n                    }\n\n                    setIsLive(true);\n                    setValue((value as unknown) as number);\n                  }\n                }}\n                onFocus={e => {\n                  setInputFieldHasFocus(true);\n                }}\n                onBlur={e => {\n                  setInputFieldHasFocus(false);\n\n                  const localValue = e.currentTarget.value;\n\n                  if (!localValue) {\n                    e.currentTarget.value = String(value || 0);\n                    return;\n                  }\n\n                  setIsLive(true);\n                  setValue((localValue as unknown) as number);\n                }}\n              />\n            </div>\n          </div>\n        )}\n      </div>\n\n      <div\n        style={{\n          visibility: 'hidden',\n          opacity: 0,\n          pointerEvents: 'none',\n          transition: 'opacity 0.2s',\n\n          ...((window.dev() || isLive) && {\n            visibility: 'visible',\n            opacity: 1,\n            pointerEvents: 'auto',\n          }),\n\n          ...(resolved === SubmitState.Resolved && {\n            opacity: 0,\n            pointerEvents: 'none',\n          }),\n        }}\n      >\n        {cloneElement(submitBtn, {\n          onClick() {\n            onSubmit();\n          },\n        })}\n      </div>\n\n      {includeFeedback &&\n        showFeedback &&\n        cloneElement(feedback, {\n          result,\n          showAttemptNumber,\n          attempt,\n          numberOfAttempts,\n          navigationBehaviour,\n          onClose() {\n            setShowFeedback(undefined);\n          },\n          useMediaInFeedback,\n        })}\n    </div>\n  );\n};\n\nexport default Slider;\n","/** @jsx jsx */\n\nimport { Fragment as _, useContext, memo } from 'react';\nimport { jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport SVG from 'components/lib/SVG';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport Media, { MediaContext, IMediaContext } from 'components/lib/Media';\nimport { imgPlaceholders } from 'components/lib/Image';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport shouldUpdate from 'services/shouldUpdate';\nimport Slider from './Slider';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport PDF from 'components/lib/PDF';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport Feedback from 'components/lib/Feedback/Feedback_updated_022022';\nimport { ImageContext } from 'components/lib/Image';\nimport CC_QuestionTextImage from 'assets/CC_QuestionTextImage.svg';\nimport Embed from 'components/lib/Embed';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Slider,\n  Text: EditableText,\n  // Image,\n  Image: ({ children, ...props }) => {\n    return (\n      <Image\n        {...{\n          ...props,\n          placeholder: imgPlaceholders[1],\n        }}\n      />\n    );\n  },\n  TwoColumnLayout,\n  SingleColumnLayout,\n  InteractionColumn: ({ children, ...props }) => {\n    const interactionContext = useContext(InteractionContext);\n    const { includeAdditionalTextField } = interactionContext.props;\n\n    const [slider, txt] = children;\n\n    if (!includeAdditionalTextField) {\n      return slider;\n    }\n\n    return (\n      <_>\n        {slider}\n        <div\n          style={{\n            margin: '20px 0 0 0',\n          }}\n        >\n          {txt}\n        </div>\n      </_>\n    );\n  },\n  ColumnContent: ({ children, ...props }) => {\n    const { includeQuestionTextPlusImage } = useContext(\n      InteractionContext\n    )?.props;\n\n    const [img, txt] = children;\n\n    return includeQuestionTextPlusImage ? (\n      <ImageContext.Provider\n        value={{\n          placeholder: CC_QuestionTextImage,\n        }}\n      >\n        {img}\n      </ImageContext.Provider>\n    ) : (\n      txt\n    );\n  },\n  ContinueButton: ContinueBtn,\n  Video,\n  SVG,\n  Media,\n  EditableButton: EditableBtn,\n  Audio,\n  Embed,\n  Transcript: ({ children, props }) => {\n    return children;\n  },\n  Feedback,\n  Correct: ({ children, props }) => children,\n  Incorrect: ({ children, props }) => children,\n  Attempt: ({ children, props }) => children,\n  PDF,\n  OpenPDF,\n};\n\n// memo(\nconst SliderDisplay = (props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{ ...interactionBlock, updateItemsSeen: null }}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </InteractionContext.Provider>\n    </Container>\n  );\n};\n//, shouldUpdate as any);\n\nexport default SliderDisplay;\n","import SliderDisplay from './SliderDisplay';\n\nexport default SliderDisplay;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","/** @jsx jsx */\n\nimport React, { cloneElement, Fragment as _ } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport Modal from 'components/UI/Modal';\nimport { useMemo } from 'react';\nimport { ImageContext } from 'components/lib/Image';\nimport modalPlaceholderImage from 'assets/CC_Sortation_Placeholder.png';\nimport imagePlaceholder from 'assets/Square.png';\n\nconst Feedback = props => {\n  const { useMediaInFeedback = true, onClose, children } = props;\n  let [img, txt, btn] = children;\n\n  const isImg = img?.props?.child === 1;\n\n  let imgSrc;\n\n  if (isImg) {\n    imgSrc = img?.props?.children[1]?.props?.src;\n  }\n\n  const Img = useMemo(() => {\n    return img;\n  }, [imgSrc]);\n\n  // </ImageContext.Provider>\n\n  //   ${isImg &&\n  //     `\n  //   position: relative;\n  //   display: flex;\n  //   align-items: center;\n  // `}\n\n  return (\n    <Modal onClose={() => onClose()}>\n      <div\n        css={css`\n          position: relative;\n          display: flex;\n          flex-direction: column;\n          align-items: center;\n          width: 100%;\n          height: 100%;\n          max-width: 768px;\n          padding: 50px;\n        `}\n      >\n        {useMediaInFeedback && (\n          <div\n            css={css`\n              position: relative;\n              width: 100%;\n\n              margin-bottom: 30px;\n\n              .chameleon-image img {\n                // max-height: 30vh !important;\n\n                height: auto !important;\n                object-fit: contain;\n              }\n\n              @media (max-width: 768px) {\n                width: 100%;\n                margin-bottom: 25px;\n              }\n            `}\n          >\n            <ImageContext.Provider\n              key={imgSrc}\n              value={{\n                editWrapperType: 0,\n                placeholder: imagePlaceholder || modalPlaceholderImage,\n                padding: 10,\n              }}\n            >\n              {Img}\n            </ImageContext.Provider>\n          </div>\n        )}\n\n        <div\n          css={css`\n            width: 100%;\n            margin-bottom: 30px;\n          `}\n        >\n          {txt}\n        </div>\n        <div\n          css={css`\n            display: flex;\n            justify-self: flex-end;\n            justify-content: center;\n            width: 100%;\n          `}\n        >\n          {window.dev() ? btn : React.cloneElement(btn, { onClick: onClose })}\n          {/* {React.cloneElement(btn, { onClick: onClose })} */}\n        </div>\n      </div>\n    </Modal>\n  );\n};\n\nexport default Feedback;\n","/** @jsx jsx */\n\nimport { Fragment as _, useContext, useState, useRef, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext } from './interactionContext';\n\nconst MatchingLayout = ({ children }) => {\n  const context: any = useContext(interactionContext);\n  const isOneColumn = context?.meta?.layout.match('One');\n\n  const [layout, setLayout] = useState(1);\n\n  const container = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (!container.current || isOneColumn) {\n      return;\n    }\n\n    const updateLayout = () => {\n      const c = container.current as HTMLDivElement;\n      const droppableContainer = c.querySelector(\n        '.droppable-container'\n      ) as HTMLDivElement;\n\n      const dCWidth = droppableContainer.getBoundingClientRect().width;\n\n      const cWidth = c.getBoundingClientRect().width;\n      if (cWidth >= dCWidth * 2 + dCWidth / 2) {\n        setLayout(1);\n        return;\n      }\n\n      if (cWidth < dCWidth * 2 + 20) {\n        setLayout(0);\n        return;\n      }\n\n      setLayout(1);\n    };\n\n    updateLayout();\n\n    const tick = setInterval(updateLayout, 1000 / 12);\n    //\n    return () => {\n      clearInterval(tick);\n    };\n  }, []);\n\n  //\n  // console.log({ isOneColumn });\n  if (isOneColumn) {\n    return children;\n  }\n\n  return (\n    <div\n      ref={container}\n      css={css`\n        position: relative;\n        ${layout === 1 && 'display: flex;'}\n        width: 100%;\n      `}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport default MatchingLayout;\n","export const screenReaderInstructions = {\n  draggable: `\n    To pick up a draggable item, press enter or space.\n    Use the arrow keys to move the item.\n    Press enter or space again to drop the item in its new position, or press escape to cancel.\n  `,\n};\n\n// we could memoize this. . .\nconst cachedContent: { [id: string]: string } = {};\n\nexport function getCachedContent(id): string | typeof cachedContent {\n  return id ? cachedContent[id] : cachedContent;\n}\n\nexport const getElementContent = (\n  id,\n  element: HTMLElement | undefined = undefined\n) => {\n  const item = (element || document).querySelector(id) as HTMLElement;\n\n  if (!item) {\n    return '';\n  }\n\n  if (cachedContent[id]) {\n    return cachedContent[id];\n  }\n\n  const text = (item.querySelector('.chameleon-text') as HTMLElement)\n    ?.innerText;\n\n  const imgDescription = item.querySelector('img')?.getAttribute('alt');\n\n  cachedContent[id] = text || imgDescription || '';\n  return cachedContent[id];\n};\n\nexport const announcements = {\n  onDragStart({ active }) {\n    const draggableContent = getElementContent(`#match-drag-${active.id}`);\n\n    return `Picked up draggable item ${draggableContent}`;\n  },\n\n  onDragOver({ active, over }) {\n    const draggableContent = getElementContent(`#match-drag-${active.id}`);\n\n    if (over) {\n      const droppableContent = getElementContent(`#match-drop-${over.id}`);\n\n      return `Draggable item ${draggableContent} was moved over droppable area ${droppableContent}.`;\n    }\n\n    return `Draggable item ${draggableContent} is no longer over a droppable area.`;\n  },\n\n  onDragEnd({ active, over }) {\n    const draggableContent = getElementContent(`#match-drag-${active.id}`);\n\n    if (over) {\n      const droppableContent = getElementContent(`#match-drop-${over.id}`);\n\n      return `Draggable item ${draggableContent} was dropped over droppable area ${droppableContent}`;\n    }\n\n    return `Draggable item ${draggableContent} was dropped.`;\n  },\n  onDragCancel({ active }) {\n    const draggableContent = getElementContent(`#match-drag-${active.id}`);\n\n    return `Dragging was cancelled. Draggable item ${draggableContent} was dropped back to its original position.`;\n  },\n};\n","/** @jsx jsx */\n\nimport { Fragment as _, useState, useRef, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport {\n  DndContext,\n  useSensor,\n  useSensors,\n  PointerSensor,\n  KeyboardSensor,\n} from '@dnd-kit/core';\nimport Feedback from './Feedback';\nimport LayoutResponsiveContainer from './LayoutResponsiveContainer';\nimport checkReturnToInteractionEditing from 'services/checkReturnToInteractionEditing';\nimport { screenReaderInstructions, announcements } from './screenReader';\n\nconst Layout = ({\n  id,\n  columns,\n  onDragStart,\n  onDragEnd,\n  feedback,\n  useMediaInFeedback,\n  setFeedback,\n  reset,\n}) => {\n  const [allPlaceHoldersResolved, setAllPlaceHoldersResolved] = useState<\n    boolean\n  >(false);\n  //\n\n  const layout = useRef<HTMLDivElement | null>(null);\n  const availableDropsIndex = useRef<number>(NaN);\n\n  useEffect(() => {\n    const onKeyDown = e => {\n      if (['tab', 'esc'].includes(e.key)) {\n        availableDropsIndex.current = NaN;\n      }\n    };\n\n    addEventListener('keydown', onKeyDown);\n\n    return () => {\n      removeEventListener('keydown', onKeyDown);\n    };\n  }, []);\n\n  const sensors = useSensors(\n    useSensor(PointerSensor),\n    useSensor(KeyboardSensor, {\n      coordinateGetter(e, { currentCoordinates }) {\n        const droppableContainers = columns.column_b.filter(cB => {\n          return !cB?.props?.isDragDisabled;\n        });\n\n        if (droppableContainers.length === 0) {\n          return;\n        }\n\n        const getXY = direction => {\n          if (direction === 1) {\n            if (isNaN(availableDropsIndex.current)) {\n              availableDropsIndex.current = 0;\n            } else {\n              availableDropsIndex.current < droppableContainers.length - 1\n                ? (availableDropsIndex.current += 1)\n                : (availableDropsIndex.current = 0);\n            }\n          }\n\n          if (direction === -1) {\n            if (isNaN(availableDropsIndex.current)) {\n              availableDropsIndex.current = droppableContainers.length - 1;\n            } else {\n              availableDropsIndex.current > 0\n                ? (availableDropsIndex.current -= 1)\n                : (availableDropsIndex.current =\n                    droppableContainers.length - 1);\n            }\n          }\n\n          let dropTarget = droppableContainers[availableDropsIndex.current];\n          dropTarget = document.querySelector(\n            `#match-drop-${dropTarget?.props?.id}`\n          );\n\n          if (!dropTarget) {\n            return currentCoordinates;\n          }\n\n          return {\n            x: dropTarget.getBoundingClientRect().left,\n            y: dropTarget.getBoundingClientRect().top,\n          };\n        };\n\n        switch (e.code) {\n          case 'ArrowRight':\n            return {\n              ...getXY(1),\n            };\n          case 'ArrowLeft':\n            return {\n              ...getXY(-1),\n            };\n          case 'ArrowDown':\n            return {\n              ...getXY(1),\n            };\n          case 'ArrowUp':\n            return {\n              ...getXY(-1),\n            };\n        }\n\n        return undefined;\n      },\n    })\n  );\n\n  const getPosition = id => {\n    return {\n      x: 0,\n      y: 0,\n    };\n  };\n\n  useEffect(() => {\n    if (allPlaceHoldersResolved) {\n      return;\n    }\n\n    const localAllPlaceHoldersResolved = columns.column_a.every((d, index) => {\n      return d.key.includes('placeholder');\n    });\n\n    if (localAllPlaceHoldersResolved) {\n      setAllPlaceHoldersResolved(true);\n    }\n  });\n\n  return (\n    <_>\n      <div\n        ref={layout}\n        className={reset ? 'fader_-5s' : ''}\n        css={css`\n          position: relative;\n          width: 100%;\n        `}\n        role=\"application\"\n      >\n        <DndContext\n          autoScroll={true}\n          sensors={sensors}\n          accessibility={{\n            screenReaderInstructions,\n            announcements,\n          }}\n          onDragStart={onDragStart}\n          onDragCancel={() => {\n            availableDropsIndex.current = NaN;\n          }}\n          onDragEnd={onDragEnd}\n        >\n          <LayoutResponsiveContainer>\n            <div\n              css={css`\n                display: flex;\n                flex-wrap: wrap;\n                justify-content: center;\n                width: 100%;\n\n                ${allPlaceHoldersResolved &&\n                  `\n                  width: 0px;\n                  height: 0px;\n                  overflow: hidden;\n                  transition: all 0.2s;\n                `}\n              `}\n            >\n              {columns.column_a}\n            </div>\n            <div\n              css={css`\n                display: flex;\n                flex-wrap: wrap;\n                justify-content: center;\n                width: 100%;\n              `}\n            >\n              {columns.column_b}\n            </div>\n          </LayoutResponsiveContainer>\n        </DndContext>\n\n        {feedback && (\n          <Feedback\n            useMediaInFeedback={useMediaInFeedback}\n            onClose={() => {\n              window.dev() && checkReturnToInteractionEditing(true);\n\n              //\n              let matchDragsFocusable: any = Array.from(\n                //\n                layout?.current?.querySelectorAll(\n                  '.match-drag-focusable'\n                ) as any\n              );\n\n              if (matchDragsFocusable.length) {\n                matchDragsFocusable[0]?.focus();\n              } else {\n                (layout?.current\n                  ?.closest('section')\n                  ?.querySelector(\n                    '[class*=\"navigationButton\"]'\n                  ) as HTMLAnchorElement)?.focus();\n              }\n\n              setFeedback(null);\n            }}\n          >\n            {(feedback as any).props.children}\n          </Feedback>\n        )}\n      </div>\n    </_>\n  );\n};\n\nexport default Layout;\n","/** @jsx jsx */\n\nimport React, { useMemo } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport EditableText from 'components/lib/EditableText';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport SVG from 'components/lib/SVG';\nimport Media from 'components/lib/Media';\nimport getMediaParent from 'services/apiHelpers/getMediaParent';\nimport Embed from 'components/lib/Embed';\nimport PDF from 'components/lib/PDF';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport Audio from 'components/lib/Audio';\nimport imagePlaceholder from 'assets/Square.png';\n\nconst reRenderedFeedback = feedback =>\n  feedback\n    ? renderBlock(getBlockById(feedback.props.id), {\n        EditableButton: EditableBtn,\n        Feedback: ({ children, ...props }) => children,\n        Correct: ({ children, ...props }) => children,\n        Incorrect: ({ children, ...props }) => children,\n        Text: EditableText,\n        Image: ({ children, ...props }) => {\n          return (\n            <Image\n              {...{\n                ...props,\n                placeholder: imagePlaceholder,\n              }}\n            />\n          );\n        },\n        Video,\n        Audio,\n        Transcript: () => null,\n        SVG,\n        Embed,\n        Media,\n        PDF,\n        OpenPDF,\n      })\n    : null;\n\nexport default reRenderedFeedback;\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useState,\n  useEffect,\n  useContext,\n  useRef,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext } from './interactionContext';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport EditorBtn from 'components/UI/EditorBtn';\nimport Layout from './Layout_v2';\nimport { VisuallyHidden } from 'components/UI/VisuallyHidden';\nimport reRenderedFeedback from './ReRenderedFeedback';\nimport pubSub from 'services/pubSub';\n\nfunction shuffle(array) {\n  let m = array.length,\n    t,\n    i;\n\n  let n = [...array];\n\n  // While there remain elements to shuffle…\n\n  while (m) {\n    // Pick a remaining element…\n\n    const i = Math.floor(Math.random() * m--);\n\n    // And swap it with the current element.\n\n    t = n[m];\n\n    n[m] = n[i];\n\n    n[i] = t;\n  }\n\n  i = Math.floor(Math.random() * n.length);\n\n  if (n.every((option, k) => option.props.id === array[k].props.id)) {\n    let j = Math.floor(Math.random() * n.length);\n\n    while (j === i) {\n      j = Math.floor(Math.random() * n.length);\n    }\n\n    t = n[i];\n\n    n[i] = n[j];\n\n    n[j] = t;\n  }\n\n  return n;\n}\n\nconst ResetText = () => {\n  return (\n    <_>\n      <VisuallyHidden>Reset</VisuallyHidden>\n      <svg\n        width=\"75\"\n        height=\"16\"\n        viewBox=\"0 0 75 16\"\n        css={css`\n          margin-top: 2px;\n          margin-left: 7px;\n        `}\n      >\n        <g stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n          <g transform=\"translate(-1063.000000, -799.000000)\">\n            <g transform=\"translate(1062.000000, 794.000000)\">\n              <path\n                d=\"M7.752,9.568 C7.752,8.072 6.936,7.12 4.93,7.12 L2.55,7.12 L2.55,12.067 L4.947,12.067 C6.885,12.067 7.752,11.013 7.752,9.568 Z M1.36,6.117 L4.93,6.117 C7.684,6.117 8.976,7.613 8.976,9.568 C8.976,11.2 8.058,12.577 6.052,12.951 L9.112,18 L7.684,18 L4.743,13.036 L2.55,13.036 L2.55,18 L1.36,18 L1.36,6.117 Z M15.8,9.602 C14.117,9.602 12.638,10.69 12.502,12.849 L19.03,12.849 C19.081,10.69 17.517,9.602 15.8,9.602 Z M20.101,15.059 C19.676,16.81 18.18,18.136 15.851,18.136 C13.216,18.136 11.295,16.3 11.295,13.359 C11.295,10.401 13.182,8.582 15.851,8.582 C18.571,8.582 20.237,10.52 20.237,12.883 C20.237,13.257 20.237,13.495 20.203,13.818 L12.502,13.818 C12.604,15.994 14.117,17.133 15.851,17.133 C17.432,17.133 18.503,16.3 18.843,15.059 L20.101,15.059 Z M29.339,15.535 C29.339,17.031 28.03,18.136 26.109,18.136 C24.001,18.136 22.522,17.082 22.369,15.382 L23.593,15.382 C23.695,16.402 24.579,17.133 26.092,17.133 C27.418,17.133 28.166,16.419 28.166,15.535 C28.166,13.24 22.59,14.583 22.59,11.098 C22.59,9.721 23.899,8.582 25.854,8.582 C27.843,8.582 29.152,9.636 29.254,11.421 L28.064,11.421 C27.996,10.384 27.231,9.602 25.82,9.602 C24.579,9.602 23.797,10.265 23.797,11.081 C23.797,13.597 29.288,12.254 29.339,15.535 Z M36.044,9.602 C34.361,9.602 32.882,10.69 32.746,12.849 L39.274,12.849 C39.325,10.69 37.761,9.602 36.044,9.602 Z M40.345,15.059 C39.92,16.81 38.424,18.136 36.095,18.136 C33.46,18.136 31.539,16.3 31.539,13.359 C31.539,10.401 33.426,8.582 36.095,8.582 C38.815,8.582 40.481,10.52 40.481,12.883 C40.481,13.257 40.481,13.495 40.447,13.818 L32.746,13.818 C32.848,15.994 34.361,17.133 36.095,17.133 C37.676,17.133 38.747,16.3 39.087,15.059 L40.345,15.059 Z M43.497,15.484 L43.497,9.721 L42.205,9.721 L42.205,8.718 L43.497,8.718 L43.497,6.389 L44.704,6.389 L44.704,8.718 L47.254,8.718 L47.254,9.721 L44.704,9.721 L44.704,15.484 C44.704,16.623 45.095,16.98 46.166,16.98 L47.254,16.98 L47.254,18 L45.979,18 C44.364,18 43.497,17.337 43.497,15.484 Z\"\n                fill=\"#ffffff\"\n                fillRule=\"nonzero\"\n              ></path>\n              <g transform=\"translate(60.000000, 5.000000)\">\n                <path\n                  d=\"M7.5696,0.5 C11.4736,0.5 14.6396,3.665 14.6396,7.569 C14.6396,11.475 11.4736,14.64 7.5696,14.64 C3.6656,14.64 0.5006,11.475 0.5006,7.569 C0.5006,5.617 1.2916,3.85 2.5706,2.57\"\n                  stroke=\"#ffffff\"\n                ></path>\n                <polygon\n                  fill=\"#ffffff\"\n                  points=\"1.2679 1.291 3.8259 1.291 3.8259 3.843\"\n                ></polygon>\n              </g>\n            </g>\n          </g>\n        </g>\n      </svg>\n    </_>\n  );\n};\n\nconst Placeholder = () => {\n  const context = useContext(interactionContext);\n\n  const { panelWidth = 250, panelHeight = 250 } = context.props;\n\n  return (\n    <div\n      css={css`\n        width: ${panelWidth}px;\n        height: ${panelHeight}px;\n        margin: 10px;\n        background: transparent;\n        border: 2px solid transparent;\n      `}\n    />\n  );\n};\n\nconst Matching = props => {\n  const { id, children, reset } = props as any;\n  const MatchDrags = children[0].props.children;\n  const MatchDrops = children[1].props.children;\n  const Feedbacks = children[2].props.children;\n\n  const context: any = useContext(interactionContext);\n\n  const [feedback, setFeedback] = useState<any>(null);\n\n  const itemsSeen = useRef(unlockInteraction(context.id, MatchDrags.length));\n\n  const [columns, setColumns] = useState({\n    column_a: window.dev()\n      ? MatchDrags\n      : MatchDrags?.length > 1\n      ? shuffle(MatchDrags)\n      : MatchDrags,\n    column_b: MatchDrops,\n  });\n\n  const matchingDragIdToDropIdMap = MatchDrags.reduce((acc, curr, index) => {\n    return {\n      ...acc,\n      [curr?.props?.id]: MatchDrops[index]?.props?.id,\n    };\n  }, {});\n\n  const onDragStart = data => {\n    // console.log(data);\n  };\n\n  const onDragEnd = data => {\n    const { active, collisions, over } = data;\n\n    if (!collisions?.length) {\n      return;\n    }\n\n    const { id: dragId } = active;\n    const { id: dropId } = over;\n\n    const { column_a, column_b } = columns;\n\n    if (matchingDragIdToDropIdMap[dragId] !== dropId) {\n      return;\n    }\n\n    const dragIndex = column_a.findIndex((drag: any) => {\n      return drag.props.id === dragId;\n    });\n\n    const dropIndex = column_b.findIndex((drop: any) => {\n      return drop.props.id === dropId;\n    });\n\n    // add the drag to column_b\n    const updatedColumnB = [...column_b];\n    updatedColumnB[dropIndex] = column_a[dragIndex];\n\n    // update columns\n    const updatedColumns = {\n      column_a: column_a.map((d, index) =>\n        updatedColumnB.includes(d) ? (\n          <Placeholder key={`placeholder_${index}`} />\n        ) : (\n          d\n        )\n      ),\n      column_b: updatedColumnB.map((entry, index) =>\n        index === dropIndex\n          ? React.cloneElement(entry, {\n              isDragDisabled: true,\n            })\n          : entry\n      ),\n    };\n\n    setFeedback(Feedbacks[dropIndex]);\n    setColumns(updatedColumns);\n  };\n\n  const idDep = MatchDrags.map(entry => {\n    return entry.props.id;\n  }).join('_');\n\n  useEffect(() => {\n    if (!window.dev()) {\n      return;\n    }\n\n    setColumns({\n      column_a: MatchDrags,\n      column_b: MatchDrops,\n    });\n  }, [\n    // idDep,\n    MatchDrags,\n    MatchDrops,\n    Feedbacks,\n  ]);\n\n  useEffect(() => {\n    if (window.dev()) return;\n\n    if (context.props.lockDown === 0) return;\n    feedback && itemsSeen.current(feedback.props.id);\n  });\n\n  useEffect(() => {\n    const pS = pubSub.subscribe(\n      `MATCHING_INTERACTION_FEEDBACK_${context.id}`,\n      ({ eventType, index }) => {\n        switch (eventType) {\n          case 'click': {\n            setFeedback(Feedbacks[index]);\n            return;\n          }\n        }\n      }\n    );\n\n    return () => pS();\n  }, [Feedbacks]);\n\n  return (\n    <Layout\n      key={window.dev() ? idDep : undefined}\n      id={id}\n      columns={columns}\n      onDragStart={onDragStart}\n      onDragEnd={onDragEnd}\n      feedback={reRenderedFeedback(feedback)}\n      useMediaInFeedback={context.props.useMediaInFeedback}\n      setFeedback={setFeedback}\n      reset={reset}\n    />\n  );\n};\n\nexport const MatchingWrapper = ({ children, ...props }) => {\n  const [reset, setReset] = useState<number>(0);\n\n  return (\n    <_\n      key={`Matching_${children[0].props.children.length}${reset &&\n        `_${reset}`}`}\n    >\n      <Matching children={children} {...{ ...props, reset }} />\n      {window.dev() && (\n        <div\n          css={css`\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            width: 100%;\n            height: 60px;\n          `}\n        >\n          <EditorBtn\n            label={<ResetText />}\n            onClick={() => setReset(Math.random())}\n            css={css`\n              width: 150px;\n            `}\n          />\n        </div>\n      )}\n    </_>\n  );\n};\n\nexport default Matching;\n","import getStore from 'services/getStore';\n\nexport default id => {\n  const media = Object.values(getStore().getState().blocks).filter(\n    (b: any) => b.type === 'Media'\n  ) as any;\n\n  const mediaParent = media.find(m => m.children.find((c: any) => c.id === id));\n\n  return mediaParent || null;\n};\n","/** @jsx jsx */\n\nimport { Fragment as _, useState, useContext, cloneElement } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { colors, getButtonFocus } from 'styles/variables';\nimport { useDraggable } from '@dnd-kit/core';\nimport { interactionContext } from './interactionContext';\nimport { useSelector } from 'react-redux';\nimport hexToRgb from 'services/hexToRGB';\nimport { usePubSub } from 'services/pubSub';\n\nconst { lPink, lGrey0, lGrey1, lGrey2 } = colors;\n\nconst MatchDrag = props => {\n  const {\n    draggableId,\n    isDragDisabled = false,\n    isDropDisabled = false,\n    dropZoneColor,\n    // style,\n    children,\n  } = props;\n\n  const context = useContext(interactionContext);\n\n  const {\n    panelBackground: _panelBackground = '#fff',\n    panelBackgroundOpacity: _panelBackgroundOpacity = 100,\n    panelBackgroundDragging: _panelBackgroundDragging,\n    panelBackgroundDraggingOpacity: _panelBackgroundDraggingOpacity = 100,\n    textColorDragging = '#fff',\n    panelWidth = 250,\n    panelHeight = 250,\n    panelOutline = false,\n    panelOutlineColor = '',\n    panelBorderRadius = 5,\n    panelShadow = true,\n    focusColor = props.panelBackground,\n  } = context.props;\n\n  const { r, g, b } = hexToRgb(_panelBackground);\n  const panelBackgroundOpacity = _panelBackgroundOpacity * 0.01;\n  const panelBackground = `rgba(${r}, ${g}, ${b}, ${panelBackgroundOpacity})`;\n\n  const { r: rr, g: gg, b: bb } = hexToRgb(_panelBackgroundDragging);\n  const panelBackgroundDraggingOpacity = _panelBackgroundDraggingOpacity * 0.01;\n  const panelBackgroundDragging = `rgba(${rr}, ${gg}, ${bb}, 1)`;\n\n  let [media] = children;\n\n  if (media) {\n    media = cloneElement(media, {\n      onMediaChange(child) {\n        mediaTypeUpdated(child);\n      },\n    });\n  }\n\n  let initialMediaType = media?.props?.child ?? 1;\n  const [mediaType, mediaTypeUpdated] = useState<number>(initialMediaType);\n\n  // this used as the key to have the fricken image update\n  // grabbing the src off the img directly from props doesn't kick in\n  // so. going to the SOURCE of the src\n  const keyFromSrc =\n    window.dev() &&\n    useSelector(\n      (state: any) => state.blocks[children[0].props.children[1].props.id].props\n    ).src;\n\n  const [hoverHilite, publish] = usePubSub(\n    `MATCHING_INTERACTION_FEEDBACK_${context.id}`\n  );\n\n  const hover =\n    hoverHilite &&\n    hoverHilite.draggableId === draggableId &&\n    hoverHilite.eventType === 'mouseOver';\n\n  const {\n    attributes,\n    listeners,\n    setNodeRef,\n    transform,\n    isDragging,\n  } = useDraggable({\n    id: `${props.id}`,\n  });\n\n  const style = transform\n    ? {\n        transform: `translate3d(${transform.x}px, ${transform.y}px, 0)`,\n      }\n    : undefined;\n\n  const id = `match-drag-${props?.id}`;\n\n  return (\n    <div\n      className=\"droppable-container\"\n      css={css`\n        position: relative;\n        width: ${panelWidth}px;\n        height: ${panelHeight}px;\n        margin: 10px;\n        text-align: center;\n        background: ${'transparent' || '#fff' || lGrey1};\n        border-radius: ${panelBorderRadius}px;\n      `}\n    >\n      <div\n        ref={setNodeRef}\n        id={id}\n        className={!isDragDisabled ? 'match-drag-focusable' : ''}\n        css={css`\n        position: relative;\n                    width: ${panelWidth}px;\n                    height: ${panelHeight}px;\n                    text-align: center;\n                    ${isDragDisabled &&\n                      `.draggable-content {\n            box-shadow: 0 0 0 1px ${lGrey2};\n          }`}\n\n          touch-action: none;\n\n                    border-radius: ${panelBorderRadius}px;\n                    ${!isDragging &&\n                      `&:focus {\n                              //\n                              ${getButtonFocus(\n                                ['#fff', '#ffffff'].includes(panelBackground)\n                                  ? lGrey0\n                                  : focusColor || panelBackground\n                              )}\n                            }`}\n\n                            pointer-events: ${isDragDisabled ? 'none' : 'auto'};\n                  `}\n        style={{\n          zIndex: isDragging ? 2147483647 : 0,\n          cursor: window.dev() ? 'auto' : 'grab',\n          ...style,\n        }}\n        {...(!window.dev() &&\n          !isDragDisabled && {\n            ...listeners,\n            ...attributes,\n          })}\n      >\n        <div\n          className=\"draggable-content matchingPanel\"\n          css={css`\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            width: ${panelWidth}px;\n            height: ${panelHeight}px;\n            padding: 10px;\n            padding: ${mediaType === 0 ? '10px' : '0px'};\n\n            border: 1px solid\n              ${panelOutline && panelOutlineColor\n                ? panelOutlineColor\n                : 'transparent'};\n\n            border-radius: ${panelBorderRadius}px;\n            background: ${isDragging\n              ? panelBackgroundDragging\n              : panelBackground};\n            box-shadow: ${panelShadow ? '0 0 15px rgba(0, 0, 0, 0.3)' : 'none'};\n            transition: background 0.2s, box-shadow 0.2s;\n            overflow: hidden;\n\n            .chameleon-image > div,\n            .chameleon-image img {\n              width: ${panelWidth}px !important;\n              height: ${panelHeight}px !important;\n            }\n\n            * {\n              ${isDragging && `color: ${textColorDragging} !important;`}\n            }\n            ${!window.dev() &&\n              `\n                          user-select: none;\n                      `}\n\n            ${window.dev() &&\n              hover &&\n              `\n                      transition: border 0.3s;\n                      border: 1px solid ${lPink};\n                      `}\n          `}\n        >\n          {media}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default MatchDrag;\n","/** @jsx jsx */\n\nimport { Fragment as _, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { useDroppable } from '@dnd-kit/core';\nimport { colors } from 'styles/variables';\nimport { interactionContext } from './interactionContext';\n\nconst { lPink, lGrey0, lGrey1 } = colors;\n\nconst MatchDrop = props => {\n  const { droppableId, isDropDisabled = false, style, children } = props;\n\n  const context = useContext(interactionContext);\n  const {\n    dropZoneColor = lGrey1,\n    panelWidth = 250,\n    panelHeight = 250,\n    panelBorderRadius = 5,\n  } = context.props;\n\n  const mediaType = children[0].props.child;\n\n  const { isOver, setNodeRef } = useDroppable({\n    id: props.id || droppableId,\n  });\n\n  const id = `match-drop-${props?.id}`;\n\n  return (\n    <div\n      ref={setNodeRef}\n      id={id}\n      className={'droppable-container'}\n      css={css`\n            position: relative;\n            width: ${panelWidth}px;\n            height: ${panelHeight}px;\n            margin: 10px;\n            text-align: center;\n            background: ${'transparent' || '#fff' || lGrey1};\n            ${!isDropDisabled && `border: 2px dashed ${dropZoneColor};`}\n            border-radius: ${panelBorderRadius}px;\n            overflow: hidden;\n\n            oultine: 10px solid red;\n          `}\n      style={style}\n    >\n      <div\n        className=\"matchingPanel\"\n        css={css`\n          position: absolute;\n          display: flex;\n          align-items: center;\n          left: 0;\n          top: 0;\n          width: 100%;\n          height: 100%;\n          padding: ${mediaType === 0 ? '10px' : '0px'};\n\n          .chameleon-image > div,\n          .chameleon-image img {\n            width: ${panelWidth}px !important;\n            height: ${panelHeight}px !important;\n          }\n        `}\n      >\n        {children}\n      </div>\n    </div>\n  );\n};\n\nexport default MatchDrop;\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  memo,\n  useMemo,\n  createContext,\n  useContext,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport Matching from './Matching_v2';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport { Block } from '@chameleoncreator/creator-app';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport Image from 'components/lib/Image';\nimport Media, { MediaContext, IMediaContext } from 'components/lib/Media';\nimport { imgPlaceholders } from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport Audio from 'components/lib/Audio';\nimport Transcript from 'components/lib/Video/Transcript';\nimport SVG from 'components/lib/SVG';\nimport Embed from 'components/lib/Embed';\nimport getMediaParent from 'services/apiHelpers/getMediaParent';\nimport MatchDrag from './MatchDrag';\nimport MatchDrop from './MatchDrop';\nimport shouldUpdate from 'services/shouldUpdate';\nimport imagePlaceholder from 'assets/Square.png';\nimport PDF from 'components/lib/PDF';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport { ImageContext } from 'components/lib/Image';\n\nconst SingleColumnLayout = Row.bind({}) as any;\n\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: ({ children, ...props }) => (\n    <EditableText {...{ ...props, className: 'matching-text' }} />\n  ),\n  TwoColumnLayout: TwoColumnLayout,\n  SingleColumnLayout: SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  EditableButton: EditableBtn,\n  Image: ({ children, ...props }) => {\n    const mediaParent = getMediaParent(props.id);\n\n    //\n    return mediaParent ? (\n      <Image\n        {...{\n          ...props,\n          placeholder: imgPlaceholders[1],\n        }}\n      />\n    ) : (\n      <Image {...props} />\n    );\n  },\n  Video,\n  Audio,\n  SVG,\n  Embed,\n  Media,\n  PDF,\n  OpenPDF,\n  Transcript,\n  InteractionColumn: ({ children, ...props }) => {\n    const interactionContext = useContext(InteractionContext);\n    const { includeAdditionalTextField } = interactionContext.props;\n\n    const [matching, txt] = children;\n\n    if (!includeAdditionalTextField) {\n      return matching;\n    }\n\n    return (\n      <_>\n        {matching}\n        <div\n          style={{\n            margin: '20px 0 0 0',\n          }}\n        >\n          {txt}\n        </div>\n      </_>\n    );\n  },\n\n  MatchPairs: ({ children, ...props }) => children,\n  Matching({ children, ...props }) {\n    return (\n      <ImageContext.Provider\n        value={{\n          editWrapperType: 1,\n          placeholder: imagePlaceholder,\n\n          //\n          canUpdateContainerHeight: false,\n        }}\n      >\n        <Matching {...props}>{children}</Matching>\n      </ImageContext.Provider>\n    );\n  },\n  MatchDrag,\n  MatchDrop,\n  DragContainer: ({ children, ...props }) => children,\n  DropContainer: ({ children, ...props }) => children,\n  AnswerContainer: ({ children, ...props }) => null,\n  Answer: () => null,\n  Feedback: ({ children, ...props }) => children,\n  Correct: ({ children, ...props }) => children,\n  Incorrect: ({ children, ...props }) => children,\n  Modal: () => null,\n  ModalWithEditableBtn: () => null,\n};\n\nconst MatchingDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{ ...interactionBlock, updateItemsSeen: null }}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </InteractionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default MatchingDisplay;\n","import MatchingDisplay from './MatchingDisplay';\n\nexport default MatchingDisplay;\n","/** @jsx jsx */\n\nimport { Fragment as _, memo, useContext } from 'react';\nimport { jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport Audio from 'components/lib/Audio';\nimport SVG from 'components/lib/SVG';\nimport PDF from 'components/lib/PDF';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport Media, { MediaContext, IMediaContext } from 'components/lib/Media';\nimport Embed from 'components/lib/Embed';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport shouldUpdate from 'services/shouldUpdate';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport { imgPlaceholders } from 'components/lib/Image';\nimport mediaDefault from 'assets/Rectangle.png';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  InteractionColumn: ({ children, ...props }) => {\n    const interactionContext = useContext(InteractionContext);\n    const { includeAdditionalTextField } = interactionContext.props;\n\n    const [media, txt] = children;\n\n    if (!includeAdditionalTextField) {\n      return media;\n    }\n\n    return (\n      <_>\n        {media}\n        <div\n          style={{\n            margin: '20px 0 0 0',\n          }}\n        >\n          {txt}\n        </div>\n      </_>\n    );\n  },\n  Image: ({ children, ...props }) => {\n    const mediaContext = useContext(MediaContext) as IMediaContext;\n\n    return (\n      <Image\n        {...{\n          ...props,\n          placeholder: !mediaContext?.isAdditionalMedia\n            ? mediaDefault\n            : imgPlaceholders[1],\n        }}\n      />\n    );\n    //\n  },\n  TwoColumnLayout,\n  SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  EditableButton: EditableBtn,\n  Video,\n  Audio,\n  SVG,\n  PDF,\n  OpenPDF,\n  Media,\n  Embed,\n  Transcript: ({ children }) => children,\n};\n\nconst MultiMediaDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{\n          ...interactionBlock,\n          isOpen: props.isOpen,\n          updateItemsSeen: null,\n        }}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </InteractionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default MultiMediaDisplay;\n","import TextAndImage from './MultiMediaDisplay';\n\nexport default TextAndImage;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","/** @jsx jsx */\n\nimport React, { Fragment as _ } from 'react';\nimport { keyframes } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport EditMarker from 'components/UI/EditMarker';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport { colors } from 'styles/variables';\nimport Hotspot_CTA from 'assets/Hotspot_CTA.svg';\nimport { useSelector } from 'react-redux';\n\nconst { lPink } = colors;\n\nconst fadeIn = keyframes`\n  from {\n    width: 0px;\n    height: 0px;\n  }\n  to {\n    width: 100px;\n    height: 100px;\n  }\n`;\n\nconst EditWrapper = ({\n  id,\n  width = 0,\n  height = 0,\n  // selected\n}) => {\n  const selected = useSelector((state: any) => state.focusedNodeId === id);\n  // console.log('hotpsot : focusedNodeId ?', selected);\n\n  return (\n    <div\n      css={css`\n        position: absolute;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        left: 0px;\n        top: 0px;\n        width: 100%;\n        height: 100%;\n        ${selected && 'pointer-events: none;'}\n      `}\n    >\n      <div\n        css={css`\n          position: relative;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          // width: calc(100% - 10px);\n          // height: calc(100% - 10px);\n\n          width: ${width - 10}px;\n          height: ${height - 10}px;\n\n          // background: rgba(0, 0, 0, 0.1);\n          box-shadow: 0 0 0 1px lightGrey;\n          // transition: all 0.2s;\n          cursor: pointer;\n\n          // animation: ${fadeIn} 0.2s forwards;\n\n          &:hover {\n            background: rgba(0, 0, 0, 0);\n            box-shadow: 0 0 0 1px ${lPink};\n          }\n\n          ${selected &&\n            `\n          // width: calc(100%);\n          // height: calc(100%);\n\n          width: ${width + 10}px;\n          height: ${height + 10}px;\n\n          background: none;\n          box-shadow: 0 0 0 1px ${lPink};\n        \n          `}\n        `}\n        onClick={e => {\n          e.stopPropagation();\n          if (selected) return;\n\n          setCurrentBlock({ id });\n        }}\n      >\n        {!selected && (\n          <_>\n            {/* <img src={Hotspot_CTA} /> */}\n            <EditMarker />\n          </_>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default EditWrapper;\n","/** @jsx jsx */\n\nimport React, { Fragment as _ } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport Modal from 'components/UI/Modal';\nimport { colors } from 'styles/variables';\nimport checkReturnToInteractionEditing from 'services/checkReturnToInteractionEditing';\n\nconst { lGrey0 } = colors;\nconst maxWidth = 512;\n\nconst Feedback = props => {\n  const { useMediaInFeedback = true, onClose, children } = props;\n  const [image, text, btn] = children;\n\n  //\n  return (\n    <Modal onClose={() => onClose()}>\n      <div\n        css={css`\n          position: relative;\n          display: flex;\n          flex-direction: column;\n          align-items: center;\n          width: 100%;\n          height: 100%;\n          max-width: 768px;\n          padding: 50px;\n        `}\n      >\n        {useMediaInFeedback && (\n          <div\n            css={css`\n              width: 75%;\n              width: 100%;\n\n              margin-bottom: 30px;\n\n              .chameleon-image img {\n                // max-height: 30vh !important;\n\n                height: auto !important;\n                object-fit: contain;\n              }\n\n              @media (max-width: 768px) {\n                width: 100%;\n                margin-bottom: 25px;\n              }\n            `}\n          >\n            {image}\n          </div>\n        )}\n        <div\n          css={css`\n            width: 100%;\n            margin-bottom: 30px;\n          `}\n        >\n          {text}\n        </div>\n        <div\n          css={css`\n            display: flex;\n            justify-self: flex-end;\n            justify-content: center;\n            width: 100%;\n          `}\n        >\n          {window.dev() ? btn : React.cloneElement(btn, { onClick: onClose })}\n        </div>\n      </div>\n    </Modal>\n  );\n};\n\nexport default Feedback;\n","/** @jsx jsx */\n\nimport { Fragment as _, useState } from 'react';\nimport { css, jsx, keyframes } from '@emotion/core';\n\nconst HotSpotTickedWhenSeen = props => {\n  const {\n    x,\n    y,\n    size,\n    inverseScale,\n    color = '#00D9D3',\n    displayAsRadio = false,\n  } = props;\n\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      x={x}\n      y={y}\n      fill=\"none\"\n      overflow=\"visible\"\n      css={css({\n        '*': {\n          transform: `scale(${inverseScale})`,\n        },\n        pointerEvents: 'none',\n      })}\n    >\n      <circle\n        cx={0}\n        cy={0}\n        r={10}\n        style={{\n          fill: '#fff',\n          WebkitFilter: `drop-shadow(0 0 4px rgba(0, 0, 0, 0.15))`,\n          filter: `drop-shadow(0 0 4px rgba(0, 0, 0, 0.15))`,\n        }}\n      />\n      {displayAsRadio ? (\n        <svg overflow=\"visible\" x={0} y={0}>\n          <circle\n            cx={0}\n            cy={0}\n            r={10}\n            style={{\n              fill: color,\n              transform: 'scale(0.8)',\n            }}\n          />\n        </svg>\n      ) : (\n        <svg overflow=\"visible\" x={-5} y={-4}>\n          <path\n            d=\"M1.21741 3.93192L4.06313 6.51129L8.99789 0.838809\"\n            style={{\n              stroke: color,\n              strokeWidth: 2,\n              transformOrigin: '5px 4px',\n            }}\n          />\n        </svg>\n      )}\n    </svg>\n  );\n};\n\nexport { HotSpotTickedWhenSeen };\n","/** @jsx jsx */\n\nimport { Fragment as _, useState, useRef } from 'react';\nimport { css, jsx, keyframes } from '@emotion/core';\nimport { HotSpotTickedWhenSeen } from './HotSpotTickedWhenSeen';\n\nconst outerPulse = (x, y) => keyframes`\n0% {\n  // opacity: .5;\n  opacity: 1;\n  transform: scale(0);\n  transform-origin: ${x}px ${y}px;\n}\n// 50% {\n//   opacity: 0.8;\n// }\n80%, 100% {\n  opacity: 0;\n  transform: scale(1);\n  transform-origin: ${x}px ${y}px;\n}\n`;\n\nconst innerPulse = (x, y) => keyframes`\n0% {\n  transform: scale(.8);\n  transform-origin: ${x}px ${y}px;\n}\n50% {\n  transform: scale(1);\n  transform-origin: ${x}px ${y}px;\n}\n100% {\n  transform: scale(.8);\n  transform-origin: ${x}px ${y}px;\n}\n`;\n\nconst focus = keyframes`\n0% {\n  transform: scale(0);\n}\n100% {\n  transform: scale(1);\n}\n`;\n\nconst blur = keyframes`\n0% {\n  transform: scale(1);\n}\n100% {\n  transform: scale(0);\n}`;\n\nconst VisibleHotSpot = ({\n  id,\n  // size = 50,\n  location,\n  color = 'rgba(255, 0, 99, 0.5)',\n  hotSpotsAnimated,\n  hotSpotsVisible,\n  inverseScale,\n  hasBeenSeen,\n  showSeenState,\n  // showCorrectAnswer,\n  submitState,\n  hotSpotFocus,\n  focusStrokeWidth = 2,\n  immediateFeedback = true,\n  isCorrect = false,\n  enabled = true,\n  showChecked,\n  onClick,\n  correctAnswers = [],\n  ...props\n}: {\n  id: string;\n  // size?: number;\n  location: number[];\n  color?: string;\n  hotSpotsAnimated?: boolean;\n  hotSpotsVisible?: boolean;\n  creating?: boolean;\n  hasBeenSeen?: boolean;\n  showSeenState?: boolean | 0 | 1;\n  showCorrectAnswer?: boolean;\n  inverseScale: number;\n  hotSpotFocus: string | undefined;\n  focusStrokeWidth?: number;\n  immediateFeedback?: boolean;\n  submitState: string;\n  isCorrect?: boolean;\n  enabled?: boolean;\n  showChecked?: boolean | undefined;\n  onClick: (e: any) => void;\n\n  correctAnswers?: number[];\n  selected: boolean | undefined;\n}) => {\n  //\n\n  // updates onResize since parent does for calculating scaleFactor\n  let size = (props as any).size || 50;\n  if (window.innerWidth < 480) {\n    size = size * 0.6;\n  }\n\n  const [hover, setHover] = useState(false);\n  // bit of a dance here to make sure if something ' goes wrong ' and we have an array\n  // of more than 2 entries ( nested array )\n  const [x, y] = location;\n\n  const visibility = window.dev() ? true : hotSpotsVisible;\n  //\n\n  const radii = useRef<{ outer: number; inner: number }>({\n    outer: 0,\n    inner: 0,\n  });\n\n  if (![0, Infinity].includes(size / 2)) {\n    radii.current.outer = size / 2;\n  }\n\n  if (![0, Infinity].includes(size / 2 / 3)) {\n    radii.current.inner = size / 2 / 3;\n  }\n\n  const selected = !immediateFeedback ? props?.selected : null;\n\n  return (\n    <g\n      style={{\n        pointerEvents: !immediateFeedback\n          ? enabled\n            ? 'auto'\n            : 'none'\n          : 'auto',\n\n        // we'll stamp this in here as an ' override '\n        // so as not to futz with the logic above that works\n        // if we're a quiz. and selected. kill pointer\n        ...(!immediateFeedback &&\n          correctAnswers?.length === 1 &&\n          selected && {\n            pointerEvents: 'none',\n          }),\n      }}\n      onMouseOver={() => setHover(true)}\n      onMouseOut={() => setHover(false)}\n      onClick={onClick}\n    >\n      <circle\n        id={id}\n        className=\"fader_-2s\"\n        cx={x}\n        cy={y}\n        r={radii.current.outer} // size / 2\n        css={css`\n          animation: ${!window.dev() && !hasBeenSeen && hotSpotsAnimated\n              ? !hover\n                ? outerPulse(x, y)\n                : ''\n              : ''}\n            1.25s cubic-bezier(0.215, 0.61, 0.355, 1) infinite;\n        `}\n        style={{\n          fill: visibility ? color : 'transparent',\n          ...(window.dev && window.dev()\n            ? {\n                cursor: 'pointer',\n                opacity: hover ? 0.5 : 1,\n                transition: 'opacity 0.2s',\n              }\n            : {\n                cursor: 'pointer',\n              }),\n\n          transition: 'fill 0.1s',\n        }}\n      />\n\n      {hotSpotsAnimated && (\n        <circle\n          cx={x}\n          cy={y}\n          r={radii.current.inner} // size / 2 / 3\n          css={css`\n            pointer-events: none;\n            animation: ${!window.dev() ? (!hover ? innerPulse(x, y) : '') : ''}\n              1.25s cubic-bezier(0.455, 0.03, 0.515, 0.955) -0.4s infinite;\n          `}\n          style={{\n            fill: visibility ? color : 'transparent',\n            transition: 'fill 0.2s',\n          }}\n        />\n      )}\n\n      <svg x={x} y={y} overflow=\"visible\">\n        {`hotspot-${hotSpotFocus}` === id && (\n          <circle\n            cx={0}\n            cy={0}\n            r={size / 1.8}\n            css={css({\n              pointerEvents: 'none',\n              fill: 'transparent',\n              stroke: color,\n              strokeWidth: 2 * inverseScale,\n            })}\n          />\n        )}\n      </svg>\n\n      {showChecked && (\n        <HotSpotTickedWhenSeen\n          x={x}\n          y={y}\n          size={size}\n          color={color}\n          inverseScale={inverseScale}\n          displayAsRadio={submitState && submitState !== 'resolved'}\n        />\n      )}\n    </g>\n  );\n};\n\nexport default VisibleHotSpot;\n","/** @jsx jsx */\n\nimport { Fragment as _ } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { HotSpotTickedWhenSeen } from './HotSpotTickedWhenSeen';\n\ninterface IPolygonProps {\n  id: string;\n  points: string;\n  hotSpotsVisible: boolean;\n  r: string | number;\n  g: string | number;\n  b: string | number;\n  hotSpotColor: string;\n  onClick: (e: any) => void;\n  immediateFeedback?: boolean;\n  isCorrect?: boolean;\n  enabled?: boolean;\n  hasBeenSeen: boolean;\n  hotSpotFocus: string | undefined;\n  showSeenState?: boolean | 0 | 1;\n  inverseScale: number;\n  showChecked?: boolean | undefined;\n  submitState?: string;\n  correctAnswers?: number[] | undefined;\n  selected?: boolean | undefined;\n}\nconst Polygon = (props: IPolygonProps) => {\n  const {\n    id,\n    hotSpotsVisible,\n    r,\n    g,\n    b,\n    hotSpotColor,\n    onClick,\n    immediateFeedback = true,\n    isCorrect = false,\n    enabled = true,\n    hasBeenSeen,\n    showSeenState,\n    hotSpotFocus,\n    inverseScale,\n    showChecked,\n    submitState,\n    correctAnswers = [],\n  } = props;\n\n  let points = props.points;\n\n  let pointsToArray;\n  if (points.includes(',')) {\n    points = points.replace(/,/g, ' ');\n  }\n\n  pointsToArray = points.split(' ');\n\n  const xPoints = pointsToArray.filter((p, i) => {\n    return i % 2 < 1;\n  });\n  const yPoints = pointsToArray.filter((p, i) => {\n    return i % 2 > 0;\n  });\n\n  const minX: number = Math.min(...xPoints);\n  const maxX: number = Math.max(...xPoints);\n  const minY: number = Math.min(...yPoints);\n  const maxY: number = Math.max(...yPoints);\n\n  const x = minX + (maxX - minX) / 2;\n  const y = minY + (maxY - minY) / 2;\n\n  const selected = !immediateFeedback ? props?.selected : null;\n\n  return (\n    <svg>\n      <polygon\n        id={id}\n        points={points}\n        css={css`\n          ${((window.dev && window.dev()) || hotSpotsVisible) &&\n            `&:hover {\n    fill: rgba(${r}, ${g}, ${b}, 0.25) !important;\n  }`}\n        `}\n        style={\n          window.dev()\n            ? {\n                fill: `rgba(${r}, ${g}, ${b}, 0.5)`,\n                stroke: hotSpotColor,\n                strokeWidth: 1,\n                cursor:\n                  (window.dev && window.dev()) || hotSpotsVisible\n                    ? 'pointer'\n                    : 'auto',\n                transition: 'fill 0.1s',\n              }\n            : {\n                fill: 'rgba(0, 0, 0, 0)',\n                ...(hotSpotsVisible && {\n                  stroke: hotSpotColor,\n                  strokeWidth:\n                    `hotspot-${hotSpotFocus}` === id ? 3 * inverseScale : 1,\n                  cursor: 'pointer',\n                  transition: 'fill 0.1s',\n                }),\n\n                pointerEvents: !immediateFeedback\n                  ? enabled\n                    ? 'auto'\n                    : 'none'\n                  : 'auto',\n\n                // we'll stamp this in here as an ' override '\n                // so as not to futz with the logic above that works\n                // if we're a quiz. and selected. kill pointer\n                ...(!immediateFeedback &&\n                  correctAnswers?.length === 1 &&\n                  selected && {\n                    pointerEvents: 'none',\n                  }),\n              }\n        }\n        onClick={onClick}\n      />\n\n      {showChecked && (\n        <HotSpotTickedWhenSeen\n          x={x}\n          y={y}\n          size={75 * inverseScale}\n          color={hotSpotColor}\n          inverseScale={inverseScale}\n          displayAsRadio={submitState && submitState !== 'resolved'}\n        />\n      )}\n    </svg>\n  );\n};\n\nexport { Polygon };\n","import { createContext } from 'react';\n\nexport default createContext<any>(null);\n","/** @jsx jsx */\nimport { useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { colors } from 'styles/variables';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport setBlockProps from 'services/apiHelpers/setBlockProps';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport Image from 'assets/Image.svg';\nimport SVG from 'assets/SVG.svg';\nimport PDF from 'assets/PDF_smallIcon.svg';\nimport Video from 'assets/Video.svg';\nimport Audio from 'assets/AudioIcon.svg';\nimport Text from 'assets/Text.svg';\nimport Embed from 'assets/Embed.svg';\nimport getBlocksByType from 'services/apiHelpers/getBlocksByType';\nimport { findByKeyVal_V2 } from 'services/findByKeyVal';\nimport editorContext from 'components/Editor/editorContext';\nimport { H2 as H2_v2 } from '../EditorUtilities/UI/Headings';\n\nconst { lGrey3 } = colors;\n\nconst mediaTypes = {\n  0: 'Text',\n  1: 'Image',\n  2: 'Video',\n  3: 'SVG',\n  4: 'Embed',\n  5: 'Audio',\n  6: 'PDF',\n} as const;\n\n// this type stuff here is a bit of overkill maybe. but as an effort to not change the id's themselves\n// do the typescripty work to build on top of the existing pattern / interface\n\nconst mediaTypeIDs = Object.values(mediaTypes).map(\n  mediaType => `media-${mediaType}` as const\n);\n\ntype MediaTypeID = typeof mediaTypeIDs[number];\n\ninterface Icon {\n  id: MediaTypeID;\n  src: string;\n  isActiveType: boolean;\n  hasPermission?: 'ENABLED' | 'LOCKED' | 'HIDDEN';\n}\n\nconst Icon = ({ id, src, isActiveType, hasPermission }: Icon) => {\n  if (hasPermission === 'HIDDEN') {\n    return null;\n  }\n\n  const isLocked =\n    hasPermission === 'LOCKED'\n      ? `\n    pointer-events: none;\n    opacity: 0.25;\n  `\n      : '';\n\n  return src ? (\n    <img\n      id={id}\n      src={src}\n      css={css`\n        width: 35px;\n        height: 35px;\n        cursor: pointer;\n        pointer-events: ${isActiveType ? 'none' : 'auto'};\n        background: ${isActiveType ? lGrey3 : ''};\n        border-radius: 5px;\n        padding: 5px;\n        transition: all 0.2s;\n        &:hover {\n          background: ${lGrey3};\n        }\n\n        ${isLocked}\n      `}\n    />\n  ) : (\n    <div\n      id={id}\n      className=\"fas fa-code\"\n      css={css`\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        width: 35px;\n        height: 35px;\n        cursor: pointer;\n        pointer-events: ${isActiveType ? 'none' : 'auto'};\n        background: ${isActiveType ? lGrey3 : ''};\n        border-radius: 5px;\n        padding: 5px;\n        transition: all 0.2s;\n        &:hover {\n          background: ${lGrey3};\n        }\n\n        ${isLocked}\n      `}\n    />\n  );\n};\n\nconst SetMediaType = ({\n  block,\n  mediaParent,\n}: {\n  block?: any;\n  mediaParent: any;\n}) => {\n  const context = useContext(editorContext);\n  const { creatorInteractionEmbed } = context?.permissions || {};\n\n  if (!mediaParent) {\n    return null;\n  }\n\n  const mediaType = mediaParent.props.child;\n  const { removeTypes, forceInclude } = mediaParent?.props;\n\n  const isActiveType = index => mediaType === index;\n\n  const interactionParent = getBlocksByType('Interaction').find(\n    i => findByKeyVal_V2(i.id, 'id', mediaParent.id) as any\n  );\n\n  // all of this is gonna be replaced by removeTypes\n  // and we have the hack of forceInclude\n  // the problem is having to juggle legacy\n\n  const isInteractionType = (interactionParent, type) =>\n    interactionParent ? interactionParent.meta.subType === type : undefined;\n\n  const isFlipCard = isInteractionType(interactionParent, 'FlipCard');\n  const isClickAndReveal = isInteractionType(\n    interactionParent,\n    'ClickAndReveal'\n  );\n  const isMatching = isInteractionType(interactionParent, 'Matching');\n  const isAccordion = isInteractionType(interactionParent, 'Accordion');\n\n  // older modules might not have ' new ' types\n  // filter applied\n  const availableMediaTypes = mediaParent.children.map(p => {\n    const block: any = getBlockById(p.id);\n    return block.type.toLowerCase();\n  });\n\n  let hasEmbed = availableMediaTypes.includes('embed');\n  let hasAudio = availableMediaTypes.includes('audio');\n  let hasPDF = availableMediaTypes.includes('pdf');\n\n  const interactionParentSubType: string = interactionParent?.meta?.subType;\n\n  // check that media is a child of feedback\n  const interactionFeedback = getBlocksByType('Feedback').find(\n    i => findByKeyVal_V2(i.id, 'id', mediaParent.id) as any\n  );\n\n  const isChildOfFeedback =\n    interactionFeedback &&\n    interactionFeedback?.meta?.subType?.toLowerCase() === 'feedback';\n\n  // we're going to allow these media types in all modals/feedback now\n  if (isChildOfFeedback) {\n    // hasEmbed = false;\n    // hasPDF = false;\n  }\n  //\n\n  return (\n    <div\n      css={css`\n        margin-top: 20px;\n        margin-bottom: 20px;\n      `}\n    >\n      <div>\n        <H2_v2\n          css={css`\n            margin: 0 0 5px 0;\n          `}\n        >\n          {mediaTypes[mediaType]}\n        </H2_v2>\n      </div>\n\n      <div\n        css={css`\n          display: flex;\n\n          img {\n            margin-right: 5px;\n          }\n        `}\n        onClick={(e: any) => {\n          const type = e.target.id.split('-')[1];\n\n          if (!type) return;\n\n          const typeIndex = {\n            Text: 0,\n            Image: 1,\n            Video: 2,\n            SVG: 3,\n            Embed: 4,\n            Audio: 5,\n            PDF: 6,\n          }[type];\n\n          // if we change type to anything other than video. ensure lockDown is false\n          // include for audio too\n          // if (type.toLowerCase() !== 'video') {\n          if (!['video', 'audio'].includes(type.toLowerCase)) {\n            setBlockProps(interactionParent, {\n              lockDown: false,\n            });\n          }\n\n          setBlockProps(getBlockById(mediaParent.id), {\n            child: typeIndex,\n          });\n\n          requestAnimationFrame(() => {\n            setCurrentBlock(getBlockById(mediaParent.children[typeIndex].id));\n          });\n        }}\n      >\n        <Icon id=\"media-Text\" src={Text} isActiveType={isActiveType(0)} />\n\n        <Icon id=\"media-Image\" src={Image} isActiveType={isActiveType(1)} />\n\n        <Icon id=\"media-Video\" src={Video} isActiveType={isActiveType(2)} />\n\n        {hasAudio && (\n          <Icon id=\"media-Audio\" src={Audio} isActiveType={isActiveType(5)} />\n        )}\n\n        <Icon id=\"media-SVG\" src={SVG} isActiveType={isActiveType(3)} />\n\n        {!(isAccordion || isFlipCard) && hasPDF && (\n          <Icon id=\"media-PDF\" src={PDF} isActiveType={isActiveType(6)} />\n        )}\n\n        {!(isAccordion || isFlipCard) && hasEmbed && (\n          <Icon\n            id=\"media-Embed\"\n            src={Embed}\n            isActiveType={isActiveType(4)}\n            hasPermission={creatorInteractionEmbed}\n          />\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default SetMediaType;\n","import { colors } from 'styles/variables';\n\nconst { lPink, lGrey0, lGrey1, lGrey2 } = colors;\n\nconst imageLibraryColors = {\n  blue0: '#eaefff',\n  blue1: '#c9d7f4',\n  lightGrey: '#eaefff',\n};\n\nconst thumbnailsContainerHeight = (offset: number = 250) =>\n  `calc(100vh - ${offset}px)`;\n\nexport default {\n  ...colors,\n  ...imageLibraryColors,\n  thumbnailsContainerHeight,\n};\n","/** @jsx jsx */\n\nimport React, { useRef, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditorBtn from 'components/UI/EditorBtn';\nimport { colors } from 'styles/variables';\nimport getStore from 'services/getStore';\n\ninterface IFileUploader {\n  label: string;\n  onUploadStart?: any;\n  onUploadComplete: (result: { [key: string]: any }, e: any) => void;\n  btnColor?: string;\n  style?: { [key: string]: any };\n}\n\nconst store = getStore();\nconst { lPink, lGrey0, lGrey1 } = colors;\n\nconst onFileSelected = (e, onUploadComplete) => {\n  e.persist();\n\n  const { projectId } = store.getState();\n\n  window.client.files\n    .set(e.target.files, projectId)\n    .then(d => {\n      onUploadComplete(d, e);\n    })\n    .catch(error => onUploadComplete(error, e));\n};\n\nconst FileUploader = ({\n  label,\n  onUploadStart,\n  onUploadComplete,\n  btnColor = lGrey0,\n  style = {},\n  ...props\n}: IFileUploader) => {\n  // const { projectId } = store.getState();\n  const fileUpload = useRef<HTMLInputElement>(null);\n\n  return (\n    <div>\n      <EditorBtn\n        label={label}\n        css={css`\n          padding-left: 30px;\n          padding-right: 30px;\n          background: ${btnColor};\n        `}\n        style={style}\n        onClick={() => {\n          onUploadStart && onUploadStart();\n          fileUpload.current!.click();\n        }}\n        {...props}\n      />\n      <input\n        ref={fileUpload}\n        type=\"file\"\n        id=\"file-upload\"\n        style={{ display: 'none' }}\n        onChange={e => {\n          // window.client.files\n          //   .set(e.target.files, projectId)\n          //   .then(d => {\n          //     onUploadComplete(d);\n          //   })\n          //   .catch(error => onUploadComplete(error));\n          onFileSelected(e, onUploadComplete);\n        }}\n      />\n    </div>\n  );\n};\n\nfunction rawUploader(files, onUploadComplete) {\n  const { projectId } = store.getState();\n\n  const FileList = {\n    0: files[0],\n    length: 1,\n  };\n\n  console.log(FileList);\n\n  window.client.files\n    .set(FileList, projectId)\n    .then(d => {\n      onUploadComplete(d);\n    })\n    .catch(error => onUploadComplete(`ERROR : ${error}`));\n}\n\nexport default FileUploader;\nexport { onFileSelected, rawUploader };\n","export const getSVGSize = (url: string) => {\n  return new Promise((resolve, reject) => {\n    fetch(url)\n      .then(r => r.text())\n      .then(t => {\n        if (!t) {\n          throw 'no text in response.';\n        }\n\n        let svg: HTMLElement | SVGSVGElement | null = document.createElement(\n          'div'\n        );\n        svg.innerHTML = t;\n        svg = svg.querySelector('svg');\n\n        if (!svg) {\n          throw 'no svg in response. something went really wrong here.';\n        }\n\n        let viewBox: any = svg.getAttribute('viewBox');\n\n        let w;\n        let h;\n\n        if (viewBox) {\n          viewBox = viewBox.split(/ /g);\n          w = viewBox[2];\n          h = viewBox[3];\n        }\n\n        const width = svg.getAttribute('width');\n        const height = svg.getAttribute('height');\n\n        if (width && height) {\n          w = width;\n          h = height;\n        }\n\n        if (!w || !h) {\n          throw 'no width or height values are set in svg.';\n        }\n\n        // do not want to use defaults. if the values are not there we want to know\n        // { width: w || 1100, height: h || 618.75 }\n        resolve({ width: w, height: h } as any);\n      })\n      .catch(err => {\n        reject(err);\n      });\n  });\n};\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useState,\n  useContext,\n  useRef,\n  useEffect,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport colors from '../variables';\nimport LoadingSpinner from 'components/UI/LoadingSpinner';\nimport EditorBtn from 'components/UI/EditorBtn';\nimport FileUploader from 'components/UI/FileUploader';\nimport { ImageLibraryContext } from '../../EditImage';\nimport { getSVGSize } from 'services/getSVGSize';\n\nconst { lPink, lGrey0, lightGrey } = colors;\n\nconst cache = {};\n\nconst NoImageSelected = () => {\n  return (\n    <span\n      css={css`\n        font-size: 14px;\n        font-weight: 700;\n        text-transform: uppercase;\n      `}\n    >\n      no image selected\n    </span>\n  );\n};\n\nconst PreviewImg = ({ preview }) => {\n  return (\n    <div\n      className=\"fader_-5s\"\n      css={css`\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        width: 100%;\n        min-height: 215px;\n        ${preview &&\n          `\nbackground: url(\"${preview.url}\") no-repeat;\nbackground-size: contain;\nbackground-position: center;\n\nborder: 1px solid ${lightGrey};\nborder-radius: 3px;\n\n`}\n      `}\n    />\n  );\n};\n\nexport const PreviewInfo = ({ property, value }) => {\n  return value ? (\n    <div\n      css={css`\n        margin: 5px 0 0 0;\n        word-break: break-all;\n        font-size: 12px;\n      `}\n    >\n      <span\n        css={css`\n          font-weight: 700;\n        `}\n      >\n        {property}:\n      </span>{' '}\n      {value}\n    </div>\n  ) : null;\n};\n\nconst YourImagePreviewPanel = ({\n  preview,\n  onUploadImage,\n  // onAddImage,\n  // onClose,\n}) => {\n  const { onAddImage, onClose } = useContext(ImageLibraryContext)!;\n\n  const [imgData, setImgData] = useState<any>(undefined);\n  const [uploadError, setUploadError] = useState(false);\n\n  const mounted = useRef(true);\n\n  useEffect(\n    () => () => {\n      mounted.current = false;\n    },\n    []\n  );\n\n  useEffect(() => {\n    if (!preview) {\n      return;\n    }\n\n    // reset it until loaded\n    if (imgData) {\n      mounted.current && setImgData(undefined);\n    }\n\n    if (cache[preview.url]) {\n      setImgData(cache[preview.url]);\n      return;\n    }\n\n    //\n    const img = new Image();\n    img.src = preview.url;\n\n    img.onload = () => {\n      let name: any = preview.name.split(/\\//g);\n      name = name[name.length - 1];\n\n      mounted.current &&\n        setImgData(\n          (cache[preview.url] = {\n            name,\n            size: preview.size ? `${preview.size / 1000}kb` : 0,\n            width: img.width,\n            height: img.height,\n          })\n        );\n    };\n  }, [preview]);\n\n  return (\n    <div\n      css={css`\n        position: relative;\n        width: 100%;\n        height: 100%;\n      `}\n    >\n      {imgData ? (\n        <_>\n          <PreviewImg key={preview && preview.url} preview={preview} />\n          <div\n            css={css`\n              padding: 10px;\n            `}\n          >\n            <PreviewInfo property=\"Name\" value={imgData.name} />\n            <PreviewInfo property=\"Size\" value={imgData.size} />\n          </div>\n        </_>\n      ) : (\n        <div\n          css={css`\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            width: 100%;\n            min-height: 50%;\n          `}\n        >\n          {!preview ? <NoImageSelected /> : <LoadingSpinner />}\n        </div>\n      )}\n\n      <div\n        css={css`\n          width: 100%;\n          margin: 15px 0 0 0;\n        `}\n      >\n        <EditorBtn\n          label=\"Insert image\"\n          style={{\n            width: `${'175px' || '100%'}`,\n            // height: 35,\n            // height: '31px !important',\n            margin: '0 0 15px 0',\n            border: `1px solid ${lGrey0}`,\n            background: '#fff',\n            color: lGrey0,\n            fontSize: 11,\n\n            opacity: imgData ? 1 : 0.25,\n            pointerEvents: imgData ? 'auto' : 'none',\n\n            hover: {\n              color: '#fff',\n              background: '#28292b',\n            },\n          }}\n          css={css`\n            min-height: 30px;\n          `}\n          onClick={() => {\n            // stripping double ( for mac ? ) and single quotes\n            // which would break\n\n            const url = preview.url.replace(/'|\"/g, '');\n            const id = preview.id;\n\n            // is uplodaded file an svg?\n            if (/\\.(svg)$/i.test(preview.url)) {\n              let width;\n              let height;\n\n              getSVGSize(preview.url)\n                .then((size: any) => {\n                  width = size?.width;\n                  height = size?.height;\n                })\n                .catch(err => {\n                  console.log(err);\n                })\n                .finally(() => {\n                  onAddImage!({\n                    url,\n                    id,\n                    width,\n                    height,\n                    size: preview.size ? `${preview.size / 1000}kb` : 0,\n                  });\n                  //\n                  onClose!();\n                });\n            } else {\n              onAddImage!({\n                url,\n                id,\n                ...(imgData && {\n                  width: imgData.width,\n                  height: imgData.height,\n                }),\n                size: preview.size ? `${preview.size / 1000}kb` : 0,\n              });\n              //\n              onClose!();\n            }\n\n            // calling onClose here breaks svg uploading\n            // since called before the svg async bizniz above has resolved\n            //\n            // onClose!();\n          }}\n        />\n\n        <FileUploader\n          label=\"Upload image\"\n          btnColor={lPink}\n          style={{\n            width: `${'175px' || '100%'}`,\n            // height: 35,\n            minHeight: 30,\n            border: `1px solid ${lGrey0}`,\n            background: lGrey0,\n            color: '#fff',\n            fontSize: 11,\n\n            hover: {\n              color: '#28292b',\n              background: '#fff',\n            },\n          }}\n          onUploadStart={() => {\n            setUploadError(false);\n          }}\n          onUploadComplete={(result, e) => {\n            if (!result.url) {\n              setUploadError(true);\n              return;\n            }\n\n            onUploadImage(result, e);\n          }}\n        />\n\n        {uploadError && (\n          <div\n            css={css`\n              margin-top: 10px;\n              padding-right: 20px;\n              font-weight: 500;\n              color: ${lPink};\n              font-size: 11px;\n            `}\n          >\n            An error occured while uploading your image. Please try again.\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default YourImagePreviewPanel;\n","/** @jsx jsx */\n\nimport React, { Fragment as _, useState, useRef, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport colors from '../variables';\nimport LoadingSpinner from 'components/UI/LoadingSpinner';\nimport ThumbnailContainer from '../ThumbnailContainer';\n\nconst { lPink, lGrey0, lGrey1, lGrey2, blue0, blue1, lightGrey } = colors;\n\nconst cache = {};\n\nconst YourImagePreview = ({ data, selected, setSelected }) => {\n  const [loaded, setLoaded] = useState(cache[data.url]);\n\n  const mounted = useRef(true);\n\n  let name = data.url.split(/\\//g);\n  name = name[name.length - 1];\n\n  useEffect(() => {\n    if (cache[data.url]) {\n      return;\n    }\n\n    const img = new Image();\n    img.src = data.url;\n\n    img.onload = () => {\n      mounted.current && setLoaded((cache[data.url] = true));\n    };\n  }, [data]);\n\n  useEffect(() => () => { mounted.current = false }, []);\n\n  return (\n    <ThumbnailContainer\n      selected={selected && selected.url === data.url}\n      label={name}\n      onClick={setSelected}\n    >\n      <_>\n        {loaded ? (\n          <img\n            src={data.url}\n            css={css`\n              height: 100%;\n              object-fit: contain;\n            `}\n          />\n        ) : (\n            <LoadingSpinner />\n          )}\n      </_>\n    </ThumbnailContainer>\n  );\n};\n\nexport default YourImagePreview;\n","/** @jsx jsx */\nimport React, { Fragment as _, useState, useEffect, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport variables from '../variables';\nimport YourImagePreviewPanel from './YourImagePreviewPanel';\nimport Search from '../Search';\nimport YourImagePreview from './YourImagePreview';\nimport { useQuery } from 'urql';\nimport gql from 'graphql-tag';\nimport PrevNextPage from '../PrevNextPage';\nimport { ImageLibraryContext } from '../../EditImage';\nimport { useSelector } from 'react-redux';\nimport { State } from 'store/store';\n\nconst { thumbnailsContainerHeight } = variables;\nconst URL_PREFIX = window['chameleon'].CHAMELEON_URL;\n\n//\nconst uploadsQuery = gql`\n  query pgqlUploads(\n    $accountId: ID!\n    $slug: ID!\n    $filter: String\n    $per: Int\n    $page: Int\n  ) {\n    organization(accountId: $accountId) {\n      data {\n        project(slug: $slug) {\n          data {\n            name\n            uploads(filter: $filter, per: $per, page: $page) {\n              data {\n                id\n                name\n                url\n                size\n              }\n              meta {\n                totalCount\n                totalPages\n                currentPage\n                perPage\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n`;\n\nlet moduleImages: any[] = [];\n\nconst YourLibrary = () => {\n  const {\n    currentImageSrc,\n    currentImageId,\n    cacheSelected,\n    cacheFilter,\n  } = useContext(ImageLibraryContext)!;\n  const [filter, setFilter] = useState(cacheFilter!.value);\n  const [page, setPage] = useState(1);\n  const [per] = useState(25);\n  const { projectId } = useSelector((state: State) => {\n    return {\n      projectId: state.projectId,\n    };\n  });\n\n  const urlParams = new URL(window?.top?.location?.href || '');\n  const path = urlParams?.pathname;\n  const pathSplit = path\n    .split(/\\//g)\n    .filter((entry: string) => entry && entry !== 'edit');\n  const accountId = pathSplit[0] || '';\n  const slug = pathSplit[1] || '';\n\n  const [res, reload] = useQuery({\n    query: uploadsQuery,\n    variables: {\n      accountId,\n      slug,\n      filter,\n      page,\n      per,\n    },\n    requestPolicy: 'cache-and-network',\n  });\n  let meta: any = {};\n\n  if (res && res?.data) {\n    const uploads = res?.data?.organization?.data?.project?.data?.uploads || {};\n\n    moduleImages = [\n      ...uploads?.data.map((entry: any) => ({\n        ...entry,\n        url: `${URL_PREFIX}${entry.url}`,\n      })),\n    ];\n    meta = uploads?.meta;\n  }\n  const isMore = meta.totalCount && per < meta.totalCount;\n  const [selected, setSelected] = useState(cacheSelected!.yourLibrary);\n\n  // load the currently ' selected ' image by its id\n  useEffect(() => {\n    if (filter) {\n      return;\n    }\n    if (!cacheSelected!.yourLibrary) {\n      const existingImageData = moduleImages.find((entry: any) => {\n        //\n        return entry.id === currentImageId;\n      });\n      existingImageData &&\n        setSelected((cacheSelected!.yourLibrary = existingImageData));\n    }\n  }, [moduleImages.length]);\n  useEffect(() => {\n    if (!filter) {\n      return;\n    }\n    !cacheSelected!.yourLibrary &&\n      setSelected((cacheSelected!.yourLibrary = moduleImages[0]));\n  }, [filter, moduleImages.length]);\n  return (\n    <div\n      css={css`\n        position: relative;\n        display: flex;\n        width: 100%;\n        height: 100%;\n      `}\n    >\n      <div\n        css={css`\n          flex: 1;\n          padding: 0 5px 0 0;\n        `}\n      >\n        {/* <UploadImg /> */}\n        <YourImagePreviewPanel\n          preview={selected}\n          onUploadImage={(result, e) => {\n            setSelected((cacheSelected!.yourLibrary = result));\n            reload();\n          }}\n        />\n      </div>\n      <div\n        css={css`\n          position: relative;\n          flex: 2;\n          // padding: 10px 20px ${isMore ? 40 : 10}px 20px;\n          padding: 10px 20px 40px 20px;\n          background: #eaefff;\n        `}\n      >\n        <Search\n          defaultValue={cacheFilter!.value}\n          onSearch={value => {\n            // setPage(1);\n            setFilter((cacheFilter!.value = value));\n            // unset. .\n            setSelected((cacheSelected!.yourLibrary = null));\n            // reload();\n          }}\n        />\n        <div\n          css={css`\n            position: relative;\n            height: ${thumbnailsContainerHeight()};\n            overflow-y: auto;\n          `}\n        >\n          <div\n            css={css`\n              position: absolute;\n              left: 0;\n              top: 0;\n              width: 100%;\n              display: grid;\n              grid-template-columns: repeat(auto-fill, minmax(155px, 1fr));\n            `}\n          >\n            {moduleImages.map((entry, i) => {\n              //\n              const { id, name, url } = entry;\n              return (\n                <YourImagePreview\n                  key={`${name}${i}`}\n                  data={{\n                    ...entry,\n                    url,\n                  }}\n                  selected={selected}\n                  setSelected={() => {\n                    setSelected(\n                      (cacheSelected!.yourLibrary = {\n                        ...entry,\n                        url,\n                      })\n                    );\n                  }}\n                />\n              );\n            })}\n          </div>\n        </div>\n        <PrevNextPage\n          page={page}\n          totalPages={meta.totalPages}\n          updatePage={dir => {\n            setPage(page => {\n              return (dir === 'prev'\n                ? page > 1 && page - 1\n                : page < meta.totalPages && page + 1) as number;\n            });\n          }}\n        />\n        {/* {isMore && <LoadMore setPer={setPer} />} */}\n      </div>\n    </div>\n  );\n};\nexport default YourLibrary;\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport { updateRecoloredChameleonImagesAction } from 'actions/updateRecoloredChameleonImagesAction';\nimport ColorPicker from 'components/UI/ColorPicker';\nimport EditorBtn from 'components/UI/EditorBtn';\nimport { rawUploader } from 'components/UI/FileUploader';\nimport LoadingSpinner from 'components/UI/LoadingSpinner';\nimport { Fragment as _, useContext, useEffect, useRef, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport getStore from 'services/getStore';\nimport { colors } from 'styles/variables';\nimport { ImageLibraryContext } from '../../EditImage';\nimport { ChameleonsLibraryContext } from './ChameleonsLibrary';\nimport { getSVGSize } from 'services/getSVGSize';\n\nconst store = getStore();\n\nconst update = (property, value) => {\n  store.dispatch(\n    updateRecoloredChameleonImagesAction({\n      [property]: value,\n    })\n  );\n};\n\nconst { lGrey0 } = colors;\n\nlet defaultColor = '#61CECE';\n\nconst SVGDisplay = ({ getRef, svg }) => {\n  return (\n    <div\n      className=\"fader_-5s\"\n      css={css`\n        padding: 5px;\n      `}\n    >\n      <div ref={ref => getRef(ref)} dangerouslySetInnerHTML={{ __html: svg }} />\n    </div>\n  );\n};\n\nconst SVGPreview = ({ src, label }) => {\n  const { onAddImage, onClose } = useContext(ImageLibraryContext)!;\n  const { cache } = useContext(ChameleonsLibraryContext)!;\n\n  const [svg, setSvg] = useState<any>(cache[src] || null);\n  const [changeColorElements, setChangeColorElements] = useState([] as any);\n\n  const fill = useSelector((state: any) => {\n    return state.theme.recoloredChameleonImages[src] || defaultColor;\n  });\n\n  const mounted = useRef(true);\n  const svgDOM = useRef<any>(null);\n  const placeholder = useRef<any>(null);\n\n  useEffect(\n    () => () => {\n      mounted.current = false;\n    },\n    []\n  );\n\n  useEffect(() => {\n    if (cache[src]) {\n      mounted.current && setSvg(cache[src]);\n      return;\n    }\n\n    // unload it to clear that visual glitch\n    if (svg !== null) {\n      if (placeholder.current) {\n        placeholder.current.style.height = `${\n          svgDOM.current.getBoundingClientRect().height\n        }px`;\n      }\n      setSvg('unload');\n    }\n\n    //\n    fetch(src)\n      .then(r => r.text())\n      .then(r => {\n        if (placeholder.current) {\n          placeholder.current.style.height = '0px';\n        }\n        mounted.current && setSvg(((cache as any)[src] = r));\n      });\n  }, [src]);\n\n  useEffect(() => {\n    if (!svgDOM.current) return;\n\n    svgDOM.current.querySelector('svg');\n\n    const changeColorElements = Array.from(\n      svgDOM.current.querySelectorAll('*')\n    ).filter((elem: any) => elem.id === 'Change_colour');\n\n    mounted.current && setChangeColorElements(changeColorElements);\n  }, [svg]);\n\n  useEffect(() => {\n    if (!svgDOM.current) return;\n\n    changeColorElements.forEach((elem: any) => {\n      Array.from(elem.querySelectorAll('*')).forEach(\n        (childElem: any) => (childElem.style.fill = fill)\n      );\n    });\n  });\n\n  return svg === null ? (\n    <LoadingSpinner />\n  ) : (\n    <_>\n      <div\n        css={css`\n          position: relative;\n          width: 100%;\n          border: 1px solid #eaefff;\n        `}\n      >\n        {/* <div ref={placeholder} style={{ height: 0 }} /> */}\n        {svg !== 'unload' ? (\n          <_>\n            <SVGDisplay\n              key={src}\n              getRef={ref => (svgDOM.current = ref)}\n              svg={svg}\n            />\n            <div\n              css={css`\n                display: flex;\n                align-items: center;\n                padding: 5px 15px;\n                border-top: 1px solid #eaefff;\n                font-family: inherit;\n                font-size: 12px;\n                color: #98add9 !important;\n              `}\n            >\n              {label}\n            </div>\n          </_>\n        ) : (\n          <div\n            css={css`\n              display: flex;\n              justify-content: center;\n              align-items: center;\n              width: 100%;\n              height: 100%;\n            `}\n          >\n            <LoadingSpinner />\n          </div>\n        )}\n      </div>\n      <div\n        css={css`\n          display: flex;\n          align-items: center;\n          margin: 20px 0;\n          font-family: inherit;\n          font-size: 12px;\n        `}\n      >\n        <ColorPicker\n          inColor={fill}\n          outColor={color => {\n            update(src, color);\n          }}\n        />\n        <div\n          css={css`\n            margin: 0 0 0 15px;\n          `}\n        >\n          Primary colour\n        </div>\n      </div>\n\n      <div\n        css={css`\n          margin: 20px 0;\n        `}\n      >\n        <EditorBtn\n          label=\"Insert image\"\n          style={{\n            ...{\n              width: `${'175px' || '100%'}`,\n              margin: '0 0 15px 0',\n              border: `1px solid ${lGrey0}`,\n              background: '#fff',\n              color: lGrey0,\n              fontSize: 11,\n\n              hover: {\n                color: '#fff',\n                background: '#28292b',\n              },\n            },\n          }}\n          css={css`\n            min-height: 30px;\n          `}\n          onClick={() => {\n            //\n            const svg = svgDOM.current.querySelector('svg');\n            const bbox = svg.getBBox();\n            const { width, height } = bbox;\n\n            const blob = new Blob(\n              [new XMLSerializer().serializeToString(svg)],\n              { type: 'image/svg+xml;charset=utf-8' }\n            );\n\n            const newLabel = label || 'esvg';\n            const fileName = `${newLabel}.svg`;\n\n            rawUploader(\n              [\n                new File([blob], fileName, {\n                  type: 'image/svg+xml',\n                }),\n              ],\n              $ => {\n                getSVGSize($.url)\n                  .then((size: any) => {\n                    // console.log({ 'svg size': size });\n\n                    onAddImage!({\n                      url: $.url,\n                      id: $.id,\n\n                      width: size.width,\n                      height: size.height,\n                    });\n                  })\n                  .catch(err => {\n                    console.log(err);\n\n                    // some error\n                  });\n\n                // onAddImage!({\n                //   url: $.url,\n                //   id: $.id,\n                // });\n\n                onClose!();\n              }\n            );\n          }}\n        />\n      </div>\n    </_>\n  );\n};\n\nexport default SVGPreview;\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useState,\n  useRef,\n  useEffect,\n  createContext,\n  useContext,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport SVGPreview from './SVGPreview';\nimport ChameleonsImagePreview, { SVG } from './ChameleonsImagePreview';\nimport Search from '../Search';\nimport PrevNextPage from '../PrevNextPage';\nimport variables from '../variables';\nimport { useQuery, Query } from 'urql';\nimport gql from 'graphql-tag';\nimport LoadMore from '../LoadMore';\nimport { ImageLibraryContext } from '../../EditImage';\nimport { svgs as mockSVGs } from 'assets/testing/svgs';\n\nconst { thumbnailsContainerHeight } = variables;\n\nconst ESVGQuery = gql`\n  query eql($tags: String, $page: Int, $per: Int) {\n    esvgs(tags: $tags, page: $page, per: $per) {\n      data {\n        id\n        label\n        url\n        createdAt\n        tags\n      }\n      meta {\n        totalCount\n        totalPages\n        currentPage\n        perPage\n      }\n    }\n  }\n`;\n\nconst ChameleonsLibraryContext = createContext<any>(undefined);\n\nlet URL_PREFIX = window['chameleon'].CHAMELEON_URL;\n//  || 'https://chameleon-development.herokuapp.com/';\nconst LOCAL_DEV_TESTING = window.location.href.match('http://localhost:');\n\nif (LOCAL_DEV_TESTING) {\n  URL_PREFIX = '';\n}\n\nconst cache = {};\n\nlet cacheSelected = 0;\nlet cachedSearch;\nlet svgs;\n\nconst ChameleonsLibrary = () => {\n  const { cacheSelected } = useContext(ImageLibraryContext)!;\n\n  const [selected, setSelected] = useState(cacheSelected!.chameleonsLibrary);\n  const [previewData, setPreviewData] = useState(null);\n\n  const [tags, setTags] = useState(cachedSearch);\n  const [page, setPage] = useState(1);\n  const [per, setPer] = useState(120);\n  // const tags = useRef('');\n\n  const [res, reload] = useQuery({\n    query: ESVGQuery,\n    variables: {\n      // tags: tags.current,\n      tags,\n      page,\n      per,\n    },\n    requestPolicy: 'cache-and-network',\n  });\n\n  let meta: any = {};\n\n  if (res.data) {\n    svgs = res.data.esvgs.data.map((entry: any) => entry);\n    meta = res.data.esvgs.meta;\n  }\n\n  // if (LOCAL_DEV_TESTING) {\n  //   try {\n  //     if (mockSVGs && mockSVGs.length) {\n  //       svgs = mockSVGs.map((entry: any, index: number) => {\n  //         return {\n  //           url: entry,\n  //           label: `SVG_${index}`,\n  //         };\n  //       });\n\n  //       meta = {\n  //         totalCount: mockSVGs.length,\n  //         totalPages: mockSVGs.length / per,\n  //       };\n  //     }\n  //   } catch (err) {\n  //     //\n  //   }\n  // }\n\n  const isMore = meta.totalCount && per < meta.totalCount;\n\n  useEffect(() => {\n    if (svgs && !previewData) {\n      setPreviewData(svgs[cacheSelected!.chameleonsLibrary]);\n    }\n  });\n\n  const onSetSelected = (index, src) => {\n    setSelected((cacheSelected!.chameleonsLibrary = index));\n    setPreviewData(src);\n  };\n\n  return (\n    <ChameleonsLibraryContext.Provider\n      value={{\n        cache,\n        updateCache(src, svgDOM) {\n          return (cache[src] = svgDOM);\n        },\n      }}\n    >\n      <div\n        css={css`\n          position: relative;\n          display: flex;\n          width: 100%;\n          height: 100%;\n        `}\n      >\n        <div\n          css={css`\n            flex: 1;\n            padding: 0 5px 0 0;\n          `}\n        >\n          {previewData && (\n            <SVGPreview\n              // key={tags}\n              src={`${URL_PREFIX}${(previewData as any).url}`}\n              label={(previewData as any).label}\n            />\n          )}\n        </div>\n\n        <div\n          css={css`\n            position: relative;\n            flex: 2;\n            // padding: 10px 20px ${isMore ? 40 : 10}px 20px;\n            padding: 10px 20px 40px 20px;\n            background: #eaefff;\n          `}\n        >\n          <Search\n            defaultValue={cachedSearch}\n            onSearch={value => {\n              setTags((cachedSearch = value));\n              onSetSelected(0, svgs[0]);\n            }}\n          />\n\n          <div\n            css={css`\n              position: relative;\n              height: ${thumbnailsContainerHeight()};\n              overflow-y: auto;\n            `}\n          >\n            <div\n              css={css`\n                position: absolute;\n                left: 0;\n                top: 0;\n                width: 100%;\n                display: grid;\n                grid-template-columns: repeat(auto-fill, minmax(155px, 1fr));\n              `}\n            >\n              {svgs &&\n                svgs\n                  .filter((_, i) => i < per)\n                  .map((entry: any, i) => {\n                    const src = `${URL_PREFIX}${entry.url}`;\n                    const label = entry.label;\n\n                    return (\n                      <ChameleonsImagePreview\n                        key={`thumbnail${i}`}\n                        src={src}\n                        label={label}\n                        selected={selected === i}\n                        onClick={() => onSetSelected(i, entry)}\n                        color=\"#61cece\"\n                      />\n                    );\n                  })}\n            </div>\n          </div>\n\n          <PrevNextPage\n            page={page}\n            totalPages={meta.totalPages}\n            updatePage={dir => {\n              setPage(page => {\n                return (dir === 'prev'\n                  ? page > 1 && page - 1\n                  : page < meta.totalPages && page + 1) as number;\n              });\n            }}\n          />\n        </div>\n      </div>\n    </ChameleonsLibraryContext.Provider>\n  );\n};\n\nexport default ChameleonsLibrary;\nexport { ChameleonsLibraryContext };\n","// Update this index when you add a new flag. it should always be the last number added\n// Current index = 13\n\nexport enum FeatureFlag {\n  CreateImageInteraction = 1,\n  CreateFullPageTextInteraction = 2,\n  CreateMultipleChoiceInteraction = 3,\n  CreateFlipcardInteraction = 4,\n  CreateAccordionInteraction = 5,\n  CreateCarouselInteraction = 6,\n  CreateSortationInteraction = 7,\n  CreateMatchingInteraction = 8,\n  CreateHotspotInteraction = 9,\n  CreateFiveStarRatingInteraction = 10,\n  AddESVGImage = 11,\n  CreateResultsPageInteraction = 12,\n  CreateClickAndRevealInteraction = 13,\n  LandingPage = 16,\n  CreateTopicPortalInteraction = 14,\n  UseMyFeedbackApp = 15,\n}\n\nexport const isFeatureEnabled = (feature: FeatureFlag) => {\n  switch (feature) {\n    case FeatureFlag.CreateImageInteraction:\n      return true;\n    case FeatureFlag.CreateFullPageTextInteraction:\n      return true;\n    case FeatureFlag.CreateMultipleChoiceInteraction:\n      return true;\n    case FeatureFlag.CreateFlipcardInteraction:\n      return true;\n    case FeatureFlag.CreateAccordionInteraction:\n      return true;\n    case FeatureFlag.CreateCarouselInteraction:\n      return true;\n    case FeatureFlag.CreateSortationInteraction:\n      return true;\n    case FeatureFlag.CreateMatchingInteraction:\n      return true;\n    case FeatureFlag.CreateHotspotInteraction:\n      return true;\n    case FeatureFlag.CreateFiveStarRatingInteraction:\n      return true;\n    case FeatureFlag.AddESVGImage:\n      return true;\n    case FeatureFlag.CreateResultsPageInteraction:\n      return true;\n    case FeatureFlag.CreateClickAndRevealInteraction:\n      return true;\n    case FeatureFlag.LandingPage:\n      return true;\n    case FeatureFlag.CreateTopicPortalInteraction:\n      return true;\n    case FeatureFlag.UseMyFeedbackApp:\n      return true;\n  }\n};\n\nenum InteractionType {\n  Image = 1,\n  FullPageText = 2,\n  MultipleChoice = 3,\n  Flipcard = 4,\n  Accordion = 5,\n  Carousel = 6,\n  Sortation = 7,\n  Matching = 8,\n  Hotspot = 9,\n  FiveStarRating = 10,\n  AddESVGImage = 11,\n  ResultsPage = 12,\n  ClickAndReveal = 13,\n  LandingPage = 16,\n  TopicPortal = 14,\n  UseMyFeedbackApp = 15,\n}\n\nconst interactionTypeList = Object.keys(InteractionType)\n  .filter(key => typeof InteractionType[key] === 'number')\n  .map(key => InteractionType[key]);\n\nconst toCreateFlag = (interactionType: InteractionType): FeatureFlag => {\n  switch (interactionType) {\n    case InteractionType.Image:\n      return FeatureFlag.CreateImageInteraction;\n    case InteractionType.FullPageText:\n      return FeatureFlag.CreateFullPageTextInteraction;\n    case InteractionType.MultipleChoice:\n      return FeatureFlag.CreateMultipleChoiceInteraction;\n    case InteractionType.Flipcard:\n      return FeatureFlag.CreateFlipcardInteraction;\n    case InteractionType.Accordion:\n      return FeatureFlag.CreateAccordionInteraction;\n    case InteractionType.Carousel:\n      return FeatureFlag.CreateCarouselInteraction;\n    case InteractionType.Sortation:\n      return FeatureFlag.CreateSortationInteraction;\n    case InteractionType.Matching:\n      return FeatureFlag.CreateMatchingInteraction;\n    case InteractionType.Hotspot:\n      return FeatureFlag.CreateHotspotInteraction;\n    case InteractionType.FiveStarRating:\n      return FeatureFlag.CreateFiveStarRatingInteraction;\n    case InteractionType.ResultsPage:\n      return FeatureFlag.CreateResultsPageInteraction;\n    case InteractionType.ClickAndReveal:\n      return FeatureFlag.CreateClickAndRevealInteraction;\n    case InteractionType.LandingPage:\n      return FeatureFlag.CreateClickAndRevealInteraction;\n    case InteractionType.TopicPortal:\n      return FeatureFlag.CreateTopicPortalInteraction;\n    case InteractionType.UseMyFeedbackApp:\n      return FeatureFlag.UseMyFeedbackApp;\n    default:\n      return -1;\n  }\n};\n\nexport const createableInteractions = interactionTypeList\n  .map(toCreateFlag)\n  .filter(isFeatureEnabled);\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useState,\n  useRef,\n  createContext,\n  useContext,\n  useMemo,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport Select from 'react-select';\nimport { colors } from 'styles/variables';\nimport setBlock from 'services/apiHelpers/setBlockProps';\nimport getMediaParent from 'services/apiHelpers/getMediaParent';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport setBlockProps from 'services/apiHelpers/setBlockProps';\nimport SetMediaType from 'components/Editor/SetMediaType';\nimport ImageLibrary from './ImageLibrary';\nimport EditorBtn from 'components/UI/EditorBtn';\nimport getStore from 'services/getStore';\n// updated UI\nimport { H1 as H1_v2, H2 as H2_v2 } from '../EditorUtilities/UI/Headings';\nimport NumberPicker_v2 from '../EditorUtilities/UI/NumberPicker';\nimport Info from '../EditorUtilities/UI/Info';\nimport {\n  isFeatureEnabled,\n  FeatureFlag,\n} from '../../../services/isFeatureEnabled';\nimport helpers from 'components/lib/EditableText/LinkModal/helpers';\nimport getLocationName from 'services/getLocationName';\nimport { NavigationSettings } from 'components/NavigationSettings/NavigationSettings_v2';\nimport { NavigationSettingsButton } from 'components/NavigationSettings/NavigationSettingsButton';\nimport { NavigationWidget } from 'components/NavigationSettings/NavigationWidget';\nimport CheckBox_v2 from '../EditorUtilities/UI/CheckBox';\nimport ColorPicker_v2 from '../EditorUtilities/UI/ColorPicker';\n\nimport { PreviewInfo } from './ImageLibrary/YourLibrary/YourImagePreviewPanel';\n\ninterface IImageLibraryContext {\n  currentImageSrc: string;\n  currentImageId: string | number;\n  onAddImage?: ({}: any) => void;\n  onClose?: () => void;\n  cacheSelected?: { [key: string]: any };\n  cacheFilter?: { [key: string]: any };\n}\n\nconst ImageLibraryContext = createContext<IImageLibraryContext | undefined>(\n  undefined\n);\n\nconst { lGrey0, lGrey1, mint } = colors;\n\nconst { getState } = getStore();\n\nfunction getImgName(src) {\n  let name: any = src.split(/\\//g);\n  name = name[name.length - 1];\n\n  return name;\n}\nconst Panel = ({ title, info, children, ...props }) => {\n  return (\n    <div\n      css={css`\n        margin: 20px 0 0 0;\n      `}\n      {...props}\n    >\n      <div\n        css={css`\n          margin: 0 0 5px 0;\n        `}\n      >\n        {!info ? <H2_v2>{title}</H2_v2> : <Info info={info}>{title}</Info>}\n      </div>\n      {children}\n    </div>\n  );\n};\n\nconst Input = ({ defaultValue, update }) => {\n  return (\n    <input\n      type=\"text\"\n      defaultValue={defaultValue}\n      css={css`\n        width: 100%;\n        margin: 0 0 10px 0;\n        padding: 10px;\n        border: 1px solid ${lGrey1};\n        outline: none;\n        resize: none;\n        font-family: 'Poppins';\n        font-size: 12px;\n      `}\n      onKeyUp={e => {\n        if (e.key === 'Enter') {\n          e.preventDefault();\n          update(e.currentTarget.value);\n        }\n      }}\n      onBlur={e => {\n        e.preventDefault();\n        update(e.currentTarget.value);\n      }}\n    />\n  );\n};\n\nconst ImageLibraryBtn = ({ imageLibrary, setImageLibrary }) => {\n  return (\n    <EditorBtn\n      label=\"Insert image\"\n      style={{\n        flexShrink: 0,\n        width: `${'175px' || '100%'}`,\n        border: `1px solid ${lGrey0}`,\n        background: '#fff',\n        color: lGrey0,\n        fontSize: 11,\n        hover: {\n          color: '#fff',\n          background: '#28292b',\n        },\n      }}\n      css={css`\n        min-height: 30px;\n      `}\n      onClick={() => {\n        setImageLibrary(!imageLibrary);\n      }}\n    />\n  );\n};\n\nconst currentLink = (() => {\n  let $;\n  return link => {\n    return link || link === null ? ($ = link) : $;\n  };\n})();\n\nconst EditImage = ({ block, type = null }) => {\n  const [imageLibrary, setImageLibrary] = useState(false);\n  const [assetLibrary, setAssetLibrary] = useState(false);\n\n  const description = useRef(null);\n\n  const properties = {\n    src: undefined,\n    imageId: '',\n    size: 0,\n    borderStyle: 'rectangle',\n    fit: 'fill',\n    fixedHeight: false,\n    fixedHeightValue: 350,\n    maxHeight: 50,\n    imgSize: 0,\n    description: '',\n    imageZoom: false,\n    imageZoomBackgroundColor: '#fff',\n    fullHeight: false,\n    defaultHeight: true,\n    imageHeight: undefined,\n    ...block.props,\n  };\n\n  const {\n    id,\n    src,\n    imageId,\n    size,\n    borderStyle,\n    fit,\n    // fixedHeight,\n    // fixedHeightValue,\n    // maxHeight,\n    imgSize,\n    imgContainerHeight = 0,\n    imgMagnification = 100,\n    description: desc,\n    imageZoom,\n    imageZoomIconColor,\n    imageZoomBackgroundColor,\n    // href,\n    // hrefInfo,\n    linkData = {\n      url: '',\n      title: '',\n      target: '',\n    },\n    // fullHeight,\n    // imageHeight,\n    // defaultHeight,\n  } = properties;\n\n  // const [showNavigationModal, setShowNavigationModal] = useState(false);\n  const [modal, showModal] = useState(false);\n  // const [showModuleNavigation, setShowModuleNavigation] = useState(false);\n\n  const { getCurrentLinkAttribute, getValue } = helpers(\n    {},\n    () => {},\n    linkData,\n    value => {\n      console.log(value);\n    }\n  );\n\n  const isTextAndImage = useMemo(() => {\n    const currentInteractionBlock: any = getBlockById(\n      getState().currentInteraction\n    );\n    return currentInteractionBlock?.meta.subType === 'TextAndImage';\n  }, []);\n\n  const moduleFrame = useMemo(() => frames[0], []);\n  let imageContainerHeightPermission;\n\n  if (moduleFrame && moduleFrame?.location?.href?.includes('module.html')) {\n    const section = moduleFrame.document.querySelector('section');\n    //\n    const interactionBlock =\n      section?.id && (getBlockById(section?.id.replace('i', '')) as any);\n\n    const canUpdateContainerHeight = section\n      ?.querySelector(`#chameleon-image-${block.id}`)\n      ?.getAttribute('data-can-update-container-height');\n\n    imageContainerHeightPermission = canUpdateContainerHeight === 'true';\n\n    const modalContainer = moduleFrame?.document.querySelector(\n      `#modal-container`\n    );\n\n    if (modalContainer) {\n      const imgElement = moduleFrame?.document.querySelector(\n        `#img-${block.id}`\n      );\n      if (imgElement && modalContainer.contains(imgElement)) {\n        imageContainerHeightPermission = true;\n      }\n      //\n    }\n  }\n\n  let location = linkData?.url || block.props.location;\n\n  let locationName: string[] | string | undefined = getLocationName(\n    linkData.url\n  );\n\n  if (linkData.target === '_blank') {\n    locationName = linkData.url;\n  }\n\n  if (locationName && Array.isArray(locationName)) {\n    locationName = locationName.join('/');\n  }\n\n  const localModeImageUpload = [\n    'http://localhost:3011/',\n    'http://reviewsite.inspiregroup.co.nz',\n  ].some(entry => window.location.href.match(entry));\n\n  const Option = key => ({ innerRef, innerProps, ...props }) => {\n    const { value, label } = props;\n\n    return (\n      <div\n        ref={innerRef}\n        {...innerProps}\n        css={css`\n          display: flex;\n          align-items: center;\n          height: 35px;\n          padding: 0 10px;\n          font-size: 12px;\n          font-weight: ${properties[key] === value ? 500 : 200};\n          cursor: pointer;\n          pointer-events: ${properties[key] === value ? 'none' : 'auto'};\n          &:hover {\n            background: #deebff;\n          }\n        `}\n        onClick={e => {\n          setBlock(block, { [key]: value });\n        }}\n      >\n        {label}\n      </div>\n    );\n  };\n\n  const borderStyles = {\n    circle: 'Circle',\n    rectangle: 'Rectangle',\n    roundedRectangle: 'Rounded rectangle',\n  };\n\n  const fits = {\n    fill: 'Fill',\n    contain: 'Contain',\n    cover: 'Cover',\n  };\n\n  if (type && type === 'logo') {\n    return (\n      <div\n        css={css`\n          margin: 20px 0;\n        `}\n      >\n        <ImageLibraryBtn\n          imageLibrary={imageLibrary}\n          setImageLibrary={setImageLibrary}\n        />\n        <Panel\n          title=\"Image description\"\n          info=\"Give your image a description for screen readers.\"\n          css={css`\n            font-size: 12px;\n          `}\n        >\n          <Input\n            defaultValue={desc}\n            update={value => {\n              setBlock(block, { description: value });\n            }}\n          />\n        </Panel>\n\n        {imageLibrary && (\n          <ImageLibraryContext.Provider\n            value={{\n              onAddImage(result) {\n                setBlock(block, { src: result.url, imageId: result.id });\n              },\n              onClose() {\n                setImageLibrary(!imageLibrary);\n              },\n              currentImageSrc: src,\n              currentImageId: imageId,\n              cacheSelected: {\n                yourLibrary: null,\n                chameleonsLibrary: 0,\n              },\n              cacheFilter: {\n                value: '',\n              },\n            }}\n          >\n            <ImageLibrary />\n          </ImageLibraryContext.Provider>\n        )}\n      </div>\n    );\n  }\n\n  return (\n    <div>\n      <SetMediaType block={block} mediaParent={getMediaParent(block.id)} />\n\n      <Panel\n        title=\"Image sizing guide\"\n        info={\n          <div\n            css={css({\n              span: {\n                fontWeight: 500,\n              },\n            })}\n          >\n            <div\n              style={{\n                fontWeight: 500,\n                margin: '0 0 10px 0',\n              }}\n            >\n              Max widths for:\n            </div>\n            <div>\n              Single Column <span>- 1100px</span>\n            </div>\n            <div>\n              Two Column <span>- 1100px</span>\n            </div>\n            <div>\n              Full screen Width <span>- 1920px</span>\n            </div>\n            <div>\n              Background Image <span>- 1920px</span>\n            </div>\n            <div\n              style={{\n                margin: '10px 0 0 0',\n              }}\n            >\n              Aim to keep file size below 1.5mb\n            </div>\n          </div>\n        }\n        css={css`\n          font-size: 12px;\n        `}\n      >\n        {!localModeImageUpload ? (\n          <ImageLibraryBtn\n            imageLibrary={imageLibrary}\n            setImageLibrary={setImageLibrary}\n          />\n        ) : (\n          <div\n            style={{\n              width: 'calc(100% - 0px)',\n            }}\n          >\n            <Input\n              defaultValue={desc}\n              update={value => {\n                console.log({ src: value });\n\n                setBlock(block, { src: value || undefined });\n              }}\n            />\n          </div>\n        )}\n\n        {/* <ImgSrcLabel src={src} /> */}\n\n        {src && (\n          <div style={{ margin: '10px 0 0 0' }}>\n            <PreviewInfo property=\"Name\" value={getImgName(src)} />\n            {!!size && <PreviewInfo property=\"Size\" value={size} />}\n          </div>\n        )}\n      </Panel>\n\n      <Panel\n        title=\"Shape\"\n        info=\"Set the border shape of your image.\"\n        css={css`\n          font-size: 12px;\n        `}\n      >\n        <Select\n          key={borderStyle}\n          placeholder={borderStyles[borderStyle] || 'Select'}\n          options={Object.keys(borderStyles).map((e, i) => ({\n            value: e,\n            label: borderStyles[e],\n          }))}\n          components={{ Option: Option('borderStyle') }}\n        />\n      </Panel>\n\n      <Panel\n        title=\"Image fit\"\n        info=\"Set the position of the image within the frame.\"\n        css={css`\n          font-size: 12px;\n        `}\n      >\n        <Select\n          key={fit}\n          placeholder={fits[fit] || 'Select'}\n          options={Object.keys(fits).map((e, i) => ({\n            value: e,\n            label: fits[e],\n          }))}\n          components={{ Option: Option('fit') }}\n        />\n      </Panel>\n\n      {imageContainerHeightPermission && (\n        <_>\n          <Panel\n            title=\"Image container height\"\n            info=\"Increase the size of your image by controlling the height of its container.\"\n            css={css`\n              font-size: 12px;\n            `}\n          >\n            <NumberPicker_v2\n              label=\"Value\"\n              value={imgContainerHeight}\n              min={-1000000}\n              increment={5}\n              onChange={value => {\n                setBlockProps(block, { imgContainerHeight: value });\n              }}\n            />\n          </Panel>\n        </_>\n      )}\n\n      <_>\n        <Panel\n          title=\"Image magnification\"\n          info=\"Display a magnified version of your image within its container. Values can be positive or negative.\"\n          css={css`\n            font-size: 12px;\n          `}\n        >\n          <NumberPicker_v2\n            label=\"Value\"\n            value={imgMagnification}\n            min={0}\n            increment={5}\n            onChange={value => {\n              setBlockProps(block, { imgMagnification: value });\n            }}\n          />\n        </Panel>\n      </_>\n\n      {!(1 === 1) && isTextAndImage && (\n        <_>\n          <Panel\n            title=\"Image size\"\n            info=\"Increase the default size of your image by the selected value.\"\n            css={css`\n              font-size: 12px;\n            `}\n          >\n            <NumberPicker_v2\n              label=\"Value\"\n              value={imgSize}\n              increment={5}\n              onChange={value => {\n                setBlockProps(block, { imgSize: value });\n              }}\n            />\n          </Panel>\n        </_>\n      )}\n\n      <Panel\n        title=\"Image description\"\n        info=\"Give your image a description for screen readers.\"\n        css={css`\n          font-size: 12px;\n        `}\n      >\n        <Input\n          defaultValue={desc}\n          update={value => {\n            setBlock(block, { description: value });\n          }}\n        />\n      </Panel>\n\n      <div>\n        <CheckBox_v2\n          label=\"Include image zoom\"\n          on={imageZoom}\n          onClick={() =>\n            setBlockProps(block, {\n              imageZoom: !imageZoom,\n            })\n          }\n        />\n      </div>\n\n      {imageZoom && (\n        <div\n          css={css`\n            margin-top: 10px;\n          `}\n        >\n          <div\n            style={{\n              margin: '0 0 10px 0',\n            }}\n          >\n            <ColorPicker_v2\n              inColor={imageZoomIconColor}\n              outColor={color =>\n                setBlockProps(block, { imageZoomIconColor: color })\n              }\n              label=\"Icon colour\"\n            />\n          </div>\n\n          <ColorPicker_v2\n            inColor={imageZoomBackgroundColor}\n            outColor={color =>\n              setBlockProps(block, { imageZoomBackgroundColor: color })\n            }\n            label=\"Background colour\"\n          />\n        </div>\n      )}\n\n      {isFeatureEnabled(FeatureFlag.AddESVGImage) && (\n        <_>\n          {imageLibrary && (\n            <ImageLibraryContext.Provider\n              value={{\n                onAddImage(result) {\n                  const { url, id, width, height, size } = result;\n\n                  console.log({ url, id, width, height, size });\n\n                  setBlock(block, {\n                    src: url,\n                    imageId: id,\n                    width,\n                    height,\n                    size,\n                  });\n                },\n                onClose() {\n                  setImageLibrary(!imageLibrary);\n                },\n                currentImageSrc: src,\n                currentImageId: imageId,\n                cacheSelected: {\n                  yourLibrary: null,\n                  chameleonsLibrary: 0,\n                },\n                cacheFilter: {\n                  value: '',\n                },\n              }}\n            >\n              <ImageLibrary />\n            </ImageLibraryContext.Provider>\n          )}\n\n          {isTextAndImage && (\n            <div style={{ margin: '15px 0 0 0', fontSize: 12 }}>\n              <div\n                style={{\n                  margin: '20px 0 10px 0',\n                  fontWeight: 500,\n                }}\n              >\n                <Info info=\"Click Navigation to link your image to a location within the module or an external url.\">\n                  IMAGE NAVIGATION\n                </Info>\n              </div>\n\n              <NavigationWidget\n                showModal={showModal}\n                linkData={linkData}\n                locationName={locationName}\n              />\n            </div>\n          )}\n\n          {modal && (\n            <div>\n              <NavigationSettings\n                linkData={linkData}\n                tab={linkData?.target === '_blank' ? 'external' : 'module'}\n                onClose={() => showModal(false)}\n              >\n                {(localLinkData, updateLocalLinkData, currentTab) => {\n                  let label = 'Save and close';\n\n                  return (\n                    <div>\n                      <div\n                        css={css({\n                          display: 'flex',\n                        })}\n                      >\n                        <NavigationSettingsButton\n                          label=\"Cancel\"\n                          onClick={() => {\n                            showModal(false);\n                          }}\n                        />\n\n                        <NavigationSettingsButton\n                          label={label}\n                          enabled={true}\n                          style={{\n                            background: mint,\n                            color: '#fff',\n                            boxShadow:\n                              '-16px -16px 27px rgba(255, 255, 255, 0.5), 16px 16px 27px rgba(37, 59, 176, 0.14393)',\n                          }}\n                          onClick={() => {\n                            setBlockProps(block, {\n                              linkData: {\n                                ...linkData,\n                                ...localLinkData,\n                                ...(location && {\n                                  location: null,\n                                }),\n                              },\n                            });\n\n                            showModal(false);\n                          }}\n                        />\n                      </div>\n                      <div\n                        css={css({\n                          margin: '15px 0 0 0',\n                          fontSize: 14,\n                          color: '#98add9',\n                          textDecoration: 'underline',\n                          textAlign: 'center',\n                          cursor: 'pointer',\n\n                          ':hover': {\n                            opacity: 0.8,\n                          },\n                        })}\n                        onClick={() => {\n                          setBlockProps(block, {\n                            linkData: {\n                              url: '',\n                              title: '',\n                              target: '',\n                            },\n                          });\n\n                          showModal(false);\n                        }}\n                      >\n                        Remove link\n                      </div>\n                    </div>\n                  );\n                }}\n              </NavigationSettings>\n            </div>\n          )}\n        </_>\n      )}\n    </div>\n  );\n};\n\nexport default EditImage;\nexport { ImageLibraryContext };\n","/** @jsx jsx */\n\nimport React, { Fragment as _, useState, useRef, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport setBlockProps from 'services/apiHelpers/setBlockProps';\nimport { colors } from 'styles/variables';\nimport { findByKeyVal_V2 } from 'services/findByKeyVal';\nimport { addHotSpotOption } from 'factories/interactions/hotspot_isolated';\nimport { setBlocksAction } from 'actions/setBlocksAction';\nimport setBlock from 'services/apiHelpers/setBlockProps';\nimport getStore from 'services/getStore';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport HotspotControlBtn from './HotspotControlBtn';\nimport EditorBtn from 'components/UI/EditorBtn';\nimport { Block } from '@chameleoncreator/creator-app';\nimport Hotspot_Add from 'assets/Hotspot_Add.svg';\nimport Hotspot_Done from 'assets/Hotspot_Done.svg';\nimport imageUploadError from 'assets/imageUploadError_hotSpot.svg';\nimport BigSwitch from 'components/UI/BigSwitch';\nimport { H1 as H1_v2 } from '../EditorUtilities/UI/Headings';\nimport TogglePanel from '../EditorUtilities/UI/TogglePanel';\nimport CheckBox_v2 from '../EditorUtilities/UI/CheckBox';\nimport NumberPicker_v2 from '../EditorUtilities/UI/NumberPicker';\nimport ColorPicker_v2 from '../EditorUtilities/UI/ColorPicker';\nimport Info from '../EditorUtilities/UI/Info';\nimport { ImageLibraryContext } from '../EditImage/EditImage';\nimport ImageLibrary from '../EditImage/ImageLibrary';\nimport pubSub from 'services/pubSub';\nimport setNewBlockNewTree from 'services/apiHelpers/setNewBlockNewTree';\nimport {\n  removeHotSpotOption,\n  getNextHotSpotBlock,\n} from 'factories/interactions/hotspot_isolated';\nimport { getPolygonCenter } from './getPolygonCenter';\nimport { Circle, Rectangle, Freeform, HotSpotTypeRow } from './HotSpotTypes';\nimport { Panel } from '../EditorUtilities/UI/Panel';\nimport { Input } from '../EditorUtilities/UI/Input';\nimport { useScoringQuizzes } from 'services/apiHelpers/useScoringQuizzes';\nimport { SingleColumnElement } from '../EditorUtilities/grid';\nimport Button from '../EditorUtilities/UI/Button';\n// import CorrectAnswersWidget from '../EditAssessmentQuestion/CorrectAnswersWidget';\n// import ModuleNavigationModal from 'components/Editor/ModuleGlobalNavigation/ModuleGlobalNavigationModal';\nimport { NavigationSettings } from 'components/NavigationSettings/NavigationSettings_v2';\nimport { NavigationSettingsButton } from 'components/NavigationSettings/NavigationSettingsButton';\n// import { NavigationWidget } from 'components/NavigationSettings/NavigationWidget';\n// import { moduleNavigationActionsList } from 'components/NavigationSettings/ModuleNavigation';\nimport PlusIcon from 'assets/Plus_Icon.svg';\nimport { isObject } from 'services/isObject';\n\nconst store = getStore();\nconst { lPink, lGrey0, lGrey3, mint } = colors;\n\nconst togglePanelsCache = {};\n\nexport const UPDATE_RECTANGLE_HOTSPOT_LOCAL_STATE =\n  'UPDATE_RECTANGLE_HOTSPOT_LOCAL_STATE';\n\nconst isEmpty = (obj: any[] | { [key: string]: any }): boolean => {\n  return !!!(Array.isArray(obj) ? obj : Object.values(obj)).length;\n};\n\nconst setUpdated = () => {\n  return new Date().toString();\n};\n\nconst EditHotSpot = ({ block }: { block?: any }) => {\n  const {\n    image,\n    src,\n    imageId = undefined,\n    hotspotType,\n    hotSpotColor,\n    hotSpotSize,\n    hotSpotsAnimated = true,\n    hotSpotsVisible = true,\n    rectangleBorderRadius = 0,\n    rectangleDisplayOutlineOnly = false,\n    useMediaInFeedback = true,\n    showSeenState = true,\n    description = undefined,\n  } = block.props;\n\n  const { id: hotspotsBlockId, children } = block;\n\n  const [imageLibrary, setImageLibrary] = useState(false);\n\n  const [modal, showModal] = useState(false);\n\n  const [hotspotNavigationId, setHotspotNavigationId] = useState(undefined);\n\n  // current 'active' hotSpot\n  const currentActiveHotspotWithNav = getBlockById(hotspotNavigationId);\n  //\n  let linkData = {\n    url: '',\n    title: '',\n    target: '',\n  };\n\n  if (currentActiveHotspotWithNav) {\n    const currentActiveHotspotWithNavProps = currentActiveHotspotWithNav.props;\n    //\n    if (currentActiveHotspotWithNavProps) {\n      const navigation = currentActiveHotspotWithNavProps.navigation;\n      // we'll put nav on linkData early if it exists ( means it's a super old build )\n      // overwrite later if we have the updated linkData\n      if (navigation) {\n        linkData.url = navigation;\n      }\n\n      const savedLinkData = currentActiveHotspotWithNavProps.linkData;\n\n      // if we have savedLinkData && it is indeed a plain object that can be destructured\n      // that second check is just being superstitious though at this point\n      if (savedLinkData && isObject(savedLinkData)) {\n        const { url, title, target } = savedLinkData;\n\n        linkData = {\n          url: url || navigation || '',\n          title: title || '',\n          target: target || '_self',\n        };\n      }\n    }\n  }\n\n  // this is our actual interaction ' root '\n  const hotSpotIsolatedParent = (Object.values(\n    getStore().getState().blocks\n  ).filter((b: any) => b.meta && b.meta.subType === 'HotSpot') as any).filter(\n    (c: any) =>\n      findByKeyVal_V2(c.id, 'type', 'HotSpotIsolated')!.id === hotspotsBlockId\n  )[0];\n\n  const hotSpotScorable = findByKeyVal_V2(\n    hotSpotIsolatedParent.id,\n    'type',\n    'HotSpotScorable'\n  ) as any;\n\n  const {\n    lockDown,\n    score,\n    immediateFeedback = true,\n    isGlobalNavigation = false,\n  } = hotSpotIsolatedParent.props;\n\n  // we'll put these specifically on the scorable component if it exists\n  const {\n    correctAnswers = [],\n    numberOfAttempts = 1,\n    showAttemptNumber = true,\n    showCorrectAnswer = true,\n    navigationBehaviour = {\n      correct: false,\n      incorrect: false,\n    },\n  } = hotSpotScorable?.props || {};\n\n  let useMediaInHotSpotScorableFeedback =\n    hotSpotScorable?.props?.useMediaInFeedback;\n  if (useMediaInHotSpotScorableFeedback === undefined) {\n    useMediaInHotSpotScorableFeedback = true;\n  }\n\n  const [currentHotspotId, setCurrentHotspotId] = useState<number | undefined>(\n    undefined\n  );\n\n  const scoringQuizzes = useScoringQuizzes();\n\n  const currentBlock = useRef<Block>(block);\n  currentBlock.current = block;\n\n  const scaleFactors = useRef<{\n    scale: number;\n    inverseScale: number;\n  }>({\n    scale: 1,\n    inverseScale: 1,\n  });\n\n  const { scale, inverseScale } = scaleFactors.current;\n\n  const currentHotspotBlock = useRef<Block | null>(null);\n  currentHotspotBlock.current = currentHotspotId\n    ? getBlockById(currentHotspotId)\n    : null;\n\n  const saveTogglePanelState = (panel, open) => {\n    togglePanelsCache[hotspotsBlockId] = {\n      ...togglePanelsCache[hotspotsBlockId],\n      [panel]: open,\n    };\n\n    setBlockProps(block, { ...block.props });\n  };\n\n  const setHotspotType = shape => {\n    const prevHotspotType = hotspotType;\n\n    const [newBlock, newTree] = getNextHotSpotBlock(block)!;\n\n    const inverseScaled = value => {\n      return value * inverseScale;\n    };\n\n    if (newBlock && newBlock.props) {\n      (newBlock.children as Block[]).forEach(child => {\n        const childBlock: Block = getBlockById(child.id);\n        const points: any[] | any[][] = childBlock?.props?.points;\n\n        let newPoints: any = [];\n\n        if (prevHotspotType === 'circle') {\n          //\n          if (shape === 'polygon') {\n            newPoints = [\n              [points[0], points[1] - inverseScaled(25)],\n              [points[0] + inverseScaled(25), points[1]],\n              [points[0], points[1] + inverseScaled(25)],\n              [points[0] - inverseScaled(25), points[1]],\n            ];\n          }\n\n          if (shape === 'rectangle') {\n            newPoints = {\n              x: points[0] - inverseScaled(30),\n              y: points[1] - inverseScaled(20),\n              w: inverseScaled(60),\n              h: inverseScaled(40),\n            };\n          }\n        }\n\n        if (prevHotspotType === 'rectangle') {\n          //\n          const points_ = { ...points } as any;\n          const center = [points_.x + points_.w / 2, points_.y + points_.h / 2];\n\n          if (shape === 'polygon') {\n            newPoints = [\n              [center[0], center[1] - inverseScaled(25)],\n              [center[0] + inverseScaled(25), center[1]],\n              [center[0], center[1] + inverseScaled(25)],\n              [center[0] - inverseScaled(25), center[1]],\n            ];\n          }\n\n          if (shape === 'circle') {\n            const points_ = { ...points } as any;\n            newPoints = [points_.x + points_.w / 2, points_.y + points_.h / 2];\n          }\n        }\n\n        if (prevHotspotType === 'polygon') {\n          //\n          if (shape === 'circle') {\n            newPoints = getPolygonCenter(points);\n          }\n\n          if (shape === 'rectangle') {\n            const center = getPolygonCenter(points);\n\n            newPoints = {\n              x: center[0] - inverseScaled(30),\n              y: center[1] - inverseScaled(20),\n              w: inverseScaled(60),\n              h: inverseScaled(40),\n            };\n          }\n        }\n\n        if (childBlock.props) {\n          childBlock.props.shape = shape;\n          childBlock.props.points = newPoints;\n          // this was broken : setUpdated;\n          childBlock.props.updated = setUpdated();\n        }\n      });\n\n      newBlock.props.hotspotType = shape;\n    }\n\n    setCurrentHotspotId(undefined);\n    setNewBlockNewTree(newTree, newBlock, store, setBlocksAction);\n  };\n\n  const createNew = e => {\n    const hotSpotId = `#${Math.random()\n      .toString(16)\n      .substr(2, 6)}`;\n\n    const [newBlock, newTree] = addHotSpotOption(block, block.children.length, {\n      shape: hotspotType,\n      name: `Hotspot ${hotSpotId}`,\n      points: hotspotType === 'rectangle' ? {} : [],\n      updated: setUpdated(),\n    });\n\n    if (newBlock === block) {\n      return;\n    }\n\n    const store = getStore();\n\n    setNewBlockNewTree(newTree, newBlock, store, setBlocksAction);\n\n    if (newBlock && newBlock.children) {\n      const lastChild = newBlock.children[newBlock.children.length - 1] as any;\n      setCurrentHotspotId(lastChild?.id);\n    }\n  };\n\n  const remove = (hotSpotBlock, index) => {\n    const [newBlock, newTree] = removeHotSpotOption(hotSpotBlock, index);\n\n    if (newBlock === hotSpotBlock) {\n      return;\n    }\n\n    setNewBlockNewTree(newTree, newBlock, store, setBlocksAction);\n  };\n\n  const showFeedback = (feedbackFor: 'correct' | 'incorrect' | 'attempt') => {\n    pubSub.publish(`SHOW_HOTSPOT_FEEDBACK_${hotSpotIsolatedParent.id}`, {\n      result: feedbackFor,\n    });\n  };\n\n  useEffect(() => {\n    return () => {\n      if (currentHotspotBlock.current) {\n        currentHotspotBlock.current = null;\n      }\n    };\n  }, []);\n\n  useEffect(() => {\n    return () => {\n      // remove any hotspots that have no points\n      const [newBlock, newTree] = getNextHotSpotBlock(currentBlock.current)!;\n\n      const oldBlockHasChildren =\n        currentBlock.current && Array.isArray(currentBlock.current.children);\n      const newBlockHasChildren =\n        newBlock.children && Array.isArray(newBlock.children);\n      if (oldBlockHasChildren && newBlockHasChildren) {\n        newBlock.children = (currentBlock.current.children as Block[]).filter(\n          child => {\n            const hotspot = getBlockById(child.id) as any;\n\n            const { name, points } = hotspot?.props;\n            //\n            return !isEmpty(points);\n          }\n        );\n\n        setNewBlockNewTree(newTree, newBlock, store, setBlocksAction);\n      }\n    };\n  }, []);\n\n  useEffect(() => {\n    const pS = pubSub.subscribe(\n      'UPDATE_HOTSPOT_POINTS',\n      ({ points, updateRectangleHotspotLocalState = undefined }) => {\n        //\n\n        if (!currentHotspotBlock.current) {\n          return;\n        }\n\n        if (hotspotType === 'circle') {\n          setBlockProps(currentHotspotBlock.current, {\n            points,\n            updated: new Date().toString(),\n          });\n        }\n\n        if (hotspotType === 'polygon') {\n          const currentHotspotBlockPoints =\n            currentHotspotBlock.current?.props?.points;\n\n          setBlockProps(currentHotspotBlock.current, {\n            points: [...currentHotspotBlockPoints, points],\n            updated: setUpdated(),\n          });\n        }\n\n        if (hotspotType === 'rectangle') {\n          if (updateRectangleHotspotLocalState) {\n            pubSub.publish(\n              `${UPDATE_RECTANGLE_HOTSPOT_LOCAL_STATE}_hotspot-${currentHotspotBlock.current.id}`,\n              points\n            );\n\n            return;\n          }\n\n          setBlockProps(currentHotspotBlock.current, {\n            points,\n            updated: setUpdated(),\n          });\n        }\n      }\n    );\n\n    return () => {\n      pS();\n    };\n  }, [currentHotspotBlock.current, hotspotType]);\n\n  useEffect(() => {\n    const pS = pubSub.subscribe('UPDATE_HOTSPOT_SCALE_FACTORS', $ => {\n      scaleFactors.current = $;\n      //\n    });\n\n    return () => {\n      pS();\n    };\n  }, [src]);\n\n  useEffect(() => {\n    const pS = pubSub.subscribe(\n      `OPEN_GLOBAL_NAVIGATION_${hotSpotIsolatedParent.id}`,\n      ({ id }) => {\n        setHotspotNavigationId(id);\n        requestAnimationFrame(() => {\n          showModal(true);\n        });\n      }\n    );\n\n    return pS;\n  }, []);\n\n  return (\n    <_>\n      <TogglePanel\n        label={<H1_v2>interaction functions & behaviours</H1_v2>}\n        toggle={\n          togglePanelsCache[hotspotsBlockId]\n            ? togglePanelsCache[hotspotsBlockId]['interaction: settings']\n            : true\n        }\n        onToggle={open => saveTogglePanelState('interaction: settings', open)}\n      >\n        <CheckBox_v2\n          label=\"Lock down\"\n          on={!!lockDown}\n          onClick={() => {\n            setBlockProps(hotSpotIsolatedParent, {\n              lockDown: !!lockDown ? 0 : 1,\n            });\n          }}\n        />\n\n        {hotSpotScorable && !immediateFeedback && (\n          <div\n            style={{\n              ...(scoringQuizzes.length && {\n                opacity: 0.5,\n                pointerEvents: 'none',\n              }),\n            }}\n          >\n            {!!scoringQuizzes.length && (\n              <div\n                style={{\n                  margin: '0 0 5px 0',\n                  fontSize: 12,\n                  fontWeight: 500,\n                  color: 'red',\n                }}\n              >\n                Scoring is disabled for this interaction while an assessment is\n                scoring.\n              </div>\n            )}\n            <CheckBox_v2\n              label=\"Score\"\n              on={!!score}\n              onClick={() =>\n                setBlockProps(hotSpotIsolatedParent, { score: !score })\n              }\n            />\n          </div>\n        )}\n\n        {/* was score */}\n        {!immediateFeedback && (\n          <_>\n            <div\n              style={{\n                display: 'flex',\n                width: '100%',\n                margin: '10px 0 15px 0',\n              }}\n            >\n              <Button\n                enabled={true}\n                onClick={e => {\n                  showFeedback('correct');\n                }}\n                style={{\n                  margin: '0 5px 0 0',\n                }}\n              >\n                Show correct\n              </Button>\n\n              <Button\n                enabled={true}\n                onClick={e => {\n                  showFeedback('incorrect');\n                }}\n                style={{\n                  margin: '0 0 0 5px',\n                }}\n              >\n                Show incorrect\n              </Button>\n            </div>\n            <div\n              css={css({\n                margin: '10px 0 0 0',\n              })}\n            >\n              <NumberPicker_v2\n                label=\"Number of attempts\"\n                min={1}\n                value={numberOfAttempts}\n                onChange={value => {\n                  setBlockProps(hotSpotScorable, { numberOfAttempts: value });\n                }}\n              />\n            </div>\n            {numberOfAttempts > 1 && (\n              <SingleColumnElement>\n                <Button\n                  enabled={true}\n                  onClick={e => {\n                    showFeedback('attempt');\n                  }}\n                >\n                  Show attempt feedback\n                </Button>\n              </SingleColumnElement>\n            )}\n            {numberOfAttempts > 1 && (\n              <CheckBox_v2\n                label=\"Show attempt number\"\n                on={showAttemptNumber ? 1 : 0}\n                onClick={() =>\n                  setBlockProps(hotSpotScorable, {\n                    showAttemptNumber: !showAttemptNumber,\n                  })\n                }\n              />\n            )}\n            <div\n              css={css`\n                margin: 10px 0 0 0;\n              `}\n            >\n              <CheckBox_v2\n                label=\"Include media in feedback\"\n                on={useMediaInHotSpotScorableFeedback ? 1 : 0}\n                onClick={() =>\n                  setBlockProps(hotSpotScorable, {\n                    useMediaInFeedback: !useMediaInHotSpotScorableFeedback,\n                  })\n                }\n              />\n            </div>\n            <div\n              css={css`\n                margin: 10px 0 0 0;\n              `}\n            >\n              <CheckBox_v2\n                label=\"Show correct answer on completion\"\n                on={showCorrectAnswer ? 1 : 0}\n                onClick={() =>\n                  setBlockProps(hotSpotScorable, {\n                    showCorrectAnswer: !showCorrectAnswer,\n                  })\n                }\n              />\n            </div>\n\n            <div\n              style={{\n                margin: '15px 0 15px 0',\n              }}\n            >\n              <Info\n                info=\"Control how you would like the interaction to progress when resolved.\"\n                style={{ margin: '0 0 5px 0' }}\n              >\n                Navigation\n              </Info>\n\n              <div>\n                <CheckBox_v2\n                  label=\"Remain on page when answered correct\"\n                  on={navigationBehaviour.correct ? 1 : 0}\n                  style={{\n                    margin: '0 0 10px 0',\n                  }}\n                  onClick={() =>\n                    setBlockProps(hotSpotScorable, {\n                      navigationBehaviour: {\n                        ...navigationBehaviour,\n                        correct: !navigationBehaviour.correct,\n                      },\n                    })\n                  }\n                />\n\n                <CheckBox_v2\n                  label=\"Remain on page when answered incorrect\"\n                  on={navigationBehaviour.incorrect ? 1 : 0}\n                  style={{\n                    margin: '0 0 10px 0',\n                  }}\n                  onClick={() =>\n                    setBlockProps(hotSpotScorable, {\n                      navigationBehaviour: {\n                        ...navigationBehaviour,\n                        incorrect: !navigationBehaviour.incorrect,\n                      },\n                    })\n                  }\n                />\n              </div>\n            </div>\n          </_>\n        )}\n      </TogglePanel>\n\n      <TogglePanel\n        label={<H1_v2>hotspot styling</H1_v2>}\n        toggle={\n          togglePanelsCache[hotspotsBlockId]\n            ? togglePanelsCache[hotspotsBlockId]['hotspot: styling']\n            : true\n        }\n        onToggle={open => saveTogglePanelState('hotspot: styling', open)}\n        hr={false}\n      >\n        <div\n          css={css`\n            margin: 15px 0 0 0;\n          `}\n        >\n          <EditorBtn\n            label=\"Insert image\"\n            style={{\n              width: `${'175px' || '100%'}`,\n              margin: '0 0 15px 0',\n              border: `1px solid ${lGrey0}`,\n              background: '#fff',\n              color: lGrey0,\n              fontSize: 11,\n\n              hover: {\n                color: '#fff',\n                background: '#28292b',\n              },\n            }}\n            css={css`\n              min-height: 30px;\n            `}\n            onClick={() => {\n              setImageLibrary(!imageLibrary);\n            }}\n          />\n        </div>\n\n        <Panel\n          title=\"Image description\"\n          info=\"Give your image a description for screen readers.\"\n          css={css`\n            font-size: 12px;\n          `}\n        >\n          <Input\n            defaultValue={description}\n            update={value => {\n              setBlock(block, { description: value });\n            }}\n          />\n        </Panel>\n        <div\n          css={css`\n            margin: 10px 0 0 0;\n          `}\n        >\n          <Info\n            info={\n              <_>\n                <div>\n                  Select \"Circle\" to create round hot spots with an optional\n                  pulsing animation.\n                </div>\n                <div>\n                  Select \"Rectangle\" to draw an outline around areas of\n                  interest.\n                </div>\n                <div>\n                  Select \"Freeform\" to draw an outline around areas of interest.\n                </div>\n              </_>\n            }\n          >\n            Type\n          </Info>\n        </div>\n\n        <div\n          css={css({\n            position: 'relative',\n            margin: '0 0 0 -15px',\n          })}\n        >\n          <HotSpotTypeRow\n            selected={hotspotType === 'circle'}\n            label=\"Circle\"\n            onClick={() => {\n              setHotspotType('circle');\n            }}\n          >\n            <Circle\n              color={hotspotType === 'circle' ? hotSpotColor : undefined}\n            />\n          </HotSpotTypeRow>\n\n          <HotSpotTypeRow\n            selected={hotspotType === 'rectangle'}\n            label=\"Rectangle\"\n            onClick={() => {\n              setHotspotType('rectangle');\n            }}\n          >\n            <Rectangle\n              color={hotspotType === 'rectangle' ? hotSpotColor : undefined}\n            />\n          </HotSpotTypeRow>\n\n          <HotSpotTypeRow\n            selected={hotspotType === 'polygon'}\n            label=\"Freeform\"\n            onClick={() => {\n              setHotspotType('polygon');\n            }}\n          >\n            <Freeform\n              color={hotspotType === 'polygon' ? hotSpotColor : undefined}\n            />\n          </HotSpotTypeRow>\n        </div>\n\n        <ColorPicker_v2\n          key=\"hotSpotColor\"\n          inColor={hotSpotColor}\n          outColor={color => setBlockProps(block, { hotSpotColor: color })}\n          label=\"Color\"\n        />\n        {hotspotType === 'circle' && [\n          <NumberPicker_v2\n            key=\"hotSpotSize\"\n            value={hotSpotSize}\n            increment={5}\n            onChange={value => {\n              setBlockProps(block, { hotSpotSize: value });\n            }}\n            label=\"Size\"\n          />,\n          <CheckBox_v2\n            key=\"hotSpotsAnimated\"\n            label=\"Include animation\"\n            on={hotSpotsAnimated}\n            onClick={() => {\n              setBlockProps(block, { hotSpotsAnimated: !hotSpotsAnimated });\n            }}\n          />,\n        ]}\n\n        {hotspotType === 'rectangle' && (\n          <_>\n            <NumberPicker_v2\n              key=\"rectangleBorderRadius\"\n              value={rectangleBorderRadius}\n              increment={1}\n              onChange={value => {\n                setBlockProps(block, { rectangleBorderRadius: value });\n              }}\n              label=\"Border radius\"\n            />\n\n            <CheckBox_v2\n              label=\"Display outline only\"\n              on={rectangleDisplayOutlineOnly}\n              onClick={() => {\n                setBlockProps(block, {\n                  rectangleDisplayOutlineOnly: !rectangleDisplayOutlineOnly,\n                });\n              }}\n              style={{\n                marginTop: 10,\n              }}\n            />\n          </_>\n        )}\n        <CheckBox_v2\n          label=\"Visibilty\"\n          on={hotSpotsVisible}\n          onClick={() => {\n            setBlockProps(block, { hotSpotsVisible: !hotSpotsVisible });\n          }}\n        />\n        {/* !score &&  */}\n        {!isGlobalNavigation && (\n          <div\n            css={css`\n              margin: 10px 0 0 0;\n            `}\n          >\n            <CheckBox_v2\n              label=\"Include media in feedback\"\n              on={useMediaInFeedback ? 1 : 0}\n              onClick={() =>\n                setBlockProps(block, {\n                  useMediaInFeedback: !useMediaInFeedback,\n                })\n              }\n            />\n          </div>\n        )}\n\n        <div\n          css={css`\n            margin: 10px 0 0 0;\n          `}\n        >\n          <CheckBox_v2\n            label={\n              immediateFeedback ? 'Show seen state' : 'Show selected state'\n            }\n            on={!!showSeenState}\n            onClick={() =>\n              setBlockProps(block, { showSeenState: !!showSeenState ? 0 : 1 })\n            }\n          />\n        </div>\n\n        {immediateFeedback && (\n          <div\n            css={css`\n              margin: 15px 0 0 0;\n            `}\n          >\n            <Info\n              info={\n                <_>\n                  <div style={{ margin: '0 0 10px 0' }}>\n                    Choose between having your content display in a modal window\n                    or navigate to another location in your module or an\n                    external resource.\n                  </div>\n                  <div>\n                    Once you've created a hotspot, click on it in the module\n                    view to add/update content or navigation.\n                  </div>\n                </_>\n              }\n              style={{ margin: '0 0 5px 0' }}\n            >\n              Content type\n            </Info>\n\n            <BigSwitch\n              leftItem=\"Modal\"\n              rightItem=\"Navigation\"\n              leftValue=\"modal\"\n              rightValue=\"navigation\"\n              value={isGlobalNavigation ? 'navigation' : 'modal'}\n              callback={value => {\n                setBlockProps(hotSpotIsolatedParent, {\n                  isGlobalNavigation: value === 'navigation' ? true : false,\n                });\n              }}\n            />\n          </div>\n        )}\n\n        {(true || image) && (\n          <div\n            css={css`\n              margin: 15px 0 0 0;\n              // border: 1px solid ${lGrey3};\n              // padding: 5px 0;\n            `}\n          >\n            <div>\n              {children.map((child, i) => {\n                const { id } = child;\n                const hotspot: Block = getBlockById(id);\n                const { name, points, navigation } = hotspot?.props as any;\n\n                const editing = currentHotspotId === id;\n\n                return (\n                  <HotspotControlBtn\n                    key={`HotspotControlBtn_${id}`}\n                    hotSpot={child}\n                    label={name}\n                    type=\"hoverRemove\"\n                    color={lGrey0}\n                    rotation={45}\n                    editing={editing}\n                    immediateFeedback={immediateFeedback}\n                    isGlobalNavigation={isGlobalNavigation}\n                    updateNavigation={() => {\n                      return;\n\n                      setHotspotNavigationId(id);\n                      requestAnimationFrame(() => {\n                        showModal(true);\n                      });\n                    }}\n                    onMouseOver={e => {\n                      pubSub.publish(`ON_HOTSPOT_HOVER`, {\n                        hotspotId: id,\n                        hover: true,\n                      });\n                    }}\n                    onMouseOut={e => {\n                      pubSub.publish(`ON_HOTSPOT_HOVER`, {\n                        hotspotId: id,\n                        hover: false,\n                      });\n                    }}\n                    updateLabel={value => {\n                      setBlockProps(hotspot, {\n                        name: value,\n                        updated: setUpdated(),\n                      });\n                    }}\n                    score={score}\n                    isCorrectAnswer={correctAnswers.includes(i)}\n                    onUpdateCorrectAnswer={() => {\n                      const updatedCorrectAnswers = [...correctAnswers];\n                      if (updatedCorrectAnswers.includes(i)) {\n                        updatedCorrectAnswers.splice(\n                          updatedCorrectAnswers.indexOf(i),\n                          1\n                        );\n                      } else {\n                        updatedCorrectAnswers.push(i);\n                      }\n\n                      setBlockProps(hotSpotScorable, {\n                        correctAnswers: updatedCorrectAnswers.sort(),\n                      });\n                    }}\n                    onReDraw={e => {\n                      if (block.props.hotspotType === 'polygon') {\n                        // clear the points of this polygon\n                        setBlockProps(hotspot, {\n                          points: [],\n                        });\n                      }\n\n                      setCurrentHotspotId(child.id);\n                    }}\n                    onDone={() => {\n                      setCurrentHotspotId(undefined);\n                    }}\n                    onClick={e => {\n                      if (\n                        window.confirm(\n                          'Are you sure? Deleting a hotspot is an undoable operation and the content associated with it will also be removed.'\n                        )\n                      )\n                        remove(block, i);\n                    }}\n                    css={css`\n                      cursor: pointer;\n                      pointer-events: ${currentHotspotId ? 'none' : 'auto'};\n                      padding-right: 12px;\n                      transition: background 0.2s;\n                      background: ${currentHotspotId === id ? mint : ''};\n\n                      ${!editing &&\n                        `&:hover {\n                          background: #eaefff;\n                          _color: ${lPink};\n                        }`}\n                    `}\n                  />\n                );\n              })}\n            </div>\n\n            <div\n              css={css`\n            display: flex;\n              align-items: center;\n             width: calc(100% - 10px);\n             height: 40px;\n             background: url(\"${\n               true || !currentHotspotId\n                 ? PlusIcon || Hotspot_Add\n                 : Hotspot_Done\n             }\") no-repeat;\n              background-size: 25px 25px;\n              background-position: center right;\n              padding: 0 10px;\n\n              font-size: 12px;\n             color: true || ${!currentHotspotId ? lPink : mint};\n\n             cursor: pointer;\n\n             &:hover {\n               opacity: 0.8;\n             }\n\n             ${currentHotspotId &&\n               `\n              opacity: 0.2;\n              pointer-events: none;\n             `}\n           `}\n              onClick={e => {\n                !currentHotspotId\n                  ? createNew(e)\n                  : setCurrentHotspotId(undefined);\n              }}\n            >\n              Add new hotspot\n            </div>\n          </div>\n        )}\n      </TogglePanel>\n\n      {imageLibrary && (\n        <ImageLibraryContext.Provider\n          value={{\n            onAddImage(result) {\n              const url = (result && result.url) || imageUploadError;\n\n              setBlockProps(block, {\n                src: url,\n                imageId: result.id,\n                imgWidth: result.width,\n                imgHeight: result.height,\n              });\n            },\n            onClose() {\n              setImageLibrary(!imageLibrary);\n            },\n            currentImageSrc: src || image,\n            currentImageId: imageId,\n            cacheSelected: {\n              yourLibrary: null,\n              chameleonsLibrary: 0,\n            },\n            cacheFilter: {\n              value: '',\n            },\n          }}\n        >\n          <ImageLibrary />\n        </ImageLibraryContext.Provider>\n      )}\n\n      <_>\n        {modal && (\n          <div>\n            <NavigationSettings\n              id={block.id}\n              // noActions\n              linkData={linkData}\n              tab=\"module\"\n              onClose={() => showModal(false)}\n            >\n              {(localLinkData, updateLocalLinkData, currentTab) => {\n                let label = 'Save and close';\n\n                return (\n                  <_>\n                    <NavigationSettingsButton\n                      label=\"Cancel\"\n                      onClick={() => {\n                        showModal(false);\n                      }}\n                    />\n\n                    <NavigationSettingsButton\n                      label={label}\n                      enabled={true}\n                      style={{\n                        background: mint,\n                        color: '#fff',\n                        boxShadow:\n                          '-16px -16px 27px rgba(255, 255, 255, 0.5), 16px 16px 27px rgba(37, 59, 176, 0.14393)',\n                      }}\n                      onClick={() => {\n                        // double tapping the get of this hotSpot in case we go stale\n                        const currentActiveHotspotWithNav = getBlockById(\n                          hotspotNavigationId\n                        );\n\n                        setBlockProps(currentActiveHotspotWithNav, {\n                          linkData: {\n                            ...linkData,\n                            ...localLinkData,\n                          },\n                        });\n\n                        showModal(false);\n                      }}\n                    />\n                  </_>\n                );\n              }}\n            </NavigationSettings>\n          </div>\n        )}\n      </_>\n    </_>\n  );\n};\n\nexport default EditHotSpot;\n","/** @jsx jsx */\n\nimport { Fragment as _, useState, useRef, useEffect, useContext } from 'react';\nimport { css, jsx, keyframes } from '@emotion/core';\nimport pubSub from 'services/pubSub';\nimport { UPDATE_RECTANGLE_HOTSPOT_LOCAL_STATE } from 'components/Editor/EditHotSpotIsolated/EditHotSpotIsolated_v2';\nimport { HotSpotTickedWhenSeen } from './HotSpotTickedWhenSeen';\nimport hexToRGB from 'services/hexToRGB';\n\nconst Rectangle = props => {\n  const {\n    id,\n    name,\n    currentHotspotId,\n    root,\n    inverseScale,\n    hasBeenSeen,\n    showSeenState,\n    hotSpotFocus,\n    color,\n    points,\n    immediateFeedback = true,\n    isCorrect = false,\n    enabled = true,\n    showChecked,\n    onClick,\n    rectangleBorderRadius = 0,\n    rectangleDisplayOutlineOnly,\n    hotSpotsVisible,\n    submitState,\n    correctAnswers,\n  } = props;\n\n  const [hover, setHover] = useState(false);\n\n  // const selected = id === `hotspot-${currentHotspotId}`;\n  const selected = !immediateFeedback ? props?.selected : null;\n\n  const [rectState, setRectState] = useState<{\n    x: number;\n    y: number;\n    w: number;\n    h: number;\n  }>({\n    x: 0,\n    y: 0,\n    w: 0,\n    h: 0,\n    ...points,\n  });\n\n  const drawing = useRef<boolean>(false);\n  const startXY = useRef<{ startX: number; startY: number }>({\n    startX: 0,\n    startY: 0,\n  });\n\n  const { r, g, b } = hexToRGB(color);\n\n  const getParsedColor = opacity => {\n    return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n  };\n\n  useEffect(() => {\n    //\n    const pS = pubSub.subscribe(\n      `${UPDATE_RECTANGLE_HOTSPOT_LOCAL_STATE}_${id}`,\n      points => {\n        setRectState(points);\n      }\n    );\n\n    return () => {\n      pS();\n    };\n  }, []);\n\n  const visibility = window.dev() ? true : hotSpotsVisible;\n\n  const tickPosition = {\n    x: rectState.x + rectState.w - 2.5,\n    y: rectState.y + 2.5,\n  };\n\n  return (\n    <svg>\n      <rect\n        key={`rect${0}`}\n        id={id}\n        rx={rectangleBorderRadius}\n        x={rectState.x}\n        y={rectState.y}\n        width={rectState.w}\n        height={rectState.h}\n        style={{\n          fill: visibility\n            ? getParsedColor(rectangleDisplayOutlineOnly ? 1 : 0.4)\n            : 'transparent',\n          ...(rectangleDisplayOutlineOnly && {\n            fill: 'transparent',\n            stroke: color,\n            strokeWidth: 3 * inverseScale,\n          }),\n\n          ...(!immediateFeedback &&\n            showChecked && {\n              fill: 'transparent',\n              stroke: color,\n              strokeWidth: 3 * inverseScale,\n            }),\n\n          cursor: 'pointer',\n          opacity: hover ? 0.5 : 1,\n\n          ...(`hotspot-${hotSpotFocus}` === id && {\n            fill: 'transparent',\n            stroke: color,\n            strokeWidth: 3 * inverseScale,\n          }),\n\n          ...(!window.dev() && {\n            transition: 'all 0.2s',\n          }),\n\n          pointerEvents: !immediateFeedback\n            ? enabled\n              ? 'auto'\n              : 'none'\n            : 'auto',\n\n          // we'll stamp this in here as an ' override '\n          // so as not to futz with the logic above that works\n          // if we're a quiz. and selected. kill pointer\n          ...(!immediateFeedback &&\n            correctAnswers?.length === 1 &&\n            selected && {\n              pointerEvents: 'none',\n            }),\n        }}\n        onMouseOver={() => setHover(true)}\n        onMouseOut={() => setHover(false)}\n        onClick={e => {\n          e.stopPropagation();\n          e.preventDefault();\n          onClick();\n        }}\n      />\n\n      {immediateFeedback && showChecked && (\n        <HotSpotTickedWhenSeen\n          x={tickPosition.x}\n          y={tickPosition.y}\n          size={75 * inverseScale}\n          color={color}\n          inverseScale={inverseScale}\n          displayAsRadio={submitState && submitState !== 'resolved'}\n        />\n      )}\n    </svg>\n  );\n};\n\nexport default Rectangle;\n","/** @jsx jsx */\n\nimport {\n  Fragment as _,\n  useState,\n  createContext,\n  useContext,\n  useRef,\n  useEffect,\n  cloneElement,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext } from './interactionContext';\nimport pubSub from 'services/pubSub';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useScoringQuizzes } from 'services/apiHelpers/useScoringQuizzes';\nimport { addScormResponseAction } from 'actions/addScormResponseAction';\nimport { updateScoreAction } from 'actions/updateScoreAction';\n\ninterface IHotSpotScorableContext {\n  selected: any[];\n  updateSelected: (item: any) => number[] | void;\n  attempt: number;\n  numberOfAttempts: number;\n  updateAttempt: () => void;\n  useMediaInFeedback: boolean;\n  showCorrectAnswer: boolean;\n  submitState: 'initial' | 'pending' | 'resolved';\n  correctAnswers: number[];\n}\n\nconst HotSpotScorableContext = createContext({});\n\nenum SubmitState {\n  INITIAL = 'initial',\n  PENDING = 'pending',\n  RESOLVED = 'resolved',\n}\n\nconst HotSpotScorable = props => {\n  const { children } = props;\n\n  const [hotspot, feedbacks] = children;\n  const [\n    correctFeedback,\n    incorrectFeedback,\n    attemptFeedback,\n    submitBtn,\n  ] = feedbacks.props.children;\n\n  const hotspots = hotspot.props.children;\n  const InteractionContext = useContext(interactionContext);\n  const { id: InteractionContextId } = InteractionContext;\n\n  // need to base this scorable on the immediateFeedback bool\n  // only place score becomes relevant is on submission. the action obj\n  const {\n    lockDown,\n    immediateFeedback = true,\n    score,\n  } = InteractionContext?.props;\n\n  const {\n    correctAnswers = [],\n    showAttemptNumber = true,\n    useMediaInFeedback = true,\n    numberOfAttempts = 1,\n    showCorrectAnswer = true,\n    navigationBehaviour = {\n      correct: false,\n      incorrect: false,\n    },\n  } = props;\n\n  const [result, setResult] = useState<string | null>(null);\n  const [selected, setSelected] = useState<any[]>([]);\n  const [attempt, setAttempt] = useState<number>(0);\n  const [feedback, setFeedback] = useState<string | null>(null);\n  const [submitState, setSubmitState] = useState<SubmitState>(\n    SubmitState.INITIAL\n  );\n\n  const scoringQuizzes = useScoringQuizzes();\n  const dispatch = useDispatch();\n\n  const updateSelected = (item): number[] => {\n    if (correctAnswers.length === 1) {\n      setSelected([item]);\n      return [item];\n    }\n\n    const updatedSelected = [...selected];\n\n    if (updatedSelected.includes(item)) {\n      updatedSelected.splice(updatedSelected.indexOf(item), 1);\n    } else {\n      updatedSelected.push(item);\n    }\n\n    setSelected(updatedSelected);\n\n    return updatedSelected;\n  };\n\n  const updateAttempt = () => {\n    setAttempt(attempt => {\n      return (attempt += 1);\n    });\n\n    if (attempt === numberOfAttempts - 1) {\n      setSubmitState(SubmitState.RESOLVED); // 'resolved'\n      setResult('incorrect');\n      setFeedback('incorrect');\n      return;\n    }\n\n    setResult('attempt');\n    setFeedback('attempt');\n  };\n\n  const onSubmit = () => {\n    if (selected.sort().join('') === correctAnswers.sort().join('')) {\n      setSubmitState(SubmitState.RESOLVED); // 'resolved'\n      setResult('correct');\n      //\n      setFeedback('correct');\n      return;\n    }\n\n    updateAttempt();\n  };\n\n  useEffect(() => {\n    //\n\n    const InteractionContextId = InteractionContext.id;\n    const isCorrect = result === 'correct';\n\n    let questionText: HTMLDivElement | string = document.querySelector(\n      `#i${InteractionContextId} .chameleon-text`\n    ) as HTMLDivElement;\n\n    if (questionText) {\n      questionText = questionText.innerText;\n    }\n\n    if (isCorrect || attempt >= numberOfAttempts) {\n      // score &&\n      const responseExpanded = selected\n        .map(entry => {\n          return hotspots[entry].props.name;\n        })\n        .join(',');\n\n      const correctExpanded = correctAnswers\n        .map(entry => {\n          return hotspots[entry].props.name;\n        })\n        .join(',');\n\n      const action = {\n        id: InteractionContextId,\n        type: 'fill-in',\n        question: questionText,\n        reportable: 'multichoice' as 'multichoice',\n        response: responseExpanded,\n        correct: correctExpanded,\n        result: (isCorrect ? 1 : 0) as 0 | 1,\n      };\n\n      // dispatch if there's no scoringQuizzes etc\n      let shouldDispatchScore = score;\n\n      if (scoringQuizzes.length) {\n        shouldDispatchScore = false;\n      }\n\n      if (shouldDispatchScore) {\n        dispatch(updateScoreAction(InteractionContextId, isCorrect ? 1 : 0));\n      }\n\n      dispatch(addScormResponseAction(action));\n    }\n  }, [feedback]);\n\n  useEffect(() => {\n    const pS = pubSub.subscribe(\n      `SHOW_HOTSPOT_FEEDBACK_${InteractionContext.id}`,\n      $ => {\n        setResult($.result);\n        setFeedback($.result);\n      }\n    );\n\n    return pS;\n  }, []);\n\n  useEffect(() => {\n    if (submitState === SubmitState.RESOLVED) {\n      // 'resolved'\n      unlockInteraction(InteractionContextId);\n    }\n  }, [submitState]);\n\n  const value: IHotSpotScorableContext = {\n    selected,\n    updateSelected,\n    attempt,\n    numberOfAttempts,\n    updateAttempt,\n    useMediaInFeedback,\n    submitState,\n    showCorrectAnswer,\n    correctAnswers,\n  };\n\n  if (immediateFeedback) {\n    return hotspot;\n  }\n\n  return (\n    <HotSpotScorableContext.Provider value={value}>\n      {hotspot}\n\n      {feedback &&\n        cloneElement(feedbacks, {\n          result: result,\n          attempt,\n          navigationBehaviour,\n          showAttemptNumber,\n          numberOfAttempts,\n          useMediaInFeedback,\n          onOpened: () => {},\n\n          onClose: () => {\n            setResult(null);\n            setFeedback(null);\n          },\n        })}\n\n      <div\n        css={css({\n          display: 'flex',\n          justifyContent: 'center',\n          margin: '20px 0 0 0',\n          opacity: selected.length ? 1 : 0,\n          ...(window.dev() && {\n            opacity: 1,\n          }),\n          ...(!window.dev() &&\n            submitState === 'resolved' && {\n              opacity: 0.2,\n              pointerEvents: 'none',\n            }),\n\n          transition: 'opacity 0.2s',\n        })}\n      >\n        {cloneElement(submitBtn, {\n          onClick: onSubmit,\n        })}\n      </div>\n    </HotSpotScorableContext.Provider>\n  );\n};\n\nexport default HotSpotScorable;\nexport { HotSpotScorableContext, IHotSpotScorableContext };\n","export const onMouseDown = ({\n  hotspotType,\n  drawing,\n  startXY,\n  root,\n  inverseScale,\n  rectState,\n  pubSub,\n}) => {\n  return e => {\n    if (hotspotType !== 'rectangle') {\n      return;\n    }\n\n    drawing.current = true;\n    startXY.current = {\n      startX:\n        (e.clientX - root.current!.getBoundingClientRect().left) * inverseScale,\n      startY:\n        (e.clientY - root.current!.getBoundingClientRect().top) * inverseScale,\n    };\n\n    rectState.current = {\n      x: 0,\n      y: 0,\n      w: 0,\n      h: 0,\n    };\n\n    pubSub.publish('UPDATE_HOTSPOT_POINTS', rectState.current);\n  };\n};\n","export const onMouseMove = ({\n  hotspotType,\n  drawing,\n  startXY,\n  root,\n  inverseScale,\n  rectState,\n  pubSub,\n}) => {\n  return e => {\n    if (!drawing.current) {\n      return;\n    }\n\n    const { startX, startY } = startXY.current;\n\n    const clientX =\n      (e.clientX - root.current!.getBoundingClientRect().left) * inverseScale;\n    const clientY =\n      (e.clientY - root.current!.getBoundingClientRect().top) * inverseScale;\n\n    const negX = clientX < startX;\n    const negY = clientY < startY;\n\n    const x = negX ? Math.abs(clientX) : startX;\n    const y = negY ? Math.abs(clientY) : startY;\n    const w = Math.abs(clientX - startX);\n    const h = Math.abs(clientY - startY);\n\n    rectState.current = {\n      x,\n      y,\n      w,\n      h,\n    };\n\n    pubSub.publish('UPDATE_HOTSPOT_POINTS', {\n      points: rectState.current,\n      updateRectangleHotspotLocalState: true,\n    });\n  };\n};\n","export const onMouseUp = ({\n  hotspotType,\n  drawing,\n  startXY,\n  root,\n  inverseScale,\n  rectState,\n  pubSub,\n}) => {\n  return e => {\n    if (hotspotType !== 'rectangle') {\n      return;\n    }\n\n    drawing.current = false;\n\n    pubSub.publish('UPDATE_HOTSPOT_POINTS', {\n      points: rectState.current,\n      updateRectangleHotspotLocalState: false,\n    });\n  };\n};\n","export const onClick = ({\n  hotspotType,\n  drawing,\n  startXY,\n  root,\n  inverseScale,\n  rectState,\n  pubSub,\n}) => {\n  return e => {\n    if (hotspotType === 'rectangle') {\n      return;\n    }\n\n    e.persist();\n\n    pubSub.publish('UPDATE_HOTSPOT_POINTS', {\n      points: [\n        (e.clientX - root.current!.getBoundingClientRect().left) * inverseScale,\n        (e.clientY - root.current!.getBoundingClientRect().top) * inverseScale,\n      ],\n    });\n  };\n};\n","/** @jsx jsx */\n\nimport {\n  Fragment as _,\n  useState,\n  useContext,\n  useRef,\n  useMemo,\n  useEffect,\n  useLayoutEffect,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext } from './interactionContext';\nimport { InteractionContext as ContainerContext } from '../../Layouts/ContainerLogical';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport isIE from 'services/isIE';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport getStore from 'services/getStore';\nimport EditWrapper from './EditWrapper';\nimport { useSelector } from 'react-redux';\nimport HotspotSVGError from 'assets/HotspotSVGError.svg';\nimport hexToRGB from 'services/hexToRGB';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport Feedback from './Feedback';\nimport VisibleHotSpot from './VisibleHotSpot';\nimport { Polygon } from './Polygon';\nimport Rectangle from './Rectangle';\nimport LoadingSpinner from 'components/UI/LoadingSpinner';\nimport pubSub from 'services/pubSub';\nimport setNewBlockNewTree from 'services/apiHelpers/setNewBlockNewTree';\nimport { getNextHotSpotBlock } from 'factories/interactions/hotspot_isolated';\nimport { setBlocksAction } from 'actions/setBlocksAction';\nimport { getSVGSize } from 'services/getSVGSize';\nimport { useHotSpotTransformOldToNew } from './useHotSpotTransformOldToNew';\nimport { colors } from 'styles/variables';\nimport {\n  HotSpotScorableContext as _HotSpotScorableContext,\n  IHotSpotScorableContext,\n} from './HotSpotScorable';\nimport { getMouseEvents } from './getMouseEvents';\n//\nimport hotspotDefaultIMG_ from 'assets/Widest Image.png';\nimport hotSpotLandingPageDefaultIMG_ from 'assets/hotspotLandingPageImg.png';\nimport hotspotQuizImg_ from 'assets/hotspotQuizImg.png';\nimport { lastCharInStringIsPeriod } from 'services/lastCharInStringIsPeriod';\nimport { ModuleContext } from 'components/Module/Module_v2';\nimport { State } from 'store/store';\nimport setBlockProps from 'services/apiHelpers/setBlockProps';\n\n// circleci: 0\n\nexport const OPEN_GLOBAL_NAVIGATION_ = 'OPEN_GLOBAL_NAVIGATION_';\n\nconst store = getStore();\nconst { lPink } = colors;\n\nconst HotSpot = ({ children, ...props }) => {\n  const context: any = useContext(interactionContext);\n\n  const containerContext = useContext(ContainerContext);\n\n  let {\n    id,\n    image,\n    src,\n    // imgWidth = 2000 || 960,\n    // imgHeight = 685 || 465,\n    hotspotType = 'circle',\n    hotSpotColor,\n    hotSpotSize,\n    hotSpots,\n    hotSpotsAnimated = true,\n    hotSpotsVisible = true,\n    useMediaInFeedback = true,\n    showSeenState = true,\n    rectangleBorderRadius = 0,\n    rectangleDisplayOutlineOnly = false,\n    description = '',\n  } = props;\n\n  const moduleContext = useContext(ModuleContext);\n  const { exit, setComplete, setCompleteAndExit, resetModule } = moduleContext;\n\n  const {\n    immediateFeedback = true,\n    score = false,\n    isGlobalNavigation = false,\n    sId,\n    fullWidth,\n  } = context?.props;\n\n  const imgWidth = fullWidth ? 2084 : 960;\n  const imgHeight = fullWidth ? 709 : 465;\n\n  if (!image) {\n    image = hotspotDefaultIMG_;\n\n    if (!immediateFeedback) {\n      image = hotspotQuizImg_;\n    }\n\n    if (isGlobalNavigation) {\n      image = hotSpotLandingPageDefaultIMG_;\n    }\n  }\n\n  if (src) {\n    image = src;\n  }\n\n  const HotSpotScorableContext: any = useContext(_HotSpotScorableContext);\n\n  const {\n    updateAttempt,\n    correctAnswers = [],\n    selected = [],\n    updateSelected,\n    submitState,\n    showCorrectAnswer,\n  } = HotSpotScorableContext;\n\n  const isFocused = getStore().getState().focusedNodeId === id;\n  const [imgSize, setImgSize] = useState([imgWidth, imgHeight]);\n  const [imgLoading, setImgLoading] = useState(0);\n  const [creating, setCreating] = useState(false);\n  const [hotSpotFocus, setHotSpotFocus] = useState<string | undefined>(\n    undefined\n  );\n\n  const [SVGHasNoDimensionsError, setSVGHasNoDimensionsError] = useState<\n    boolean\n  >(false);\n\n  const [showFeedback, setShowFeedback] = useState<string | null>(null);\n\n  const [{ scale, inverseScale }, setScale] = useState({\n    scale: 1 || 0.3,\n    inverseScale: 1 || 1 * (1 / 0.3),\n  });\n\n  const [currentHotspotId, setCurrentHotspotId] = useState<string | undefined>(\n    undefined\n  );\n\n  const landingPageSeenState = useSelector((state: State) => {\n    return state?.landingPagesSeenState?.[sId || context.id] || [];\n  });\n\n  const updateHotspotSeen = (id: number, clear?: boolean) => {\n    if (!immediateFeedback) {\n      return;\n    }\n\n    store.dispatch({\n      type: 'UPDATE_LANDING_PAGE_SEEN_STATE',\n      data: {\n        parentId: sId || context.id,\n        childIndex: children.findIndex(child => {\n          return child?.props?.id === id;\n        }),\n        clear,\n      },\n    });\n  };\n\n  const container = useRef<HTMLDivElement>(null);\n  const root = useRef<HTMLDivElement>(null);\n  const mounted = useRef(true);\n  const currentHotspot = useRef<string | null>(null);\n  const hasPointsOnProps = useRef<boolean | undefined>(undefined);\n\n  const drawing = useRef<boolean>(false);\n  const startXY = useRef<{ startX: number; startY: number }>({\n    startX: 0,\n    startY: 0,\n  });\n  const rectState = useRef<any>({});\n\n  let { isOpen } = context;\n\n  const interactionsLocked = useSelector(\n    (state: any) => state.interactionsLocked\n  );\n\n  const interactionsOpen: any = useSelector(\n    (state: any) => state.interactionsOpen\n  );\n\n  if (interactionsOpen.includes(context.id)) {\n    isOpen = true;\n  }\n\n  const { r, g, b } = hexToRGB(hotSpotColor);\n\n  const getParsedColor = opacity => {\n    return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n  };\n\n  //\n\n  const names: string[] = [];\n  const points: (number[] | number)[] = children.map((child, index) => {\n    const { name, points, updated } = child?.props;\n\n    names.push(name);\n\n    // if there's no hotpsots it's because they were removed explicitly by code\n    // in the last update cycle\n    // WE DO NOT WANT TO DO THAT GOING FORWARD !!!\n    // we set an updated prop to some value explicitly when that point has been\n    // updated in the editor. we can preference it then for use\n    // otherwise. we use what's on the hotSpots\n\n    //\n\n    // can't use hotSpots[name] since there's potentially dupes\n    return !hotSpots || updated ? points : Object.values(hotSpots)[index];\n  });\n\n  const hotSpotFocusRef = useRef<string | undefined>(undefined);\n  const rectangleCoords = useRef<any>({});\n\n  useHotSpotTransformOldToNew({\n    id,\n    hotSpots,\n    children,\n    getNextHotSpotBlock,\n    getBlockById,\n    setNewBlockNewTree,\n    store,\n    setBlocksAction,\n  });\n\n  useEffect(() => {\n    mounted.current = true;\n    return () => {\n      mounted.current = false;\n    };\n  }, []);\n\n  useEffect(() => {\n    // if already unlocked. bail\n    if (!interactionsLocked.includes(context.id)) {\n      return;\n    }\n\n    if (landingPageSeenState.length === children.length) {\n      unlockInteraction(context.id);\n    }\n  }, [landingPageSeenState.length]);\n\n  useEffect(() => {\n    const pS = pubSub.subscribe(`CURRENT_HOTSPOT_ID_${id}`, $ => {\n      const { hotspotsBlockId, currentHotspotId } = $;\n\n      setCurrentHotspotId(currentHotspotId);\n    });\n\n    return () => {\n      pS();\n    };\n  });\n\n  useEffect(() => {\n    const pS = pubSub.subscribe(`ON_HOTSPOT_HOVER`, ({ hotspotId, hover }) => {\n      const hotSpotRoot = document.querySelector(`#hotspots-${id}`);\n\n      if (!hotSpotRoot) return;\n\n      const markers = Array.from(\n        hotSpotRoot.querySelectorAll(\n          hotspotType === 'rectangle' ? 'rect' : hotspotType\n        )\n      );\n\n      if (!markers.length) {\n        return;\n      }\n\n      markers.forEach(\n        (marker: any) => (marker.style.fill = getParsedColor(0.5))\n      );\n\n      if (!hover) return;\n\n      const marker: any = markers.find(\n        (marker: any) => marker.id === `hotspot-${hotspotId}`\n      );\n\n      if (marker) {\n        marker.style.fill = getParsedColor(0.8); // 'rgba(255, 0, 99, 0.8)'\n      }\n    });\n\n    return () => {\n      pS();\n    };\n  }, [hotspotType, hotSpotColor]);\n\n  useLayoutEffect(() => {\n    const onResize = () => {\n      if (container.current) {\n        const { width, height } = container.current.getBoundingClientRect();\n        if (imgSize[0]) {\n          let $ = width / imgSize[0];\n\n          if (imgSize[0] <= width) {\n            $ = 1;\n          }\n\n          if (mounted.current) {\n            setScale({\n              scale: $,\n              inverseScale: 1 * (1 / $),\n            });\n            //\n            requestAnimationFrame(() => {\n              pubSub.publish('UPDATE_HOTSPOT_SCALE_FACTORS', {\n                scale: $,\n                inverseScale: 1 * (1 / $),\n              });\n            });\n          }\n        }\n      }\n    };\n\n    onResize();\n    window.addEventListener('resize', onResize);\n\n    return () => {\n      window.removeEventListener('resize', onResize);\n    };\n  }, [isOpen, imgSize]);\n\n  useEffect(() => {\n    setImgLoading(1);\n    setSVGHasNoDimensionsError(false);\n\n    //\n\n    let svgImgWidth = imgWidth;\n    let svgImgHeight = imgHeight;\n\n    if (/\\.(svg)$/i.test(image)) {\n      getSVGSize(image)\n        .then((size: any) => {\n          svgImgWidth = size.width;\n          svgImgHeight = size.height;\n        })\n        .catch(err => {\n          if (window.dev()) {\n            alert(\n              `This svg image does not have a value for width and/or height. It will default to ${svgImgWidth}*${svgImgHeight}`\n            );\n          }\n        })\n        .finally(() => {\n          setImgLoading(2);\n          setImgSize([svgImgWidth, svgImgHeight]);\n        });\n    } else {\n      const img = new Image();\n      img.src = image;\n\n      if (window.dev()) {\n        img.onerror = e => {\n          // if an error occurs loading the current src\n          // let's clear it out and prompt a retry;\n\n          setBlockProps(getBlockById(id), {\n            src: '',\n          });\n\n          alert(\n            'There was an error while attempting to load your image. Please try again.'\n          );\n        };\n      }\n\n      img.onload = e => {\n        setImgLoading(2);\n        setImgSize([img.width, img.height]);\n      };\n    }\n  }, [isOpen, image, fullWidth]);\n\n  let feedback = children.filter(child => {\n    const { id, name } = child?.props as any;\n    return [id, name].includes(showFeedback);\n  });\n\n  feedback = feedback[0]?.props.children;\n\n  const showChecked = (index, id) => {\n    if (immediateFeedback || submitState !== 'resolved' || !showCorrectAnswer) {\n      return (\n        showSeenState &&\n        (landingPageSeenState.includes(index) || selected.includes(index))\n      );\n    }\n\n    if (showCorrectAnswer !== undefined) {\n      return submitState === 'resolved'\n        ? correctAnswers.includes(index)\n        : undefined;\n    }\n  };\n\n  const { onMouseDown, onMouseMove, onMouseUp, onClick } = useMemo(() => {\n    return getMouseEvents({\n      hotspotType,\n      drawing,\n      startXY,\n      root,\n      inverseScale,\n      rectState,\n      pubSub,\n    });\n  }, [hotspotType, inverseScale]);\n\n  // gotta fix my deps\n\n  const getShapeProps = ({ id, index }) => {\n    let hasBeenSeen;\n\n    if (!immediateFeedback) {\n      hasBeenSeen = selected.includes(index);\n    } else {\n      hasBeenSeen = landingPageSeenState.includes(index);\n    }\n    //\n\n    return {\n      id: `hotspot-${id}`,\n      color: getParsedColor(0.8),\n      hotSpotsAnimated: submitState === 'resolved' ? false : hotSpotsAnimated,\n      hotSpotsVisible,\n      size: hotSpotSize * inverseScale,\n      inverseScale,\n      creating,\n      hasBeenSeen,\n      showSeenState,\n      showCorrectAnswer:\n        submitState === 'resolved' && showCorrectAnswer\n          ? correctAnswers.includes(index)\n          : undefined,\n      submitState,\n      showChecked: showChecked(index, id),\n      hotSpotFocus,\n      immediateFeedback,\n\n      isCorrect: correctAnswers.includes(index),\n      selected: selected.includes(index),\n      correctAnswers,\n      enabled: !immediateFeedback && !selected.includes(id),\n      onClick(e) {\n        if (isGlobalNavigation) {\n          if (window.dev()) {\n            pubSub.publish(`OPEN_GLOBAL_NAVIGATION_${context.id}`, {\n              id,\n            });\n\n            return;\n          }\n\n          const { linkData } = children[index]?.props;\n\n          if (linkData?.url) {\n            const { url, target } = linkData;\n\n            requestAnimationFrame(() => {\n              updateHotspotSeen(id);\n            });\n\n            switch (url) {\n              case 'next': {\n                containerContext.next(url);\n                return;\n              }\n              case 'exit': {\n                exit();\n                return;\n              }\n              case 'setComplete': {\n                setComplete();\n                return;\n              }\n              case 'setCompleteAndExit': {\n                setCompleteAndExit();\n                return;\n              }\n              case 'resetModule': {\n                resetModule();\n                return;\n              }\n            }\n\n            //\n\n            if (target === '_self') {\n              window.location.hash = url;\n              return;\n            }\n\n            window.open(url, target);\n          }\n\n          return;\n        }\n\n        if (!immediateFeedback) {\n          // we're quizzin' it\n          if (window.dev()) {\n            return;\n          } else {\n            updateSelected(index);\n            //\n            return;\n          }\n        }\n\n        setShowFeedback(hotSpots ? names[index] : id);\n\n        requestAnimationFrame(() => {\n          updateHotspotSeen(id);\n        });\n      },\n    };\n  };\n\n  return !!imgSize.length ? (\n    <div\n      ref={container}\n      css={css`\n        position: relative;\n        display: flex;\n        justify-content: center;\n        min-height: ${imgSize[1] * scale}px;\n\n        ${isIE() &&\n          `\n          width: 100%;\n          overflow: hidden;\n        `}\n\n        ${submitState === 'resolved' &&\n          `\n          * {\n            pointer-events: none !important;\n          }\n    `}\n      `}\n    >\n      <div className=\"sr-only\">\n        <p>{description}</p>\n      </div>\n      <div\n        css={css`\n          position: relative;\n          width: ${imgSize[0] * scale}px;\n          height: ${imgSize[1] * scale}px;\n          * {\n            margin: 0;\n            padding: 0;\n          }\n        `}\n      >\n        <div\n          ref={root}\n          id={`hotspots-${id}`}\n          css={css`\n            position: absolute;\n            left: 0;\n            top: 0;\n            width: ${imgSize[0]}px;\n            height: ${imgSize[1]}px;\n            transform: scale(${scale});\n            transform-origin: 0 0;\n          `}\n          onMouseDown={onMouseDown}\n          onMouseMove={onMouseMove}\n          onMouseUp={onMouseUp}\n          onClick={onClick}\n        >\n          {[0, 2].includes(imgLoading) ? (\n            <svg\n              viewBox={`0 0 ${imgSize[0]} ${imgSize[1]}`}\n              preserveAspectRatio=\"xMidYMid meet\"\n              overflow=\"visible\"\n              onClick={e => {\n                if (e.target !== e.currentTarget) {\n                  return;\n                }\n              }}\n            >\n              <image\n                xlinkHref={image}\n                width={imgSize[0]}\n                height={imgSize[1]}\n                style={{\n                  pointerEvents: 'none',\n                }}\n              />\n              {/* <title>{description}</title> */}\n              {(!window.dev() ? true : isFocused) &&\n                points\n                  .filter((points: any) => {\n                    if (SVGHasNoDimensionsError) {\n                      return false;\n                    }\n\n                    if (['rectangle', 'polygon'].includes(hotspotType)) {\n                      return true;\n                    }\n\n                    if (points?.length && points?.every(entry => entry > 0)) {\n                      return true;\n                    }\n                  })\n                  .map((points: any, i) => {\n                    const id = children[i]?.props.id;\n\n                    if (hotspotType === 'rectangle') {\n                      return (\n                        <Rectangle\n                          key={`hotspot-${i}-${JSON.stringify(points)}`}\n                          {...{\n                            ...getShapeProps({ id, index: i }),\n                            points: points || [],\n\n                            color: hotSpotColor,\n                            rectangleBorderRadius,\n                            rectangleDisplayOutlineOnly,\n                            currentHotspotId,\n                          }}\n                        />\n                      );\n                    }\n\n                    if (hotspotType === 'polygon') {\n                      return (\n                        <Polygon\n                          key={`hotspot-${i}-${hotSpotColor}`}\n                          {...{\n                            ...getShapeProps({ id, index: i }),\n                            points: (Array.isArray(points) ? points : []).join(\n                              ' '\n                            ),\n                            hotSpotColor,\n                            r,\n                            g,\n                            b,\n                          }}\n                        />\n                      );\n                    }\n\n                    if (hotspotType === 'circle') {\n                      return (\n                        <VisibleHotSpot\n                          key={`hotspot-${i}`}\n                          {...{\n                            ...getShapeProps({ id, index: i }),\n                            location: [points[0], points[1]],\n                          }}\n                        />\n                      );\n                    }\n                  })}\n            </svg>\n          ) : (\n            <LoadingSpinner\n              size={46 * inverseScale}\n              lineWeight={5 * inverseScale}\n            />\n          )}\n        </div>\n\n        <div\n          css={css({\n            position: 'absolute',\n          })}\n        >\n          {children.map((child, index) => {\n            const { id, name, linkData } = child.props;\n\n            const keyId = `hotspot-focus-trigger-${id}`;\n\n            // some title/label additional thing to have parity with showing ticks\n            const titleOrLabel =\n              (isGlobalNavigation ? linkData?.title || linkData?.url : name) ||\n              '';\n\n            const addHasBeenSeenTitleOrLabel = landingPageSeenState.includes(\n              index\n            )\n              ? `${!lastCharInStringIsPeriod(titleOrLabel) ? '.' : ''} Seen.`\n              : '';\n\n            return isGlobalNavigation ? (\n              <a\n                key={keyId}\n                id={keyId}\n                href={window.dev() ? null : linkData?.url}\n                title={`${linkData?.title ||\n                  linkData?.url}${addHasBeenSeenTitleOrLabel}`}\n                target={linkData?.target}\n                onFocus={() => {\n                  setHotSpotFocus((hotSpotFocusRef.current = id));\n                }}\n                onBlur={() => {\n                  setHotSpotFocus(undefined);\n                }}\n              />\n            ) : (\n              <button\n                key={`hotspot-focus-trigger-${index}`}\n                id={`hotspot-focus-trigger-${id}`}\n                css={css({\n                  position: 'absolute',\n                  outline: 'none',\n                  border: 'none',\n                  width: 0,\n                  height: 0,\n                  overflow: 'hidden',\n                })}\n                aria-label={`${name}${addHasBeenSeenTitleOrLabel}`}\n                onFocus={() => {\n                  setHotSpotFocus((hotSpotFocusRef.current = id));\n                }}\n                onBlur={() => {\n                  setHotSpotFocus(undefined);\n                }}\n                onClick={e => {\n                  if (!immediateFeedback) {\n                    // we're quizzin' it\n                    if (window.dev()) {\n                      return;\n                    } else {\n                      updateSelected(index);\n                      //\n                      return;\n                    }\n                  }\n\n                  setShowFeedback(id);\n\n                  requestAnimationFrame(() => {\n                    updateHotspotSeen(id);\n                  });\n                }}\n              />\n            );\n          })}\n        </div>\n      </div>\n      {showFeedback && (\n        <Feedback\n          useMediaInFeedback={useMediaInFeedback}\n          onClose={() => {\n            if (hotSpotFocusRef.current) {\n              requestAnimationFrame(() => {\n                const hotSpotFocusTrigger = document.querySelector(\n                  `#hotspot-focus-trigger-${hotSpotFocusRef.current}`\n                ) as HTMLButtonElement;\n                if (hotSpotFocusTrigger) {\n                  hotSpotFocusTrigger.focus();\n                }\n              });\n            }\n            //\n            setShowFeedback(null);\n          }}\n        >\n          {feedback}\n        </Feedback>\n      )}\n\n      {SVGHasNoDimensionsError && (\n        <img\n          src={HotspotSVGError}\n          css={css({\n            position: 'relative',\n            width: '100%',\n            cursor: 'pointer',\n            borderRadius: '45px',\n\n            boxShadow: `0 0 0 1px transparent`,\n\n            ...(isFocused && {\n              pointerEvents: 'none',\n              boxShadow: `0 0 0 1px ${lPink}`,\n            }),\n\n            ':hover': {\n              boxShadow: `0 0 0 1px ${lPink}`,\n            },\n          })}\n          onClick={() => {\n            setCurrentBlock({ id });\n          }}\n        />\n      )}\n\n      {window.dev() && (!image || imgLoading === 2) && (\n        <EditWrapper\n          id={props.id}\n          width={imgSize[0] * scale}\n          height={imgSize[1] * scale}\n        />\n      )}\n    </div>\n  ) : null;\n};\n\nexport default HotSpot;\n","import { useEffect } from 'react';\n\nexport const useHotSpotTransformOldToNew = ({\n  hotSpots,\n  id,\n  children,\n  getNextHotSpotBlock,\n  getBlockById,\n  setNewBlockNewTree,\n  store,\n  setBlocksAction,\n}) => {\n  return useEffect(() => {\n    if (!hotSpots) {\n      return;\n    }\n\n    // note :\n    // the goal here is to update the points on props to match\n    // what we get from the hotSpots.points\n    //\n    // if we get errors we can compare the values\n    // go to the projects blocks directly and remove the ' zombie ' points on the props ( look for hotSpotName )\n    // then when this runs again it should update\n    // or. since we have the values off hotSpots.points we can update the props.points with those values\n\n    const someHotspotsUpdated = children.some(child => {\n      const { updated } = child.props; //hotSpot?.props;\n\n      return updated;\n    });\n\n    // if any of the hotSpots have been updated we can return\n    //\n    if (someHotspotsUpdated) {\n      return;\n    }\n\n    const [newBlock, newTree] = getNextHotSpotBlock(getBlockById(id))!;\n\n    if (newBlock && newBlock.children) {\n      const hotSpotPoints = Object.values(hotSpots);\n\n      (newBlock.children as []).forEach((child: any, index) => {\n        // somewhere in here check for no content maybe ?\n        // no. just ensure there's no diff between names / points ( length ) and children.length ?\n        const hotSpot = getBlockById(child.id) as any;\n\n        const { name } = hotSpot?.props;\n\n        if (name) {\n          // can't use hotSpots[name] since there's potentially dupes\n          // hotSpots[name] ? hotSpots[name] : [];\n\n          hotSpot.props.points = hotSpotPoints[index] || [];\n        }\n      });\n    }\n\n    // we were removing the hotSpots prop in the old case. DO NOT DO THAT !!!!\n    // we'll keep them to aid in debugging later if it comes to that\n\n    setNewBlockNewTree(newTree, newBlock, store, setBlocksAction);\n  }, []);\n};\n","import { onMouseDown } from './onMouseDown';\nimport { onMouseMove } from './onMouseMove';\nimport { onMouseUp } from './onMouseUp';\nimport { onClick } from './onClick';\n\nexport const getMouseEvents = $ => {\n  return {\n    onMouseDown: onMouseDown($),\n    onMouseMove: onMouseMove($),\n    onMouseUp: onMouseUp($),\n    onClick: onClick($),\n  };\n};\n","export function lastCharInStringIsPeriod(str: string): boolean {\n  return /\\.$/.test(str.trim());\n}\n","/** @jsx jsx */\n\nimport { Fragment as _, memo, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport HotSpot from './HotSpot';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport { Block } from '@chameleoncreator/creator-app';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport SVG from 'components/lib/SVG';\nimport Media, { MediaContext, IMediaContext } from 'components/lib/Media';\nimport { imgPlaceholders } from 'components/lib/Image';\nimport shouldUpdate from 'services/shouldUpdate';\nimport HotSpotScorable from './HotSpotScorable';\nimport Feedback from 'components/lib/Feedback/Feedback_updated_022022';\nimport Audio from 'components/lib/Audio';\nimport Embed from 'components/lib/Embed';\nimport PDF from 'components/lib/PDF';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  TwoColumnLayout: TwoColumnLayout,\n  SingleColumnLayout: SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  EditableButton: EditableBtn,\n  Image: ({ children, ...props }) => {\n    //\n    const mediaContext = useContext(MediaContext) as IMediaContext;\n\n    return (\n      <Image\n        {...{\n          ...props,\n          placeholder: imgPlaceholders[1],\n          maxHeight: 30,\n        }}\n      />\n    );\n  },\n  Video,\n  Media,\n  InteractionColumn: ({ children, ...props }) => {\n    const interactionContext = useContext(InteractionContext);\n    const { includeAdditionalTextField } = interactionContext.props;\n\n    const [hotspot, txt] = children;\n\n    if (!includeAdditionalTextField) {\n      return hotspot;\n    }\n\n    return (\n      <_>\n        {hotspot}\n        <div\n          style={{\n            margin: '20px 0 0 0',\n          }}\n        >\n          {txt}\n        </div>\n      </_>\n    );\n  },\n  HotSpotElement: ({ children, ...props }) => children,\n  HotSpotIsolated: HotSpot,\n  HotSpotScorable,\n  Answer: () => null,\n  Feedback,\n  Correct: ({ children, ...props }) => children,\n  Incorrect: ({ children, ...props }) => children,\n  Attempt: ({ children, ...props }) => children,\n  Modal: () => null,\n  ModalWithEditableBtn: () => null,\n  Audio,\n  SVG,\n  Embed,\n  PDF,\n  OpenPDF: ({ children, ...props }) => {\n    return (\n      <div\n        css={css({\n          img: {\n            maxHeight: 'none !important',\n          },\n        })}\n      >\n        <OpenPDF {...(props as any)}>{children}</OpenPDF>\n      </div>\n    );\n  },\n};\n\nconst HotSpotDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{\n          ...interactionBlock,\n          isOpen: props.isOpen,\n          updateItemsSeen: null,\n        }}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </InteractionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default HotSpotDisplay;\n","import HotSpotDisplay from './HotSpotDisplay';\n\nexport default HotSpotDisplay;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","/** @jsx jsx */\n\nimport { Fragment as _, useState, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { colors } from 'styles/variables';\nimport { FiveStarRatingContext } from './FiveStarRating_v2';\n\nconst { lGrey2 } = colors;\n\nconst Message = ({\n  placeholder = 'Type your message here. . .',\n  onUpdateCallback,\n  style = {},\n  cssStyle = {},\n  ...props\n}) => {\n  const [hasValue, setHasValue] = useState(false);\n\n  const onUpdate = useContext(FiveStarRatingContext)[onUpdateCallback];\n\n  return (\n    <textarea\n      placeholder={placeholder}\n      aria-label={placeholder}\n      style={{\n        width: '100%',\n        padding: '10px 20px',\n        fontFamily: 'inherit',\n        fontSize: 16,\n        // fontWeight: 200,\n        resize: 'none',\n        // border: `1px solid ${lGrey2}`,\n        textAlign: 'center',\n        ...style,\n      }}\n      css={css(cssStyle)}\n      onFocus={e => {\n        e.currentTarget.placeholder = '';\n      }}\n      onBlur={e => {\n        if (!e.currentTarget.value) {\n          e.currentTarget.placeholder = placeholder;\n          e.currentTarget.style.textAlign = 'center';\n        }\n      }}\n      onKeyUp={e => {\n        const { value } = e.currentTarget;\n        requestAnimationFrame(() => {\n          if (!value) {\n            setHasValue(false);\n            return onUpdate('');\n          }\n        });\n\n        if (value && !hasValue) setHasValue(true);\n\n        onUpdate(value);\n      }}\n      // {...props}\n    />\n  );\n};\n\nexport default Message;\n","/** @jsx jsx */\n\nimport { Fragment as _, useState, useRef, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\n\nexport const TextEntry = props => {\n  const {\n    id,\n    message,\n    messageContainer,\n    messageUnderline,\n    messageTextColor = '#000',\n    messageTextBackgroundColor,\n    messageBorderRadius,\n    messageBorderColor = '#d2dff9',\n    messageFontFamily = 'inherit',\n    messageFontSize = 16,\n    onUpdate = () => {},\n    textAlign,\n    placeholderText = 'Type your message here...',\n  } = props;\n\n  const maxLinesBeforeScrolling = (props.maxLinesBeforeScrolling || 4) - 1;\n\n  const [hasFocus, setHasFocus] = useState<boolean>(false);\n  const textArea = useRef<HTMLTextAreaElement>(null);\n  const textAreaProxy = useRef<HTMLDivElement>(null);\n\n  let computedPadding = 0;\n\n  if (textArea.current) {\n    const computedStyle = getComputedStyle(textArea.current);\n    computedPadding =\n      parseInt(computedStyle.paddingTop, 10) +\n      parseInt(computedStyle.paddingBottom, 10);\n  }\n\n  const maxHeight =\n    props.maxLinesBeforeScrolling * 2 * messageFontSize + computedPadding;\n\n  let newLineCheck = 0;\n  for (let i = 0; i < message.length; i += 1) {\n    if (/\\n/.test(message[i])) {\n      newLineCheck += 1;\n    }\n  }\n\n  const textAreaHeight =\n    textAreaProxy?.current?.getBoundingClientRect().height || 0;\n\n  const shouldScroll =\n    newLineCheck > maxLinesBeforeScrolling || textAreaHeight >= maxHeight;\n\n  const textAreaProxyHTML = message.replace(/\\n/g, '<br/>');\n  const placeholder = !hasFocus ? placeholderText : '';\n\n  const sharedStyles = {\n    width: '100%',\n    height: '100%',\n    maxHeight,\n    background: 'transparent',\n    padding: '5px 10px' || '15px 5px 0px 5px',\n    fontFamily: messageFontFamily,\n    fontSize: messageFontSize,\n    color: messageTextColor,\n  };\n\n  return (\n    <div\n      style={{\n        width: '100%',\n      }}\n    >\n      <div\n        style={{\n          position: 'relative',\n          maxHeight: sharedStyles.maxHeight,\n          ...(messageContainer && {\n            height: 150,\n            padding: `10px ${messageBorderRadius || 20}px 10px 10px`,\n            background: messageTextBackgroundColor,\n            borderRadius: messageBorderRadius,\n            boxShadow: `0 0 0 ${hasFocus ? 3 : 1}px ${\n              hasFocus && messageBorderColor === 'transparent'\n                ? '#d2dff9'\n                : messageBorderColor\n            }`,\n            transition: 'box-shadow 0.1s',\n          }),\n        }}\n      >\n        {messageUnderline && (\n          <div\n            ref={textAreaProxy}\n            style={{\n              ...sharedStyles,\n              visibility: 'hidden',\n              overflow: 'hidden',\n              whiteSpace: 'pre-wrap',\n            }}\n            dangerouslySetInnerHTML={{\n              __html: `${textAreaProxyHTML}<br/>${\n                newLineCheck > maxLinesBeforeScrolling ? ' ' : ''\n              }`,\n            }}\n            aria-hidden=\"true\"\n          />\n        )}\n\n        <label htmlFor={id} className=\"sr-only\">\n          {placeholder}\n        </label>\n\n        <textarea\n          ref={textArea}\n          id={id}\n          placeholder={placeholder}\n          css={css({\n            position: messageUnderline ? 'absolute' : 'relative',\n            left: 0,\n            top: 0,\n            border: 'none',\n            outline: 'none',\n            resize: 'none',\n\n            ...sharedStyles,\n            overflow: shouldScroll ? 'auto' : 'hidden',\n\n            textAlign: textAlign || (message || hasFocus ? 'left' : 'center'),\n\n            ':focus': {\n              border: 'none !important',\n              outline: 'none !important',\n            },\n\n            '::placeholder': {\n              color: messageTextColor,\n            },\n          })}\n          onFocus={() => {\n            setHasFocus(true);\n          }}\n          onBlur={() => {\n            setHasFocus(false);\n          }}\n          onChange={e => {\n            onUpdate(e.currentTarget.value);\n          }}\n          // aria-label={placeholder}\n        />\n      </div>\n\n      {messageUnderline && (\n        <div\n          style={{\n            width: '100%',\n            height: 1,\n            marginTop: 10,\n            boxShadow: `0 0 0 ${hasFocus ? 1 : 0}px ${messageBorderColor}`,\n            background: messageBorderColor,\n            transition: 'box-shadow 0.3s',\n          }}\n        />\n      )}\n    </div>\n  );\n};\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useState,\n  createContext,\n  useContext,\n  useEffect,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport useSetState from 'hooks/useSetState';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport Id_ from './Message';\nimport collectFeedbackSubmitted from 'assets/collectFeedbackSubmitted.svg';\nimport { useDispatch } from 'react-redux';\nimport pubSub from 'services/pubSub';\nimport hexToRgb from 'services/hexToRGB';\nimport { colors } from 'styles/variables';\nimport { TextEntry } from 'components/UI/TextEntry';\n\nconst { lGrey2 } = colors;\nconst FiveStarRatingContext = createContext<any>(undefined);\n\nconst FeedbackSubmitted = ({ color }) => {\n  return (\n    <div\n      className=\"fader_-5s\"\n      css={css`\n        // position: absolute;\n        display: flex;\n        flex-direction: column;\n        justify-content: center;\n        left: 0;\n        top: 0;\n        width: 100%;\n        height: 100%;\n        margin: 30px 0 0 0;\n      `}\n    >\n      <img\n        src={collectFeedbackSubmitted}\n        // style={{ maxHeight: '50vh' }}\n      />\n      <div\n        css={css`\n          margin: 50px 0 0 0;\n          font-size: 18px;\n          text-align: center;\n\n          color: ${color};\n        `}\n        role=\"alert\"\n      >\n        Thanks! Your feedback has been submitted.\n        {/* {children} */}\n      </div>\n    </div>\n  );\n};\n\nconst FiveStarRating = props => {\n  const { children, onSubmit = () => {} } = props;\n  let [FiveStarList, Message, SubmitBtn, FeedbackSubmittedEditable] = children;\n\n  const interactionContext = useContext(InteractionContext);\n\n  const {\n    useMyFeedbackApp = 0,\n    // ratingEndpoint,\n    emailRequired = 1,\n    emailOptional = 0,\n    anonymityRequired = 0,\n    identityPlaceholder,\n    include5StarRating = true,\n    includeMessageText = true,\n    // messageTextColor = '#000',\n    messageTextBackgroundColor = '#fff',\n    messageTextBackgroundOpacity = 100,\n    // messageBorder = true,\n    messageBorderRadius = 0,\n    // messageBorderColor = lGrey2,\n    reference = '',\n    collectionKey = '',\n    textColor,\n    isTextEntry,\n    messageTextColor = '#000',\n    messageBorderColor = '#d2dff9',\n    fontFamily = 'inherit',\n    messageFontSize = 16,\n  } = interactionContext.props;\n\n  // console.log({ isTextEntry });\n\n  let ratingEndpoint = interactionContext.props?.ratingEndpoint;\n  // ratingEndpoint will be undefined for modules before we\n  // made the update to include hosting\n  //\n  if (!ratingEndpoint) {\n    if (useMyFeedbackApp) {\n      ratingEndpoint = 'collect';\n    } else {\n      ratingEndpoint = 'email';\n    }\n  }\n\n  //\n  const {\n    state: { rating, learnerIdentity, message },\n    setState,\n  } = useSetState({\n    rating: null,\n    learnerIdentity: '',\n    message: '',\n  });\n\n  const showTextEntry = isTextEntry || (!isTextEntry && includeMessageText);\n\n  let {\n    messageContainer,\n    messageBorder = true,\n    messageUnderline,\n  } = interactionContext.props;\n\n  if (!isTextEntry && !messageUnderline) {\n    messageContainer = true;\n  }\n\n  if (isTextEntry && !messageContainer) {\n    messageBorder = true;\n    messageUnderline = true;\n  }\n\n  const [submitted, setSubmitted] = useState(false);\n\n  let hasLearnerIdentity = learnerIdentity !== '';\n\n  const dispatch = useDispatch();\n\n  const { r, g, b } = hexToRgb(\n    messageTextBackgroundColor === '#fff'\n      ? '#ffffff'\n      : messageTextBackgroundColor\n  );\n  const a = messageTextBackgroundOpacity / 100;\n\n  const Id =\n    ratingEndpoint === 'collect' && (!!emailRequired || !!emailOptional) ? (\n      <Id_\n        placeholder={identityPlaceholder || 'Enter your id'}\n        onUpdateCallback=\"onUpdateLearnerIdentity\"\n        cssStyle={{\n          height: 45,\n          margin: '0 0 10px 0',\n          overflow: 'hidden',\n          color: messageTextColor,\n\n          '::placeholder': {\n            color: messageTextColor,\n          },\n\n          ...(!messageUnderline\n            ? {\n                background:\n                  `rgba(${r}, ${g}, ${b}, ${a})` || messageTextBackgroundColor,\n                border: messageBorder\n                  ? `1px solid ${messageBorderColor}`\n                  : 'none',\n                borderRadius: messageBorderRadius,\n\n                boxShadow: `0 0 0 0 ${messageBorderColor}`,\n                transition: 'box-shadow 0.1s',\n\n                '&:focus': {\n                  outline: 'none !important',\n                  border: 'none !important',\n\n                  boxShadow: `0 0 0 3px ${\n                    !messageBorder ? '#d2dff9' : messageBorderColor\n                  }`,\n                },\n              }\n            : {\n                background: 'transparent',\n                outline: 'none',\n                border: 'none',\n\n                borderRadius: 0,\n\n                borderBottomColor: 'transparent',\n                transition: 'all 0.2s',\n\n                '&:focus': {\n                  outline: 'none !important',\n                  border: 'none !important',\n\n                  borderBottomStyle: 'solid !important',\n                  borderBottomWidth: '3px !important',\n                  borderBottomColor: `${\n                    !messageBorder ? '#d2dff9' : messageBorderColor\n                  } !important`,\n                },\n              }),\n        }}\n        aria-autocomplete=\"given-name\"\n      />\n    ) : null;\n\n  useEffect(() => {\n    pubSub.subscribe(\n      `SHOW_HIDE_RATING_FEEDBACK_${interactionContext.id}`,\n      ({ showSubmissionFeedback }) => {\n        setSubmitted(showSubmissionFeedback);\n      }\n    );\n  }, []);\n\n  return (\n    <FiveStarRatingContext.Provider\n      value={{\n        rating,\n        message,\n        hasLearnerIdentity,\n        learnerIdentity,\n        include5StarRating,\n        onSubmit() {\n          setSubmitted(true);\n          onSubmit();\n          dispatch({\n            type: 'SUBMIT_FEEDBACK',\n            data: {\n              key: collectionKey,\n              rating: rating === null || isTextEntry ? undefined : rating + 1,\n              message,\n              identity: learnerIdentity,\n              reference,\n            },\n          });\n        },\n        alertLearnerIdentity() {},\n        onUpdateRating(index) {\n          setState({ rating: index === rating ? null : index });\n        },\n        onUpdateLearnerIdentity(learnerIdentity) {\n          setState({ learnerIdentity });\n        },\n        onUpdateMessage(message) {\n          setState({ message });\n        },\n      }}\n    >\n      <div\n        css={css`\n          display: flex;\n          align-items: center;\n          position: relative;\n          width: 100%;\n          height: 100%;\n        `}\n      >\n        {!submitted && (\n          <div\n            css={css`\n              width: 100%;\n              height: 100%;\n              opacity: 1;\n              ${submitted &&\n                `\n            opacity: 0;\n            transition: opacity 0.3s;\n            `}\n            `}\n          >\n            {!isTextEntry && include5StarRating && FiveStarList}\n            {Id}\n            {/* {includeMessageText && Message} */}\n            {showTextEntry && (\n              <TextEntry\n                id={`text=-entry-${props.id}`}\n                message={message}\n                onUpdate={message => {\n                  setState({ message });\n                }}\n                messageContainer={messageContainer}\n                messageUnderline={messageUnderline}\n                messageTextColor={messageTextColor}\n                messageTextBackgroundColor={\n                  `rgba(${r}, ${g}, ${b}, ${a})` || messageTextBackgroundColor\n                }\n                messageBorderRadius={messageBorderRadius}\n                messageBorderColor={\n                  messageBorder || messageUnderline\n                    ? messageBorderColor\n                    : 'transparent'\n                }\n                messageFontFamily={fontFamily}\n                messageFontSize={messageFontSize}\n                maxLinesBeforeScrolling={10}\n                maxHeight={240}\n              />\n            )}\n            {SubmitBtn}\n          </div>\n        )}\n\n        {submitted &&\n          (FeedbackSubmittedEditable ?? (\n            <FeedbackSubmitted color={textColor} />\n          ))}\n      </div>\n    </FiveStarRatingContext.Provider>\n  );\n};\n\nexport default FiveStarRating;\nexport { FiveStarRatingContext };\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useState,\n  useContext,\n  useRef,\n  useEffect,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext } from './interactionContext';\nimport { FiveStarRatingContext } from './FiveStarRating_v2';\n\nconst FiveStarList = (props) => {\n  const { children } = props;\n\n  const { starColor, shape = 'star' } = useContext(interactionContext).props;\n  const { rating, onUpdateRating } = useContext(FiveStarRatingContext);\n\n  const [hoverIndex, setHoverIndex] = useState<number | undefined>();\n\n  const shapesRoot = useRef<HTMLDivElement>(null);\n  const shapesContainer = useRef<HTMLDivElement>(null);\n\n  const shapesRootDefaultPadding = 50;\n\n  useEffect(() => {\n    if (!shapesRoot.current || !shapesContainer.current) {\n      return;\n    }\n\n    const onResize = () => {\n      if (!shapesRoot.current || !shapesContainer.current) {\n        return;\n      }\n\n      const winWidth = window.innerWidth;\n      if (winWidth >= 1100) {\n        return;\n      }\n\n      const scaleFactor = winWidth / 1100;\n\n      shapesRoot.current.style.padding = `${\n        shapesRootDefaultPadding * scaleFactor\n      }px`;\n\n      shapesContainer.current.style.transform = `scale(${scaleFactor})`;\n    };\n\n    onResize();\n    window.addEventListener('resize', onResize);\n\n    return () => {\n      window.removeEventListener('resize', onResize);\n    };\n  }, []);\n\n  return (\n    <div\n      ref={shapesRoot}\n      css={css`\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        width: 100%;\n        padding: ${shapesRootDefaultPadding}px;\n      `}\n    >\n      <div\n        key={shape}\n        ref={shapesContainer}\n        className=\"fader_-5s\"\n        css={css`\n          display: flex;\n          // margin: 0 0 20px 0;\n        `}\n      >\n        {children.map((child, index) =>\n          React.cloneElement(child, {\n            key: `child_${index}`,\n            index,\n            shape,\n            color: starColor,\n            onHover(index) {\n              setHoverIndex(index);\n            },\n            isHovered: hoverIndex && hoverIndex >= index,\n            rating,\n            selected: rating !== null && index <= rating,\n            onClick() {\n              onUpdateRating(index);\n            },\n          })\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default FiveStarList;\n","/** @jsx jsx */\n\nimport { useState } from 'react';\nimport { css, jsx } from '@emotion/core';\n\nexport const Heart = props => {\n  const { styles } = props;\n\n  return (\n    <g>\n      <path\n        css={css(styles)}\n        d=\"M10.1,0.1C8.1-0.1,6.8,1.5,6.4,2.2C6,1.5,4.7-0.1,2.8,0.1C-0.1,0.4-0.7,3.6,1.2,6c1.5,2.1,5.2,6,5.3,6.1v0  c0,0,0,0,0,0c0,0,0,0,0,0v0c0.1-0.1,3.7-4,5.3-6.1C13.5,3.6,12.9,0.4,10.1,0.1z\"\n      />\n    </g>\n  );\n};\n\nexport const heart = (\n  <g>\n    <path d=\"M10.1,0.1C8.1-0.1,6.8,1.5,6.4,2.2C6,1.5,4.7-0.1,2.8,0.1C-0.1,0.4-0.7,3.6,1.2,6c1.5,2.1,5.2,6,5.3,6.1v0  c0,0,0,0,0,0c0,0,0,0,0,0v0c0.1-0.1,3.7-4,5.3-6.1C13.5,3.6,12.9,0.4,10.1,0.1z\" />\n  </g>\n);\n","/** @jsx jsx */\n\nimport { useState } from 'react';\nimport { css, jsx } from '@emotion/core';\n\nexport const Diamond = props => {\n  const { styles } = props;\n\n  return (\n    <g>\n      <path\n        css={css(styles)}\n        d=\"M13.73,6.76A8.26,8.26,0,0,1,7.12.15.17.17,0,0,0,6.94,0a.18.18,0,0,0-.18.15A8.24,8.24,0,0,1,.15,6.76.18.18,0,0,0,0,6.94a.17.17,0,0,0,.15.18,8.26,8.26,0,0,1,6.61,6.61.18.18,0,0,0,.18.15.17.17,0,0,0,.18-.15,8.27,8.27,0,0,1,6.61-6.61.17.17,0,0,0,.15-.18A.18.18,0,0,0,13.73,6.76Z\"\n      />\n    </g>\n  );\n};\n\nexport const diamond = (\n  <g>\n    <path d=\"M13.73,6.76A8.26,8.26,0,0,1,7.12.15.17.17,0,0,0,6.94,0a.18.18,0,0,0-.18.15A8.24,8.24,0,0,1,.15,6.76.18.18,0,0,0,0,6.94a.17.17,0,0,0,.15.18,8.26,8.26,0,0,1,6.61,6.61.18.18,0,0,0,.18.15.17.17,0,0,0,.18-.15,8.27,8.27,0,0,1,6.61-6.61.17.17,0,0,0,.15-.18A.18.18,0,0,0,13.73,6.76Z\" />\n  </g>\n);\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\n\nexport const Smiley = (props) => {\n  const { styles, hasFocus, selected } = props;\n\n  const { stroke, strokeWidth, ...$ } = styles;\n\n  const { fill } = $;\n  const transition = 'all 0.2s';\n\n  return (\n    <g>\n      <path\n        d=\"M6.32.2a6.12,6.12,0,1,0,6.11,6.12A6.12,6.12,0,0,0,6.32.2ZM8.64,4.05a.5.5,0,1,1-.5.5A.49.49,0,0,1,8.64,4.05ZM4,4.05a.5.5,0,1,1-.5.5A.49.49,0,0,1,4,4.05ZM6.32,9.7A3.75,3.75,0,0,1,2.7,7.15a.1.1,0,1,1,.19-.07A3.56,3.56,0,0,0,6.32,9.5,3.56,3.56,0,0,0,9.75,7.08.09.09,0,0,1,9.87,7a.12.12,0,0,1,.07.13A3.76,3.76,0,0,1,6.32,9.7Z\"\n        style={{\n          fill: selected ? fill : 'transparent',\n          transition,\n        }}\n      />\n      <path\n        d=\"M6.32,0a6.32,6.32,0,1,0,6.31,6.32A6.32,6.32,0,0,0,6.32,0Zm0,12.43a6.12,6.12,0,1,1,6.11-6.11A6.12,6.12,0,0,1,6.32,12.43Z\"\n        style={{\n          fill: selected ? 'transparent' : fill,\n          transition,\n          ...(hasFocus && {\n            stroke: fill,\n            strokeWidth: 0.5,\n          }),\n        }}\n      />\n      <path\n        d=\"M9.87,7a.09.09,0,0,0-.12.07A3.56,3.56,0,0,1,6.32,9.5,3.56,3.56,0,0,1,2.89,7.08a.1.1,0,1,0-.19.07A3.75,3.75,0,0,0,6.32,9.7,3.76,3.76,0,0,0,9.94,7.14.12.12,0,0,0,9.87,7Z\"\n        style={{\n          fill: selected ? 'transparent' : fill,\n          transition,\n        }}\n      />\n      <path\n        d=\"M4,5a.5.5,0,1,0-.5-.49A.49.49,0,0,0,4,5Z\"\n        style={{\n          fill: selected ? 'transparent' : fill,\n          transition,\n        }}\n      />\n      <path\n        d=\"M8.64,5a.5.5,0,1,0-.5-.49A.49.49,0,0,0,8.64,5Z\"\n        style={{\n          fill: selected ? 'transparent' : fill,\n          transition,\n        }}\n      />\n    </g>\n  );\n\n  return (\n    <g id=\"open\">\n      <circle\n        cx=\"6.32\"\n        cy=\"6.32\"\n        r=\"6.22\"\n        style={{\n          ...(selected\n            ? {\n                fill: $.fill,\n              }\n            : {\n                fill: 'none',\n                stroke: $.fill,\n                strokeMiterlimit: 10,\n                strokeWidth: 0.2,\n              }),\n          transition: 'all 0.2s',\n        }}\n      />\n      <path\n        d=\"M9.84,7.11A3.68,3.68,0,0,1,6.32,9.6,3.67,3.67,0,0,1,2.79,7.11\"\n        style={{\n          fill: 'none',\n          stroke: selected ? '#fff' : $.fill,\n          strokeLinecap: 'round',\n          strokeMiterlimit: 10,\n          strokeWidth: 0.2,\n          transition: 'all 0.2s',\n        }}\n      />\n      <circle\n        cx=\"4\"\n        cy=\"4.55\"\n        r=\"0.5\"\n        style={{\n          fill: selected ? '#fff' : $.fill,\n          transition: 'all 0.2s',\n        }}\n      />\n\n      <circle\n        cx=\"8.64\"\n        cy=\"4.55\"\n        r=\"0.5\"\n        style={{\n          fill: selected ? '#fff' : $.fill,\n          transition: 'all 0.2s',\n        }}\n      />\n    </g>\n  );\n};\n","/** @jsx jsx */\n\nimport { Fragment as _, useState } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { Heart } from './Heart';\nimport { Diamond } from './Diamond';\nimport { Smiley } from './Smiley';\n\nconst Star = ({\n  index,\n  rating,\n  color,\n  selected,\n  onHover,\n  isHovered,\n  onClick,\n  shape = 'star',\n}) => {\n  const [isClicked, setIsClicked] = useState(false);\n  const [hasFocus, setHasFocus] = useState(false);\n  const size = {\n    star: [114, 108],\n    heart: [12.9, 12.2],\n    diamond: [13.88, 13.88],\n    smiley: [12.95, 12.95],\n  }[shape] || [114, 108];\n\n  const strokeWidths = {\n    star: [3, 1],\n    heart: [1, 0.1],\n    diamond: [1, 0.1],\n    smiley: [1, 0.1],\n  }[shape] || [3, 1];\n\n  const styles = {\n    fill: `${selected ? color : 'transparent'}`,\n    stroke: color,\n    strokeWidth: strokeWidths[1], // hasFocus ? strokeWidths[0] :\n    transition: 'all 0.2s',\n\n    ...(selected &&\n      !isClicked && {\n        ':hover': {\n          opacity: 0.5,\n        },\n      }),\n\n    ...((isHovered || isHovered === index) && {\n      fill: color,\n    }),\n  };\n\n  return (\n    <div\n      css={css`\n        position: relative;\n        width: ${114 || size[0] / 1.5}px;\n        height: ${108 || size[1] / 1.5}px;\n        margin: 0 10px;\n        transition: all 0.2s;\n\n        @media (max-width: 480px) {\n          width: ${114 || size[0] / 2}px;\n          height: ${108 || size[1] / 2}px;\n          margin: 0 5px;\n        }\n      `}\n    >\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        viewBox={`0 0 ${size.join(' ')}`}\n        overflow=\"visible\"\n      >\n        {shape === 'star' && (\n          <polygon\n            css={{\n              ...css({\n                ...styles,\n                ...(hasFocus && {\n                  strokeWidth: `5 !important`,\n                }),\n              }),\n            }}\n            points=\"57 88.5 22.32 106.73 28.94 68.12 0.89 40.77 39.66 35.13 57 0 74.34 35.13 113.11 40.77 85.06 68.12 91.68 106.73 57 88.5\"\n          />\n        )}\n        {shape === 'heart' && (\n          <Heart\n            styles={{\n              ...styles,\n              ...(hasFocus && {\n                strokeWidth: `1 !important`,\n              }),\n            }}\n          />\n        )}\n        {shape === 'diamond' && (\n          <Diamond\n            styles={{\n              ...styles,\n              ...(hasFocus && {\n                strokeWidth: `1 !important`,\n              }),\n            }}\n          />\n        )}\n        {shape === 'smiley' && (\n          <Smiley\n            styles={{\n              ...styles,\n              fill: color,\n            }}\n            hasFocus={hasFocus}\n            selected={selected || isHovered || isHovered === index}\n          />\n        )}\n      </svg>\n      <button\n        aria-label={`${shape} ${index + 1} of 5`}\n        aria-pressed={rating == index}\n        css={css`\n          position: absolute;\n          left: 0;\n          top: 0;\n          width: 100%;\n          height: 100%;\n          border: none;\n          outline: none;\n          background: transparent;\n          cursor: pointer;\n        `}\n        onFocus={() => {\n          setHasFocus(true);\n        }}\n        onBlur={() => {\n          setHasFocus(false);\n        }}\n        onClick={() => {\n          setIsClicked(true);\n          onClick();\n        }}\n        onMouseOver={() => {\n          onHover(index);\n        }}\n        onMouseOut={() => {\n          onHover();\n        }}\n        onMouseLeave={() => setIsClicked(false)}\n      />\n    </div>\n  );\n};\n\nexport default Star;\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport { useContext } from 'react';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport { FiveStarRatingContext } from './FiveStarRating_v2';\nimport { interactionContext } from './interactionContext';\n\nconst myFeedbackApp = ({ key, rating, message, identity, reference }) => {\n  const myHeaders = new Headers();\n  myHeaders.append('Accept', 'application/json');\n  myHeaders.append('Content-Type', 'application/json');\n\n  //\n  const raw = JSON.stringify({\n    key,\n    response: {\n      content: message,\n      rating,\n      identity,\n      reference,\n    },\n  });\n\n  const requestOptions: any = {\n    method: 'POST',\n    headers: myHeaders,\n    body: raw,\n    redirect: 'follow',\n  };\n\n  const endPoint =\n    window.top!['collectResponseEndpoint'] ||\n    'https://collect.chameleoncreator.com/api/v1/responses/create';\n\n  if (!(window as any).hosted) {\n    fetch(endPoint, requestOptions)\n      .then(response => {\n        return response.text();\n      })\n      .then(result => console.log(result))\n      .catch(error => console.log('error', error));\n  }\n};\n\nconst SubmitBtn = props => {\n  const context = useContext(interactionContext)!;\n  const {\n    hasLearnerIdentity,\n    learnerIdentity,\n    rating,\n    message,\n    alertLearnerIdentity,\n    onSubmit,\n  } = useContext(FiveStarRatingContext)!;\n\n  const {\n    useMyFeedbackApp,\n    // ratingEndpoint,\n    emailRequired,\n    reference = '',\n    collectionKey = '',\n    submissionEmailDestination,\n    subject,\n    includeMessageText = true,\n    isTextEntry,\n  } = context.props;\n\n  let ratingEndpoint = context.props?.ratingEndpoint;\n  // ratingEndpoint will be undefined for modules before we\n  // made the update to include hosting\n  //\n  if (!ratingEndpoint) {\n    if (useMyFeedbackApp) {\n      ratingEndpoint = 'collect';\n    } else {\n      ratingEndpoint = 'email';\n    }\n  }\n\n  // console.log('SUBMIT TO :', { ratingEndpoint }, ratingEndpoint === 'collect');\n\n  const submitted = unlockInteraction(context.id, 1);\n\n  let enabled = includeMessageText === false || message !== '';\n\n  // if (useMyFeedbackApp && emailRequired) {\n  if (ratingEndpoint === 'collect' && emailRequired) {\n    if (includeMessageText) {\n      enabled = hasLearnerIdentity && message !== '';\n    } else {\n      enabled = hasLearnerIdentity;\n    }\n  }\n\n  return (\n    <div\n      css={css`\n        display: flex;\n        justify-content: center;\n        width: 100%;\n        margin: 20px 0 0 0;\n        ${!window.dev() &&\n          `\n            opacity: ${enabled ? 1 : 0.25};\n            pointer-events: ${enabled ? 'auto' : 'none'};\n            transition: opacity 0.5s;\n        `}\n      `}\n    >\n      <EditableBtn\n        onClick={() => {\n          onSubmit();\n          if (ratingEndpoint === 'scorm') {\n            submitted(1);\n            return;\n          }\n          //\n          // if (!!useMyFeedbackApp) {\n          if (ratingEndpoint === 'collect') {\n            myFeedbackApp({\n              key: collectionKey,\n              rating: rating === null || isTextEntry ? undefined : rating + 1,\n              message,\n              identity: learnerIdentity,\n              reference,\n            });\n\n            submitted(1);\n            return;\n          }\n\n          const parsedMessage = `Rating: ${\n            rating !== null ? rating + 1 : 'not rated'\n          }\\r\\n\\r\\n${message}`;\n\n          location.href = `mailto:${submissionEmailDestination}?${subject &&\n            `subject=${encodeURIComponent(subject)}&`}body=${encodeURIComponent(\n            parsedMessage\n          )}`;\n\n          submitted(1);\n        }}\n        enabled={enabled}\n        {...props}\n      />\n    </div>\n  );\n};\n\nexport default SubmitBtn;\n","/** @jsx jsx */\n\nimport { Fragment as _, memo } from 'react';\nimport { jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { interactionContext } from './interactionContext';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport { Block } from '@chameleoncreator/creator-app';\nimport IELayout from 'components/Layouts/IELayout';\nimport FiveStarRating from './FiveStarRating_v2';\nimport FiveStarList from './FiveStarList';\nimport Star from './Star';\nimport Message from './Message';\nimport SubmitBtn from './SubmitBtn';\nimport shouldUpdate from 'services/shouldUpdate';\nimport Image from 'components/lib/Image';\nimport { FeedbackSubmittedEditable } from './FeedbackSubmittedEditable';\nimport collectFeedbackSubmitted from 'assets/CC_AW_Feedback-min.png';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: ({ children, ...props }) => (\n    <EditableText {...{ ...props, className: 'flipcard-text' }} />\n  ),\n  InteractionColumn: ({ children }) => {\n    return children?.[0] || null;\n  },\n  Image: ({ children, ...props }) => {\n    return (\n      <Image\n        {...{\n          ...props,\n          placeholder: collectFeedbackSubmitted,\n        }}\n      />\n    );\n  },\n  TwoColumnLayout: TwoColumnLayout,\n  SingleColumnLayout: SingleColumnLayout,\n  FiveStarRating,\n  FiveStarList,\n  FeedbackSubmitted: FeedbackSubmittedEditable,\n  Star,\n  TextArea: Message,\n  ContinueButton: ContinueBtn,\n  EditableButton: SubmitBtn,\n  ...IELayout(interactionContext),\n};\n\nconst FiveStarRatingDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <interactionContext.Provider\n        value={{ ...interactionBlock, updateItemsSeen: null }}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </interactionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default FiveStarRatingDisplay;\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useState,\n  createContext,\n  useContext,\n  cloneElement,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\n\nexport const FeedbackSubmittedEditable = props => {\n  const { children } = props;\n  const [img, txt] = children;\n\n  // console.log(img);\n\n  return (\n    <div\n      className=\"fader_-5s\"\n      css={css`\n        display: flex;\n        flex-direction: column;\n        justify-content: center;\n        left: 0;\n        top: 0;\n        width: 100%;\n        height: 100%;\n      `}\n    >\n      {img}\n      <div\n        css={css`\n          margin: 25px 0 0 0;\n          font-size: 18px;\n          text-align: center;\n        `}\n        role=\"alert\"\n      >\n        {txt}\n      </div>\n    </div>\n  );\n};\n","import FiveStarRatingDisplay from './FiveStarRatingDisplay_v2';\nimport FiveStarRating from './FiveStarRating_v2';\n\nexport default FiveStarRatingDisplay;\nexport { FiveStarRating };\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useState,\n  useContext,\n  useRef,\n  useEffect,\n  useLayoutEffect,\n  createContext,\n  ReactElement,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext as _interactionContext } from './interactionContext';\nimport updateReadOnlyText from 'services/updateReadOnlyText';\n\ninterface ResultsPageContentProps {\n  children: ReactElement[] | ReactElement | string | null;\n}\n\ninterface ResultsPageContext {\n  passed: boolean;\n}\n\nconst ResultsPageContext = createContext<ResultsPageContext | undefined>(\n  undefined\n);\n\nconst ResultsPageContent = (props: ResultsPageContentProps) => {\n  const interactionContext = useContext(_interactionContext);\n  const { displayPassFailContent, score, passed } = interactionContext;\n  const { children } = props;\n\n  const passFailContent = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (window.dev()) {\n      return;\n    }\n\n    const checkingSectionHeight = setInterval(() => {\n      const section = document.querySelector(\n        `#i${interactionContext.id}`\n      ) as HTMLElement;\n\n      if (!section) {\n        return;\n      }\n      //\n      const height = section.offsetHeight;\n      if (height) {\n        // console.log('updateReadOnlyText !!!', section);\n        //\n        // sometimes the content here will not updateReadOnlyText on initial render\n        // this is to give it another nudge when it renders at its display height\n\n        updateReadOnlyText(section);\n        clearInterval(checkingSectionHeight);\n      }\n    }, 1000 / 12);\n\n    return () => {\n      clearInterval(checkingSectionHeight);\n    };\n  }, []);\n\n  return (\n    <div\n      ref={passFailContent}\n      css={css`\n        width: 100%;\n      `}\n    >\n      {window.dev()\n        ? children![displayPassFailContent === 'passed' ? 0 : 1]\n        : children![passed ? 0 : 1]}\n    </div>\n  );\n};\n\nexport default ResultsPageContent;\nexport { ResultsPageContext };\n","import { Fragment as _, useContext, ReactElement } from 'react';\nimport { interactionContext as _interactionContext } from './interactionContext';\n\ninterface ResultsPageMediaProps {\n  children: ReactElement[] | ReactElement | string | null;\n}\n\nconst ResultsPageMedia = (props: ResultsPageMediaProps) => {\n  const interactionContext = useContext(_interactionContext);\n\n  const {\n    displayPassFailContent,\n    passed,\n  } = interactionContext;\n\n  const { showImage = true } = interactionContext.props;\n\n  const { children } = props as any;\n\n  return showImage\n    ? window.dev()\n      ? children[displayPassFailContent === 'passed' ? 0 : 1]\n      : children[passed ? 0 : 1]\n    : null;\n};\n\nexport default ResultsPageMedia;\n","/** @jsx jsx */\n\nimport { useState, useRef, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\n\nconst GraphCircle = ({ color = '#F6306B', textColor = '#000', score }) => {\n  const [animatedValue, setAnimatedValue] = useState(Math.random());\n  const [actualValue, setActualValue] = useState(0);\n  const mounted = useRef(true);\n\n  useEffect(() => {\n    if (!window.dev()) {\n      return;\n    }\n\n    const tick = setTimeout(() => {\n      if (mounted.current) {\n        clearTimeout(tick);\n        setAnimatedValue(Math.random());\n      }\n    }, 3000);\n  }, [animatedValue]);\n\n  useEffect(\n    () => () => {\n      mounted.current = false;\n    },\n    []\n  );\n\n  useEffect(() => {\n    if (!window.dev()) {\n      const tick = setTimeout(() => {\n        if (mounted.current) {\n          clearTimeout(tick);\n          setActualValue(score);\n        }\n      }, 100);\n    }\n  }, [score]);\n\n  return (\n    <div\n      css={css`\n        position: relative;\n        width: 100%;\n        max-width: 360px;\n        height: 100%;\n      `}\n    >\n      <svg viewBox=\"0 0 360 360\" className=\"circular-chart\">\n        <path\n          stroke={color}\n          fill=\"none\"\n          strokeWidth=\"10\"\n          strokeLinecap=\"round\"\n          strokeDasharray={`${1100 *\n            (window.dev() ? animatedValue : Number(actualValue) / 100)}, 1100`}\n          d=\"M180 4.929\n     a 175.07 175.07 0 0 1 0 350.1411\n     a 175.07 175.07 0 0 1 0 -350.1411\"\n          style={{\n            transition: 'all 0.5s',\n          }}\n        ></path>\n        <g fill=\"none\" id=\"Group\" transform=\"translate(24.000000, 24.000000)\">\n          <path\n            d=\"M-2.84217094e-14,155.589034 C-2.84217094e-14,69.6593898 69.6593898,-2.84217094e-14 155.589034,-2.84217094e-14 C241.518677,-2.84217094e-14 311.178067,69.6593898 311.178067,155.589034 C311.178067,241.517905 241.518677,311.178067 155.589034,311.178067 C69.6593898,311.178067 -2.84217094e-14,241.517905 -2.84217094e-14,155.589034 Z\"\n            id=\"Stroke-1\"\n            stroke={color}\n            strokeWidth=\"2\"\n          ></path>\n          <path\n            d=\"M167.935431,310.691118 C225.368578,306.18147 274.029533,270.487297 297.007888,220.53059 C297.007888,220.53059 250.406391,224.331359 217.219551,175.845693 C197.166289,146.547653 162.268255,144.383176 145.351669,167.549176 C134.567896,182.315957 110.117728,228.427107 80.8104211,225.84101 C54.0614131,223.480394 31.7981149,176.610171 0.59042412,169.098209 C2.08849212,186.511319 6.45373872,203.104353 13.2120331,218.403179 L13.2128053,218.403951 C13.6838473,219.471132 14.1680167,220.53059 14.6622247,221.584643 C14.6823019,221.627886 14.7023791,221.67113 14.7224563,221.713601 C15.2035369,222.737538 15.6962005,223.753753 16.1981305,224.764563 C16.2336517,224.834833 16.2684007,224.905875 16.3039219,224.976918 C16.7981299,225.96765 17.3039209,226.952978 17.8189783,227.931355 C17.8629937,228.017069 17.9077813,228.102011 17.9525689,228.186181 C18.4653097,229.156064 18.9873169,230.11977 19.5193627,231.077298 C19.5680113,231.163784 19.6166599,231.250271 19.6653085,231.336757 C20.1988987,232.293513 20.7417553,233.243319 21.2954227,234.187719 C21.3432991,234.2688 21.3919477,234.350654 21.4398241,234.431735 C21.9996691,235.382313 22.5680083,236.325941 23.1471583,237.263392 C23.1857683,237.32594 23.2259227,237.389261 23.2645327,237.452581 C23.8575823,238.409337 24.4591261,239.359143 25.0722529,240.301227 C25.0900135,240.329026 25.1085463,240.356053 25.1270791,240.383852 C30.8676139,249.20006 37.4791903,257.396963 44.8374841,264.855642 C44.9270593,264.94599 45.0143179,265.038654 45.1046653,265.129001 C45.7919233,265.823209 46.4892199,266.506606 47.1896053,267.186914 C47.3579449,267.350621 47.5239679,267.515871 47.6930797,267.678806 C48.3486775,268.310465 49.0127695,268.932858 49.6784059,269.552163 C49.9000273,269.757568 50.1185599,269.964518 50.3409535,270.168378 C50.9764741,270.752934 51.6197167,271.329767 52.2660481,271.904284 C52.5255073,272.135172 52.7849665,272.367604 53.0467423,272.596947 C53.6706799,273.144437 54.3007951,273.684977 54.9332269,274.222428 C55.2243463,274.470305 55.5154657,274.717409 55.8081295,274.962196 C56.4251173,275.478798 57.0475105,275.989994 57.6722203,276.496557 C57.9895945,276.7537 58.3069687,277.01007 58.6266595,277.264896 C59.2405585,277.755243 59.8583185,278.240185 60.4799395,278.721266 C60.8166187,278.981497 61.1548423,279.240184 61.4938381,279.498099 C62.1085093,279.966052 62.7254971,280.429372 63.3478903,280.887287 C63.7031023,281.149835 64.0598587,281.409294 64.4173873,281.667981 C65.0328307,282.11354 65.6505907,282.556783 66.2722117,282.993848 C66.6436399,283.25408 67.0173847,283.511222 67.3903573,283.768365 C68.0088895,284.194619 68.6289661,284.620101 69.2544481,285.037862 C69.6382315,285.294232 70.0258759,285.545969 70.4127481,285.800023 C71.0351413,286.208517 71.6590789,286.615466 72.2876497,287.015466 C72.6830161,287.267203 73.0830157,287.512763 73.4806987,287.760639 C74.1108139,288.152916 74.7401569,288.544422 75.3749053,288.927433 C75.7779937,289.170676 76.1849431,289.406197 76.5895759,289.645579 C77.2289575,290.022413 77.8667947,290.401563 78.5123539,290.770674 C78.9162145,291.00079 79.3247083,291.223956 79.7301133,291.450983 C80.3849389,291.817778 81.0382201,292.185345 81.6984511,292.542873 C82.0876399,292.752912 82.4806897,292.954456 82.8714229,293.161406 C83.5563643,293.525112 84.2405335,293.890362 84.9316525,294.243258 C85.2142777,294.387659 85.5023083,294.524339 85.7857057,294.667968 C87.3501829,295.455612 88.9293319,296.215457 90.5239249,296.950591 C90.8243107,297.088815 91.1200633,297.233216 91.4219935,297.369123 C92.0358925,297.647888 92.6582857,297.914297 93.2768179,298.185339 C93.7856977,298.408505 94.2914887,298.636304 94.8034573,298.853292 C95.3880127,299.10194 95.9787457,299.339006 96.5671621,299.579932 C97.1200573,299.806959 97.6714081,300.037847 98.2281643,300.258696 C98.8042255,300.487267 99.3856921,300.7058 99.9648421,300.927421 C100.539359,301.14827 101.113104,301.370664 101.691481,301.584563 C102.265226,301.795374 102.842832,301.999235 103.419665,302.20464 C104.01117,302.414678 104.601903,302.627033 105.195725,302.830122 C105.76947,303.026261 106.345531,303.213905 106.921592,303.403094 C107.526225,303.602322 108.130085,303.801549 108.737806,303.993055 C109.312323,304.174522 109.889929,304.349039 110.467534,304.524329 C111.082978,304.709657 111.699193,304.894985 112.318498,305.074907 C112.894559,305.240158 113.472937,305.401548 114.052087,305.561393 C114.678341,305.735138 115.305367,305.905794 115.93471,306.071817 C116.512316,306.223169 117.091466,306.369887 117.67216,306.515832 C118.308453,306.674906 118.947063,306.831662 119.586444,306.982241 C120.166366,307.119693 120.747833,307.254056 121.330072,307.38533 C121.975631,307.529731 122.624279,307.671044 123.274471,307.808495 C123.854394,307.931275 124.435088,308.051738 125.017327,308.166796 C125.676013,308.298842 126.337789,308.423939 126.999564,308.546718 C127.577942,308.654826 128.157864,308.76139 128.739331,308.862548 C129.410373,308.97915 130.083731,309.088803 130.757862,309.196139 C131.335467,309.290347 131.912301,309.382239 132.490678,309.468725 C133.177164,309.570656 133.866739,309.664092 134.555541,309.757528 C135.128514,309.834748 135.699942,309.914285 136.273686,309.985327 C136.978705,310.072586 137.68604,310.149806 138.393375,310.227026 C138.956309,310.288802 139.518471,310.354439 140.083721,310.410809 C140.81345,310.482624 141.547812,310.543628 142.281402,310.605404 C142.82812,310.651736 143.374065,310.703473 143.923099,310.743627 C144.692211,310.80077 145.465183,310.844786 146.238155,310.890345 C146.754757,310.921233 147.269814,310.958299 147.78796,310.983782 C148.648191,311.026253 149.513055,311.05328 150.377147,311.081851 C150.810351,311.095751 151.242011,311.118144 151.675987,311.128183 C152.976372,311.159843 154.280618,311.178376 155.589497,311.178376 C155.998763,311.178376 156.404168,311.165249 156.813434,311.16216 C159.156289,311.113511 163.055127,310.944399 167.935431,310.691118\"\n            id=\"Fill-3\"\n            fill={color}\n            opacity=\"0.36063058\"\n          ></path>\n          <path\n            d=\"M304.215371,201.746748 C296.230051,193.783049 284.644735,186.569157 268.723515,186.190007 C232.520462,185.327459 210.108902,230.150581 180.800823,232.736678 C151.493516,235.323548 129.154528,203.253121 114.750696,185.650239 C100.346864,168.047357 62.2773895,164.208562 42.8828143,193.947528 C33.8967229,207.725893 21.8318701,215.574533 13.7438473,219.617773 C38.1530893,273.609224 92.4835369,311.178299 155.589265,311.178299 C225.446338,311.178299 284.549754,265.138963 304.215371,201.746748 Z\"\n            id=\"Fill-5\"\n            fill={color}\n            opacity=\"0.659458705\"\n          ></path>\n        </g>\n      </svg>\n\n      <div\n        css={css`\n          position: absolute;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          left: 0;\n          top: 0;\n          width: 100%;\n          height: 100%;\n        `}\n      >\n        <h1 style={{ color: textColor, textAlign: 'center' }}>\n          {window.dev() ? Math.ceil(animatedValue * 100) : score}%\n        </h1>\n      </div>\n    </div>\n  );\n};\n\nexport default GraphCircle;\n","/** @jsx jsx */\n\nimport { useState, useRef, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { colors } from 'styles/variables';\n\nconst { lGrey1 } = colors;\n\nconst GraphBar = ({ color = '#F6306B', textColor = '#000', score }) => {\n  const [animatedValue, setAnimatedValue] = useState(Math.random());\n  const mounted = useRef(true);\n\n  useEffect(() => {\n    if (!window.dev()) {\n      return;\n    }\n\n    const tick = setTimeout(() => {\n      if (mounted.current) {\n        clearTimeout(tick);\n        setAnimatedValue(Math.random());\n      }\n    }, 3000);\n  }, [animatedValue]);\n\n  useEffect(\n    () => () => {\n      mounted.current = false;\n    },\n    []\n  );\n\n  return (\n    <div\n      css={css`\n        display: flex;\n        justify-content: center;\n        width: 100%;\n        height: 100%;\n        padding: 0 0 50px 0;\n      `}\n    >\n      <div\n        css={css`\n          width: 100%;\n          max-width: 360px;\n          height: 30px;\n          padding: 3px;\n          border-radius: 9999px;\n          background: ${lGrey1};\n        `}\n      >\n        <div\n          css={css`\n            width: ${window.dev() ? 100 * animatedValue : score}%;\n            height: 100%;\n            border-radius: 9999px;\n            background: ${color};\n            transition: all 0.3s;\n          `}\n        />\n\n        <div\n          css={css`\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            width: 100%;\n            margin: 10px;\n          `}\n        >\n          <h1 style={{ color: textColor, textAlign: 'center' }}>\n            {window.dev() ? Math.ceil(animatedValue * 100) : score}%\n          </h1>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default GraphBar;\n","/** @jsx jsx */\n\nimport { useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport GraphCircle from './GraphCircle';\nimport GraphBar from './GraphBar';\nimport { interactionContext as _interactionContext } from './interactionContext';\n\nconst GraphContainer = () => {\n  const interactionContext = useContext(_interactionContext);\n  const { score } = interactionContext;\n  const {\n    graphType,\n    graphColor,\n    graphTextColor = '#000',\n  } = interactionContext.props;\n\n  return (\n    <div\n      css={css`\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        width: 100%;\n        padding: 30px;\n      `}\n    >\n      {graphType === 'circle' ? (\n        <GraphCircle\n          color={graphColor}\n          textColor={graphTextColor}\n          score={Number(score)}\n        />\n      ) : (\n        <GraphBar\n          color={graphColor}\n          textColor={graphTextColor}\n          score={Number(score)}\n        />\n      )}\n    </div>\n  );\n};\n\nexport default GraphContainer;\n","/** @jsx jsx */\n\nimport { Fragment as _, useState, useMemo, useEffect, useContext } from 'react';\nimport { jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport Container from 'components/Layouts/ContainerLogical';\nimport Media, { MediaContext, IMediaContext } from 'components/lib/Media';\nimport Video from 'components/lib/Video';\nimport SVG from 'components/lib/SVG';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport { Block, Blocks } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport ResultsPageContent from './ResultsPageContent';\nimport ResultsPageMedia from './ResultsPageMedia';\nimport { useSelector } from 'react-redux';\nimport ResultsPageResult from './ResultsPageResult';\nimport useIntersectionObserver from 'hooks/useIntersectionObserver';\nimport { getAllScoringInteractions } from 'services/scoring';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport { State } from 'store/store';\nimport { findBlocksIn } from 'selectors/block';\nimport { createSelector } from 'reselect';\nimport pubSub from 'services/pubSub';\nimport { imgPlaceholders } from 'components/lib/Image';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  Image: ({ children, ...props }) => {\n    return (\n      <Image\n        {...{\n          ...props,\n          placeholder:\n            // only the 1 imgPlaceholder for now\n            imgPlaceholders[1],\n        }}\n      />\n    );\n    //\n  },\n  TwoColumnLayout: TwoColumnLayout,\n  SingleColumnLayout: SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  Video,\n  SVG,\n  Media,\n  InteractionColumn: ({ children, ...props }) => {\n    const interactionContext = useContext(InteractionContext);\n    const { includeAdditionalTextField } = interactionContext.props;\n\n    const [results, txt] = children;\n\n    if (!includeAdditionalTextField) {\n      return results;\n    }\n\n    return (\n      <_>\n        {results}\n        <div\n          style={{\n            margin: '20px 0 0 0',\n          }}\n        >\n          {txt}\n        </div>\n      </_>\n    );\n  },\n  ResultsPageContent,\n  ResultsPageContentPassed: ({ children }) => children[0],\n  ResultsPageContentFailed: ({ children }) => children[0],\n  ResultsPageResult,\n  ResultsPageMedia,\n};\n\n/**\n * activeBlockSelector finds blocks that are accessible from the root block\n */\nconst activeBlockSelector = (blocks: Blocks, rootId: string): Block[] => {\n  return findBlocksIn(blocks, blocks[rootId], (i: any) => i);\n};\n\n/**\n * scoringBlocks finds all the blocks that are scorable and have it turned on\n */\nconst scoringBlocks = (blocks: Block[]): string[] => {\n  return blocks\n    .filter((b: any) => {\n      return b?.props?.score && b.props.score === true;\n    })\n    .map((b: any) => b.id);\n};\n\nlet printResultsInteractionData;\nconst prettyPrintScoreData = (scoreData: {\n  [key: string]: number | undefined;\n}) => {\n  return Object.keys(scoreData).reduce((acc, curr) => {\n    const name = getBlockById(curr)?.props?.name;\n    return {\n      ...acc,\n      [name]: scoreData[curr],\n    };\n  }, {});\n};\n\n/**\n * This selector pulls out all the active blocks from the store\n */\nconst loadActiveBlocks = createSelector(\n  [(state: State) => state.blocks, (state: State) => state.rootBlockId!],\n  activeBlockSelector\n);\n\nconst loadScoringBlocks = createSelector(loadActiveBlocks, scoringBlocks);\n\nconst getModuleBlock = createSelector(\n  (state: State) => state.blocks,\n  (blocks: Blocks) => Object.values(blocks).find(b => b.type === 'Module')\n);\n\nconst ResultsPageDisplay = props => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  const [displayPassFailContent, setDisplayPassFailContent] = useState(\n    'passed'\n  );\n\n  const { scoreData = {} } = useSelector((state: State) => ({\n    scoreData: state.userBehaviour.score,\n  }));\n\n  const moduleBlock = useSelector(getModuleBlock);\n  let mbProps = { passMark: 80 };\n  if (moduleBlock) {\n    mbProps = moduleBlock.props as { passMark: number };\n  }\n\n  const {\n    scoringByTopic = false,\n    scoringByTopicPassmark,\n  } = interactionBlock?.props as any;\n\n  const passMark =\n    scoringByTopic && scoringByTopicPassmark\n      ? scoringByTopicPassmark\n      : mbProps.passMark;\n\n  const scoringInteractions = useSelector(loadScoringBlocks);\n  const numberOfScorableInteractions = scoringInteractions.length;\n\n  // sketching out scorable interactions in topic\n  const currentTopicBlock = useSelector((state: State) => {\n    const { currentTopic, blocks } = state;\n\n    return currentTopic ? blocks[currentTopic] : null;\n  });\n\n  const interactionsInTopic = getInteractionsInTopic(currentTopicBlock);\n\n  const interactionsInTopicScoring = interactionsInTopic.filter(entry => {\n    return entry.props?.score;\n  });\n\n  const interactionsInTopicIds = interactionsInTopic.map(entry => entry.id);\n\n  // filter scoreData\n  const topicScoreData = Object.keys(scoreData).reduce((acc, curr) => {\n    return {\n      ...acc,\n      ...(interactionsInTopicIds.includes(curr) && {\n        [curr]: scoreData[curr],\n      }),\n    };\n  }, {});\n\n  const allScoringInteractions = getAllScoringInteractions();\n\n  const getScoreDataFromScoringInteractions = scoreData => {\n    return allScoringInteractions.reduce((acc, curr) => {\n      return {\n        ...acc,\n        [curr]: !!scoreData[curr] ? 1 : 0,\n      };\n    }, {});\n  };\n\n  const scoreDataFromScoringInteractions = getScoreDataFromScoringInteractions(\n    scoringByTopic ? topicScoreData : scoreData\n  );\n\n  const scoreRaw = Object.values(scoreDataFromScoringInteractions).reduce<\n    number\n  >((acc, curr) => acc + Number(curr), 0);\n\n  const scorePercent =\n    ((scoreRaw || 0) /\n      (scoringByTopic\n        ? interactionsInTopicScoring.length\n        : numberOfScorableInteractions)) *\n      100 || 0;\n\n  const hasScoringInteractions = !!allScoringInteractions?.length;\n\n  const passed = hasScoringInteractions\n    ? scorePercent >= Number(passMark)\n    : true;\n\n  const score = hasScoringInteractions ? scorePercent.toFixed() : 100;\n\n  const { init } = useIntersectionObserver(true);\n\n  useEffect(() => {\n    init([document.querySelector(`#i${interactionBlock.id}`)], {\n      threshold: 0.5,\n    });\n  }, []);\n\n  useEffect(() => {\n    // receives the event from the editor settings\n    // show feedback for passed / failed\n    const pS = pubSub.subscribe(\n      `displayResultsInteractionPassFailContent_${interactionBlock.id}`,\n      ({ displayPassFailContent }) => {\n        setDisplayPassFailContent(displayPassFailContent);\n      }\n    );\n\n    return pS;\n  });\n\n  clearTimeout(printResultsInteractionData);\n  printResultsInteractionData = setTimeout(() => {\n    console.log('RESULTS INTERACTION DATA :');\n    console.log({\n      hasScoringInteractions,\n      numberOfScorableInteractions,\n      scoringInteractions: scoringInteractions.map(\n        id => getBlockById(id)?.props?.name\n      ),\n      topicScoreData: prettyPrintScoreData(topicScoreData),\n      scoreData: prettyPrintScoreData(scoreData),\n      scoreDataFromScoringInteractions,\n      scoreRaw,\n      scorePercent,\n      passed,\n    });\n  }, 1000);\n\n  const container = (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{\n          ...interactionBlock,\n          displayPassFailContent,\n          score,\n          passed,\n        }}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </InteractionContext.Provider>\n    </Container>\n  );\n\n  return window.dev()\n    ? container\n    : useMemo(() => {\n        return container;\n      }, [\n        props.isOpen,\n        displayPassFailContent,\n        score,\n        passed,\n        interactionBlock.props!.lockDown,\n      ]);\n};\n\nexport default ResultsPageDisplay;\n","import ResultsPageDisplay from './ResultsPageDisplay';\n\nexport default ResultsPageDisplay;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","/** @jsx jsx */\n\nimport React, { Fragment as _, useContext, useEffect, useRef } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { colors } from 'styles/variables';\nimport { interactionContext } from './interactionContext';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport { findByKeyVal_V2 } from 'services/findByKeyVal';\nimport { ImageContext } from 'components/lib/Image';\nimport getStore from 'services/getStore';\nimport landingPageCake_1 from 'assets/landingPageCake_1.png';\nimport landingPageCake_2 from 'assets/landingPageCake_2.png';\nimport landingPageCake_3 from 'assets/landingPageCake_3.png';\nimport landingPageCake_4 from 'assets/landingPageCake_4.png';\nimport landingPageCake_5 from 'assets/landingPageCake_5.png';\nimport landingPageCake_6 from 'assets/landingPageCake_6.png';\nimport { useSelector } from 'react-redux';\nimport { State } from 'store/store';\n\nconst { lGrey2 } = colors;\n\nconst cakes = [\n  landingPageCake_1,\n  landingPageCake_2,\n  landingPageCake_3,\n  landingPageCake_4,\n  landingPageCake_5,\n  landingPageCake_6,\n];\n\nconst store = getStore();\n\nconst ClickAndReveals = ({ children, ...props }) => {\n  const context = useContext(interactionContext);\n  const { id: contextId } = context;\n\n  const itemsSeen = useRef(\n    unlockInteraction(context.id, (children as any).length)\n  );\n\n  const { sId, isLandingPage } = context.props;\n\n  context.numPanels = children.length;\n\n  const landingPageSeenState = useSelector((state: State) => {\n    return state?.landingPagesSeenState?.[sId || context.id] || [];\n  });\n\n  // console.log({ landingPageSeenState });\n\n  context.updateClickAndRevealSeen = id => {\n    store.dispatch({\n      type: 'UPDATE_LANDING_PAGE_SEEN_STATE',\n      data: {\n        parentId: sId || contextId,\n        childIndex: children.findIndex(child => {\n          return child?.props?.id === id;\n        }),\n      },\n    });\n  };\n\n  useEffect(() => {\n    // console.log(landingPageSeenState.length, context.numPanels);\n    if (landingPageSeenState.length == context.numPanels) {\n      unlockInteraction(contextId);\n    }\n  }, [landingPageSeenState.length]);\n\n  return (\n    <div\n      css={css`\n        display: flex;\n        justify-content: center;\n        width: 100%;\n      `}\n    >\n      <div\n        css={css`\n          display: flex;\n          flex-wrap: wrap;\n          justify-content: center;\n          height: 100%;\n        `}\n      >\n        {children.map((child: any, index: number) => {\n          const element = React.cloneElement(child, {\n            key: child.props.id,\n            parentId: props.id,\n            seen: landingPageSeenState.includes(index),\n          });\n          const reIndex = index % 6;\n\n          return isLandingPage ? (\n            <ImageContext.Provider\n              key={`${child.props.id}-cake`}\n              value={{\n                placeholder: cakes[reIndex],\n              }}\n            >\n              {element}\n            </ImageContext.Provider>\n          ) : (\n            element\n          );\n        })}\n      </div>\n    </div>\n  );\n};\n\nexport default ClickAndReveals;\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useState,\n  useRef,\n  useContext,\n  useEffect,\n  cloneElement,\n} from 'react';\nimport { css as _css } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport { colors, getButtonFocus } from 'styles/variables';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport { interactionContext } from './interactionContext';\nimport checkReturnToInteractionEditing from 'services/checkReturnToInteractionEditing';\nimport Modal from 'components/UI/Modal';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport setBlockProps from 'services/apiHelpers/setBlockProps';\nimport pubSub from 'services/pubSub';\nimport getStore from 'services/getStore';\nimport { getHexToRgbWithDefaultFallback } from 'services/hexToRGB';\nimport { headingStylesForPanelsAndCards } from 'styles/headingStylesForPanelsAndCards';\n\nconst store = getStore();\nconst { lGrey0, lPink } = colors;\n\nconst PanelColumn = ({ width, children }) => {\n  //\n  return (\n    <div\n      css={css`\n        position: relative;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        flex-shrink: 0;\n        width: ${width}px;\n        margin: 20px;\n        cursor: pointer;\n\n        @media (max-width: ${width + 30}px) {\n          width: 100% !important;\n          max-width: 100% !important;\n          height: auto !important;\n        }\n      `}\n    >\n      {children}\n    </div>\n  );\n};\n\nconst ClickAndRevealSeenTick = ({\n  title = '',\n  width = 16,\n  height = 15,\n  color,\n}) => {\n  const titleComped = `${title ? `${title}. ` : ''}Content has been seen`;\n\n  return (\n    <svg\n      width=\"16px\"\n      height=\"15px\"\n      viewBox=\"0 0 16 15\"\n      version=\"1.1\"\n      aria-describedby=\"title\"\n    >\n      <title>{'Content has been seen' || titleComped}</title>\n      <g\n        id=\"Page-1\"\n        stroke=\"none\"\n        strokeWidth=\"1\"\n        fill=\"none\"\n        fillRule=\"evenodd\"\n      >\n        <polyline\n          id=\"Path\"\n          stroke={color}\n          strokeWidth=\"2\"\n          transform=\"translate(7.486953, 6.527846) rotate(6.000000) translate(-7.486953, -6.527846) \"\n          points=\"0.886953048 9.1308343 6.78684502 13.1278461 14.086953 -0.0721539421\"\n        />\n      </g>\n    </svg>\n  );\n};\n\nconst ClickAndReveal = ({ children, ...props }) => {\n  //\n\n  const [showFeedback, setShowFeedback] = useState(false);\n\n  let [imageText, text, content] = children;\n\n  let imageDescription = '';\n\n  switch (imageText.props.child) {\n    case 0: {\n      // text\n      const doc = new DOMParser().parseFromString(\n        imageText.props.children[0].props.content,\n        'text/html'\n      );\n      imageDescription = doc && doc.body.innerText;\n      break;\n    }\n\n    case 1: {\n      // image\n      imageDescription = imageText.props.children[1].props.description;\n      break;\n    }\n\n    case 5: {\n      // pdf\n      imageDescription = imageText.props.children[5].props.description;\n      break;\n    }\n  }\n\n  // if there's no description added to a link\n  // attempt to fall back to the alt text of the image ( if it exists )\n  let altTextForAnchorTag = '';\n\n  if (imageText) {\n    if (imageText?.props?.child === 1) {\n      altTextForAnchorTag = imageText.props.children[1]?.props?.description;\n    }\n\n    imageText = cloneElement(imageText, {\n      onMediaChange(child) {\n        mediaTypeUpdated(child);\n      },\n    });\n  }\n\n  let initialMediaType = imageText?.props?.child ?? 1;\n  const [mediaType, mediaTypeUpdated] = useState<number>(initialMediaType);\n  //\n\n  const [panelContainsImageZoom, setPanelContainsImageZoom] = useState(false);\n  //\n  let imgZoomIsActiveElement = false;\n\n  const context: any = useContext(interactionContext);\n\n  const { id, updateClickAndRevealSeen } = context;\n  const interactionSId = context.props.sId || id;\n\n  const {\n    sId,\n    includePanelBackground = true,\n    panelBackgroundOpacity = 100,\n    backgroundColor = '#ffffff',\n    //'#0199ff', ^ < that blue\n    clickAndRevealPanelTextColor,\n    includeLabel = true,\n    clickAndRevealLabelTextColor,\n    showSeenState = true,\n    clickAndRevealShowSeenStateBackgroundColor,\n    clickAndRevealShowSeenStateTickColor,\n    width,\n    height,\n    panelOutline,\n    panelOutlineColor,\n    borderRadius,\n    borderColor,\n    focusColor,\n    layout,\n    useGlobalNavigation = false,\n    globalNavigation = {},\n  } = context.props;\n\n  const seen = props?.seen;\n\n  const panelImg = useRef<HTMLDivElement>(null);\n\n  let labelContent;\n\n  if (includeLabel && text?.props?.content) {\n    const doc = new DOMParser().parseFromString(\n      text.props.content,\n      'text/html'\n    );\n    labelContent = doc && doc.body.innerText;\n  }\n\n  let ariaLabel = `${imageDescription ? imageDescription : ''}${\n    labelContent ? ` ${labelContent}` : ''\n  }${!!showSeenState && seen ? ' Seen.' : ' Not seen.'}`.trim();\n\n  const onClose = () => {\n    window.dev() && checkReturnToInteractionEditing(true);\n    setShowFeedback(!showFeedback);\n  };\n\n  const linkData = {\n    url: props?.linkData?.url || `#${props?.navigation}` || '',\n    title: props?.linkData?.title || '',\n    target: props?.linkData?.target || '_self',\n  };\n\n  useEffect(() => {\n    if (!useGlobalNavigation) {\n      return;\n    }\n\n    const panelId = props.id;\n\n    // if this panel has props.navigation we're good and can bail\n    if (props.navigation) {\n      return;\n    }\n\n    // if globalNavigation[props.id] we update the panel props with that location\n    // maybe delete the globalNavigation prop from the parent since it'd no longer be needed\n\n    if (globalNavigation[panelId]) {\n      const panelBlock = getBlockById(panelId);\n\n      setBlockProps(panelBlock, {\n        navigation: globalNavigation[panelId],\n      });\n    }\n\n    // added empty array dependency\n  }, []);\n\n  const { r, g, b } = getHexToRgbWithDefaultFallback(\n    backgroundColor,\n    '#ffffff'\n  );\n\n  let a = panelBackgroundOpacity / 100;\n  if (!backgroundColor) {\n    a = 0;\n  }\n\n  useEffect(() => {\n    const pS = pubSub.subscribe(\n      `CLICK_AND_REVEAL_FEEDBACK_${props.parentId}`,\n      $ => {\n        if ($.id !== props.id) {\n          if ($.eventType === 'click') {\n            setShowFeedback(false);\n          }\n          return;\n        }\n\n        switch ($.eventType) {\n          case 'mouseOver': {\n            panelImg.current!.style.boxShadow = `0 0 0 2px ${lPink}`;\n            return;\n          }\n          case 'mouseOut': {\n            panelImg.current!.style.boxShadow = 'null';\n            return;\n          }\n          case 'click': {\n            setShowFeedback(true);\n            return;\n          }\n        }\n      }\n    );\n\n    return () => pS();\n  }, []);\n\n  const returnToLastFocused = () => {\n    // get the element we just had focus on\n    const findLastFocused = setInterval(() => {\n      // TODO - update this doofer to focus back on <a> or button\n\n      const lastFocused: any = document.querySelector(`#panel-${props.id}`);\n\n      if (lastFocused) {\n        clearInterval(findLastFocused);\n        lastFocused.focus();\n      }\n    }, 125);\n  };\n\n  // fixing this up\n  // was the below\n  // height: ${!!includeLabel ? '100%' : `${height}px`};\n  // changed to : height: ${!!!includeLabel ? `${height}px` : 'auto'};\n  // but. this is easier to read\n  let useFixedHeightOrAuto = 'auto';\n\n  if (includeLabel === 0) {\n    useFixedHeightOrAuto = `${height}px`;\n  }\n\n  const panel = (\n    <div>\n      <div\n        ref={panelImg}\n        id={`panel-img-${props.id}`}\n        className=\"clickAndRevealPanel\"\n        css={css`\n          position: ${includeLabel ? 'absolute' : 'relative'};\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          left: 0;\n          top: 0;\n          width: ${width}px;\n          height: ${height}px;\n\n          .chameleon-image > div,\n          .chameleon-image img:not(.zoom-image img) {\n            width: ${width}px !important;\n            height: ${height}px !important;\n          }\n\n          .zoom-image {\n            bottom: 5px;\n            right: ${5 + borderRadius / 2}px;\n            transform: scale(0.8);\n          }\n\n          ${mediaType === 0 &&\n            `\n            padding: ${window.dev() ? '10px' : '20px'};\n          `}\n\n          white-space: pre-wrap;\n          overflow-wrap: break-word;\n\n\n          background: ${\n            includePanelBackground\n              ? `rgba(${r}, ${g}, ${b}, ${a})` || backgroundColor\n              : 'transparent'\n          };\n\n          color: ${clickAndRevealPanelTextColor};\n\n          ${\n            panelOutline\n              ? `\n                border: 1px solid ${panelOutlineColor || backgroundColor};\n                border-radius: ${borderRadius}px;\n                `\n              : `border-radius: ${borderRadius}px;`\n          }\n\n          overflow: hidden;\n\n          * {\n            p,\n            li {\n              line-height: 1.2em !important;\n            }\n          }\n\n          ${headingStylesForPanelsAndCards}\n\n          cursor: pointer;\n          transition: opacity 0.2s;\n\n          ${!window.dev() &&\n            `\n          &:hover {\n            opacity: 0.8;\n          }\n          `}\n\n          &:focus {\n            // ${getButtonFocus(backgroundColor || lGrey0)}\n          }\n\n          * div {\n            color: ${clickAndRevealPanelTextColor};\n          }\n\n          @media (max-width: ${width + 30}px) {\n            position: relative !important;\n            width: 100% !important;\n            height: auto !important;\n\n            .chameleon-image > div,\n            .chameleon-image img:not(.zoom-image img) {\n              width: calc(100vw - 30px) !important;\n              height: auto !important;\n            }\n          }\n        `}\n        onKeyUp={\n          window.dev()\n            ? () => {}\n            : e => {\n                if (![' ', 'Enter'].includes(e.key) || imgZoomIsActiveElement) {\n                  return;\n                }\n\n                setShowFeedback(!showFeedback);\n              }\n        }\n      >\n        {imageText}\n      </div>\n\n      {!!showSeenState && (window.dev() || seen) && (\n        <div\n          css={css`\n            position: absolute;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            right: -22px;\n            top: -22px;\n            width: 44px;\n            height: 44px;\n            background: ${clickAndRevealShowSeenStateBackgroundColor || lGrey0};\n            border-radius: 50%;\n            pointer-events: none;\n          `}\n        >\n          <ClickAndRevealSeenTick\n            title={linkData.title || altTextForAnchorTag || ''}\n            color={clickAndRevealShowSeenStateTickColor || '#fff'}\n          />\n        </div>\n      )}\n    </div>\n  );\n\n  const panelLabel = !!includeLabel ? (\n    <div\n      id={`panel-label-${props.id}`}\n      css={css`\n        display: flex;\n        justify-content: center;\n        color: ${clickAndRevealLabelTextColor};\n        width: 100%;\n        margin: ${window.dev() ? height : height + 15}px 0 0 0;\n        cursor: auto;\n        //double up needed for editing. . .\n        * div {\n          color: ${clickAndRevealLabelTextColor};\n        }\n\n        @media (max-width: ${width + 30}px) {\n          margin: 15px 0 0 0 !important;\n        }\n      `}\n    >\n      {text}\n    </div>\n  ) : null;\n\n  return (\n    <_>\n      <PanelColumn width={width}>\n        {!useGlobalNavigation ? (\n          <button\n            id={`panel-${props.id}`}\n            css={css({\n              outline: 'none',\n              border: 'none',\n              margin: 0,\n              padding: 0,\n              background: 'none',\n\n              '&:focus-visible': {\n                [`#panel-img-${props.id}`]: {\n                  transition: 'box-shadow 0.2s',\n                  boxShadow: (getButtonFocus(\n                    focusColor || backgroundColor || lGrey0\n                  ) as string)\n                    .replace('box-shadow:', '')\n                    .trim(),\n                },\n              },\n            })}\n            onKeyUp={e => {\n              // this prevents the click from firing when typing\n              // in the a text field\n              if (window.dev()) {\n                e.preventDefault();\n                return;\n              }\n\n              const { activeElement } = document;\n\n              imgZoomIsActiveElement = [\n                'expand image',\n                'close expanded image view',\n              ].includes(String(activeElement?.ariaLabel));\n            }}\n            //\n            onClick={e => {\n              if (imgZoomIsActiveElement) {\n                return;\n              }\n\n              setShowFeedback(!showFeedback);\n            }}\n            aria-label={ariaLabel}\n            //\n          >\n            {panel}\n          </button>\n        ) : (\n          <a\n            id={`panel-${props.id}`}\n            href={window.dev() ? null : linkData.url}\n            title={linkData.title || altTextForAnchorTag}\n            target={linkData.target}\n            css={css({\n              textDecoration: 'none !important',\n\n              '&:focus': {\n                [`#panel-img-${props.id}`]: {\n                  transition: 'box-shadow 0.2s',\n                  boxShadow: (getButtonFocus(\n                    focusColor || backgroundColor || lGrey0\n                  ) as string)\n                    .replace('box-shadow:', '')\n                    .trim(),\n                },\n              },\n            })}\n            onFocus={e => {\n              // updateCardContent(e);\n            }}\n            onKeyUp={e => {\n              // this prevents the click from firing when typing\n              // in the a text field\n              if (window.dev()) {\n                e.preventDefault();\n                return;\n              }\n\n              if (e.keyCode === 32) {\n                e.currentTarget.click();\n              }\n            }}\n            onClick={e => {\n              // make sure <a> does not nav\n\n              if (window.dev()) {\n                e.preventDefault();\n              }\n\n              if (window.dev() && useGlobalNavigation) {\n                if (store.getState().focusedNodeId !== id) {\n                  setCurrentBlock({ id });\n                }\n                pubSub.publish('SET_CLICK_AND_REVEAL_GLOBAL_NAVIGATION_PANEL', {\n                  panelId: props.id,\n                });\n                return;\n              }\n\n              if (!linkData.url) {\n                alert('No navigation has been set on this panel');\n                return;\n              }\n\n              updateClickAndRevealSeen(props.id);\n            }}\n          >\n            {panel}\n          </a>\n        )}\n        {panelLabel}\n      </PanelColumn>\n\n      {showFeedback && (\n        <Modal\n          onClose={() => {\n            updateClickAndRevealSeen(props.id);\n\n            returnToLastFocused();\n            onClose();\n          }}\n        >\n          {React.cloneElement(content, {\n            key: layout,\n            layout,\n            onClose() {\n              updateClickAndRevealSeen(props.id);\n\n              returnToLastFocused();\n              onClose();\n            },\n          })}\n        </Modal>\n      )}\n    </_>\n  );\n};\n\nexport default ClickAndReveal;\n","/** @jsx jsx */\n\nimport React, { Fragment as _, useState, useRef, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext } from './interactionContext';\nimport { MediaContext } from 'components/lib/Media/Media';\n\nconst Content = ({ layout, children }) => {\n  const [mediaChanged, setMediaChanged] = useState(children.props.child);\n\n  let minHeightInDev =\n    window.dev() && [1, 3].includes(mediaChanged) ? `min-height: 50vh;` : '';\n\n  return (\n    <MediaContext.Provider\n      value={{\n        onMediaChange(child) {\n          if (mediaChanged !== child) {\n            setMediaChanged(child);\n          }\n        },\n      }}\n    >\n      <div\n        css={css`\n          position: relative;\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          width: ${layout.includes('Two') ? '50%' : '100%'};\n          margin: ${layout.includes('Two') ? '0 10px' : '10px 0'};\n          ${minHeightInDev}\n          @media (max-width: 768px) {\n            width: 100%;\n          }\n        `}\n      >\n        {children}\n      </div>\n    </MediaContext.Provider>\n  );\n};\n\nconst ClickAndRevealContent = props => {\n  const { onClose, children } = props;\n  const [columnA, columnB, btn] = children;\n\n  const { layout } = useContext(interactionContext).props;\n\n  const DOMLayout = {\n    'Two column': [columnA, columnB],\n    'Two column reversed': [columnB, columnA],\n    'One column': [columnA, columnB],\n    'One column reversed': [columnB, columnA],\n    'No image': [columnA],\n  }[layout];\n\n  return (\n    <div\n      css={css`\n        width: 100%;\n        padding: 50px;\n      `}\n    >\n      <div\n        css={css`\n          width: 100%;\n\n          ${layout.includes('Two') &&\n            `\n            display: flex;\n            \n          @media (max-width: 768px) {\n        display: block;\n          `}\n        `}\n      >\n        <Content layout={layout}>{DOMLayout[0]}</Content>\n\n        {layout !== 'No image' && (\n          <Content layout={layout}>{DOMLayout[1]}</Content>\n        )}\n      </div>\n      <div\n        css={css`\n          display: flex;\n          justify-content: center;\n          width: 100%;\n          margin: 30px 0 0 0;\n        `}\n      >\n        {React.cloneElement(btn, { onClick: () => onClose() })}\n      </div>\n    </div>\n  );\n};\n\nexport default ClickAndRevealContent;\n","/** @jsx jsx */\n\nimport { Fragment as _, memo, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport ClickAndReveals from './ClickAndReveals';\nimport ClickAndReveal from './ClickAndReveal';\nimport ClickAndRevealContent from './ClickAndRevealContent';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport Audio from 'components/lib/Audio';\nimport SVG from 'components/lib/SVG';\nimport Media, { MediaContext, IMediaContext } from 'components/lib/Media';\nimport { imgPlaceholders } from 'components/lib/Image';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport Container from 'components/Layouts/ContainerLogical';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport continueBtn from '../ContinueBtn/continueBtn_v2';\nimport { Block } from '@chameleoncreator/creator-app';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport getMediaParent from 'services/apiHelpers/getMediaParent';\nimport shouldUpdate from 'services/shouldUpdate';\nimport imagePlaceholder from 'assets/clickToRevealMagicMan.png';\nimport Embed from 'components/lib/Embed';\nimport PDF from 'components/lib/PDF';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport { ImageContext } from 'components/lib/Image';\nimport modalPlaceholder from 'assets/CC_Sortation_Placeholder.png';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: ({ children, ...props }) => (\n    <EditableText {...{ ...props, className: 'click-and-reveal-text' }} />\n  ),\n  InteractionColumn: ({ children, ...props }) => {\n    const interactionContext = useContext(InteractionContext);\n    const { includeAdditionalTextField } = interactionContext.props;\n\n    const [clickAndReveals, txt] = children;\n\n    if (!includeAdditionalTextField) {\n      return clickAndReveals;\n    }\n\n    return children;\n  },\n  ClickAndReveals,\n  ClickAndReveal({ children, ...props }) {\n    return (\n      <ImageContext.Provider\n        value={{\n          editWrapperType: 1,\n          editWrapperSize: '65%',\n          editWrapperUseIcon: false,\n          placeholder: imagePlaceholder,\n          //\n          canUpdateContainerHeight: false,\n        }}\n      >\n        <ClickAndReveal {...props}>{children}</ClickAndReveal>\n      </ImageContext.Provider>\n    );\n  },\n\n  Feedback: ({ children, ...props }) => children,\n  Content: ({ children, ...props }) => {\n    const { layout = '' } = props;\n\n    return (\n      <span\n        css={css({\n          width: '100%',\n          height: '100%',\n          '[class*=\"OpenPDF\"]': {\n            ...(layout.toLowerCase().includes('one') && {\n              img: {\n                maxHeight: '50vh !important',\n              },\n            }),\n          },\n        })}\n      >\n        <ImageContext.Provider\n          value={{\n            editWrapperType: 0,\n            editWrapperSize: '100%',\n            placeholder: modalPlaceholder,\n            padding: 5,\n          }}\n        >\n          <ClickAndRevealContent {...props}>{children}</ClickAndRevealContent>\n        </ImageContext.Provider>\n      </span>\n    );\n  },\n  ColumnRowA: ({ children, ...props }) => children,\n  ColumnRowB: ({ children, ...props }) => children,\n  Image: ({ children, ...props }) => {\n    const mediaContext = useContext(MediaContext) as IMediaContext;\n    const { isAdditionalMedia } = mediaContext;\n\n    const mediaParent = getMediaParent(props.id);\n\n    return mediaParent ? (\n      <Image\n        {...{\n          ...props,\n          placeholder: imgPlaceholders[1],\n        }}\n      />\n    ) : (\n      <Image {...{ ...props, usePlaceholderValue: true }} />\n    );\n  },\n  Video,\n  Audio,\n  Transcript: () => null,\n  SVG: ({ children, ...props }) => (\n    <SVG {...{ ...props, editWrapperType: 1 }} />\n  ),\n  Media,\n  Embed,\n  PDF,\n  OpenPDF: ({ children, ...props }) => {\n    return <OpenPDF {...(props as any)}>{children}</OpenPDF>;\n  },\n  TwoColumnLayout: TwoColumnLayout,\n  SingleColumnLayout: SingleColumnLayout,\n  ContinueButton: continueBtn,\n  EditableButton: EditableBtn,\n};\n\nconst ClickAndRevealDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{ ...interactionBlock, updateItemsSeen: null }}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </InteractionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default ClickAndRevealDisplay;\n","import ClickAndRevealDisplay from './ClickAndRevealDisplay';\n\nexport default ClickAndRevealDisplay;\n","import { createContext } from 'react';\r\n\r\nexport const interactionContext = createContext<any>(null);\r\n","/** @jsx jsx */\r\n\r\nimport React, { Fragment as _, useContext, useRef } from 'react';\r\nimport { css, jsx } from '@emotion/core';\r\nimport { colors } from 'styles/variables';\r\nimport { interactionContext } from './interactionContext';\r\nimport { unlockInteraction } from 'services/unlockInteraction';\r\nimport { Box } from 'theme-ui';\r\nimport EditMarker from 'components/UI/EditMarker';\r\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\r\nimport { useSelector } from 'react-redux';\r\n\r\nconst { lPink, lGrey2 } = colors;\r\n\r\nconst EditCardWrapper = ({ id }) => {\r\n  // , selected\r\n  // children\r\n\r\n  const focusedNodeId = useSelector((state: any) => state.focusedNodeId);\r\n  const selected = focusedNodeId === id;\r\n\r\n  const gutter = 9;\r\n\r\n  return (\r\n    <div\r\n      css={css({\r\n        position: 'absolute',\r\n        left: gutter,\r\n        top: gutter,\r\n        width: `calc(100% + ${-(gutter * 2)}px)`,\r\n        height: `calc(100% + ${-(gutter * 2)}px)`,\r\n        // margin: gutter,\r\n\r\n        // borderRadius: `${selected ? '24px' : 0} 24px 24px 24px`,\r\n        boxShadow: `${selected ? `0 0 0 1px ${lPink}` : '0 0 0 1px lightGrey'}`,\r\n        ...(!selected && {\r\n          cursor: 'pointer',\r\n\r\n          '&:hover': {\r\n            boxShadow: `0 0 0 1px ${lPink}`,\r\n          },\r\n        }),\r\n        transition: 'box-shadow 0.2s, border-radius 0.2s',\r\n      })}\r\n      onClick={e => {\r\n        e.stopPropagation();\r\n\r\n        if (selected) return;\r\n\r\n        // console.log({ mediaParentId });\r\n\r\n        setCurrentBlock({ id });\r\n      }}\r\n    >\r\n      {/* {children} */}\r\n\r\n      {!selected && (\r\n        <EditMarker\r\n          style={{\r\n            // left: 0,\r\n            // transform: 'scaleX(-1)',\r\n            right: 0,\r\n            zIndex: '2147483647',\r\n          }}\r\n        />\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default EditCardWrapper;\r\n","const arrayToGridLike = (arr: any[], numColumns: number) => {\r\n  if (numColumns < 1) {\r\n    console.warn(`${arr} > ${numColumns} : WILL NOT PRODUCE A ' GRID ' !!!`);\r\n    return arr;\r\n  }\r\n  //\r\n\r\n  const _: any[] = [...arr];\r\n  const $: any[] = [];\r\n\r\n  while (_.length) {\r\n    $.push(_.splice(0, numColumns));\r\n  }\r\n\r\n  return $;\r\n};\r\n\r\nexport default arrayToGridLike;\r\n","/** @jsx jsx */\r\n\r\nimport React, { Fragment as _, useEffect, useRef, FC, Children } from 'react';\r\nimport { css, jsx } from '@emotion/core';\r\nimport isIE from 'services/isIE';\r\nimport { Box } from 'theme-ui';\r\nimport arrayToGridLike from 'services/arrayToGridLike';\r\n\r\nconst Masonry: FC<{\r\n  maxColumns: number;\r\n  maxGridWidth?: number;\r\n  minCellWidth?: number;\r\n  images?: string[];\r\n  uniformHeight?: boolean;\r\n}> = props => {\r\n  // these are not the right vars for the right now\r\n  const {\r\n    maxColumns,\r\n    maxGridWidth = window.innerWidth,\r\n    images = [],\r\n    uniformHeight = false,\r\n    children,\r\n  } = props;\r\n\r\n  const container = useRef<HTMLDivElement>(null);\r\n  const cells = useRef<HTMLDivElement[]>([]);\r\n  const imgsLoaded = useRef<boolean>(false);\r\n  //\r\n\r\n  useEffect(() => {\r\n    const imgsLoadedProgress: string[] = [];\r\n\r\n    if (!images.length) {\r\n      imgsLoaded.current = true;\r\n      return;\r\n    }\r\n\r\n    images.forEach((src: string) => {\r\n      const img = new Image();\r\n      img.src = src;\r\n\r\n      img.onload = () => {\r\n        imgsLoadedProgress.push(src);\r\n\r\n        if (imgsLoadedProgress.length === images.length) {\r\n          imgsLoaded.current = true;\r\n        }\r\n      };\r\n    });\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    if (!container.current) {\r\n      return;\r\n    }\r\n\r\n    const cellMinWidth = maxGridWidth / maxColumns;\r\n\r\n    let frame;\r\n    let callTickFromResize;\r\n\r\n    const tick = (e?: undefined) => {\r\n      if (!container.current) {\r\n        return;\r\n      }\r\n\r\n      // console.log('ticking. . .');\r\n\r\n      let tallestCell;\r\n\r\n      if (uniformHeight) {\r\n        const cellHeights: number[] = cells.current.map(\r\n          (cell: HTMLDivElement) => {\r\n            cell.style.height = 'auto';\r\n            return cell.offsetHeight;\r\n          }\r\n        );\r\n\r\n        tallestCell = cells.current[\r\n          cellHeights.indexOf(Math.max(...cellHeights))\r\n        ] as HTMLDivElement;\r\n      }\r\n\r\n      let columns = Math.min(\r\n        Math.round(container.current.offsetWidth / cellMinWidth),\r\n        maxColumns\r\n      );\r\n\r\n      // fall back to 1 column\r\n      const grid = arrayToGridLike(cells.current, columns || 1);\r\n\r\n      grid.forEach((key, rowIndex) => {\r\n        grid[rowIndex].forEach((child, columnIndex) => {\r\n          const currentCell = grid[rowIndex][columnIndex];\r\n\r\n          if (!currentCell) {\r\n            return;\r\n          }\r\n\r\n          currentCell.style.top = '0px';\r\n\r\n          const width = Math.round(container.current!.offsetWidth / columns);\r\n\r\n          currentCell.style.left = `${width * columnIndex}px`;\r\n          currentCell.style.width = `${width}px`;\r\n\r\n          if (uniformHeight) {\r\n            // we've calculated which cell is the tallest\r\n            // update all other cells to match its height\r\n\r\n            const updatedCells = [...cells.current];\r\n            updatedCells.splice(cells.current.indexOf(tallestCell), 1);\r\n            updatedCells.forEach(cell => {\r\n              cell.style.height = `${tallestCell.offsetHeight}px`;\r\n            });\r\n          }\r\n\r\n          if (rowIndex > 0) {\r\n            const cellAboveCurrentCell = grid[rowIndex - 1][columnIndex];\r\n\r\n            const top =\r\n              cellAboveCurrentCell.offsetTop +\r\n              cellAboveCurrentCell.offsetHeight;\r\n\r\n            currentCell.style.top = `${top}px`;\r\n          }\r\n        });\r\n      });\r\n\r\n      // setting the height of the container\r\n      const baselines = cells.current.map((cell: HTMLDivElement) => {\r\n        return cell.offsetTop + cell.offsetHeight;\r\n      });\r\n      const baseline = Math.max(...baselines);\r\n\r\n      container.current.style.minHeight = `${baseline}px`;\r\n\r\n      //\r\n      //\r\n      // in dev we're just gonna keep the ticking going\r\n      // too many cases ( component updates ) to be checking for when to kill it\r\n      // maybe use the slower frameRated setInterval ?\r\n\r\n      if (window.dev && window.dev()) {\r\n        clearInterval(frame);\r\n        frame = setInterval(() => tick(), 1000 / 24);\r\n\r\n        // frame = requestAnimationFrame(() => tick());\r\n        return;\r\n      }\r\n\r\n      // if we resize the browser window we no longer need to ' poll '\r\n      if (e) {\r\n        return;\r\n      }\r\n\r\n      clearInterval(frame);\r\n      frame = setInterval(() => tick(), 1000 / 24);\r\n\r\n      // frame = requestAnimationFrame(() => tick());\r\n    };\r\n\r\n    callTickFromResize = e => {\r\n      tick(e);\r\n    };\r\n\r\n    tick();\r\n    //\r\n    window.addEventListener('resize', callTickFromResize);\r\n\r\n    return () => {\r\n      // cancelAnimationFrame(frame);\r\n      clearInterval(frame);\r\n\r\n      window.removeEventListener('resize', callTickFromResize);\r\n    };\r\n  }, []);\r\n\r\n  return (\r\n    <Box\r\n      ref={container}\r\n      sx={{\r\n        position: 'relative',\r\n        width: '100%',\r\n        //\r\n        ...(isIE() && {\r\n          width: 'calc(100vw - 30px)',\r\n          maxWidth: 1100,\r\n        }),\r\n      }}\r\n    >\r\n      {Children.map(children, (child, index) => {\r\n        return (\r\n          <Box\r\n            key={`cell-${index}`}\r\n            ref={(node: HTMLDivElement) => {\r\n              if (!node) {\r\n                return;\r\n              }\r\n\r\n              if (!cells.current.includes(node)) {\r\n                cells.current.push(node);\r\n              }\r\n            }}\r\n            sx={{\r\n              position: 'absolute',\r\n            }}\r\n          >\r\n            {child}\r\n          </Box>\r\n        );\r\n      })}\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default Masonry;\r\n","import isIE from 'services/isIE';\r\nimport arrayToGridLike from 'services/arrayToGridLike';\r\n\r\nexport const grids = (grid, settings: any = {}) => {\r\n  const { numColumns = 3, children } = settings;\r\n\r\n  const minWidth = Math.round(1100 / numColumns + 40);\r\n\r\n  const uniformHeightBreakpoints = Array.from({ length: numColumns })\r\n    .map((_, i) => i)\r\n    .reverse()\r\n    .reduce((acc, curr, i) => {\r\n      return {\r\n        ...acc,\r\n        [`@media (max-width: ${minWidth * (curr + 1)}px)`]: {\r\n          gridTemplateColumns: `repeat(${curr + 1}, 1fr)`,\r\n\r\n          ...(isIE() && {\r\n            // display: '-ms-grid',\r\n            msGridColumns: `(1fr)[${curr + 1}]`,\r\n          }),\r\n        },\r\n      };\r\n    }, {});\r\n\r\n  const getUniformHeightsLayout = () => {\r\n    const cells = arrayToGridLike(children, numColumns);\r\n\r\n    let gridCellCounter = -1;\r\n\r\n    const uniformHeightsLayout = cells\r\n      .map((row, rowIndex) => {\r\n        return cells[rowIndex].reduce((acc, curr, index) => {\r\n          const gridCell = `.grid-cell-${(gridCellCounter += 1)}`;\r\n\r\n          return {\r\n            ...acc,\r\n            [gridCell]: {\r\n              msGridColumn: index + 1,\r\n              msGridRow: rowIndex + 1,\r\n            },\r\n          };\r\n        }, {});\r\n      })\r\n      .reduce((acc, curr, index) => {\r\n        return {\r\n          ...acc,\r\n          ...curr,\r\n        };\r\n      }, {});\r\n\r\n    return { ...uniformHeightsLayout };\r\n  };\r\n\r\n  const getBannerColumnsLayout = () => {\r\n    const newChildren = [...children];\r\n    newChildren.splice(0, 1);\r\n\r\n    const cells = arrayToGridLike(newChildren, numColumns);\r\n\r\n    let gridCellCounter = 0;\r\n\r\n    const bannerColumnsLayout = cells\r\n      .map((row, rowIndex) => {\r\n        return cells[rowIndex].reduce((acc, curr, index) => {\r\n          const gridCell = `.grid-cell-${(gridCellCounter += 1)}`;\r\n\r\n          return {\r\n            ...acc,\r\n            [gridCell]: {\r\n              gridColumn: index + 1,\r\n              gridRow: rowIndex + 2,\r\n\r\n              msGridColumn: index + 1,\r\n              msGridRow: rowIndex + 2,\r\n            },\r\n          };\r\n        }, {});\r\n      })\r\n      .reduce((acc, curr, index) => {\r\n        return {\r\n          ...acc,\r\n          ...curr,\r\n        };\r\n      }, {});\r\n\r\n    return { ...bannerColumnsLayout };\r\n  };\r\n\r\n  return {\r\n    uniformHeight: {\r\n      display: 'grid',\r\n      gridTemplateColumns: `repeat(${numColumns}, minmax(215px, 1fr))`,\r\n\r\n      ...(isIE() && {\r\n        display: '-ms-grid',\r\n        msGridColumns: `(1fr)[${numColumns}]`,\r\n\r\n        ...getUniformHeightsLayout(),\r\n      }),\r\n\r\n      ...uniformHeightBreakpoints,\r\n    },\r\n    '2/3HeroImage': {\r\n      display: 'grid',\r\n      gridTemplateColumns: 'repeat(3, 1fr)',\r\n      gridTemplateRows: `repeat(${children.length - 1})`,\r\n\r\n      ...(isIE() && {\r\n        display: '-ms-grid',\r\n        msGridColumns: '1fr 1fr 1fr',\r\n      }),\r\n\r\n      width: '100%',\r\n\r\n      '.grid-cell-0': {\r\n        gridColumn: '1/3',\r\n        gridRow: `1/${children.length}`,\r\n\r\n        msGridColumnSpan: 2,\r\n        msGridRowSpan: 2,\r\n      },\r\n\r\n      ...children.reduce((acc, curr, index) => {\r\n        return {\r\n          ...acc,\r\n          [`.grid-cell-${index + 1}`]: {\r\n            gridColumn: 3,\r\n            gridRow: index + 1,\r\n\r\n            msGridColumn: 3,\r\n            msGridRow: index + 1,\r\n          },\r\n        };\r\n      }, {}),\r\n\r\n      '@media (max-width: 768px)': {\r\n        display: 'block',\r\n      },\r\n    },\r\n    bannerColumns: {\r\n      display: 'grid',\r\n      gridTemplateColumns: `repeat(${numColumns}, 1fr)`,\r\n      // 3\r\n      gridTemplateRows: `repeat(${(children.length - 1) / numColumns})`,\r\n      // 3\r\n\r\n      ...(isIE() && {\r\n        display: '-ms-grid',\r\n        msGridColumns: Array.from({ length: numColumns })\r\n          .map((entry, index: number) => {\r\n            return '1fr';\r\n          })\r\n          .join(' '),\r\n      }),\r\n\r\n      width: '100%',\r\n\r\n      '.grid-cell-0': {\r\n        gridColumn: `1/${numColumns + 1}`,\r\n        gridRow: 1,\r\n        msGridColumnSpan: numColumns,\r\n        msGridRow: 1,\r\n      },\r\n\r\n      ...getBannerColumnsLayout(),\r\n\r\n      '@media (max-width: 768px)': {\r\n        display: 'block',\r\n      },\r\n    },\r\n  }[grid];\r\n};\r\n","/** @jsx jsx */\r\n\r\nimport React, {\r\n  Fragment as _,\r\n  useState,\r\n  useContext,\r\n  useEffect,\r\n  useRef,\r\n  FC,\r\n  Children,\r\n} from 'react';\r\nimport { css, jsx } from '@emotion/core';\r\nimport { colors } from 'styles/variables';\r\nimport { interactionContext } from './interactionContext';\r\nimport { unlockInteraction } from 'services/unlockInteraction';\r\nimport { Box } from 'theme-ui';\r\nimport EditMarker from 'components/UI/EditMarker';\r\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\r\nimport { useSelector } from 'react-redux';\r\nimport EditCardWrapper from './EditCardWrapper';\r\n// import Masonry from 'masonry-layout';\r\nimport Masonry from './Masonry';\r\nimport { grids } from './grids';\r\n\r\nconst { lPink, lGrey2 } = colors;\r\n\r\nconst ContentCards: FC = ({ children, ...props }) => {\r\n  const context: any = useContext(interactionContext);\r\n  let { grid, numColumns, uniformHeight } = context.props;\r\n  const [init, setInit] = useState(false);\r\n  const gridContainer = useRef<HTMLDivElement>(null);\r\n\r\n  const updateCounter = useRef<number>(0);\r\n  const masonryContainer = useRef<HTMLSpanElement>(null);\r\n  const cardOrder = useRef<string>('');\r\n  cardOrder.current = Children.map(children, (child: any, index) => {\r\n    const { props } = child.props.children[1];\r\n\r\n    const { id } = props;\r\n    return id;\r\n  }).join();\r\n\r\n  // console.log(cardOrder.current);\r\n\r\n  const images: string[] = [];\r\n\r\n  const imagesInCards = cards => {\r\n    [...cards].forEach((card: React.ReactElement) => {\r\n      if (card && card.props) {\r\n        if (card.props.child === 1) {\r\n          !images.includes(card.props.src) && images.push(card.props.src);\r\n        }\r\n\r\n        if (card.props.children && card.props.children.length) {\r\n          imagesInCards(card.props.children);\r\n        }\r\n      }\r\n    });\r\n  };\r\n\r\n  imagesInCards(children);\r\n\r\n  if (['masonry', 'uniformHeight'].includes(grid)) {\r\n    return (\r\n      <Masonry\r\n        key={`masonry_${Children.count(children)}_${numColumns}_${grid}_${\r\n          cardOrder.current\r\n        }`}\r\n        maxColumns={numColumns}\r\n        maxGridWidth={1100}\r\n        minCellWidth={320}\r\n        images={images}\r\n        uniformHeight={grid === 'uniformHeight'}\r\n      >\r\n        {Children.map(children, (child: any, index: number) => {\r\n          return (\r\n            <Box\r\n              key={child.props.id}\r\n              // className=\"grid-item\"\r\n              sx={{\r\n                position: 'relative',\r\n                padding: '20px',\r\n                ...(grid === 'uniformHeight' && {\r\n                  height: '100%',\r\n                  '.card': {\r\n                    height: '100%',\r\n                    // outline: '2px solid red',\r\n                  },\r\n\r\n                  //\r\n                }),\r\n              }}\r\n            >\r\n              {window.dev && window.dev() && (\r\n                <EditCardWrapper id={child.props.id} />\r\n              )}\r\n              {React.cloneElement(child, {\r\n                parentId: (props as any).id,\r\n                className: `card-${index}`,\r\n                ...(grid === 'bannerColumns' &&\r\n                  {\r\n                    //\r\n                  }),\r\n              })}\r\n            </Box>\r\n          );\r\n        })}\r\n      </Masonry>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <Box\r\n      useRef={gridContainer}\r\n      sx={{\r\n        // outline: '2px solid lime',\r\n        ...css(grids(grid, { numColumns, children })),\r\n        // ...grids(grid, { numColumns, children }),\r\n        width: '100%',\r\n        height: '100%',\r\n      }}\r\n    >\r\n      {Children\r\n        // .filter((child: any, index: number) => {\r\n        //   return (\r\n        //     ['masonry', 'uniformHeight'].includes(grid) || index < gridCellCount\r\n        //   );\r\n        // })\r\n        .map(children, (child: any, index: number) => {\r\n          const className = `grid-cell-${index}`;\r\n\r\n          // const msGridColumn = ((numColumns + index) % numColumns) + 1;\r\n          // const msGridRow = Math.trunc(index / numColumns) + 1;\r\n\r\n          return (\r\n            <Box\r\n              key={className}\r\n              className={className}\r\n              sx={{\r\n                position: 'relative',\r\n                padding: '20px',\r\n\r\n                ...(['uniformHeight'].includes(grid) && {\r\n                  '> div': {\r\n                    height: '100%',\r\n                  },\r\n\r\n                  // msGridColumn,\r\n                  // msGridRow,\r\n                }),\r\n\r\n                ...(['bannerColumns'].includes(grid) && {\r\n                  // '> div:not(:first-child)': {\r\n                  '> div': {\r\n                    height: '100%',\r\n                  },\r\n                }),\r\n              }}\r\n            >\r\n              {window.dev && window.dev() && (\r\n                <EditCardWrapper id={child.props.id} />\r\n              )}\r\n              {React.cloneElement(child, {\r\n                parentId: (props as any).id,\r\n                className: `card-${index}`,\r\n                ...(grid === 'bannerColumns' &&\r\n                  index === 0 && {\r\n                    checkBannerColumnsForDefaultImage: true,\r\n                  }),\r\n              })}\r\n            </Box>\r\n          );\r\n        })}\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default ContentCards;\r\n","/** @jsx jsx */\r\n\r\nimport { Fragment as _, useContext, useEffect } from 'react';\r\nimport { css as _css } from 'emotion';\r\nimport { jsx, css } from '@emotion/core';\r\nimport setBlockProps from 'services/apiHelpers/setBlockProps';\r\nimport getBlockById from 'services/apiHelpers/getBlockById';\r\nimport { interactionContext } from './interactionContext';\r\nimport { Box } from 'theme-ui';\r\nimport { useSelector } from 'react-redux';\r\nimport { contentCard_default } from 'factories/interactions/contentcard';\r\nimport hexToRgb, { getHexToRgbWithDefaultFallback } from 'services/hexToRGB';\r\n\r\nconst Text = props => {\r\n  const { sx = {}, children } = props;\r\n\r\n  return (\r\n    <Box className=\"text\" sx={sx}>\r\n      {children}\r\n    </Box>\r\n  );\r\n};\r\n\r\nconst ButtonWrapper = ({ sx = {}, children }) => {\r\n  return (\r\n    <Box\r\n      className=\"btn\"\r\n      sx={{\r\n        display: 'flex',\r\n        justifyContent: 'center',\r\n        width: '100%',\r\n        margin: '15px 0 20px 0',\r\n        padding: '0 10px',\r\n\r\n        a: {\r\n          minWidth: 'calc(100% - 20px)',\r\n        },\r\n\r\n        ...(window.dev() && {\r\n          '> div': {\r\n            //\r\n            // so the editWrapper behaves\r\n            minWidth: '100%',\r\n          },\r\n        }),\r\n        //\r\n        ...sx,\r\n      }}\r\n    >\r\n      {children}\r\n    </Box>\r\n  );\r\n};\r\n\r\nconst ContentCard = ({ children, ...props }) => {\r\n  //\r\n\r\n  let [media, text, btn] = children;\r\n\r\n  // the order these are in from the factory :\r\n  // Text\r\n  // Image\r\n  // Video\r\n  // SVG\r\n  // Embed\r\n  // Audio\r\n  // PDF\r\n  const medias = ['text', 'image', 'video', 'svg', 'embed', 'audio', 'pdf'];\r\n  const mediaIndex = media?.props?.child;\r\n\r\n  const context = useContext(interactionContext) as any;\r\n\r\n  const { id } = props as any;\r\n  const block = getBlockById(id);\r\n\r\n  // get the props directly off the block so updates happen\r\n  const { selected, _props } = useSelector((state: any) => {\r\n    return {\r\n      selected: id === state.focusedNodeId,\r\n      _props: block.props,\r\n    };\r\n  });\r\n\r\n  let {\r\n    includeCardBackground = true,\r\n    contentCardBackgroundColor,\r\n    contentcardBackgroundOpacity = 100,\r\n    contentCardPanelTextColor,\r\n    contentCardContentTextColor,\r\n    width,\r\n    height,\r\n    borderRadius,\r\n    outline = false,\r\n    borderColor,\r\n    imagePosition,\r\n    includeText,\r\n    includeButton = true,\r\n    includeShadow,\r\n    gridCell,\r\n    className,\r\n    uniformHeight = false,\r\n  } = {\r\n    ...(context.props as any),\r\n    ...{\r\n      //\r\n      ..._props,\r\n      ...(window.dev && window.dev() && selected && _props),\r\n    },\r\n  } as any;\r\n\r\n  let mediaPadding: string | undefined;\r\n\r\n  if (medias[mediaIndex]) {\r\n    mediaPadding = {\r\n      text: window.dev && window.dev() ? '10px' : '20px 20px 0 20px',\r\n      pdf: window.dev && window.dev() ? '15px' : '0',\r\n      undefined: '0',\r\n    }[medias[mediaIndex]];\r\n  }\r\n\r\n  if (!mediaPadding) {\r\n    mediaPadding = '0';\r\n  }\r\n\r\n  const textMargin = window.dev && window.dev() ? '10px' : '20px';\r\n\r\n  const mediaBorderRadius =\r\n    !includeCardBackground && !outline && !includeShadow\r\n      ? {\r\n          borderRadius,\r\n          overflow: 'hidden',\r\n        }\r\n      : {};\r\n\r\n  const { r, g, b } = getHexToRgbWithDefaultFallback(\r\n    contentCardBackgroundColor,\r\n    '#ffffff'\r\n  );\r\n\r\n  let a = contentcardBackgroundOpacity / 100;\r\n  if (!contentCardBackgroundColor) {\r\n    a = 0;\r\n  }\r\n\r\n  return (\r\n    <Box\r\n      id={`card_${id}`}\r\n      className={'card' || className}\r\n      sx={{\r\n        display: 'flex',\r\n        flexDirection: 'column',\r\n        justifyContent: 'space-between',\r\n\r\n        width: '100%',\r\n        background: includeCardBackground\r\n          ? `rgba(${r}, ${g}, ${b}, ${a})` || contentCardBackgroundColor\r\n          : 'transparent',\r\n        borderRadius,\r\n        ...(includeShadow && {\r\n          boxShadow: '0px 0px 10px rgba(13, 16, 40, 0.15)',\r\n        }),\r\n\r\n        ...(outline && {\r\n          border: `1px solid ${borderColor}`,\r\n        }),\r\n\r\n        overflow: 'hidden',\r\n\r\n        div: {\r\n          color: contentCardContentTextColor,\r\n        },\r\n\r\n        '.video-player-container': {\r\n          margin: 0,\r\n        },\r\n\r\n        '.media': {\r\n          display: 'flex',\r\n          justifyContent: 'center',\r\n          alignItems: 'center',\r\n        },\r\n      }}\r\n    >\r\n      {imagePosition === 'top' && (\r\n        <_>\r\n          <span>\r\n            <Box\r\n              className=\"media\"\r\n              sx={{\r\n                width: '100%',\r\n                padding: mediaPadding,\r\n                ...mediaBorderRadius,\r\n              }}\r\n            >\r\n              {media}\r\n            </Box>\r\n            {includeText && (\r\n              <Text\r\n                sx={{\r\n                  margin: textMargin,\r\n                }}\r\n              >\r\n                {text}\r\n              </Text>\r\n            )}\r\n          </span>\r\n          {includeButton && <ButtonWrapper>{btn}</ButtonWrapper>}\r\n        </_>\r\n      )}\r\n\r\n      {imagePosition === 'right' && (\r\n        <Box\r\n          sx={{\r\n            display: 'flex',\r\n            flex: 1,\r\n            flexDirection: 'column',\r\n            justifyContent: 'space-between',\r\n          }}\r\n        >\r\n          <Box\r\n            sx={{\r\n              display: 'flex',\r\n\r\n              '@media (max-width: 768px)': {\r\n                flexDirection: 'column',\r\n              },\r\n            }}\r\n          >\r\n            {includeText && (\r\n              <Text\r\n                sx={{\r\n                  display: 'flex',\r\n                  alignItems: 'center',\r\n                  flex: 1,\r\n                  margin: textMargin,\r\n                }}\r\n              >\r\n                {text}\r\n              </Text>\r\n            )}\r\n            <Box\r\n              className=\"media\"\r\n              sx={{\r\n                flex: 1,\r\n                padding: mediaPadding,\r\n                ...mediaBorderRadius,\r\n\r\n                '@media (max-width: 768px)': {\r\n                  padding: '20px 0',\r\n\r\n                  img: {\r\n                    maxHeight: '50vh !important',\r\n                  },\r\n                },\r\n              }}\r\n            >\r\n              {media}\r\n            </Box>\r\n          </Box>\r\n          {includeButton && <ButtonWrapper>{btn}</ButtonWrapper>}\r\n        </Box>\r\n      )}\r\n\r\n      {imagePosition === 'bottom' && (\r\n        <_>\r\n          <span>\r\n            {includeText && <Text sx={{ margin: textMargin }}>{text}</Text>}\r\n            <Box\r\n              className=\"media\"\r\n              sx={{\r\n                width: '100%',\r\n                padding: mediaPadding,\r\n                ...mediaBorderRadius,\r\n              }}\r\n            >\r\n              {media}\r\n            </Box>\r\n          </span>\r\n          {includeButton && <ButtonWrapper>{btn}</ButtonWrapper>}\r\n        </_>\r\n      )}\r\n\r\n      {imagePosition === 'left' && (\r\n        <Box\r\n          sx={{\r\n            display: 'flex',\r\n            flex: 1,\r\n            flexDirection: 'column',\r\n            justifyContent: 'space-between',\r\n          }}\r\n        >\r\n          <Box\r\n            sx={{\r\n              display: 'flex',\r\n\r\n              '@media (max-width: 768px)': {\r\n                flexDirection: 'column',\r\n              },\r\n            }}\r\n          >\r\n            <Box\r\n              className=\"media\"\r\n              sx={{\r\n                flex: 1,\r\n                padding: mediaPadding,\r\n                ...mediaBorderRadius,\r\n\r\n                '@media (max-width: 768px)': {\r\n                  padding: '20px 0',\r\n\r\n                  img: {\r\n                    maxHeight: '50vh !important',\r\n                  },\r\n                },\r\n              }}\r\n            >\r\n              {media}\r\n            </Box>\r\n            {includeText && (\r\n              <Text\r\n                sx={{\r\n                  display: 'flex',\r\n                  alignItems: 'center',\r\n                  flex: 1,\r\n                  margin: textMargin,\r\n                }}\r\n              >\r\n                {text}\r\n              </Text>\r\n            )}\r\n          </Box>\r\n          {includeButton && <ButtonWrapper>{btn}</ButtonWrapper>}\r\n        </Box>\r\n      )}\r\n\r\n      {imagePosition === 'full' && (\r\n        <Box\r\n          className=\"media\"\r\n          sx={{\r\n            width: '100%',\r\n            height: '100%',\r\n\r\n            '*': {\r\n              width: '100%',\r\n              height: '100%',\r\n            },\r\n          }}\r\n        >\r\n          {media}\r\n        </Box>\r\n      )}\r\n\r\n      {imagePosition === 'none' && (\r\n        <Box>\r\n          <Text sx={{ margin: `20px ${textMargin}` }}>{text}</Text>\r\n          {includeButton && <ButtonWrapper>{btn}</ButtonWrapper>}\r\n        </Box>\r\n      )}\r\n    </Box>\r\n  );\r\n};\r\n\r\nexport default ContentCard;\r\n","/** @jsx jsx */\r\n\r\nimport React, { Fragment as _, memo, useMemo, useContext } from 'react';\r\nimport { css, jsx } from '@emotion/core';\r\nimport EditableText from 'components/lib/EditableText';\r\nimport ContentCards from './ContentCards';\r\nimport ContentCard from './ContentCard';\r\nimport renderBlock from 'services/apiHelpers/renderBlock';\r\nimport { Row, Column, Button, Box } from '@chameleoncreator/creator-ui';\r\nimport Image from 'components/lib/Image';\r\nimport Video from 'components/lib/Video';\r\nimport Audio from 'components/lib/Audio';\r\nimport SVG from 'components/lib/SVG';\r\nimport Embed from 'components/lib/Embed';\r\nimport Media, { MediaContext, IMediaContext } from 'components/lib/Media';\r\nimport { interactionContext as InteractionContext } from './interactionContext';\r\nimport Container from 'components/Layouts/ContainerLogical';\r\nimport getBlockById from 'services/apiHelpers/getBlockById';\r\nimport continueBtn from '../ContinueBtn/continueBtn_v2';\r\nimport { Block } from '@chameleoncreator/creator-app';\r\nimport EditableBtn from 'components/lib/EditableBtn';\r\nimport PDF from 'components/lib/PDF';\r\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\r\nimport shouldUpdate from 'services/shouldUpdate';\r\nimport { imgPlaceholders } from 'components/lib/Image';\r\nimport { ImageContext } from 'components/lib/Image';\r\n\r\nconst SingleColumnLayout = Row.bind({}) as any;\r\nSingleColumnLayout.defaultProps = {\r\n  ...(Row as any).defaultProps,\r\n  flexDirection: 'column',\r\n};\r\n\r\nconst TwoColumnLayout = Row.bind({}) as any;\r\nTwoColumnLayout.defaultProps = {\r\n  ...(Row as any).defaultProps,\r\n  flexDirection: 'row',\r\n};\r\n\r\nconst Components = {\r\n  Row,\r\n  Column,\r\n  Text: EditableText,\r\n  InteractionColumn: ({ children, ...props }) => {\r\n    const interactionContext = useContext(InteractionContext);\r\n    const { includeAdditionalTextField } = interactionContext.props;\r\n\r\n    const [cards, txt] = children;\r\n\r\n    if (!includeAdditionalTextField) {\r\n      return cards;\r\n    }\r\n\r\n    return (\r\n      <_>\r\n        {cards}\r\n        <div\r\n          style={{\r\n            margin: '20px 0 0 0',\r\n          }}\r\n        >\r\n          {txt}\r\n        </div>\r\n      </_>\r\n    );\r\n  },\r\n  ContentCards,\r\n  ContentCard({ children, ...props }) {\r\n    return (\r\n      <ImageContext.Provider\r\n        value={{\r\n          editWrapperType: 1,\r\n          editWrapperSize: '90%',\r\n          placeholder: imgPlaceholders[0],\r\n        }}\r\n      >\r\n        <ContentCard {...props}>{children}</ContentCard>\r\n      </ImageContext.Provider>\r\n    );\r\n  },\r\n  ColumnRowA: ({ children, ...props }) => children,\r\n  ColumnRowB: ({ children, ...props }) => children,\r\n\r\n  Image: ({ children, ...props }) => {\r\n    const mediaContext = useContext(MediaContext) as IMediaContext;\r\n    const { isAdditionalMedia } = mediaContext;\r\n\r\n    return (\r\n      <Image\r\n        {...{\r\n          ...props,\r\n          placeholder: imgPlaceholders[1],\r\n        }}\r\n      />\r\n    );\r\n  },\r\n  Video,\r\n  Audio,\r\n  Transcript: () => null,\r\n  SVG,\r\n  PDF,\r\n  OpenPDF,\r\n  Embed,\r\n  Media,\r\n  TwoColumnLayout: TwoColumnLayout,\r\n  SingleColumnLayout: SingleColumnLayout,\r\n  ContinueButton: continueBtn,\r\n  EditableButton: EditableBtn,\r\n};\r\n\r\nconst ContentCardDisplay = memo((props: any) => {\r\n  const interactionBlock = getBlockById(props.blockId);\r\n  return (\r\n    <Container\r\n      id={interactionBlock.id}\r\n      key={interactionBlock.id}\r\n      {...interactionBlock.props}\r\n      {...props}\r\n    >\r\n      <InteractionContext.Provider value={{ ...interactionBlock }}>\r\n        {(interactionBlock.children as Block[]).map(child => {\r\n          return renderBlock(child, Components);\r\n        })}\r\n      </InteractionContext.Provider>\r\n    </Container>\r\n  );\r\n}, shouldUpdate as any);\r\n\r\nexport default ContentCardDisplay;\r\n","import ContentCardDisplay from './ContentCardDisplay';\r\n\r\nexport default ContentCardDisplay;\r\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","import { Result } from './SelectOptionsRoot';\n\nexport const onSubmit = (\n  selectedOptions,\n  correctAnswers,\n  attempt,\n  numberOfAttempts,\n  setAttempt,\n  setResult,\n  setShowFeedback,\n  showCorrectAnswer,\n  setSelectedOptions,\n  interactionContext,\n  options,\n  scoringQuizzes,\n  dispatch,\n  updateScoreAction,\n  addScormResponseAction,\n  unlockInteraction,\n  setIsLive,\n  score\n) => {\n  let result: Result = 'correct';\n\n  for (const key in selectedOptions) {\n    if (selectedOptions[key] !== correctAnswers[key]) {\n      result = 'incorrect';\n    }\n  }\n\n  // logic for attempts...\n  if (result !== 'correct') {\n    if (attempt < numberOfAttempts - 1) {\n      setAttempt(attempt => {\n        return (attempt += 1);\n      });\n      result = 'attempt';\n    }\n  }\n\n  setResult(result);\n  setShowFeedback(result);\n\n  if (result === 'incorrect' && showCorrectAnswer) {\n    setSelectedOptions(correctAnswers);\n  }\n\n  let questionText: any = Array.from(\n    document.querySelectorAll(\n      `#i${interactionContext.id} form .chameleon-text`\n    ) as any\n  );\n\n  let [question, ...optionQuestions] = questionText;\n  question = question.innerText;\n\n  let responseExpanded: any = Array.from(\n    document.querySelectorAll(\n      `#i${interactionContext.id} form [class*=\"singleValue\"]`\n    ) as any\n  );\n\n  if (optionQuestions) {\n    //\n    optionQuestions = optionQuestions.map((entry, index) => {\n      return entry.innerText;\n    });\n  }\n\n  let correctExpanded: any = options\n    .map((entry, index) => {\n      const { id, values, correctAnswer = {} } = entry.props;\n\n      return `${optionQuestions[index]}[.]${\n        values[correctAnswer[entry.props.id] || 0]\n      }`;\n    })\n    .join('[,]');\n\n  if (responseExpanded) {\n    responseExpanded = responseExpanded\n      .map((entry, index) => {\n        return `${optionQuestions[index]}[.]${entry.innerText}`;\n      })\n      .join('[,]');\n  }\n\n  const action = {\n    id: interactionContext.id,\n    type: 'fill-in',\n    question: question,\n    reportable: 'multichoice' as 'multichoice',\n    response: responseExpanded,\n    correct: correctExpanded,\n    result: result === 'correct' ? 1 : 0,\n  };\n\n  // console.log(action);\n\n  // dispatch if there's no scoringQuizzes etc\n  let shouldDispatchScore = score;\n\n  if (scoringQuizzes.length) {\n    shouldDispatchScore = false;\n  }\n  //\n\n  if (shouldDispatchScore) {\n    dispatch(\n      updateScoreAction(interactionContext.id, result === 'correct' ? 1 : 0)\n    );\n  }\n\n  dispatch(addScormResponseAction(action));\n\n  const unlock = result === 'correct' || attempt === numberOfAttempts - 1;\n\n  if (unlock) {\n    unlockInteraction(interactionContext.id);\n    setIsLive(false);\n  }\n};\n","/** @jsx jsx */\nimport React, { useState, createContext, useContext, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport pubSub from 'services/pubSub';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport { updateScoreAction } from 'actions/updateScoreAction';\nimport { addScormResponseAction } from 'actions/addScormResponseAction';\nimport { useScoringQuizzes } from 'services/apiHelpers/useScoringQuizzes';\nimport { useDispatch } from 'react-redux';\nimport { onSubmit } from './onSubmit';\nimport { colors } from 'styles/variables';\n\nconst { lGrey0, mint } = colors;\n\nexport const SelectOptionsContext = createContext<any>(null);\n\nexport type Result = 'correct' | 'incorrect' | 'attempt' | undefined;\n\nconst SelectOptionsRoot = ({ children, ...props }) => {\n  const interactionContext = useContext(InteractionContext);\n  const {\n    lockDown,\n    numberOfAttempts,\n    showAttemptNumber = true,\n    useMediaInFeedback,\n    showCorrectAnswer,\n    dividerColor = mint,\n    dropDownBorderColor = '#19D1CF',\n    navigationBehaviour = {\n      correct: false,\n      incorrect: false,\n    },\n    score,\n    randomizeOptions = false,\n    useFeedback = true,\n  } = interactionContext.props;\n\n  const [question, optionsContainer, submitBtn, feedback] = children;\n  const options = optionsContainer.props.children;\n\n  const [selectedOptions, setSelectedOptions] = useState<\n    (number | undefined)[]\n  >(options.map(o => undefined));\n\n  const [attempt, setAttempt] = useState<number>(0);\n  const [result, setResult] = useState<Result>(undefined);\n  const [showFeedback, setShowFeedback] = useState<Result>(result);\n  const [isLive, setIsLive] = useState<boolean | undefined>(undefined);\n  const dispatch = useDispatch();\n\n  const scoringQuizzes = useScoringQuizzes();\n\n  const correctAnswers = options.reduce((acc, curr, index) => {\n    const { id, correctAnswer = 0 } = curr.props;\n\n    return [...acc, correctAnswer];\n  }, []);\n\n  useEffect(() => {\n    if (!window.dev()) {\n      return;\n    }\n\n    const showFeedbackSubscription = pubSub.subscribe(\n      `${interactionContext.id}`,\n      ({ result }) => {\n        console.log(result);\n        setResult(result);\n        setShowFeedback(result);\n      }\n    );\n\n    return () => {\n      showFeedbackSubscription();\n    };\n  }, []);\n\n  useEffect(() => {\n    if (result || isLive) {\n      return;\n    }\n\n    //\n    if (selectedOptions.every(o => o !== undefined)) {\n      setIsLive(true);\n    }\n  }, [selectedOptions]);\n\n  return (\n    <SelectOptionsContext.Provider\n      value={{\n        selectedOptions,\n        setSelectedOptions: (index: number, value: number) => {\n          setSelectedOptions(selectedOptions => {\n            const updatedSelectedOptions = [...selectedOptions];\n            updatedSelectedOptions[index] = value;\n\n            return updatedSelectedOptions;\n          });\n        },\n        isLive,\n        setIsLive,\n        onSubmit,\n        result: showFeedback,\n        onClose: () => {\n          setShowFeedback(undefined);\n        },\n        correctAnswers,\n      }}\n    >\n      <form\n        id={`select-options-${props?.id}`}\n        onSubmit={e => {\n          e.preventDefault();\n        }}\n      >\n        <div\n          css={css({\n            margin: `0 0 ${window.dev() ? 12 : 17}px 0`,\n            padding: `0 0 ${window.dev() ? 10 : 15}px 0`,\n            borderBottom: `1px solid ${dividerColor}`,\n          })}\n        >\n          {question}\n        </div>\n\n        <div\n          css={css`\n            //\n          `}\n        >\n          <div\n            css={css({\n              pointerEvents: isLive === false ? 'none' : 'auto',\n            })}\n            data-select-options-parent-id={optionsContainer?.props?.id}\n          >\n            {options.map((option, index) => {\n              return React.cloneElement(option, {\n                index,\n              });\n            })}\n          </div>\n\n          <div></div>\n\n          <div\n            css={css({\n              margin: '20px 0 0 0',\n              ...(!window.dev() && {\n                visibility: isLive ? 'visible' : 'hidden',\n                pointerEvents: isLive ? 'auto' : 'none',\n              }),\n            })}\n            onClick={\n              window.dev()\n                ? undefined\n                : () => {\n                    onSubmit(\n                      selectedOptions,\n                      correctAnswers,\n                      attempt,\n                      numberOfAttempts,\n                      setAttempt,\n                      setResult,\n                      setShowFeedback,\n                      showCorrectAnswer,\n                      setSelectedOptions,\n                      interactionContext,\n                      options,\n                      scoringQuizzes,\n                      dispatch,\n                      updateScoreAction,\n                      addScormResponseAction,\n                      unlockInteraction,\n                      setIsLive,\n                      score\n                    );\n                  }\n            }\n          >\n            {submitBtn}\n          </div>\n        </div>\n\n        {useFeedback &&\n          showFeedback &&\n          React.cloneElement(feedback, {\n            result,\n            showAttemptNumber,\n            attempt,\n            numberOfAttempts,\n            navigationBehaviour,\n            onClose() {\n              setShowFeedback(undefined);\n            },\n            useMediaInFeedback,\n          })}\n      </form>\n    </SelectOptionsContext.Provider>\n  );\n};\n\nexport default SelectOptionsRoot;\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\n\nconst SelectOptions = ({ children, ...props }) => {\n  return (\n    <div\n      id={'wtf wtf wtf !!!???' || props?.id || ''}\n      css={css`\n        //\n      `}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport default SelectOptions;\n","/** @jsx jsx */\n\nimport { useContext, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext } from './interactionContext';\nimport { SelectOptionsContext } from './SelectOptionsRoot';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport Select from 'react-select';\nimport { useSelector } from 'react-redux';\nimport { State } from 'store/store';\nimport EditMarker from 'components/UI/EditMarker';\nimport tick_mint from 'assets/tick_mint.svg';\n\nconst SelectOption = ({ children, ...props }) => {\n  const iContext = useContext(interactionContext);\n\n  const {\n    dropDownTextColor = '#1D2026',\n    dropDownBorder = true,\n    dropDownBorderColor = '#19D1CF',\n    dropDownBorderRadius = 10,\n    dropDownBackgroundColor = 'transparent',\n  } = iContext.props;\n\n  const selectOptionsContext = useContext(SelectOptionsContext);\n\n  const {\n    selectedOptions,\n    setSelectedOptions,\n    correctAnswers,\n  } = selectOptionsContext;\n\n  const { id, type, index: selectGroupIndex, values } = props;\n\n  const menuIsOpen = useSelector((state: State) => {\n    if (!window.dev()) {\n      return undefined;\n    }\n    return state.focusedNodeId === id;\n  });\n\n  const value = values[selectedOptions[id]];\n  const [txt] = children;\n  const nameId = `i${id}`;\n\n  const _ = ({ innerRef, innerProps, ...props }) => {\n    const { label, isFocused, data } = props;\n    const { index } = data;\n\n    return (\n      <div\n        ref={innerRef}\n        {...innerProps}\n        css={css({\n          display: 'flex',\n          justifyContent: 'space-between',\n          alignItems: 'center',\n          lineHeight: '1.1em',\n          padding: '5px 10px',\n\n          cursor: 'pointer',\n\n          ...(window.dev()\n            ? {\n                color: dropDownTextColor,\n              }\n            : {\n                color: dropDownTextColor,\n                opacity: `${isFocused ? 0.8 : 1};`,\n              }),\n        })}\n      >\n        {label}\n        {window.dev() && correctAnswers[selectGroupIndex] === index ? (\n          <div\n            css={css({\n              width: 20,\n              height: 20,\n              borderRadius: '50%',\n              background: `url('${tick_mint}') no-repeat`,\n              backgroundSize: 20,\n            })}\n          />\n        ) : null}\n      </div>\n    );\n  };\n\n  useEffect(() => {}, []);\n\n  return (\n    <div\n      id={nameId}\n      css={css({\n        margin: '5px 0',\n      })}\n      onClick={\n        window.dev()\n          ? e => {\n              setCurrentBlock(menuIsOpen ? null : { id });\n            }\n          : undefined\n      }\n    >\n      <div\n        css={css({\n          flex: 1,\n        })}\n      >\n        {txt}\n      </div>\n\n      <div style={{ height: 10 }} />\n\n      <div\n        css={css({\n          position: 'relative',\n\n          '[class*=\"control\"]': {\n            '*': {\n              ':focus': {\n                border: '0px !important',\n              },\n            },\n          },\n\n          '*': {\n            fontSize: '16px !important',\n            color: `${dropDownTextColor} !important`,\n\n            ...(menuIsOpen && {\n              '[class*=\"MenuList\"]': {\n                '*': {\n                  pointerEvents: 'none',\n                },\n              },\n            }),\n          },\n        })}\n      >\n        {/* @ts-ignore */}\n        <Select\n          key={value}\n          menuIsOpen={menuIsOpen}\n          isSearchable={false}\n          styles={{\n            control: (base, state) => {\n              const { isFocused } = state;\n\n              ['borderColor', 'boxShadow', '&:hover'].forEach(entry => {\n                delete base[entry];\n              });\n\n              return {\n                ...base,\n                background: dropDownBackgroundColor,\n                minHeight: 45,\n                border: dropDownBorder\n                  ? `1px solid ${dropDownBorderColor}`\n                  : 'none',\n                borderRadius: dropDownBorderRadius,\n                cursor: 'pointer',\n                ...(!window.dev() &&\n                  isFocused && {\n                    boxShadow: `0 0 0 2px ${dropDownBorderColor}`,\n                  }),\n\n                '[class*=\"placeholder\"]': {\n                  width: '97.5%',\n                  overflow: 'hidden',\n                  whiteSpace: 'nowrap',\n                  textOverflow: 'ellipsis',\n                },\n\n                '[class*=\"indicatorSeparator\"]': {\n                  display: 'none',\n                },\n              };\n            },\n            menu: (base, state) => ({\n              ...base,\n              borderRadius: 10 || dropDownBorderRadius,\n              boxShadow: `0 23px 36px rgba(0, 0, 0, 0.2)`,\n\n              background:\n                dropDownBackgroundColor === 'transparent'\n                  ? '#fff'\n                  : dropDownBackgroundColor,\n            }),\n          }}\n          placeholder={value}\n          value={value}\n          onChange={({ value }) => {\n            setSelectedOptions(selectGroupIndex, values.indexOf(value));\n          }}\n          options={[\n            ...values.map((value, index) => {\n              return { value, label: value, index };\n            }),\n          ]}\n          components={{ Option: _ }}\n        />\n\n        {window.dev() && (\n          <div\n            css={css({\n              position: 'absolute',\n              right: 0,\n              top: 0,\n              width: '100%',\n              height: '100%',\n            })}\n          >\n            <div\n              css={css({\n                position: 'absolute',\n                left: -2,\n                top: -2,\n                width: 'calc(100% + 4px)',\n                height: 'calc(100% + 4px)',\n                boxShadow: menuIsOpen\n                  ? '0 0 0 1px #ff0063'\n                  : '0 0 0 1px lightGrey',\n                cursor: 'pointer',\n                transition: 'box-shadow 0.2s',\n\n                ':hover': {\n                  background: 'rgba(0,0,0,0.02)',\n                },\n              })}\n            >\n              {!menuIsOpen && <EditMarker />}\n            </div>\n          </div>\n        )}\n      </div>\n      <div style={{ height: 20 }} />\n    </div>\n  );\n};\n\nexport default SelectOption;\n","/** @jsx jsx */\n\nimport { Children, Fragment as _, memo, useContext } from 'react';\nimport { jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport SVG from 'components/lib/SVG';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport Media, { MediaContext, IMediaContext } from 'components/lib/Media';\nimport { imgPlaceholders } from 'components/lib/Image';\nimport Audio from 'components/lib/Audio';\nimport Transcript from 'components/lib/Video/Transcript';\nimport Embed from 'components/lib/Embed';\nimport PDF from 'components/lib/PDF';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport shouldUpdate from 'services/shouldUpdate';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport SelectOptionsRoot from './SelectOptionsRoot';\nimport SelectOptions from './SelectOptions';\nimport SelectOption from './SelectOption';\nimport Feedback from 'components/lib/Feedback/Feedback_updated_022022';\nimport MultiChoice_default from 'assets/Rectangle.png';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  InteractionColumn: ({ children }) => {\n    return children?.[0] || null;\n  },\n  Image: ({ children, ...props }) => {\n    const mediaContext = useContext(MediaContext) as IMediaContext;\n    const { isAdditionalMedia } = mediaContext;\n\n    return (\n      <Image\n        {...{\n          ...props,\n          placeholder: !isAdditionalMedia\n            ? MultiChoice_default\n            : imgPlaceholders[1],\n        }}\n      />\n    );\n  },\n  InteractionColumn: ({ children, ...props }) => {\n    const interactionContext = useContext(InteractionContext);\n    const { includeAdditionalTextField } = interactionContext.props;\n    const [select, txt] = children;\n\n    if (!includeAdditionalTextField) {\n      return select;\n    }\n\n    return (\n      <_>\n        {select}\n        <div\n          style={{\n            margin: '20px 0 0 0',\n          }}\n        >\n          {txt}\n        </div>\n      </_>\n    );\n  },\n\n  TwoColumnLayout,\n  SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  Video,\n  Audio,\n  Transcript,\n  SVG,\n  Embed,\n  Media,\n  PDF,\n  OpenPDF,\n  SelectOptionsRoot,\n  SelectOptions,\n  SelectOption,\n  Question: ({ children, ...props }) => children,\n  Feedback,\n  Correct: ({ children, ...props }) => children,\n  Incorrect: ({ children, ...props }) => children,\n  Attempt: ({ children, ...props }) => children,\n  EditableButton: EditableBtn,\n};\n\nconst SelectOptionsDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{ ...interactionBlock, updateItemsSeen: null }}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </InteractionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default SelectOptionsDisplay;\n","import SelectOptionsDisplay from './SelectOptionsDisplay';\n\nexport default SelectOptionsDisplay;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","/** @jsx jsx */\n\nimport { css as _css } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport { colors } from 'styles/variables';\nimport TopicPanelDefaultIcon from 'assets/CC_Topic Portal V3_Topic Portal Placeholder Icon.png';\n//PortalAvatar.svg'; // TopicPanelDefaultIcon.png';\nimport { useCachedResource } from 'services/useCachedResource';\nimport { CHAMELEON_CACHE_v1 } from 'services/imageCache';\n\nconst { lPink } = colors;\n\nconst TopicIcon = ({\n  topicIcon,\n  size = 60,\n  isEditing,\n  iconSelected,\n  setIconSelected,\n}) => {\n  const src = topicIcon?.url || TopicPanelDefaultIcon;\n  const cachedImgSrc = useCachedResource(CHAMELEON_CACHE_v1, src);\n\n  return (\n    <div\n      style={{\n        position: 'absolute',\n        display: 'flex',\n        justifyContent: 'center',\n        left: 0,\n        top: 0,\n        width: 'inherit',\n        height: size,\n        pointerEvents: window.dev() ? 'auto' : 'none',\n      }}\n    >\n      <div\n        css={css`\n          flex-stretch: 0;\n          width: ${size}px;\n          height: ${size}px;\n          border-radius: 50%;\n          background: url('${cachedImgSrc || src}') no-repeat;\n          background-size: cover;\n          background-position: center;\n          transform: translateY(-50%);\n          \n          ${isEditing &&\n            `\n            cursor: pointer;\n            &:hover {\n              transition: box-shadow 0.15s;\n              box-shadow: 0 0 0 2px ${lPink};\n            }\n            `}\n        `}\n        onClick={\n          isEditing\n            ? e => {\n                e.stopPropagation();\n                setIconSelected(!iconSelected);\n              }\n            : () => {}\n        }\n      />\n    </div>\n  );\n};\n\nexport default TopicIcon;\n","/** @jsx jsx */\n\nimport React, {\n  useState,\n  useContext,\n  useEffect,\n  useMemo,\n  Fragment as _,\n} from 'react';\nimport { css as _css } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport { colors, getButtonFocus } from 'styles/variables';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport { interactionContext } from './interactionContext';\nimport { useSelector } from 'react-redux';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport hexToRGB from 'services/hexToRGB';\nimport getCurrentTopic from 'services/apiHelpers/getCurrentTopic';\nimport pubSub from 'services/pubSub';\nimport TopicIcon from './TopicIcon';\nimport getTopicSId from 'services/getTopicSId';\nimport { getTopicsComplete } from 'services/apiHelpers/getTopicsComplete';\nimport getTopics from 'services/apiHelpers/getTopics';\nimport hexToRgb, { getHexToRgbWithDefaultFallback } from 'services/hexToRGB';\n\nconst { lGrey0, lPink } = colors;\n\nconst ProgressBar = ({ color, percentComplete }) => {\n  const width = 130;\n  const height = 8;\n  const { r, g, b } = hexToRGB(color);\n\n  return (\n    <div\n      css={css`\n        position: relative;\n        width: ${width}px;\n        height: ${height}px;\n        border-radius: 9999px;\n        background: rgba(${r}, ${g}, ${b}, 0.3);\n        transition: background 0.1s;\n      `}\n    >\n      <div\n        css={css`\n          position: absolute;\n          left: 0;\n          top: 0;\n          width: ${width * (percentComplete / 100)}px;\n          height: ${height}px;\n          border-radius: 9999px;\n          background: rgb(${r}, ${g}, ${b});\n          transition: background 0.1s;\n        `}\n      />\n    </div>\n  );\n};\n\nconst TopicNameContainer = ({ addImage, cardSize, children }) => {\n  const shared = `\n  position: absolute;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  left: 0;\n  width: 100%;\n  `;\n  return !!addImage ? (\n    <div\n      css={css`\n        ${shared}\n        top: ${cardSize === 'small' ? '40px' : '55px'};\n        height: calc(100% - ${cardSize === 'small' ? '95px' : '110px'});\n      `}\n    >\n      {children}\n    </div>\n  ) : (\n    <div\n      css={css`\n        ${shared}\n        top: 20px;\n        height: calc(100% - 75px);\n      `}\n    >\n      {children}\n    </div>\n  );\n};\n\nconst TopicPanel = ({\n  topic,\n  updateTopicComplete,\n  displayedTopics,\n  children,\n}) => {\n  const context: any = useContext(interactionContext);\n  const { id: interactionId } = context;\n  const {\n    graphColor = '#61cece',\n    cardColor = '#fff',\n    textColor = '#1e2533',\n    navigateToTopic = true,\n    addImage = true,\n    // iconSize,\n    cardWidth = 235,\n    cardHeight = 150,\n    hideTopicsThatIncludeATopicPortal = true,\n    completeInSequence = false,\n    includeShadow = true,\n    focusColor = '#000000',\n    panelBackgroundOpacity = 100,\n    panelOutline = false,\n    panelOutlineColor,\n    borderRadius = 20,\n    iconWidth,\n    iconHeight,\n    backgroundMedia = false,\n    includeCustomText = false,\n    positionTextBelow = false,\n    fontSize = 16,\n  } = context.props;\n\n  const [media, txt] = children || [];\n\n  let imageFit;\n  if (media?.props?.child === 1) {\n    imageFit = media?.props?.children[1]?.props?.fit;\n  }\n\n  let { font = '' } = context.props;\n\n  const { r, g, b } = getHexToRgbWithDefaultFallback(cardColor, '#ffffff');\n\n  let a = panelBackgroundOpacity / 100;\n  if (!cardColor) {\n    a = 0;\n  }\n\n  const { focusedNodeId, theme, interactionsSeen } = useSelector(\n    (state: any) => state\n  );\n  const interactionsInTopics = useMemo(\n    () =>\n      getTopics().reduce((acc, curr, index) => {\n        let topicName = curr?.props?.name;\n        //\n        return {\n          ...acc,\n          [curr.id]: getInteractionsInTopic(curr),\n        };\n      }, {}),\n    []\n  );\n  const [iconSelected, setIconSelected] = useState<Boolean>(false);\n  const { id } = topic;\n  const { name, topicIcon = {} } = topic.props;\n  const isEditing = focusedNodeId === interactionId;\n\n  const cardSize = cardWidth === 235 ? 'small' : 'large';\n\n  let { iconSize } = context.props;\n  if (!iconSize) {\n    iconSize = cardWidth <= 235 ? 60 : 90;\n  }\n\n  let navigationEnabled =\n    !isEditing && navigateToTopic && getCurrentTopic()!.id !== id;\n\n  const navigate = navigationEnabled\n    ? () => {\n        if (window.dev && window.dev()) {\n          return;\n        }\n\n        const targetLocation = getTopicSId(topic);\n\n        if (targetLocation) {\n          window.location.hash = targetLocation;\n        }\n      }\n    : null;\n\n  // nuclear\n  if (window.dev()) {\n    navigationEnabled = false;\n  }\n\n  const interactionsInTopic = getInteractionsInTopic(topic)\n    .filter((i: any) => {\n      if (!hideTopicsThatIncludeATopicPortal) {\n        return true;\n      }\n      return i?.meta?.subType !== 'TopicPortal';\n    })\n    .map((i: any) => i.id);\n\n  const interactionsInTopicSeen = interactionsInTopic.filter((i: any) => {\n    return interactionsSeen\n      .filter((i: any) => {\n        return i && getBlockById(i)?.meta?.subType !== 'TopicPortal';\n      })\n      .includes(i);\n  });\n\n  const topicsComplete = getTopicsComplete(\n    interactionsInTopics,\n    interactionsSeen\n  );\n\n  let percentComplete = Number(\n    (\n      (interactionsInTopicSeen.length / interactionsInTopic.length) *\n      100\n    ).toFixed()\n  );\n\n  if (isNaN(percentComplete)) {\n    percentComplete = 0;\n  }\n\n  // update font : theme > local\n  // does the section get a font ?\n  font = !font ? theme?.fontFamily : font;\n  //\n\n  let unlocked;\n  const topics = useMemo(() => {\n    return displayedTopics || getTopics();\n  }, []);\n  if (!!completeInSequence) {\n    topics.forEach((t, i, arr) => {\n      if (i === 0) {\n        unlocked = true;\n      } else if (t.id === id) {\n        unlocked = topicsComplete[arr[i - 1]?.id];\n      }\n    });\n  } else {\n    unlocked = true;\n  }\n\n  if (window.dev()) {\n    unlocked = true;\n  }\n\n  useEffect(() => {\n    const pS = pubSub.subscribe('UPDATE_TOPIC_ICON', $ => {\n      if (!$.topic) {\n        return;\n      }\n      $.topic.id !== id && setIconSelected(false);\n    });\n\n    return () => pS();\n  }, []);\n\n  useEffect(() => {\n    iconSelected &&\n      pubSub.publish(\n        'UPDATE_TOPIC_ICON',\n        iconSelected\n          ? {\n              topic,\n            }\n          : null\n      );\n  }, [iconSelected]);\n\n  useEffect(() => {\n    if (percentComplete === 100) {\n      updateTopicComplete(topic.id);\n    }\n  }, [percentComplete]);\n\n  let focus;\n  // if(!focusColor) {}\n  focus = getButtonFocus(\n    (focusColor || cardColor) !== '#fff' ? focusColor || cardColor : '#1e2533',\n    '0 20px 60px -25px rgba(0, 0, 0, 0.4)'\n  ).split(':')[1];\n\n  const pointerEvents = unlocked ? 'auto' : 'none';\n\n  const title = `Go to ${name}. Progress: ${percentComplete}%`;\n\n  return interactionsInTopic.length === 0 ? null : (\n    <div\n      css={css({\n        position: 'relative',\n\n        width: cardWidth,\n        margin: `${addImage ? iconSize / 2 : 20}px 15px 20px 15px`,\n        //\n\n        pointerEvents,\n        // and ANYTHING in-between\n        '*': {\n          pointerEvents,\n        },\n\n        opacity: unlocked ? 1 : 0.2,\n\n        '.chameleon-image': {\n          display: 'flex',\n          justifyContent: 'center',\n          alignItems: 'center',\n          width: cardWidth,\n          height: cardHeight,\n        },\n\n        '.chameleon-image img': {\n          width: `${cardWidth -\n            (imageFit === 'contain' ? 20 : 0)}px !important`,\n          height: `${cardHeight -\n            (imageFit === 'contain' ? 20 : 0)}px !important`,\n        },\n      })}\n    >\n      <a\n        href={`#${getTopicSId(topic)}`}\n        title={title}\n        target=\"_self\"\n        css={css({\n          position: 'relative',\n          display: 'flex',\n          justifyContent: 'center',\n          alignItems: 'center',\n\n          width: 'inherit',\n          height: cardHeight,\n\n          ...(panelOutline && {\n            border: `1px solid ${panelOutlineColor || 'rgba(0, 0, 0, 0.05)'}`,\n          }),\n\n          borderRadius,\n          background: `rgba(${r}, ${g}, ${b}, ${a})}`,\n\n          boxShadow: includeShadow\n            ? `0 20px 60px -25px rgba(0, 0, 0, 0.4)`\n            : 'none',\n\n          transition: 'all 0.15s',\n\n          ...(navigationEnabled\n            ? {\n                cursor: 'pointer',\n\n                '&:hover': {\n                  opacity: 0.8,\n                },\n              }\n            : { pointerEvents: 'none' }),\n\n          '&:focus': {\n            boxShadow: focus,\n          },\n\n          overflow: 'hidden',\n        })}\n        onClick={e => {\n          if (window.dev()) {\n            e.preventDefault();\n            return;\n          }\n        }}\n        onKeyUp={e => {\n          if (![' ', 'Enter'].includes(e.key)) {\n            return;\n          }\n\n          if (window) {\n            window.location.hash = getTopicSId(topic) as string;\n          }\n        }}\n      >\n        {!!backgroundMedia && (\n          <div\n            css={css({\n              width: cardWidth,\n              height: cardHeight,\n\n              // pointerEvents: 'auto', < this was overriding the root pointerEvent\n              '.chameleon-image > div': {\n                borderRadius,\n              },\n            })}\n          >\n            {media}\n          </div>\n        )}\n\n        {!positionTextBelow && (\n          <_>\n            {!includeCustomText ? (\n              <TopicNameContainer addImage={addImage} cardSize={cardSize}>\n                <div\n                  css={css`\n                    padding: 5px 15px;\n                    font-size: ${fontSize}px;\n                    font-family: ${font};\n                    color: ${textColor};\n                    text-align: center;\n                  `}\n                >\n                  {name}\n                </div>\n              </TopicNameContainer>\n            ) : (\n              <div\n                css={css({\n                  position: 'absolute',\n                  left: 0,\n                  width: '100%',\n                  padding: window.dev() ? 5 : 0,\n                  // zIndex: 1, // causing overlap with header in output when scrolling\n                  pointerEvents: 'auto',\n                })}\n              >\n                {txt}\n              </div>\n            )}\n\n            <div\n              css={css`\n                position: absolute;\n                display: flex;\n                flex-direction: column;\n                align-items: center;\n                left: 0;\n                bottom: 0;\n                width: 100%;\n                height: ${cardSize === 'small' ? '55px' : '65px'};\n              `}\n            >\n              <div\n                css={css({\n                  margin: '0 0 0px 0',\n                  fontSize: '14px',\n                  color: graphColor,\n                })}\n              >\n                {percentComplete}%\n              </div>\n              <ProgressBar\n                color={graphColor}\n                percentComplete={percentComplete}\n              />\n            </div>\n          </_>\n        )}\n      </a>\n\n      {!!positionTextBelow && (\n        <div\n          css={css({\n            display: 'flex',\n            flexDirection: 'column',\n            alignItems: 'center',\n            marginTop: window.dev() ? 0 : 10,\n          })}\n        >\n          <div\n            css={css`\n              width: 100%;\n              padding: 5px 15px;\n              font-size: ${fontSize}px;\n              font-family: ${font};\n              color: ${textColor};\n              text-align: center;\n            `}\n          >\n            {!includeCustomText ? name : txt}\n          </div>\n          <div\n            css={css({\n              margin: '0 0 0px 0',\n              fontSize: '14px',\n              color: graphColor,\n            })}\n          >\n            {percentComplete}%\n          </div>\n          <ProgressBar color={graphColor} percentComplete={percentComplete} />\n        </div>\n      )}\n\n      {!!addImage && (\n        <TopicIcon\n          topicIcon={topicIcon}\n          size={iconSize}\n          // || cardWidth <= 235 ? 60 : 90}\n          isEditing={isEditing}\n          iconSelected={iconSelected}\n          setIconSelected={setIconSelected}\n        />\n      )}\n    </div>\n  );\n};\n\nexport default TopicPanel;\n","export const getTopicsComplete = (interactionsInTopics, interactionsSeen) => {\n  const temp = {};\n  Object.keys(interactionsInTopics).forEach(key => {\n    const interactions = interactionsInTopics[key];\n    temp[key] = interactions.every(i => {\n      return interactionsSeen.includes(i.id);\n    });\n  });\n\n  return temp;\n};\n","import getBlockById from 'services/apiHelpers/getBlockById';\nimport { findByKeyVal_V2 } from 'services/findByKeyVal';\nimport getTopics from 'services/apiHelpers/getTopics';\nimport getStore from 'services/getStore';\nimport {\n  addTopicPortalMedia as _addTopicPortalMedia_,\n  removeTopicPortalMedia as _removeTopicPortalMedia_,\n} from 'factories/interactions/topicportal';\nimport { setBlockAction } from 'actions/setBlockAction';\nimport { setBlocksAction } from 'actions/setBlocksAction';\nimport setNewBlockNewTree from 'services/apiHelpers/setNewBlockNewTree';\nimport { Block } from '@chameleoncreator/creator-app';\n\nconst addTopicPortalMedia = (topicPortalContainerBlock, index, props) => {\n  const [newBlock, newTree] = _addTopicPortalMedia_(\n    topicPortalContainerBlock,\n    // topicPortalContainerBlock.children.length,\n    index,\n    props\n  );\n\n  if (newBlock === topicPortalContainerBlock) {\n    return;\n  }\n\n  const store = getStore();\n\n  if (newTree) {\n    setNewBlockNewTree(newTree, newBlock, store, setBlocksAction);\n  } else {\n    store.dispatch(setBlockAction(newBlock));\n  }\n};\n\nconst removeTopicPortalMedia = (topicPortalContainerBlock, index) => {\n  const [newBlock, newTree] = _removeTopicPortalMedia_(\n    topicPortalContainerBlock,\n    index\n  );\n\n  if (newBlock === topicPortalContainerBlock) {\n    return;\n  }\n\n  const store = getStore();\n\n  if (newTree) {\n    setNewBlockNewTree(newTree, newBlock, store, setBlocksAction);\n  } else {\n    store.dispatch(setBlockAction(newBlock));\n  }\n};\n\nexport const updateTopicPortalMedia = (topics, blockId) => {\n  const getTopicPortalContainerBlock = () => {\n    return findByKeyVal_V2(blockId, 'type', 'TopicPortalContainer');\n  };\n\n  const getTopicPortalContainerBlockChildrenData = () => {\n    return (getTopicPortalContainerBlock()?.children as []).map(\n      (child: Block) => {\n        const block = getBlockById(child.id);\n        return block?.props?.topicId;\n      }\n    );\n  };\n\n  const addMedia = () => {\n    topics.forEach((t, index) => {\n      if (!getTopicPortalContainerBlockChildrenData().includes(t.id)) {\n        // console.log('addTopicPortalMedia :', t.id);\n        addTopicPortalMedia(getTopicPortalContainerBlock(), index, t.id);\n      }\n    });\n  };\n\n  const removeMedia = () => {\n    getTopicPortalContainerBlockChildrenData().forEach((tId, index) => {\n      const topicIds = topics\n        .map(t => {\n          return t.id;\n        })\n        .reduce((acc, curr) => {\n          return {\n            ...acc,\n            [curr]: curr,\n          };\n        }, {});\n\n      // if there's not a ' matching ' topic === topicPortalChild\n      // remove that child\n      if (!topicIds[tId]) {\n        // console.log('removeTopicPortalMedia :', tId);\n        removeTopicPortalMedia(getTopicPortalContainerBlock(), index);\n      }\n    });\n  };\n\n  return {\n    addMedia,\n    removeMedia,\n  };\n};\n","/** @jsx jsx */\n\nimport React, { useContext, useRef, useEffect } from 'react';\nimport { css as _css } from 'emotion';\nimport { css, jsx } from '@emotion/core';\nimport getTopics from 'services/apiHelpers/getTopics';\nimport TopicPanel from './TopicPanel';\nimport { interactionContext } from './interactionContext';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport { updateTopicPortalMedia } from './updateTopicPortalMedia';\n\nconst TopicPortalContainer = props => {\n  const context = useContext(interactionContext);\n  const {\n    selectedTopics = [],\n    hideTopicsThatIncludeATopicPortal = true,\n  } = context?.props;\n  //\n\n  const { children } = props;\n\n  const topics = getTopics();\n\n  const displayedTopics = topics.filter((t: any, index: number) => {\n    const topicIncludesPortal = getInteractionsInTopic(t).find(i => {\n      return i?.meta?.subType === 'TopicPortal';\n    });\n\n    if (selectedTopics.length) {\n      return (\n        selectedTopics.includes(t?.props?.sId) || selectedTopics.includes(t.id)\n      );\n    }\n\n    return (\n      !(hideTopicsThatIncludeATopicPortal && topicIncludesPortal) &&\n      t.props.hiddenFromPortal !== true\n    );\n  });\n\n  window.dev() &&\n    console.log(\n      'portal will unlock when these topics ( updated to reference the sId ) are complete :',\n      displayedTopics.map(t => {\n        return `${t?.props?.sId} || ${t?.id} ${t?.props?.name}`;\n      })\n    );\n\n  const { lockDown } = context.props;\n\n  const itemsSeen = useRef(\n    unlockInteraction(context.id, (displayedTopics as any).length)\n  );\n\n  const { addMedia, removeMedia } = updateTopicPortalMedia(topics, context.id);\n\n  const updateTopicComplete = id => {\n    // if (lockDown === 0) {\n    //   return;\n    // }\n\n    itemsSeen.current(id);\n  };\n\n  useEffect(() => {\n    if (!window.dev()) {\n      return;\n    }\n\n    if (topics.length > children.length) {\n      addMedia();\n      return;\n    }\n\n    removeMedia();\n\n    return () => {};\n  }, [topics.length]);\n\n  return (\n    <div\n      css={css`\n        width: 100%;\n      `}\n    >\n      <div\n        css={css`\n          display: flex;\n          flex-wrap: wrap;\n          justify-content: center;\n          margin: 12px 0 12px 0;\n        `}\n      >\n        {displayedTopics.map((t: any, index: number) => {\n          const topicMedia = props.children.find(media => {\n            return media?.props?.topicId === t.id;\n          });\n\n          return (\n            <TopicPanel\n              key={t.id}\n              topic={t}\n              updateTopicComplete={updateTopicComplete}\n              displayedTopics={displayedTopics}\n            >\n              {topicMedia ? topicMedia.props.children : null}\n            </TopicPanel>\n          );\n        })}\n      </div>\n    </div>\n  );\n};\n\nexport default TopicPortalContainer;\n","/** @jsx jsx */\n\nimport { Fragment as _, memo, useContext } from 'react';\nimport { jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport Media, { MediaContext, IMediaContext } from 'components/lib/Media';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport Container from 'components/Layouts/ContainerLogical';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport continueBtn from '../ContinueBtn/continueBtn_v2';\nimport { Block } from '@chameleoncreator/creator-app';\nimport TopicPortalContainer from './TopicPortalContainer';\nimport shouldUpdate from 'services/shouldUpdate';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport Audio from 'components/lib/Audio';\nimport SVG from 'components/lib/SVG';\nimport Embed from 'components/lib/Embed';\nimport PDF from 'components/lib/PDF';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport { imgPlaceholders } from 'components/lib/Image';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  InteractionColumn: ({ children, ...props }) => {\n    const interactionContext = useContext(InteractionContext);\n    const { includeAdditionalTextField } = interactionContext.props;\n\n    const [topicPortal, txt] = children;\n\n    if (!includeAdditionalTextField) {\n      return topicPortal;\n    }\n\n    return (\n      <_>\n        {topicPortal}\n        <div\n          style={{\n            margin: '20px 0 0 0',\n          }}\n        >\n          {txt}\n        </div>\n      </_>\n    );\n  },\n\n  TopicPortalContainer,\n  TopicPortalMedia: ({ children, ...props }) => {\n    return children;\n  },\n  Media,\n\n  Image: ({ children, ...props }) => {\n    const mediaContext = useContext(MediaContext) as IMediaContext;\n\n    return (\n      <Image\n        {...{\n          ...props,\n          placeholder: imgPlaceholders[1],\n          //\n          editWrapperType: 1,\n          editWrapperSize: '80%',\n          editWrapperUseIcon: false,\n          canUpdateContainerHeight: false,\n        }}\n      />\n    );\n  },\n\n  Video,\n  Audio,\n  SVG,\n  PDF,\n  OpenPDF,\n  Embed,\n  Transcript: ({ children }) => children,\n  TwoColumnLayout: TwoColumnLayout,\n  SingleColumnLayout: SingleColumnLayout,\n  ContinueButton: continueBtn,\n};\n\nconst TopicPortalDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{ ...interactionBlock, updateItemsSeen: null }}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </InteractionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default TopicPortalDisplay;\n","import TopicPortalDisplay from './TopicPortalDisplay';\n\nexport default TopicPortalDisplay;\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport EditableBtn from 'components/lib/EditableBtn';\n\nconst SubmitBtn = props => {\n  const { enabled, onSubmit } = props;\n\n  return (\n    <div\n      css={css`\n        // // display: flex;\n        // // justify-content: center;\n        // width: 100%;\n        ${!window.dev() &&\n          `\n            opacity: ${enabled ? 1 : 0.25};\n            pointer-events: ${enabled ? 'auto' : 'none'};\n            transition: opacity 0.5s;\n        `}\n      `}\n    >\n      <EditableBtn\n        onClick={() => {\n          onSubmit();\n        }}\n        enabled={enabled}\n        {...props}\n      />\n    </div>\n  );\n};\n\nexport default SubmitBtn;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","/** @jsx jsx */\n\nimport {\n  Fragment as _,\n  useContext,\n  useState,\n  cloneElement,\n  useRef,\n  useEffect,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport { useDispatch } from 'react-redux';\nimport { submitToCollect } from 'services/submitToCollect';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport { useScoringQuizzes } from 'services/apiHelpers/useScoringQuizzes';\nimport { addScormResponseAction } from 'actions/addScormResponseAction';\nimport { updateScoreAction } from 'actions/updateScoreAction';\nimport { Report } from 'store/store';\nimport Modal from 'components/UI/Modal';\n\ntype Result = 'correct' | 'incorrect' | 'attempt' | undefined;\n\nconst TextEntry = props => {\n  const interactionContext = useContext(InteractionContext);\n\n  // const { setShowFeedback } = interactionContext;\n\n  const {\n    messageTextColor = '#000',\n    messageBorderColor = '#d2dff9',\n    messageFontFamily = 'inherit',\n    messageFontSize = 16,\n    ratingEndpoint,\n    collectionKey,\n    learnerIdentity,\n    reference,\n    submissionEmailDestination,\n    subject,\n    score,\n    correctAnswer,\n  } = interactionContext.props;\n\n  const { children } = props;\n\n  const [\n    _submitBtn_,\n    // feedbackSubmitted,\n    feedbackNonScoring,\n    feedbackScoring,\n  ] = children;\n\n  const targetFeedback = score ? feedbackScoring : feedbackNonScoring;\n  // console.log({ score, targetFeedback });\n\n  const submitted = unlockInteraction(interactionContext.id, 1);\n\n  const [textAreaStyle, setTextAreaStyle] = useState<{\n    height?: number;\n    overflow?: string;\n  }>({});\n\n  const [isLive, setIsLive] = useState<boolean>(false);\n  const [isSubmitted, setIsSubmitted] = useState<boolean>(false);\n  const [showFeedback, setShowFeedback] = useState<boolean>(false);\n\n  const [result, setResult] = useState<Result>(undefined);\n  const [hasFocus, setHasFocus] = useState<boolean>(false);\n\n  const scoringQuizzes = useScoringQuizzes();\n  const dispatch = useDispatch();\n\n  const message = useRef<string>('');\n  const textArea = useRef<HTMLTextAreaElement>(null);\n  const textAreaProxy = useRef<HTMLDivElement>(null);\n\n  const updateTextAreaStyle = () => {\n    if (!textAreaProxy.current) {\n      return;\n    }\n\n    const height = textAreaProxy.current.offsetHeight;\n    setTextAreaStyle({\n      overflow: height < 240 ? 'hidden' : 'auto',\n    });\n  };\n\n  const submitBtn = cloneElement(children[0], {\n    enabled: isLive,\n    onSubmit() {\n      //\n      // console.log(ratingEndpoint, {\n      //   key: collectionKey,\n      //   rating: undefined,\n      //   message: message?.current,\n      //   identity: learnerIdentity,\n      //   reference,\n      // });\n\n      switch (ratingEndpoint) {\n        case 'collect': {\n          submitToCollect({\n            key: collectionKey,\n            rating: undefined,\n            message: message.current,\n            identity: learnerIdentity,\n            reference,\n          });\n\n          submitted(1);\n          break;\n        }\n\n        case 'email': {\n          location.href = `mailto:${submissionEmailDestination}?${subject &&\n            `subject=${encodeURIComponent(subject)}&`}body=${encodeURIComponent(\n            message.current\n          )}`;\n\n          submitted(1);\n          break;\n        }\n\n        case 'hosting': {\n          dispatch({\n            type: 'SUBMIT_FEEDBACK',\n            data: {\n              key: collectionKey,\n              rating: undefined,\n              message: message?.current,\n              identity: learnerIdentity,\n              reference,\n            },\n          });\n\n          submitted(1);\n          break;\n        }\n      }\n\n      // setIsSubmitted(true);\n\n      //scorm\n\n      if (!score) {\n        setShowFeedback(true);\n\n        return;\n      }\n\n      const { id } = interactionContext;\n\n      const section = document.querySelector(`#i${id}`) as HTMLElement;\n\n      const chameleonTextElement = section?.querySelector(\n        `.chameleon-text p`\n      ) as HTMLElement;\n\n      // question might be an image ? get its alt ?\n      let question = '';\n      if (chameleonTextElement) {\n        question = chameleonTextElement.innerText;\n      }\n\n      const correctAnswerParsed =\n        correctAnswer && correctAnswer.replace(/ /g, '').split(/,/g);\n\n      const isCorrect = correctAnswerParsed.includes(\n        message.current.toLowerCase().replace(/ /g, '')\n      );\n      // message.current.toLowerCase().replace(/ /g, '') === correctAnswer;\n      console.log(correctAnswerParsed, isCorrect);\n\n      const action = {\n        id,\n        type: 'long-fill-in',\n        question,\n        reportable: 'longfillin',\n        // ,\n        response: message?.current,\n        correct: correctAnswer,\n        //message?.current,\n        result: isCorrect ? 1 : 0,\n      } as Report;\n\n      console.log(JSON.stringify(action, null, 2));\n      // dispatch if there's no scoringQuizzes etc\n      let shouldDispatch = true;\n\n      if (scoringQuizzes.length) {\n        shouldDispatch = false;\n      }\n\n      if (shouldDispatch) {\n        dispatch(updateScoreAction(id, 1));\n        dispatch(addScormResponseAction(action));\n      }\n\n      setResult(isCorrect ? 'correct' : 'incorrect');\n      setShowFeedback(true);\n\n      submitted(1);\n    },\n  });\n\n  useEffect(() => {\n    if (!textAreaProxy.current) {\n      return;\n    }\n\n    updateTextAreaStyle();\n  }, []);\n\n  useEffect(() => {\n    if (isSubmitted) {\n      setShowFeedback(true);\n    }\n  }, [isSubmitted]);\n\n  // console.log(\n  //   // textAreaStyle,\n  //   // textArea?.current?.scrollHeight,\n  //   message?.current\n  // );\n\n  const sharedStyles = {\n    width: '100%',\n    height: '100%',\n    maxHeight: 240,\n    padding: '5px 5px 5px 20px',\n    fontFamily: messageFontFamily,\n    fontSize: messageFontSize,\n    color: messageTextColor,\n  };\n\n  const textAreaProxyHTML = message?.current.replace(/\\n/g, '<br>');\n\n  return (\n    <div\n      style={{\n        width: '100%',\n      }}\n    >\n      <div\n        style={{\n          position: 'relative',\n          maxHeight: sharedStyles.maxHeight,\n        }}\n      >\n        <div\n          ref={textAreaProxy}\n          style={{\n            ...sharedStyles,\n            visibility: 'hidden',\n            overflow: 'hidden',\n          }}\n          dangerouslySetInnerHTML={{\n            __html: textAreaProxyHTML || '*',\n          }}\n          aria-hidden=\"true\"\n        />\n\n        <textarea\n          ref={textArea}\n          placeholder=\"Type your message here...\"\n          css={css({\n            position: 'absolute',\n            left: 0,\n            top: 0,\n            border: 'none',\n            outline: 'none',\n            resize: 'none',\n            ...sharedStyles,\n            ...textAreaStyle,\n\n            ':focus': {\n              border: 'none !important',\n              outline: 'none !important',\n              // boxShadow: `0 0 0 1px ${messageTextColor}`,\n            },\n          })}\n          onFocus={() => {\n            setHasFocus(true);\n          }}\n          onBlur={() => {\n            setHasFocus(false);\n          }}\n          onKeyUp={e => {\n            updateTextAreaStyle();\n            message.current = e.currentTarget.value;\n            setIsLive(!!message.current);\n          }}\n        />\n      </div>\n\n      <div\n        style={{\n          width: '100%',\n          height: 1,\n          marginTop: 10,\n          // border: `${hasFocus ? 2 : 1}px solid ${messageBorderColor}`,\n          boxShadow: `0 0 0 ${hasFocus ? 1 : 0}px ${messageBorderColor}`,\n          background: messageBorderColor,\n          transition: 'box-shadow 0.3s',\n        }}\n      />\n      <div\n        style={{\n          display: 'flex',\n          justifyContent: 'center',\n          width: '100%',\n          margin: '20px 0 0 0',\n        }}\n      >\n        {submitBtn}\n      </div>\n\n      {showFeedback && (\n        <_>\n          {score ? (\n            cloneElement(feedbackScoring, {\n              result,\n              showAttemptNumber: false,\n              attempt: 1,\n              numberOfAttempts: 1,\n              navigationBehaviour: {\n                correct: false,\n                incorrect: true,\n              },\n              onClose() {\n                setShowFeedback(false);\n              },\n              useMediaInFeedback: true,\n            })\n          ) : (\n            <Modal\n              onClose={() => {\n                setShowFeedback(false);\n              }}\n              contentContainerStyles={{\n                position: 'absolute',\n                width: '100vw',\n                maxWidth: '100vw',\n                height: '100vh',\n                margin: 0,\n                padding: 0,\n                borderRadius: 0,\n              }}\n            >\n              {cloneElement(feedbackNonScoring, {\n                onClose() {\n                  console.log('why you no close !?!?');\n                  setShowFeedback(false);\n                },\n              })}\n            </Modal>\n          )}\n        </_>\n      )}\n    </div>\n  );\n};\n\nexport default TextEntry;\n","export const submitToCollect = ({\n  key,\n  rating,\n  message,\n  identity,\n  reference,\n}) => {\n  const myHeaders = new Headers();\n  myHeaders.append('Accept', 'application/json');\n  myHeaders.append('Content-Type', 'application/json');\n\n  //\n  const raw = JSON.stringify({\n    key,\n    response: {\n      rating,\n      content: message,\n      identity,\n      reference,\n    },\n  });\n\n  const requestOptions: any = {\n    method: 'POST',\n    headers: myHeaders,\n    body: raw,\n    redirect: 'follow',\n  };\n\n  const endPoint =\n    window.top!['collectResponseEndpoint'] ||\n    'https://collect.chameleoncreator.com/api/v1/responses/create';\n\n  if (!(window as any).hosted) {\n    fetch(endPoint, requestOptions)\n      .then(response => {\n        return response.text();\n      })\n      .then(result => console.log(result))\n      .catch(error => console.log('error', error));\n  }\n};\n","/** @jsx jsx */\n\nimport {\n  Children,\n  Fragment as _,\n  useState,\n  memo,\n  cloneElement,\n  useContext,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport Audio from 'components/lib/Audio';\nimport SVG from 'components/lib/SVG';\nimport PDF from 'components/lib/PDF';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport SubmitBtn from './SubmitBtn';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport Media from 'components/lib/Media';\nimport Embed from 'components/lib/Embed';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport shouldUpdate from 'services/shouldUpdate';\nimport IELayout from 'components/Layouts/IELayout';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport Media_default from 'assets/Rectangle.png';\nimport TextEntry from './TextEntry';\nimport Feedback from 'components/lib/Feedback/Feedback_updated_022022';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  InteractionColumn: ({ children }) => {\n    return children?.[0] || null;\n  },\n  TextEntry,\n  FeedbackNonScoring: props => {\n    const { onClose, children } = props;\n\n    const [img, txt, btn] = children;\n    return (\n      <div\n        css={css({\n          display: 'flex',\n          flexDirection: 'column',\n          alignContent: 'center',\n          // width: '100vw',\n          // height: '100vh',\n          // padding: 50,\n        })}\n      >\n        <div>{img}</div>\n\n        <div\n          css={css({\n            margin: '20px 0',\n          })}\n        >\n          {txt}\n        </div>\n\n        <div\n          css={css({\n            display: 'flex',\n            justifyContent: 'center',\n            width: '100%',\n          })}\n          onClick={onClose}\n        >\n          {btn}\n        </div>\n      </div>\n    );\n  },\n  Feedback,\n  Correct: ({ children, ...props }) => children,\n  Incorrect: ({ children, ...props }) => children,\n  Attempt: ({ children, ...props }) => children,\n  Image: ({ children, ...props }) => {\n    const updatedProps = {\n      ...props,\n    };\n\n    if (!props.src) {\n      updatedProps.placeholder = Media_default;\n    }\n\n    return <Image {...{ ...updatedProps, usePlaceholderValue: true }} />;\n    //\n  },\n  ColumnImageAndText: ({ children }) => {\n    const interactionContext = useContext(InteractionContext);\n    const { showFeedback, props } = interactionContext;\n    const { useMediaInColumn = true } = props;\n\n    // console.log({ showFeedback });\n\n    if (showFeedback) {\n      return null;\n    }\n\n    const [img, txt] = children;\n\n    return (\n      <div>\n        <div>{img}</div>\n        <div style={{ margin: '20px 0' }}>{txt}</div>\n      </div>\n    );\n    return useMediaInColumn ? children : txt;\n  },\n  TwoColumnLayout,\n  SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  EditableButton: SubmitBtn,\n  //EditableBtn\n  Video,\n  Audio,\n  SVG,\n  PDF,\n  OpenPDF,\n  Media,\n  Embed,\n  Transcript: ({ children }) => children,\n  ...IELayout(InteractionContext),\n};\n\nconst TextEntryDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  const [showFeedback, setShowFeedback] = useState<boolean>(false);\n\n  const renderedBlock = (interactionBlock.children as Block[]).map(child => {\n    return renderBlock(child, Components);\n  });\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{\n          ...interactionBlock,\n          isOpen: props.isOpen,\n          updateItemsSeen: null,\n          showFeedback,\n          setShowFeedback($: boolean) {\n            setShowFeedback($);\n          },\n        }}\n      >\n        {renderedBlock}\n      </InteractionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default TextEntryDisplay;\n","import TextAndImage from './TextEntryDisplay';\n\nexport default TextAndImage;\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport EditableBtn from 'components/lib/EditableBtn';\n\nconst SubmitBtn = props => {\n  const { enabled, onSubmit } = props;\n\n  return (\n    <div\n      css={css`\n        // // display: flex;\n        // // justify-content: center;\n        // width: 100%;\n        ${!window.dev() &&\n          `\n            opacity: ${enabled ? 1 : 0.25};\n            pointer-events: ${enabled ? 'auto' : 'none'};\n            transition: opacity 0.5s;\n        `}\n      `}\n    >\n      <EditableBtn\n        onClick={() => {\n          onSubmit();\n        }}\n        enabled={enabled}\n        {...props}\n      />\n    </div>\n  );\n};\n\nexport default SubmitBtn;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","/** @jsx jsx */\n\nimport { useState, useRef, useEffect, useLayoutEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\n\n//\n\ninterface TextAreaDynamicHeightProps {\n  minHeight?: number | undefined;\n  maxLinesBeforeScrolling?: number | undefined;\n  // maxHeightBeforeScrolling?: number | undefined;\n  style?: { [key: string]: string | number };\n  initialValue?: string | undefined;\n  placeholder?: string;\n  onUpdate?: (value: string) => void | undefined;\n}\n\nexport const TextAreaDynamicHeight = (props: TextAreaDynamicHeightProps) => {\n  const {\n    minHeight = 30,\n    maxLinesBeforeScrolling,\n    // maxHeightBeforeScrolling,\n    onUpdate,\n    style = {},\n    initialValue = '',\n    placeholder = 'Type your message here...',\n    ...rest\n  } = props;\n\n  const [init, setInit] = useState(false);\n  const [characterHeightMeasured, setCharacterHeightMeasured] = useState(0);\n  const [value, setValue] = useState(initialValue);\n\n  const characterHeight = useRef<HTMLDivElement>(null);\n  const proxy = useRef<HTMLDivElement>(null);\n  const textArea = useRef<HTMLTextAreaElement>(null);\n\n  const _style_: any = {\n    all: 'unset',\n    width: '100%',\n    whiteSpace: 'pre-wrap',\n    ...style,\n  };\n\n  let computedStyles = {\n    fontFamily: 'inherit',\n    fontSize: '0px',\n    paddingTop: '0px',\n    paddingBottom: '0px',\n  };\n\n  if (proxy?.current) {\n    computedStyles = getComputedStyle(proxy?.current);\n  }\n\n  const computedFontFamily = computedStyles?.fontFamily;\n  const computedFontSize = parseInt(computedStyles?.fontSize, 10);\n  const paddingTop = parseInt(computedStyles?.paddingTop, 10);\n  const paddingBottom = parseInt(computedStyles?.paddingBottom, 10);\n\n  let maxHeight = maxLinesBeforeScrolling\n    ? characterHeightMeasured * maxLinesBeforeScrolling +\n      (paddingTop + paddingBottom)\n    : '100%';\n\n  useLayoutEffect(() => {\n    characterHeight.current &&\n      setCharacterHeightMeasured(characterHeight.current.scrollHeight);\n  });\n\n  useEffect(() => {\n    if (textArea.current && value !== initialValue) {\n      setValue(initialValue);\n    }\n    //\n  }, [initialValue]);\n\n  useEffect(() => {\n    if (textArea.current && proxy.current && characterHeight.current) {\n      setInit(true);\n    }\n  });\n\n  return (\n    <div\n      style={{\n        position: 'relative',\n        visibility: init ? 'visible' : 'hidden',\n        minHeight,\n        maxHeight,\n      }}\n    >\n      <div\n        ref={characterHeight}\n        style={{\n          // all: 'unset',\n          fontFamily: computedFontFamily,\n          fontSize: computedFontSize,\n          position: 'absolute',\n          visibility: 'hidden',\n        }}\n      >\n        Aa\n      </div>\n      <div\n        ref={proxy}\n        style={{\n          ..._style_,\n          visibility: 'hidden',\n        }}\n        dangerouslySetInnerHTML={{\n          __html: `${value.replace(/\\n/g, '<br />')}<br />`,\n        }}\n      ></div>\n      <textarea\n        ref={textArea}\n        value={value}\n        placeholder={placeholder}\n        onChange={e => {\n          const { value } = e.currentTarget;\n          //\n          setValue(value);\n          onUpdate && onUpdate(value);\n        }}\n        style={{\n          ..._style_,\n          display: 'block',\n          position: 'absolute',\n          left: 0,\n          top: 0,\n          width: '100%',\n          height: '100%',\n        }}\n        {...rest}\n      />\n    </div>\n  );\n};\n","/** @jsx jsx */\n\nimport {\n  Fragment as _,\n  useContext,\n  useState,\n  cloneElement,\n  useRef,\n  useEffect,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport hexToRgb from 'services/hexToRGB';\nimport { TextAreaDynamicHeight } from 'components/UI/TextAreaDynamicHeight';\nimport { State } from 'store/store';\n\nconst TextEntryVariable = props => {\n  const interactionContext = useContext(InteractionContext);\n\n  const {\n    messageTextColor = '#000',\n    messageBorderColor = '#d2dff9',\n    messageFontFamily = 'inherit',\n    messageFontSize = 16,\n    messageTextBackgroundColor,\n    messageTextBackgroundOpacity,\n    variableName,\n  } = interactionContext.props;\n\n  const { children } = props;\n\n  const [_submitBtn_] = children;\n\n  const [isLive, setIsLive] = useState<boolean>(false);\n  const [isSubmitted, setIsSubmitted] = useState<string>('');\n  const [hasFocus, setHasFocus] = useState<boolean>(false);\n\n  const dispatch = useDispatch();\n\n  const moduleVariables = useSelector((state: State) => {\n    return state.moduleVariables || {};\n  });\n\n  const message = useRef<string>(moduleVariables[variableName] || '');\n\n  const { r, g, b } = hexToRgb(messageTextBackgroundColor);\n\n  let a = messageTextBackgroundOpacity / 100;\n  let backgroundColorRGBA = `rgba(${r}, ${g}, ${b}, ${a})`;\n\n  const sharedStyles = {\n    width: '100%',\n    height: '100%',\n    maxHeight: 240,\n    padding: '5px 5px 5px 20px',\n    fontFamily: messageFontFamily,\n    fontSize: messageFontSize,\n    color: messageTextColor,\n    background: backgroundColorRGBA,\n  };\n\n  const submitBtn = cloneElement(_submitBtn_, {\n    onClick() {\n      dispatch({\n        type: 'UPDATE_MODULE_VARIABLES',\n        data: {\n          [variableName]: message.current,\n        },\n      });\n\n      setIsSubmitted(message.current);\n    },\n    enabled: !isSubmitted && isLive,\n  });\n\n  useEffect(() => {\n    if (isSubmitted) {\n      unlockInteraction(interactionContext.id);\n    }\n  }, [isSubmitted]);\n\n  return (\n    <div\n      style={{\n        width: '100%',\n      }}\n    >\n      <div\n        css={css({\n          position: 'relative',\n          color: messageTextColor,\n          fontSize: messageFontSize,\n\n          'textarea::placeholder': {\n            color: messageTextColor,\n          },\n\n          'textarea:focus': {\n            border: 'none !important',\n            outline: 'none !important',\n          },\n        })}\n      >\n        <TextAreaDynamicHeight\n          minHeight={35}\n          maxLinesBeforeScrolling={5}\n          placeholder=\"Type your response here...\"\n          onUpdate={value => {\n            setIsSubmitted('');\n            //\n            setIsLive(!!value);\n\n            message.current = value?.trim();\n          }}\n          //\n          {...{\n            onFocus() {\n              // console.log('focus true');\n              setHasFocus(true);\n            },\n\n            onBlur() {\n              // console.log('focus false');\n              setHasFocus(false);\n            },\n\n            name: variableName,\n          }}\n          initialValue={moduleVariables[variableName]}\n        />\n      </div>\n\n      <div\n        style={{\n          width: '100%',\n          height: 1,\n          marginTop: 5,\n          boxShadow: `0 0 0 ${hasFocus ? 1 : 0}px ${messageBorderColor}`,\n          background: messageBorderColor,\n          transition: 'box-shadow 0.3s',\n        }}\n      />\n      <div\n        style={{\n          position: 'relative',\n          display: 'flex',\n          justifyContent: 'center',\n          width: '100%',\n          margin: '20px 0 0 0',\n        }}\n      >\n        {submitBtn}\n      </div>\n    </div>\n  );\n};\n\nexport default TextEntryVariable;\n","/** @jsx jsx */\n\nimport {\n  Children,\n  Fragment as _,\n  useState,\n  memo,\n  cloneElement,\n  useContext,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport Audio from 'components/lib/Audio';\nimport SVG from 'components/lib/SVG';\nimport PDF from 'components/lib/PDF';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport SubmitBtn from './SubmitBtn';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport Media from 'components/lib/Media';\nimport Embed from 'components/lib/Embed';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport shouldUpdate from 'services/shouldUpdate';\nimport IELayout from 'components/Layouts/IELayout';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport Media_default from 'assets/Rectangle.png';\nimport TextEntryVariable from './TextEntryVariable';\nimport Feedback from 'components/lib/Feedback/Feedback_updated_022022';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: ({ children, ...props }) => {\n    return (\n      <EditableText\n        {...{\n          ...props,\n          placeholder:\n            'Ask your users a question here, \"i.e what is your name\"',\n        }}\n      />\n    );\n  },\n  InteractionColumn: ({ children }) => {\n    return children?.[0] || null;\n  },\n  TextEntryVariable,\n  Image: ({ children, ...props }) => {\n    const updatedProps = {\n      ...props,\n    };\n\n    if (!props.src) {\n      updatedProps.placeholder = Media_default;\n    }\n\n    return <Image {...{ ...updatedProps, usePlaceholderValue: true }} />;\n    //\n  },\n  ColumnImageAndText: ({ children }) => {\n    // return null;\n\n    const interactionContext = useContext(InteractionContext);\n    const { props } = interactionContext;\n    const { useMediaInColumn = false } = props;\n\n    const [img, txt] = children;\n\n    return (\n      <div>\n        {useMediaInColumn ? <div>{img}</div> : null}\n        <div style={{ margin: '20px 0' }}>{txt}</div>\n      </div>\n    );\n  },\n  TwoColumnLayout,\n  SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  EditableButton: SubmitBtn,\n  //EditableBtn\n  Video,\n  Audio,\n  SVG,\n  PDF,\n  OpenPDF,\n  Media,\n  Embed,\n  Transcript: ({ children }) => children,\n  ...IELayout(InteractionContext),\n};\n\nconst TextEntryVariableDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  const [showFeedback, setShowFeedback] = useState<boolean>(false);\n\n  const renderedBlock = (interactionBlock.children as Block[]).map(child => {\n    return renderBlock(child, Components);\n  });\n\n  // console.log({ 'isOpen: props.isOpen': props.isOpen });\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{\n          ...interactionBlock,\n          isOpen: props.isOpen,\n          updateItemsSeen: null,\n          showFeedback,\n          setShowFeedback($: boolean) {\n            setShowFeedback($);\n          },\n        }}\n      >\n        {renderedBlock}\n      </InteractionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default TextEntryVariableDisplay;\n","/** @jsx jsx */\n\nimport {\n  Fragment as _,\n  useContext,\n  useState,\n  cloneElement,\n  useRef,\n  useEffect,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport { useDispatch } from 'react-redux';\nimport { submitToCollect } from 'services/submitToCollect';\nimport { unlockInteraction } from 'services/unlockInteraction';\nimport { useScoringQuizzes } from 'services/apiHelpers/useScoringQuizzes';\nimport { addScormResponseAction } from 'actions/addScormResponseAction';\nimport { updateScoreAction } from 'actions/updateScoreAction';\nimport { Report } from 'store/store';\nimport pubSub from 'services/pubSub';\nimport { TextEntry } from 'components/UI/TextEntry';\n\ntype Result = 'correct' | 'incorrect' | 'attempt' | undefined;\nenum SubmitState {\n  Initial = 0,\n  Resolved = 2,\n}\n\nconst TextEntryQuiz = props => {\n  const interactionContext = useContext(InteractionContext);\n\n  const {\n    messageTextColor = '#000',\n    messageBorderColor = '#d2dff9',\n    fontFamily = 'inherit',\n    messageFontSize = 16,\n    score,\n    correctAnswer = '',\n    useMediaInColumn = true,\n    lockDown = 0,\n    numberOfAttempts = 1,\n    showAttemptNumber = true,\n    useMediaInFeedback = true,\n    showCorrectAnswer = true,\n    navigationBehaviour = {\n      correct: false,\n      incorrect: false,\n    },\n    includeFeedback = true,\n    includeQuestionTextPlusImage,\n    correctAnswerRequirement = 'any',\n  } = interactionContext.props;\n\n  const { children } = props;\n\n  let [txt, submitBtn, feedback] = children;\n\n  const [textAreaStyle, setTextAreaStyle] = useState<{\n    height?: number;\n    overflow?: string;\n  }>({});\n\n  const [attempt, setAttempt] = useState<number>(0);\n  const [result, setResult] = useState<Result>(undefined);\n  const [resolved, setResolved] = useState<SubmitState>(0);\n  const [isLive, setIsLive] = useState<boolean | undefined>(undefined);\n  const [isSubmitted, setIsSubmitted] = useState<boolean>(false);\n  const [showFeedback, setShowFeedback] = useState<boolean>(false);\n\n  const [hasFocus, setHasFocus] = useState<boolean>(false);\n\n  const scoringQuizzes = useScoringQuizzes();\n  const dispatch = useDispatch();\n\n  const message = useRef<string>('');\n  const [_message_, setMessage] = useState('');\n  message.current = _message_;\n\n  submitBtn = cloneElement(submitBtn, {\n    onClick() {\n      const { id } = interactionContext;\n      const questionTextElement = document.querySelector(\n        `#text-entry-quiz-question-${id}`\n      ) as HTMLDivElement;\n      const chameleonTextElement = questionTextElement?.querySelector(\n        `.chameleon-text p`\n      ) as HTMLElement;\n\n      // question might be an image ? get its alt ?\n      let question = '';\n      if (chameleonTextElement) {\n        question = chameleonTextElement.innerText;\n      }\n\n      let correctAnswerStringToArray;\n      let isCorrect;\n\n      // if a correctAnswer has been provided. and not undefined (or empty string)\n      if (!!correctAnswer) {\n        correctAnswerStringToArray = correctAnswer\n          .replace(/ /g, '')\n          .split(/,/g)\n          .map(entry => {\n            return entry.toLowerCase();\n            // .trim(); < no need to trim if we're removing all spaces\n          });\n\n        isCorrect = correctAnswerStringToArray[\n          correctAnswerRequirement === 'any' ? 'some' : 'every'\n        ](entry => {\n          const regEx = new RegExp(entry, 'g');\n          return regEx.test(message.current.replace(/ /g, '').toLowerCase());\n        });\n      } else {\n        isCorrect = true;\n      }\n\n      let result: Result = isCorrect ? 'correct' : 'incorrect';\n\n      const action = {\n        id,\n        type: 'fill-in',\n        question,\n        reportable: 'fillin',\n        response: message?.current,\n        correct: `${correctAnswerRequirement} of: ${correctAnswer}`,\n        result: isCorrect ? 1 : 0,\n      } as Report;\n\n      // dispatch if scoring and there's no scoringQuizzes etc\n\n      let shouldDispatchScore = Boolean(score);\n\n      //\n      if (scoringQuizzes.length) {\n        shouldDispatchScore = false;\n      }\n\n      if (shouldDispatchScore) {\n        dispatch(updateScoreAction(id, action.result));\n      }\n\n      dispatch(addScormResponseAction(action));\n\n      const unlock = result === 'correct' || attempt === numberOfAttempts - 1;\n\n      if (unlock) {\n        unlockInteraction(id);\n        setIsLive(false);\n\n        setResolved(2);\n      }\n\n      if (result !== 'correct') {\n        if (attempt < numberOfAttempts - 1) {\n          setAttempt(attempt => {\n            return (attempt += 1);\n          });\n          result = 'attempt';\n        } else {\n          result = 'incorrect';\n        }\n      }\n\n      setResult(result);\n      setShowFeedback(true);\n    },\n  });\n\n  useEffect(() => {\n    if (isSubmitted) {\n      setShowFeedback(true);\n    }\n  }, [isSubmitted]);\n\n  useEffect(() => {\n    const pS = pubSub.subscribe(\n      `TEXT_ENTRY_QUIZ_${interactionContext.id}`,\n      ({ showFeedback }) => {\n        setResult(showFeedback);\n        setShowFeedback(true);\n      }\n    );\n\n    return pS;\n  }, []);\n\n  const sharedStyles = {\n    width: '100%',\n    height: '100%',\n    maxHeight: 240,\n    padding: '5px 5px 5px 20px',\n    fontFamily,\n    fontSize: messageFontSize,\n    color: messageTextColor,\n  };\n\n  return (\n    <div\n      style={{\n        width: '100%',\n        ...(resolved && {\n          pointerEvents: 'none',\n        }),\n      }}\n    >\n      <div\n        id={`text-entry-quiz-question-${interactionContext.id}`}\n        style={{ margin: '0 0 20px 0' }}\n      >\n        {txt}\n      </div>\n      <div\n        style={{\n          position: 'relative',\n          maxHeight: sharedStyles.maxHeight,\n        }}\n      >\n        <TextEntry\n          message={message.current}\n          onUpdate={value => {\n            setMessage(value);\n            setIsLive(!!value);\n          }}\n          messageContainer={null}\n          messageUnderline={messageBorderColor}\n          messageTextColor={messageTextColor}\n          // messageTextBackgroundColor={\n          //   `rgba(${r}, ${g}, ${b}, ${a})` || messageTextBackgroundColor\n          // }\n          messageTextBackgroundColor={'transparent'}\n          messageBorderRadius={0}\n          messageBorderColor={messageBorderColor}\n          messageFontFamily={fontFamily}\n          messageFontSize={messageFontSize}\n          textAlign={'left'}\n          maxLinesBeforeScrolling={4}\n          // maxHeight={115}\n          placeholderText=\"Type your answer here...\"\n        />\n      </div>\n\n      <div\n        style={{\n          width: '100%',\n          margin: '20px 0 0 0',\n        }}\n      >\n        <div\n          style={{\n            ...(!window.dev() && {\n              opacity: isLive ? 1 : 0.25,\n              pointerEvents: isLive ? 'auto' : 'none',\n              transition: 'opacity 0.5s',\n            }),\n          }}\n        >\n          {submitBtn}\n        </div>\n      </div>\n\n      {includeFeedback &&\n        showFeedback &&\n        cloneElement(feedback, {\n          result,\n          showAttemptNumber,\n          attempt,\n          numberOfAttempts,\n          navigationBehaviour,\n          onClose() {\n            setShowFeedback(false);\n          },\n          useMediaInFeedback,\n        })}\n    </div>\n  );\n};\n\nexport default TextEntryQuiz;\n","import TextEntryVariableDisplay from './TextEntryVariableDisplay';\n\nexport default TextEntryVariableDisplay;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","/** @jsx jsx */\n\nimport {\n  Children,\n  Fragment as _,\n  useState,\n  memo,\n  cloneElement,\n  useContext,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport Audio from 'components/lib/Audio';\nimport SVG from 'components/lib/SVG';\nimport PDF from 'components/lib/PDF';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport SubmitBtn from './SubmitBtn';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport Media from 'components/lib/Media';\nimport Embed from 'components/lib/Embed';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport shouldUpdate from 'services/shouldUpdate';\nimport IELayout from 'components/Layouts/IELayout';\nimport { OpenPDF } from 'components/lib/PDF/OpenPDF';\nimport Media_default from 'assets/Rectangle.png';\nimport TextEntryQuiz from './TextEntryQuiz';\nimport Feedback from 'components/lib/Feedback/Feedback_updated_022022';\nimport CC_Text_Entry_Quiz_Placeholder from 'assets/CC_Text_Entry_Quiz_Placeholder.png';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  TextEntryQuiz,\n  InteractionColumn: ({ children }) => {\n    return children?.[0] || null;\n  },\n  Feedback,\n  Correct: ({ children, ...props }) => children,\n  Incorrect: ({ children, ...props }) => children,\n  Attempt: ({ children, ...props }) => children,\n  Image: ({ children, ...props }) => {\n    const updatedProps = {\n      ...props,\n    };\n\n    if (!props.src) {\n      updatedProps.placeholder = CC_Text_Entry_Quiz_Placeholder;\n    }\n    return <Image {...{ ...updatedProps, usePlaceholderValue: true }} />;\n    //\n  },\n\n  TwoColumnLayout,\n  SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  EditableButton: EditableBtn,\n  Video,\n  Audio,\n  SVG,\n  PDF,\n  OpenPDF,\n  Media,\n  Embed,\n  Transcript: ({ children }) => children,\n  ...IELayout(InteractionContext),\n};\n\nconst TextEntryQuizDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  const [showFeedback, setShowFeedback] = useState<boolean>(false);\n\n  const renderedBlock = (interactionBlock.children as Block[]).map(child => {\n    return renderBlock(child, Components);\n  });\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{\n          ...interactionBlock,\n          isOpen: props.isOpen,\n          updateItemsSeen: null,\n          showFeedback,\n          setShowFeedback($: boolean) {\n            setShowFeedback($);\n          },\n        }}\n      >\n        {renderedBlock}\n      </InteractionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default TextEntryQuizDisplay;\n","import TextEntryQuizDisplay from './TextEntryQuizDisplay';\n\nexport default TextEntryQuizDisplay;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext(null);\n","/** @jsx jsx */\n\nimport React, { Fragment as _, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\n\nconst Assessment = ({ children, ...props }) => {\n  // console.log('Assessment', children);\n\n  return (\n    <div\n      css={css`\n        padding: 10px;\n      `}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport default Assessment;\n","import React, { Fragment as _, useContext } from 'react';\nimport { Box } from 'theme-ui';\n\nconst AssessmentIntroduction = ({ children, ...props }) => {\n  return (\n    <Box\n      sx={{\n        minHeight: '100vh',\n        background: 'red',\n      }}\n    >\n      <h1>Assessment Introduction</h1>\n    </Box>\n  );\n};\n\nexport default AssessmentIntroduction;\n","import React, { Fragment as _, useContext } from 'react';\nimport { Box } from 'theme-ui';\n\nconst AssessmentQuestion = ({ children, ...props }) => {\n  return (\n    <Box\n      sx={{\n        minHeight: '100vh',\n        background: 'lime',\n      }}\n    >\n      <h1>Assessment Question</h1>\n    </Box>\n  );\n};\n\nexport default AssessmentQuestion;\n","import React, { Fragment as _, useContext } from 'react';\nimport { Box } from 'theme-ui';\n\nconst AssessmentResults = ({ children, ...props }) => {\n  return (\n    <Box\n      sx={{\n        minHeight: '100vh',\n        background: 'yellow',\n      }}\n    >\n      <h1>Assessment Results</h1>\n    </Box>\n  );\n};\n\nexport default AssessmentResults;\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  memo,\n  useMemo,\n  useState,\n  useContext,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport { colors } from 'styles/variables';\nimport getTempTextImageData from 'services/getTempTextImageContinueBtnData';\nimport expandBlock from 'services/apiHelpers/expandBlock';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column, Button, Box } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport SVG from 'components/lib/SVG';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { connect } from 'react-redux';\nimport { interactionContext } from './interactionContext';\nimport Media from 'components/lib/Media';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport shouldUpdate from 'services/shouldUpdate';\nimport IELayout from 'components/Layouts/IELayout';\nimport Assessment from './Assessment';\nimport AssessmentIntroduction from './AssessmentIntroduction';\nimport AssessmentQuestion from './AssessmentQuestion';\nimport AssessmentResults from './AssessmentResults';\n\nconst { lPink, lGrey0, lGrey1, lGrey2 } = colors;\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  // FullPageText: ({ children, ...props }) => (\n  //   <div\n  //     css={css`\n  //       padding: 10px;\n  //     `}\n  //   >\n  //     {children}\n\n  //     <TermsAndConditions\n  //     // onClick={() => {\n  //     //   console.log('terms met');\n  //     // }}\n  //     />\n  //   </div>\n  // ),\n  Assessment,\n  AssessmentIntroduction,\n  AssessmentQuestions: ({ children, ...props }) => children,\n  AssessmentQuestion,\n  AssessmentResults,\n  Image,\n  TwoColumnLayout,\n  SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  Video,\n  SVG,\n  Media,\n  ...IELayout(interactionContext),\n};\n\nconst AssessmentDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <interactionContext.Provider\n        value={{ ...interactionBlock, updateItemsSeen: null } as any}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </interactionContext.Provider>\n    </Container>\n  );\n});\n// shouldUpdate\n\nexport default AssessmentDisplay;\n","import AssessmentDisplay from './AssessmentDisplay';\n\nexport default AssessmentDisplay;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext(null);\n","import React, { Fragment as _, useContext } from 'react';\nimport { Box } from 'theme-ui';\nimport { interactionContext as InteractionContext } from './interactionContext';\n\nconst AssessmentIntroduction = ({ children, ...props }) => {\n  const interactionContext = useContext<any>(InteractionContext);\n\n  const [img, text] = children;\n\n  const { includeMedia = true } = interactionContext.props;\n\n  return (\n    <Box\n      sx={{\n        padding: '20px',\n      }}\n    >\n      {includeMedia && (\n        <Box\n          sx={{\n            margin: '20px 0',\n            img: {\n              maxHeight: '50vh',\n            },\n          }}\n        >\n          {img}\n        </Box>\n      )}\n\n      <Box\n        sx={{\n          marginBottom: '20px',\n        }}\n      >\n        {text}\n      </Box>\n    </Box>\n  );\n};\n\nexport default AssessmentIntroduction;\n","/** @jsx jsx */\n\nimport React, { Fragment as _, memo } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport { colors } from 'styles/variables';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column, Button, Box } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport Transcript from 'components/lib/Video/Transcript';\nimport SVG from 'components/lib/SVG';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { interactionContext } from './interactionContext';\nimport Media from 'components/lib/Media';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport IELayout from 'components/Layouts/IELayout';\nimport AssessmentIntroduction from './AssessmentIntroduction';\nimport PDF from 'components/lib/PDF';\nimport Audio from 'components/lib/Audio';\nimport Embed from 'components/lib/Embed';\nimport imagePlaceholder from 'assets/new_assessment_intro_default.png';\nimport shouldUpdate from 'services/shouldUpdate';\n\nconst { lPink, lGrey0, lGrey1, lGrey2 } = colors;\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  AssessmentIntroduction,\n  Image: ({ children, ...props }) => {\n    return (\n      <Image\n        {...{\n          ...props,\n          placeholder: imagePlaceholder,\n        }}\n      />\n    );\n  },\n  TwoColumnLayout,\n  SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  Video,\n  SVG,\n  Media,\n  Audio,\n  EditableButton: null,\n  Embed,\n  Transcript,\n  PDF,\n  OpenPDF: ({ children, ...props }) => children,\n  ...IELayout(interactionContext),\n};\n\nconst AssessmentIntroductionDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <interactionContext.Provider\n        value={{ ...interactionBlock, updateItemsSeen: null } as any}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </interactionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default AssessmentIntroductionDisplay;\n","import AssessmentIntroductionDisplay from './AssessmentIntroductionDisplay';\n\nexport default AssessmentIntroductionDisplay;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext({});\n","import React, { Fragment as _, FC } from 'react';\nimport { Box } from 'theme-ui';\n\ninterface ISubmitContinue {\n  selected: string[];\n  location: string;\n  navigateToResults: boolean;\n  onSubmit: () => void;\n  children;\n}\n\nconst SubmitContinue: FC<ISubmitContinue> = props => {\n  const { selected, location, navigateToResults, onSubmit, children } = props;\n\n  return (\n    <Box\n      sx={{\n        display: 'flex',\n        justifyContent: 'center',\n        margin: '20px 0',\n        //\n\n        transition: 'opacity 0.2s',\n        visibility:\n          window.dev && window.dev()\n            ? 'visible'\n            : !selected.length\n            ? 'hidden'\n            : 'visible',\n      }}\n    >\n      <Box\n        sx={{\n          cursor: 'pointer',\n        }}\n        onClick={(e: React.MouseEvent) => {\n          if (window.dev && window.dev()) {\n            return;\n          }\n\n          navigateToResults ? requestAnimationFrame(onSubmit) : onSubmit();\n        }}\n      >\n        <Box\n          sx={{\n            'div [class*=\"NavigationButton\"]': {\n              top: '-10px',\n              height: 'calc(100% + 20px)',\n            },\n          }}\n        >\n          {React.cloneElement(children, {\n            location: navigateToResults ? location : 'next',\n          })}\n        </Box>\n      </Box>\n    </Box>\n  );\n};\n\nexport default SubmitContinue;\n","import React, {\n  Fragment as _,\n  createContext,\n  useState,\n  useRef,\n  useContext,\n  useEffect,\n  useMemo,\n} from 'react';\nimport { Box } from 'theme-ui';\nimport { AssessmentContext } from 'components/Module/AssessmentContainer';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport { updateAssessmentAction } from 'actions/updateAssessmentAction';\nimport { useSelector, useDispatch } from 'react-redux';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport { State } from 'store/store';\nimport getCurrentTopic from 'services/apiHelpers/getCurrentTopic';\nimport SubmitContinue from './SubmitContinue';\nimport { updateScoreAction } from 'actions/updateScoreAction';\nimport { addScormResponseAction } from 'actions/addScormResponseAction';\nimport { Report } from 'store/store';\n\ninterface IAssessmentQuestionContext {\n  singleSelect: boolean;\n  selected: string[];\n  isLocked: boolean;\n}\n\nconst AssessmentQuestionContext = createContext<IAssessmentQuestionContext>({\n  singleSelect: true,\n  selected: [],\n  isLocked: false,\n});\n\nconst CONTINUE = 'Continue';\nconst SUBMIT = 'Submit';\n\nconst hasUpdatedScoreRaw: any = {};\n\nconst AssessmentQuestion = ({ children, ...props }) => {\n  const assessmentContext = useContext(AssessmentContext);\n  const interactionContext = useContext<any>(InteractionContext);\n\n  const { assessmentId, maxAttempts } = assessmentContext;\n\n  const { scoring } = getBlockById(assessmentId).props as any;\n  // console.log({ scoring });\n\n  const {\n    name,\n    includeMedia = true,\n    dividerColor = '#CADCF2',\n    questionCounterColor = 'inherit',\n    font = 'inherit',\n    textColor,\n    correctOptions,\n    //\n  } = interactionContext.props;\n\n  const { id } = props;\n\n  // questionCounter,\n  const [img, text, options, submitBtn] = children;\n\n  // set the default correctOptions to the first option\n  if (!correctOptions.length) {\n    // correctOptions = [options.props.children[0].props.id];\n  }\n\n  const assessment = useSelector((state: State) => {\n    // since now we're destroying the assessment in preview on reload\n    return state.assessments[assessmentId] || {};\n  });\n\n  const assessmentData = assessment && assessment.data ? assessment.data : {};\n  const questionData =\n    assessment && assessment.results && assessment.results[id]\n      ? assessment.results[id]\n      : {};\n\n  const {\n    answer = [],\n    isCorrect = undefined,\n    attemptCount = 0,\n    submitButtonLabel = 'Submit',\n    navigateToResults = false,\n    isLocked = false,\n  } = questionData;\n\n  const selected = answer;\n  const setSelected = selected => {\n    dispatch(\n      updateAssessmentAction({\n        assessmentId,\n        questionData: {\n          [id]: {\n            ...questionData,\n            answer: selected,\n          },\n        },\n      })\n    );\n  };\n\n  const dispatch = useDispatch();\n  //\n\n  const interactionsInAssessment = useMemo(() => {\n    return getInteractionsInTopic(getBlockById(assessmentId));\n  }, [window.dev() ? Math.random() : assessmentId]);\n  // this might well fail in dev. need to account for window.dev()\n  // here in dev we ? a random value which has the effect of running each time\n  // to account for adding removing questions or other settings applied\n  // outside of the question\n\n  const questions = interactionsInAssessment.filter((i: any) => {\n    return [i.props.type, i.meta.subType].includes('AssessmentQuestion');\n  });\n\n  const questionIndex = questions.findIndex((q: any) => {\n    //\n    return q.children[0].id === id;\n  });\n\n  const singleSelect = correctOptions.length === 1;\n\n  if (window.dev && window.dev()) {\n    // isLocked = false;\n  }\n\n  const location = useMemo(() => {\n    const assessment = getCurrentTopic() as Block;\n    const resultsPage =\n      interactionsInAssessment[interactionsInAssessment.length - 1];\n    return `${assessment?.props?.sId || assessment.id}/${resultsPage?.props\n      ?.sId || resultsPage.id}`;\n  }, []);\n  //\n\n  const onSubmit = () => {\n    if (submitButtonLabel === 'Continue') {\n      return;\n    }\n\n    //\n    const isCorrect = selected.sort().join() === correctOptions.sort().join();\n\n    dispatch(\n      updateAssessmentAction({\n        assessmentId,\n        questionData: {\n          [id]: {\n            id,\n            questionName: name,\n            answer: selected,\n            correctAnswer: correctOptions,\n            isCorrect,\n            attemptCount: attemptCount ? attemptCount + 1 : 1,\n            submitButtonLabel: 'Continue',\n            navigateToResults: false,\n            isLocked: true,\n          },\n        },\n      })\n    );\n\n    let questionText: HTMLDivElement | string = document.querySelector(\n      `#i${interactionContext.id} form .chameleon-text`\n    ) as HTMLDivElement;\n\n    if (questionText) {\n      questionText = questionText.innerText;\n    }\n\n    //\n\n    const optionIds = options.props.children.map((o: any) => {\n      return o.props.id;\n    });\n\n    const response = selected\n      .map(s => {\n        return `${optionIds.indexOf(s) + 1}`;\n      })\n      .sort()\n      .join(',');\n\n    const getCorrectAndResponseOptions = entry => {\n      let answer = '';\n\n      const content = document.querySelector(`#i${entry}`) as HTMLInputElement;\n      if (content && content.labels) {\n        answer = content.labels[0].innerText;\n      }\n\n      // console.log(answer);\n\n      return answer;\n    };\n\n    const correctExpanded = correctOptions\n      .map(getCorrectAndResponseOptions)\n      .join(',');\n\n    const responseExpanded = selected\n      .map(getCorrectAndResponseOptions)\n      .join(',');\n\n    // console.log(questionText);\n    // console.log('correct :', correctExpanded);\n    // console.log('response :', responseExpanded);\n\n    // this mimics the multichoice / sortation pattern of updating userBehaviour\n    //\n    const action = {\n      id,\n      type: 'fill-in',\n      question: questionText,\n      reportable: 'multichoice' as 'multichoice',\n      response: responseExpanded,\n      correct: correctExpanded,\n      result: !isCorrect ? 0 : 1,\n    } as Report;\n\n    if (scoring) {\n      dispatch(updateScoreAction(interactionContext.id, !isCorrect ? 0 : 1));\n      dispatch(addScormResponseAction(action));\n    }\n  };\n\n  useEffect(() => {\n    if (!scoring || hasUpdatedScoreRaw[interactionContext.id]) {\n      return;\n    }\n\n    //\n    if (isLocked && isCorrect && !hasUpdatedScoreRaw[interactionContext.id]) {\n      dispatch(updateScoreAction(interactionContext.id, 1));\n      hasUpdatedScoreRaw[interactionContext.id] = true;\n\n      // console.log('send scoreRaw on load. . .', {\n      //   isLocked,\n      //   isCorrect,\n      //   [interactionContext.id]: hasUpdatedScoreRaw[interactionContext.id],\n      // });\n    }\n  }, [isLocked, isCorrect]);\n\n  return (\n    <AssessmentQuestionContext.Provider\n      value={\n        {\n          singleSelect,\n          selected: window.dev && window.dev() ? correctOptions : selected,\n          setSelected(id) {\n            if (singleSelect) {\n              setSelected([id]);\n\n              return;\n            }\n\n            const newSelected: string[] = [...selected];\n\n            if (!newSelected.includes(id)) {\n              newSelected.push(id);\n              setSelected(newSelected);\n              return;\n            }\n\n            newSelected.splice(newSelected.indexOf(id), 1);\n            setSelected(newSelected);\n          },\n          isLocked,\n        } as IAssessmentQuestionContext\n      }\n    >\n      <form\n        style={{\n          width: '100%',\n          height: '100%',\n        }}\n        onSubmit={e => {\n          e.preventDefault();\n        }}\n      >\n        <Box\n          sx={{\n            // margin: '50px 0',\n            padding: '50px 20px',\n            // this'll lock the question\n            ...(isLocked && {\n              '*': {\n                // pointerEvents: 'none',\n                // opacity: 0.5,\n              },\n            }),\n          }}\n        >\n          <Box\n            as=\"h4\"\n            sx={{\n              margin: includeMedia ? 0 : '20px 0',\n              fontSize: '16px',\n              color: questionCounterColor || textColor,\n              textAlign: 'center',\n              fontFamily: `${font} !important`,\n\n              '*': {\n                fontFamily: `${font} !important`,\n              },\n            }}\n          >\n            Question {questionIndex + 1} of {questions.length}\n          </Box>\n          {includeMedia && (\n            <Box\n              sx={{\n                display: 'flex',\n                justifyContent: 'center',\n                margin: '20px 0',\n                img: {\n                  // maxWidth: 'calc(30vh) !important',\n                },\n              }}\n            >\n              {img}\n            </Box>\n          )}\n\n          <Box sx={{}}>{text}</Box>\n\n          <Box\n            as=\"hr\"\n            sx={{\n              margin: '30px 0 25px 0',\n              border: `1px solid ${dividerColor || '#CADCF2'}`,\n            }}\n            aria-hidden=\"true\"\n          />\n          <Box\n            sx={{\n              ...(isLocked && {\n                pointerEvents: 'none',\n              }),\n            }}\n          >\n            {options}\n          </Box>\n\n          <SubmitContinue\n            selected={selected}\n            location={location}\n            onSubmit={onSubmit}\n            navigateToResults={navigateToResults}\n          >\n            {React.cloneElement(submitBtn, {\n              label: submitButtonLabel,\n            })}\n          </SubmitContinue>\n        </Box>\n      </form>\n    </AssessmentQuestionContext.Provider>\n  );\n};\n\nexport default AssessmentQuestion;\nexport { AssessmentQuestionContext };\n","import React, { Fragment as _, useContext } from 'react';\nimport { Box } from 'theme-ui';\nimport { AssessmentQuestionContext } from './AssessmentQuestion';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport { getButtonFocus } from 'styles/variables';\nimport hexToRGB from 'services/hexToRGB';\n\nconst CheckboxRadioBtn = props => {\n  const assessmentQuestionContext = useContext<any>(AssessmentQuestionContext);\n  const { singleSelect, selected, setSelected } = assessmentQuestionContext;\n  const { id, color, selectedColor } = props;\n\n  return (\n    <Box\n      id={`checkbox-radio-${id}`}\n      sx={{\n        width: 20,\n        height: 20,\n        background: selected.includes(id) ? selectedColor : color,\n        borderRadius: singleSelect ? '50%' : 0,\n        boxShadow: '0 0 0 1px rgba(0,0,0,0.15)',\n        transition: 'background, box-shadow 0.15s',\n\n        cursor: 'pointer',\n        ':hover': {\n          boxShadow: '0 0 3px 2px rgba(0,0,0,0.15)',\n        },\n\n        pointerEvents: window.dev() ? 'none' : 'auto',\n      }}\n    ></Box>\n  );\n};\n\nconst AssessmentQuestionOption = ({ children, ...props }) => {\n  const assessmentQuestionContext = useContext<any>(AssessmentQuestionContext);\n  const interactionContext = useContext<any>(InteractionContext);\n\n  const {\n    singleSelect,\n    selected,\n    setSelected,\n    isLocked,\n  } = assessmentQuestionContext;\n\n  const {\n    optionBackgroundColor = 'fff',\n    dropShadow = true,\n    optionCheckboxColor,\n    optionCheckboxSelectedColor,\n    optionBorderRadius = 10,\n  } = interactionContext.props;\n\n  const { id, qNum, numOptions, index } = props;\n\n  const lastOptionIsOddIndex = index === numOptions - 1 && !!(numOptions % 2);\n  let marginX = lastOptionIsOddIndex ? 'noMargin' : index % 2;\n  //\n\n  const margin = {\n    0: '10px 20px 10px 0',\n    1: '10px 0 10px 20px',\n    noMargin: '10px 0',\n  }[marginX];\n\n  // TODO - extract this\n  let optionBackgroundColorIsWhite: number[] | boolean = Object.values(\n    hexToRGB(optionBackgroundColor) || {}\n  );\n\n  if (optionBackgroundColorIsWhite.length) {\n    optionBackgroundColorIsWhite = optionBackgroundColorIsWhite.every(\n      entry => entry === 0\n    );\n  }\n\n  const focus = getButtonFocus(\n    optionBackgroundColorIsWhite ? '#000' : optionBackgroundColor\n  ).replace('box-shadow: ', '');\n\n  return (\n    <Box\n      className=\"chameleon-assessment-option\"\n      sx={{\n        display: 'flex',\n        alignItems: 'center',\n        minHeight: 50,\n        width: '100%',\n        maxWidth: 'calc(50% - 20px)',\n        margin,\n        padding: '0 0 0 10px',\n        background: optionBackgroundColor,\n        borderRadius: optionBorderRadius,\n        boxShadow: dropShadow ? '0px 0px 6px 0px rgba(0,0,0,0.15)' : 'none',\n\n        transition: 'box-shadow 0.1s',\n\n        '&:focus-visible': {\n          boxShadow: `${focus.trim()}`,\n        },\n\n        '@media screen and (max-width: 768px)': {\n          maxWidth: '100%',\n          margin: '10px 0 !important',\n        },\n\n        // we kill pointerEvents at the root\n        // and enable for children below specifically\n        // . . .\n        pointerEvents: 'none',\n\n        ...(isLocked && {\n          '* :not([class*=\"TextToSpeech\"])': {\n            pointerEvents: 'none !important',\n          },\n        }),\n      }}\n      tabIndex={isLocked ? -1 : 0}\n      onKeyDown={e => {\n        if (window.dev()) {\n          return;\n        }\n\n        // something something to prevent the window from scrolling\n        // when using the spaceBar to select / deselect option\n        if (e.keyCode === 32) {\n          e.preventDefault();\n        }\n      }}\n      onKeyUp={e => {\n        if (e.target !== e.currentTarget) {\n          return;\n        }\n\n        if (!['Enter', ' '].includes(e.key)) {\n          return;\n        }\n\n        setSelected(id);\n      }}\n      onClick={() => {\n        setSelected(id);\n      }}\n    >\n      {!window.dev() && (\n        <input\n          id={`i${id}`}\n          type={singleSelect ? 'radio' : 'checkbox'}\n          value={`i${id}`}\n          name={interactionContext.props.id}\n          checked={(selected as any).includes(id)}\n          readOnly\n          style={{\n            position: 'absolute',\n            left: 0,\n            top: 0,\n            opacity: 0,\n          }}\n          tabIndex={-1}\n          disabled={isLocked}\n        />\n      )}\n\n      <label\n        htmlFor={`i${id}`}\n        style={{\n          display: 'flex',\n          flex: 1,\n          pointerEvents: !window.dev() ? 'none' : 'auto',\n        }}\n        tabIndex={-1}\n      >\n        <Box\n          sx={{\n            flex: 1,\n            padding: '12.5px 0 12.5px 10px',\n            ...(window.dev() && {\n              padding: '7.5px 0 5px 0px',\n              '.chameleon-text': {\n                padding: '5px 10px 5px 5px',\n              },\n            }),\n\n            '[class*=\"TextToSpeech\"]': {\n              pointerEvents: 'auto',\n            },\n          }}\n        >\n          {children}\n        </Box>\n      </label>\n\n      <Box\n        sx={{\n          display: 'flex',\n          justifyContent: 'center',\n          width: 50,\n        }}\n      >\n        <CheckboxRadioBtn\n          id={id}\n          color={!!optionCheckboxColor ? optionCheckboxColor : '#fff'}\n          selectedColor={\n            !!optionCheckboxSelectedColor ? optionCheckboxSelectedColor : '#000'\n          }\n        />\n      </Box>\n    </Box>\n  );\n};\n\nexport default AssessmentQuestionOption;\n","import React, {\n  Fragment as _,\n  createContext,\n  useState,\n  useContext,\n} from 'react';\nimport { Box } from 'theme-ui';\nimport { AssessmentContext } from 'components/Module/AssessmentContainer';\n\nconst AssessmentQuestionOptions = ({ children, ...props }) => {\n  const assessmentContext = useContext(AssessmentContext);\n\n  const { answersWrappingAlignment = 'center' } = assessmentContext;\n\n  return (\n    <Box\n      sx={{\n        display: 'flex',\n        flexWrap: 'wrap',\n        justifyContent:\n          answersWrappingAlignment === 'center' ? 'center' : 'flex-start',\n      }}\n    >\n      {[...children].map((child, index) => {\n        return React.cloneElement(child, {\n          numOptions: children.length,\n          index,\n        });\n      })}\n    </Box>\n  );\n};\n\nexport default AssessmentQuestionOptions;\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  memo,\n  useMemo,\n  useState,\n  useContext,\n  useEffect,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport { colors } from 'styles/variables';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column, Button, Box } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport Transcript from 'components/lib/Video/Transcript';\nimport SVG from 'components/lib/SVG';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { interactionContext } from './interactionContext';\nimport Media from 'components/lib/Media';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport IELayout from 'components/Layouts/IELayout';\nimport EditableButton from 'components/lib/EditableBtn';\nimport AssessmentQuestion from './AssessmentQuestion';\nimport AssessmentQuestionOption from './AssessmentQuestionOption';\nimport AssessmentQuestionOptions from './AssessmentQuestionOptions';\nimport Audio from 'components/lib/Audio';\nimport PDF from 'components/lib/PDF';\nimport Embed from 'components/lib/Embed';\nimport { findByKeyVal_V2 } from 'services/findByKeyVal';\nimport setBlockProps from 'services/apiHelpers/setBlockProps';\nimport imagePlaceholder from 'assets/CC_Assessment Question Image.png';\nimport shouldUpdate from 'services/shouldUpdate';\n\nconst { lPink, lGrey0, lGrey1, lGrey2 } = colors;\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  QuestionCounter: ({ children, ...props }) => {\n    //\n    return children;\n  },\n  AssessmentQuestion,\n  AssessmentQuestionOptions,\n  AssessmentQuestionOption,\n  Image: ({ children, ...props }) => {\n    return (\n      <Image\n        {...{\n          ...props,\n          placeholder: imagePlaceholder,\n        }}\n      />\n    );\n  },\n  TwoColumnLayout,\n  SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  Video,\n  SVG,\n  Media,\n  Audio,\n  EditableButton,\n  Embed,\n  Transcript,\n  LearnMore: () => null,\n  PDF,\n  OpenPDF: ({ children, ...props }) => children,\n  ...IELayout(interactionContext),\n};\n\ntype InteractionContextValue = {\n  id: string;\n  props: { [key: string]: any };\n};\n\nconst AssessmentQuestionDisplay = memo((props: any) => {\n  const interactionBlock: Block = getBlockById(props.blockId);\n\n  let correctOptions = interactionBlock?.props?.correctOptions || [0];\n  if (!correctOptions.length || correctOptions.includes(undefined)) {\n    correctOptions = [0];\n  }\n\n  const assessmentQuestionOptions = findByKeyVal_V2(\n    interactionBlock.id,\n    'type',\n    'AssessmentQuestionOptions'\n  ) as Block;\n\n  const assessmentQuestionOptionsChildren = assessmentQuestionOptions.children as Block[];\n  const optionsIds = assessmentQuestionOptionsChildren.map(entry => {\n    return entry.id;\n  });\n\n  correctOptions = correctOptions.map(entry => {\n    return typeof entry === 'string' ? entry : optionsIds[entry];\n  });\n\n  useEffect(() => {\n    // if any of the saved correctOptions are ' old ' / id based\n    // transform them immediately to indicies and save\n\n    const correctOptionsHaveSavedIds = correctOptions.some(entry => {\n      return typeof entry === 'string';\n    });\n\n    if (!correctOptionsHaveSavedIds) {\n      return;\n    }\n\n    const updatedCorrectOptions = correctOptions.map(entry => {\n      return typeof entry === 'string'\n        ? assessmentQuestionOptionsChildren.findIndex(child => {\n            return child.id === entry;\n          })\n        : entry;\n    });\n\n    setBlockProps(interactionBlock, {\n      correctOptions: updatedCorrectOptions,\n    });\n  }, [correctOptions.join()]);\n\n  const interactionContextValue: InteractionContextValue = {\n    id: interactionBlock.id,\n    props: {\n      ...interactionBlock.props,\n      correctOptions,\n    },\n  };\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <interactionContext.Provider value={interactionContextValue}>\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </interactionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default AssessmentQuestionDisplay;\n","import AssessmentIntroductionDisplay from './AssessmentQuestionDisplay';\n\nexport default AssessmentIntroductionDisplay;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext(null);\n","import React, { Fragment as _ } from 'react';\n\nconst AssessmentCorrect = ({ color = '#00D9D3' }: { color: string }) => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"22\"\n      height=\"22\"\n      viewBox=\"0 0 22 22\"\n      fill=\"none\"\n      aria-describedby=\"title\"\n    >\n      <title>Correct</title>\n      <circle\n        cx=\"11\"\n        cy=\"11\"\n        r=\"10.5\"\n        style={{\n          stroke: color,\n        }}\n        // stroke=\"#00D9D3\"\n      />\n\n      <path\n        d=\"M7.29627 11.6366L10.7257 14.1772L14.9599 8.46152\"\n        style={{\n          stroke: color,\n          strokeLinecap: 'round',\n          strokeLinejoin: 'round',\n        }}\n        // stroke=\"#00D9D3\"\n        // stroke-linecap=\"round\"\n        // stroke-linejoin=\"round\"\n      />\n    </svg>\n  );\n};\n\nexport default AssessmentCorrect;\n","import React, { Fragment as _ } from 'react';\n\nconst AssessmentIncorrect = ({ color = '#9E6CFF' }: { color: string }) => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width=\"22\"\n      height=\"22\"\n      viewBox=\"0 0 22 22\"\n      fill=\"none\"\n      aria-describedby=\"title\"\n    >\n      <title>Incorrect</title>\n      <circle\n        cx=\"11\"\n        cy=\"11\"\n        r=\"10.5\"\n        style={{\n          stroke: color,\n        }}\n        // stroke=\"#9E6CFF\"\n      />\n      <path\n        d=\"M8 8L14 14\"\n        style={{\n          stroke: color,\n          strokeLinecap: 'round',\n        }}\n        // stroke=\"#9E6CFF\"\n        // stroke-linecap=\"round\"\n      />\n      <path\n        d=\"M8 14L14 8\"\n        style={{\n          stroke: color,\n          strokeLinecap: 'round',\n        }}\n        // stroke=\"#9E6CFF\"\n        // stroke-linecap=\"round\"\n      />\n    </svg>\n  );\n};\n\nexport default AssessmentIncorrect;\n","import React from 'react';\nimport { Box } from 'theme-ui';\n\nexport const ScoreBar = ({ color, score }) => {\n  return (\n    <Box\n      sx={{\n        position: 'relative',\n        width: '100%',\n        maxWidth: '360px',\n        height: '15px',\n        borderRadius: '9999px',\n        background: '#fff',\n        overflow: 'hidden',\n      }}\n    >\n      <Box\n        sx={{\n          position: 'absolute',\n          width: 'inherit',\n          height: '100%',\n          borderRadius: 'inherit',\n          background: `${color}25`,\n        }}\n      >\n        <Box\n          sx={{\n            width: `${score}%`,\n            height: '100%',\n            borderRadius: 'inherit',\n            background: color,\n            transition: 'all 0.3s',\n          }}\n        />\n      </Box>\n    </Box>\n  );\n};\n","import React from 'react';\nimport { Box } from 'theme-ui';\nimport getCurrentTopic from 'services/apiHelpers/getCurrentTopic';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport { getButtonFocus } from 'styles/variables';\n\nexport const Button = ({\n  color,\n  textColor,\n  hidden = false,\n  borderColor = 'transparent',\n  buttonBorderRadius = 99999,\n  onClick,\n  children,\n}: {\n  color: string;\n  textColor: string;\n  hidden?: boolean;\n  borderColor?: string;\n  buttonBorderRadius?: number;\n  onClick?: () => void;\n  children: any;\n}) => {\n  //\n  const focus = getButtonFocus(\n    borderColor !== 'transparent' ? borderColor : color,\n    `0 0 0 1px ${borderColor !== 'transparent' ? borderColor : color}`\n  ).replace('box-shadow: ', '');\n\n  return (\n    <Box\n      as=\"button\"\n      sx={{\n        outline: 'none',\n        border: 'none',\n        position: 'relative',\n        display: 'flex',\n        justifyContent: 'center',\n        alignItems: 'center',\n        padding: '0px 30px',\n        width: '150px',\n        minHeight: '100%',\n        borderRadius: buttonBorderRadius,\n        //'50px',\n        background: color,\n        boxShadow: `0 0 0 1px ${borderColor}`,\n        color: textColor,\n        visibility: hidden ? 'hidden' : 'auto',\n        ...(window.dev &&\n          !window.dev() && {\n            cursor: 'pointer',\n            '&:hover': {\n              opacity: 0.5,\n              transition: 'opacity 0.2s',\n            },\n          }),\n\n        '&:focus': {\n          boxShadow: focus,\n        },\n      }}\n      onClick={onClick}\n    >\n      {children}\n    </Box>\n  );\n};\n\nexport const ReVisitTryAgain = ({\n  // isCorrect,\n  // correctColor = '',\n  // incorrectColor = '',\n  color = '',\n  buttonBorderRadius,\n  resetQuestion = () => {},\n  // id = undefined,\n  indexA,\n  children,\n}) => {\n  return (\n    <Button\n      color=\"#fff\"\n      textColor={color}\n      borderColor={color}\n      buttonBorderRadius={buttonBorderRadius}\n      onClick={() => {\n        if (window.dev && window.dev()) {\n          return;\n        }\n\n        // if (!isCorrect) {\n        //   // resetQuestion(id);\n        //   resetQuestion();\n        // }\n        // if(resetQuestion) {\n        // }\n        resetQuestion();\n\n        const currentTopic = getCurrentTopic() as any;\n\n        const interactionsInTopic = getInteractionsInTopic(currentTopic);\n\n        const assessmentQuestions = interactionsInTopic.filter((c: any) => {\n          return c.meta.subType === 'AssessmentQuestion';\n        });\n\n        const targetQuestion = assessmentQuestions.filter((c, i) => {\n          return i === indexA;\n        })[0] as any;\n\n        const targetLocation = `${currentTopic.props.sId ||\n          currentTopic.id}/${targetQuestion.props.sId || targetQuestion.id}`;\n\n        window.location.hash = targetLocation;\n        requestAnimationFrame(() => {\n          const section = document.querySelector(\n            `#i${targetQuestion.id}`\n          ) as HTMLElement;\n\n          section?.focus();\n        });\n        // console.log(targetLocation);\n      }}\n    >\n      {/* {isCorrect ? 'Re-visit' : 'Try again'} */}\n\n      {/* {enableReVisit && isCorrect && 'Re-visit'}\n      {enableTryAgain && isCorrect && 'Try again'} */}\n\n      {children}\n    </Button>\n  );\n};\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  useContext,\n  useEffect,\n  useState,\n  useRef,\n  useMemo,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { Box } from 'theme-ui';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport { AssessmentContext } from 'components/Module/AssessmentContainer';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport { findByKeyVal_V2 } from 'services/findByKeyVal';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { State, QuestionData, Question } from 'store/store';\nimport { updateAssessmentAction } from 'actions/updateAssessmentAction';\nimport { Block } from '@chameleoncreator/creator-app';\nimport pubSub from 'services/pubSub';\nimport { colors } from 'styles/variables';\nimport setCurrentBlock from 'services/apiHelpers/setCurrentBlock';\nimport EditMarker from 'components/UI/EditMarker';\nimport AssessmentCorrect from 'components/UI/AssessmentCorrect';\nimport AssessmentIncorrect from 'components/UI/AssessmentIncorrect';\nimport unlockInteraction from 'services/unlockInteraction';\nimport { ScoreBar } from './ScoreBar';\nimport { getQuestionsInAssessment } from './getQuestionsInAssessment';\nimport { Button, ReVisitTryAgain } from './Button';\nimport { getAttempt } from './getAttempt';\nimport { unlockAssessment } from './unlockAssessment';\nimport getCurrentTopic from 'services/apiHelpers/getCurrentTopic';\n\nconst { lPink, lGrey0, lGrey1, mint, purple } = colors;\n\ntype AttemptCount = Pick<QuestionData, 'attemptCount'>;\n\nconst AssessmentResults = ({ children, ...props }) => {\n  const assessmentContext = useContext(AssessmentContext);\n\n  const { name, scoring } = assessmentContext;\n  const interactionContext = useContext<any>(InteractionContext);\n  //\n  const { assessmentId, learnMoreResetsAssessment = false } = assessmentContext;\n  const assessment = getCurrentTopic() as Block;\n  //\n\n  const { id: interactionId } = interactionContext;\n  const { graphColor = mint } = interactionContext.props;\n\n  const correctColor = interactionContext.props.correctColor || mint;\n  const incorrectColor = interactionContext.props.incorrectColor || purple;\n\n  const {\n    enableLearnMore,\n    enableTryAgain = true,\n    enableReVisit = true,\n    includeResultsGraph = true,\n    resultsPercentTextColor,\n    attemptCounterTextColor,\n    questionTitleColor = '#000',\n    showAttemptCounter = true,\n    showFeedbackText = false,\n    addAssessmentRetry = true,\n    //\n    backgroundPanelColor = '#fff',\n    backgroundPanelBorderRadius = 50,\n    backgroundPanelDropShadow = true,\n\n    buttonBorderRadius = 18,\n  } = interactionContext.props;\n\n  const [feedbackPassed, feedbackFailed] = children;\n\n  const [showCorrect, setShowCorrect] = useState<boolean>(false);\n\n  const assessmentData = useSelector((state: State) => {\n    return state.assessments[assessmentId] || {};\n    //\n  });\n\n  const { focusedNodeId } = useSelector((state: State) => {\n    return state;\n    //\n  });\n\n  const interactionsLocked = useSelector((state: State) => {\n    return state.interactionsLocked;\n  });\n\n  const dispatch = useDispatch();\n\n  // should we get this value off the assessment props now ?\n  // since we're disabling the saving of assessmentData on reload ( ? )\n\n  const { maxAttempts, passMark } = getBlockById(assessmentId).props as any;\n\n  let numCorrect = 0;\n\n  //\n  // get all the question interactions in the current assessment\n\n  const questions = useMemo(() => {\n    return getQuestionsInAssessment(assessmentId);\n  }, [assessmentId]);\n\n  //\n\n  let results = questions.map((entry, index) => {\n    let id;\n    if (entry?.children) {\n      id = (entry?.children[0] as Block)?.id;\n    }\n\n    return {\n      id,\n      questionName: entry?.props?.name,\n      hasNotBeenAttempted: true,\n    } as QuestionData;\n  });\n\n  if (assessmentData.results) {\n    Object.keys(assessmentData.results).forEach((entry: any, index: number) => {\n      const {\n        id,\n        questionName,\n        answer,\n        correctAnswer,\n        isCorrect,\n        attemptCount,\n      } = assessmentData.results[entry];\n\n      if (isCorrect) {\n        numCorrect += 1;\n      }\n\n      const questionIndex = results.findIndex(q => {\n        return id === q.id;\n      });\n\n      results[questionIndex] = {\n        id,\n        questionName,\n        answer,\n        correctAnswer,\n        isCorrect,\n        attemptCount,\n      };\n    });\n  }\n\n  let score = (numCorrect / results.length) * 100;\n\n  if (window.dev && window.dev()) {\n    score = showCorrect ? 100 : 0;\n  }\n\n  const attempt: number = getAttempt(maxAttempts, results);\n\n  const allQuestionsMaxAttempted = attempt === maxAttempts;\n\n  interactionContext.enableRetryAssessmentBtn = {\n    enabled: addAssessmentRetry,\n    visible:\n      addAssessmentRetry &&\n      !(score >= passMark || maxAttempts === 1 || allQuestionsMaxAttempted),\n  };\n\n  interactionContext.updatePassedFailed(score >= passMark);\n\n  const resetQuestion = id => {\n    const {\n      questionName,\n      answer,\n      correctAnswer,\n      isCorrect,\n      attemptCount,\n    } = assessmentData.results[id];\n\n    dispatch(\n      updateAssessmentAction({\n        assessmentId,\n        assessmentData: {\n          ...assessmentData.data,\n          retryAssessment: false,\n        },\n        questionData: {\n          [id]: {\n            id,\n            questionName,\n            answer: [],\n            correctAnswer,\n            isCorrect: undefined,\n            attemptCount,\n            submitButtonLabel: 'Submit',\n            navigateToResults: true,\n            isLocked: false,\n          },\n        },\n      })\n    );\n  };\n\n  // create a results object for dev. . .\n  let resultsInDev;\n\n  if (window.dev && window.dev()) {\n    resultsInDev = questions.map((entry: Block, index: number) => {\n      const { name, includeLearnMore, learnMoreLocation } = entry.props as any;\n\n      return {\n        id: entry.id,\n        questionName: name || `Question ${index + 1}`,\n        isCorrect: showCorrect,\n        includeLearnMore,\n        learnMoreLocation,\n      };\n    });\n  }\n\n  useEffect(() => {\n    const passed = score >= passMark;\n    if (passed) {\n      dispatch(\n        updateAssessmentAction({\n          assessmentId,\n          assessmentData: {\n            name,\n            scoring,\n            score: numCorrect,\n            passMark,\n            passed,\n          },\n          questionData: assessmentData.questionData,\n        })\n      );\n    }\n  }, [score]);\n\n  useEffect(() => {\n    const pS = pubSub.subscribe(\n      `RESULTS_SHOW_CORRECT_${interactionId}`,\n      ({ showCorrect }) => {\n        setShowCorrect(showCorrect);\n      }\n    );\n\n    return () => {\n      pS();\n    };\n  }, []);\n\n  useEffect(() => {\n    if (!interactionsLocked?.includes(interactionId)) {\n      return;\n    }\n\n    if (score >= passMark || allQuestionsMaxAttempted) {\n      unlockInteraction(interactionId);\n    }\n  });\n\n  const getQuestions = () => {\n    const assessmentBlock = getBlockById(assessmentId);\n    const assessmentInteractions = getInteractionsInTopic(assessmentBlock);\n\n    const questions = assessmentInteractions.filter((i: Block) => {\n      return i.meta?.subType === 'AssessmentQuestion';\n    });\n\n    return questions;\n  };\n\n  return (\n    <_>\n      <Box\n        sx={{\n          display: 'flex',\n          flexDirection: 'column',\n          alignItems: 'center',\n          width: '100%',\n        }}\n      >\n        {includeResultsGraph && (\n          <Box\n            sx={{\n              display: 'flex',\n              flexDirection: 'column',\n              alignItems: 'center',\n              width: '100%',\n              margin: '0 0 10px 0',\n              color: resultsPercentTextColor,\n            }}\n          >\n            <Box as=\"h2\" sx={{ margin: '0 0 10px 0', textAlign: 'center' }}>\n              You got {Math.round(score)}%\n            </Box>\n            <ScoreBar color={graphColor} score={Math.round(score)} />\n          </Box>\n        )}\n\n        {showAttemptCounter && !isNaN(attempt) && (\n          <Box\n            sx={{\n              margin: '0 0 5px 0',\n              color: attemptCounterTextColor,\n            }}\n          >\n            Attempt {attempt} of {maxAttempts}\n          </Box>\n        )}\n\n        {showFeedbackText && (\n          <div\n            css={css({\n              width: '80%',\n              margin: '15px 0',\n            })}\n          >\n            {score >= passMark ? feedbackPassed : feedbackFailed}\n          </div>\n        )}\n\n        <Box\n          sx={{\n            width: '80%',\n            margin: '20px 0',\n            padding: '20px 40px',\n\n            borderRadius: backgroundPanelBorderRadius,\n            background: backgroundPanelColor,\n            boxShadow: backgroundPanelDropShadow\n              ? '0px 0px 6px 0px rgba(0,0,0,0.15)'\n              : '',\n            fontSize: '14px',\n          }}\n        >\n          <Box>\n            {(window.dev && window.dev() ? resultsInDev : results).map(\n              (entry: any, indexA: number) => {\n                //\n\n                const {\n                  id,\n                  // questionName,\n                  isCorrect,\n                  attemptCount,\n                  hasNotBeenAttempted,\n                } = entry;\n\n                const questionName = questions[indexA]?.props?.name;\n                //entry.questionName || interactionContext.props.name\n\n                // ' assuming ' we're in sync re_ sequence\n                // need to be DAMN sure. so check it a\n                const question = questions.filter(\n                  (question: Block, indexB: number) => {\n                    return indexA === indexB;\n                  }\n                )[0];\n\n                if (hasNotBeenAttempted) {\n                  return (\n                    <Box\n                      key={`${questionName}_${indexA}`}\n                      sx={{\n                        display: 'flex',\n                        alignItems: 'center',\n                        minHeight: '35px',\n                      }}\n                    >\n                      {questionName} has not been attempted\n                    </Box>\n                  );\n                }\n\n                let { includeLearnMore } = question.props as any;\n\n                if (enableLearnMore) {\n                  includeLearnMore = true;\n                }\n\n                const LearnMore = findByKeyVal_V2(\n                  question.id,\n                  'type',\n                  'LearnMore'\n                ) as Block;\n\n                let learnMoreLocation = LearnMore?.props?.location;\n\n                const hasUsedAllAttempts =\n                  maxAttempts === 1 || attemptCount >= maxAttempts;\n\n                return (\n                  <Box\n                    key={`${questionName}_${indexA}`}\n                    sx={{\n                      display: 'flex',\n                      justifyContent: 'space-between',\n                      alignItems: 'center',\n                      margin: '10px 0',\n\n                      '.learn-more-revisit-try-again-container': {\n                        display: 'flex',\n                        flexWrap: 'wrap',\n                        justifyContent: 'center',\n                        '> *': {\n                          height: '35px',\n                          marginLeft: '20px',\n                        },\n                      },\n\n                      '@media (max-width: 768px)': {\n                        flexDirection: 'column',\n\n                        svg: {\n                          transform: 'scale(2)',\n                          marginBottom: '20px',\n                        },\n\n                        '> *': {\n                          marginLeft: '0px !important',\n                          marginRight: '0px !important',\n                          margin: '0 0 10px 0',\n                        },\n\n                        '.learn-more-revisit-try-again-container': {\n                          '> *': {\n                            marginLeft: '0px !important',\n                            marginRight: '0px !important',\n                            margin: '5px 10px !important',\n                          },\n                        },\n                      },\n                    }}\n                  >\n                    {isCorrect ? (\n                      <AssessmentCorrect color={correctColor} />\n                    ) : (\n                      <AssessmentIncorrect color={incorrectColor} />\n                    )}\n\n                    <span\n                      className=\"question-name\"\n                      style={{\n                        flex: 2,\n                        marginLeft: '20px',\n                        fontWeight: 500,\n                        color: questionTitleColor,\n                      }}\n                    >\n                      {questionName}\n                    </span>\n\n                    <span\n                      className=\"learn-more-revisit-try-again-container\"\n                      style={{}}\n                    >\n                      {includeLearnMore && !isCorrect && (\n                        <span style={{}}>\n                          <Button\n                            color={incorrectColor}\n                            textColor=\"#fff\"\n                            buttonBorderRadius={buttonBorderRadius}\n                            onClick={() => {\n                              if (window.dev && window.dev()) {\n                                return;\n                              }\n\n                              if (learnMoreLocation) {\n                                //\n                                //\n\n                                if (\n                                  learnMoreResetsAssessment &&\n                                  !hasUsedAllAttempts\n                                ) {\n                                  unlockAssessment(\n                                    assessmentData,\n                                    dispatch,\n                                    updateAssessmentAction,\n                                    assessment\n                                  );\n                                }\n                                //\n                                window.location.hash = learnMoreLocation;\n                              }\n                            }}\n                          >\n                            Learn more\n                            {window.dev && window.dev() && (\n                              <Box\n                                sx={{\n                                  position: 'absolute',\n                                  left: '-5px',\n                                  top: '-3px',\n                                  width: 'calc(100% + 10px)',\n                                  height: 'calc(100% + 6px)',\n                                  boxShadow: `0 0 0 1px ${lPink}`,\n                                  background: 'transparent',\n\n                                  cursor: 'pointer',\n                                  transition: 'box-shadow 0.2s',\n\n                                  '&:hover': {\n                                    boxShadow: `0 0 0 1px lightGrey`,\n                                  },\n\n                                  ...(focusedNodeId === question.id && {\n                                    boxShadow: `0 0 0 1px lightGrey`,\n                                    pointerEvents: 'none',\n                                  }),\n                                }}\n                                onClick={() => {\n                                  if (window.dev && window.dev()) {\n                                    setCurrentBlock(LearnMore);\n                                    return;\n                                  }\n                                }}\n                              >\n                                {focusedNodeId !== LearnMore.id && (\n                                  <EditMarker />\n                                )}\n                              </Box>\n                            )}\n                          </Button>\n                        </span>\n                      )}\n\n                      {maxAttempts > 1 && !isCorrect && enableTryAgain && (\n                        <span\n                          style={{\n                            ...(window.dev &&\n                              !window.dev() &&\n                              !isCorrect &&\n                              hasUsedAllAttempts && {\n                                opacity: 0.2,\n                                pointerEvents: 'none',\n                              }),\n                          }}\n                        >\n                          <ReVisitTryAgain\n                            color={incorrectColor}\n                            buttonBorderRadius={buttonBorderRadius}\n                            resetQuestion={() => resetQuestion(id)}\n                            indexA={indexA}\n                          >\n                            Try-again\n                          </ReVisitTryAgain>\n                        </span>\n                      )}\n                      {isCorrect && enableReVisit && (\n                        <span style={{}}>\n                          <ReVisitTryAgain\n                            color={correctColor}\n                            buttonBorderRadius={buttonBorderRadius}\n                            indexA={indexA}\n                          >\n                            Re-visit\n                          </ReVisitTryAgain>\n                        </span>\n                      )}\n                    </span>\n\n                    <Box\n                      as=\"hr\"\n                      sx={{\n                        display: 'none',\n                        '@media (max-width: 768px)': {\n                          width: '100%',\n                          margin: '5px 0 10px 0',\n                          border: '1px solid #CADCF2',\n                          display: 'block',\n                        },\n                      }}\n                    />\n                  </Box>\n                );\n              }\n            )}\n          </Box>\n        </Box>\n      </Box>\n    </_>\n  );\n};\n\nexport default AssessmentResults;\n","import getBlockById from 'services/apiHelpers/getBlockById';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport { Block } from '@chameleoncreator/creator-app';\n\nexport const getQuestionsInAssessment = (assessmentId: string) => {\n  const assessmentBlock = getBlockById(assessmentId);\n  const assessmentInteractions = getInteractionsInTopic(assessmentBlock);\n\n  const questions = assessmentInteractions.filter((i: Block) => {\n    return i.meta?.subType === 'AssessmentQuestion';\n  });\n\n  return questions;\n};\n","import { QuestionData } from 'store/store';\n\ntype AttemptCount = Pick<QuestionData, 'attemptCount'>;\n\nconst getAttempt = (maxAttempts, results): number => {\n  if (window.dev && window.dev()) {\n    return 1;\n  }\n\n  //\n\n  const resultsKeys = Object.keys(results);\n\n  let attemptCounts = resultsKeys.map(entry => {\n    return results[entry].attemptCount;\n  });\n\n  const highestAttemptCount = Math.max(...attemptCounts);\n\n  attemptCounts = resultsKeys.map(entry => {\n    const { isCorrect, attemptCount } = results[entry];\n\n    // we keep the attempt count for any question that isCorrect\n    // in sync with the highestAttemptCount\n    return isCorrect ? highestAttemptCount : attemptCount;\n  });\n\n  const lowestAttemptCount = Math.min(...attemptCounts);\n\n  return lowestAttemptCount;\n};\n\nexport { getAttempt };\n","export const unlockAssessment = (\n  assessmentData,\n  dispatch,\n  updateAssessmentAction,\n  assessment\n) => {\n  const results = Object.keys(assessmentData.results);\n\n  results.forEach((key: any) => {\n    // const { correctAnswer, attemptCount } = assessmentData.results[key] as any;\n\n    requestAnimationFrame(() => {\n      dispatch(\n        updateAssessmentAction({\n          assessmentId: assessment.id,\n          assessmentData: {\n            ...assessmentData.data,\n          },\n          questionData: {\n            [key]: {\n              ...assessmentData.results[key],\n              // answer: [],\n              // correctAnswer,\n              // isCorrect: undefined,\n              // attemptCount,\n              submitButtonLabel: 'Submit',\n              // navigateToResults: false,\n              isLocked: false,\n            },\n          },\n        })\n      );\n\n      //\n    });\n  });\n};\n","/** @jsx jsx */\n\nimport React, { Fragment as _, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext } from './interactionContext';\nimport EditableBtn from '../EditableBtn';\nimport getCurrentTopic from 'services/apiHelpers/getCurrentTopic';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport { State } from 'store/store';\nimport { Block } from '@chameleoncreator/creator-app';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { updateAssessmentAction } from 'actions/updateAssessmentAction';\n\nconst RetryAssessment = ({ children, ...props }) => {\n  const context = useContext(interactionContext) as any;\n  const { enableRetryAssessmentBtn } = context;\n  const { enabled, visible } = enableRetryAssessmentBtn;\n\n  const assessment = getCurrentTopic() as Block;\n\n  const assessmentData = useSelector((state: State) => {\n    return state.assessments[assessment.id];\n    //\n  });\n\n  const dispatch = useDispatch();\n\n  const interaction = getInteractionsInTopic(assessment)[0];\n  const location = `${assessment?.props?.sId}/${interaction?.props?.sId}`;\n\n  if (window.dev && window.dev()) {\n    return enabled ? <EditableBtn {...props} /> : null;\n  }\n\n  return visible ? (\n    <span\n      style={{\n        margin: '5px 10px',\n      }}\n      onClick={() => {\n        const results = Object.keys(assessmentData.results);\n\n        results.forEach((key: any) => {\n          const { correctAnswer, attemptCount } = assessmentData.results[\n            key\n          ] as any;\n\n          requestAnimationFrame(() => {\n            dispatch(\n              updateAssessmentAction({\n                assessmentId: assessment.id,\n                assessmentData: {\n                  ...assessmentData.data,\n                },\n                questionData: {\n                  [key]: {\n                    answer: [],\n                    correctAnswer,\n                    isCorrect: undefined,\n                    attemptCount,\n                    submitButtonLabel: 'Submit',\n                    navigateToResults: false,\n                    isLocked: false,\n                  },\n                },\n              })\n            );\n\n            //\n          });\n        });\n\n        // if locationIsNull\n        // then somehow the SId has not been created on the assessment/interaction block props\n        const locationIsNull = location.includes('null');\n        //\n        if (locationIsNull) {\n          window.location.href = `#i${interaction.id}`;\n          return;\n        }\n        window.location.hash = location;\n        //\n      }}\n    >\n      <EditableBtn {...props} />{' '}\n    </span>\n  ) : null;\n};\n\nexport default RetryAssessment;\n","/** @jsx jsx */\n\nimport React, { Fragment as _, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext } from './interactionContext';\nimport EditableBtn from '../EditableBtn';\nimport getCurrentTopic from 'services/apiHelpers/getCurrentTopic';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport { State } from 'store/store';\nimport { Block } from '@chameleoncreator/creator-app';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { updateAssessmentAction } from 'actions/updateAssessmentAction';\n\nconst FeedbackPassed = ({ children, ...props }) => {\n  const context = useContext(interactionContext) as any;\n\n  const [img, txt, btn] = children;\n\n  return (\n    <div\n      css={css({\n        width: '100%',\n      })}\n    >\n      {txt}\n    </div>\n  );\n};\n\nexport default FeedbackPassed;\n","/** @jsx jsx */\n\nimport React, { Fragment as _, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { interactionContext } from './interactionContext';\nimport EditableBtn from '../EditableBtn';\nimport getCurrentTopic from 'services/apiHelpers/getCurrentTopic';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport { State } from 'store/store';\nimport { Block } from '@chameleoncreator/creator-app';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { updateAssessmentAction } from 'actions/updateAssessmentAction';\nimport { Box } from 'theme-ui';\n\nconst FeedbackFailed = ({ children, ...props }) => {\n  const context = useContext(interactionContext) as any;\n\n  const [img, txt, btn] = children;\n\n  return (\n    <div\n      css={css({\n        width: '100%',\n      })}\n    >\n      {txt}\n    </div>\n  );\n};\n\nexport default FeedbackFailed;\n","import React, { Fragment as _, useContext } from 'react';\n\nimport { interactionContext } from './interactionContext';\nimport { Box } from 'theme-ui';\n\nimport EditableBtn from '../EditableBtn';\nimport getCurrentTopic from 'services/apiHelpers/getCurrentTopic';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport { State } from 'store/store';\nimport { Block } from '@chameleoncreator/creator-app';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { updateAssessmentAction } from 'actions/updateAssessmentAction';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\n\nconst ContinueButtonBranching = props => {\n  const context = useContext(interactionContext) as any;\n  // console.log('ContinueButtonBranching :', context);\n\n  const { passed } = context;\n  const { enableBranching, correctColor, incorrectColor } = context.props;\n\n  const { children } = props;\n  const [defaultBtn, passedBtn, failedBtn] = children;\n\n  if (!enableBranching) {\n    return defaultBtn;\n  }\n\n  const branchingBtn =\n    passed === true || passed === undefined ? passedBtn : failedBtn;\n\n  let Btn = branchingBtn;\n\n  if (window.dev && window.dev()) {\n    Btn = (\n      <Box\n        sx={{\n          // boxShadow: `inset 0 0 0 5px ${\n          //   passed ? correctColor : incorrectColor\n          // }`,\n\n          // background: passed ? correctColor : incorrectColor,\n\n          '*': {\n            boxShadow: 'none !important',\n          },\n\n          boxShadow: `0 0 0 1px ${passed ? correctColor : incorrectColor}`,\n        }}\n      >\n        {branchingBtn}\n      </Box>\n    );\n  }\n\n  return Btn;\n  // passed === true || passed === undefined ? children[0] : children[1];\n};\n\nexport default ContinueButtonBranching;\n","/** @jsx jsx */\n\nimport React, {\n  Fragment as _,\n  memo,\n  useMemo,\n  useState,\n  useContext,\n  useEffect,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport { colors } from 'styles/variables';\nimport getTempTextImageData from 'services/getTempTextImageContinueBtnData';\nimport expandBlock from 'services/apiHelpers/expandBlock';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column, Button, Box } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport SVG from 'components/lib/SVG';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { useSelector, connect } from 'react-redux';\nimport { interactionContext } from './interactionContext';\nimport Media from 'components/lib/Media';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport shouldUpdate from 'services/shouldUpdate';\nimport IELayout from 'components/Layouts/IELayout';\nimport AssessmentResults from './AssessmentResults';\nimport EditableBtn from '../EditableBtn';\nimport RetryAssessment from './RetryAssessment';\nimport FeedbackPassed from './FeedbackPassed';\nimport FeedbackFailed from './FeedbackFailed';\nimport ContinueButtonBranching from './ContinueButtonBranching';\nimport setBlockProps from 'services/apiHelpers/setBlockProps';\nimport { State } from 'store/store';\n\nconst { lPink, lGrey0, lGrey1, lGrey2 } = colors;\n\nconst FooterButtonsWrapper = ({ children, ...props }) => {\n  // using this jobby to create a homogenised container for the buttons\n  // which are of the different types and subtley different display behaviour\n  // generic > button\n  // navigation > a\n\n  return (\n    <div\n      css={css({\n        position: 'relative',\n        margin: 10,\n\n        // this targets the editWrapper around the nav/continue btn\n        // adjusts dimensions accordingly\n        '[class*=\"NavigationButton\"]:nth-child(2)': {\n          left: -5,\n          top: -10,\n          width: 'calc(100% + 10px)',\n          height: 'calc(100% + 20px)',\n        },\n      })}\n    >\n      {children}\n    </div>\n  );\n};\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  AssessmentResults,\n  LearnMore: props => {\n    return null;\n  },\n  Image,\n  TwoColumnLayout,\n  SingleColumnLayout,\n  FeedbackPassed,\n  FeedbackFailed,\n  ContinueButton: ({ children, ...props }) => {\n    return <ContinueBtn {...props}>{children}</ContinueBtn>;\n  },\n  Video,\n  SVG,\n  Media,\n  Audio: null,\n  EditableButton: () => null,\n  PDF: () => null,\n  OpenPDF: () => null,\n\n  Embed: null,\n  Transcript: null,\n  RetryAssessment: ({ children, ...props }) => {\n    return window.dev() ? (\n      <FooterButtonsWrapper>\n        <RetryAssessment {...props}>{children}</RetryAssessment>\n      </FooterButtonsWrapper>\n    ) : (\n      <RetryAssessment {...props}>{children}</RetryAssessment>\n    );\n  },\n  ContinueButtonBranching: ({ children, ...props }) => {\n    return window.dev() ? (\n      <FooterButtonsWrapper>\n        <ContinueButtonBranching {...props}>{children}</ContinueButtonBranching>\n      </FooterButtonsWrapper>\n    ) : (\n      <ContinueButtonBranching {...props}>{children}</ContinueButtonBranching>\n    );\n  },\n  ...IELayout(interactionContext),\n};\n\nconst AssessmentResultsDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  const [passed, updatePassedFailed] = useState<boolean | undefined>(undefined);\n\n  // transform lockDown to 1 / 0 if was saved as boolean\n  // don't much matter now that the unlock is checking for any truthy value\n  // but good for consistency\n  const { lockDown } = interactionBlock?.props as any;\n\n  useEffect(() => {\n    return;\n\n    if (typeof lockDown === 'boolean') {\n      setBlockProps(interactionBlock, {\n        lockDown: lockDown ? 1 : 0,\n      });\n    }\n  }, []);\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <interactionContext.Provider\n        value={\n          {\n            ...interactionBlock,\n            enableRetryAssessmentBtn: true,\n            passed,\n            updatePassedFailed,\n          } as any\n        }\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </interactionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default AssessmentResultsDisplay;\n","import AssessmentResultsDisplay from './AssessmentResultsDisplay';\n\nexport default AssessmentResultsDisplay;\n","import { createContext } from 'react';\n\nexport const interactionContext = createContext<any>(null);\n","/** @jsx jsx */\n// import React from 'react';\n// import ReactDOM from 'react-dom';\nimport { css, jsx } from '@emotion/core';\nimport {\n  useState,\n  useRef,\n  useEffect,\n  createContext,\n  useContext,\n  useMemo,\n  Fragment as _,\n  cloneElement,\n} from 'react';\nimport Drag_Icon_Blue from 'assets/Drag Icon_Blue.svg';\nimport Resize_Icon from 'assets/Resize Icon.svg';\nimport move_cert_input from 'assets/move_cert_input.svg';\nimport resize_cert_input from 'assets/resize_cert_input.svg';\n\nconst handleSize = 16;\n\nconst DragHandle = props => {\n  const {\n    id,\n    elementRef,\n    cursor = 'move',\n    inverseScaleFactor = 1,\n    onDragEnd = () => {},\n    isInput = false,\n  } = props;\n\n  if (!window.dev()) {\n    return null;\n  }\n\n  return (\n    <div\n      id={`chameleon-text-drag-handle-${id}`}\n      style={{\n        position: 'absolute',\n        left: 0,\n        top: 0,\n        width: handleSize,\n        height: handleSize,\n        ...(inverseScaleFactor > 1 && {\n          transform: `scale(${inverseScaleFactor})`,\n          transformOrigin: 'top left',\n        }),\n        background: `url('${\n          !isInput ? Drag_Icon_Blue : move_cert_input\n        }') no-repeat`,\n        // '#ff0566',\n        cursor,\n      }}\n      onPointerDown={e => {\n        const computedStyle = window.getComputedStyle(elementRef.current);\n\n        const offsetX = e.clientX * inverseScaleFactor;\n        const offsetY = e.clientY * inverseScaleFactor;\n\n        const x = parseInt(computedStyle.left, 10);\n        const y = parseInt(computedStyle.top, 10);\n\n        const init = {\n          offsetX,\n          offsetY,\n          x,\n          y,\n        };\n\n        window.addEventListener('pointermove', onPointerMove);\n        window.addEventListener('pointerup', onPointerUp);\n\n        function onPointerMove(e) {\n          const inverseScaleFactorClientX = e.clientX * inverseScaleFactor;\n          const inverseScaleFactorClientY = e.clientY * inverseScaleFactor;\n\n          const x = inverseScaleFactorClientX - init.offsetX;\n          const y = inverseScaleFactorClientY - init.offsetY;\n\n          const dragValueX = init.x + x;\n          const dragValueY = init.y + y;\n\n          elementRef.current.style.left = `${dragValueX}px`;\n          elementRef.current.style.top = `${dragValueY}px`;\n        }\n\n        function onPointerUp(e) {\n          const { left, top } = elementRef.current.style;\n          onDragEnd({ left, top });\n\n          window.removeEventListener('pointermove', onPointerMove);\n          window.removeEventListener('pointerup', onPointerUp);\n        }\n      }}\n    />\n  );\n};\n\nconst ResizeHandle = (props: any) => {\n  const {\n    id,\n    elementRef,\n    cursor = 'nwse-resize' || 'move',\n    scaleFactor = 1,\n    inverseScaleFactor = 1,\n    onDrag = () => {},\n    onDragEnd = () => {},\n    isInput = false,\n  } = props;\n\n  if (!window.dev()) {\n    return null;\n  }\n\n  return (\n    <div\n      id={`chameleon-text-resize-handle-${id}`}\n      style={{\n        position: 'absolute',\n        right: 0,\n        bottom: 0,\n        width: handleSize,\n        height: handleSize,\n        ...(inverseScaleFactor > 1 && {\n          transform: `scale(${inverseScaleFactor})`,\n          transformOrigin: 'bottom right',\n        }),\n        background: `url('${\n          !isInput ? Resize_Icon : resize_cert_input\n        }') no-repeat`,\n        // '#ff0566',\n        cursor,\n      }}\n      onPointerDown={e => {\n        const handle = e.currentTarget;\n\n        const computedStyle = window.getComputedStyle(handle);\n\n        const offsetX = e.clientX * inverseScaleFactor;\n        const offsetY = e.clientY * inverseScaleFactor;\n\n        const x = parseInt(computedStyle.left, 10);\n        const y = parseInt(computedStyle.top, 10);\n\n        const init = {\n          offsetX,\n          offsetY,\n          x,\n          y,\n        };\n\n        window.addEventListener('pointermove', onPointerMove);\n        window.addEventListener('pointerup', onPointerUp);\n\n        function onPointerMove(e) {\n          const inverseScaleFactorClientX = e.clientX * inverseScaleFactor;\n          const inverseScaleFactorClientY = e.clientY * inverseScaleFactor;\n\n          const x = inverseScaleFactorClientX - init.offsetX;\n          const y = inverseScaleFactorClientY - init.offsetY;\n\n          const dragValueX = init.x + x;\n          const dragValueY = init.y + y;\n\n          if (dragValueX < handleSize * 2 || dragValueY < handleSize * 2) {\n            return;\n          }\n\n          handle.style.left = `${dragValueX}px`;\n          handle.style.top = `${dragValueY}px`;\n\n          onDrag({\n            left: `${dragValueX + handleSize}px`,\n            top: `${dragValueY + handleSize}px`,\n          });\n        }\n\n        function onPointerUp(e) {\n          onDragEnd();\n\n          window.removeEventListener('pointermove', onPointerMove);\n          window.removeEventListener('pointerup', onPointerUp);\n        }\n      }}\n    />\n  );\n};\n\nexport { DragHandle, ResizeHandle };\n","import { PDFDocument, StandardFonts, rgb } from 'pdf-lib';\nimport html2canvas from 'html2canvas';\nimport download from 'downloadjs';\nimport * as htmlToImage from 'html-to-image';\nimport { toPng, toJpeg, toBlob, toPixelData, toSvg } from 'html-to-image';\n\ntype TextFieldData = {\n  text: string;\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  fontFamily: string;\n  fontSize: number;\n};\n\nconst getBase64StringFromDataURL = dataURL => {\n  return dataURL.replace('data:', '').replace(/^.+,/, '');\n};\n\nasync function getImgSrcAsBase64String(imgSrc) {\n  const response = await fetch(imgSrc);\n  const blob = await response.blob();\n\n  const p = new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onloadend = () => {\n      // Convert to Base64 string\n      const base64 = getBase64StringFromDataURL(reader.result);\n      if (base64) {\n        resolve(base64);\n      }\n\n      reject('no has base64');\n    };\n\n    reader.readAsDataURL(blob);\n  });\n\n  return p;\n}\n\nfunction base64ToArrayBuffer(base64) {\n  var binaryString = atob(base64);\n  var bytes = new Uint8Array(binaryString.length);\n  for (var i = 0; i < binaryString.length; i++) {\n    bytes[i] = binaryString.charCodeAt(i);\n  }\n  return bytes.buffer;\n}\n\nfunction blobToBase64(blob) {\n  return new Promise((resolve, _) => {\n    const reader = new FileReader();\n    reader.onloadend = () => {\n      // return\n      resolve(reader.result);\n    };\n\n    reader.readAsDataURL(blob);\n  });\n}\n\nasync function generatePDFFromCanvas({\n  imgSize,\n  scale,\n  id,\n  fileName,\n  imgSrc,\n  imgType,\n  certificateType,\n  onComplete,\n}) {\n  const imgSrcAsBase64String = await getImgSrcAsBase64String(imgSrc);\n\n  const bkgImgBytes = base64ToArrayBuffer(imgSrcAsBase64String);\n  // console.log(bkgImgBytes);\n\n  //\n  html2canvas(document.querySelector(`#${id}`) as HTMLElement, {\n    scale,\n    allowTaint: true,\n    useCORS: true,\n    backgroundColor: null,\n  }).then(canvas => {\n    canvas.toBlob(async (blob: any) => {\n      const newImg = document.createElement('img');\n\n      const url = URL.createObjectURL(blob);\n\n      newImg.onload = img => {\n        URL.revokeObjectURL(url);\n      };\n\n      newImg.src = url;\n\n      // document.body.appendChild(canvas);\n      // return;\n\n      let imgBytes = await blobToBase64(blob);\n\n      imgBytes = base64ToArrayBuffer(\n        (imgBytes as string).replace('data:image/png;base64,', '')\n      );\n\n      const pdfDoc = await PDFDocument.create();\n\n      let embedImgType;\n      //\n      if (['png', 'PNG'].includes(imgType)) {\n        embedImgType = 'embedPng';\n      }\n\n      if (['jpg', 'JPG', 'jpeg', 'JPEG'].includes(imgType)) {\n        embedImgType = 'embedJpg';\n      }\n\n      if (imgType.toLowerCase() === 'svg') {\n        embedImgType = 'embedSvg';\n      }\n\n      const bkgImg = await pdfDoc[embedImgType](bkgImgBytes);\n      const img = await pdfDoc.embedPng(\n        imgBytes as string | Uint8Array | ArrayBuffer\n      );\n\n      const page = pdfDoc.addPage([imgSize?.width || 0, imgSize?.height || 0]);\n\n      certificateType === 'custom' &&\n        page.drawImage(bkgImg, {\n          x: 0,\n          y: 0,\n          width: imgSize?.width,\n          height: imgSize?.height,\n        });\n\n      page.drawImage(img, {\n        x: 0,\n        y: 0,\n        width: imgSize?.width,\n        height: imgSize?.height,\n      });\n\n      const scale = 1024 / imgSize?.width;\n      console.log('width: ', imgSize?.width, 'pdfScale res ? :', scale);\n\n      page.scale(scale, scale);\n\n      const pdfBytes = await pdfDoc.save();\n\n      download(pdfBytes, `${fileName || 'Certificate'}.pdf`, 'application/pdf');\n\n      onComplete();\n    });\n\n    //\n  });\n}\n\nasync function generatePDF(\n  certificateImg: string,\n  textFields: TextFieldData[],\n  interactionName: string\n) {\n  const imgURL = certificateImg;\n  // [\n  //   'http://reviewsite.inspiregroup.co.nz/manual/TEMP/Certificate%20V2.svg',\n  //   'https://cdnb.artstation.com/p/assets/images/images/039/374/867/large/darren-quach-stormland-assault-trooper-01-16x9-dq.jpg',\n  // ][1];\n\n  const imgBytes = await fetch(imgURL).then(res => res.arrayBuffer());\n\n  const pdfDoc = await PDFDocument.create();\n\n  const img = await pdfDoc.embedPng(imgBytes);\n  const imgDimensions = img.scale(1);\n\n  const timesRomanFont = await pdfDoc.embedFont(StandardFonts.TimesRoman);\n  const fontSize = 30;\n\n  const page = pdfDoc.addPage([imgDimensions.width, imgDimensions.height]);\n\n  const width = page.getWidth();\n  const height = page.getHeight();\n\n  console.log('pdf width :', {\n    width,\n    height,\n  });\n\n  page.drawImage(img, {\n    x: 0,\n    // page.getWidth() / 2 - imgDimensions.width / 2,\n    y: 0,\n    // page.getHeight() / 2 - imgDimensions.height / 2 + 250,\n    width: width || imgDimensions.width,\n    height: height || imgDimensions.height,\n  });\n\n  textFields.forEach(async tF => {\n    const { text, x, y, width, height, fontFamily, fontSize } = tF;\n\n    const font = await pdfDoc.embedFont(StandardFonts.Helvetica);\n\n    // page.drawRectangle({\n    //   x,\n    //   y,\n    //   width,\n    //   height,\n    //   borderColor: rgb(1, 0, 0),\n    //   borderWidth: 1.5,\n    // });\n\n    page.drawText(text, {\n      x,\n      y: y - height,\n      size: fontSize,\n      font,\n      color: rgb(0, 0, 0),\n    });\n  });\n\n  const pdfBytes = await pdfDoc.save();\n\n  download(pdfBytes, `${interactionName}.pdf`, 'application/pdf');\n\n  return pdfBytes;\n}\n\nexport { generatePDF, generatePDFFromCanvas };\n","/** @jsx jsx */\n\nimport { jsx } from '@emotion/core';\n\nexport const Certificate_1_SVG = props => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n      x=\"0px\"\n      y=\"0px\"\n      viewBox=\"0 0 2084 1471.6\"\n      xmlSpace=\"preserve\"\n    >\n      <g id=\"Change_colour\">\n        <g>\n          <path\n            style={{\n              fill: '#00CBC3',\n            }}\n            d=\"M1236.1,836.2v-14.5v-19.4c0-5.8-4.7-10.5-10.5-10.5H859.2c-5.8,0-10.5,4.7-10.5,10.5v17.1v14.4    C535.6,854.3,245.2,928.2-3,1042.3l1,431.2h2088.3l1.5-415.8C1841.1,939,1550.5,860.6,1236.1,836.2z\"\n          />\n        </g>\n      </g>\n      <g id=\"Foreground\">\n        <g>\n          <path\n            style={{\n              opacity: 0.9,\n              fill: '#FFFFFF',\n            }}\n            d=\"M1236.1,836.2v19c0,5.8-4.7,10.5-10.5,10.5H859.2c-5.8,0-10.5-4.7-10.5-10.5v-21.4    C535.6,854.3,245.2,928.2-3,1042.3l1,431.2h2088.3l1.5-415.8C1841.1,939,1550.5,860.6,1236.1,836.2z M1344,1191.3l-53.6,61.1    c-0.1,0.1-0.1,0.1-0.2,0.1c0.1,0,0.1,0,0.1,0c19.3,13,44.9,37.5,52.3,44.7c0.9,0.9,0.4,2.4-0.8,2.6c-37,5.8-74,7.7-99.1,8.1    l-0.1,0c0.3,13.5-0.1,20.9-0.2,23.3l-0.1,1.3c-0.4,1.9-4,3.9-12.3,6.2c-17.3,4.8-52.2,7.1-77.3,7.9l4.8,18.8    c0.6,2.4-1.1,4.8-3.6,4.9l-19.9,1.3c-2,0.1-3.6,1.7-3.7,3.7l-1.3,19.9c-0.2,2.5-2.5,4.2-4.9,3.6l-19.3-4.9    c-1.9-0.5-3.9,0.5-4.7,2.4l-7.4,18.6c-0.9,2.3-3.7,3.2-5.8,1.9l-16.9-10.7c-1.7-1.1-3.9-0.7-5.2,0.8l-12.7,15.4    c-1.6,1.9-4.5,1.9-6.1,0l-12.7-15.4c-1.3-1.5-3.5-1.9-5.2-0.8l-16.9,10.7c-2.1,1.3-4.9,0.4-5.8-1.9l-7.4-18.6    c-0.7-1.9-2.7-2.9-4.7-2.4l-19.3,4.9c-2.4,0.6-4.8-1.1-4.9-3.6l-1.3-19.9c-0.1-2-1.7-3.6-3.7-3.7l-19.9-1.3    c-2.5-0.2-4.2-2.5-3.6-4.9l4.9-19c-24.7-0.7-57.5-3-74.9-7.8c-8.3-2.3-11.9-4.3-12.3-6.2l-0.1-1.3c-0.1-2.4-0.5-9.8-0.2-23.3    l-0.1,0c-25.2-0.4-62.3-2.4-99.4-8.2c-1.1-0.2-1.5-1.5-0.7-2.2c7.1-6.9,32.9-31.7,52.4-44.9c0.1-0.1,0.2-0.1,0.4-0.1    c0,0,0.1,0,0.2,0c-0.1,0-0.2,0-0.2,0c-0.1,0-0.2-0.1-0.3-0.1l-53.7-61.3c-0.7-0.8,0-2,1-1.9c77.4,10.8,139.3,8.1,164.3,7.2    c11.6-0.4,15.5,0.8,15,2.6l0.1,0c-0.3,2-2.7,20.9-2.5,36.4c1.6,0.1,6.6,0.3,11.2,0.6c0-0.4,0-0.8-0.1-1.2l-4.9-19.3    c-0.6-2.4,1.1-4.8,3.6-4.9l19.9-1.3c2-0.1,3.6-1.7,3.7-3.7l1.3-19.9c0.2-2.5,2.5-4.2,4.9-3.6l19.3,4.9c1.9,0.5,3.9-0.5,4.7-2.4    l7.4-18.6c0.9-2.3,3.7-3.2,5.8-1.9l16.9,10.7c1.7,1.1,3.9,0.7,5.2-0.8l12.7-15.4c1.6-1.9,4.5-1.9,6.1,0l12.7,15.4    c1.3,1.5,3.5,1.9,5.2,0.8l16.9-10.7c2.1-1.3,4.9-0.4,5.8,1.9l7.4,18.6c0.7,1.9,2.7,2.9,4.7,2.4l19.3-4.9c2.4-0.6,4.8,1.1,4.9,3.6    l1.3,19.9c0.1,2,1.7,3.6,3.7,3.7l19.9,1.3c2.5,0.2,4.2,2.5,3.6,4.9l-4.9,19.3c-0.1,0.3-0.1,0.6-0.1,1c6.1-0.1,11.6-0.3,13.7-0.4    c0.2-15.5-2.2-34.4-2.5-36.4l0.1,0c-0.5-1.8,3.4-3,15-2.6c25,0.9,86.8,3.6,164.1-7.2C1344,1189.1,1344.7,1190.4,1344,1191.3z\"\n          />\n        </g>\n        <g\n          style={{\n            opacity: 1 || 0.05,\n          }}\n        >\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1225.6,791.8H859.2c-5.8,0-10.5,4.7-10.5,10.5v17.1v14.4v21.4c0,5.8,4.7,10.5,10.5,10.5h366.4    c5.8,0,10.5-4.7,10.5-10.5v-19v-14.5v-19.4C1236.1,796.5,1231.4,791.8,1225.6,791.8z\"\n          />\n        </g>\n        <g>\n          <path\n            style={{\n              fill: '#FFFFFF',\n            }}\n            d=\"M948.6,828.8c-1.2,1.1-3,1.7-5.4,1.7h-4v8.7h-2.7v-20.7h6.7c2.3,0,4.1,0.6,5.3,1.7    c1.2,1.1,1.8,2.6,1.8,4.4C950.4,826.3,949.8,827.7,948.6,828.8z M946.6,827.3c0.7-0.7,1.1-1.6,1.1-2.8c0-2.6-1.5-3.8-4.4-3.8h-4    v7.6h4C944.7,828.3,945.8,828,946.6,827.3z\"\n          />\n          <path\n            style={{\n              fill: '#FFFFFF',\n            }}\n            d=\"M965.7,839.2l-4.9-8.5h-3.3v8.5h-2.7v-20.7h6.7c1.6,0,2.9,0.3,4,0.8c1.1,0.5,1.9,1.3,2.4,2.2    c0.5,0.9,0.8,2,0.8,3.1c0,1.4-0.4,2.7-1.2,3.8c-0.8,1.1-2.1,1.8-3.7,2.2l5.2,8.7H965.7z M957.5,828.6h4c1.5,0,2.6-0.4,3.3-1.1    c0.7-0.7,1.1-1.7,1.1-2.9c0-1.2-0.4-2.2-1.1-2.9c-0.7-0.7-1.8-1-3.3-1h-4V828.6z\"\n          />\n          <path\n            style={{\n              fill: '#FFFFFF',\n            }}\n            d=\"M976.6,820.7v6.9h7.6v2.2h-7.6v7.1h8.4v2.2h-11.2v-20.8h11.2v2.2H976.6z\"\n          />\n          <path\n            style={{\n              fill: '#FFFFFF',\n            }}\n            d=\"M993.1,838.7c-1.1-0.5-1.9-1.2-2.5-2c-0.6-0.9-0.9-1.9-1-3h2.9c0.1,1,0.5,1.8,1.2,2.5    c0.7,0.7,1.7,1,3.1,1c1.3,0,2.3-0.3,3-1c0.7-0.6,1.1-1.5,1.1-2.5c0-0.8-0.2-1.4-0.7-1.9c-0.4-0.5-1-0.9-1.6-1.1    c-0.7-0.3-1.5-0.5-2.6-0.8c-1.4-0.4-2.5-0.7-3.3-1.1c-0.8-0.4-1.5-0.9-2.1-1.7c-0.6-0.8-0.9-1.8-0.9-3.1c0-1.1,0.3-2.1,0.9-3    c0.6-0.9,1.4-1.5,2.4-2c1-0.5,2.2-0.7,3.6-0.7c1.9,0,3.5,0.5,4.8,1.5c1.2,1,1.9,2.3,2.1,3.9h-3c-0.1-0.8-0.5-1.5-1.2-2.1    c-0.7-0.6-1.7-0.9-2.9-0.9c-1.1,0-2.1,0.3-2.8,0.9c-0.7,0.6-1.1,1.4-1.1,2.5c0,0.8,0.2,1.4,0.6,1.8c0.4,0.5,1,0.8,1.6,1.1    c0.6,0.2,1.5,0.5,2.6,0.8c1.4,0.4,2.5,0.7,3.3,1.1s1.5,0.9,2.1,1.7c0.6,0.8,0.9,1.8,0.9,3.1c0,1-0.3,2-0.8,2.9    c-0.5,0.9-1.3,1.6-2.4,2.2c-1.1,0.6-2.3,0.8-3.7,0.8C995.4,839.4,994.2,839.2,993.1,838.7z\"\n          />\n          <path\n            style={{\n              fill: '#FFFFFF',\n            }}\n            d=\"M1011.4,820.7v6.9h7.6v2.2h-7.6v7.1h8.4v2.2h-11.2v-20.8h11.2v2.2H1011.4z\"\n          />\n          <path\n            style={{\n              fill: '#FFFFFF',\n            }}\n            d=\"M1041.3,839.2h-2.7l-10.9-16.5v16.5h-2.7v-20.8h2.7l10.9,16.5v-16.5h2.7V839.2z\"\n          />\n          <path\n            style={{\n              fill: '#FFFFFF',\n            }}\n            d=\"M1059.7,818.5v2.2h-5.7v18.5h-2.7v-18.5h-5.7v-2.2H1059.7z\"\n          />\n          <path\n            style={{\n              fill: '#FFFFFF',\n            }}\n            d=\"M1066.8,820.7v6.9h7.6v2.2h-7.6v7.1h8.4v2.2h-11.2v-20.8h11.2v2.2H1066.8z\"\n          />\n          <path\n            style={{\n              fill: '#FFFFFF',\n            }}\n            d=\"M1092.7,819.7c1.7,0.8,2.9,2,3.8,3.6c0.9,1.6,1.3,3.4,1.3,5.5c0,2.1-0.4,4-1.3,5.5    c-0.9,1.6-2.2,2.7-3.8,3.6c-1.7,0.8-3.6,1.2-5.9,1.2h-6.5v-20.7h6.5C1089.1,818.5,1091.1,818.9,1092.7,819.7z M1093,834.8    c1.4-1.4,2.1-3.4,2.1-6c0-2.6-0.7-4.6-2.1-6c-1.4-1.4-3.5-2.2-6.1-2.2h-3.7V837h3.7C1089.5,837,1091.6,836.3,1093,834.8z\"\n          />\n          <path\n            style={{\n              fill: '#FFFFFF',\n            }}\n            d=\"M1124.2,818.5v2.2h-5.7v18.5h-2.7v-18.5h-5.7v-2.2H1124.2z\"\n          />\n          <path\n            style={{\n              fill: '#FFFFFF',\n            }}\n            d=\"M1132.7,838.1c-1.6-0.9-2.8-2.2-3.8-3.8c-0.9-1.6-1.4-3.4-1.4-5.5c0-2,0.5-3.8,1.4-5.5    c0.9-1.6,2.2-2.9,3.8-3.8c1.6-0.9,3.3-1.4,5.3-1.4c1.9,0,3.7,0.5,5.3,1.4c1.6,0.9,2.8,2.2,3.7,3.8c0.9,1.6,1.4,3.4,1.4,5.5    s-0.5,3.9-1.4,5.5c-0.9,1.6-2.2,2.9-3.7,3.8c-1.6,0.9-3.4,1.4-5.3,1.4C1136.1,839.4,1134.3,839,1132.7,838.1z M1141.9,836.1    c1.2-0.7,2.1-1.6,2.7-2.9c0.7-1.2,1-2.7,1-4.3c0-1.7-0.3-3.1-1-4.4c-0.7-1.2-1.6-2.2-2.7-2.9c-1.2-0.7-2.5-1-3.9-1    c-1.5,0-2.8,0.3-3.9,1c-1.2,0.7-2.1,1.6-2.7,2.9c-0.7,1.2-1,2.7-1,4.4c0,1.6,0.3,3.1,1,4.3c0.7,1.2,1.6,2.2,2.7,2.9    c1.2,0.7,2.5,1,3.9,1C1139.4,837.1,1140.8,836.7,1141.9,836.1z\"\n          />\n        </g>\n        <path\n          style={{\n            fill: 'none',\n          }}\n          d=\"M1242.8,1307.9c25.1-0.4,62.1-2.4,99.1-8.1c1.2-0.2,1.7-1.7,0.8-2.6c-7.5-7.3-33-31.7-52.3-44.7   c0,0-0.1,0-0.1,0c0.1,0,0.2-0.1,0.2-0.1l53.6-61.1c0.8-0.9,0-2.2-1.1-2c-77.3,10.7-139.1,8.1-164.1,7.2c-11.6-0.4-15.5,0.8-15,2.6   l-0.1,0c0.3,2,2.7,20.9,2.5,36.4c-2.1,0.1-7.6,0.3-13.7,0.4c0-0.3,0-0.6,0.1-1l4.9-19.3c0.6-2.4-1.1-4.8-3.6-4.9l-19.9-1.3   c-2-0.1-3.6-1.7-3.7-3.7l-1.3-19.9c-0.2-2.5-2.5-4.2-4.9-3.6l-19.3,4.9c-1.9,0.5-3.9-0.5-4.7-2.4l-7.4-18.6   c-0.9-2.3-3.7-3.2-5.8-1.9l-16.9,10.7c-1.7,1.1-3.9,0.7-5.2-0.8l-12.7-15.4c-1.6-1.9-4.5-1.9-6.1,0l-12.7,15.4   c-1.3,1.5-3.5,1.9-5.2,0.8l-16.9-10.7c-2.1-1.3-4.9-0.4-5.8,1.9l-7.4,18.6c-0.7,1.9-2.7,2.9-4.7,2.4l-19.3-4.9   c-2.4-0.6-4.8,1.1-4.9,3.6l-1.3,19.9c-0.1,2-1.7,3.6-3.7,3.7l-19.9,1.3c-2.5,0.2-4.2,2.5-3.6,4.9l4.9,19.3c0.1,0.4,0.1,0.8,0.1,1.2   c-4.7-0.2-9.6-0.5-11.2-0.6c-0.2-15.5,2.2-34.4,2.5-36.4l-0.1,0c0.5-1.8-3.4-3-15-2.6c-25,0.9-86.9,3.6-164.3-7.2   c-1.1-0.1-1.8,1.1-1,1.9l53.7,61.3c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0,0.2,0c-0.1,0-0.2,0-0.2,0c-0.1,0-0.2,0-0.4,0.1   c-19.5,13.2-45.3,38-52.4,44.9c-0.8,0.8-0.3,2.1,0.7,2.2c37.1,5.8,74.2,7.8,99.4,8.2l0.1,0c-0.3,13.5,0.1,20.9,0.2,23.3l0.1,1.3   c0.4,1.9,4,3.9,12.3,6.2c17.3,4.8,50.2,7,74.9,7.8l-4.9,19c-0.6,2.4,1.1,4.8,3.6,4.9l19.9,1.3c2,0.1,3.6,1.7,3.7,3.7l1.3,19.9   c0.2,2.5,2.5,4.2,4.9,3.6l19.3-4.9c1.9-0.5,3.9,0.5,4.7,2.4l7.4,18.6c0.9,2.3,3.7,3.2,5.8,1.9l16.9-10.7c1.7-1.1,3.9-0.7,5.2,0.8   l12.7,15.4c1.6,1.9,4.5,1.9,6.1,0l12.7-15.4c1.3-1.5,3.5-1.9,5.2-0.8l16.9,10.7c2.1,1.3,4.9,0.4,5.8-1.9l7.4-18.6   c0.7-1.9,2.7-2.9,4.7-2.4l19.3,4.9c2.4,0.6,4.8-1.1,4.9-3.6l1.3-19.9c0.1-2,1.7-3.6,3.7-3.7l19.9-1.3c2.5-0.2,4.2-2.5,3.6-4.9   l-4.8-18.8c25.2-0.8,60-3.1,77.3-7.9c8.3-2.3,11.9-4.3,12.3-6.2l0.1-1.3C1242.6,1328.8,1243,1321.4,1242.8,1307.9L1242.8,1307.9z\"\n        />\n        <path\n          style={{\n            fill: 'none',\n          }}\n          d=\"M1242.8,1307.9c25.1-0.4,62.1-2.4,99.1-8.1c1.2-0.2,1.7-1.7,0.8-2.6c-7.5-7.3-33-31.7-52.3-44.7   c0,0-0.1,0-0.1,0c0.1,0,0.2-0.1,0.2-0.1l53.6-61.1c0.8-0.9,0-2.2-1.1-2c-77.3,10.7-139.1,8.1-164.1,7.2c-11.6-0.4-15.5,0.8-15,2.6   l-0.1,0c0.3,2,2.7,20.9,2.5,36.4c-2.1,0.1-7.6,0.3-13.7,0.4c0-0.3,0-0.6,0.1-1l4.9-19.3c0.6-2.4-1.1-4.8-3.6-4.9l-19.9-1.3   c-2-0.1-3.6-1.7-3.7-3.7l-1.3-19.9c-0.2-2.5-2.5-4.2-4.9-3.6l-19.3,4.9c-1.9,0.5-3.9-0.5-4.7-2.4l-7.4-18.6   c-0.9-2.3-3.7-3.2-5.8-1.9l-16.9,10.7c-1.7,1.1-3.9,0.7-5.2-0.8l-12.7-15.4c-1.6-1.9-4.5-1.9-6.1,0l-12.7,15.4   c-1.3,1.5-3.5,1.9-5.2,0.8l-16.9-10.7c-2.1-1.3-4.9-0.4-5.8,1.9l-7.4,18.6c-0.7,1.9-2.7,2.9-4.7,2.4l-19.3-4.9   c-2.4-0.6-4.8,1.1-4.9,3.6l-1.3,19.9c-0.1,2-1.7,3.6-3.7,3.7l-19.9,1.3c-2.5,0.2-4.2,2.5-3.6,4.9l4.9,19.3c0.1,0.4,0.1,0.8,0.1,1.2   c-4.7-0.2-9.6-0.5-11.2-0.6c-0.2-15.5,2.2-34.4,2.5-36.4l-0.1,0c0.5-1.8-3.4-3-15-2.6c-25,0.9-86.9,3.6-164.3-7.2   c-1.1-0.1-1.8,1.1-1,1.9l53.7,61.3c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0,0.2,0c-0.1,0-0.2,0-0.2,0c-0.1,0-0.2,0-0.4,0.1   c-19.5,13.2-45.3,38-52.4,44.9c-0.8,0.8-0.3,2.1,0.7,2.2c37.1,5.8,74.2,7.8,99.4,8.2l0.1,0c-0.3,13.5,0.1,20.9,0.2,23.3l0.1,1.3   c0.4,1.9,4,3.9,12.3,6.2c17.3,4.8,50.2,7,74.9,7.8l-4.9,19c-0.6,2.4,1.1,4.8,3.6,4.9l19.9,1.3c2,0.1,3.6,1.7,3.7,3.7l1.3,19.9   c0.2,2.5,2.5,4.2,4.9,3.6l19.3-4.9c1.9-0.5,3.9,0.5,4.7,2.4l7.4,18.6c0.9,2.3,3.7,3.2,5.8,1.9l16.9-10.7c1.7-1.1,3.9-0.7,5.2,0.8   l12.7,15.4c1.6,1.9,4.5,1.9,6.1,0l12.7-15.4c1.3-1.5,3.5-1.9,5.2-0.8l16.9,10.7c2.1,1.3,4.9,0.4,5.8-1.9l7.4-18.6   c0.7-1.9,2.7-2.9,4.7-2.4l19.3,4.9c2.4,0.6,4.8-1.1,4.9-3.6l1.3-19.9c0.1-2,1.7-3.6,3.7-3.7l19.9-1.3c2.5-0.2,4.2-2.5,3.6-4.9   l-4.8-18.8c25.2-0.8,60-3.1,77.3-7.9c8.3-2.3,11.9-4.3,12.3-6.2l0.1-1.3C1242.6,1328.8,1243,1321.4,1242.8,1307.9L1242.8,1307.9z\"\n        />\n        <g>\n          <path\n            style={{\n              fill: 'none',\n            }}\n            d=\"M860.9,1256.4c-0.1,0.8-0.1,1.6-0.2,2.5c0.1-1,0.2-2.1,0.3-3c-1.1,0-2.2,0-3.2,0c0.9,0,1.7,0,2.6,0    C860.7,1255.8,861,1256.1,860.9,1256.4z\"\n          />\n          <path\n            style={{\n              opacity: 0.05,\n              fill: '#241F20',\n            }}\n            d=\"M922,1196.4c-25,0.9-86.9,3.6-164.3-7.2c-1.1-0.1-1.8,1.1-1,1.9l53.7,61.3    c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0,0.2,0c0.1,0,0.2,0,0.3,0c0.1,0,0.2,0,0.3,0c0.2,0,0.4,0.1,0.6,0.1c0.1,0,0.3,0,0.4,0.1    c0.3,0,0.5,0.1,0.8,0.1c0.4,0,0.8,0.1,1.2,0.2c0.1,0,0.3,0,0.4,0.1c0.5,0.1,1.1,0.1,1.6,0.2c0.1,0,0.3,0,0.4,0    c0.6,0.1,1.3,0.1,2,0.2c0.1,0,0.2,0,0.4,0c0.4,0,0.9,0.1,1.4,0.1c1.2,0.1,2.5,0.2,3.9,0.4c0.2,0,0.3,0,0.5,0    c0.3,0,0.7,0.1,1.1,0.1c0.8,0.1,1.5,0.1,2.3,0.2c0.3,0,0.7,0.1,1,0.1c0.9,0.1,1.7,0.1,2.7,0.2c0.4,0,0.9,0.1,1.3,0.1    c0.9,0.1,1.7,0.1,2.7,0.2c0.5,0,1.1,0.1,1.7,0.1c0.9,0,1.7,0.1,2.6,0.1c0.7,0,1.4,0.1,2.1,0.1c0.8,0,1.6,0.1,2.5,0.1    c0.8,0,1.6,0.1,2.4,0.1c0.8,0,1.7,0.1,2.5,0.1c0.8,0,1.6,0,2.3,0.1c0.9,0,1.9,0.1,2.8,0.1c0.8,0,1.6,0,2.4,0c1.1,0,2.1,0,3.2,0    l0,0c1.6-16.8,3.4-26.7,4.3-31.2l0.6-2.5l0.1-0.5c0.5-2.9,8.5-5.3,19-7.4c9.9-2,24.8-5.4,34.3-7.6c8.8-1.9,17.1-5.3,17.8-7.6    C937.5,1197.2,933.6,1196,922,1196.4z\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: '#FFFFFF',\n            }}\n            d=\"M860.4,1255.8c-0.9,0-1.8,0-2.6,0c-0.8,0-1.7,0-2.4,0c-1,0-1.9,0-2.8-0.1    c-0.8,0-1.6,0-2.3-0.1c-0.9,0-1.7-0.1-2.5-0.1c-0.8,0-1.6-0.1-2.4-0.1c-0.9,0-1.7-0.1-2.5-0.1c-0.7,0-1.4-0.1-2.1-0.1    c-0.9,0-1.7-0.1-2.6-0.1c-0.6,0-1.1-0.1-1.7-0.1c-0.9-0.1-1.8-0.1-2.7-0.2c-0.4,0-0.9-0.1-1.3-0.1c-0.9-0.1-1.8-0.1-2.7-0.2    c-0.3,0-0.7-0.1-1-0.1c-0.8-0.1-1.6-0.1-2.3-0.2c-0.4,0-0.7-0.1-1.1-0.1c-0.2,0-0.3,0-0.5,0c-1.4-0.1-2.7-0.3-3.9-0.4    c-0.5,0-1-0.1-1.4-0.1c-0.1,0-0.2,0-0.4,0c-0.7-0.1-1.4-0.1-2-0.2c-0.2,0-0.3,0-0.4,0c-0.6-0.1-1.1-0.1-1.6-0.2    c-0.2,0-0.3,0-0.4-0.1c-0.4-0.1-0.9-0.1-1.2-0.2c-0.3,0-0.6-0.1-0.8-0.1c-0.1,0-0.3,0-0.4-0.1c-0.2,0-0.4-0.1-0.6-0.1    c-0.1,0-0.3,0-0.3,0c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0-0.2,0c-0.1,0-0.2,0-0.4,0.1c-19.5,13.2-45.3,38-52.4,44.9    c-0.8,0.8-0.3,2.1,0.7,2.2c37.1,5.8,74.2,7.8,99.4,8.2l0.1,0c0.2-7.7,0.5-17.5,1.2-29.3c0.1-0.8,0.1-1.7,0.2-2.6    c0.1-1.9,0.2-3.7,0.4-5.4c0-0.6,0.1-1.2,0.1-1.8c0.1-1.1,0.2-2.2,0.2-3.3c0-0.6,0.1-1.1,0.1-1.7c0.1-1,0.2-2.1,0.2-3.1    c0-0.6,0.1-1.1,0.1-1.7c0.1-0.8,0.1-1.7,0.2-2.5C861,1256.1,860.7,1255.8,860.4,1255.8z\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M832.4,1254.7c0.4,0,0.9,0.1,1.3,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M832.4,1254.7c0.4,0,0.9,0.1,1.3,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M832.4,1254.7c0.4,0,0.9,0.1,1.3,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M832.4,1254.7c0.4,0,0.9,0.1,1.3,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M825.4,1254.2c0.3,0,0.7,0.1,1.1,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M825.4,1254.2c0.3,0,0.7,0.1,1.1,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M825.4,1254.2c0.3,0,0.7,0.1,1.1,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M825.4,1254.2c0.3,0,0.7,0.1,1.1,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M850.1,1255.6c0.8,0,1.6,0,2.3,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M850.1,1255.6c0.8,0,1.6,0,2.3,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M850.1,1255.6c0.8,0,1.6,0,2.3,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M850.1,1255.6c0.8,0,1.6,0,2.3,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M828.8,1254.4c0.3,0,0.7,0.1,1,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M828.8,1254.4c0.3,0,0.7,0.1,1,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M828.8,1254.4c0.3,0,0.7,0.1,1,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M828.8,1254.4c0.3,0,0.7,0.1,1,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"M821,1253.7    c1.2,0.1,2.5,0.2,3.9,0.4\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"M821,1253.7    c1.2,0.1,2.5,0.2,3.9,0.4\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"M821,1253.7    c1.2,0.1,2.5,0.2,3.9,0.4\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"M821,1253.7    c1.2,0.1,2.5,0.2,3.9,0.4\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M819.2,1253.6c0.1,0,0.2,0,0.4,0\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M819.2,1253.6c0.1,0,0.2,0,0.4,0\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M819.2,1253.6c0.1,0,0.2,0,0.4,0\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M819.2,1253.6c0.1,0,0.2,0,0.4,0\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M840.7,1255.2c0.7,0,1.4,0.1,2.1,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M840.7,1255.2c0.7,0,1.4,0.1,2.1,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M840.7,1255.2c0.7,0,1.4,0.1,2.1,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M840.7,1255.2c0.7,0,1.4,0.1,2.1,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M855.3,1255.7c0.8,0,1.6,0,2.4,0\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M855.3,1255.7c0.8,0,1.6,0,2.4,0\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M855.3,1255.7c0.8,0,1.6,0,2.4,0\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M855.3,1255.7c0.8,0,1.6,0,2.4,0\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M845.3,1255.4c0.8,0,1.6,0.1,2.4,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M845.3,1255.4c0.8,0,1.6,0.1,2.4,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M845.3,1255.4c0.8,0,1.6,0.1,2.4,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M845.3,1255.4c0.8,0,1.6,0.1,2.4,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"M836.4,1255    c0.5,0,1.1,0.1,1.7,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"M836.4,1255    c0.5,0,1.1,0.1,1.7,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"M836.4,1255    c0.5,0,1.1,0.1,1.7,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"M836.4,1255    c0.5,0,1.1,0.1,1.7,0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: '#241F20',\n            }}\n            d=\"M934.6,1235.4c-20.6-1-41.7-3-56.3-7c-8.3-2.3-11.9-4.3-12.3-6.2l-0.1,0l-0.6,2.5    c-0.9,4.5-2.7,14.4-4.3,31.2l0,0c-0.1,1-0.2,2-0.3,3c0,0.6-0.1,1.1-0.1,1.7c-0.1,1-0.2,2-0.2,3.1c0,0.6-0.1,1.1-0.1,1.7    c-0.1,1.1-0.2,2.2-0.2,3.3c0,0.6-0.1,1.2-0.1,1.8c-0.1,1.8-0.2,3.6-0.4,5.4c0,0.9-0.1,1.7-0.2,2.6l0.1,0    c14.5,5.9,35.6,9.2,56.8,11c0.2-0.8,0.5-1.6,1.2-2.2l15.4-12.7c1.5-1.3,1.9-3.5,0.8-5.2l-10.7-16.9c-1.3-2.1-0.4-4.9,1.9-5.8    l18.6-7.4c1.5-0.6,2.4-2,2.5-3.5C941.2,1235.7,936.2,1235.4,934.6,1235.4z\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"M860,1268.7    c0,0.6-0.1,1.2-0.1,1.8\"\n          />\n          <path\n            style={{\n              opacity: 0.05,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M860,1268.7c0,0.6-0.1,1.2-0.1,1.8\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"M860,1268.7    c0,0.6-0.1,1.2-0.1,1.8\"\n          />\n          <path\n            style={{\n              opacity: 0.05,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M860,1268.7c0,0.6-0.1,1.2-0.1,1.8\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M860.3,1263.7c0,0.6-0.1,1.1-0.1,1.7\"\n          />\n          <path\n            style={{\n              opacity: 0.05,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M860.3,1263.7c0,0.6-0.1,1.1-0.1,1.7\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M860.3,1263.7c0,0.6-0.1,1.1-0.1,1.7\"\n          />\n          <path\n            style={{\n              opacity: 0.05,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M860.3,1263.7c0,0.6-0.1,1.1-0.1,1.7\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M860.7,1258.9c0,0.6-0.1,1.1-0.1,1.7\"\n          />\n          <path\n            style={{\n              opacity: 0.05,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M860.7,1258.9c0,0.6-0.1,1.1-0.1,1.7\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M860.7,1258.9c0,0.6-0.1,1.1-0.1,1.7\"\n          />\n          <path\n            style={{\n              opacity: 0.05,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M860.7,1258.9c0,0.6-0.1,1.1-0.1,1.7\"\n          />\n          <path\n            style={{\n              opacity: 0.45,\n              fill: '#241F20',\n            }}\n            d=\"M937.1,1199L937.1,1199c-0.7,2.3-9.1,5.7-17.8,7.6c-9.5,2.1-24.4,5.6-34.3,7.6    c-10.4,2.1-18.5,4.5-19,7.4l-0.1,0.5l0.1,0c0.4,1.9,4,3.9,12.3,6.2c14.6,4,35.7,6,56.3,7C934.4,1219.9,936.8,1200.9,937.1,1199z\"\n          />\n          <path\n            style={{\n              opacity: 0.1,\n              fill: '#FFFFFF',\n            }}\n            d=\"M943.4,1341.4l-18.6-7.4c-2.3-0.9-3.2-3.7-1.9-5.8l10.7-16.9c1.1-1.7,0.7-3.9-0.8-5.2    l-15.4-12.7c-1.2-1-1.6-2.5-1.2-3.9c-21.2-1.8-42.3-5.1-56.8-11l-0.1,0c-0.7,11.9-1,21.6-1.2,29.3c-0.3,13.5,0.1,20.9,0.2,23.3    l0.1,1.3c0.4,1.9,4,3.9,12.3,6.2c17.3,4.8,50.2,7,74.9,7.8l0.1-0.4C946.2,1344.1,945.2,1342.1,943.4,1341.4z\"\n          />\n          <path\n            style={{\n              opacity: 0.05,\n              fill: '#241F20',\n            }}\n            d=\"M1342.9,1189.2c-77.3,10.7-139.1,8.1-164.1,7.2c-11.6-0.4-15.5,0.8-15,2.6    c0.7,2.3,9,5.7,17.8,7.6c9.5,2.1,24.4,5.6,34.3,7.6c10.4,2.1,18.5,4.5,19,7.4l0.1,0.5l0.6,2.5c0.9,4.5,2.7,14.4,4.3,31.2l0,0    c1.9,0,3.8,0,5.6-0.1c0.6,0,1.2,0,1.8,0c1.2,0,2.4-0.1,3.6-0.1c0.7,0,1.4,0,2-0.1c1,0,2-0.1,3-0.1c0.7,0,1.4-0.1,2.1-0.1    c0.9,0,1.8-0.1,2.6-0.1c0.7,0,1.4-0.1,2.1-0.1c0.8,0,1.6-0.1,2.4-0.1c0.7,0,1.3-0.1,1.9-0.1c0.7,0,1.5-0.1,2.2-0.1    c0.6,0,1.2-0.1,1.8-0.1c0.7-0.1,1.3-0.1,2-0.2c0.6,0,1.1-0.1,1.6-0.1c0.6-0.1,1.2-0.1,1.8-0.2c0.5,0,1-0.1,1.5-0.1    c0.5-0.1,1.1-0.1,1.6-0.2c0.4,0,0.9-0.1,1.3-0.1c0.5-0.1,1-0.1,1.4-0.2c0.4,0,0.8-0.1,1.1-0.1c0.4,0,0.8-0.1,1.2-0.1    c0.3,0,0.7-0.1,1-0.1c0.3,0,0.7-0.1,1-0.1c0.3,0,0.5-0.1,0.8-0.1c0.3,0,0.6-0.1,0.9-0.1c0.2,0,0.4-0.1,0.5-0.1    c0.2,0,0.4-0.1,0.6-0.1c0.2,0,0.3,0,0.5-0.1c0.1,0,0.2,0,0.3,0c0.1,0,0.2,0,0.3,0c0,0,0,0,0,0c0.1,0,0.2-0.1,0.2-0.1l53.6-61.1    C1344.7,1190.4,1344,1189.1,1342.9,1189.2z\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: '#FFFFFF',\n            }}\n            d=\"M1342.6,1297.2c-7.5-7.3-33-31.7-52.3-44.7c0,0-0.1,0-0.1,0c0,0,0,0,0,0    c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0-0.3,0c-0.1,0-0.3,0-0.5,0.1c-0.2,0-0.4,0.1-0.6,0.1c-0.2,0-0.4,0-0.5,0.1    c-0.3,0-0.6,0.1-0.9,0.1c-0.2,0-0.5,0.1-0.8,0.1c-0.3,0-0.6,0.1-1,0.1c-0.3,0-0.6,0.1-1,0.1c-0.4,0-0.8,0.1-1.2,0.1    c-0.4,0-0.7,0.1-1.1,0.1c-0.5,0.1-0.9,0.1-1.4,0.2c-0.4,0-0.8,0.1-1.3,0.1c-0.5,0.1-1.1,0.1-1.6,0.2c-0.5,0-1,0.1-1.5,0.1    c-0.6,0.1-1.2,0.1-1.8,0.2c-0.5,0-1.1,0.1-1.6,0.1c-0.6,0.1-1.3,0.1-2,0.2c-0.6,0-1.2,0.1-1.8,0.1c-0.7,0.1-1.4,0.1-2.2,0.1    c-0.6,0-1.3,0.1-1.9,0.1c-0.8,0-1.6,0.1-2.4,0.1c-0.7,0-1.3,0.1-2.1,0.1c-0.8,0-1.7,0.1-2.6,0.1c-0.7,0-1.4,0.1-2.1,0.1    c-1,0-2,0.1-3,0.1c-0.7,0-1.3,0.1-2,0.1c-1.2,0-2.4,0.1-3.6,0.1c-0.6,0-1.2,0-1.8,0c-1.8,0-3.7,0.1-5.6,0.1    c0.5,5.9,1,12.5,1.5,20.1c0,0.9,0.1,1.7,0.2,2.6c0.7,11.9,1,21.6,1.2,29.3l0.1,0c25.1-0.4,62.1-2.4,99.1-8.1    C1343,1299.6,1343.5,1298.1,1342.6,1297.2z\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1239.9,1255.8c1.9,0,3.8,0,5.6-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1239.9,1255.8c1.9,0,3.8,0,5.6-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1239.9,1255.8c1.9,0,3.8,0,5.6-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1239.9,1255.8c1.9,0,3.8,0,5.6-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1247.2,1255.7c1.2,0,2.4-0.1,3.6-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1247.2,1255.7c1.2,0,2.4-0.1,3.6-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1247.2,1255.7c1.2,0,2.4-0.1,3.6-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1247.2,1255.7c1.2,0,2.4-0.1,3.6-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1262.6,1255.1c0.8,0,1.6-0.1,2.4-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1262.6,1255.1c0.8,0,1.6-0.1,2.4-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1262.6,1255.1c0.8,0,1.6-0.1,2.4-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1262.6,1255.1c0.8,0,1.6-0.1,2.4-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1266.9,1254.8c0.7,0,1.5-0.1,2.2-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1266.9,1254.8c0.7,0,1.5-0.1,2.2-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1266.9,1254.8c0.7,0,1.5-0.1,2.2-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1266.9,1254.8c0.7,0,1.5-0.1,2.2-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1280.6,1253.7c0.5-0.1,1-0.1,1.4-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1280.6,1253.7c0.5-0.1,1-0.1,1.4-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1280.6,1253.7c0.5-0.1,1-0.1,1.4-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1280.6,1253.7c0.5-0.1,1-0.1,1.4-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1270.9,1254.5c0.7-0.1,1.3-0.1,2-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1270.9,1254.5c0.7-0.1,1.3-0.1,2-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1270.9,1254.5c0.7-0.1,1.3-0.1,2-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1270.9,1254.5c0.7-0.1,1.3-0.1,2-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"M1277.7,1254    c0.6-0.1,1.1-0.1,1.6-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"M1277.7,1254    c0.6-0.1,1.1-0.1,1.6-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"M1277.7,1254    c0.6-0.1,1.1-0.1,1.6-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"M1277.7,1254    c0.6-0.1,1.1-0.1,1.6-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1274.5,1254.3c0.6-0.1,1.2-0.1,1.8-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1274.5,1254.3c0.6-0.1,1.2-0.1,1.8-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1274.5,1254.3c0.6-0.1,1.2-0.1,1.8-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1274.5,1254.3c0.6-0.1,1.2-0.1,1.8-0.2\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1283.2,1253.4c0.4,0,0.8-0.1,1.2-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1283.2,1253.4c0.4,0,0.8-0.1,1.2-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1283.2,1253.4c0.4,0,0.8-0.1,1.2-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1283.2,1253.4c0.4,0,0.8-0.1,1.2-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1252.8,1255.5c1,0,2-0.1,3-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1252.8,1255.5c1,0,2-0.1,3-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1252.8,1255.5c1,0,2-0.1,3-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1252.8,1255.5c1,0,2-0.1,3-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1257.9,1255.3c0.9,0,1.8-0.1,2.6-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1257.9,1255.3c0.9,0,1.8-0.1,2.6-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: 'none',\n              stroke: '#241F20',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1257.9,1255.3c0.9,0,1.8-0.1,2.6-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.25,\n              fill: 'none',\n              stroke: '#FFFFFF',\n              strokeWidth: 0,\n              strokeLinecap: 'round',\n              strokeLinejoin: 'round',\n            }}\n            d=\"    M1257.9,1255.3c0.9,0,1.8-0.1,2.6-0.1\"\n          />\n          <path\n            style={{\n              opacity: 0.15,\n              fill: '#241F20',\n            }}\n            d=\"M1241.4,1276c-0.5-7.6-1-14.3-1.5-20.1l0,0c-1.6-16.8-3.4-26.7-4.3-31.2l-0.6-2.5    l-0.1,0c-0.4,1.9-4,3.9-12.3,6.2c-14.6,4-35.7,6-56.3,7c-2.1,0.1-7.6,0.3-13.7,0.4c0,1.6,0.9,3.1,2.4,3.7l18.6,7.4    c2.3,0.9,3.2,3.7,1.9,5.8l-10.7,16.9c-1.1,1.7-0.7,3.9,0.8,5.2l15.4,12.7c0.8,0.6,1.1,1.5,1.3,2.4c22-1.7,44.2-5.1,59.2-11.2    l0.1,0C1241.5,1277.7,1241.4,1276.8,1241.4,1276z\"\n          />\n          <path\n            style={{\n              opacity: 0.45,\n              fill: '#241F20',\n            }}\n            d=\"M1234.8,1221.6c-0.5-2.9-8.5-5.3-19-7.4c-9.9-2-24.8-5.4-34.3-7.6    c-8.8-1.9-17.1-5.3-17.8-7.6l-0.1,0c0.3,2,2.7,20.9,2.5,36.4c20.6-1,41.7-3,56.3-7c8.3-2.3,11.9-4.3,12.3-6.2l0.1,0L1234.8,1221.6    z\"\n          />\n          <path\n            style={{\n              opacity: 0.1,\n              fill: '#FFFFFF',\n            }}\n            d=\"M1242.7,1307.9c-0.2-7.7-0.5-17.5-1.2-29.3l-0.1,0c-15.1,6.2-37.2,9.5-59.2,11.2    c0.2,1.3-0.1,2.8-1.3,3.7l-15.4,12.7c-1.5,1.3-1.9,3.5-0.8,5.2l10.7,16.9c1.3,2.1,0.4,4.9-1.9,5.8l-18.6,7.4    c-1.8,0.7-2.9,2.7-2.4,4.7l0.1,0.5c25.2-0.8,60-3.1,77.3-7.9c8.3-2.3,11.9-4.3,12.3-6.2l0.1-1.3    C1242.6,1328.8,1243,1321.4,1242.7,1307.9z\"\n          />\n          <g>\n            <circle\n              style={{\n                fill: 'none',\n              }}\n              cx={1049.8}\n              cy={1289.4}\n              r={103.3}\n            />\n          </g>\n          <g>\n            <circle\n              style={{\n                fill: 'none',\n              }}\n              cx={1049.8}\n              cy={1289.4}\n              r={82.8}\n            />\n          </g>\n          <g>\n            <polygon\n              style={{\n                fill: 'none',\n              }}\n              points=\"1084.2,1279.9 1101.1,1259.5 1075,1264 1079.5,1237.8 1059,1254.8 1049.8,1229.8      1040.6,1254.8 1020.2,1237.8 1024.7,1264 998.6,1259.5 1015.5,1279.9 990.6,1289.1 1015.5,1298.3 998.6,1318.7 1024.7,1314.2      1020.2,1340.4 1040.6,1323.4 1049.8,1348.3 1059,1323.4 1079.5,1340.4 1075,1314.2 1101.1,1318.7 1084.2,1298.3 1109.1,1289.1         \"\n            />\n          </g>\n        </g>\n        <path\n          style={{\n            fill: 'none',\n          }}\n          d=\"M1342.9,1189.2c-77.3,10.7-139.1,8.1-164.1,7.2c-11.6-0.4-15.5,0.8-15,2.6l-0.1,0   c0.3,2,2.7,20.9,2.5,36.4c-2.1,0.1-7.6,0.3-13.7,0.4c0-0.3,0-0.6,0.1-1l4.9-19.3c0.6-2.4-1.1-4.8-3.6-4.9l-19.9-1.3   c-2-0.1-3.6-1.7-3.7-3.7l-1.3-19.9c-0.2-2.5-2.5-4.2-4.9-3.6l-19.3,4.9c-1.9,0.5-3.9-0.5-4.7-2.4l-7.4-18.6   c-0.9-2.3-3.7-3.2-5.8-1.9l-16.9,10.7c-1.7,1.1-3.9,0.7-5.2-0.8l-12.7-15.4c-1.6-1.9-4.5-1.9-6.1,0l-12.7,15.4   c-1.3,1.5-3.5,1.9-5.2,0.8l-16.9-10.7c-2.1-1.3-4.9-0.4-5.8,1.9l-7.4,18.6c-0.7,1.9-2.7,2.9-4.7,2.4l-19.3-4.9   c-2.4-0.6-4.8,1.1-4.9,3.6l-1.3,19.9c-0.1,2-1.7,3.6-3.7,3.7l-19.9,1.3c-2.5,0.2-4.2,2.5-3.6,4.9l4.9,19.3c0.1,0.4,0.1,0.8,0.1,1.2   c-4.7-0.2-9.6-0.5-11.2-0.6c-0.2-15.5,2.2-34.4,2.5-36.4l-0.1,0c0.5-1.8-3.4-3-15-2.6c-25,0.9-86.9,3.6-164.3-7.2   c-1.1-0.1-1.8,1.1-1,1.9l53.7,61.3c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0,0.2,0c-0.1,0-0.2,0-0.2,0c-0.1,0-0.2,0-0.4,0.1   c-19.5,13.2-45.3,38-52.4,44.9c-0.8,0.8-0.3,2.1,0.7,2.2c37.1,5.8,74.2,7.8,99.4,8.2l0.1,0c-0.3,13.5,0.1,20.9,0.2,23.3l0.1,1.3   c0.4,1.9,4,3.9,12.3,6.2c17.3,4.8,50.2,7,74.9,7.8l-4.9,19c-0.6,2.4,1.1,4.8,3.6,4.9l19.9,1.3c2,0.1,3.6,1.7,3.7,3.7l1.3,19.9   c0.2,2.5,2.5,4.2,4.9,3.6l19.3-4.9c1.9-0.5,3.9,0.5,4.7,2.4l7.4,18.6c0.9,2.3,3.7,3.2,5.8,1.9l16.9-10.7c1.7-1.1,3.9-0.7,5.2,0.8   l12.7,15.4c1.6,1.9,4.5,1.9,6.1,0l12.7-15.4c1.3-1.5,3.5-1.9,5.2-0.8l16.9,10.7c2.1,1.3,4.9,0.4,5.8-1.9l7.4-18.6   c0.7-1.9,2.7-2.9,4.7-2.4l19.3,4.9c2.4,0.6,4.8-1.1,4.9-3.6l1.3-19.9c0.1-2,1.7-3.6,3.7-3.7l19.9-1.3c2.5-0.2,4.2-2.5,3.6-4.9   l-4.8-18.8c25.2-0.8,60-3.1,77.3-7.9c8.3-2.3,11.9-4.3,12.3-6.2l0.1-1.3c0.1-2.4,0.5-9.8,0.2-23.3l0.1,0   c25.1-0.4,62.1-2.4,99.1-8.1c1.2-0.2,1.7-1.7,0.8-2.6c-7.5-7.3-33-31.7-52.3-44.7c0,0-0.1,0-0.1,0c0.1,0,0.2-0.1,0.2-0.1l53.6-61.1   C1344.7,1190.4,1344,1189.1,1342.9,1189.2z\"\n        />\n        <polygon\n          style={{\n            fill: '#241F20',\n          }}\n          points=\"1957.8,1335.7 1269.1,1335.7 1269.1,1333.6 1955.7,1333.6 1955.7,138 128.3,138    128.3,1333.6 830.5,1333.6 830.5,1335.7 126.2,1335.7 126.2,135.9 1957.8,135.9  \"\n        />\n        <g>\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M479.6,498c5.4-9.8,12.9-17.4,22.6-22.8c9.6-5.4,20.6-8.2,32.8-8.2c15,0,27.8,4,38.5,11.9    c10.7,7.9,17.8,18.7,21.4,32.3H561c-2.5-5.3-6.1-9.3-10.7-12c-4.6-2.8-9.9-4.1-15.7-4.1c-9.5,0-17.1,3.3-23,9.9    c-5.9,6.6-8.8,15.4-8.8,26.4c0,11,2.9,19.8,8.8,26.4c5.9,6.6,13.5,9.9,23,9.9c5.9,0,11.1-1.4,15.7-4.1c4.6-2.8,8.2-6.8,10.7-12    h33.8c-3.6,13.7-10.7,24.4-21.4,32.3c-10.7,7.8-23.5,11.8-38.5,11.8c-12.2,0-23.2-2.7-32.8-8.2c-9.6-5.4-17.2-13-22.6-22.7    c-5.4-9.7-8.1-20.8-8.1-33.2C471.5,518.9,474.2,507.8,479.6,498z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M649.5,493.1v25.5h41.1l0,23.7h-41.1V570h46.5v24.6h-77.3l0-126.1h77.3v24.6H649.5z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M785.6,594.6L759.3,547H752v47.6h-30.7l0-126.1h51.6c9.9,0,18.4,1.7,25.4,5.2    c7,3.5,12.2,8.2,15.7,14.3c3.5,6.1,5.2,12.8,5.2,20.2c0,8.4-2.4,15.9-7.1,22.5c-4.7,6.6-11.7,11.3-20.9,14l29.1,50H785.6z     M752,525.2h19c5.6,0,9.9-1.4,12.7-4.1c2.8-2.8,4.2-6.7,4.2-11.7c0-4.8-1.4-8.6-4.2-11.3c-2.8-2.8-7-4.1-12.7-4.1h-19V525.2z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M927.2,468.5v24.6h-33.4l0,101.5H863l0-101.5h-33.4v-24.6H927.2z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M982.2,468.5l0,126.1h-30.7l0-126.1H982.2z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1091.8,468.5v24.6h-51.4v26.6h38.5l0,23.9h-38.5v51h-30.7l0-126.1H1091.8z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1140.3,468.5l0,126.1h-30.7l0-126.1H1140.3z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1167.1,498c5.4-9.8,12.9-17.4,22.6-22.8c9.6-5.4,20.6-8.2,32.8-8.2c15,0,27.8,4,38.5,11.9    c10.7,7.9,17.8,18.7,21.4,32.3h-33.8c-2.5-5.3-6.1-9.3-10.7-12c-4.6-2.8-9.9-4.1-15.7-4.1c-9.5,0-17.1,3.3-23,9.9    c-5.9,6.6-8.8,15.4-8.8,26.4c0,11,2.9,19.8,8.8,26.4c5.9,6.6,13.5,9.9,23,9.9c5.9,0,11.1-1.4,15.7-4.1c4.6-2.8,8.2-6.8,10.7-12    h33.8c-3.6,13.7-10.7,24.4-21.4,32.3c-10.7,7.8-23.5,11.8-38.5,11.8c-12.2,0-23.2-2.7-32.8-8.2c-9.6-5.4-17.2-13-22.6-22.7    c-5.4-9.7-8.1-20.8-8.1-33.2C1159,518.9,1161.7,507.8,1167.1,498z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1377.7,572.3h-47.1l-7.5,22.3h-32.2l45.6-126.1h35.6l45.6,126.1h-32.5L1377.7,572.3z     M1369.8,548.6l-15.6-46.2l-15.5,46.2H1369.8z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1509.6,468.5v24.6h-33.4l0,101.5h-30.7l0-101.5H1412v-24.6H1509.6z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1561,493.1v25.5h41.1l0,23.7H1561V570h46.5v24.6h-77.3l0-126.1h77.3v24.6H1561z\"\n          />\n        </g>\n        <g>\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M748.9,711.2c-2.9-1.6-5.2-3.9-6.9-6.9c-1.7-3-2.5-6.3-2.5-10c0-3.7,0.8-7,2.5-10    c1.7-3,4-5.3,6.9-6.9c2.9-1.6,6.1-2.5,9.6-2.5c3.5,0,6.8,0.8,9.7,2.5c2.9,1.6,5.2,3.9,6.8,6.9c1.7,2.9,2.5,6.3,2.5,10    c0,3.7-0.8,7.1-2.5,10c-1.7,2.9-3.9,5.2-6.8,6.9c-2.9,1.6-6.1,2.5-9.7,2.5C755,713.6,751.8,712.8,748.9,711.2z M765.7,707.5    c2.1-1.2,3.8-3,5-5.3c1.2-2.3,1.8-4.9,1.8-7.9c0-3-0.6-5.7-1.8-8c-1.2-2.3-2.9-4-5-5.2c-2.1-1.2-4.5-1.8-7.2-1.8    c-2.7,0-5.1,0.6-7.2,1.8c-2.1,1.2-3.8,3-5,5.2c-1.2,2.3-1.8,4.9-1.8,8c0,3,0.6,5.7,1.8,7.9c1.2,2.3,2.9,4,5,5.3s4.5,1.8,7.1,1.8    C761.2,709.3,763.6,708.7,765.7,707.5z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M807.6,675.4v4h-16.5v12.8h13.4v4h-13.4v17.1h-4.9v-37.9H807.6z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M854.9,704.8h-16.5l-3,8.4h-5.2l13.7-37.6h5.7l13.6,37.6h-5.2L854.9,704.8z M853.4,700.8l-6.8-19.1    l-6.8,19.1H853.4z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M871.9,684.3c1.7-3,3.9-5.3,6.8-6.9c2.9-1.7,6.1-2.5,9.6-2.5c4.1,0,7.7,1,10.8,3    c3.1,2,5.3,4.8,6.7,8.5h-5.9c-1.1-2.3-2.6-4-4.5-5.3c-2-1.2-4.3-1.8-7.1-1.8c-2.6,0-5,0.6-7.1,1.8c-2.1,1.2-3.7,3-4.9,5.2    c-1.2,2.3-1.8,4.9-1.8,8c0,3,0.6,5.6,1.8,7.9c1.2,2.3,2.8,4,4.9,5.2c2.1,1.2,4.5,1.8,7.1,1.8c2.8,0,5.1-0.6,7.1-1.8    c2-1.2,3.5-3,4.5-5.2h5.9c-1.4,3.6-3.7,6.4-6.7,8.4c-3.1,2-6.7,3-10.8,3c-3.5,0-6.7-0.8-9.6-2.5c-2.9-1.6-5.2-3.9-6.8-6.9    c-1.7-2.9-2.5-6.2-2.5-9.9C869.4,690.6,870.2,687.3,871.9,684.3z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M916,684.3c1.7-3,3.9-5.3,6.8-6.9c2.9-1.7,6.1-2.5,9.6-2.5c4.1,0,7.7,1,10.8,3    c3.1,2,5.3,4.8,6.7,8.5h-5.9c-1.1-2.3-2.6-4-4.5-5.3c-2-1.2-4.3-1.8-7.1-1.8c-2.6,0-5,0.6-7.1,1.8c-2.1,1.2-3.7,3-4.9,5.2    c-1.2,2.3-1.8,4.9-1.8,8c0,3,0.6,5.6,1.8,7.9c1.2,2.3,2.8,4,4.9,5.2c2.1,1.2,4.5,1.8,7.1,1.8c2.8,0,5.1-0.6,7.1-1.8    c2-1.2,3.5-3,4.5-5.2h5.9c-1.4,3.6-3.7,6.4-6.7,8.4c-3.1,2-6.7,3-10.8,3c-3.5,0-6.7-0.8-9.6-2.5c-2.9-1.6-5.2-3.9-6.8-6.9    c-1.7-2.9-2.5-6.2-2.5-9.9C913.5,690.6,914.4,687.3,916,684.3z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M967,711.2c-2.9-1.6-5.2-3.9-6.9-6.9c-1.7-3-2.5-6.3-2.5-10c0-3.7,0.8-7,2.5-10    c1.7-3,4-5.3,6.9-6.9c2.9-1.6,6.1-2.5,9.6-2.5c3.5,0,6.8,0.8,9.7,2.5c2.9,1.6,5.2,3.9,6.8,6.9c1.7,2.9,2.5,6.3,2.5,10    c0,3.7-0.8,7.1-2.5,10c-1.7,2.9-3.9,5.2-6.8,6.9c-2.9,1.6-6.1,2.5-9.7,2.5C973.1,713.6,969.9,712.8,967,711.2z M983.8,707.5    c2.1-1.2,3.8-3,5-5.3c1.2-2.3,1.8-4.9,1.8-7.9c0-3-0.6-5.7-1.8-8c-1.2-2.3-2.9-4-5-5.2c-2.1-1.2-4.5-1.8-7.2-1.8    c-2.7,0-5.1,0.6-7.2,1.8c-2.1,1.2-3.8,3-5,5.2c-1.2,2.3-1.8,4.9-1.8,8c0,3,0.6,5.7,1.8,7.9c1.2,2.3,2.9,4,5,5.3s4.5,1.8,7.1,1.8    C979.3,709.3,981.7,708.7,983.8,707.5z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1042.8,675.7v37.6h-4.9v-28l-12.5,28h-3.5l-12.5-28.1v28.1h-4.9v-37.6h5.3l13.9,31.1l13.9-31.1    H1042.8z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1075.4,694.3c-2.2,2.1-5.4,3.1-9.9,3.1h-7.3v15.8h-4.9v-37.9h12.2c4.3,0,7.5,1,9.8,3.1    c2.2,2.1,3.3,4.7,3.3,8C1078.6,689.6,1077.5,692.2,1075.4,694.3z M1071.6,691.6c1.3-1.2,2-2.9,2-5.1c0-4.7-2.7-7-8-7h-7.3v13.9    h7.3C1068.3,693.4,1070.3,692.8,1071.6,691.6z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1091.9,709.2h13.3v4h-18.2v-37.9h4.9V709.2z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1117.5,675.4v37.9h-4.9v-37.9H1117.5z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1133.4,712.3c-2-0.9-3.5-2.1-4.6-3.7c-1.1-1.6-1.7-3.4-1.7-5.5h5.3c0.2,1.8,0.9,3.3,2.2,4.5    c1.3,1.2,3.2,1.8,5.6,1.8c2.4,0,4.2-0.6,5.6-1.8c1.4-1.2,2-2.7,2-4.5c0-1.4-0.4-2.6-1.2-3.5c-0.8-0.9-1.8-1.6-3-2.1    c-1.2-0.5-2.8-1-4.8-1.5c-2.5-0.7-4.5-1.3-6-2c-1.5-0.7-2.8-1.7-3.9-3.1c-1.1-1.4-1.6-3.3-1.6-5.6c0-2.1,0.5-3.9,1.6-5.5    c1.1-1.6,2.5-2.8,4.4-3.7c1.9-0.9,4.1-1.3,6.5-1.3c3.5,0,6.5,0.9,8.7,2.7c2.3,1.8,3.5,4.1,3.8,7.1h-5.4c-0.2-1.4-0.9-2.7-2.3-3.8    c-1.3-1.1-3.1-1.7-5.3-1.7c-2.1,0-3.8,0.5-5.1,1.6c-1.3,1.1-2,2.6-2,4.5c0,1.4,0.4,2.5,1.2,3.4c0.8,0.9,1.7,1.5,2.9,2    c1.1,0.5,2.7,1,4.8,1.5c2.5,0.7,4.5,1.4,6,2c1.5,0.7,2.8,1.7,3.9,3.1c1.1,1.4,1.6,3.3,1.6,5.7c0,1.8-0.5,3.6-1.5,5.2    c-1,1.6-2.4,3-4.3,4c-1.9,1-4.2,1.5-6.8,1.5C1137.6,713.6,1135.4,713.2,1133.4,712.3z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1191.4,675.4v37.9h-4.9v-17.2h-19.3v17.2h-4.9v-37.9h4.9V692h19.3v-16.6H1191.4z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1240.4,675.7v37.6h-4.9v-28l-12.5,28h-3.5l-12.5-28.1v28.1h-4.9v-37.6h5.3l13.9,31.1l13.9-31.1    H1240.4z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1255.8,679.4v12.7h13.8v4.1h-13.8v13h15.4v4.1h-20.4v-37.9h20.4v4.1H1255.8z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1310.7,713.2h-4.9l-19.9-30.2v30.2h-4.9v-37.9h4.9l19.9,30.1v-30.1h4.9V713.2z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1344.6,675.4v4h-10.3v33.8h-4.9v-33.8H1319v-4H1344.6z\"\n          />\n        </g>\n        <path\n          style={{\n            fill: 'none',\n          }}\n          d=\"M1342.9,1189.2c-77.3,10.7-139.1,8.1-164.1,7.2c-11.6-0.4-15.5,0.8-15,2.6l-0.1,0   c0.3,2,2.7,20.9,2.5,36.4c-2.1,0.1-7.6,0.3-13.7,0.4c0-0.3,0-0.6,0.1-1l4.9-19.3c0.6-2.4-1.1-4.8-3.6-4.9l-19.9-1.3   c-2-0.1-3.6-1.7-3.7-3.7l-1.3-19.9c-0.2-2.5-2.5-4.2-4.9-3.6l-19.3,4.9c-1.9,0.5-3.9-0.5-4.7-2.4l-7.4-18.6   c-0.9-2.3-3.7-3.2-5.8-1.9l-16.9,10.7c-1.7,1.1-3.9,0.7-5.2-0.8l-12.7-15.4c-1.6-1.9-4.5-1.9-6.1,0l-12.7,15.4   c-1.3,1.5-3.5,1.9-5.2,0.8l-16.9-10.7c-2.1-1.3-4.9-0.4-5.8,1.9l-7.4,18.6c-0.7,1.9-2.7,2.9-4.7,2.4l-19.3-4.9   c-2.4-0.6-4.8,1.1-4.9,3.6l-1.3,19.9c-0.1,2-1.7,3.6-3.7,3.7l-19.9,1.3c-2.5,0.2-4.2,2.5-3.6,4.9l4.9,19.3c0.1,0.4,0.1,0.8,0.1,1.2   c-4.7-0.2-9.6-0.5-11.2-0.6c-0.2-15.5,2.2-34.4,2.5-36.4l-0.1,0c0.5-1.8-3.4-3-15-2.6c-25,0.9-86.9,3.6-164.3-7.2   c-1.1-0.1-1.8,1.1-1,1.9l53.7,61.3c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0,0.2,0c-0.1,0-0.2,0-0.2,0c-0.1,0-0.2,0-0.4,0.1   c-19.5,13.2-45.3,38-52.4,44.9c-0.8,0.8-0.3,2.1,0.7,2.2c37.1,5.8,74.2,7.8,99.4,8.2l0.1,0c-0.3,13.5,0.1,20.9,0.2,23.3l0.1,1.3   c0.4,1.9,4,3.9,12.3,6.2c17.3,4.8,50.2,7,74.9,7.8l-4.9,19c-0.6,2.4,1.1,4.8,3.6,4.9l19.9,1.3c2,0.1,3.6,1.7,3.7,3.7l1.3,19.9   c0.2,2.5,2.5,4.2,4.9,3.6l19.3-4.9c1.9-0.5,3.9,0.5,4.7,2.4l7.4,18.6c0.9,2.3,3.7,3.2,5.8,1.9l16.9-10.7c1.7-1.1,3.9-0.7,5.2,0.8   l12.7,15.4c1.6,1.9,4.5,1.9,6.1,0l12.7-15.4c1.3-1.5,3.5-1.9,5.2-0.8l16.9,10.7c2.1,1.3,4.9,0.4,5.8-1.9l7.4-18.6   c0.7-1.9,2.7-2.9,4.7-2.4l19.3,4.9c2.4,0.6,4.8-1.1,4.9-3.6l1.3-19.9c0.1-2,1.7-3.6,3.7-3.7l19.9-1.3c2.5-0.2,4.2-2.5,3.6-4.9   l-4.8-18.8c25.2-0.8,60-3.1,77.3-7.9c8.3-2.3,11.9-4.3,12.3-6.2l0.1-1.3c0.1-2.4,0.5-9.8,0.2-23.3l0.1,0   c25.1-0.4,62.1-2.4,99.1-8.1c1.2-0.2,1.7-1.7,0.8-2.6c-7.5-7.3-33-31.7-52.3-44.7c0,0-0.1,0-0.1,0c0.1,0,0.2-0.1,0.2-0.1l53.6-61.1   C1344.7,1190.4,1344,1189.1,1342.9,1189.2z\"\n        />\n        <polygon\n          style={{\n            opacity: 0.65,\n            fill: '#FFFFFF',\n          }}\n          points=\"1084.2,1298.3 1109.1,1289.1 1084.2,1279.9 1101.1,1259.5 1075,1264    1079.5,1237.8 1059,1254.8 1049.8,1229.8 1040.6,1254.8 1020.2,1237.8 1024.7,1264 998.6,1259.5 1015.5,1279.9 990.6,1289.1    1015.5,1298.3 998.6,1318.7 1024.7,1314.2 1020.2,1340.4 1040.6,1323.4 1049.8,1348.3 1059,1323.4 1079.5,1340.4 1075,1314.2    1101.1,1318.7  \"\n        />\n        <path\n          style={{\n            opacity: 0.35,\n            fill: '#FFFFFF',\n          }}\n          d=\"M1049.8,1206.5c-45.7,0-82.8,37.1-82.8,82.8c0,45.7,37.1,82.8,82.8,82.8   c45.7,0,82.8-37.1,82.8-82.8C1132.6,1243.6,1095.6,1206.5,1049.8,1206.5z M1101.1,1318.7l-26.2-4.5l4.5,26.2l-20.4-17l-9.2,24.9   l-9.2-24.9l-20.4,17l4.5-26.2l-26.2,4.5l17-20.4l-24.9-9.2l24.9-9.2l-17-20.4l26.2,4.5l-4.5-26.2l20.4,17l9.2-24.9l9.2,24.9   l20.4-17l-4.5,26.2l26.2-4.5l-17,20.4l24.9,9.2l-24.9,9.2L1101.1,1318.7z\"\n        />\n        <path\n          style={{\n            opacity: 0.1,\n            fill: '#241F20',\n          }}\n          d=\"M1049.8,1186.1c-57,0-103.3,46.2-103.3,103.3c0,57,46.2,103.3,103.3,103.3   c57,0,103.3-46.2,103.3-103.3C1153.1,1232.3,1106.9,1186.1,1049.8,1186.1z M1049.8,1372.2c-45.7,0-82.8-37.1-82.8-82.8   c0-45.7,37.1-82.8,82.8-82.8c45.7,0,82.8,37.1,82.8,82.8C1132.6,1335.1,1095.6,1372.2,1049.8,1372.2z\"\n        />\n        <path\n          style={{\n            opacity: 0.4,\n            fill: '#241F20',\n          }}\n          d=\"M1180.9,1293.5c1.1-0.9,1.5-2.4,1.3-3.7c-0.2-0.9-0.5-1.8-1.3-2.4l-15.4-12.7   c-1.5-1.3-1.9-3.5-0.8-5.2l10.7-16.9c1.3-2.1,0.4-4.9-1.9-5.8l-18.6-7.4c-1.5-0.6-2.4-2.1-2.4-3.7c0-0.3,0-0.6,0.1-1l4.9-19.3   c0.6-2.4-1.1-4.8-3.6-4.9l-19.9-1.3c-2-0.1-3.6-1.7-3.7-3.7l-1.3-19.9c-0.2-2.5-2.5-4.2-4.9-3.6l-19.3,4.9   c-1.9,0.5-3.9-0.5-4.7-2.4l-7.4-18.6c-0.9-2.3-3.7-3.2-5.8-1.9l-16.9,10.7c-1.7,1.1-3.9,0.7-5.2-0.8l-12.7-15.4   c-1.6-1.9-4.5-1.9-6.1,0l-12.7,15.4c-1.3,1.5-3.5,1.9-5.2,0.8l-16.9-10.7c-2.1-1.3-4.9-0.4-5.8,1.9l-7.4,18.6   c-0.7,1.9-2.7,2.9-4.7,2.4l-19.3-4.9c-2.4-0.6-4.8,1.1-4.9,3.6l-1.3,19.9c-0.1,2-1.7,3.6-3.7,3.7l-19.9,1.3   c-2.5,0.2-4.2,2.5-3.6,4.9l4.9,19.3c0.1,0.4,0.1,0.8,0.1,1.2c-0.1,1.5-1,2.9-2.5,3.5l-18.6,7.4c-2.3,0.9-3.2,3.7-1.9,5.8l10.7,16.9   c1.1,1.7,0.7,3.9-0.8,5.2l-15.4,12.7c-0.7,0.6-1.1,1.4-1.2,2.2c-0.3,1.4,0,2.9,1.2,3.9l15.4,12.7c1.5,1.3,1.9,3.5,0.8,5.2   l-10.7,16.9c-1.3,2.1-0.4,4.9,1.9,5.8l18.6,7.4c1.8,0.7,2.9,2.7,2.4,4.7l-0.1,0.4l-4.9,19c-0.6,2.4,1.1,4.8,3.6,4.9l19.9,1.3   c2,0.1,3.6,1.7,3.7,3.7l1.3,19.9c0.2,2.5,2.5,4.2,4.9,3.6l19.3-4.9c1.9-0.5,3.9,0.5,4.7,2.4l7.4,18.6c0.9,2.3,3.7,3.2,5.8,1.9   l16.9-10.7c1.7-1.1,3.9-0.7,5.2,0.8l12.7,15.4c1.6,1.9,4.5,1.9,6.1,0l12.7-15.4c1.3-1.5,3.5-1.9,5.2-0.8l16.9,10.7   c2.1,1.3,4.9,0.4,5.8-1.9l7.4-18.6c0.7-1.9,2.7-2.9,4.7-2.4l19.3,4.9c2.4,0.6,4.8-1.1,4.9-3.6l1.3-19.9c0.1-2,1.7-3.6,3.7-3.7   l19.9-1.3c2.5-0.2,4.2-2.5,3.6-4.9l-4.8-18.8l-0.1-0.5c-0.5-1.9,0.5-3.9,2.4-4.7l18.6-7.4c2.3-0.9,3.2-3.7,1.9-5.8l-10.7-16.9   c-1.1-1.7-0.7-3.9,0.8-5.2L1180.9,1293.5z M1049.8,1392.6c-57,0-103.3-46.2-103.3-103.3c0-57,46.2-103.3,103.3-103.3   c57,0,103.3,46.2,103.3,103.3C1153.1,1346.4,1106.9,1392.6,1049.8,1392.6z\"\n        />\n      </g>\n      <g id=\"Course_Name\">\n        <g>\n          <rect\n            x={471}\n            y={1108.1}\n            style={{\n              fill: '#231F20',\n            }}\n            width={1137.6}\n            height={2.1}\n          />\n        </g>\n      </g>\n      <g id=\"Learner_Name\">\n        <g>\n          <rect\n            x={471}\n            y={991.4}\n            style={{\n              fill: '#231F20',\n            }}\n            width={715.3}\n            height={2.1}\n          />\n        </g>\n      </g>\n      <g id=\"Date\">\n        <rect\n          x={1231.8}\n          y={991.4}\n          style={{\n            fill: '#231F20',\n          }}\n          width={376.8}\n          height={2.1}\n        />\n      </g>\n    </svg>\n  );\n};\n","/** @jsx jsx */\n\nimport { jsx } from '@emotion/core';\n\nexport const Certificate_2_SVG = props => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n      x=\"0px\"\n      y=\"0px\"\n      viewBox=\"0 0 2084 1471.6\"\n      xmlSpace=\"preserve\"\n    >\n      <g id=\"Change_colour\">\n        <path\n          style={{\n            opacity: 0.97,\n            fill: '#00CBC3',\n          }}\n          d=\"M78.4,76.6v1316.8h1927V76.6H78.4z\"\n        />\n      </g>\n      <g id=\"Foreground\">\n        <g>\n          <path\n            style={{\n              opacity: 0.97,\n              fill: '#FFFFFF',\n            }}\n            d=\"M407.9-0.9v549.4v159.9V1472h1676.6l0.9-1472.9H407.9z M1879.1,1261.7l-31.7,45.4    l-38.3-77.4c-3.1,0.2-6.2,0.4-9.3,0.4c-3.1,0-6.2-0.2-9.3-0.4l-38.3,77.4l-31.7-45.4l-55.4,2.4l3.4-6.8l35.9-72.5    c-17.3-21.2-27.7-48.3-27.7-77.9c0-68,55.2-123.2,123.2-123.2c68,0,123.2,55.2,123.2,123.2c0,29.5-10.4,56.6-27.7,77.9l35.9,72.5    l3.4,6.8L1879.1,1261.7z\"\n          />\n        </g>\n        <g>\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M482.1,566.3c6-10.6,14.3-18.8,24.7-24.7c10.5-5.9,22.2-8.9,35.2-8.9c15.2,0,28.5,3.9,39.9,11.7    c11.4,7.8,19.4,18.6,24,32.3h-31.4c-3.1-6.5-7.5-11.4-13.2-14.6c-5.7-3.2-12.2-4.9-19.6-4.9c-7.9,0-15,1.9-21.1,5.6    c-6.2,3.7-11,8.9-14.4,15.7c-3.4,6.8-5.2,14.7-5.2,23.8c0,9,1.7,16.9,5.2,23.7c3.4,6.8,8.2,12.1,14.4,15.8    c6.2,3.7,13.2,5.6,21.1,5.6c7.4,0,13.9-1.7,19.6-5c5.7-3.3,10-8.2,13.2-14.7h31.4c-4.5,13.9-12.5,24.7-23.9,32.4    c-11.4,7.7-24.7,11.6-40,11.6c-13,0-24.7-3-35.2-8.9c-10.5-5.9-18.7-14.1-24.7-24.7c-6-10.5-9.1-22.5-9.1-35.9    C473,588.9,476,576.9,482.1,566.3z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M728.8,624.7h-78.9c0.6,7.8,3.4,13.9,8.2,18.3c4.8,4.4,10.7,6.6,17.7,6.6    c10.1,0,17.3-4.4,21.6-13.1h29.4c-3.1,10.4-9.1,18.9-17.9,25.6c-8.8,6.7-19.7,10-32.5,10c-10.4,0-19.7-2.3-28-6.9    c-8.3-4.6-14.7-11.1-19.3-19.6c-4.6-8.4-6.9-18.2-6.9-29.2c0-11.2,2.3-21,6.8-29.4c4.5-8.4,10.9-14.9,19.1-19.5    c8.2-4.5,17.6-6.8,28.3-6.8c10.3,0,19.5,2.2,27.6,6.6c8.1,4.4,14.4,10.7,18.9,18.8c4.5,8.1,6.7,17.4,6.7,28    C729.6,618,729.4,621.5,728.8,624.7z M701.4,606.3c-0.1-7-2.7-12.6-7.6-16.9c-4.9-4.2-11-6.3-18.1-6.3c-6.8,0-12.4,2-17.1,6.1    c-4.6,4.1-7.4,9.8-8.5,17.1H701.4z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M790.5,565.8c5.7-3.2,12.1-4.9,19.4-4.9v28.6h-7.2c-8.6,0-15,2-19.4,6c-4.4,4-6.5,11-6.5,21v53.8    h-27.3v-108h27.3v16.8C780.3,573.5,784.9,569.1,790.5,565.8z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M860,584.9v52.2c0,3.6,0.9,6.3,2.6,7.9c1.8,1.6,4.7,2.4,8.9,2.4h12.7v23H867    c-23,0-34.5-11.2-34.5-33.5v-52h-12.9v-22.4h12.9v-26.7H860v26.7h24.2v22.4H860z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M905.7,545c-3.2-3.1-4.8-6.9-4.8-11.4c0-4.5,1.6-8.3,4.8-11.4c3.2-3.1,7.2-4.6,12-4.6    c4.8,0,8.8,1.5,12,4.6c3.2,3.1,4.8,6.9,4.8,11.4c0,4.5-1.6,8.3-4.8,11.4c-3.2,3.1-7.2,4.6-12,4.6    C912.9,549.6,908.9,548.1,905.7,545z M931.1,562.5v108h-27.3v-108H931.1z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1007.5,584.9h-18.9v85.5h-27.7v-85.5h-12.3v-22.4h12.3V557c0-13.3,3.8-23,11.3-29.2    c7.5-6.2,18.9-9.2,34.1-8.8v23c-6.6-0.1-11.2,1-13.8,3.3c-2.6,2.3-3.9,6.6-3.9,12.7v4.5h18.9V584.9z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1027.1,545c-3.2-3.1-4.8-6.9-4.8-11.4c0-4.5,1.6-8.3,4.8-11.4c3.2-3.1,7.2-4.6,12-4.6    c4.8,0,8.8,1.5,12,4.6c3.2,3.1,4.8,6.9,4.8,11.4c0,4.5-1.6,8.3-4.8,11.4c-3.2,3.1-7.2,4.6-12,4.6    C1034.3,549.6,1030.3,548.1,1027.1,545z M1052.5,562.5v108h-27.3v-108H1052.5z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1079.2,587.1c4.5-8.4,10.8-14.9,18.9-19.5c8.1-4.6,17.3-6.9,27.7-6.9c13.4,0,24.5,3.3,33.2,10    c8.8,6.7,14.6,16.1,17.6,28.2h-29.4c-1.6-4.7-4.2-8.3-7.9-11c-3.7-2.7-8.3-4-13.7-4c-7.8,0-14,2.8-18.5,8.5    c-4.5,5.7-6.8,13.7-6.8,24.1c0,10.3,2.3,18.2,6.8,23.9c4.5,5.7,10.7,8.5,18.5,8.5c11,0,18.3-4.9,21.6-14.8h29.4    c-3,11.7-8.9,21-17.7,27.9c-8.8,6.9-19.9,10.3-33.1,10.3c-10.4,0-19.6-2.3-27.7-6.9c-8.1-4.6-14.4-11.1-18.9-19.5    c-4.5-8.4-6.8-18.2-6.8-29.3C1072.4,605.3,1074.7,595.5,1079.2,587.1z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1196.2,587c4.3-8.4,10.3-14.9,17.7-19.5c7.5-4.5,15.8-6.8,25-6.8c8.1,0,15.1,1.6,21.1,4.9    c6,3.2,10.9,7.3,14.5,12.3v-15.4h27.5v108h-27.5v-15.8c-3.5,5.1-8.3,9.3-14.5,12.6c-6.2,3.3-13.3,5-21.3,5c-9.1,0-17.4-2.3-24.8-7    c-7.5-4.7-13.4-11.3-17.7-19.8c-4.4-8.5-6.5-18.3-6.5-29.3C1189.7,605.2,1191.9,595.5,1196.2,587z M1270.8,599.4    c-2.6-4.7-6.1-8.4-10.5-10.9c-4.4-2.5-9.2-3.8-14.2-3.8c-5.1,0-9.7,1.2-14,3.7c-4.3,2.5-7.8,6.1-10.4,10.8c-2.7,4.7-4,10.4-4,16.9    c0,6.5,1.3,12.2,4,17.1c2.7,4.9,6.2,8.6,10.5,11.2c4.3,2.6,9,3.9,13.9,3.9c5.1,0,9.8-1.3,14.2-3.8c4.4-2.5,7.9-6.2,10.5-10.9    c2.6-4.7,3.9-10.4,3.9-17.1C1274.7,609.8,1273.4,604.2,1270.8,599.4z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1360.6,584.9v52.2c0,3.6,0.9,6.3,2.6,7.9c1.8,1.6,4.7,2.4,8.9,2.4h12.7v23h-17.1    c-23,0-34.5-11.2-34.5-33.5v-52h-12.9v-22.4h12.9v-26.7h27.5v26.7h24.2v22.4H1360.6z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1504,624.7h-78.9c0.6,7.8,3.4,13.9,8.2,18.3c4.8,4.4,10.7,6.6,17.7,6.6c10.1,0,17.3-4.4,21.6-13.1    h29.4c-3.1,10.4-9.1,18.9-17.9,25.6c-8.8,6.7-19.7,10-32.5,10c-10.4,0-19.7-2.3-28-6.9c-8.3-4.6-14.7-11.1-19.3-19.6    c-4.6-8.4-6.9-18.2-6.9-29.2c0-11.2,2.3-21,6.8-29.4c4.5-8.4,10.9-14.9,19.1-19.5c8.2-4.5,17.6-6.8,28.3-6.8    c10.3,0,19.5,2.2,27.6,6.6c8.1,4.4,14.4,10.7,18.9,18.8c4.5,8.1,6.7,17.4,6.7,28C1504.8,618,1504.5,621.5,1504,624.7z     M1476.5,606.3c-0.1-7-2.7-12.6-7.6-16.9c-4.9-4.2-11-6.3-18.1-6.3c-6.8,0-12.4,2-17.1,6.1c-4.6,4.1-7.4,9.8-8.5,17.1H1476.5z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M507.7,874.7c-10.7-6-19.1-14.3-25.3-24.8c-6.2-10.6-9.4-22.6-9.4-36c0-13.3,3.1-25.2,9.4-35.8    c6.2-10.6,14.7-18.9,25.3-24.8c10.7-6,22.3-9,35.1-9c12.9,0,24.6,3,35.2,9c10.6,6,19,14.3,25.1,24.8c6.2,10.6,9.3,22.5,9.3,35.8    c0,13.4-3.1,25.4-9.3,36c-6.2,10.6-14.6,18.9-25.2,24.8c-10.7,6-22.3,9-35.1,9S518.3,880.6,507.7,874.7z M564.4,853.7    c6.2-3.7,11.1-9,14.6-15.9c3.5-6.9,5.3-14.9,5.3-24c0-9.1-1.8-17.1-5.3-23.9c-3.5-6.8-8.4-12-14.6-15.7    c-6.2-3.6-13.4-5.5-21.6-5.5c-8.2,0-15.4,1.8-21.7,5.5c-6.3,3.6-11.2,8.9-14.7,15.7c-3.5,6.8-5.3,14.8-5.3,23.9    c0,9.1,1.8,17.1,5.3,24c3.5,6.9,8.4,12.2,14.7,15.9c6.3,3.7,13.5,5.6,21.7,5.6C550.9,859.3,558.2,857.4,564.4,853.7z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M682.1,796.7h-18.9v85.5h-27.7v-85.5h-12.3v-22.4h12.3v-5.5c0-13.3,3.8-23,11.3-29.2    c7.5-6.2,18.9-9.2,34.1-8.8v23c-6.6-0.1-11.2,1-13.8,3.3c-2.6,2.3-3.9,6.6-3.9,12.7v4.5h18.9V796.7z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M748.6,778.1c6-10.6,14.3-18.8,24.7-24.7c10.5-5.9,22.2-8.9,35.2-8.9c15.2,0,28.5,3.9,39.9,11.7    c11.4,7.8,19.4,18.6,24,32.3h-31.4c-3.1-6.5-7.5-11.4-13.2-14.6c-5.7-3.2-12.2-4.9-19.6-4.9c-7.9,0-15,1.9-21.1,5.6    c-6.2,3.7-11,8.9-14.4,15.7c-3.4,6.8-5.2,14.7-5.2,23.8c0,9,1.7,16.9,5.2,23.7c3.4,6.8,8.2,12.1,14.4,15.8    c6.2,3.7,13.2,5.6,21.1,5.6c7.4,0,13.9-1.7,19.6-5c5.7-3.3,10-8.2,13.2-14.7h31.4c-4.5,13.9-12.5,24.7-23.9,32.4    c-11.4,7.7-24.7,11.6-40,11.6c-13,0-24.7-3-35.2-8.9c-10.5-5.9-18.7-14.1-24.7-24.7c-6-10.5-9.1-22.5-9.1-35.9    C739.6,800.7,742.6,788.7,748.6,778.1z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M915.7,877.1c-8.3-4.6-14.8-11.1-19.6-19.6c-4.7-8.4-7.1-18.2-7.1-29.2c0-11,2.4-20.8,7.3-29.2    c4.9-8.4,11.5-15,20-19.6c8.4-4.6,17.9-6.9,28.3-6.9c10.4,0,19.8,2.3,28.3,6.9c8.4,4.6,15.1,11.1,20,19.6    c4.9,8.4,7.3,18.2,7.3,29.2c0,11-2.5,20.8-7.5,29.2c-5,8.4-11.8,15-20.3,19.6c-8.5,4.6-18,6.9-28.5,6.9    C933.4,884,924,881.7,915.7,877.1z M957.7,856.6c4.4-2.4,7.8-6,10.4-10.8c2.6-4.8,3.9-10.7,3.9-17.5c0-10.3-2.7-18.2-8.1-23.7    c-5.4-5.5-12-8.3-19.8-8.3c-7.8,0-14.3,2.8-19.6,8.3c-5.3,5.5-7.9,13.4-7.9,23.7c0,10.3,2.6,18.2,7.7,23.7    c5.1,5.5,11.6,8.3,19.4,8.3C948.7,860.2,953.4,859,957.7,856.6z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1186.3,784.9c8.1,8.1,12.2,19.5,12.2,34v63.3h-27.3v-59.6c0-8.4-2.1-14.9-6.4-19.4    c-4.3-4.5-10.1-6.7-17.5-6.7s-13.3,2.2-17.6,6.7c-4.4,4.5-6.5,10.9-6.5,19.4v59.6h-27.3v-59.6c0-8.4-2.1-14.9-6.4-19.4    c-4.3-4.5-10.1-6.7-17.5-6.7c-7.5,0-13.5,2.2-17.8,6.7c-4.4,4.5-6.5,10.9-6.5,19.4v59.6h-27.3v-108h27.3v13.1    c3.5-4.5,8-8.1,13.5-10.7c5.5-2.6,11.6-3.9,18.2-3.9c8.4,0,16,1.8,22.6,5.4c6.6,3.6,11.8,8.7,15.4,15.3c3.5-6.2,8.6-11.2,15.3-15    c6.7-3.8,13.9-5.7,21.7-5.7C1167.5,772.7,1178.2,776.8,1186.3,784.9z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1266.2,777.5c6.2-3.3,13.2-5,21.1-5c9.2,0,17.6,2.3,25,6.8c7.5,4.5,13.4,11,17.7,19.4    c4.3,8.4,6.5,18.1,6.5,29.1c0,11-2.2,20.8-6.5,29.3c-4.4,8.5-10.3,15.1-17.7,19.8c-7.5,4.7-15.8,7-25,7c-7.9,0-14.9-1.6-20.9-4.9    c-6-3.2-10.9-7.3-14.7-12.3v66.8h-27.3V774.3h27.3v15.6C1255.2,785,1260,780.8,1266.2,777.5z M1304.8,811    c-2.7-4.7-6.2-8.3-10.5-10.8c-4.4-2.5-9.1-3.7-14.1-3.7c-4.9,0-9.6,1.3-13.9,3.8c-4.4,2.5-7.9,6.2-10.5,11c-2.7,4.8-4,10.5-4,17    c0,6.5,1.3,12.2,4,17c2.7,4.8,6.2,8.5,10.5,11c4.3,2.5,9,3.8,13.9,3.8c5.1,0,9.8-1.3,14.1-3.9c4.3-2.6,7.9-6.3,10.5-11.1    c2.7-4.8,4-10.5,4-17.1C1308.8,821.4,1307.4,815.8,1304.8,811z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1383.8,738.1v144.2h-27.3V738.1H1383.8z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1510.2,836.5h-78.9c0.6,7.8,3.4,13.9,8.2,18.3c4.8,4.4,10.7,6.6,17.7,6.6    c10.1,0,17.3-4.4,21.6-13.1h29.4c-3.1,10.4-9.1,18.9-17.9,25.6c-8.8,6.7-19.7,10-32.5,10c-10.4,0-19.7-2.3-28-6.9    c-8.3-4.6-14.7-11.1-19.3-19.6c-4.6-8.4-6.9-18.2-6.9-29.2c0-11.2,2.3-21,6.8-29.4c4.5-8.4,10.9-14.9,19.1-19.5    c8.2-4.5,17.6-6.8,28.3-6.8c10.3,0,19.5,2.2,27.6,6.6c8.1,4.4,14.4,10.7,18.9,18.8c4.5,8.1,6.7,17.4,6.7,28    C1511,829.8,1510.8,833.3,1510.2,836.5z M1482.8,818.1c-0.1-7-2.7-12.6-7.6-16.9c-4.9-4.2-11-6.3-18.1-6.3c-6.8,0-12.4,2-17.1,6.1    c-4.6,4.1-7.4,9.8-8.5,17.1H1482.8z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1562.7,796.7v52.2c0,3.6,0.9,6.3,2.6,7.9c1.8,1.6,4.7,2.4,8.9,2.4h12.7v23h-17.1    c-23,0-34.5-11.2-34.5-33.5v-52h-12.9v-22.4h12.9v-26.7h27.5v26.7h24.2v22.4H1562.7z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1608.4,756.9c-3.2-3.1-4.8-6.9-4.8-11.4c0-4.5,1.6-8.3,4.8-11.4c3.2-3.1,7.2-4.6,12-4.6    c4.8,0,8.8,1.5,12,4.6c3.2,3.1,4.8,6.9,4.8,11.4c0,4.5-1.6,8.3-4.8,11.4c-3.2,3.1-7.2,4.6-12,4.6    C1615.5,761.4,1611.5,759.9,1608.4,756.9z M1633.8,774.3v108h-27.3v-108H1633.8z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1680.6,877.1c-8.3-4.6-14.8-11.1-19.6-19.6c-4.7-8.4-7.1-18.2-7.1-29.2c0-11,2.4-20.8,7.3-29.2    c4.9-8.4,11.5-15,20-19.6c8.4-4.6,17.9-6.9,28.3-6.9c10.4,0,19.8,2.3,28.3,6.9c8.4,4.6,15.1,11.1,20,19.6    c4.9,8.4,7.3,18.2,7.3,29.2c0,11-2.5,20.8-7.5,29.2c-5,8.4-11.8,15-20.3,19.6c-8.5,4.6-18,6.9-28.5,6.9    C1698.2,884,1688.9,881.7,1680.6,877.1z M1722.5,856.6c4.3-2.4,7.8-6,10.4-10.8c2.6-4.8,3.9-10.7,3.9-17.5    c0-10.3-2.7-18.2-8.1-23.7c-5.4-5.5-12-8.3-19.8-8.3c-7.8,0-14.3,2.8-19.6,8.3c-5.3,5.5-7.9,13.4-7.9,23.7    c0,10.3,2.6,18.2,7.7,23.7c5.1,5.5,11.6,8.3,19.4,8.3C1713.5,860.2,1718.2,859,1722.5,856.6z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1876,784.9c7.9,8.1,11.9,19.5,11.9,34v63.3h-27.3v-59.6c0-8.6-2.1-15.2-6.4-19.8    c-4.3-4.6-10.1-6.9-17.5-6.9c-7.5,0-13.5,2.3-17.8,6.9c-4.4,4.6-6.5,11.2-6.5,19.8v59.6H1785v-108h27.3v13.4    c3.6-4.7,8.3-8.3,13.9-11c5.7-2.7,11.9-4,18.6-4C1857.7,772.7,1868.1,776.8,1876,784.9z\"\n          />\n        </g>\n        <g>\n          <rect\n            x={494.2}\n            y={384.3}\n            style={{\n              fill: '#241F20',\n            }}\n            width={1427.8}\n            height={2.1}\n          />\n        </g>\n        <polygon\n          style={{\n            opacity: 0.35,\n            fill: '#FFFFFF',\n          }}\n          points=\"1875.7,1254.9 1844,1300.3 1809.1,1229.7 1847.4,1307.2 1879.1,1261.7    1934.5,1264.1 1931.1,1257.3  \"\n        />\n        <path\n          style={{\n            opacity: 0.4,\n            fill: '#241F20',\n          }}\n          d=\"M1875.7,1254.9l55.4,2.4l-35.9-72.5c-20.7,25.4-51.4,42.3-86.1,44.9l34.9,70.6   L1875.7,1254.9z\"\n        />\n        <polygon\n          style={{\n            opacity: 0.35,\n            fill: '#FFFFFF',\n          }}\n          points=\"1723.8,1254.9 1668.5,1257.3 1665.1,1264.1 1720.4,1261.7 1752.2,1307.2    1790.4,1229.7 1755.5,1300.3  \"\n        />\n        <path\n          style={{\n            opacity: 0.4,\n            fill: '#241F20',\n          }}\n          d=\"M1704.3,1184.8l-35.9,72.5l55.4-2.4l31.7,45.4l34.9-70.6   C1755.8,1227.1,1725.1,1210.2,1704.3,1184.8z\"\n        />\n        <path\n          style={{\n            opacity: 0.2,\n            fill: '#FFFFFF',\n          }}\n          d=\"M1895.2,1184.8c17.3-21.2,27.7-48.3,27.7-77.9c0-68-55.2-123.2-123.2-123.2   c-68,0-123.2,55.2-123.2,123.2c0,29.5,10.4,56.6,27.7,77.9c20.7,25.4,51.4,42.3,86.1,44.9c3.1,0.2,6.2,0.4,9.3,0.4   c3.1,0,6.2-0.2,9.3-0.4C1843.8,1227.1,1874.5,1210.2,1895.2,1184.8z M1799.8,1197.2c-49.8,0-90.3-40.5-90.3-90.3   c0-49.8,40.5-90.3,90.3-90.3c49.8,0,90.3,40.5,90.3,90.3C1890.1,1156.7,1849.6,1197.2,1799.8,1197.2z\"\n        />\n        <path\n          style={{\n            opacity: 0.3,\n            fill: '#241F20',\n          }}\n          d=\"M1799.8,1025.2c-45,0-81.7,36.6-81.7,81.7c0,45,36.6,81.7,81.7,81.7   c45,0,81.7-36.6,81.7-81.7C1881.5,1061.9,1844.8,1025.2,1799.8,1025.2z M1785.2,1152c-0.2-0.5-0.4-0.9-0.6-1.3   c-1.1-2.3-2.2-4.6-3.4-6.8c-1.3-2.3-2.7-4.6-4.1-6.8c-1.2-1.9-2.4-3.7-3.7-5.4c-0.9-1.3-1.9-2.5-2.9-3.7c-0.9-1.2-1.9-2.3-2.9-3.4   c-1.9-2.1-3.8-4.1-5.8-6.1c-1.9-1.8-3.9-3.4-5.8-5.1c-1.8-1.5-3.7-2.9-5.6-4.1c-0.7-0.4-1.3-0.9-1.9-1.3c-0.3-0.2-0.2-0.3,0-0.4   c1-0.5,2-0.9,3.1-1.1c0.2,0,0.5-0.1,0.7-0.1c0.7-0.1,1.5-0.2,2.2-0.3c0.5,0,0.9-0.1,1.4-0.1c0.7,0,1.4,0,2,0c0.4,0,0.8,0.1,1.1,0.1   c0.1,0,0.1,0,0.2,0c0.3,0.1,0.6,0.1,0.9,0.2c1,0,1.9,0.4,2.9,0.7c0.7,0.3,1.5,0.4,2.1,0.8c1.4,0.7,2.8,1.3,4.2,2.1   c2,1.3,3.9,2.6,5.8,4.1c1.2,0.9,2.3,2,3.4,3c0.9,0.8,1.7,1.5,2.6,2.4c1.2,1.1,2.3,2.3,3.4,3.5c0.2,0.3,0.4,0.3,0.6,0   c1.1-1.8,2.2-3.5,3.4-5.3c1.4-2.1,2.8-4.2,4.3-6.4c1-1.5,2.1-3,3.1-4.5c1.3-1.8,2.6-3.6,3.9-5.4c1.2-1.6,2.4-3.2,3.6-4.8   c0.9-1.2,1.9-2.3,2.8-3.5c1.2-1.4,2.3-2.8,3.5-4.2c1-1.1,2-2.3,3-3.4c1.9-2,3.8-4,5.7-5.9c1.6-1.6,3.3-3,5-4.5   c1.6-1.3,3.2-2.6,4.9-3.9c1.6-1.1,3.2-2.2,4.8-3.2c0.9-0.6,2-1,3-1.5c1.1-0.5,2.2-0.8,3.2-1.2c1.9-0.8,3.9-0.7,6-0.7   c0.5,0,0.9,0.2,1.4,0.3C1821.8,1090.7,1800.9,1119.5,1785.2,1152z\"\n        />\n        <path\n          style={{\n            opacity: 0.5,\n            fill: '#FFFFFF',\n          }}\n          d=\"M1839.4,1065.2c-1.1,0.4-2.2,0.8-3.2,1.2c-1,0.4-2,0.9-3,1.5c-1.7,1-3.3,2.1-4.8,3.2   c-1.7,1.2-3.3,2.5-4.9,3.9c-1.7,1.5-3.4,2.9-5,4.5c-2,1.9-3.8,3.9-5.7,5.9c-1,1.1-2.1,2.2-3,3.4c-1.2,1.4-2.3,2.8-3.5,4.2   c-1,1.2-1.9,2.3-2.8,3.5c-1.2,1.6-2.4,3.2-3.6,4.8c-1.3,1.8-2.6,3.6-3.9,5.4c-1.1,1.5-2.1,3-3.1,4.5c-1.4,2.1-2.9,4.2-4.3,6.4   c-1.1,1.8-2.3,3.5-3.4,5.3c-0.2,0.4-0.3,0.3-0.6,0c-1.1-1.2-2.3-2.4-3.4-3.5c-0.8-0.8-1.7-1.6-2.6-2.4c-1.1-1-2.2-2.1-3.4-3   c-1.9-1.4-3.8-2.8-5.8-4.1c-1.3-0.8-2.7-1.5-4.2-2.1c-0.7-0.3-1.4-0.5-2.1-0.8c-0.9-0.3-1.9-0.7-2.9-0.7c-0.3-0.1-0.6-0.1-0.9-0.2   c-0.1,0-0.1,0-0.2,0c-0.4,0-0.8-0.1-1.1-0.1c-0.7,0-1.4,0-2,0c-0.5,0-0.9,0.1-1.4,0.1c-0.7,0.1-1.5,0.2-2.2,0.3   c-0.2,0-0.5,0.1-0.7,0.1c-1.1,0.2-2.1,0.5-3.1,1.1c-0.3,0.1-0.4,0.2,0,0.4c0.7,0.4,1.3,0.9,1.9,1.3c2,1.3,3.9,2.6,5.6,4.1   c2,1.7,4,3.3,5.8,5.1c2,1.9,3.9,4,5.8,6.1c1,1.1,1.9,2.3,2.9,3.4c1,1.2,2,2.4,2.9,3.7c1.3,1.8,2.6,3.6,3.7,5.4   c1.4,2.2,2.8,4.5,4.1,6.8c1.2,2.2,2.3,4.5,3.4,6.8c0.2,0.4,0.4,0.8,0.6,1.3c15.8-32.5,36.6-61.3,61.6-87.2   c-0.4-0.1-0.9-0.2-1.4-0.3C1843.4,1064.5,1841.4,1064.4,1839.4,1065.2z\"\n        />\n        <path\n          style={{\n            opacity: 0.4,\n            fill: '#FFFFFF',\n          }}\n          d=\"M1799.8,1016.6c-49.8,0-90.3,40.5-90.3,90.3c0,49.8,40.5,90.3,90.3,90.3   c49.8,0,90.3-40.5,90.3-90.3C1890.1,1057.1,1849.6,1016.6,1799.8,1016.6z M1799.8,1188.6c-45,0-81.7-36.6-81.7-81.7   c0-45,36.6-81.7,81.7-81.7c45,0,81.7,36.6,81.7,81.7C1881.5,1152,1844.8,1188.6,1799.8,1188.6z\"\n        />\n        <path\n          style={{\n            opacity: 0.2,\n            fill: '#FFFFFF',\n          }}\n          d=\"M78.4,76.6v349.4c3.3-0.5,6.5-0.9,9.9-1.2c13-1.2,26.5-1.3,40.3,0.2   c4.8,0.5,9.5,1.3,14.1,2.2c4.6,0.9,9.1,1.9,13.4,3.1c2.2,0.6,4.4,1.2,6.5,1.9c4.3,1.3,8.5,2.8,12.6,4.4c7.7,3,15.2,6.4,22.4,10.1   c2.4,1.2,4.8,2.5,7.2,3.8c3.8,2.1,7.5,4.2,11.2,6.5c5.5,3.3,10.9,6.8,16.3,10.4c3.6,2.4,7.1,4.8,10.6,7.2c1.7,1.2,3.5,2.4,5.2,3.7   c5.2,3.7,10.4,7.4,15.6,11.1c3.4,2.5,6.9,4.9,10.3,7.4c6.9,4.9,13.8,9.7,20.8,14.2c3.5,2.3,7,4.5,10.6,6.7c1.8,1.1,3.6,2.1,5.4,3.2   c25.6,14.8,58.3,28.8,97.3,27.7V76.6H78.4z\"\n        />\n        <path\n          style={{\n            opacity: 0.02,\n            fill: '#241F20',\n          }}\n          d=\"M310.6,520.8c-1.8-1-3.6-2.1-5.4-3.2c-3.6-2.2-7.1-4.4-10.6-6.7   c-7-4.6-13.9-9.4-20.8-14.2c-3.4-2.4-6.9-4.9-10.3-7.4c-5.2-3.7-10.3-7.4-15.6-11.1c-1.7-1.2-3.5-2.5-5.2-3.7   c-3.5-2.4-7-4.9-10.6-7.2c-5.3-3.6-10.7-7-16.3-10.4c-3.7-2.2-7.4-4.4-11.2-6.5c-2.4-1.3-4.7-2.6-7.2-3.8   c-7.2-3.7-14.7-7.1-22.4-10.1c-4.1-1.6-8.3-3-12.6-4.4c-2.1-0.7-4.3-1.3-6.5-1.9c-4.4-1.2-8.9-2.2-13.4-3.1   c-4.6-0.9-9.3-1.6-14.1-2.2c-13.8-1.6-27.3-1.5-40.3-0.2c-3.3,0.3-6.6,0.7-9.9,1.2v135c5.7,1,11.7,2.3,17.9,3.9   c4.9,1.3,9.9,2.7,15,4.4c7.7,2.5,15.7,5.5,23.9,9.1c5.5,2.4,11.1,5,16.8,7.9c8.6,4.3,17.4,9.3,26.5,14.9c9,5.6,18.3,11.9,27.8,19   c2,1.5,4.1,3.1,6.2,4.7c2.1,1.6,4.1,3.2,6.2,4.9c7.9,6.4,15.6,12.3,23.1,17.7c2.5,1.8,5,3.6,7.4,5.3c7.4,5.2,14.5,9.9,21.5,14.3   c4.7,2.9,9.2,5.6,13.7,8.2c9,5.1,17.7,9.6,26.1,13.4c7.4,3.4,14.5,6.2,21.4,8.7c6.9,2.4,13.7,4.5,20.2,6.1c1.9,0.5,3.7,0.9,5.6,1.3   c5.5,1.2,10.9,2.1,16.2,2.8c1.8,0.2,3.5,0.4,5.2,0.6c5.2,0.5,10.3,0.8,15.2,0.8c4.6,0,9.2-0.1,13.6-0.5V548.5   C368.9,549.6,336.2,535.6,310.6,520.8z\"\n        />\n        <path\n          style={{\n            opacity: 0.2,\n            fill: '#241F20',\n          }}\n          d=\"M394.3,708.9c-5,0-10-0.3-15.2-0.8c-1.7-0.2-3.5-0.4-5.2-0.6   c-5.3-0.7-10.7-1.6-16.2-2.8c-1.8-0.4-3.7-0.8-5.6-1.3c-6.5-1.6-13.3-3.6-20.2-6.1c-6.9-2.4-14.1-5.3-21.4-8.7   c-8.4-3.8-17.1-8.3-26.1-13.4c-4.5-2.6-9.1-5.3-13.7-8.2c-7-4.4-14.2-9.1-21.5-14.3c-2.5-1.7-4.9-3.5-7.4-5.3   c-7.5-5.5-15.2-11.4-23.1-17.7c-2.1-1.7-4.2-3.3-6.2-4.9c-2.1-1.6-4.1-3.2-6.2-4.7c-9.4-7.1-18.7-13.4-27.8-19   c-9-5.6-17.9-10.6-26.5-14.9c-5.7-2.9-11.3-5.5-16.8-7.9c-8.3-3.6-16.2-6.5-23.9-9.1c-5.1-1.7-10.1-3.1-15-4.4   c-6.2-1.6-12.2-2.9-17.9-3.9v832.4h329.5V708.4C403.4,708.8,398.9,708.9,394.3,708.9z\"\n        />\n      </g>\n      <g id=\"Course_Name\">\n        <g>\n          <rect\n            x={472.9}\n            y={1198.7}\n            style={{\n              fill: '#231F20',\n            }}\n            width={1134.5}\n            height={2.1}\n          />\n        </g>\n      </g>\n      <g id=\"Learner_Name\">\n        <g>\n          <rect\n            x={472.9}\n            y={1082.3}\n            style={{\n              fill: '#231F20',\n            }}\n            width={713.4}\n            height={2.1}\n          />\n        </g>\n      </g>\n      <g id=\"Date\">\n        <rect\n          x={1231.6}\n          y={1082.3}\n          style={{\n            fill: '#231F20',\n          }}\n          width={375.8}\n          height={2.1}\n        />\n      </g>\n    </svg>\n  );\n};\n","/** @jsx jsx */\n\nimport { jsx } from '@emotion/core';\n\nexport const Certificate_3_SVG = props => {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n      x=\"0px\"\n      y=\"0px\"\n      viewBox=\"0 0 2084 1471.6\"\n      xmlSpace=\"preserve\"\n    >\n      <g id=\"Change_colour\">\n        <polygon\n          style={{\n            fill: '#00CBC3',\n          }}\n          points=\"77.1,60.3 60.5,60.3 60.5,76.9 60.5,338.9 60.5,638.9 60.5,912.8 60.5,1092 60.5,1130.7    60.5,1394.2 60.5,1410.9 77.1,1410.9 890.9,1410.9 926.7,1410.9 947.7,1410.9 1137,1410.9 1158.1,1410.9 1193.8,1410.9    2006.5,1410.9 2023.2,1410.9 2023.2,1394.2 2023.2,1130.7 2023.2,1094.6 2023.2,915.5 2023.2,643 2023.2,344.6 2023.2,60.3  \"\n        />\n      </g>\n      <g id=\"Foreground\">\n        <path\n          style={{\n            opacity: 0.9,\n            fill: '#FFFFFF',\n          }}\n          d=\"M77.1,338.9C77.1,338.9,77.1,338.9,77.1,338.9c10.3,53.9,90.8,436.4,338.3,729.7   c7.7-0.4,15.5-0.8,23.3-1.2c6.6-0.3,13.2-0.6,19.9-1c0.5,0,1,0,1.4-0.1c7.7-0.4,15.4-0.7,23.1-1.1c30.7-1.4,61.9-2.6,93.3-3.8   c6.5-0.2,13.1-0.5,19.7-0.7c98-3.4,199.3-5.7,303.3-6.7c1.1,0,9.1-0.1,17.1-0.1c0.2-1.7,0.1-3.4-0.3-5.1c-0.1-0.3-0.1-0.5-0.2-0.8   l-1.2-4.3c-2.4-8.7,2.8-17.7,11.5-19.9l4.3-1.1c6.7-1.7,11.5-7.5,12-14.4l0.3-4.4c0.7-9,8.6-15.7,17.6-14.8l4.4,0.4   c6.8,0.7,13.4-3.1,16.2-9.4l1.8-4.1c3.7-8.2,13.4-11.8,21.6-7.9l4,1.9c6.2,3,13.7,1.7,18.5-3.2l3.1-3.2c6.3-6.5,16.7-6.5,23,0   l3.1,3.2c4.8,4.9,12.2,6.2,18.5,3.2l4-1.9c8.2-3.9,17.9-0.4,21.6,7.9l1.8,4.1c2.9,6.3,9.4,10.1,16.2,9.4l4.4-0.4   c9-0.9,16.9,5.8,17.6,14.8l0.4,4.4c0.5,6.9,5.4,12.7,12,14.4l4.3,1.1c8.8,2.2,13.9,11.2,11.5,19.9l-1.2,4.3   c-0.2,0.6-0.2,1.2-0.3,1.7c-0.2,1.5-0.3,3-0.1,4.4c4,0,8.6,0.1,13.2,0.2c171,2.6,334.8,7.4,487.6,15.7c0,0,0,0,0,0   c241.2-284.7,324.3-654.4,338.5-725.4V76.9H77.1V338.9z\"\n        />\n        <g>\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M515.5,415.2c6.2-10.9,14.7-19.3,25.4-25.4c10.7-6.1,22.8-9.1,36.1-9.1c15.6,0,29.3,4,41,12    c11.7,8,19.9,19.1,24.6,33.2h-32.2c-3.2-6.7-7.7-11.7-13.5-15c-5.8-3.3-12.5-5-20.1-5c-8.1,0-15.4,1.9-21.7,5.7    c-6.3,3.8-11.3,9.2-14.8,16.1c-3.5,6.9-5.3,15.1-5.3,24.4c0,9.2,1.8,17.3,5.3,24.3c3.5,7,8.5,12.4,14.8,16.2    c6.3,3.8,13.6,5.7,21.7,5.7c7.6,0,14.3-1.7,20.1-5.1c5.8-3.4,10.3-8.4,13.5-15.1h32.2c-4.7,14.3-12.8,25.4-24.5,33.3    c-11.7,7.9-25.4,11.9-41.1,11.9c-13.3,0-25.4-3-36.1-9.1c-10.7-6.1-19.2-14.5-25.4-25.3c-6.2-10.8-9.3-23.1-9.3-36.8    C506.2,438.4,509.3,426.1,515.5,415.2z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M770.2,475.2h-81.1c0.7,8,3.5,14.3,8.4,18.8c4.9,4.5,11,6.8,18.2,6.8c10.4,0,17.8-4.5,22.2-13.4    h30.2c-3.2,10.7-9.3,19.4-18.4,26.3c-9.1,6.9-20.2,10.3-33.4,10.3c-10.7,0-20.2-2.4-28.7-7.1c-8.5-4.7-15.1-11.4-19.8-20.1    c-4.7-8.7-7.1-18.7-7.1-30c0-11.5,2.3-21.5,7-30.2c4.7-8.7,11.2-15.3,19.6-20c8.4-4.7,18.1-7,29-7c10.5,0,20,2.3,28.3,6.8    c8.3,4.5,14.8,11,19.4,19.3c4.6,8.3,6.9,17.9,6.9,28.7C771,468.4,770.7,472,770.2,475.2z M741.9,456.3c-0.1-7.2-2.7-13-7.8-17.3    c-5.1-4.3-11.3-6.5-18.6-6.5c-6.9,0-12.8,2.1-17.5,6.3c-4.7,4.2-7.6,10-8.7,17.5H741.9z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M834.7,414.7c5.8-3.3,12.4-5,19.9-5v29.4h-7.4c-8.8,0-15.4,2.1-19.9,6.2    c-4.5,4.1-6.7,11.3-6.7,21.6v55.2h-28V411.3h28v17.2C824.2,422.7,828.9,418.1,834.7,414.7z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M907.2,434.3V488c0,3.7,0.9,6.4,2.7,8.1c1.8,1.7,4.8,2.5,9.1,2.5h13v23.6h-17.6    c-23.6,0-35.4-11.5-35.4-34.4v-53.4h-13.2v-23H879v-27.4h28.2v27.4h24.8v23H907.2z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M955.4,393.4c-3.3-3.1-4.9-7-4.9-11.7s1.6-8.6,4.9-11.7c3.3-3.1,7.4-4.7,12.3-4.7    c4.9,0,9,1.6,12.3,4.7c3.3,3.1,4.9,7,4.9,11.7s-1.6,8.6-4.9,11.7c-3.3,3.1-7.4,4.7-12.3,4.7C962.7,398.1,958.6,396.5,955.4,393.4z     M981.5,411.3v110.9h-28V411.3H981.5z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1061.1,434.3h-19.4v87.9h-28.4v-87.9h-12.6v-23h12.6v-5.6c0-13.6,3.9-23.6,11.6-30    c7.7-6.4,19.4-9.4,35-9v23.6c-6.8-0.1-11.5,1-14.2,3.4c-2.7,2.4-4,6.7-4,13v4.6h19.4V434.3z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1082.5,393.4c-3.3-3.1-4.9-7-4.9-11.7s1.6-8.6,4.9-11.7c3.3-3.1,7.4-4.7,12.3-4.7    c4.9,0,9,1.6,12.3,4.7c3.3,3.1,4.9,7,4.9,11.7s-1.6,8.6-4.9,11.7c-3.3,3.1-7.4,4.7-12.3,4.7    C1089.8,398.1,1085.7,396.5,1082.5,393.4z M1108.6,411.3v110.9h-28V411.3H1108.6z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1137.2,436.6c4.7-8.6,11.1-15.3,19.4-20c8.3-4.7,17.7-7.1,28.4-7.1c13.7,0,25.1,3.4,34.1,10.3    c9,6.9,15,16.5,18.1,28.9H1207c-1.6-4.8-4.3-8.6-8.1-11.3c-3.8-2.7-8.5-4.1-14.1-4.1c-8,0-14.3,2.9-19,8.7c-4.7,5.8-7,14-7,24.7    c0,10.5,2.3,18.7,7,24.5c4.7,5.8,11,8.7,19,8.7c11.3,0,18.7-5.1,22.2-15.2h30.2c-3.1,12-9.1,21.5-18.2,28.6    c-9.1,7.1-20.4,10.6-34,10.6c-10.7,0-20.1-2.4-28.4-7.1c-8.3-4.7-14.7-11.4-19.4-20c-4.7-8.6-7-18.6-7-30.1    C1130.2,455.3,1132.5,445.2,1137.2,436.6z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1258.6,436.5c4.5-8.7,10.5-15.3,18.2-20c7.7-4.7,16.2-7,25.7-7c8.3,0,15.5,1.7,21.7,5    c6.2,3.3,11.2,7.5,14.9,12.6v-15.8h28.2v110.9h-28.2V506c-3.6,5.2-8.6,9.5-14.9,12.9c-6.3,3.4-13.6,5.1-21.9,5.1    c-9.3,0-17.8-2.4-25.5-7.2c-7.7-4.8-13.7-11.6-18.2-20.3c-4.5-8.7-6.7-18.8-6.7-30.1C1251.9,455.1,1254.1,445.2,1258.6,436.5z     M1335.1,449.2c-2.7-4.9-6.3-8.6-10.8-11.2c-4.5-2.6-9.4-3.9-14.6-3.9c-5.2,0-10,1.3-14.4,3.8c-4.4,2.5-8,6.2-10.7,11.1    c-2.7,4.9-4.1,10.6-4.1,17.3c0,6.7,1.4,12.5,4.1,17.5c2.7,5,6.3,8.8,10.8,11.5c4.5,2.7,9.2,4,14.3,4c5.2,0,10.1-1.3,14.6-3.9    c4.5-2.6,8.1-6.3,10.8-11.2c2.7-4.9,4-10.7,4-17.5C1339.1,459.9,1337.8,454.1,1335.1,449.2z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1428.6,434.3V488c0,3.7,0.9,6.4,2.7,8.1c1.8,1.7,4.8,2.5,9.1,2.5h13v23.6h-17.6    c-23.6,0-35.4-11.5-35.4-34.4v-53.4h-13.2v-23h13.2v-27.4h28.2v27.4h24.8v23H1428.6z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1577.1,475.2H1496c0.7,8,3.5,14.3,8.4,18.8c4.9,4.5,11,6.8,18.2,6.8c10.4,0,17.8-4.5,22.2-13.4    h30.2c-3.2,10.7-9.3,19.4-18.4,26.3c-9.1,6.9-20.2,10.3-33.4,10.3c-10.7,0-20.2-2.4-28.7-7.1c-8.5-4.7-15.1-11.4-19.8-20.1    c-4.7-8.7-7.1-18.7-7.1-30c0-11.5,2.3-21.5,7-30.2c4.7-8.7,11.2-15.3,19.6-20c8.4-4.7,18.1-7,29-7c10.5,0,20,2.3,28.3,6.8    c8.3,4.5,14.8,11,19.4,19.3c4.6,8.3,6.9,17.9,6.9,28.7C1577.9,468.4,1577.6,472,1577.1,475.2z M1548.8,456.3    c-0.1-7.2-2.7-13-7.8-17.3c-5.1-4.3-11.3-6.5-18.6-6.5c-6.9,0-12.8,2.1-17.5,6.3c-4.7,4.2-7.6,10-8.7,17.5H1548.8z\"\n          />\n        </g>\n        <g>\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M796.9,643.3c-3.3-1.9-6-4.5-7.9-7.9c-1.9-3.4-2.9-7.2-2.9-11.5c0-4.3,1-8.1,2.9-11.5    c1.9-3.4,4.6-6,7.9-7.9c3.3-1.9,7-2.8,11.1-2.8c4.1,0,7.8,0.9,11.1,2.8c3.3,1.9,6,4.5,7.9,7.9c1.9,3.4,2.9,7.2,2.9,11.5    c0,4.3-1,8.1-2.9,11.5c-1.9,3.4-4.5,6-7.9,7.9c-3.3,1.9-7,2.8-11.1,2.8C803.9,646.2,800.3,645.2,796.9,643.3z M816.2,639.1    c2.4-1.4,4.4-3.4,5.8-6.1c1.4-2.6,2.1-5.7,2.1-9.1c0-3.5-0.7-6.6-2.1-9.2c-1.4-2.6-3.3-4.6-5.7-6c-2.4-1.4-5.2-2.1-8.3-2.1    c-3.1,0-5.8,0.7-8.3,2.1c-2.4,1.4-4.3,3.4-5.7,6c-1.4,2.6-2.1,5.7-2.1,9.2c0,3.5,0.7,6.5,2.1,9.1c1.4,2.6,3.3,4.6,5.8,6.1    s5.2,2.1,8.2,2.1S813.8,640.5,816.2,639.1z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M852.6,616.2h-7.2v29.6h-5.7v-29.6h-4.4v-4.7h4.4V609c0-3.8,1-6.6,3-8.4c2-1.8,5.2-2.7,9.5-2.7v4.8    c-2.5,0-4.3,0.5-5.3,1.5c-1,1-1.5,2.6-1.5,4.8v2.4h7.2V616.2z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M904.2,636h-19l-3.5,9.7h-6l15.8-43.3h6.6l15.7,43.3h-6L904.2,636z M902.5,631.4l-7.9-22l-7.9,22    H902.5z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M921.8,619.3c1.4-2.6,3.4-4.7,5.9-6.2c2.5-1.5,5.4-2.2,8.7-2.2c4.2,0,7.7,1,10.4,3.1    c2.7,2,4.5,4.9,5.4,8.5h-6.1c-0.6-2.1-1.7-3.7-3.4-4.9c-1.7-1.2-3.8-1.8-6.3-1.8c-3.3,0-5.9,1.1-7.9,3.3c-2,2.2-3,5.4-3,9.5    c0,4.1,1,7.3,3,9.6c2,2.3,4.6,3.4,7.9,3.4c2.5,0,4.6-0.6,6.3-1.8c1.7-1.2,2.8-2.8,3.4-5h6.1c-0.9,3.5-2.8,6.3-5.5,8.4    c-2.8,2.1-6.2,3.2-10.3,3.2c-3.3,0-6.1-0.7-8.7-2.2c-2.5-1.5-4.5-3.5-5.9-6.2c-1.4-2.7-2.1-5.8-2.1-9.4    C919.7,625,920.4,621.9,921.8,619.3z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M985,612.5c2.1,1.1,3.7,2.8,4.9,5c1.2,2.2,1.8,4.9,1.8,8.1v20.2h-5.6v-19.4c0-3.4-0.9-6-2.6-7.9    c-1.7-1.8-4-2.7-7-2.7c-3,0-5.4,0.9-7.2,2.8c-1.8,1.9-2.7,4.6-2.7,8.2v18.9H961v-46.3h5.7v16.9c1.1-1.8,2.7-3.1,4.7-4.1    c2-1,4.2-1.4,6.7-1.4C980.6,610.8,983,611.4,985,612.5z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1002.5,604.8c-0.8-0.7-1.1-1.7-1.1-2.8c0-1.1,0.4-2,1.1-2.8c0.7-0.8,1.7-1.1,2.8-1.1    c1,0,1.9,0.4,2.7,1.1c0.7,0.8,1.1,1.7,1.1,2.8c0,1.1-0.4,2-1.1,2.8c-0.7,0.8-1.6,1.1-2.7,1.1    C1004.2,605.9,1003.2,605.5,1002.5,604.8z M1008,611.5v34.3h-5.7v-34.3H1008z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1050,630.7h-27.4c0.2,3.4,1.4,6,3.5,7.9c2.1,1.9,4.7,2.8,7.7,2.8c2.5,0,4.5-0.6,6.2-1.7    c1.6-1.1,2.8-2.7,3.5-4.6h6.1c-0.9,3.3-2.8,6-5.5,8s-6.2,3.1-10.3,3.1c-3.3,0-6.2-0.7-8.7-2.2c-2.6-1.5-4.6-3.5-6-6.2    c-1.5-2.7-2.2-5.8-2.2-9.4c0-3.5,0.7-6.6,2.1-9.3c1.4-2.7,3.4-4.7,6-6.2c2.6-1.4,5.5-2.2,8.8-2.2c3.3,0,6.1,0.7,8.6,2.1    c2.5,1.4,4.4,3.4,5.8,5.8c1.4,2.5,2,5.3,2,8.4C1050.2,628.4,1050.1,629.5,1050,630.7z M1042.9,620.5c-1-1.6-2.3-2.8-3.9-3.6    c-1.6-0.8-3.5-1.2-5.5-1.2c-2.9,0-5.3,0.9-7.3,2.8c-2,1.8-3.2,4.4-3.5,7.6h21.6C1044.3,623.9,1043.9,622.1,1042.9,620.5z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1071.7,640.5l10.6-29h6.1l-13.4,34.3h-6.6l-13.4-34.3h6.1L1071.7,640.5z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1126.4,630.7H1099c0.2,3.4,1.4,6,3.5,7.9c2.1,1.9,4.7,2.8,7.7,2.8c2.5,0,4.5-0.6,6.2-1.7    c1.6-1.1,2.8-2.7,3.5-4.6h6.1c-0.9,3.3-2.8,6-5.5,8s-6.2,3.1-10.3,3.1c-3.3,0-6.2-0.7-8.7-2.2c-2.6-1.5-4.6-3.5-6-6.2    c-1.5-2.7-2.2-5.8-2.2-9.4c0-3.5,0.7-6.6,2.1-9.3c1.4-2.7,3.4-4.7,6-6.2c2.6-1.4,5.5-2.2,8.8-2.2c3.3,0,6.1,0.7,8.6,2.1    c2.5,1.4,4.4,3.4,5.8,5.8c1.4,2.5,2,5.3,2,8.4C1126.6,628.4,1126.5,629.5,1126.4,630.7z M1119.3,620.5c-1-1.6-2.3-2.8-3.9-3.6    c-1.6-0.8-3.5-1.2-5.5-1.2c-2.9,0-5.3,0.9-7.3,2.8c-2,1.8-3.2,4.4-3.5,7.6h21.6C1120.7,623.9,1120.2,622.1,1119.3,620.5z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1183.7,612.5c2.1,1.1,3.7,2.8,4.9,5c1.2,2.2,1.8,4.9,1.8,8.1v20.2h-5.6v-19.4c0-3.4-0.8-6-2.5-7.9    c-1.7-1.8-4-2.7-6.8-2.7c-3,0-5.3,0.9-7.1,2.8c-1.8,1.9-2.6,4.6-2.6,8.2v18.9h-5.6v-19.4c0-3.4-0.8-6-2.5-7.9    c-1.7-1.8-4-2.7-6.8-2.7c-3,0-5.3,0.9-7.1,2.8c-1.8,1.9-2.6,4.6-2.6,8.2v18.9h-5.7v-34.3h5.7v4.9c1.1-1.8,2.6-3.2,4.5-4.1    c1.9-1,4-1.4,6.3-1.4c2.9,0,5.4,0.6,7.6,1.9c2.2,1.3,3.9,3.2,4.9,5.7c1-2.4,2.5-4.3,4.8-5.6c2.2-1.3,4.7-2,7.4-2    C1179.2,610.8,1181.6,611.4,1183.7,612.5z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1232.1,630.7h-27.4c0.2,3.4,1.4,6,3.5,7.9c2.1,1.9,4.7,2.8,7.7,2.8c2.5,0,4.5-0.6,6.2-1.7    c1.6-1.1,2.8-2.7,3.5-4.6h6.1c-0.9,3.3-2.8,6-5.5,8s-6.2,3.1-10.3,3.1c-3.3,0-6.2-0.7-8.7-2.2c-2.6-1.5-4.6-3.5-6-6.2    s-2.2-5.8-2.2-9.4c0-3.5,0.7-6.6,2.1-9.3c1.4-2.7,3.4-4.7,6-6.2c2.6-1.4,5.5-2.2,8.8-2.2c3.3,0,6.1,0.7,8.6,2.1    c2.5,1.4,4.4,3.4,5.8,5.8c1.4,2.5,2,5.3,2,8.4C1232.3,628.4,1232.2,629.5,1232.1,630.7z M1224.9,620.5c-1-1.6-2.3-2.8-3.9-3.6    c-1.6-0.8-3.5-1.2-5.5-1.2c-2.9,0-5.3,0.9-7.3,2.8c-2,1.8-3.2,4.4-3.5,7.6h21.6C1226.4,623.9,1225.9,622.1,1224.9,620.5z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1267.8,614.6c2.6,2.5,3.9,6.2,3.9,10.9v20.2h-5.6v-19.4c0-3.4-0.9-6-2.6-7.9c-1.7-1.8-4-2.7-7-2.7    c-3,0-5.4,0.9-7.2,2.8c-1.8,1.9-2.7,4.6-2.7,8.2v18.9h-5.7v-34.3h5.7v4.9c1.1-1.8,2.7-3.1,4.6-4.1c1.9-1,4.1-1.4,6.4-1.4    C1261.9,610.8,1265.3,612.1,1267.8,614.6z\"\n          />\n          <path\n            style={{\n              fill: '#241F20',\n            }}\n            d=\"M1289.2,616.2v20.2c0,1.7,0.4,2.8,1.1,3.5c0.7,0.7,1.9,1,3.7,1h4.2v4.8h-5.1    c-3.2,0-5.5-0.7-7.1-2.2c-1.6-1.5-2.4-3.9-2.4-7.2v-20.2h-4.4v-4.7h4.4v-8.6h5.7v8.6h8.9v4.7H1289.2z\"\n          />\n        </g>\n        <path\n          style={{\n            fill: 'none',\n          }}\n          d=\"M453.1,1111c12.7,13.6,25.8,26.9,39.2,40C478.9,1138,465.8,1124.6,453.1,1111z\"\n        />\n        <path\n          style={{\n            fill: 'none',\n          }}\n          d=\"M1497,1232.6c-14.8,11.1-29.9,21.8-45.5,32.1C1467.1,1254.4,1482.3,1243.7,1497,1232.6z\"\n        />\n        <path\n          style={{\n            fill: 'none',\n          }}\n          d=\"M572.9,1221.2c3.5,2.8,7.1,5.5,10.7,8.2C580,1226.6,576.4,1223.9,572.9,1221.2z\"\n        />\n        <path\n          style={{\n            fill: 'none',\n          }}\n          d=\"M590.9,1235c6.1,4.5,12.2,9,18.5,13.4C603.2,1244,597,1239.5,590.9,1235z\"\n        />\n        <path\n          style={{\n            fill: 'none',\n          }}\n          d=\"M1542.2,1196.6c-10,8.4-20.1,16.7-30.5,24.8C1522.1,1213.3,1532.2,1205,1542.2,1196.6z\"\n        />\n        <path\n          style={{\n            fill: 'none',\n          }}\n          d=\"M561.3,1212c-1.3-1-2.6-2.1-3.9-3.1C558.7,1210,560.1,1211,561.3,1212z\"\n        />\n        <path\n          style={{\n            fill: 'none',\n          }}\n          d=\"M1572.4,1169.9c12.1-11.1,23.8-22.4,35.2-34c-6,6.1-12.1,12.1-18.3,18.1   C1583.7,1159.4,1578.1,1164.7,1572.4,1169.9z\"\n        />\n        <path\n          style={{\n            fill: 'none',\n          }}\n          d=\"M1629.1,1113.7c-5.9,6.3-11.9,12.5-18,18.7C1617.2,1126.2,1623.2,1120,1629.1,1113.7z\"\n        />\n        <path\n          style={{\n            fill: 'none',\n          }}\n          d=\"M483.2,1065.3c30.2-1.3,61.4-2.6,93.3-3.8C545.1,1062.7,513.9,1063.9,483.2,1065.3z\"\n        />\n        <path\n          style={{\n            opacity: 0.45,\n            fill: '#FFFFFF',\n          }}\n          d=\"M1888,1084.5c76.9-80.5,110-149.4,118.5-169V643c-12.2,43.9-75.3,246.5-246.1,432.5   C1804,1078.2,1846.6,1081.2,1888,1084.5z\"\n        />\n        <path\n          style={{\n            opacity: 0.55,\n            fill: '#FFFFFF',\n          }}\n          d=\"M2006.5,1094.6V915.5c-8.5,19.6-41.6,88.5-118.5,169   C1928.6,1087.6,1968.1,1091,2006.5,1094.6z\"\n        />\n        <path\n          style={{\n            opacity: 0.35,\n            fill: '#FFFFFF',\n          }}\n          d=\"M415.5,1068.6C167.9,775.3,87.5,392.8,77.1,338.9v300v0c8.9,33.4,70,242.7,245.6,434.9   C353.2,1071.9,384.1,1070.2,415.5,1068.6z\"\n        />\n        <path\n          style={{\n            opacity: 0.45,\n            fill: '#FFFFFF',\n          }}\n          d=\"M322.8,1073.7C147.2,881.6,86.1,672.3,77.1,638.9v274v0   c6.3,15.1,38.3,85.9,117.6,169.5C236.4,1079.3,279.1,1076.4,322.8,1073.7z\"\n        />\n        <path\n          style={{\n            opacity: 0.55,\n            fill: '#FFFFFF',\n          }}\n          d=\"M77.1,912.8V1092c38.1-3.4,77.4-6.6,117.6-9.6C115.4,998.7,83.4,927.9,77.1,912.8z\"\n        />\n        <path\n          style={{\n            opacity: 0.35,\n            fill: '#FFFFFF',\n          }}\n          d=\"M1760.4,1075.5c170.7-186,233.9-388.6,246.1-432.5V344.6   c-14.2,71-97.3,440.7-338.5,725.4C1699.3,1071.7,1730.1,1073.5,1760.4,1075.5z\"\n        />\n        <path\n          style={{\n            opacity: 0.3,\n            fill: '#FFFFFF',\n          }}\n          d=\"M1888,1084.5c-41.5-3.2-84-6.2-127.6-9c-130,141.7-322.5,273.7-602.3,318.7h35.7   C1563.3,1348.5,1773.9,1203.9,1888,1084.5z\"\n        />\n        <path\n          style={{\n            opacity: 0.4,\n            fill: '#FFFFFF',\n          }}\n          d=\"M1193.8,1394.2h812.7v-263.5v-36.1c-38.4-3.6-77.9-7-118.5-10.1   C1773.9,1203.9,1563.3,1348.5,1193.8,1394.2z\"\n        />\n        <path\n          style={{\n            opacity: 0.2,\n            fill: '#FFFFFF',\n          }}\n          d=\"M918.4,1387.8c-7.9-1.8-15.7-3.8-23.5-5.8c-1.5-0.4-2.9-0.8-4.4-1.2   c-8-2.1-15.9-4.4-23.8-6.7c-0.2-0.1-0.4-0.1-0.6-0.2c-7.8-2.3-15.5-4.8-23.1-7.3c-1.2-0.4-2.5-0.8-3.8-1.2   c-7.5-2.5-14.9-5.1-22.3-7.8c-1.3-0.5-2.6-1-3.9-1.4c-7.6-2.8-15.1-5.7-22.5-8.7c-0.2-0.1-0.4-0.2-0.6-0.3c-7.4-3-14.8-6.1-22-9.3   c-0.9-0.4-1.9-0.8-2.8-1.2c-7.2-3.2-14.3-6.4-21.4-9.8c-1.1-0.5-2.1-1-3.2-1.5c-7.2-3.4-14.4-7-21.4-10.6c-0.1-0.1-0.2-0.1-0.4-0.2   c-7.2-3.7-14.3-7.5-21.3-11.3c-0.6-0.3-1.2-0.6-1.8-1c-6.9-3.8-13.7-7.7-20.5-11.7c-0.8-0.5-1.6-0.9-2.4-1.4   c-6.9-4.1-13.7-8.2-20.5-12.4c0,0,0,0,0,0c-7-4.4-13.9-8.8-20.7-13.4c-0.3-0.2-0.5-0.3-0.8-0.5c-6.6-4.4-13.2-8.9-19.6-13.5   c-0.6-0.4-1.2-0.8-1.8-1.2c-6.2-4.4-12.4-8.9-18.5-13.4c-2.5-1.8-4.9-3.7-7.4-5.6c-3.6-2.7-7.2-5.4-10.7-8.2   c-0.8-0.7-1.7-1.3-2.6-2c-3-2.4-6-4.8-8.9-7.2c-1.3-1-2.6-2.1-3.9-3.1c-5.2-4.2-10.3-8.5-15.4-12.8c-1-0.8-2-1.7-3-2.5   c-3.5-3-7-6-10.4-9c-1.1-1-2.3-2-3.4-3c-4.3-3.8-8.6-7.7-12.9-11.6c-6.8-6.2-13.4-12.5-20-18.9c0,0,0,0,0,0c0,0,0,0,0,0   c-13.5-13-26.6-26.4-39.2-40c-0.2-0.2-0.4-0.5-0.7-0.7c-5.9-6.4-11.8-12.8-17.5-19.3c-1-1.1-1.9-2.2-2.9-3.2   c-5.6-6.4-11.2-12.8-16.6-19.2c0,0,0,0-0.1-0.1c-31.4,1.6-62.3,3.3-92.7,5.2c130,142.3,322.9,275.3,603.9,320.4h21.1   c-8.4-1.7-16.7-3.5-24.9-5.4C921.3,1388.5,919.9,1388.2,918.4,1387.8z\"\n        />\n        <path\n          style={{\n            opacity: 0.3,\n            fill: '#FFFFFF',\n          }}\n          d=\"M322.8,1073.7c-43.7,2.6-86.4,5.5-128,8.6c113.7,119.8,324.6,265.9,696.2,311.8h35.7   C645.7,1349,452.8,1216.1,322.8,1073.7z\"\n        />\n        <path\n          style={{\n            opacity: 0.4,\n            fill: '#FFFFFF',\n          }}\n          d=\"M194.8,1082.4c-40.2,3-79.5,6.2-117.6,9.6v38.7v263.5h813.8   C519.3,1348.3,308.4,1202.2,194.8,1082.4z\"\n        />\n        <path\n          style={{\n            opacity: 0.2,\n            fill: '#FFFFFF',\n          }}\n          d=\"M1760.4,1075.5c-30.3-1.9-61.1-3.7-92.4-5.4c-5.6,6.6-11.4,13.2-17.1,19.8   c-0.9,1-1.7,2-2.6,3c-5.8,6.5-11.7,13-17.7,19.4c-0.5,0.5-1,1-1.5,1.6c-5.9,6.3-11.9,12.5-18,18.7c-1.2,1.2-2.3,2.3-3.5,3.5   c-11.4,11.5-23.2,22.9-35.2,34c-4.4,4.1-8.9,8.1-13.5,12.1c-1,0.9-2,1.8-3.1,2.7c-4,3.5-8.1,7.1-12.2,10.5c-0.5,0.4-1,0.9-1.5,1.3   c-9.9,8.4-20.1,16.7-30.5,24.8c0,0,0,0,0,0s0,0,0,0c-4.8,3.8-9.7,7.5-14.6,11.2c-14.8,11.1-29.9,21.8-45.5,32.1   c-0.2,0.1-0.4,0.3-0.7,0.4c-13.6,9-27.6,17.7-41.8,26c-0.3,0.2-0.5,0.3-0.8,0.5c-7,4.1-14,8-21.1,11.9c-0.6,0.3-1.1,0.6-1.7,0.9   c-14.2,7.7-28.7,15.1-43.5,22.1c-0.7,0.3-1.4,0.7-2.1,1c-7.1,3.4-14.4,6.6-21.7,9.8c-0.9,0.4-1.9,0.8-2.8,1.2   c-14.7,6.4-29.8,12.4-45.1,18.1c-1.1,0.4-2.2,0.8-3.3,1.2c-7.4,2.7-14.8,5.3-22.3,7.8c-1.3,0.4-2.6,0.8-3.9,1.3   c-7.7,2.5-15.5,5-23.4,7.4c0,0,0,0,0,0c-7.8,2.3-15.7,4.5-23.7,6.6c-1.4,0.4-2.8,0.8-4.3,1.1c-7.7,2-15.5,3.9-23.3,5.8   c-1.5,0.4-3,0.7-4.5,1c-8.1,1.9-16.3,3.6-24.6,5.3c0,0,0,0,0,0h21.1C1438,1349.2,1630.4,1217.1,1760.4,1075.5z\"\n        />\n        <path\n          style={{\n            opacity: 0.05,\n            fill: '#241F20',\n          }}\n          d=\"M1174,1065.6l3.7,2.5c7.4,5.1,9.2,15.3,4,22.6l-2.6,3.6c-4,5.6-4,13.1,0,18.7   l2.6,3.6c1.6,2.3,2.5,4.8,2.8,7.4c151.2,5,297.1,16.8,404.8,29.8c6.2-6,12.3-12,18.3-18.1c1.2-1.2,2.3-2.3,3.5-3.5   c6.1-6.2,12.1-12.4,18-18.7c0.5-0.5,1-1,1.5-1.6c6-6.4,11.9-12.9,17.7-19.4c0.9-1,1.7-2,2.6-3c5.8-6.5,11.5-13.1,17.1-19.8   c0,0,0,0,0,0c-152.9-8.3-316.7-13.1-487.6-15.7c-4.7-0.1-9.3-0.1-13.2-0.2C1167.7,1058.7,1170.1,1063,1174,1065.6z\"\n        />\n        <path\n          style={{\n            opacity: 0.05,\n            fill: '#241F20',\n          }}\n          d=\"M432.1,1087.8c1,1.1,1.9,2.2,2.9,3.2c5.8,6.5,11.6,12.9,17.5,19.3   c0.2,0.2,0.4,0.5,0.7,0.7c12.7,13.6,25.8,26.9,39.2,40c0,0,0,0,0,0c109.2-12.9,238.2-23.9,406.9-27.9c0.4-2.2,1.3-4.4,2.7-6.4   l2.6-3.6c4-5.6,4-13.2,0-18.7l-2.6-3.6c-5.3-7.3-3.5-17.5,4-22.6l3.7-2.5c4-2.7,6.4-7.1,6.9-11.7c-7.9,0-15.9,0.1-17.1,0.1   c-103.9,1-205.3,3.3-303.3,6.7c-6.6,0.2-13.1,0.5-19.7,0.7c-31.9,1.2-63.2,2.5-93.3,3.8c-7.7,0.3-15.5,0.7-23.1,1.1   c-0.5,0-1,0-1.4,0.1c-6.7,0.3-13.3,0.6-19.9,1c-7.8,0.4-15.6,0.8-23.3,1.2c0,0,0,0,0.1,0.1C421,1075.1,426.5,1081.5,432.1,1087.8z\"\n        />\n        <path\n          style={{\n            opacity: 0.15,\n            fill: '#241F20',\n          }}\n          d=\"M1184.5,1124.2c0.7,5.8-1.7,11.7-6.8,15.2l-3.7,2.5c-5.7,3.9-8.3,10.9-6.4,17.6   l1.2,4.3c2.4,8.7-2.8,17.7-11.5,19.9l-4.3,1.1c-6.6,1.7-11.4,7.4-12,14.3c132.2,3.1,263,11.7,370.7,22.3c0,0,0,0,0,0   c10.3-8.1,20.5-16.4,30.5-24.8c0.5-0.4,1-0.9,1.5-1.3c4.1-3.5,8.2-7,12.2-10.5c1-0.9,2.1-1.8,3.1-2.7c4.5-4,9-8,13.5-12.1   c5.7-5.2,11.3-10.6,16.9-15.9C1481.6,1141,1335.8,1129.2,1184.5,1124.2z\"\n        />\n        <path\n          style={{\n            opacity: 0.15,\n            fill: '#241F20',\n          }}\n          d=\"M930.7,1184.8l-4.3-1.1c-8.7-2.2-13.9-11.2-11.5-19.9l1.2-4.3   c1.9-6.7-0.7-13.7-6.4-17.6l-3.7-2.5c-5.4-3.7-7.8-10.2-6.7-16.2c-168.7,3.9-297.7,14.9-406.9,27.9c0,0,0,0,0,0   c6.6,6.4,13.2,12.7,20,18.9c4.2,3.9,8.5,7.8,12.9,11.6c1.1,1,2.3,2,3.4,3c3.4,3,6.9,6.1,10.4,9c1,0.8,2,1.7,3,2.5   c5.1,4.3,10.2,8.6,15.4,12.8c1.3,1,2.6,2.1,3.9,3.1c3,2.4,5.9,4.8,8.9,7.2c102-10.2,222-18.1,372.3-20.5   C941.9,1192,937.2,1186.5,930.7,1184.8z\"\n        />\n        <path\n          style={{\n            opacity: 0.25,\n            fill: '#241F20',\n          }}\n          d=\"M1161.7,1388.9c1.5-0.3,3-0.7,4.5-1c7.8-1.8,15.6-3.8,23.3-5.8   c1.4-0.4,2.9-0.8,4.3-1.1c8-2.1,15.9-4.3,23.7-6.6c0,0,0,0,0,0c7.9-2.3,15.7-4.8,23.4-7.4c1.3-0.4,2.6-0.8,3.9-1.3   c7.5-2.5,14.9-5.1,22.3-7.8c1.1-0.4,2.2-0.8,3.3-1.2c15.3-5.7,30.4-11.7,45.1-18.1c0.9-0.4,1.9-0.8,2.8-1.2   c7.3-3.2,14.5-6.5,21.7-9.8c0.7-0.3,1.4-0.7,2.1-1c14.8-7,29.3-14.4,43.5-22.1c0.6-0.3,1.1-0.6,1.7-0.9c7.1-3.9,14.1-7.9,21.1-11.9   c0.3-0.2,0.5-0.3,0.8-0.5c14.3-8.3,28.2-17,41.8-26c0.2-0.1,0.4-0.3,0.7-0.4c15.6-10.3,30.7-21,45.5-32.1   c4.9-3.7,9.8-7.4,14.6-11.2c0,0,0,0,0,0c-107.7-10.5-238.5-19.2-370.7-22.3c0,0,0,0.1,0,0.1l-0.4,4.4c-0.7,9-8.6,15.7-17.6,14.8   l-4.4-0.4c-1.7-0.2-3.3-0.1-4.9,0.2c1,4.3,2,8.6,3,12.9c3.8,16.9,7.7,33.7,11.6,50.6c1,4.3,1.9,8.7,3,13.5   c-11.1-4.4-21.4-8.5-31.7-12.7c-3.1-1.3-5.5-1.2-7.8,1.3c-3.6,4-7.6,7.6-11.4,11.4c-3.7,3.7-7.5,7.3-11.9,11.5   c-4.9-21.3-9.7-42.4-14.6-63.5l-0.5,0.5c-6.3,6.5-16.7,6.5-23,0l-1.2-1.3c-4.9,21.3-9.8,42.6-14.8,64.2c-4.4-4.3-8.2-7.9-11.9-11.5   c-3.8-3.8-7.8-7.4-11.4-11.4c-2.3-2.5-4.7-2.6-7.8-1.3c-10.3,4.2-20.6,8.3-31.7,12.7c1.1-4.8,2-9.1,3-13.5   c3.9-16.9,7.8-33.7,11.6-50.6c1-4.3,2-8.6,3-13c-1.3-0.2-2.6-0.3-4-0.1l-4.4,0.4c-9,0.9-16.9-5.8-17.6-14.8l-0.3-4.4   c0-0.2-0.1-0.4-0.1-0.5c-150.4,2.4-270.3,10.3-372.3,20.5c0.8,0.7,1.7,1.3,2.6,2c3.5,2.8,7.1,5.5,10.7,8.2c2.5,1.9,4.9,3.8,7.4,5.6   c6.1,4.5,12.2,9,18.5,13.4c0.6,0.4,1.2,0.8,1.8,1.2c6.5,4.6,13,9,19.6,13.5c0.3,0.2,0.5,0.3,0.8,0.5c6.8,4.5,13.7,9,20.7,13.4   c0,0,0,0,0,0c6.7,4.2,13.6,8.3,20.5,12.4c0.8,0.5,1.6,1,2.4,1.4c6.8,4,13.6,7.9,20.5,11.7c0.6,0.3,1.2,0.6,1.8,1   c7,3.9,14.1,7.6,21.3,11.3c0.1,0.1,0.2,0.1,0.4,0.2c7.1,3.6,14.2,7.1,21.4,10.6c1.1,0.5,2.1,1,3.2,1.5c7.1,3.3,14.2,6.6,21.4,9.8   c0.9,0.4,1.9,0.8,2.8,1.2c7.3,3.2,14.6,6.3,22,9.3c0.2,0.1,0.4,0.2,0.6,0.3c7.4,3,14.9,5.9,22.5,8.7c1.3,0.5,2.6,1,3.9,1.4   c7.4,2.7,14.8,5.3,22.3,7.8c1.2,0.4,2.5,0.8,3.8,1.2c7.6,2.5,15.3,5,23.1,7.3c0.2,0.1,0.4,0.1,0.6,0.2c7.8,2.3,15.8,4.6,23.8,6.7   c1.5,0.4,2.9,0.8,4.4,1.2c7.8,2,15.6,4,23.5,5.8c1.5,0.3,2.9,0.7,4.4,1c8.2,1.9,16.5,3.7,24.9,5.4H1137c0,0,0,0,0,0   C1145.3,1392.5,1153.5,1390.7,1161.7,1388.9z\"\n        />\n        <path\n          style={{\n            opacity: 0.97,\n            fill: '#FFFFFF',\n          }}\n          d=\"M-0.4,0.4l-0.9,1471.5h2085.7l0.5-1472.5L-0.4,0.4z M2006.5,344.6V643v272.5v179.1   v36.1v263.5h-812.7h-35.7H1137H947.7h-21.1h-35.7H77.1v-263.5V1092V912.8v0v-274v0v-300c0,0,0,0,0,0v-262h1929.4V344.6z\"\n        />\n        <path\n          style={{\n            opacity: 0.75,\n            fill: '#241F20',\n          }}\n          d=\"M1049,1222.4c1.6,7,3.2,13.9,4.8,20.9l0,0c4.8,21.1,9.7,42.2,14.6,63.5   c4.4-4.3,8.2-7.9,11.9-11.5c3.8-3.8,7.8-7.4,11.4-11.4c2.3-2.5,4.7-2.6,7.8-1.3c10.3,4.2,20.6,8.3,31.7,12.7c-1.1-4.8-2-9.1-3-13.5   c-3.9-16.9-7.8-33.7-11.6-50.6c-1-4.3-2-8.5-3-12.9c-1.3-5.7-2.6-11.4-3.9-17.1C1092.4,1213.4,1071.6,1221,1049,1222.4z\"\n        />\n        <path\n          style={{\n            opacity: 0.55,\n            fill: '#241F20',\n          }}\n          d=\"M1049,1222.4c-2.4,0.1-4.8,0.2-7.2,0.2c-2.7,0-5.4-0.1-8.1-0.3   c-1.6,6.7-3.1,13.5-4.7,20.2v0l1.2,1.3c6.3,6.5,16.7,6.5,23,0l0.5-0.5l0,0C1052.2,1236.3,1050.6,1229.3,1049,1222.4z\"\n        />\n        <path\n          style={{\n            opacity: 0.45,\n            fill: '#FFFFFF',\n          }}\n          d=\"M1074.3,1180.7c5-2.1,9.7-4.7,14.2-7.7c22.2-15,36.8-40.4,36.8-69.3   c0-28.8-14.6-54.2-36.8-69.2c-4.4-3-9.2-5.6-14.2-7.7c-10-4.2-21-6.6-32.5-6.6c-14.4,0-28,3.7-39.8,10.1   c-7.1,3.9-13.6,8.7-19.2,14.4c-15.1,15.1-24.5,36-24.5,59c0,23.1,9.3,44,24.5,59.1c5.7,5.7,12.1,10.5,19.2,14.4   c11.8,6.4,25.4,10.1,39.8,10.1C1053.4,1187.3,1064.3,1185,1074.3,1180.7z M1008.9,1148.2c-0.5-0.4-0.7-1-0.6-1.7l6-34.7l-26-25.3   c-0.4-0.4-0.5-0.9-0.3-1.3c0.1-0.4,0.5-0.8,1-0.8l35.9-5.2l15.9-32.3c0.3-0.5,0.8-0.8,1.3-0.7c0.4,0,0.9,0.3,1.1,0.7l15.9,32.3   l35.2,5.1c0.6,0.1,1.1,0.6,1.3,1.1c0.2,0.6,0.1,1.2-0.4,1.7l-25.5,24.8l6.1,35.5c0.1,0.6-0.1,1.1-0.5,1.3c-0.4,0.4-1,0.4-1.5,0.1   L1042,1132l-31.2,16.4C1010.2,1148.8,1009.4,1148.7,1008.9,1148.2z\"\n        />\n        <path\n          style={{\n            opacity: 0.75,\n            fill: '#FFFFFF',\n          }}\n          d=\"M1073.9,1148.7c0.6,0.3,1.1,0.2,1.5-0.1c0.4-0.3,0.6-0.8,0.5-1.3l-6.1-35.5l25.5-24.8   c0.5-0.5,0.6-1.1,0.4-1.7c-0.2-0.5-0.6-1-1.3-1.1l-35.2-5.1l-15.9-32.3c-0.2-0.5-0.7-0.7-1.1-0.7c-0.5,0-1.1,0.2-1.3,0.7   l-15.9,32.3l-35.9,5.2c-0.5,0.1-0.9,0.4-1,0.8c-0.1,0.4-0.1,0.9,0.3,1.3l26,25.3l-6,34.7c-0.1,0.7,0.1,1.3,0.6,1.7   c0.5,0.4,1.3,0.6,1.9,0.2l31.2-16.4L1073.9,1148.7z\"\n        />\n        <path\n          style={{\n            opacity: 0.75,\n            fill: '#241F20',\n          }}\n          d=\"M1033.7,1222.3c-22.5-1.5-43.3-9.3-60.7-21.6c-0.1,0.6-0.3,1.2-0.4,1.8   c-1.2,5.2-2.4,10.4-3.6,15.7c-1,4.3-2,8.6-3,13c-3.8,16.9-7.7,33.7-11.6,50.6c-1,4.3-1.9,8.7-3,13.5c11.1-4.4,21.4-8.5,31.7-12.7   c3.1-1.3,5.5-1.2,7.8,1.3c3.6,4,7.6,7.6,11.4,11.4c3.7,3.7,7.5,7.3,11.9,11.5c4.9-21.6,9.9-42.9,14.8-64.2v0   C1030.6,1235.8,1032.2,1229,1033.7,1222.3z\"\n        />\n        <path\n          style={{\n            opacity: 0.2,\n            fill: '#FFFFFF',\n          }}\n          d=\"M1041.8,1194.9c0.3,0,0.6,0,0.9,0c18.2-0.2,35.2-5.7,49.4-15.1   c24.6-16.3,40.9-44.3,40.9-76c0-50.3-40.8-91.2-91.2-91.2s-91.2,40.8-91.2,91.2c0,31.9,16.5,60,41.3,76.3   c13.8,9.1,30.3,14.5,48.1,14.8C1040.6,1194.9,1041.2,1194.9,1041.8,1194.9z M982.8,1162.8c-15.1-15.1-24.5-36-24.5-59.1   c0-23.1,9.3-43.9,24.5-59c5.7-5.7,12.1-10.5,19.2-14.4c11.8-6.4,25.4-10.1,39.8-10.1c11.5,0,22.5,2.3,32.5,6.6   c5,2.1,9.7,4.7,14.2,7.7c22.2,15,36.8,40.4,36.8,69.2c0,28.8-14.6,54.3-36.8,69.3c-4.4,3-9.2,5.6-14.2,7.7c-10,4.2-21,6.6-32.5,6.6   c-14.4,0-28-3.7-39.8-10.1C994.9,1173.4,988.4,1168.5,982.8,1162.8z\"\n        />\n        <path\n          style={{\n            opacity: 0.55,\n            fill: '#241F20',\n          }}\n          d=\"M909.6,1065.6l-3.7,2.5c-7.4,5.1-9.2,15.3-4,22.6l2.6,3.6c4,5.6,4,13.1,0,18.7   l-2.6,3.6c-1.4,2-2.3,4.2-2.7,6.4c-1.1,6.1,1.2,12.5,6.7,16.2l3.7,2.5c5.7,3.9,8.3,10.9,6.4,17.6l-1.2,4.3   c-2.4,8.7,2.8,17.7,11.5,19.9l4.3,1.1c6.5,1.6,11.2,7.2,12,13.8c0,0.2,0.1,0.4,0.1,0.5l0.3,4.4c0.7,9,8.6,15.7,17.6,14.8l4.4-0.4   c1.3-0.1,2.6-0.1,4,0.1c1.2-5.2,2.4-10.4,3.6-15.7c0.1-0.6,0.3-1.2,0.4-1.8c-2.8-2-5.5-4.1-8.1-6.4c-0.9-0.8-1.9-1.5-2.7-2.3   c-5.2-4.7-9.9-9.8-14.2-15.2c-2.9-3.7-5.5-7.5-7.9-11.5c-2.4-4-4.6-8.1-6.5-12.4c-6.8-14.9-10.6-31.6-10.6-49.1   c0-65.6,53.2-118.8,118.8-118.8c65.6,0,118.8,53.2,118.8,118.8c0,2.5-0.1,5-0.2,7.5c-0.3,5-0.9,9.8-1.8,14.6   c-0.9,4.8-2.1,9.5-3.5,14c-2.9,9.1-6.9,17.8-11.8,25.8c-4.9,8-10.7,15.4-17.3,22c-2.5,2.5-5.2,4.9-8,7.2c-0.8,0.7-1.6,1.4-2.5,2.1   c-1.8,1.4-3.7,2.8-5.6,4.2c1.3,5.7,2.6,11.4,3.9,17.1c1.6-0.3,3.2-0.4,4.9-0.2l4.4,0.4c9,0.9,16.9-5.8,17.6-14.8l0.4-4.4   c0,0,0-0.1,0-0.1c0.6-6.8,5.4-12.6,12-14.3l4.3-1.1c8.8-2.2,13.9-11.2,11.5-19.9l-1.2-4.3c-1.9-6.7,0.7-13.7,6.4-17.6l3.7-2.5   c5.1-3.5,7.5-9.5,6.8-15.2c-0.3-2.6-1.2-5.1-2.8-7.4l-2.6-3.6c-4-5.6-4-13.2,0-18.7l2.6-3.6c5.3-7.3,3.5-17.5-4-22.6l-3.7-2.5   c-4-2.7-6.4-6.9-6.9-11.4c-0.2-1.5-0.1-2.9,0.1-4.4c0.1-0.6,0.2-1.2,0.3-1.7l1.2-4.3c2.4-8.7-2.8-17.7-11.5-19.9l-4.3-1.1   c-6.7-1.7-11.5-7.5-12-14.4l-0.4-4.4c-0.7-9-8.6-15.7-17.6-14.8l-4.4,0.4c-6.8,0.7-13.4-3.1-16.2-9.4l-1.8-4.1   c-3.7-8.2-13.4-11.8-21.6-7.9l-4,1.9c-6.2,3-13.7,1.7-18.5-3.2l-3.1-3.2c-6.3-6.5-16.7-6.5-23,0l-3.1,3.2   c-4.8,4.9-12.3,6.2-18.5,3.2l-4-1.9c-8.2-3.9-17.9-0.4-21.6,7.9l-1.8,4.1c-2.9,6.3-9.4,10.1-16.2,9.4l-4.4-0.4   c-9-0.9-16.9,5.8-17.6,14.8l-0.3,4.4c-0.5,6.9-5.4,12.7-12,14.4l-4.3,1.1c-8.7,2.2-13.9,11.2-11.5,19.9l1.2,4.3   c0.1,0.3,0.1,0.5,0.2,0.8c0.4,1.7,0.5,3.4,0.3,5.1C916.1,1058.6,913.6,1062.9,909.6,1065.6z\"\n        />\n        <path\n          style={{\n            opacity: 0.15,\n            fill: '#241F20',\n          }}\n          d=\"M1041.8,1222.6c2.4,0,4.8-0.1,7.2-0.2c22.6-1.3,43.4-9,60.8-21.2   c1.9-1.3,3.8-2.7,5.6-4.2c0.8-0.7,1.6-1.4,2.5-2.1c2.8-2.3,5.5-4.7,8-7.2c6.6-6.6,12.4-14,17.3-22c4.9-8,8.9-16.6,11.8-25.8   c1.5-4.6,2.6-9.2,3.5-14c0.9-4.8,1.5-9.7,1.8-14.6c0.2-2.5,0.2-5,0.2-7.5c0-65.6-53.2-118.8-118.8-118.8   c-65.6,0-118.8,53.2-118.8,118.8c0,17.5,3.8,34.1,10.6,49.1c1.9,4.3,4.1,8.4,6.5,12.4c2.4,4,5.1,7.8,7.9,11.5   c4.3,5.5,9,10.6,14.2,15.2c0.9,0.8,1.8,1.6,2.7,2.3c2.6,2.2,5.3,4.4,8.1,6.4c17.4,12.3,38.2,20.1,60.7,21.6   C1036.4,1222.5,1039.1,1222.6,1041.8,1222.6z M950.7,1103.8c0-50.3,40.8-91.2,91.2-91.2s91.2,40.8,91.2,91.2   c0,31.8-16.3,59.7-40.9,76c-14.2,9.4-31.1,14.9-49.4,15.1c-0.3,0-0.6,0-0.9,0c-0.6,0-1.2,0-1.8-0.1c-17.8-0.3-34.2-5.7-48.1-14.8   C967.1,1163.8,950.7,1135.7,950.7,1103.8z\"\n        />\n      </g>\n      <g id=\"Course_Name\">\n        <g>\n          <rect\n            x={471.8}\n            y={901.3}\n            style={{\n              fill: '#231F20',\n            }}\n            width={1134.9}\n            height={2.1}\n          />\n        </g>\n      </g>\n      <g id=\"Learner_Name\">\n        <g>\n          <rect\n            x={471.8}\n            y={784.9}\n            style={{\n              fill: '#231F20',\n            }}\n            width={713.7}\n            height={2.1}\n          />\n        </g>\n      </g>\n      <g id=\"Date\">\n        <rect\n          x={1230.8}\n          y={784.9}\n          style={{\n            fill: '#231F20',\n          }}\n          width={376}\n          height={2.1}\n        />\n      </g>\n    </svg>\n  );\n};\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport {\n  useState,\n  useRef,\n  useEffect,\n  createContext,\n  useContext,\n  useMemo,\n  Fragment as _,\n  cloneElement,\n  useCallback,\n  RefObject,\n} from 'react';\n\nexport const InputText = ({\n  width,\n  placeholder = '',\n  focusColor = '#000',\n  callback = (value: String) => {},\n}) => {\n  // const {\n  //   width,\n  //   focusColor = '#000',\n  //   callback = (value: String) => {},\n  // } = props;\n\n  const [value, setValue] = useState('');\n  const [hasFocus, setHasFocus] = useState(false);\n\n  useEffect(() => {\n    callback(value);\n  }, [value]);\n\n  return (\n    <div\n      css={css({\n        position: 'relative',\n        width,\n      })}\n    >\n      {!hasFocus && (\n        <div\n          className=\"data-input-blur-value-display\"\n          css={css({\n            position: 'absolute',\n            width,\n            whiteSpace: 'nowrap',\n            overflow: 'hidden',\n          })}\n        >\n          {value}\n        </div>\n      )}\n\n      <input\n        type=\"text\"\n        css={css({\n          all: 'unset',\n          position: 'relative',\n          width,\n          opacity: !value || hasFocus ? 1 : 0,\n          ':focus': {\n            all: 'unset',\n            width,\n            outline: `1px solid ${focusColor}`,\n            // boxShadow: `0 0 0 1px ${focusColor}`,\n            border: 'transparent !important',\n            overflow: 'visible',\n          },\n        })}\n        placeholder={placeholder}\n        onFocus={() => {\n          setHasFocus(true);\n        }}\n        onBlur={() => {\n          setHasFocus(false);\n        }}\n        onChange={e => {\n          setValue(e.currentTarget.value);\n        }}\n      />\n    </div>\n  );\n};\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport { useState, useContext, Fragment as _, useCallback } from 'react';\nimport { interactionContext as InteractionContext } from './interactionContext';\n\nimport { CertificateContext } from './Certificate';\nimport { Certificate_1_SVG } from './Certificate_1_SVG';\nimport { Certificate_2_SVG } from './Certificate_2_SVG';\nimport { Certificate_3_SVG } from './Certificate_3_SVG';\nimport chameleonLogoForCertificate from 'assets/chameleonLogoForCertificate.svg';\nimport { InputText } from './InputText';\n\n// https://react-svgr.com/playground/\n\nconst learnerNameGrey = '#A1ADAD';\n\nconst CertificateTemplateFields = props => {\n  const {\n    id,\n    scaleFactor,\n    inverseScaleFactor,\n    color,\n    date,\n    courseName,\n    fontSize,\n    coordinates,\n  } = props;\n\n  const certificatePadding = 0;\n  const offset = 12;\n\n  if (!coordinates) {\n    return null;\n  }\n\n  return (\n    <_>\n      <div\n        style={{\n          position: 'absolute',\n          left:\n            (coordinates?.courseName?.[0] - certificatePadding) * scaleFactor,\n          top:\n            (coordinates?.courseName?.[1] -\n              certificatePadding * 2 -\n              (fontSize + offset)) *\n            scaleFactor,\n          height: 0,\n          transform: `scale(${scaleFactor})`,\n          transformOrigin: 'bottom left',\n        }}\n      >\n        {courseName}\n      </div>\n      <div\n        style={{\n          position: 'absolute',\n          left:\n            (coordinates?.learnerName?.[0] - certificatePadding) * scaleFactor,\n          top:\n            (coordinates?.learnerName?.[1] -\n              certificatePadding * 2 -\n              (fontSize + offset)) *\n            scaleFactor,\n          height: 0,\n          transform: `scale(${scaleFactor})`,\n          transformOrigin: 'bottom left',\n        }}\n      >\n        <LearnerName\n          width={\n            coordinates?.learnerName?.[2] * scaleFactor * inverseScaleFactor\n          }\n        />\n      </div>\n\n      <div\n        style={{\n          position: 'absolute',\n          left: (coordinates?.date?.[0] - certificatePadding) * scaleFactor,\n          top:\n            (coordinates?.date?.[1] -\n              certificatePadding * 2 -\n              (fontSize + offset)) *\n            scaleFactor,\n          height: 0,\n          transform: `scale(${scaleFactor})`,\n          transformOrigin: 'bottom left',\n        }}\n      >\n        {date}\n      </div>\n    </_>\n  );\n};\n\nconst LearnerName = props => {\n  const { width } = props;\n\n  return window.dev() ? (\n    <span\n      style={{\n        color: learnerNameGrey,\n      }}\n    >\n      Learner inputs name here\n    </span>\n  ) : (\n    <InputText\n      {...{\n        width,\n        placeholder: 'Enter your name here',\n        focusColor: learnerNameGrey,\n      }}\n    />\n  );\n};\n\nexport const CertificateTemplate = props => {\n  const interactionContext = useContext(InteractionContext);\n  const certificateContext = useContext(CertificateContext);\n\n  const { id } = interactionContext;\n\n  const {\n    certificateTemplateIndex = 0,\n    certificateTemplateColor: color,\n    certificateTemplateTitle: courseName = window.dev()\n      ? `*Add a Course name in the Certificate settings`\n      : '',\n    generatingPDF,\n  } = interactionContext.props;\n\n  const { src: logo = chameleonLogoForCertificate } = props;\n\n  const { scaleFactor, inverseScaleFactor } = certificateContext;\n\n  const dateArray = new Date().toString().split(/ /g);\n  const date = dateArray.slice(0, 4).join(' ');\n\n  const [SVG, setSVG] = useState<string | undefined>('true'); //\n  const [coordinates, setCoordinates] = useState<{} | undefined>();\n\n  const logoCoords = {\n    0: {\n      left: '50%',\n      top: 115,\n      transform: 'translateX(-50%)',\n    },\n\n    1: {\n      left: 255,\n      top: 80,\n    },\n\n    2: {\n      right: 80,\n      top: 75,\n    },\n  }[certificateTemplateIndex];\n\n  const fontSize = 32;\n\n  const svgContainer = useCallback(\n    svg => {\n      if (!svg) {\n        return;\n      }\n\n      const learnerNameElement = svg.querySelector('#Learner_Name rect');\n      const courseNameElement = svg.querySelector('#Course_Name rect');\n      const dateElement = svg.querySelector('#Date rect');\n\n      const changeColorElement = svg.querySelector('#Change_colour');\n\n      if (learnerNameElement && courseNameElement && dateElement) {\n        if (window.dev()) {\n          learnerNameElement.style.fill = learnerNameGrey;\n        }\n\n        setCoordinates({\n          learnerName: [\n            learnerNameElement.getAttribute('x'),\n            learnerNameElement.getAttribute('y'),\n            learnerNameElement.getAttribute('width'),\n          ],\n          courseName: [\n            courseNameElement.getAttribute('x'),\n            courseNameElement.getAttribute('y'),\n          ],\n          date: [dateElement.getAttribute('x'), dateElement.getAttribute('y')],\n        });\n      }\n\n      if (!changeColorElement) {\n        return;\n      }\n\n      const changeColorElements = Array.from(\n        changeColorElement.querySelectorAll('[style*=\"fill\"]')\n      ) as (HTMLElement & SVGElement)[];\n\n      changeColorElements?.forEach(element => {\n        element.style.fill = color;\n      });\n    },\n    [SVG, certificateTemplateIndex, color]\n  );\n\n  if (!SVG) {\n    return null;\n  }\n\n  return (\n    <div\n      key={`${certificateTemplateIndex}-${color}`}\n      css={css({\n        position: 'relative',\n        svg: {\n          boxShadow: generatingPDF ? 'none' : '0 0 10px rgba(0,0,0,0.1)',\n        },\n      })}\n    >\n      <div\n        ref={svgContainer}\n        key={`${certificateTemplateIndex}-${color}`}\n        id={`svg-container-${id}`}\n      >\n        {\n          [<Certificate_1_SVG />, <Certificate_2_SVG />, <Certificate_3_SVG />][\n            certificateTemplateIndex\n          ]\n        }\n      </div>\n\n      <div\n        style={{\n          position: 'absolute',\n          left: 0,\n          top: 0,\n          width: '100%',\n          height: '100%',\n          fontSize,\n          fontWeight: 500,\n        }}\n      >\n        <CertificateTemplateFields\n          key={`certificate-template-fields-${certificateTemplateIndex}`}\n          {...{\n            scaleFactor,\n            inverseScaleFactor,\n            color,\n            fontSize,\n            courseName,\n            date,\n            coordinates,\n          }}\n        />\n      </div>\n      <div\n        ref={node => {\n          if (!node) {\n            return;\n          }\n\n          const logoScale = node.offsetWidth / 1100;\n\n          const img = node.firstChild as HTMLImageElement;\n          if (img) {\n            img.style.width = `${80 * logoScale}px`;\n            img.style.top = `${logoCoords.top * logoScale}px`;\n\n            const leftRight = logoCoords.left ? 'left' : 'right';\n            img.style[leftRight] = `${logoCoords[leftRight] * logoScale}px`;\n          }\n        }}\n        style={{\n          position: 'absolute',\n          left: 0,\n          top: 0,\n          width: '100%',\n          height: '100%',\n          transformOrigin: '0px 0px',\n          pointerEvents: 'none',\n        }}\n      >\n        <img\n          src={logo}\n          style={{\n            position: 'absolute',\n            ...logoCoords,\n            width: 80,\n          }}\n        />\n      </div>\n    </div>\n  );\n};\n\nconst CertificateTemplates = props => {\n  const interactionContext = useContext(InteractionContext);\n\n  const { certificateTemplateIndex = 0 } = interactionContext.props;\n\n  const requiredVariables = [['learnerName'], [], []][certificateTemplateIndex];\n\n  const moduleVariables = [''];\n\n  if (requiredVariables.every(entry => moduleVariables.includes(entry))) {\n    console.log('certificate template has the required variables !!!');\n  } else {\n    console.log('certificate template DOES NOT has the required variables !!!');\n  }\n\n  return <CertificateTemplate {...props} />;\n};\n\nexport default CertificateTemplates;\n","/** @jsx jsx */\n\nimport { css, jsx } from '@emotion/core';\nimport {\n  useState,\n  useRef,\n  useEffect,\n  createContext,\n  useContext,\n  useMemo,\n  Fragment as _,\n  cloneElement,\n  RefObject,\n} from 'react';\nimport CertificateDefaultPNG from 'assets/Certificate-V2.png';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport setBlockProps from 'services/apiHelpers/setBlockProps';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport unlockInteraction from 'services/unlockInteraction';\nimport { DragHandle, ResizeHandle } from './Handles';\nimport { generatePDFFromCanvas } from './generatePDF';\nimport { useSelector } from 'react-redux';\nimport { State } from 'store/store';\nimport { CertificateTemplate } from './CertificateTemplates';\nimport LoadingSpinner from 'components/UI/LoadingSpinner';\nimport { InputText } from './InputText';\n\ninterface ICertificateContext {\n  certificateRef: RefObject<HTMLDivElement> | null;\n  certificateImgSize: { width: number; height: number } | undefined;\n  scaleFactor: number;\n  inverseScaleFactor: number;\n  generatingPDF: boolean;\n}\n\nconst certificateDefaultSize = {\n  width: 2084,\n  height: 1437,\n};\n\nexport const certificatePadding = 20;\n\nconst certificateContextValue = {\n  certificateRef: null,\n  certificateImgSize: {\n    ...certificateDefaultSize,\n  },\n  scaleFactor: 1,\n  inverseScaleFactor: 1,\n  generatingPDF: false,\n};\n\nexport const CertificateContext = createContext<ICertificateContext>(\n  certificateContextValue\n);\n\nconst resetResponsiveStyles = {\n  p: {\n    fontSize: '1rem !important',\n  },\n  h1: {\n    fontSize: '3.5rem !important',\n  },\n\n  h2: {\n    fontSize: '2.5rem !important',\n  },\n\n  h3: {\n    fontSize: '2rem !important',\n  },\n\n  h4: {\n    fontSize: '1.7rem !important',\n  },\n\n  h5: {\n    fontSize: '1.2rem !important',\n  },\n\n  h6: {\n    fontSize: '1rem !important',\n  },\n};\n\nconst Certificate = props => {\n  const interactionContext = useContext(InteractionContext);\n\n  const {\n    lockDown,\n    name,\n    certificateType = 'custom',\n  } = interactionContext.props;\n\n  const {\n    id,\n    src: imgSrc = CertificateDefaultPNG,\n    imgWidth = certificateDefaultSize.width,\n    imgHeight = certificateDefaultSize.height,\n    imageId: imgId = undefined,\n    children,\n  } = props;\n\n  const [textFields, downloadBtn] = children;\n\n  const [generatingPDF, setGeneratingPDF] = useState(false);\n\n  const imgSize = {\n    width:\n      certificateType === 'custom' ? (imgWidth > 1100 ? imgWidth : 1100) : 2084,\n    height: certificateType === 'custom' ? imgHeight : 1471.6,\n  };\n\n  const isOpen = useSelector((state: State) => {\n    return state.interactionsOpen.includes(interactionContext.id);\n  });\n\n  const [scaleFactor, setScaleFactor] = useState(1);\n  const inverseScaleFactor = 1 / scaleFactor;\n\n  const certificateId = `certificate-${id}`;\n  const certificate = useRef<HTMLDivElement>(null);\n\n  const imgSrcToArray = imgSrc.split(/\\./g);\n  const imgType = imgSrcToArray[imgSrcToArray.length - 1];\n\n  useEffect(() => {\n    window.addEventListener('resize', onResize);\n    onResize();\n\n    function onResize() {\n      const certificateWidth = certificate.current?.getBoundingClientRect()\n        .width;\n\n      if (!(certificateWidth && imgSize?.width)) {\n        return;\n      }\n\n      let calculatedScaleFactor = certificateWidth / imgSize?.width;\n\n      if (['svg', 'SVG'].includes(imgType)) {\n        // we're gonna have to do some dancin' queen to support svg\n      }\n\n      setScaleFactor(calculatedScaleFactor);\n    }\n\n    return () => {\n      window.removeEventListener('resize', onResize);\n    };\n  }, [imgSrc, imgId, imgWidth, imgHeight, certificateType, isOpen]);\n\n  return (\n    <CertificateContext.Provider\n      value={\n        {\n          ...CertificateContext,\n          certificateRef: certificate,\n          certificateImgSize: imgSize,\n          scaleFactor,\n          inverseScaleFactor,\n          generatingPDF,\n        } as ICertificateContext\n      }\n    >\n      <div style={{ padding: certificatePadding }}>\n        {certificateType === 'custom' ? (\n          <_>\n            <div\n              style={{\n                position: 'relative',\n                display: 'flex',\n                justifyContent: 'center',\n                alignItems: 'center',\n              }}\n            >\n              <img\n                src={imgSrc}\n                style={{\n                  ...(imgType === 'svg' &&\n                    {\n                      //\n                    }),\n\n                  maxWidth: '100%',\n                  overflow: 'hidden',\n                }}\n                // data-html2canvas-ignore\n              />\n\n              <div\n                ref={certificate}\n                id={`${certificateId}-${certificateType}`}\n                style={{\n                  position: 'absolute',\n                  display: 'flex',\n                  flexDirection: 'column',\n                  justifyContent: 'center',\n                  alignItems: 'center',\n                  left: 0,\n                  top: 0,\n                  width: '100%',\n                  height: '100%',\n                  userSelect: 'none',\n                  pointerEvents: 'none',\n\n                  ...(!window.dev() && {\n                    opacity: imgSize ? 1 : 0,\n                    transition: 'opacity 0.2s',\n                  }),\n                }}\n              >\n                <div\n                  style={{\n                    display: 'flex',\n                    overflow: 'hidden',\n                  }}\n                >\n                  <div\n                    style={{\n                      position: 'absolute',\n                      left: 0,\n                      top: 0,\n                      width: '100%',\n                      height: '100%',\n                      transform: `scale(${scaleFactor})`,\n                      transformOrigin: '0px 0px',\n                      pointerEvents: 'auto',\n                    }}\n                  >\n                    {textFields}\n                  </div>\n                </div>\n              </div>\n            </div>\n          </_>\n        ) : (\n          <div ref={certificate} id={`${certificateId}-${certificateType}`}>\n            <CertificateTemplate {...props} />\n          </div>\n        )}\n      </div>\n\n      <div\n        style={{\n          display: 'flex',\n          justifyContent: 'center',\n          margin: '50px 0 0 0',\n          pointerEvents: 'auto',\n        }}\n        data-html2canvas-ignore\n      >\n        {cloneElement(downloadBtn, {\n          onClick() {\n            setGeneratingPDF(true);\n\n            generatePDFFromCanvas({\n              imgSize,\n              scale: certificateType === 'custom' ? inverseScaleFactor : 2,\n              id: `${certificateId}-${certificateType}`,\n              fileName: name,\n              imgSrc,\n              imgType,\n              certificateType,\n              onComplete() {\n                setGeneratingPDF(false);\n              },\n            });\n\n            if (lockDown === 0) {\n              return;\n            }\n\n            unlockInteraction(interactionContext.id);\n          },\n        })}\n      </div>\n\n      {generatingPDF && (\n        <div\n          style={{\n            position: 'absolute',\n            display: 'flex',\n            justifyContent: 'center',\n            alignItems: 'center',\n            width: '100%',\n            height: '100%',\n            left: 0,\n            top: 0,\n            background: 'rgba(255,255, 255, 0.1)',\n            pointerEvents: 'none',\n          }}\n        >\n          <LoadingSpinner />\n        </div>\n      )}\n    </CertificateContext.Provider>\n  );\n};\n\nconst CertificateTextFields = props => {\n  const { children } = props;\n\n  return (\n    <div\n      css={css({\n        fontSize: 16 * 10,\n      })}\n    >\n      {children}\n    </div>\n  );\n};\n\nconst CertificateTextField = props => {\n  const certificateContext = useContext(CertificateContext);\n\n  const {\n    certificateRef,\n    certificateImgSize,\n    scaleFactor = 1,\n    inverseScaleFactor = 1,\n  } = certificateContext as ICertificateContext;\n\n  const { id, coords, isInputField, children } = props;\n\n  let [txt] = children;\n\n  let txtProps;\n  let content;\n  const txtDoc = useSelector((state: State) => {\n    txtProps = state.blocks[txt.props.id]?.props || {};\n    content = txtProps?.content;\n\n    return new DOMParser().parseFromString(content, 'text/html');\n  });\n\n  const spans = Array.from(txtDoc.querySelectorAll('span'));\n  const strong = Array.from(txtDoc.querySelectorAll('strong'));\n  const em = Array.from(txtDoc.querySelectorAll('em'));\n  const u = Array.from(txtDoc.querySelectorAll('u'));\n\n  const fontSpan = spans.filter(span => {\n    return span.getAttribute('data-type') === 'fontSize';\n  })[0];\n\n  const fontData = spans.reduce(\n    (acc, curr) => {\n      const fontSize = curr.style['font-size'];\n      const fontFamily = curr.style['font-family'];\n      const color = curr.style['color'];\n\n      return {\n        ...acc,\n        ...(fontSize && {\n          fontSize,\n        }),\n        ...(fontFamily && {\n          fontFamily: fontFamily.replace(/\"/g, ''),\n        }),\n        ...(color && {\n          color,\n        }),\n      };\n    },\n    {\n      bold: !!strong?.length,\n      italic: !!em?.length,\n      underline: !!u?.length,\n    }\n  );\n\n  let {\n    fontSize,\n    fontFamily,\n    color,\n    bold,\n    italic,\n    underline,\n  } = fontData as any;\n\n  if (fontSize) {\n    fontSize = Number(fontSize.replace(/rem|px/g, '')) || 1;\n  } else {\n    fontSize = 1;\n  }\n\n  let initializeFontSizeScaleFactor =\n    certificateImgSize?.width && certificateImgSize.width < 1100\n      ? 1\n      : ((certificateImgSize && certificateImgSize?.width) ||\n          certificateDefaultSize?.width) / 1100;\n\n  const [localCoords, setLocalCoords] = useState(coords || {});\n\n  let { x, y, width, height } = localCoords;\n\n  if (!window.dev() && isInputField) {\n    y = `${parseInt(y, 10) + 5}px`;\n  }\n\n  const block = useMemo(() => {\n    return getBlockById(id);\n  }, []);\n\n  const delaySetBlockProps = useRef<ReturnType<typeof setTimeout>>();\n  const certificateTextField = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (!Object.keys(localCoords).length) {\n      return;\n    }\n\n    delaySetBlockProps.current && clearTimeout(delaySetBlockProps.current);\n\n    delaySetBlockProps.current = setTimeout(() => {\n      setBlockProps(block, {\n        coords: localCoords,\n      });\n    }, 300);\n  }, [x, y, width, height]);\n\n  const defaultWidth = 400;\n\n  const defaultHeight =\n    certificateImgSize?.width && certificateImgSize.width < 1100 ? 35 : 75;\n  const defaultLeft =\n    (certificateImgSize?.width || 1100) / 2 - defaultWidth / 2;\n  const defaultTop = (certificateImgSize?.height || 0) / 2 - defaultHeight / 2;\n\n  let paragraphMaxWidth = defaultWidth;\n\n  if (width && typeof width === 'string') {\n    paragraphMaxWidth = Number(width.replace('px', ''));\n  }\n\n  return (\n    <div\n      ref={certificateTextField}\n      id={`chameleon-certificate-text-${id}`}\n      className=\"chameleon-certificate-text fader_-2s\"\n      css={css({\n        position: 'absolute',\n        left: x || defaultLeft,\n        top: y || defaultTop,\n        width: width || defaultWidth,\n        height: height || defaultHeight,\n        outline: window.dev() ? '1px solid lightGrey' : 'none',\n\n        overflow: 'hidden',\n\n        ...resetResponsiveStyles,\n        '@media(min-width: 480px)': {\n          ...resetResponsiveStyles,\n        },\n        '@media(min-width: 767px)': {\n          ...resetResponsiveStyles,\n        },\n\n        '[class*=\"EditableText\"]': {\n          height: '100%',\n          padding: '15px 10px',\n        },\n\n        '[class*=\"ReadOnlyText\"]': {\n          height: '100%',\n          padding: '15px 10px',\n\n          'h1, h2, h3, h4, h5, h6': {\n            lineHeight: 'unset',\n          },\n        },\n\n        '.chameleon-edit-marker': {\n          display: 'none',\n          ...(inverseScaleFactor > 1 && {\n            transform: `scale(${inverseScaleFactor})`,\n            transformOrigin: 'top right',\n          }),\n        },\n\n        '.chameleon-text div p': {\n          fontSize: `${fontSize * initializeFontSizeScaleFactor}rem !important`,\n        },\n      })}\n    >\n      {window.dev() ? (\n        cloneElement(txt, { certificate: true })\n      ) : !isInputField ? (\n        cloneElement(txt, { certificate: true })\n      ) : (\n        <div\n          css={css({\n            position: 'relative',\n            display: 'flex',\n            alignItems: 'center',\n            width: '100%',\n            height: '100%',\n\n            '*': {\n              padding: '0 0 0 10px',\n              fontSize: `${fontSize *\n                initializeFontSizeScaleFactor}rem !important`,\n              fontFamily,\n              fontStyle: italic ? 'italic' : 'normal',\n              fontWeight: bold ? 700 : 'normal',\n              textDecoration: underline ? 'underline' : 'none',\n              color,\n              '.data-input-blur-value-display': {\n                padding: '0 0 0 0px',\n              },\n            },\n\n            input: {\n              padding: '0 0 0 0px',\n\n              ':focus': {\n                padding: '0 0 0 10px',\n              },\n            },\n          })}\n        >\n          <InputText\n            {...{\n              width: '100%',\n              placeholder: txtDoc.body.innerText,\n            }}\n          />\n        </div>\n      )}\n\n      {window.dev() && (\n        <_>\n          <DragHandle\n            key={`DRAG_HANDLE_${scaleFactor + inverseScaleFactor}`}\n            id={id}\n            elementRef={certificateTextField}\n            scaleFactor={scaleFactor}\n            inverseScaleFactor={inverseScaleFactor}\n            onDragEnd={() => {\n              if (!certificateTextField?.current) {\n                return;\n              }\n\n              const { left, top } = getComputedStyle(\n                certificateTextField?.current\n              );\n\n              const parsedLeft = parseInt(left, 10);\n              const parsedTop = parseInt(top, 10);\n\n              setLocalCoords(localCoords => ({\n                ...localCoords,\n                x: `${parsedLeft}px`,\n                y: `${parsedTop}px`,\n              }));\n            }}\n            isInput={isInputField}\n          />\n\n          <ResizeHandle\n            key={`RESIZE_HANDLE_${scaleFactor + inverseScaleFactor}`}\n            id={id}\n            scaleFactor={scaleFactor}\n            inverseScaleFactor={inverseScaleFactor}\n            onDrag={data => {\n              //\n              setLocalCoords(localCoords => ({\n                ...localCoords,\n                width: data.left,\n                height: data.top,\n              }));\n            }}\n            isInput={isInputField}\n          />\n        </_>\n      )}\n    </div>\n  );\n};\n\nexport default Certificate;\nexport { Certificate, CertificateTextFields, CertificateTextField };\n","/** @jsx jsx */\n\nimport { Fragment as _, memo, useContext } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport EditableText from 'components/lib/EditableText';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport { Row, Column } from '@chameleoncreator/creator-ui';\nimport Image from 'components/lib/Image';\nimport Video from 'components/lib/Video';\nimport SVG from 'components/lib/SVG';\nimport ContinueBtn from 'components/lib/ContinueBtn/continueBtn_v2';\nimport EditableButton from 'components/lib/EditableBtn';\nimport Container from 'components/Layouts/ContainerLogical';\nimport { interactionContext as InteractionContext } from './interactionContext';\nimport Media from 'components/lib/Media';\nimport { Block } from '@chameleoncreator/creator-app';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport shouldUpdate from 'services/shouldUpdate';\nimport Certificate, {\n  CertificateTextFields,\n  CertificateTextField,\n} from './Certificate';\nimport CertificateTemplates from './CertificateTemplates';\n\nconst SingleColumnLayout = Row.bind({}) as any;\nSingleColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'column',\n};\n\nconst TwoColumnLayout = Row.bind({}) as any;\nTwoColumnLayout.defaultProps = {\n  ...(Row as any).defaultProps,\n  flexDirection: 'row',\n};\n\nconst Components = {\n  Row,\n  Column,\n  Text: EditableText,\n  CertificateMedia({ children, ...props }) {\n    return <div style={{ padding: '20px 0 20px 0' }}>{children}</div>;\n  },\n  Certificates: ({ children, ...props }) => children,\n  Certificate,\n  CertificateTextFields,\n  CertificateTextField,\n  CertificateTemplate: ({ children, ...props }) => children,\n  CertificateTemplates,\n  Image,\n  TwoColumnLayout,\n  SingleColumnLayout,\n  ContinueButton: ContinueBtn,\n  EditableButton,\n  Video,\n  SVG,\n  Media,\n};\n\nconst CertificateDisplay = memo((props: any) => {\n  const interactionBlock = getBlockById(props.blockId);\n\n  return (\n    <Container\n      id={interactionBlock.id}\n      key={interactionBlock.id}\n      {...interactionBlock.props}\n      {...props}\n    >\n      <InteractionContext.Provider\n        value={{ ...interactionBlock, updateItemsSeen: null }}\n      >\n        {(interactionBlock.children as Block[]).map(child => {\n          return renderBlock(child, Components);\n        })}\n      </InteractionContext.Provider>\n    </Container>\n  );\n}, shouldUpdate as any);\n\nexport default CertificateDisplay;\n","import React, { useState, useEffect, useMemo, useCallback, memo } from 'react';\nimport EmptySection from 'components/lib/EmptySection';\nimport Accordion from 'components/lib/Accordion';\nimport Carousel from 'components/lib/Carousel';\nimport FlipCard from 'components/lib/FlipCard';\nimport FullPageText from 'components/lib/FullPageText';\nimport Multichoice from 'components/lib/Multichoice';\nimport MultichoiceImage from 'components/lib/MultichoiceImage';\nimport Sortation from 'components/lib/Sortation';\nimport Slider from 'components/lib/Slider';\nimport Matching from 'components/lib/Matching';\nimport TextAndImage from 'components/lib/TextAndImage';\nimport HotSpot from 'components/lib/HotSpot';\nimport FiveStarRating from 'components/lib/FiveStarRating';\nimport ResultsPage from 'components/lib/ResultsPage';\nimport ClickAndReveal from 'components/lib/ClickAndReveal';\nimport ContentCards from 'components/lib/ContentCard';\nimport SelectOptions from 'components/lib/SelectOptions';\nimport TopicPortal from 'components/lib/TopicPortal';\nimport TextEntry from 'components/lib/TextEntry';\nimport TextEntryVariable from 'components/lib/TextEntryVariable';\nimport TextEntryQuiz from 'components/lib/TextEntryQuiz';\nimport Assessment from '../lib/Assessment';\nimport AssessmentIntroduction from '../lib/AssessmentIntroduction';\nimport AssessmentQuestion from '../lib/AssessmentQuestion';\nimport AssessmentResults from '../lib/AssessmentResults';\nimport Certificate from 'components/lib/Certificate';\nimport { Block } from '@chameleoncreator/creator-app';\n\nconst InteractionComponents = {\n  Accordion,\n  Carousel,\n  FlipCard,\n  FullPageText,\n  Multichoice,\n  MultichoiceImage,\n  Sortation,\n  Matching,\n  TextAndImage,\n  TextEntry,\n  TextEntryVariable,\n  HotSpot,\n  FiveStarRating,\n  Slider,\n  ResultsPage,\n  ClickAndReveal,\n  SelectOptions,\n  TopicPortal,\n  Assessment,\n  AssessmentIntroduction,\n  AssessmentQuestion,\n  AssessmentResults,\n  ContentCards,\n  TextEntryQuiz,\n  Certificate,\n};\n\ninterface IInteractions_EditorProps {\n  currentTopicId?: string | number;\n  currentInteractionId: string | number | undefined;\n  interactions: Block[];\n}\n\nconst Interactions_Editor = ({\n  currentTopicId,\n  currentInteractionId,\n  interactions,\n}: IInteractions_EditorProps) => {\n  if (!interactions.length) {\n    return <EmptySection />;\n  }\n\n  const interaction = interactions.find(\n    (i: any) => i.id === (currentInteractionId || interactions[0].id)\n  ) as any;\n\n  if (!interaction) {\n    return null;\n  }\n\n  const Interaction = InteractionComponents[interaction?.meta?.subType];\n\n  return (\n    <Interaction\n      key={interaction.id}\n      blockId={interaction.id}\n      isOpen={true}\n      aria-label={`Interaction: ${interaction?.props?.name}`}\n      data={{\n        ...interaction,\n      }}\n    />\n  );\n};\n\nexport default Interactions_Editor;\n","import React from 'react';\nimport EmptySection from 'components/lib/EmptySection';\nimport Accordion from '../lib/Accordion';\nimport Carousel from '../lib/Carousel';\nimport FlipCard from '../lib/FlipCard';\nimport FullPageText from '../lib/FullPageText';\nimport Multichoice from '../lib/Multichoice';\nimport MultichoiceImage from 'components/lib/MultichoiceImage';\nimport Sortation from '../lib/Sortation';\nimport Matching from '../lib/Matching';\nimport TextAndImage from '../lib/TextAndImage';\nimport HotSpot from '../lib/HotSpot';\nimport FiveStarRating from '../lib/FiveStarRating';\nimport ResultsPage from '../lib/ResultsPage';\nimport Slider from 'components/lib/Slider';\nimport ClickAndReveal from '../lib/ClickAndReveal';\nimport SelectOptions from 'components/lib/SelectOptions';\nimport TopicPortal from '../lib/TopicPortal';\nimport TextEntry from 'components/lib/TextEntry';\nimport TextEntryVariable from 'components/lib/TextEntryVariable';\nimport TextEntryQuiz from 'components/lib/TextEntryQuiz';\nimport ContentCards from 'components/lib/ContentCard';\nimport Assessment from '../lib/Assessment';\nimport AssessmentIntroduction from '../lib/AssessmentIntroduction';\nimport AssessmentQuestion from '../lib/AssessmentQuestion';\nimport AssessmentResults from '../lib/AssessmentResults';\nimport Certificate from 'components/lib/Certificate';\nimport { useSelector } from 'react-redux';\nimport { createSelector } from 'reselect';\nimport { State } from 'store/store';\nimport { css } from 'emotion';\n\nconst InteractionComponents = {\n  Accordion,\n  Carousel,\n  FlipCard,\n  FullPageText,\n  Multichoice,\n  MultichoiceImage,\n  Sortation,\n  Slider,\n  Matching,\n  TextAndImage,\n  HotSpot,\n  FiveStarRating,\n  TextEntry,\n  TextEntryVariable,\n  ResultsPage,\n  ClickAndReveal,\n  SelectOptions,\n  TopicPortal,\n  ContentCards,\n  Assessment,\n  AssessmentIntroduction,\n  AssessmentQuestion,\n  AssessmentResults,\n  TextEntryQuiz,\n  Certificate,\n};\n\nconst getInteractionsSeen = createSelector(\n  (state: any) => state.interactionsSeen,\n  interactionsSeen => interactionsSeen\n);\n\nconst Interactions = ({ interactions }) => {\n  const { buttonBackgroundColor, buttonTextColor } = useSelector(\n    (state: any) => {\n      return state.theme;\n    }\n  );\n\n  const { exitComplete } = useSelector((state: State) => {\n    return {\n      exitComplete: state.exitComplete,\n    };\n  });\n\n  if (!interactions.length) {\n    return <EmptySection />;\n  }\n\n  const interactionsSeen = useSelector(getInteractionsSeen);\n\n  const addNextInteractionToInteractionsSeen = interactions.filter(\n    (i: any, index) => {\n      // return true;\n      return index === 0 || interactionsSeen.includes(i.id);\n    }\n  );\n\n  if (addNextInteractionToInteractionsSeen.length !== interactions.length) {\n    addNextInteractionToInteractionsSeen.push(\n      interactions[addNextInteractionToInteractionsSeen.length]\n    );\n  }\n\n  if (exitComplete) {\n    console.log('You may now closse your browser window');\n\n    return (\n      <div\n        style={{\n          width: '100%',\n          height: 'calc(100vh - 70px)',\n          display: 'flex',\n          alignItems: 'center',\n          justifyContent: 'center',\n        }}\n      >\n        <div style={{ textAlign: 'center' }}>\n          <h3 style={{ margin: '16px 16px 36px' }}>\n            You may now close your browser window\n          </h3>\n          <button\n            css={css`\n              position: relative;\n              justify-content: center;\n              align-items: center;\n              width: 230px;\n              min-height: 48px !important;\n              word-break: break-word;\n              line-height: 1.2;\n              cursor: pointer;\n              outline: none;\n              background: ${buttonBackgroundColor} !important ;\n              border: 1px solid ${buttonBackgroundColor} !important ;\n              color: ${buttonTextColor} !important ;\n              font-family: inherit !important;\n              font-size: 14px;\n              font-weight: 400 !important;\n              font-style: normal;\n              box-shadow: 0 0 12px 3px rgba(0, 0, 0, 0.09);\n              transition: background, border, color, opacity 0.2s;\n              margin: 5px 10px;\n              border-radius: 999px;\n              &:hover {\n                opacity: 0.45;\n              }\n            `}\n            onClick={() => {\n              setTimeout(() => {\n                if (window.self === window.top) {\n                  window.close();\n                } else {\n                  window?.top?.close();\n                }\n              }, 100);\n            }}\n          >\n            Close\n          </button>\n        </div>\n      </div>\n    );\n  }\n\n  return addNextInteractionToInteractionsSeen.map((interaction, i) => {\n    const { id } = interaction;\n    const Interaction = InteractionComponents[interaction.meta.subType];\n\n    // console.log(Interaction);\n\n    return (\n      <Interaction\n        key={id}\n        blockId={id}\n        isOpen={i === 0}\n        aria-label={`Interaction: ${interaction.props.name}`}\n        sectionLabel={`Section ${i + 1}`}\n        data={{\n          ...interaction,\n        }}\n      />\n    );\n  });\n};\n\nexport default Interactions;\n","/** @jsx jsx */\n\nimport {\n  Fragment as _,\n  useState,\n  useEffect,\n  useRef,\n  useLayoutEffect,\n  cloneElement,\n} from 'react';\nimport { css, jsx } from '@emotion/core';\nimport { useSelector, useDispatch } from 'react-redux';\nimport Audio_Illustration from 'assets/Character A.png';\n//Audio_Illustration.svg';\nimport { audioAcknowledgedAction } from 'actions/audioAcknowledgedAction';\nimport { State } from 'store/store';\nimport Modal from 'components/UI/Modal';\nimport EditableText from 'components/lib/EditableText';\nimport EditableBtn from 'components/lib/EditableBtn';\nimport Image from 'components/lib/Image';\nimport renderBlock from 'services/apiHelpers/renderBlock';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport setBlockProps from 'services/apiHelpers/setBlockProps';\n\nexport const ModuleHasAudioMessage = ({ onClose }) => {\n  const audioAcknowledged = useSelector((state: State) => {\n    return state.audioAcknowledged;\n  });\n\n  const [, setAudioAcknowledged] = useState<boolean>(audioAcknowledged);\n\n  const moduleHasAudioMessageBlock = useSelector((state: State) => {\n    return Object.values(state.blocks).find(block => {\n      return block?.type === 'ModuleHasAudioMessage';\n    });\n  });\n\n  let renderedModuleHasAudioMessageBlock;\n  if (moduleHasAudioMessageBlock) {\n    renderedModuleHasAudioMessageBlock = renderBlock(\n      moduleHasAudioMessageBlock,\n      {\n        Image,\n\n        Text: EditableText,\n        EditableButton: EditableBtn,\n      }\n    );\n  }\n\n  const [img, txt, okBtn] =\n    renderedModuleHasAudioMessageBlock?.props?.children || [];\n\n  const hasTextContent = txt?.props?.content ? 'true' : 'false';\n\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    if (hasTextContent === 'false') {\n      requestAnimationFrame(() => {\n        setBlockProps(getBlockById(txt.props.id), {\n          content:\n            '<div class=\"chameleon-text-align-center\" data-type=\"textAlignCenter\"><h2 data-type=\"heading-two\"><p data-type=\"paragraph\"><span style=\"font-size:1.75rem\" data-type=\"fontSize\"><strong data-type=\"bold\">This module has audio</strong></span></p></h2></div><div class=\"chameleon-text-align-center\" data-type=\"textAlignCenter\"><h3 data-type=\"heading-three\"><p data-type=\"paragraph\"><span style=\"font-size:1.125rem\" data-type=\"fontSize\">Click Ok to continue</span></p></h3></div>',\n        });\n      });\n    }\n  }, []);\n\n  // window.dev() ||\n  if (audioAcknowledged) {\n    return null;\n  }\n\n  return (\n    <Modal\n      key={hasTextContent}\n      onClose={() => {\n        // dispatch(audioAcknowledgedAction(true));\n        onClose();\n      }}\n    >\n      <div\n        css={css({\n          display: 'flex',\n          flexDirection: 'column',\n          alignItems: 'center',\n          padding: '100px 0',\n        })}\n      >\n        <div>\n          {img ? (\n            <div\n              css={css({\n                width: '100%',\n                minWidth: 290,\n                maxWidth: 540,\n                margin: '0 0 30px 0',\n              })}\n            >\n              {cloneElement(img, {\n                placeholder: Audio_Illustration,\n              })}\n            </div>\n          ) : (\n            <img\n              src={Audio_Illustration}\n              css={css({\n                width: '100%',\n                minWidth: 290,\n                maxWidth: 540,\n                margin: '0 0 30px 0',\n              })}\n            />\n          )}\n        </div>\n\n        {txt ? (\n          txt\n        ) : (\n          <span className=\"chameleon-text\">\n            <h2\n              css={css({\n                margin: '0 0 10px 0',\n                padding: '0 10px',\n                fontWeight: 700,\n                fontSize: 28,\n                textAlign: 'center',\n              })}\n            >\n              This module has audio\n            </h2>\n            <h3\n              css={css({\n                // margin: '0 0 10px 0',\n                fontWeight: 400,\n                fontSize: 18,\n                textAlign: 'center',\n              })}\n            >\n              Click OK to continue\n            </h3>\n          </span>\n        )}\n\n        {okBtn ? (\n          <div\n            css={css({\n              margin: '20px 0 0 0',\n            })}\n          >\n            {cloneElement(okBtn, {\n              onClick() {\n                onClose();\n              },\n            })}\n          </div>\n        ) : (\n          <button\n            className=\"module-has-audio-message-button\"\n            css={css({\n              display: 'flex',\n              justifyContent: 'center',\n              alignItems: 'center',\n              border: 'none',\n              outline: 'none',\n              width: 197,\n              height: 46,\n              margin: '20px 0 0 0',\n              padding: 20,\n              borderRadius: '9999px',\n              background: '#060709',\n              fontSize: 14,\n              color: '#fff',\n              cursor: 'pointer',\n\n              transition: 'opacity 0.2s',\n\n              ':hover': {\n                opacity: 0.8,\n              },\n\n              boxShadow:\n                '-16px -16px 27px rgba(255, 255, 255, 0.5), 16px 16px 27px rgba(37, 59, 176, 0.14393)',\n\n              ':focus': {\n                boxShadow: '0 0 0 2px #fff, 0 0 0 3px #060709 !important',\n              },\n            })}\n            onClick={() => {\n              onClose();\n            }}\n          >\n            Ok\n          </button>\n        )}\n      </div>\n    </Modal>\n  );\n};\n","/** @jsx jsx */\n\nimport {\n  Fragment as _,\n  useState,\n  useRef,\n  useEffect,\n  useMemo,\n  useCallback,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { css, jsx } from '@emotion/core';\nimport getBlockById from 'services/apiHelpers/getBlockById';\nimport { Box } from '@chameleoncreator/creator-ui';\nimport { useCachedResource } from 'services/useCachedResource';\nimport { CHAMELEON_CACHE_v1 } from 'services/imageCache';\nimport { Orbs, getAnimatedOrbsDefaultValues } from './Orbs';\n\nconst Background = ({\n  id,\n  background,\n  backgroundImageOpacity,\n  backgroundBlur = 0,\n}) => {\n  let cachedBackgroundImage = useCachedResource(CHAMELEON_CACHE_v1, background);\n\n  return (\n    <div\n      id={`topic-background-${id}`}\n      style={{\n        position: 'fixed',\n        left: 0,\n        top: 0,\n        width: '100vw',\n        height: '100vh',\n        ...(background && {\n          background: `url('${cachedBackgroundImage ||\n            background}') center / cover no-repeat`,\n        }),\n\n        opacity: backgroundImageOpacity / 100,\n        filter: `blur(${backgroundBlur}px)`,\n        // scale the thing up to not have blurry edges\n        ...(backgroundBlur > 0 && {\n          transformOrigin: 'center',\n          transform: 'scale(1.1)',\n        }),\n        pointerEvents: 'none',\n      }}\n    />\n  );\n};\n\nconst BackgroundWithParallax = props => {\n  const {\n    // state,\n    interactions,\n    background,\n    backgroundImageOpacity,\n    backgroundBlur = 0,\n    parallaxValue = 10,\n    width,\n    height,\n  } = props;\n\n  const cachedBackgroundImage = useCachedResource(\n    CHAMELEON_CACHE_v1,\n    background\n  );\n\n  const [\n    refreshParallaxScrollOnTopicChange,\n    setRefreshParallaxScrollOnTopicChange,\n  ] = useState<boolean>(false);\n\n  const img = useRef<HTMLImageElement | null>(null);\n  const setImageRef = useCallback(node => {\n    img.current = node;\n  }, []);\n\n  const minHeight = `${100 + parallaxValue}vh`;\n\n  useEffect(() => {\n    if (!img.current) {\n      return;\n    }\n\n    const parallaxThrottler = () => {\n      // we can implement whatever more specific throttling approach...\n      requestAnimationFrame(parallax);\n    };\n\n    const parallax = () => {\n      if (!img.current) {\n        return;\n      }\n\n      const { innerHeight, scrollY } = window;\n      const imgTravel = img.current.offsetHeight - innerHeight;\n      const scrollTravel = innerHeight * (interactions.length - 1);\n      const scrollUnit = imgTravel / scrollTravel;\n      const scrollValue = scrollY * scrollUnit;\n\n      if (scrollValue > imgTravel) {\n        return;\n      }\n\n      //\n      img.current.style.transform = `translateY(-${scrollValue}px)`;\n    };\n    //\n\n    window.addEventListener('scroll', parallaxThrottler);\n    window.addEventListener('resize', parallaxThrottler);\n    parallax();\n\n    return () => {\n      window.removeEventListener('scroll', parallaxThrottler);\n      window.removeEventListener('resize', parallaxThrottler);\n    };\n  }, [setImageRef, refreshParallaxScrollOnTopicChange]);\n\n  useEffect(() => {\n    if (!img.current) {\n      return;\n    }\n\n    let tick;\n\n    if (document.body.scrollHeight > window.innerHeight) {\n      const imgHeightOnLoad = img.current.offsetHeight;\n\n      let checkLimit = 0;\n\n      tick = setInterval(() => {\n        if (!img.current) {\n          return;\n        }\n\n        if (img.current.offsetHeight !== imgHeightOnLoad) {\n          clearInterval(tick);\n          setRefreshParallaxScrollOnTopicChange(true);\n        }\n\n        //\n        if (checkLimit >= 300) {\n          clearInterval(tick);\n        }\n        checkLimit += 1;\n        //\n      }, 1);\n    }\n\n    return () => {\n      clearInterval(tick);\n    };\n  }, [setImageRef, setRefreshParallaxScrollOnTopicChange]);\n\n  return (\n    <_>\n      <div\n        style={{\n          position: 'fixed',\n          left: 0,\n          top: 0,\n          width: '100vw',\n          height: '100vh',\n          display: 'flex',\n          justifyContent: 'center',\n          pointerEvents: 'none',\n        }}\n      >\n        <img\n          ref={setImageRef}\n          src={cachedBackgroundImage || background}\n          style={{\n            all: 'initial',\n            position: 'absolute',\n            objectFit: 'cover',\n            minWidth: '100vw',\n            minHeight,\n            opacity: backgroundImageOpacity / 100,\n            filter: `blur(${backgroundBlur}px)`,\n          }}\n        />\n      </div>\n    </_>\n  );\n};\n\nconst GradientBackground = ({ backgroundGradientData }) => {\n  const {\n    backgroundPrimaryColor,\n    backgroundSecondaryColor,\n    backgroundGradientAngle = 0,\n  } = backgroundGradientData || {};\n\n  return (\n    <div\n      css={css({\n        position: 'fixed',\n        width: '100vw',\n        height: '100vh',\n        background: `linear-gradient(${backgroundGradientAngle}deg, ${backgroundSecondaryColor}, ${backgroundPrimaryColor})`,\n      })}\n    />\n  );\n};\n\nconst TopicContainer = props => {\n  const { state, theme, topic, children } = props as any;\n\n  const block: any = getBlockById(topic.id);\n\n  let {\n    src,\n    imageId,\n    width,\n    height,\n    backgroundImage,\n    backgroundImageOpacity = 100,\n    backgroundBlur = 0,\n    parallax = false,\n    parallaxValue = 10,\n    backgroundGradient,\n    backgroundSecondaryColor,\n    backgroundGradientAngle = 0,\n    backgroundGradientFullHeight = false,\n    backgroundStyle,\n  }: // primaryOrbColor,\n  // secondaryOrbColor,\n  // tertiaryOrbColor,\n  // orbOpacity = 100,\n  // orbBlurStrength = 30,\n  // orbSpeed = 2,\n  any = block.props;\n\n  const {\n    primaryOrbColor,\n    secondaryOrbColor,\n    tertiaryOrbColor,\n    orbOpacity,\n    orbBlurStrength,\n    orbSpeed,\n  } = getAnimatedOrbsDefaultValues(block.props);\n\n  const main = useRef<HTMLDivElement>(null);\n\n  // dirty gotta try and cover for legacy backgroundImage\n  if (src) {\n    backgroundImage = src;\n  }\n\n  let backgroundColor =\n    block.props.backgroundColor || theme.backgroundColor || '';\n\n  if (backgroundGradient && backgroundGradientFullHeight) {\n    backgroundColor = `linear-gradient(${backgroundGradientAngle}deg, ${backgroundSecondaryColor}, ${block.props.backgroundColor})`;\n  }\n\n  // this conditional bit evaluates if there was an image in the legacy format. but backgroundStyle is undefined\n  const _backgroundImage_ =\n    backgroundStyle === undefined && backgroundImage\n      ? backgroundImage\n      : backgroundStyle === 'backgroundImage'\n      ? backgroundImage\n      : undefined;\n\n  // legacy was\n  // backgroundStyle === 'backgroundImage' ? backgroundImage : undefined\n\n  return (\n    // @ts-ignore\n    <Box\n      ref={main}\n      className=\"fader_-5s\"\n      id=\"main\"\n      tabindex=\"-1\"\n      css={css`\n        position: relative;\n        background: ${backgroundColor};\n        ${backgroundGradient &&\n          backgroundGradientFullHeight &&\n          `\n        background-size: 100vw\n          ${`calc(100vh * ${children?.props?.interactions.length})`};\n          `}\n      `}\n    >\n      {backgroundGradient && !backgroundGradientFullHeight && (\n        <GradientBackground\n          backgroundGradientData={{\n            backgroundGradientAngle,\n            backgroundPrimaryColor: backgroundColor,\n            backgroundSecondaryColor,\n          }}\n        />\n      )}\n\n      {window.dev() || !parallax ? (\n        <Background\n          id={topic.id}\n          background={_backgroundImage_}\n          backgroundImageOpacity={backgroundImageOpacity}\n          backgroundBlur={backgroundBlur}\n        />\n      ) : (\n        <BackgroundWithParallax\n          // state={state}\n          interactions={children.props.interactions}\n          background={_backgroundImage_}\n          backgroundImageOpacity={backgroundImageOpacity}\n          backgroundBlur={backgroundBlur}\n          parallaxValue={parallaxValue}\n          width={width}\n          height={height}\n        />\n      )}\n\n      {backgroundStyle === 'animatedOrbs' && (\n        <Orbs\n          {...{\n            orbsFor: 'topic',\n            primaryOrbColor,\n            secondaryOrbColor,\n            tertiaryOrbColor,\n            orbOpacity,\n            orbBlurStrength,\n            orbSpeed,\n          }}\n        />\n      )}\n\n      {children}\n    </Box>\n  );\n};\n\nexport default TopicContainer;\n","let REVIEW_MODE_WINDOW;\n\ntry {\n  REVIEW_MODE_WINDOW = window.parent;\n} catch (err) {\n  console.warn('some error getting the parent window. . .', err);\n}\n\ninterface IPostMessageData {\n  type: string;\n  data: string;\n}\n\nexport function reviewToolPostMessage(postMessageData: IPostMessageData) {\n  if (REVIEW_MODE_WINDOW) {\n    // try {\n    //   REVIEW_MODE_WINDOW?.postMessage(\n    //     postMessageData,\n    //     '*.chameleoncreator.com'\n    //   );\n    // } catch (err) {\n    //   if (window.dev()) {\n    //     REVIEW_MODE_WINDOW?.postMessage(postMessageData, '*');\n    //   }\n    // }\n    REVIEW_MODE_WINDOW?.postMessage(postMessageData, '*');\n  }\n}\n\nexport function reviewToolPostMessageOnMessage(\n  fN: (e: { [key: string]: any }) => void\n): () => void {\n  window.addEventListener('message', fN);\n\n  return () => {\n    window.removeEventListener('message', fN);\n  };\n}\n","import isAndroidSamsung from 'services/isAndroidSamsung';\nimport isAppleComputerInc from 'services/isAppleComputerInc';\nimport getStore from 'services/getStore';\nimport { State } from 'store/store';\n\nconst store = getStore();\nconst isDevice = isAppleComputerInc() || isAndroidSamsung();\n\nexport const getModuleIsFreeScrollingDesktop = () => {\n  const state = store.getState();\n\n  const moduleIsFreeScrollingDesktop =\n    state.theme?.moduleIsFreeScrolling?.desktop || false;\n\n  return !isDevice && moduleIsFreeScrollingDesktop;\n};\n\nexport const getModuleIsFreeScrollingDevice = () => {\n  const state = store.getState();\n\n  const moduleIsFreeScrollingDevice =\n    state.theme?.moduleIsFreeScrolling?.device || false;\n\n  return isDevice && moduleIsFreeScrollingDevice;\n};\n","import getStore from 'services/getStore';\nimport pubSub from 'services/pubSub';\nimport isAndroidSamsung from 'services/isAndroidSamsung';\nimport isAppleComputerInc from 'services/isAppleComputerInc';\nimport {\n  getModuleIsFreeScrollingDesktop,\n  getModuleIsFreeScrollingDevice,\n} from 'services/getModuleIsFreeScrolling';\nimport { reviewToolPostMessage } from 'services/reviewToolPostMessage';\nimport { speechSynthesisCancel } from 'services/speechSynthesisCancel';\nimport { getSCORMInitialized } from 'components/lib/Scorm/SCORM';\n\nconst store = getStore();\n\nconst isDevice = isAppleComputerInc() || isAndroidSamsung();\n\n// console.log({\n//   isAppleComputerInc: isAppleComputerInc(),\n//   isAndroidSamsung: isAndroidSamsung(),\n//   isDevice,\n// });\n\nlet interactionsSeen = [] as any[];\n\npubSub.subscribe('RESET_MODULE', () => {\n  interactionsSeen = [];\n});\n\nlet debounceScrolling;\n\nlet oldTopic;\nlet newTopic;\nlet topicUpdated;\n\nlet oldPosition = 0;\nlet newPosition = 0;\n\nconst clearHistory = () => {\n  requestAnimationFrame(\n    () =>\n      (window.location.hash = Math.random()\n        .toString(16)\n        .substr(2, 8))\n  );\n  (window as any).locationHistory = null;\n};\n\n// when the pattern settles. all this will just publish an object with\n// all this\n\nconst windowScrollInfo = (e, currentTopic) => {\n  if (currentTopic) {\n    newTopic = currentTopic;\n  }\n\n  clearTimeout(debounceScrolling);\n\n  debounceScrolling = setTimeout(() => {\n    let scrollDirection;\n\n    if (oldTopic !== newTopic) {\n      topicUpdated = true;\n      oldTopic = newTopic;\n    } else {\n      topicUpdated = false;\n    }\n\n    if (!topicUpdated) {\n      newPosition = window.scrollY;\n\n      if (oldPosition !== newPosition) {\n        scrollDirection = oldPosition < newPosition ? 'down' : 'up';\n\n        // either direction. might change. us direction for other things. . .\n        if (\n          window.locationHistory &&\n          ['up', 'down'].includes(scrollDirection)\n        ) {\n          // console.log({ 'window.persistHistory': window.persistHistory });\n          // if persistHistory is true we do not want to clear it automatically here on scroll\n          if (!window.persistHistory) {\n            clearHistory();\n          }\n        }\n\n        oldPosition = newPosition;\n      }\n    }\n\n    const sections = Array.from(document.querySelectorAll('section'));\n\n    const sectionsInView: any = sections.reduce(\n      ((acc, curr, index) => {\n        const { top, height } = curr.getBoundingClientRect();\n\n        return [\n          ...acc,\n          {\n            section: curr,\n            id: curr.id.replace(/i/, ''),\n            inView: height\n              ? top >= 0 - height / 2 && top <= window.innerHeight / 2\n              : false,\n            index,\n          },\n        ];\n      }) as any,\n      []\n    );\n\n    const sectionInView = sectionsInView.find(s => s.inView);\n\n    if (sectionInView && window['sectionInView']?.id !== sectionInView?.id) {\n      // console.log(\n      //   'only update sectionInView if defined and it changes !!!',\n      //   sectionInView.id\n      // );\n\n      window['sectionInView'] = sectionInView;\n\n      // window.speechSynthesis.cancel();\n      speechSynthesisCancel();\n\n      // moving the focus biz back to the continue / back button. . .\n      sections.forEach(section => {\n        //\n        //\n        if (!isDevice) {\n          // if we on desktop && we not freeScrolling\n          if (!getModuleIsFreeScrollingDesktop()) {\n            section.setAttribute('aria-hidden', 'true');\n            section.removeAttribute('role');\n          }\n        }\n      });\n\n      if (sectionInView) {\n        if (!isDevice) {\n          // if we on desktop && we not freeScrolling\n          if (!getModuleIsFreeScrollingDesktop()) {\n            sectionInView.section.setAttribute('aria-hidden', 'false');\n            sectionInView.section.setAttribute('role', 'main');\n          }\n        } else {\n          // we are on a device. check if we freeScrolling\n          if (!getModuleIsFreeScrollingDevice()) {\n            const { activeElement } = document;\n            const activeElementIsInput =\n              activeElement &&\n              ['input', 'textarea'].indexOf(\n                activeElement.tagName.toLowerCase()\n              ) !== -1;\n\n            // only give focus back to section if..\n            if (!activeElementIsInput) {\n              sectionInView.section.focus({\n                preventScroll: true,\n              });\n            }\n          }\n        }\n\n        pubSub.publish('SECTION_IN_VIEW', {\n          sectionInView,\n        });\n\n        // console.log('SCORM INITIALIZED ?', getSCORMInitialized());\n        // only fire if we're not connected to scorm\n        // window.reviewModeEnabled &&\n        if (!getSCORMInitialized()) {\n          reviewToolPostMessage({\n            type: 'currentInteractionId',\n            data: sectionInView.id,\n          });\n        }\n      }\n    }\n\n    if (!window['sectionInView']) {\n      return;\n    }\n\n    if (!interactionsSeen.includes(window['sectionInView'].id)) {\n      interactionsSeen.push(window['sectionInView'].id);\n\n      // console.log();\n\n      store.dispatch({\n        type: 'UPDATE_INTERACTIONS_SEEN',\n        data: {\n          id: window['sectionInView'].id,\n        },\n      });\n    }\n  }, 100);\n};\n\nwindow.addEventListener('scroll', e => windowScrollInfo(e, null));\n\nexport default windowScrollInfo;\n","import { useEffect, useContext } from 'react';\n\nimport { HostingContext, SessionState, Session } from 'hosting/context';\nimport { useDispatch } from 'react-redux';\nimport {\n  transformListFromSIdToId,\n  transformListFromIdToSId,\n} from 'services/transformListBetweenIdSId';\nimport {\n  transformAssessmentsToSuspendData,\n  transformAssessmentsFromSuspendData,\n} from 'services/transformAssessmentsToAndFromSuspendData';\nimport getStore from 'services/getStore';\nimport { updateScoreAction } from 'actions/updateScoreAction';\nimport {\n  // transformScoreDataFromIdToSId,\n  transformScoreDataFromSIdToId,\n} from 'services/transformScoreData';\n\ninterface ExtendedSession extends Session {\n  learning_module_session?: { [key: string]: any };\n}\n\nexport const ReadsHostingContext = () => {\n  const hostingContext = useContext(HostingContext);\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    // console.log('reads hosting context', hostingContext);\n    if (!hostingContext) {\n      return;\n    }\n\n    hostingContext.current().then(($: ExtendedSession) => {\n      //\n      //\n      console.log($);\n\n      const { session_data } = $.learning_module_session || {};\n      const { location } = session_data;\n      const {\n        scoreData = {},\n        interactionsSeen = [],\n        interactionsLocked = [],\n        landingPagesSeenState = {},\n        assessments = {},\n        moduleVariables = {},\n      } = session_data?.data || {};\n\n      const state = getStore().getState();\n      const { idToSIdMap, sIdToIdMap } = state;\n\n      const transformedInteractionsSeen = transformListFromSIdToId(\n        sIdToIdMap,\n        interactionsSeen\n      );\n\n      const transformedInteractionsLocked = transformListFromSIdToId(\n        sIdToIdMap,\n        interactionsLocked\n      );\n\n      let transformedAssessments = assessments;\n      if (Object.keys(assessments).length) {\n        transformedAssessments = transformAssessmentsFromSuspendData(\n          assessments,\n          state\n        );\n      }\n\n      //\n\n      let transformedScoreData = { ...scoreData };\n      if (scoreData) {\n        transformedScoreData = transformScoreDataFromSIdToId(scoreData, state);\n      }\n\n      dispatch({\n        type: 'LOAD_SUSPEND_DATA',\n        data: {\n          scoreData: transformedScoreData,\n          interactionsSeen: transformedInteractionsSeen,\n          interactionsLocked: transformedInteractionsLocked,\n          landingPagesSeenState,\n          assessments: transformedAssessments,\n          moduleVariables,\n        },\n      });\n\n      if (location) {\n        console.log('LOAD_BOOKMARK_DATA', location);\n\n        dispatch({\n          type: 'LOAD_BOOKMARK_DATA',\n          data: location,\n        });\n      }\n\n      if (interactionsSeen.length) {\n        console.log('UPDATE_INTERACTIONS_SEEN', transformedInteractionsSeen);\n\n        dispatch({\n          type: 'UPDATE_INTERACTIONS_SEEN',\n          data: transformedInteractionsSeen,\n        });\n      }\n\n      let hasReloadedScoreData;\n      if (scoreData && !hasReloadedScoreData) {\n        Object.keys(scoreData).forEach((entry: any, index) => {\n          dispatch(updateScoreAction(entry, scoreData[entry]));\n        });\n\n        hasReloadedScoreData = true;\n      }\n    });\n  }, []);\n\n  return null;\n};\n","/** @jsx jsx */\n\nimport { Block } from '@chameleoncreator/creator-app';\nimport { jsx } from '@emotion/core';\nimport { setExitAction } from 'actions/setExitAction';\nimport { ErrorModal } from 'components/errorModal';\nimport Header_v2 from 'components/Header_v2/Header_v2';\nimport { AudioPlayer } from 'components/Layouts/AudioPlayer';\nimport { ThemeProvider } from 'emotion-theming';\nimport { createScorm } from 'factories/scorm';\nimport { SCORM } from 'pipwerks-scorm-api-wrapper';\nimport {\n  createContext,\n  useEffect,\n  useLayoutEffect,\n  useState,\n  useMemo,\n} from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport {\n  getBlock,\n  getInteractionsFromTopicAndState,\n  getTopicGroupFromState,\n  getTopicsFromGroup,\n} from 'selectors/block';\nimport getInteractionsInTopic from 'services/apiHelpers/getInteractionsInTopic';\nimport getTopics from 'services/apiHelpers/getTopics';\nimport setCurrentTopic from 'services/apiHelpers/setCurrentTopic';\nimport setCurrentInteraction from 'services/apiHelpers/setCurrentInteraction';\nimport getCurrentLocation from 'services/getCurrentLocation';\nimport getAllInteractions from 'services/apiHelpers/getAllInteractions';\nimport { State } from 'store/store';\nimport { theme } from 'theme';\nimport { SCORMRenderer } from '../lib/Scorm/SCORM';\nimport AssessmentContainer from './AssessmentContainer';\nimport Bookmark from './Bookmark';\nimport { FontManager } from './Fonts';\nimport Interactions_Editor from './Interactions_Editor';\nimport Interactions_Module from './Interactions_Module';\nimport { ModuleHasAudioMessage } from './ModuleHasAudioMessage';\nimport pubSub from 'services/pubSub';\nimport TopicContainer from './TopicContainer';\nimport windowScrollInfo from './windowScrollInfo';\nimport {\n  reviewToolPostMessage,\n  reviewToolPostMessageOnMessage,\n} from 'services/reviewToolPostMessage';\nimport { getSCORMInitialized } from 'components/lib/Scorm/SCORM';\nimport { ReadsHostingContext } from './ReadsHostingContext';\nimport { getNavLoadingIndicator } from './navLoadingIndicator';\nimport { removeUndefinedEntriesFromObject } from 'services/removeUndefinedEntriesFromObject';\nimport { removeFalseyEntriesFromObject } from 'services/removeFalseyEntriesFromObject';\nimport getBlockById from 'services/apiHelpers/getBlockById';\n\n// window.location.hash = '';\nif (window.location.hash !== '') {\n  // something\n}\n\nlet moduleHasAudio;\nlet audioAcknowledged;\n\nexport const getSCORMVersion = () => {\n  return SCORM.version;\n};\n\nconst setCompletionStatus = scormVersion => {\n  if (scormVersion === '1.2') {\n    SCORM.set('cmi.core.lesson_status', 'completed');\n  } else {\n    SCORM.set('cmi.completion_status', 'completed');\n  }\n};\n\nexport const ModuleContext = createContext({\n  passMark: 80,\n  exit: () => {},\n  setComplete: () => {},\n  setCompleteAndExit: () => {},\n  resetModule: () => {},\n});\n\nexport const chameleonOrigins = [\n  'https://review.staging.chameleoncreator.com',\n  'https://staging.v2.chameleoncreator.com',\n  'https://v2.chameleoncreator.com',\n  'https://review.chameleoncreator.com',\n  'http://localhost:8000',\n  'http://localhost:3002',\n  'http://localhost:3011',\n];\n\nconst Module = props => {\n  //\n  // bookmarkStates\n  // 0 no bookmarking\n  // 1 pending\n  // 2 resolved\n  const [bookmarkState, updateBookmarkState] = useState<0 | 1 | 2>(0);\n\n  const [editModuleHasAudioMessage, setEditModuleHasAudioMessage] = useState<\n    boolean\n  >(false);\n\n  const [, setAudioAcknowledged] = useState<boolean>(window.dev() || false); // double negative ?\n\n  let bookmarkingEnabled = useSelector(\n    (state: State) => state.theme.enableBookmarking\n  );\n\n  if (bookmarkingEnabled === undefined) {\n    // if the theme hasn't been manually updated 'bookmarkingEnabled' will be undefined in the theme.js output\n    // in that case we interpret undefined as default/true\n    bookmarkingEnabled = true;\n  }\n\n  const topicId = useSelector((state: State) => {\n    return state.currentTopic;\n  });\n\n  const interactionId = useSelector((state: State) => {\n    return state.currentInteraction;\n  });\n\n  const blocks = useSelector((state: State) => {\n    return state.blocks;\n  });\n\n  const rootBlockId = useSelector((state: State) => {\n    return state.rootBlockId;\n  });\n\n  const loadingSpinnerColor = useSelector((state: State) => {\n    return state.theme.loadingSpinnerColor;\n  });\n\n  const group = useMemo(() => {\n    return getTopicGroupFromState({ blocks } as State);\n  }, [topicId]);\n\n  const topicList = useMemo(() => {\n    return getTopicsFromGroup({ blocks } as State, group);\n  }, [topicId]);\n\n  const dispatch = useDispatch();\n\n  const currentTopicIndex = topicId\n    ? topicList.findIndex(t => t.id === topicId)\n    : 0;\n\n  const topic: any = topicList[currentTopicIndex > -1 ? currentTopicIndex : 0];\n\n  // update has with topic name\n  // do we want to keep the spaces ' ' > %20\n  // assume screen readers etc know how to manage them ( and not read that as literal )\n  // const parsedTopicName = topic.props.name.replace(/#/g, '');\n  // window.location.hash = parsedTopicName;\n\n  let interactions = topic\n    ? getInteractionsFromTopicAndState(\n        { blocks } as State,\n        getBlock(blocks, topic.id)\n      )\n    : [];\n\n  const interactionNameUpdates = interactions.reduce((acc, curr) => {\n    return `${acc}${curr?.props?.name}`;\n  }, '');\n\n  if (!window.dev()) {\n    // only run this once. in output and when moduleHasAudio is undefined\n    //\n    if (moduleHasAudio === undefined) {\n      moduleHasAudio = getAllInteractions().some(i => {\n        const { includeAudio, audioSrc } = getBlockById(i)?.props || {};\n\n        return includeAudio && audioSrc;\n      });\n\n      console.log('checking for module has audio', { moduleHasAudio });\n    }\n  }\n\n  let scormBlock = Object.values(blocks).find(\n    ((b: Block) => b.type === 'SCORM') as any\n  ) as Block;\n\n  if (!scormBlock) {\n    scormBlock = createScorm();\n  }\n\n  const runExit = () => {\n    if (scormBlock.props!.scormControlledExit) {\n      dispatch(setExitAction());\n    } else {\n      dispatch(setExitAction());\n      setTimeout(() => {\n        window?.top?.close();\n      }, 200);\n    }\n  };\n\n  const moduleBlock = Object.values(blocks).find(\n    ((b: Block) => b.type === 'Module') as any\n  ) as Block;\n  let passMark = moduleBlock.props!.passMark || 80;\n\n  const TopicAssessmentContainer = !topic.props.asAssessment\n    ? TopicContainer\n    : AssessmentContainer;\n\n  const interactionsInTopics = topicList.reduce((acc, topic) => {\n    return {\n      ...acc,\n      [topic.id]: getInteractionsInTopic(topic),\n    };\n  }, {});\n\n  let showModuleHasAudioMessage =\n    moduleHasAudio && !audioAcknowledged && bookmarkState !== 1;\n\n  if (window.dev()) {\n    showModuleHasAudioMessage = editModuleHasAudioMessage;\n  }\n\n  useLayoutEffect(() => {\n    windowScrollInfo(null, topicId);\n  }, [topicId]);\n\n  useEffect(() => {\n    if (!window.dev()) {\n      return;\n    }\n\n    const pS = pubSub.subscribe(\n      'SHOW_MODULE_HAS_AUDIO_MESSAGE',\n      ({ showModuleHasAudioMessage }) => {\n        setEditModuleHasAudioMessage(showModuleHasAudioMessage);\n      }\n    );\n\n    return () => {\n      pS();\n    };\n  }, []);\n\n  useEffect(() => {\n    // put this somewhere else\n    const compareIds = (topicInteraction, id) => {\n      return [topicInteraction.props.sId, topicInteraction.id]\n        .map(sId => String(sId))\n        .includes(id);\n    };\n\n    const navToHash = e => {\n      e.preventDefault();\n\n      let hash: any = String(window.location.hash)\n        .replace(/#/, '')\n        .split('/');\n\n      if (hash.length !== 2) {\n        return;\n      }\n\n      // for legacy we'll use the id. format will be the same as\n      const [topicSid, interactionSId] = hash;\n\n      const targetTopic = getTopics().find((t: any) => compareIds(t, topicSid));\n\n      // this'll only be for when we're testing\n      if (!targetTopic) {\n        return;\n      }\n\n      const interactionsInTopic = interactionsInTopics[targetTopic.id];\n\n      const targetInteraction = interactionsInTopic.find((i: any) =>\n        compareIds(i, interactionSId)\n      );\n\n      // be safe. bail if not\n      if (!targetInteraction) {\n        return;\n      }\n\n      // if we're here. we're gonna nav\n      // set history\n      (window.locationHistory as any) = getCurrentLocation();\n      //\n\n      pubSub.publish('MODULE_NAVIGATION', {\n        navToHash: 'starts',\n      });\n\n      const targetInteractionIndex = interactionsInTopic.findIndex((i: any) =>\n        compareIds(i, interactionSId)\n      );\n\n      const updatedInteractionsSeen: string[] = [];\n      const updatedInteractionsOpen: string[] = [];\n\n      interactionsInTopic.forEach((i: any, index: number) => {\n        if (index <= targetInteractionIndex) {\n          updatedInteractionsSeen.push(i.id);\n          updatedInteractionsOpen.push(i.id);\n        }\n      });\n\n      dispatch({\n        type: 'UPDATE_INTERACTIONS_SEEN',\n        data: updatedInteractionsSeen,\n      });\n\n      dispatch({\n        type: 'UPDATE_INTERACTIONS_OPEN',\n        data: updatedInteractionsOpen,\n      });\n\n      targetTopic?.id && setCurrentTopic(targetTopic.id);\n\n      const targetTopicContainerElement = document.querySelector(\n        '#main'\n      ) as HTMLElement;\n\n      // const {\n      //   backgroundColor,\n      //   backgroundSecondaryColor,\n      //   backgroundGradient,\n      //   backgroundGradientAngle = 0,\n      //   src,\n      // } = targetTopic?.props || {};\n\n      // we were previously 'hiding' the topic so we could fade it back in later\n      // let's leave it alone and use the preloader as the transitioning effect\n      if (targetTopicContainerElement) {\n        // targetTopicContainerElement.classList.remove('fader_-5s');\n        // targetTopicContainerElement.style.opacity = '0';\n      }\n\n      const targetSectionId = `#i${targetInteraction.id}`;\n      const targetSectionElement = document.querySelector(targetSectionId);\n\n      const backgroundColor =\n        targetTopic?.props?.backgroundColor ||\n        targetInteraction?.props?.background ||\n        targetInteraction?.props?.backgroundColor;\n\n      const {\n        // backgroundColor,\n        backgroundSecondaryColor,\n        backgroundGradient,\n        backgroundGradientAngle = 0,\n        backgroundBlur,\n        backgroundImageOpacity = 100,\n        src,\n      } = {\n        ...targetTopic?.props,\n        // ...removeFalseyEntriesFromObject(\n        ...removeUndefinedEntriesFromObject(targetInteraction?.props),\n        // ),\n      } as any;\n      //\n\n      window.persistHistory = true;\n\n      // remove the navLoadingIndicator if it exists. no dubUps !!!\n      let navLoadingIndicator = document.querySelector(\n        '#chameleon-nav-loading-indicator'\n      ) as HTMLDivElement;\n\n      if (navLoadingIndicator && document.body.contains(navLoadingIndicator)) {\n        document.body.removeChild(navLoadingIndicator);\n      }\n\n      navLoadingIndicator = getNavLoadingIndicator(\n        src || backgroundColor ? 'transparent' : loadingSpinnerColor\n      ); // only showing the animated bubbles if. . .\n\n      // const topicBackground = document.querySelector(\n      //   `#topic-background-${targetTopic.id}`\n      // );\n      //\n      // let topicBackgroundStyles;\n      //\n      // if (topicBackground) {\n      //   topicBackgroundStyles = window.getComputedStyle(topicBackground);\n      // }\n\n      // UPDATE\n      // in this version we account for background color etc on both topic > then interaction\n      // so our 'flash' is always the background color\n\n      // default the preloader to hidden\n      // let navLoadingIndicatorVisibility = 'hidden';\n      // navLoadingIndicator.style.visibility = 'hidden';\n\n      // but if there's these values we can use. be visible to use them\n      //\n      const backgroundColorOrGradient = backgroundGradient\n        ? `linear-gradient(${backgroundGradientAngle}deg, ${backgroundSecondaryColor}, ${backgroundColor})`\n        : backgroundColor || '#ffffff';\n\n      if (src || backgroundColorOrGradient) {\n        navLoadingIndicator.style.background = src\n          ? `url('${src}') center / cover no-repeat, ${backgroundColorOrGradient}`\n          : backgroundColorOrGradient;\n\n        // navLoadingIndicatorVisibility = 'visible';\n        navLoadingIndicator.style.opacity = String(\n          backgroundImageOpacity / 100\n        );\n\n        if (!!backgroundBlur) {\n          navLoadingIndicator.style.filter = `blur(${backgroundBlur}px)`;\n          navLoadingIndicator.style.transformOrigin = 'center';\n          navLoadingIndicator.style.transform = 'scale(1.1)';\n        }\n      }\n\n      // navLoadingIndicator.style.visibility = navLoadingIndicatorVisibility;\n\n      document.body.appendChild(navLoadingIndicator);\n\n      let locationTimeOut = 0;\n\n      const tick = setInterval(() => {\n        if (\n          locationTimeOut > 2 &&\n          document.body.contains(navLoadingIndicator)\n        ) {\n          console.log(\n            locationTimeOut,\n            document.body.contains(navLoadingIndicator),\n            'we should see the navLoadingIndicator now !!!'\n          );\n\n          navLoadingIndicator.style.visibility = 'visible';\n        }\n\n        if (\n          (targetSectionElement &&\n            targetSectionElement.getBoundingClientRect().top < 1) ||\n          locationTimeOut >= 10\n        ) {\n          console.log(\n            `module has navigated to ${targetSectionId} in ${locationTimeOut *\n              100} milliseconds ( or timed out at max 1 second ))`\n          );\n\n          if (document.body.contains(navLoadingIndicator)) {\n            const t = 300; // ms\n            navLoadingIndicator.style.opacity = '0';\n            navLoadingIndicator.style.transition = `opacity ${t / 1000}s`;\n\n            // we could do better to use an onTransitionEnd perhaps. . .\n            setTimeout(() => {\n              document.body.removeChild(navLoadingIndicator);\n            }, t);\n          }\n\n          // not needed if we're not hiding the targetTopicContainerElement first. . .\n          // targetTopicContainerElement.style.opacity = '1';\n          // targetTopicContainerElement.style.transition = 'opacity 0.25s';\n\n          setTimeout(() => {\n            window.persistHistory = false;\n          }, 750);\n\n          clearInterval(tick);\n        }\n        //\n        window.location.href = targetSectionId;\n        locationTimeOut += 1;\n      }, 100);\n\n      pubSub.publish('MODULE_NAVIGATION', {\n        navToHash: 'ends',\n      });\n    };\n\n    // only add this listener when NOT in dev\n    // means no weirdo nav while editing\n    if (!window.dev()) {\n      window.addEventListener('hashchange', navToHash);\n    }\n\n    // maybe we can toggle all this on / off when scrolling\n\n    return () => {\n      window.removeEventListener('hashchange', navToHash);\n    };\n  }, []);\n\n  useEffect(() => {\n    // TODO implement this check correctly\n\n    let reviewModeEnabled;\n\n    try {\n      const href = window.top?.location?.href;\n\n      reviewModeEnabled = href && /\\/review\\//g.test(href);\n    } catch (err) {\n      console.warn(err);\n    }\n\n    console.log({\n      'window.reviewModeEnabled': window.reviewModeEnabled,\n      reviewModeEnabled,\n    });\n\n    if (!(window.reviewModeEnabled || reviewModeEnabled)) {\n      return;\n    }\n\n    // do not do any of this if we're connected to scorm\n    const SCORMInitialized = getSCORMInitialized();\n    if (SCORMInitialized) {\n      return;\n    }\n    //\n\n    const moduleTopicsAndInteractionsData = topicList.reduce((acc, curr) => {\n      const { id } = curr;\n\n      type CurrProps = {\n        sId: string;\n        name: string;\n      };\n\n      const { sId, name } = curr.props as CurrProps;\n\n      // console.time('interactionsInTopic');\n      // const interactionsInTopic = getInteractionsFromTopicAndState(\n      //   { blocks } as State,\n      //   getBlock(blocks, curr.id)\n      // );\n\n      const interactionsInTopic = interactionsInTopics[curr.id];\n\n      // console.timeEnd('interactionsInTopic');\n\n      return {\n        ...acc,\n        [id]: {\n          id,\n          sId,\n          name,\n\n          interactions: interactionsInTopic.map(interaction => {\n            const { id } = interaction;\n            const { sId, name } = interaction.props as CurrProps;\n            return {\n              id,\n              sId,\n              name,\n            };\n          }),\n        },\n      };\n    }, {});\n\n    reviewToolPostMessage({\n      type: 'moduleTopicsAndInteractionsData',\n      data: JSON.stringify(moduleTopicsAndInteractionsData),\n    });\n\n    const navToInteractionMessage = reviewToolPostMessageOnMessage(e => {\n      const { origin } = e;\n\n      if (!chameleonOrigins.includes(origin)) {\n        return;\n      }\n\n      const { type, data: location } = e.data;\n\n      if (type === 'navToInteraction') {\n        console.log(type, location);\n\n        try {\n          if (window.dev()) {\n            const [topicSId, interactionSId] = location.split('/');\n\n            let topic;\n            let interaction;\n\n            const blockList = Object.values(blocks) as Block[];\n\n            for (let i = 0; i < blockList.length; i += 1) {\n              const b = blockList[i];\n              const sId = b?.props?.sId;\n\n              if (b.type === 'Topic' && sId == topicSId) {\n                topic = b;\n              }\n\n              if (b.type === 'Interaction' && sId == interactionSId) {\n                interaction = b;\n              }\n\n              if (topic && interaction) {\n                break;\n              }\n            }\n\n            if (topic && topicId !== topic.id) {\n              setCurrentTopic(topic.id);\n            }\n\n            if (interaction) {\n              setTimeout(() => {\n                setCurrentInteraction(interaction.id);\n              }, 100);\n            }\n\n            return;\n          } else {\n            if (location) {\n              window.location.hash = location;\n            }\n          }\n        } catch (err) {\n          //\n        }\n      }\n    });\n\n    return () => {\n      navToInteractionMessage();\n    };\n  }, [\n    topicList.length,\n    topic.props.name,\n    interactions.length,\n    interactionNameUpdates,\n  ]);\n\n  useLayoutEffect(() => {\n    if (!rootBlockId) {\n      return;\n    }\n    window.scrollTo(0, 0);\n  }, [currentTopicIndex]);\n\n  if (!rootBlockId) {\n    return null;\n  }\n\n  return (\n    <ModuleContext.Provider\n      value={{\n        passMark,\n        exit: runExit,\n        setComplete() {\n          console.log('setComplete()');\n          setCompletionStatus(getSCORMVersion());\n        },\n        setCompleteAndExit() {\n          console.log('setCompleteAndExit()');\n          setCompletionStatus(getSCORMVersion());\n\n          requestAnimationFrame(() => {\n            runExit();\n          });\n        },\n        resetModule() {\n          const firstInteractionId = (getAllInteractions()[0] as any) as string;\n\n          const location = `${topicList[0]?.props?.sId}/${blocks[firstInteractionId]?.props?.sId}`;\n\n          pubSub.publish('RESET_MODULE', {});\n\n          dispatch({\n            type: 'RESET_MODULE',\n            data: {},\n          });\n\n          window.location.hash = location;\n        },\n      }}\n    >\n      <ReadsHostingContext />\n\n      <FontManager />\n      <ErrorModal>\n        {error => (\n          <div>\n            <h1>Oh no :(</h1>\n            <p>Something has gone wrong. The error message provided is:</p>\n            <p>\n              <strong>\"{error.message}\".</strong>\n            </p>\n            <p>\n              We have been alerted to this error, however if it is consistently\n              occuring please fell free to notify us by clicking on the support\n              button in the bottom right hand corner.\n            </p>\n          </div>\n        )}\n      </ErrorModal>\n      <SCORMRenderer key=\"scorm\" {...scormBlock} />\n      <ThemeProvider theme={theme}>\n        <Header_v2 currentTopicIndex={currentTopicIndex} topics={topicList} />\n\n        <TopicAssessmentContainer\n          key={`topic${currentTopicIndex}`}\n          // state={state}\n          theme={theme}\n          topic={topic}\n        >\n          {window.dev() ? (\n            <Interactions_Editor\n              currentTopicId={topic.id}\n              currentInteractionId={interactionId}\n              interactions={interactions}\n            />\n          ) : (\n            <Interactions_Module\n              key={interactions[0]?.id}\n              interactions={interactions}\n            />\n          )}\n        </TopicAssessmentContainer>\n\n        <div\n          id=\"menu-portal\"\n          style={{\n            position: 'fixed',\n            zIndex: 2147483647,\n          }}\n        />\n      </ThemeProvider>\n\n      {showModuleHasAudioMessage && (\n        <ModuleHasAudioMessage\n          onClose={() => {\n            setAudioAcknowledged((audioAcknowledged = true));\n          }}\n        />\n      )}\n\n      {moduleHasAudio && (audioAcknowledged || window.dev()) && (\n        <AudioPlayer key={window.dev() ? interactionId : ''} />\n      )}\n\n      {bookmarkingEnabled && (\n        <Bookmark updateBookmarkState={updateBookmarkState} />\n      )}\n    </ModuleContext.Provider>\n  );\n};\n\nexport default Module;\n","import Module from './Module_v2';\n\nexport default Module;\n","\nexport const setExitAction = () => {\n  return {\n    type: 'SET_EXIT',\n    data: true,\n  };\n};\n","export function getNavLoadingIndicator(\n  loadingSpinnerColor = '#000'\n): HTMLDivElement {\n  const navLoadingIndicator = document.createElement('div');\n  navLoadingIndicator.id = 'chameleon-nav-loading-indicator';\n  navLoadingIndicator.style.position = 'fixed';\n  navLoadingIndicator.style.left = '0px';\n\n  navLoadingIndicator.style.top = '0px';\n  navLoadingIndicator.style.width = '100vw';\n  navLoadingIndicator.style.height = '100vh';\n\n  navLoadingIndicator.style.display = 'flex';\n  navLoadingIndicator.style.justifyContent = 'center';\n  navLoadingIndicator.style.alignItems = 'center';\n\n  [0, 1, 2].forEach(_ => {\n    const loadingSpinnerChild = document.createElement('div');\n    (loadingSpinnerChild.style.backgroundColor = loadingSpinnerColor),\n      navLoadingIndicator.appendChild(loadingSpinnerChild);\n  });\n\n  navLoadingIndicator.classList.add('la-ball-pulse', 'la-dark');\n\n  return navLoadingIndicator;\n}\n","import getStore from 'services/getStore';\nimport { setCurrentInteractionAction } from \"actions/setCurrentInteractionAction\";\n\nexport default (id, updateFocusedNodeId = false) => {\n  getStore().dispatch(setCurrentInteractionAction(id, updateFocusedNodeId));\n};\n","import { allGoogleFonts } from './allGoogleFonts';\n\nlet fonts = [\n  'Abel',\n  'Abril Fatface',\n  'Acme',\n  'Amatic SC',\n  'Anton',\n  'Archivo Narrow',\n  'Arimo',\n  'Arvo',\n  'Asap',\n  'Assistant',\n  'Barlow',\n  'Bitter',\n  'Bree Serif',\n  'Cabin',\n  'Cairo',\n  'Catamaran',\n  'Cinzel',\n  'Comfortaa',\n  'Crete Round',\n  'Crimson Text',\n  'Dancing Script',\n  'Domine',\n  'Dosis',\n  'EB Garamond',\n  'Exo',\n  'Exo 2',\n  'Fira Sans',\n  'Fira Sans Condensed',\n  'Fjalla One',\n  'Francois One',\n  'Gloria Hallelujah',\n  'Heebo',\n  'Hind',\n  'Hind Madurai',\n  'Hind Siliguri',\n  'Inconsolata',\n  'Indie Flower',\n  'Inter',\n  'Josefin Sans',\n  'Kanit',\n  'Karla',\n  'Lato',\n  'Libre Baskerville',\n  'Libre Franklin',\n  'Lobster',\n  'Lora',\n  'Maven Pro',\n  'Merriweather',\n  'Merriweather Sans',\n  'Montserrat',\n  'Mukta',\n  'Muli',\n  'Nanum Gothic',\n  'News Cycle',\n  'Noticia Text',\n  'Noto Sans',\n  'Noto Sans JP',\n  'Noto Sans KR',\n  'Noto Sans TC',\n  'Noto Serif',\n  'Nunito',\n  'Nunito Sans',\n  'Open Sans',\n  'Open Sans Condensed',\n  'Oswald',\n  'Overpass',\n  'Oxygen',\n  'PT Sans',\n  'PT Sans Narrow',\n  'PT Serif',\n  'Pacifico',\n  'Permanent Marker',\n  'Play',\n  'Playfair Display',\n  'Poppins',\n  'Questrial',\n  'Quicksand',\n  'Rajdhani',\n  'Raleway',\n  'Righteous',\n  'Roboto',\n  'Roboto Condensed',\n  'Roboto Mono',\n  'Roboto Slab',\n  'Rokkitt',\n  'Ropa Sans',\n  'Rubik',\n  'Shadows Into Light',\n  'Signika',\n  'Slabo 27px',\n  'Source Code Pro',\n  'Source Sans Pro',\n  'Source Serif Pro',\n  'Teko',\n  'Titillium Web',\n  'Ubuntu',\n  'Ubuntu Condensed',\n  'Varela Round',\n  'Vollkorn',\n  'Work Sans',\n  'Yanone Kaffeesatz',\n];\n\nfonts = Array.from(new Set([...fonts, ...allGoogleFonts])).sort();\n\nconst getFonts = async () => {\n  const url =\n    'https://www.googleapis.com/webfonts/v1/webfonts' +\n    '?sort=popularity&key=AIzaSyAn2p_z3opKV9ejkE9kwMtS6epmEAGNF-8';\n  const result = await fetch(url);\n  const resultJson = await result.json();\n\n  if (!result.ok) {\n    throw new Error(resultJson.errors);\n  }\n\n  return (fonts = resultJson.items\n    // .slice(0, 100)\n    .map(f => f.family)\n    .sort());\n};\n\nexport default fonts;\nexport { getFonts };\n","export const allGoogleFonts = [\n  'ABeeZee',\n  'Abel',\n  'Abhaya Libre',\n  'Abril Fatface',\n  'Aclonica',\n  'Acme',\n  'Actor',\n  'Adamina',\n  'Advent Pro',\n  'Aguafina Script',\n  'Akaya Kanadaka',\n  'Akaya Telivigala',\n  'Akronim',\n  'Akshar',\n  'Aladin',\n  'Alata',\n  'Alatsi',\n  'Albert Sans',\n  'Aldrich',\n  'Alef',\n  'Alegreya',\n  'Alegreya SC',\n  'Alegreya Sans',\n  'Alegreya Sans SC',\n  'Aleo',\n  'Alex Brush',\n  'Alfa Slab One',\n  'Alice',\n  'Alike',\n  'Alike Angular',\n  'Allan',\n  'Allerta',\n  'Allerta Stencil',\n  'Allison',\n  'Allura',\n  'Almarai',\n  'Almendra',\n  'Almendra Display',\n  'Almendra SC',\n  'Alumni Sans',\n  'Alumni Sans Inline One',\n  'Amarante',\n  'Amaranth',\n  'Amatic SC',\n  'Amethysta',\n  'Amiko',\n  'Amiri',\n  'Amita',\n  'Anaheim',\n  'Andada Pro',\n  'Andika',\n  'Andika New Basic',\n  'Anek Bangla',\n  'Anek Devanagari',\n  'Anek Gujarati',\n  'Anek Gurmukhi',\n  'Anek Kannada',\n  'Anek Latin',\n  'Anek Malayalam',\n  'Anek Odia',\n  'Anek Tamil',\n  'Anek Telugu',\n  'Angkor',\n  'Annie Use Your Telescope',\n  'Anonymous Pro',\n  'Antic',\n  'Antic Didone',\n  'Antic Slab',\n  'Anton',\n  'Antonio',\n  'Anybody',\n  'Arapey',\n  'Arbutus',\n  'Arbutus Slab',\n  'Architects Daughter',\n  'Archivo',\n  'Archivo Black',\n  'Archivo Narrow',\n  'Are You Serious',\n  'Aref Ruqaa',\n  'Arima',\n  'Arima Madurai',\n  'Arimo',\n  'Arizonia',\n  'Armata',\n  'Arsenal',\n  'Artifika',\n  'Arvo',\n  'Arya',\n  'Asap',\n  'Asap Condensed',\n  'Asar',\n  'Asset',\n  'Assistant',\n  'Astloch',\n  'Asul',\n  'Athiti',\n  'Atkinson Hyperlegible',\n  'Atma',\n  'Atomic Age',\n  'Aubrey',\n  'Audiowide',\n  'Autour One',\n  'Average',\n  'Average Sans',\n  'Averia Gruesa Libre',\n  'Averia Libre',\n  'Averia Sans Libre',\n  'Averia Serif Libre',\n  'Azeret Mono',\n  'B612',\n  'B612 Mono',\n  'BIZ UDGothic',\n  'BIZ UDMincho',\n  'BIZ UDPGothic',\n  'BIZ UDPMincho',\n  'Babylonica',\n  'Bad Script',\n  'Bahiana',\n  'Bahianita',\n  'Bai Jamjuree',\n  'Bakbak One',\n  'Ballet',\n  'Baloo 2',\n  'Baloo Bhai 2',\n  'Baloo Bhaijaan 2',\n  'Baloo Bhaina 2',\n  'Baloo Chettan 2',\n  'Baloo Da 2',\n  'Baloo Paaji 2',\n  'Baloo Tamma 2',\n  'Baloo Tammudu 2',\n  'Baloo Thambi 2',\n  'Balsamiq Sans',\n  'Balthazar',\n  'Bangers',\n  'Barlow',\n  'Barlow Condensed',\n  'Barlow Semi Condensed',\n  'Barriecito',\n  'Barrio',\n  'Basic',\n  'Baskervville',\n  'Battambang',\n  'Baumans',\n  'Bayon',\n  'Be Vietnam Pro',\n  'Beau Rivage',\n  'Bebas Neue',\n  'Belgrano',\n  'Bellefair',\n  'Belleza',\n  'Bellota',\n  'Bellota Text',\n  'BenchNine',\n  'Benne',\n  'Bentham',\n  'Berkshire Swash',\n  'Besley',\n  'Beth Ellen',\n  'Bevan',\n  'BhuTuka Expanded One',\n  'Big Shoulders Display',\n  'Big Shoulders Inline Display',\n  'Big Shoulders Inline Text',\n  'Big Shoulders Stencil Display',\n  'Big Shoulders Stencil Text',\n  'Big Shoulders Text',\n  'Bigelow Rules',\n  'Bigshot One',\n  'Bilbo',\n  'Bilbo Swash Caps',\n  'BioRhyme',\n  'BioRhyme Expanded',\n  'Birthstone',\n  'Birthstone Bounce',\n  'Biryani',\n  'Bitter',\n  'Black And White Picture',\n  'Black Han Sans',\n  'Black Ops One',\n  'Blaka',\n  'Blaka Hollow',\n  'Blinker',\n  'Bodoni Moda',\n  'Bokor',\n  'Bona Nova',\n  'Bonbon',\n  'Bonheur Royale',\n  'Boogaloo',\n  'Bowlby One',\n  'Bowlby One SC',\n  'Brawler',\n  'Bree Serif',\n  'Brygada 1918',\n  'Bubblegum Sans',\n  'Bubbler One',\n  'Buda',\n  'Buenard',\n  'Bungee',\n  'Bungee Hairline',\n  'Bungee Inline',\n  'Bungee Outline',\n  'Bungee Shade',\n  'Butcherman',\n  'Butterfly Kids',\n  'Cabin',\n  'Cabin Condensed',\n  'Cabin Sketch',\n  'Caesar Dressing',\n  'Cagliostro',\n  'Cairo',\n  'Caladea',\n  'Calistoga',\n  'Calligraffitti',\n  'Cambay',\n  'Cambo',\n  'Candal',\n  'Cantarell',\n  'Cantata One',\n  'Cantora One',\n  'Capriola',\n  'Caramel',\n  'Carattere',\n  'Cardo',\n  'Carme',\n  'Carrois Gothic',\n  'Carrois Gothic SC',\n  'Carter One',\n  'Castoro',\n  'Catamaran',\n  'Caudex',\n  'Caveat',\n  'Caveat Brush',\n  'Cedarville Cursive',\n  'Ceviche One',\n  'Chakra Petch',\n  'Changa',\n  'Changa One',\n  'Chango',\n  'Charis SIL',\n  'Charm',\n  'Charmonman',\n  'Chathura',\n  'Chau Philomene One',\n  'Chela One',\n  'Chelsea Market',\n  'Chenla',\n  'Cherish',\n  'Cherry Cream Soda',\n  'Cherry Swash',\n  'Chewy',\n  'Chicle',\n  'Chilanka',\n  'Chivo',\n  'Chonburi',\n  'Cinzel',\n  'Cinzel Decorative',\n  'Clicker Script',\n  'Coda',\n  'Coda Caption',\n  'Codystar',\n  'Coiny',\n  'Combo',\n  'Comfortaa',\n  'Comforter',\n  'Comforter Brush',\n  'Comic Neue',\n  'Coming Soon',\n  'Commissioner',\n  'Concert One',\n  'Condiment',\n  'Content',\n  'Contrail One',\n  'Convergence',\n  'Cookie',\n  'Copse',\n  'Corben',\n  'Corinthia',\n  'Cormorant',\n  'Cormorant Garamond',\n  'Cormorant Infant',\n  'Cormorant SC',\n  'Cormorant Unicase',\n  'Cormorant Upright',\n  'Courgette',\n  'Courier Prime',\n  'Cousine',\n  'Coustard',\n  'Covered By Your Grace',\n  'Crafty Girls',\n  'Creepster',\n  'Crete Round',\n  'Crimson Pro',\n  'Crimson Text',\n  'Croissant One',\n  'Crushed',\n  'Cuprum',\n  'Cute Font',\n  'Cutive',\n  'Cutive Mono',\n  'DM Mono',\n  'DM Sans',\n  'DM Serif Display',\n  'DM Serif Text',\n  'Damion',\n  'Dancing Script',\n  'Dangrek',\n  'Darker Grotesque',\n  'David Libre',\n  'Dawning of a New Day',\n  'Days One',\n  'Dekko',\n  'Dela Gothic One',\n  'Delius',\n  'Delius Swash Caps',\n  'Delius Unicase',\n  'Della Respira',\n  'Denk One',\n  'Devonshire',\n  'Dhurjati',\n  'Didact Gothic',\n  'Diplomata',\n  'Diplomata SC',\n  'Do Hyeon',\n  'Dokdo',\n  'Domine',\n  'Donegal One',\n  'Dongle',\n  'Doppio One',\n  'Dorsa',\n  'Dosis',\n  'DotGothic16',\n  'Dr Sugiyama',\n  'Duru Sans',\n  'Dynalight',\n  'EB Garamond',\n  'Eagle Lake',\n  'East Sea Dokdo',\n  'Eater',\n  'Economica',\n  'Eczar',\n  'Edu NSW ACT Foundation',\n  'Edu QLD Beginner',\n  'Edu SA Beginner',\n  'Edu TAS Beginner',\n  'Edu VIC WA NT Beginner',\n  'El Messiri',\n  'Electrolize',\n  'Elsie',\n  'Elsie Swash Caps',\n  'Emblema One',\n  'Emilys Candy',\n  'Encode Sans',\n  'Encode Sans Condensed',\n  'Encode Sans Expanded',\n  'Encode Sans SC',\n  'Encode Sans Semi Condensed',\n  'Encode Sans Semi Expanded',\n  'Engagement',\n  'Englebert',\n  'Enriqueta',\n  'Ephesis',\n  'Epilogue',\n  'Erica One',\n  'Esteban',\n  'Estonia',\n  'Euphoria Script',\n  'Ewert',\n  'Exo',\n  'Exo 2',\n  'Expletus Sans',\n  'Explora',\n  'Fahkwang',\n  'Familjen Grotesk',\n  'Fanwood Text',\n  'Farro',\n  'Farsan',\n  'Fascinate',\n  'Fascinate Inline',\n  'Faster One',\n  'Fasthand',\n  'Fauna One',\n  'Faustina',\n  'Federant',\n  'Federo',\n  'Felipa',\n  'Fenix',\n  'Festive',\n  'Finger Paint',\n  'Finlandica',\n  'Fira Code',\n  'Fira Mono',\n  'Fira Sans',\n  'Fira Sans Condensed',\n  'Fira Sans Extra Condensed',\n  'Fjalla One',\n  'Fjord One',\n  'Flamenco',\n  'Flavors',\n  'Fleur De Leah',\n  'Flow Block',\n  'Flow Circular',\n  'Flow Rounded',\n  'Fondamento',\n  'Fontdiner Swanky',\n  'Forum',\n  'Francois One',\n  'Frank Ruhl Libre',\n  'Fraunces',\n  'Freckle Face',\n  'Fredericka the Great',\n  'Fredoka',\n  'Fredoka One',\n  'Freehand',\n  'Fresca',\n  'Frijole',\n  'Fruktur',\n  'Fugaz One',\n  'Fuggles',\n  'Fuzzy Bubbles',\n  'GFS Didot',\n  'GFS Neohellenic',\n  'Gabriela',\n  'Gaegu',\n  'Gafata',\n  'Galada',\n  'Galdeano',\n  'Galindo',\n  'Gamja Flower',\n  'Gantari',\n  'Gayathri',\n  'Gelasio',\n  'Gemunu Libre',\n  'Genos',\n  'Gentium Basic',\n  'Gentium Book Basic',\n  'Gentium Book Plus',\n  'Gentium Plus',\n  'Geo',\n  'Georama',\n  'Geostar',\n  'Geostar Fill',\n  'Germania One',\n  'Gideon Roman',\n  'Gidugu',\n  'Gilda Display',\n  'Girassol',\n  'Give You Glory',\n  'Glass Antiqua',\n  'Glegoo',\n  'Gloria Hallelujah',\n  'Glory',\n  'Gluten',\n  'Goblin One',\n  'Gochi Hand',\n  'Goldman',\n  'Gorditas',\n  'Gothic A1',\n  'Gotu',\n  'Goudy Bookletter 1911',\n  'Gowun Batang',\n  'Gowun Dodum',\n  'Graduate',\n  'Grand Hotel',\n  'Grandstander',\n  'Grape Nuts',\n  'Gravitas One',\n  'Great Vibes',\n  'Grechen Fuemen',\n  'Grenze',\n  'Grenze Gotisch',\n  'Grey Qo',\n  'Griffy',\n  'Gruppo',\n  'Gudea',\n  'Gugi',\n  'Gulzar',\n  'Gupter',\n  'Gurajada',\n  'Gwendolyn',\n  'Habibi',\n  'Hachi Maru Pop',\n  'Hahmlet',\n  'Halant',\n  'Hammersmith One',\n  'Hanalei',\n  'Hanalei Fill',\n  'Handlee',\n  'Hanuman',\n  'Happy Monkey',\n  'Harmattan',\n  'Headland One',\n  'Heebo',\n  'Henny Penny',\n  'Hepta Slab',\n  'Herr Von Muellerhoff',\n  'Hi Melody',\n  'Hina Mincho',\n  'Hind',\n  'Hind Guntur',\n  'Hind Madurai',\n  'Hind Siliguri',\n  'Hind Vadodara',\n  'Holtwood One SC',\n  'Homemade Apple',\n  'Homenaje',\n  'Hubballi',\n  'Hurricane',\n  'IBM Plex Mono',\n  'IBM Plex Sans',\n  'IBM Plex Sans Arabic',\n  'IBM Plex Sans Condensed',\n  'IBM Plex Sans Devanagari',\n  'IBM Plex Sans Hebrew',\n  'IBM Plex Sans KR',\n  'IBM Plex Sans Thai',\n  'IBM Plex Sans Thai Looped',\n  'IBM Plex Serif',\n  'IM Fell DW Pica',\n  'IM Fell DW Pica SC',\n  'IM Fell Double Pica',\n  'IM Fell Double Pica SC',\n  'IM Fell English',\n  'IM Fell English SC',\n  'IM Fell French Canon',\n  'IM Fell French Canon SC',\n  'IM Fell Great Primer',\n  'IM Fell Great Primer SC',\n  'Ibarra Real Nova',\n  'Iceberg',\n  'Iceland',\n  'Imbue',\n  'Imperial Script',\n  'Imprima',\n  'Inconsolata',\n  'Inder',\n  'Indie Flower',\n  'Ingrid Darling',\n  'Inika',\n  'Inknut Antiqua',\n  'Inria Sans',\n  'Inria Serif',\n  'Inspiration',\n  'Inter',\n  'Irish Grover',\n  'Island Moments',\n  'Istok Web',\n  'Italiana',\n  'Italianno',\n  'Itim',\n  'Jacques Francois',\n  'Jacques Francois Shadow',\n  'Jaldi',\n  'JetBrains Mono',\n  'Jim Nightshade',\n  'Joan',\n  'Jockey One',\n  'Jolly Lodger',\n  'Jomhuria',\n  'Jomolhari',\n  'Josefin Sans',\n  'Josefin Slab',\n  'Jost',\n  'Joti One',\n  'Jua',\n  'Judson',\n  'Julee',\n  'Julius Sans One',\n  'Junge',\n  'Jura',\n  'Just Another Hand',\n  'Just Me Again Down Here',\n  'K2D',\n  'Kadwa',\n  'Kaisei Decol',\n  'Kaisei HarunoUmi',\n  'Kaisei Opti',\n  'Kaisei Tokumin',\n  'Kalam',\n  'Kameron',\n  'Kanit',\n  'Kantumruy',\n  'Kantumruy Pro',\n  'Karantina',\n  'Karla',\n  'Karma',\n  'Katibeh',\n  'Kaushan Script',\n  'Kavivanar',\n  'Kavoon',\n  'Kdam Thmor',\n  'Kdam Thmor Pro',\n  'Keania One',\n  'Kelly Slab',\n  'Kenia',\n  'Khand',\n  'Khmer',\n  'Khula',\n  'Kings',\n  'Kirang Haerang',\n  'Kite One',\n  'Kiwi Maru',\n  'Klee One',\n  'Knewave',\n  'KoHo',\n  'Kodchasan',\n  'Koh Santepheap',\n  'Kolker Brush',\n  'Kosugi',\n  'Kosugi Maru',\n  'Kotta One',\n  'Koulen',\n  'Kranky',\n  'Kreon',\n  'Kristi',\n  'Krona One',\n  'Krub',\n  'Kufam',\n  'Kulim Park',\n  'Kumar One',\n  'Kumar One Outline',\n  'Kumbh Sans',\n  'Kurale',\n  'La Belle Aurore',\n  'Lacquer',\n  'Laila',\n  'Lakki Reddy',\n  'Lalezar',\n  'Lancelot',\n  'Langar',\n  'Lateef',\n  'Lato',\n  'Lavishly Yours',\n  'League Gothic',\n  'League Script',\n  'League Spartan',\n  'Leckerli One',\n  'Ledger',\n  'Lekton',\n  'Lemon',\n  'Lemonada',\n  'Lexend',\n  'Lexend Deca',\n  'Lexend Exa',\n  'Lexend Giga',\n  'Lexend Mega',\n  'Lexend Peta',\n  'Lexend Tera',\n  'Lexend Zetta',\n  'Libre Barcode 128',\n  'Libre Barcode 128 Text',\n  'Libre Barcode 39',\n  'Libre Barcode 39 Extended',\n  'Libre Barcode 39 Extended Text',\n  'Libre Barcode 39 Text',\n  'Libre Barcode EAN13 Text',\n  'Libre Baskerville',\n  'Libre Bodoni',\n  'Libre Caslon Display',\n  'Libre Caslon Text',\n  'Libre Franklin',\n  'Licorice',\n  'Life Savers',\n  'Lilita One',\n  'Lily Script One',\n  'Limelight',\n  'Linden Hill',\n  'Literata',\n  'Liu Jian Mao Cao',\n  'Livvic',\n  'Lobster',\n  'Lobster Two',\n  'Londrina Outline',\n  'Londrina Shadow',\n  'Londrina Sketch',\n  'Londrina Solid',\n  'Long Cang',\n  'Lora',\n  'Love Light',\n  'Love Ya Like A Sister',\n  'Loved by the King',\n  'Lovers Quarrel',\n  'Luckiest Guy',\n  'Lusitana',\n  'Lustria',\n  'Luxurious Roman',\n  'Luxurious Script',\n  'M PLUS 1',\n  'M PLUS 1 Code',\n  'M PLUS 1p',\n  'M PLUS 2',\n  'M PLUS Code Latin',\n  'M PLUS Rounded 1c',\n  'Ma Shan Zheng',\n  'Macondo',\n  'Macondo Swash Caps',\n  'Mada',\n  'Magra',\n  'Maiden Orange',\n  'Maitree',\n  'Major Mono Display',\n  'Mako',\n  'Mali',\n  'Mallanna',\n  'Mandali',\n  'Manjari',\n  'Manrope',\n  'Mansalva',\n  'Manuale',\n  'Marcellus',\n  'Marcellus SC',\n  'Marck Script',\n  'Margarine',\n  'Markazi Text',\n  'Marko One',\n  'Marmelad',\n  'Martel',\n  'Martel Sans',\n  'Marvel',\n  'Mate',\n  'Mate SC',\n  'Maven Pro',\n  'McLaren',\n  'Mea Culpa',\n  'Meddon',\n  'MedievalSharp',\n  'Medula One',\n  'Meera Inimai',\n  'Megrim',\n  'Meie Script',\n  'Meow Script',\n  'Merienda',\n  'Merienda One',\n  'Merriweather',\n  'Merriweather Sans',\n  'Metal',\n  'Metal Mania',\n  'Metamorphous',\n  'Metrophobic',\n  'Michroma',\n  'Milonga',\n  'Miltonian',\n  'Miltonian Tattoo',\n  'Mina',\n  'Mingzat',\n  'Miniver',\n  'Miriam Libre',\n  'Mirza',\n  'Miss Fajardose',\n  'Mitr',\n  'Mochiy Pop One',\n  'Mochiy Pop P One',\n  'Modak',\n  'Modern Antiqua',\n  'Mogra',\n  'Mohave',\n  'Molengo',\n  'Molle',\n  'Monda',\n  'Monofett',\n  'Monoton',\n  'Monsieur La Doulaise',\n  'Montaga',\n  'Montagu Slab',\n  'MonteCarlo',\n  'Montez',\n  'Montserrat',\n  'Montserrat Alternates',\n  'Montserrat Subrayada',\n  'Moo Lah Lah',\n  'Moon Dance',\n  'Moul',\n  'Moulpali',\n  'Mountains of Christmas',\n  'Mouse Memoirs',\n  'Mr Bedfort',\n  'Mr Dafoe',\n  'Mr De Haviland',\n  'Mrs Saint Delafield',\n  'Mrs Sheppards',\n  'Ms Madi',\n  'Mukta',\n  'Mukta Mahee',\n  'Mukta Malar',\n  'Mukta Vaani',\n  'Mulish',\n  'Murecho',\n  'MuseoModerno',\n  'My Soul',\n  'Mystery Quest',\n  'NTR',\n  'Nanum Brush Script',\n  'Nanum Gothic',\n  'Nanum Gothic Coding',\n  'Nanum Myeongjo',\n  'Nanum Pen Script',\n  'Neonderthaw',\n  'Nerko One',\n  'Neucha',\n  'Neuton',\n  'New Rocker',\n  'New Tegomin',\n  'News Cycle',\n  'Newsreader',\n  'Niconne',\n  'Niramit',\n  'Nixie One',\n  'Nobile',\n  'Nokora',\n  'Norican',\n  'Nosifer',\n  'Notable',\n  'Nothing You Could Do',\n  'Noticia Text',\n  'Noto Emoji',\n  'Noto Kufi Arabic',\n  'Noto Music',\n  'Noto Naskh Arabic',\n  'Noto Nastaliq Urdu',\n  'Noto Rashi Hebrew',\n  'Noto Sans',\n  'Noto Sans Adlam',\n  'Noto Sans Adlam Unjoined',\n  'Noto Sans Anatolian Hieroglyphs',\n  'Noto Sans Arabic',\n  'Noto Sans Armenian',\n  'Noto Sans Avestan',\n  'Noto Sans Balinese',\n  'Noto Sans Bamum',\n  'Noto Sans Bassa Vah',\n  'Noto Sans Batak',\n  'Noto Sans Bengali',\n  'Noto Sans Bhaiksuki',\n  'Noto Sans Brahmi',\n  'Noto Sans Buginese',\n  'Noto Sans Buhid',\n  'Noto Sans Canadian Aboriginal',\n  'Noto Sans Carian',\n  'Noto Sans Caucasian Albanian',\n  'Noto Sans Chakma',\n  'Noto Sans Cham',\n  'Noto Sans Cherokee',\n  'Noto Sans Coptic',\n  'Noto Sans Cuneiform',\n  'Noto Sans Cypriot',\n  'Noto Sans Deseret',\n  'Noto Sans Devanagari',\n  'Noto Sans Display',\n  'Noto Sans Duployan',\n  'Noto Sans Egyptian Hieroglyphs',\n  'Noto Sans Elbasan',\n  'Noto Sans Elymaic',\n  'Noto Sans Georgian',\n  'Noto Sans Glagolitic',\n  'Noto Sans Gothic',\n  'Noto Sans Grantha',\n  'Noto Sans Gujarati',\n  'Noto Sans Gunjala Gondi',\n  'Noto Sans Gurmukhi',\n  'Noto Sans HK',\n  'Noto Sans Hanifi Rohingya',\n  'Noto Sans Hanunoo',\n  'Noto Sans Hatran',\n  'Noto Sans Hebrew',\n  'Noto Sans Imperial Aramaic',\n  'Noto Sans Indic Siyaq Numbers',\n  'Noto Sans Inscriptional Pahlavi',\n  'Noto Sans Inscriptional Parthian',\n  'Noto Sans JP',\n  'Noto Sans Javanese',\n  'Noto Sans KR',\n  'Noto Sans Kaithi',\n  'Noto Sans Kannada',\n  'Noto Sans Kayah Li',\n  'Noto Sans Kharoshthi',\n  'Noto Sans Khmer',\n  'Noto Sans Khojki',\n  'Noto Sans Khudawadi',\n  'Noto Sans Lao',\n  'Noto Sans Lepcha',\n  'Noto Sans Limbu',\n  'Noto Sans Linear A',\n  'Noto Sans Linear B',\n  'Noto Sans Lisu',\n  'Noto Sans Lycian',\n  'Noto Sans Lydian',\n  'Noto Sans Mahajani',\n  'Noto Sans Malayalam',\n  'Noto Sans Mandaic',\n  'Noto Sans Manichaean',\n  'Noto Sans Marchen',\n  'Noto Sans Masaram Gondi',\n  'Noto Sans Math',\n  'Noto Sans Mayan Numerals',\n  'Noto Sans Medefaidrin',\n  'Noto Sans Meetei Mayek',\n  'Noto Sans Meroitic',\n  'Noto Sans Miao',\n  'Noto Sans Modi',\n  'Noto Sans Mongolian',\n  'Noto Sans Mono',\n  'Noto Sans Mro',\n  'Noto Sans Multani',\n  'Noto Sans Myanmar',\n  'Noto Sans N Ko',\n  'Noto Sans Nabataean',\n  'Noto Sans New Tai Lue',\n  'Noto Sans Newa',\n  'Noto Sans Nushu',\n  'Noto Sans Ogham',\n  'Noto Sans Ol Chiki',\n  'Noto Sans Old Hungarian',\n  'Noto Sans Old Italic',\n  'Noto Sans Old North Arabian',\n  'Noto Sans Old Permic',\n  'Noto Sans Old Persian',\n  'Noto Sans Old Sogdian',\n  'Noto Sans Old South Arabian',\n  'Noto Sans Old Turkic',\n  'Noto Sans Oriya',\n  'Noto Sans Osage',\n  'Noto Sans Osmanya',\n  'Noto Sans Pahawh Hmong',\n  'Noto Sans Palmyrene',\n  'Noto Sans Pau Cin Hau',\n  'Noto Sans Phags Pa',\n  'Noto Sans Phoenician',\n  'Noto Sans Psalter Pahlavi',\n  'Noto Sans Rejang',\n  'Noto Sans Runic',\n  'Noto Sans SC',\n  'Noto Sans Samaritan',\n  'Noto Sans Saurashtra',\n  'Noto Sans Sharada',\n  'Noto Sans Shavian',\n  'Noto Sans Siddham',\n  'Noto Sans Sinhala',\n  'Noto Sans Sogdian',\n  'Noto Sans Sora Sompeng',\n  'Noto Sans Soyombo',\n  'Noto Sans Sundanese',\n  'Noto Sans Syloti Nagri',\n  'Noto Sans Symbols',\n  'Noto Sans Symbols 2',\n  'Noto Sans Syriac',\n  'Noto Sans TC',\n  'Noto Sans Tagalog',\n  'Noto Sans Tagbanwa',\n  'Noto Sans Tai Le',\n  'Noto Sans Tai Tham',\n  'Noto Sans Tai Viet',\n  'Noto Sans Takri',\n  'Noto Sans Tamil',\n  'Noto Sans Tamil Supplement',\n  'Noto Sans Telugu',\n  'Noto Sans Thaana',\n  'Noto Sans Thai',\n  'Noto Sans Thai Looped',\n  'Noto Sans Tifinagh',\n  'Noto Sans Tirhuta',\n  'Noto Sans Ugaritic',\n  'Noto Sans Vai',\n  'Noto Sans Wancho',\n  'Noto Sans Warang Citi',\n  'Noto Sans Yi',\n  'Noto Sans Zanabazar Square',\n  'Noto Serif',\n  'Noto Serif Ahom',\n  'Noto Serif Armenian',\n  'Noto Serif Balinese',\n  'Noto Serif Bengali',\n  'Noto Serif Devanagari',\n  'Noto Serif Display',\n  'Noto Serif Dogra',\n  'Noto Serif Ethiopic',\n  'Noto Serif Georgian',\n  'Noto Serif Grantha',\n  'Noto Serif Gujarati',\n  'Noto Serif Gurmukhi',\n  'Noto Serif Hebrew',\n  'Noto Serif JP',\n  'Noto Serif KR',\n  'Noto Serif Kannada',\n  'Noto Serif Khmer',\n  'Noto Serif Lao',\n  'Noto Serif Malayalam',\n  'Noto Serif Myanmar',\n  'Noto Serif Nyiakeng Puachue Hmong',\n  'Noto Serif SC',\n  'Noto Serif Sinhala',\n  'Noto Serif TC',\n  'Noto Serif Tamil',\n  'Noto Serif Tangut',\n  'Noto Serif Telugu',\n  'Noto Serif Thai',\n  'Noto Serif Tibetan',\n  'Noto Serif Yezidi',\n  'Noto Traditional Nushu',\n  'Nova Cut',\n  'Nova Flat',\n  'Nova Mono',\n  'Nova Oval',\n  'Nova Round',\n  'Nova Script',\n  'Nova Slim',\n  'Nova Square',\n  'Numans',\n  'Nunito',\n  'Nunito Sans',\n  'Nuosu SIL',\n  'Odibee Sans',\n  'Odor Mean Chey',\n  'Offside',\n  'Oi',\n  'Old Standard TT',\n  'Oldenburg',\n  'Ole',\n  'Oleo Script',\n  'Oleo Script Swash Caps',\n  'Oooh Baby',\n  'Open Sans',\n  'Oranienbaum',\n  'Orbitron',\n  'Oregano',\n  'Orelega One',\n  'Orienta',\n  'Original Surfer',\n  'Oswald',\n  'Outfit',\n  'Over the Rainbow',\n  'Overlock',\n  'Overlock SC',\n  'Overpass',\n  'Overpass Mono',\n  'Ovo',\n  'Oxanium',\n  'Oxygen',\n  'Oxygen Mono',\n  'PT Mono',\n  'PT Sans',\n  'PT Sans Caption',\n  'PT Sans Narrow',\n  'PT Serif',\n  'PT Serif Caption',\n  'Pacifico',\n  'Padauk',\n  'Palanquin',\n  'Palanquin Dark',\n  'Pangolin',\n  'Paprika',\n  'Parisienne',\n  'Passero One',\n  'Passion One',\n  'Passions Conflict',\n  'Pathway Gothic One',\n  'Patrick Hand',\n  'Patrick Hand SC',\n  'Pattaya',\n  'Patua One',\n  'Pavanam',\n  'Paytone One',\n  'Peddana',\n  'Peralta',\n  'Permanent Marker',\n  'Petemoss',\n  'Petit Formal Script',\n  'Petrona',\n  'Philosopher',\n  'Piazzolla',\n  'Piedra',\n  'Pinyon Script',\n  'Pirata One',\n  'Plaster',\n  'Play',\n  'Playball',\n  'Playfair Display',\n  'Playfair Display SC',\n  'Plus Jakarta Sans',\n  'Podkova',\n  'Poiret One',\n  'Poller One',\n  'Poly',\n  'Pompiere',\n  'Pontano Sans',\n  'Poor Story',\n  'Poppins',\n  'Port Lligat Sans',\n  'Port Lligat Slab',\n  'Potta One',\n  'Pragati Narrow',\n  'Praise',\n  'Prata',\n  'Preahvihear',\n  'Press Start 2P',\n  'Pridi',\n  'Princess Sofia',\n  'Prociono',\n  'Prompt',\n  'Prosto One',\n  'Proza Libre',\n  'Public Sans',\n  'Puppies Play',\n  'Puritan',\n  'Purple Purse',\n  'Qahiri',\n  'Quando',\n  'Quantico',\n  'Quattrocento',\n  'Quattrocento Sans',\n  'Questrial',\n  'Quicksand',\n  'Quintessential',\n  'Qwigley',\n  'Qwitcher Grypen',\n  'Racing Sans One',\n  'Radio Canada',\n  'Radley',\n  'Rajdhani',\n  'Rakkas',\n  'Raleway',\n  'Raleway Dots',\n  'Ramabhadra',\n  'Ramaraja',\n  'Rambla',\n  'Rammetto One',\n  'Rampart One',\n  'Ranchers',\n  'Rancho',\n  'Ranga',\n  'Rasa',\n  'Rationale',\n  'Ravi Prakash',\n  'Readex Pro',\n  'Recursive',\n  'Red Hat Display',\n  'Red Hat Mono',\n  'Red Hat Text',\n  'Red Rose',\n  'Redacted',\n  'Redacted Script',\n  'Redressed',\n  'Reem Kufi',\n  'Reenie Beanie',\n  'Reggae One',\n  'Revalia',\n  'Rhodium Libre',\n  'Ribeye',\n  'Ribeye Marrow',\n  'Righteous',\n  'Risque',\n  'Road Rage',\n  'Roboto',\n  'Roboto Condensed',\n  'Roboto Flex',\n  'Roboto Mono',\n  'Roboto Serif',\n  'Roboto Slab',\n  'Rochester',\n  'Rock Salt',\n  'RocknRoll One',\n  'Rokkitt',\n  'Romanesco',\n  'Ropa Sans',\n  'Rosario',\n  'Rosarivo',\n  'Rouge Script',\n  'Rowdies',\n  'Rozha One',\n  'Rubik',\n  'Rubik Beastly',\n  'Rubik Bubbles',\n  'Rubik Glitch',\n  'Rubik Microbe',\n  'Rubik Mono One',\n  'Rubik Moonrocks',\n  'Rubik Puddles',\n  'Rubik Wet Paint',\n  'Ruda',\n  'Rufina',\n  'Ruge Boogie',\n  'Ruluko',\n  'Rum Raisin',\n  'Ruslan Display',\n  'Russo One',\n  'Ruthie',\n  'Rye',\n  'STIX Two Text',\n  'Sacramento',\n  'Sahitya',\n  'Sail',\n  'Saira',\n  'Saira Condensed',\n  'Saira Extra Condensed',\n  'Saira Semi Condensed',\n  'Saira Stencil One',\n  'Salsa',\n  'Sanchez',\n  'Sancreek',\n  'Sansita',\n  'Sansita Swashed',\n  'Sarabun',\n  'Sarala',\n  'Sarina',\n  'Sarpanch',\n  'Sassy Frass',\n  'Satisfy',\n  'Sawarabi Gothic',\n  'Sawarabi Mincho',\n  'Scada',\n  'Scheherazade New',\n  'Schoolbell',\n  'Scope One',\n  'Seaweed Script',\n  'Secular One',\n  'Sedgwick Ave',\n  'Sedgwick Ave Display',\n  'Sen',\n  'Send Flowers',\n  'Sevillana',\n  'Seymour One',\n  'Shadows Into Light',\n  'Shadows Into Light Two',\n  'Shalimar',\n  'Shanti',\n  'Share',\n  'Share Tech',\n  'Share Tech Mono',\n  'Shippori Antique',\n  'Shippori Antique B1',\n  'Shippori Mincho',\n  'Shippori Mincho B1',\n  'Shojumaru',\n  'Short Stack',\n  'Shrikhand',\n  'Siemreap',\n  'Sigmar One',\n  'Signika',\n  'Signika Negative',\n  'Simonetta',\n  'Single Day',\n  'Sintony',\n  'Sirin Stencil',\n  'Six Caps',\n  'Skranji',\n  'Slabo 13px',\n  'Slabo 27px',\n  'Slackey',\n  'Smokum',\n  'Smooch',\n  'Smooch Sans',\n  'Smythe',\n  'Sniglet',\n  'Snippet',\n  'Snowburst One',\n  'Sofadi One',\n  'Sofia',\n  'Solway',\n  'Song Myung',\n  'Sonsie One',\n  'Sora',\n  'Sorts Mill Goudy',\n  'Source Code Pro',\n  'Source Sans 3',\n  'Source Sans Pro',\n  'Source Serif 4',\n  'Source Serif Pro',\n  'Space Grotesk',\n  'Space Mono',\n  'Special Elite',\n  'Spectral',\n  'Spectral SC',\n  'Spicy Rice',\n  'Spinnaker',\n  'Spirax',\n  'Splash',\n  'Spline Sans',\n  'Spline Sans Mono',\n  'Squada One',\n  'Square Peg',\n  'Sree Krushnadevaraya',\n  'Sriracha',\n  'Srisakdi',\n  'Staatliches',\n  'Stalemate',\n  'Stalinist One',\n  'Stardos Stencil',\n  'Stick',\n  'Stick No Bills',\n  'Stint Ultra Condensed',\n  'Stint Ultra Expanded',\n  'Stoke',\n  'Strait',\n  'Style Script',\n  'Stylish',\n  'Sue Ellen Francisco',\n  'Suez One',\n  'Sulphur Point',\n  'Sumana',\n  'Sunflower',\n  'Sunshiney',\n  'Supermercado One',\n  'Sura',\n  'Suranna',\n  'Suravaram',\n  'Suwannaphum',\n  'Swanky and Moo Moo',\n  'Syncopate',\n  'Syne',\n  'Syne Mono',\n  'Syne Tactile',\n  'Tai Heritage Pro',\n  'Tajawal',\n  'Tangerine',\n  'Tapestry',\n  'Taprom',\n  'Tauri',\n  'Taviraj',\n  'Teko',\n  'Telex',\n  'Tenali Ramakrishna',\n  'Tenor Sans',\n  'Text Me One',\n  'Texturina',\n  'Thasadith',\n  'The Girl Next Door',\n  'The Nautigal',\n  'Tienne',\n  'Tillana',\n  'Timmana',\n  'Tinos',\n  'Tiro Bangla',\n  'Tiro Devanagari Hindi',\n  'Tiro Devanagari Marathi',\n  'Tiro Devanagari Sanskrit',\n  'Tiro Gurmukhi',\n  'Tiro Kannada',\n  'Tiro Tamil',\n  'Tiro Telugu',\n  'Titan One',\n  'Titillium Web',\n  'Tomorrow',\n  'Tourney',\n  'Trade Winds',\n  'Train One',\n  'Trirong',\n  'Trispace',\n  'Trocchi',\n  'Trochut',\n  'Truculenta',\n  'Trykker',\n  'Tulpen One',\n  'Turret Road',\n  'Twinkle Star',\n  'Ubuntu',\n  'Ubuntu Condensed',\n  'Ubuntu Mono',\n  'Uchen',\n  'Ultra',\n  'Uncial Antiqua',\n  'Underdog',\n  'Unica One',\n  'UnifrakturCook',\n  'UnifrakturMaguntia',\n  'Unkempt',\n  'Unlock',\n  'Unna',\n  'Updock',\n  'Urbanist',\n  'VT323',\n  'Vampiro One',\n  'Varela',\n  'Varela Round',\n  'Varta',\n  'Vast Shadow',\n  'Vazirmatn',\n  'Vesper Libre',\n  'Viaoda Libre',\n  'Vibes',\n  'Vibur',\n  'Vidaloka',\n  'Viga',\n  'Voces',\n  'Volkhov',\n  'Vollkorn',\n  'Vollkorn SC',\n  'Voltaire',\n  'Vujahday Script',\n  'Waiting for the Sunrise',\n  'Wallpoet',\n  'Walter Turncoat',\n  'Warnes',\n  'Water Brush',\n  'Waterfall',\n  'Wellfleet',\n  'Wendy One',\n  'Whisper',\n  'WindSong',\n  'Wire One',\n  'Work Sans',\n  'Xanh Mono',\n  'Yaldevi',\n  'Yanone Kaffeesatz',\n  'Yantramanav',\n  'Yatra One',\n  'Yellowtail',\n  'Yeon Sung',\n  'Yeseva One',\n  'Yesteryear',\n  'Yomogi',\n  'Yrsa',\n  'Yuji Boku',\n  'Yuji Mai',\n  'Yuji Syuku',\n  'Yusei Magic',\n  'ZCOOL KuaiLe',\n  'ZCOOL QingKe HuangYou',\n  'ZCOOL XiaoWei',\n  'Zen Antique',\n  'Zen Antique Soft',\n  'Zen Dots',\n  'Zen Kaku Gothic Antique',\n  'Zen Kaku Gothic New',\n  'Zen Kurenaido',\n  'Zen Loop',\n  'Zen Maru Gothic',\n  'Zen Old Mincho',\n  'Zen Tokyo Zoo',\n  'Zeyada',\n  'Zhi Mang Xing',\n  'Zilla Slab',\n  'Zilla Slab Highlight',\n  //\n  'Playpen Sans',\n  'Shantell Sans',\n] as const;\n\nexport type AllGoogleFonts = typeof allGoogleFonts[number];\n","const parseFontUrl = url => {\n  const chunks = url.toString().split(/\\//g);\n  const [fontName, fontExtension] = chunks[chunks.length - 1].split(/\\./);\n\n  const fontFormat = {\n    ttf: 'truetype',\n    otf: 'opentype',\n  }[fontExtension];\n\n  return {\n    fontName,\n    fontExtension,\n    fontFormat,\n  };\n};\n\nexport default parseFontUrl;\n","/** @jsx jsx */\n\nimport { Fragment as _, useState, useRef, useEffect } from 'react';\nimport { css, jsx } from '@emotion/core';\nimport lizard from 'assets/lizard.svg';\n\nconst loadAssets = {} as any;\n\nconst BootScreen = ({ theme }) => {\n  const [imagesLoaded, setImagesLoaded] = useState(false);\n  const [fontsLoaded, setFontsLoaded] = useState(false);\n  const [minDisplayTime, setMinDisplayTime] = useState(false);\n  const [boot, setBoot] = useState(false);\n\n  const bootScreen = useRef<HTMLDivElement>(null);\n\n  const backgroundColor = theme.headerBackgroundColor || '#fff'; // lPink;\n\n  useEffect(() => {\n    if (!imagesLoaded) {\n      loadAssets.loadImages = () => {\n        setImagesLoaded(true);\n        delete loadAssets.loadImages;\n      };\n    }\n\n    if (!fontsLoaded) {\n      loadAssets.loadFonts = () => {\n        setFontsLoaded(true);\n        delete loadAssets.loadFonts;\n      };\n    }\n  });\n\n  useEffect(() => {\n    setTimeout(() => {\n      !minDisplayTime && setMinDisplayTime(true);\n    }, 1000);\n  }, []);\n\n  useEffect(() => {\n    if (!bootScreen.current) { return }\n\n    const fader = () => {\n      setBoot(true);\n    };\n\n    bootScreen.current.addEventListener('transitionend', fader);\n\n    return () => {\n      if (!bootScreen.current) { return }\n      bootScreen.current.removeEventListener('transitionend', fader);\n    }\n  }, [bootScreen.current]);\n\n  console.log({\n    imagesLoaded,\n    fontsLoaded,\n    minDisplayTime,\n  });\n\n  return !boot ? (\n    <div\n      ref={bootScreen}\n      css={css`\n        position: fixed;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        left: 0;\n        top: 0;\n        width: 100vw;\n        height: 100vh;\n        background: ${backgroundColor};\n        opacity: ${imagesLoaded && fontsLoaded && minDisplayTime ? 0 : 1};\n        transition: opacity 0.35s;\n        z-index: 2147483638;\n      `}\n    >\n      <img\n        src={lizard}\n        css={css`\n          width: 30vw;\n        `}\n      />\n    </div>\n  ) : null;\n};\n\nexport default BootScreen;\nexport { loadAssets };\n","import WebFont from 'webfontloader';\nimport getStore from 'services/getStore';\nimport fonts from './fonts';\nimport parseFontUrl from './parseFontUrl';\nimport { loadAssets } from 'components/lib/BootScreen';\nimport pubSub from 'services/pubSub';\nimport { TButton } from 'store/store';\n\nconst store = getStore();\nconst { getState } = store;\nconst { fontFamily = '', fontFamilies = [], buttons = {} } = getState().theme;\n\nconst fontsFromThemeButtons = (Object.values(buttons) as TButton[]).map(\n  button => {\n    return button?.fontFamily;\n  }\n);\n\nconst getCustomFonts = (): {}[] => {\n  return getState().customFonts;\n};\n\ntype F = {\n  name: string;\n};\n\nconst getCustomFontNames = (customFonts: {}[] = []): string[] => {\n  return customFonts.map(f => (f as F)?.name);\n};\n\nexport const LOAD_FONT_ON_DEMAND = 'loadFontOnDemand';\n\n// fontFamilyMarks are any spans moving through slate\n// we can refactor this to something faster later maybe\nlet fontFamilyMarks: string[] = [];\n\n// any other reference to font or fontFamily that exists on a block's props\n// indicates it is/was editable. capture it\nlet anyFontOrFontFamilyPropOnABlock: string[] = [];\n\nObject.values(store.getState().blocks).forEach((b: any) => {\n  const font = b?.props?.font || b?.props?.fontFamily;\n  if (font) {\n    anyFontOrFontFamilyPropOnABlock.push(font);\n  }\n\n  if (b.type === 'Text' && b?.props?.content) {\n    const fontFamilyMark = b.props.content\n      .split(/\\<|\\>/g)\n      .filter((entry: any) => entry.includes('style=\"font-family:'))\n      .map((entry: any) =>\n        entry\n          .replace(/\\\"|span|style|\\=|font-family:|data-type|fontFamily/g, '')\n          .trimStart()\n          .trimEnd()\n      )\n      .filter((entry: any) => entry !== '');\n\n    fontFamilyMarks = [...fontFamilyMarks, ...fontFamilyMark];\n  }\n});\n\n// fontFamily is the font added to body\nconst userSelectedFonts = Array.from(\n  new Set([\n    fontFamily,\n    ...fontFamilyMarks,\n    ...anyFontOrFontFamilyPropOnABlock,\n    ...fontsFromThemeButtons,\n    // ...customFonts.map(cF => cF.name),\n  ]) as any\n).filter(f => {\n  // filter out anything that might've returned an empty string ''\n  return f;\n}) as string[];\n\n// TODO\n// turn this into a promise and move it out into own file ? . . .\nconst addFont = (url, targetWindow = window) => {\n  if (!url) {\n    return;\n  }\n\n  const { fontName, fontExtension, fontFormat } = parseFontUrl(url);\n\n  // if it's default ( empty ) or is on the google fonts list ( fonts ). bail\n  if (!fontName || fonts.includes(fontName)) {\n    return fontName;\n  }\n\n  const head = targetWindow.document.querySelector('head')!;\n  if (head.querySelector(`#${fontName}`)) {\n    return;\n  }\n\n  const styleTag = document.createElement('style');\n\n  styleTag.id = fontName;\n  styleTag.innerHTML = `\n    @font-face {\n      font-family: \"${fontName}\";\n      src: url(\"${url}\") format(\"${fontFormat}\");\n    }\n  `;\n\n  head.appendChild(styleTag);\n\n  return fontName;\n};\n\nexport type ILoadFontOnDemand = {\n  font: string;\n  onFontLoaded: (font: string) => void;\n};\n\npubSub.subscribe(LOAD_FONT_ON_DEMAND, ($: ILoadFontOnDemand) => {\n  const { font = '', onFontLoaded = () => {} } = $;\n\n  let editor;\n  let module;\n\n  if (window.IS_CHAMELEON_EDITOR) {\n    editor = window;\n    module = editor.frames[0];\n  } else {\n    editor = window.parent;\n    module = window;\n  }\n\n  if (!font) {\n    onFontLoaded(font);\n    return;\n  }\n\n  const customFontNames = getCustomFontNames(getCustomFonts());\n  const fontIsCustomFont = customFontNames.includes(font);\n\n  //\n  // no need to use the WebFont.loader if we don't want\n  // was only in play to have a consistent api but since the custom fonts\n  // are all loaded ahead of time. . .\n  if (fontIsCustomFont) {\n    console.log(`loading custom font : ${font}`);\n    onFontLoaded(font);\n    return;\n  }\n\n  console.log(`loading google font : ${font}`);\n\n  [editor, module].forEach(w => {\n    WebFont.load({\n      ...(!fontIsCustomFont && {\n        google: {\n          families: [`${font}:400,700`],\n        },\n      }),\n      loading: () => {},\n      active: () => {\n        // console.log('font is loading ?', font);\n        onFontLoaded(font);\n      },\n      inactive: () => {\n        alert(\n          'A network error occurred and your font could not be loaded. Please try again.'\n        );\n      },\n      fontloading: f => {\n        // console.log('font is loading ? :', f);\n      },\n      context: w,\n    });\n  });\n});\n\nconst WebFontConfig = {\n  google: {\n    families: userSelectedFonts\n      .filter(f => {\n        //\n        // console.log(f);\n        return !getCustomFontNames(getCustomFonts()).includes(f);\n      })\n      .map(f => `${f}:400,700`),\n  },\n  loading: () => {},\n  active: () => {\n    loadAssets.loadFonts && loadAssets.loadFonts();\n  },\n  inactive: () => {\n    console.log('NO UserSelectedFonts TO LOAD');\n    loadAssets.loadFonts && loadAssets.loadFonts();\n  },\n  fontloading: (familyName, fvd) => {\n    // console.log(familyName, fvd);\n  },\n  fontactive: (familyName, fvd) => {\n    // console.log(familyName, fvd);\n  },\n  fontinactive: (familyName, fvd) => {\n    // console.log(familyName, fvd);\n  },\n};\n\n// boot these up. if any\nif (!!fontFamilies.length) {\n  fontFamilies.forEach(f => {\n    addFont(f);\n  });\n}\n\nconsole.log({\n  window: window.location.href,\n  userSelectedFonts,\n  'WebFontConfig.google.families': WebFontConfig.google.families,\n});\n\nif (WebFontConfig.google.families.length) {\n  WebFont.load(WebFontConfig);\n}\n\nexport { addFont };\n","import getStore from 'services/getStore';\n\nconst getModuleImages = () => {\n  const images = [] as string[];\n\n  // will fix this up later\n  let blocks = getStore().getState().blocks as any; // blocks;\n\n  Object.values(blocks).forEach((b: any, index: number) => {\n    const { props } = b || {};\n\n    // work in progress\n    // wants to some recursive function\n    const values = Object.values({\n      ...props,\n      ...(props?.style || {}),\n      ...(props?.topicIcon || {}),\n    });\n\n    values.forEach((entry: any) => {\n      if (entry && typeof entry === 'string') {\n        let extension: string[] | string = entry?.split(/\\./g);\n        extension =\n          extension.length > 1\n            ? extension[extension.length - 1].toLowerCase()\n            : '';\n\n        if (\n          ['png', 'jpg', 'jpeg', 'gif', 'svg'].includes(extension) &&\n          !entry.match(/@editor|\\/creator\\//g)\n        ) {\n          images.push(entry);\n        }\n      }\n    });\n  });\n\n  const imagesWithoutDuplicates: any[] = Array.from(new Set(images));\n\n  // console.log('module images : \\n _');\n  // imagesWithoutDuplicates.forEach(i => console.log(i));\n  // console.log('_');\n\n  return imagesWithoutDuplicates;\n};\n\nexport default getModuleImages;\n","import { injectGlobal, keyframes } from 'emotion';\r\nimport { flipCard } from './flipCard.styles';\r\nimport { matching } from './matching.styles';\r\nimport { clickAndReveal } from './clickAndReveal.styles';\r\nimport { focusBorder } from './variables';\r\nimport { laBallPulse } from './la-ball-pulse';\r\n\r\nconst fader = keyframes`\r\nfrom {\r\n\topacity: 0;\r\n}\r\nto {\r\n\topacity: 1;\r\n}\r\n`;\r\n\r\ninjectGlobal`\r\n\r\n\t* {\r\n\t\tmargin: 0;\r\n\t\tpadding: 0;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\t&::-webkit-scrollbar {\r\n\t\t\twidth: 5px;\r\n\t\t}\r\n\t\t\r\n\t\t&::-webkit-scrollbar-track {\r\n\t\t\tbackground-color: lightgrey;\r\n\t\t}\r\n\t\t\r\n\t\t&::-webkit-scrollbar-thumb {\r\n\r\n\t\t\tbackground-color: darkgrey;\r\n\t\t}\r\n\r\n\t\t-webkit-tap-highlight-color: transparent;\r\n\t}\r\n\t\r\n\thtml, body {\r\n\t\twidth: 100%;\r\n\t\theight: 100%;\r\n\r\n\t}\r\n\r\n\tbody {\r\n\t\tfont-family: 'Poppins', sans-serif;\r\n\t\tfont-weight: 300;\r\n\t\toverflow-anchor: none;\r\n\r\n\t\t\r\n\t}\r\n\r\n\th1, h2, h3, h4 {\r\n\t\tfont-weight: 200;\r\n\t\tline-height: 1.2em;\r\n\t}\r\n\r\n\th1 {\r\n\t\t\tfont-size: 2rem;\r\n\t}\r\n\r\n\th2 {\r\n\t\t\tfont-size: 1.5rem;\r\n\t}\r\n\r\n\th3 {\r\n\t\t\tfont-size: 1.3rem;\r\n\t}\r\n\r\n\th4 {\r\n\t\t\tfont-size: 1rem;\r\n\t}\r\n\r\n\th5 {\r\n\t\tfont-size: 0.8rem;\r\n\t}\r\n\r\n\th6 {\r\n\t\tfont-size: 0.6rem;\r\n\t}\r\n\r\n\r\n\t@media(min-width: 480px) {\r\n\t\t\th1 {\r\n\t\t\t\t\tfont-size: 2.5rem;\r\n\t\t\t}\r\n\r\n\t\t\th2 {\r\n\t\t\t\t\tfont-size: 2rem;\r\n\t\t\t}\r\n\r\n\t\t\th3 {\r\n\t\t\t\t\tfont-size: 1.8rem;\r\n\t\t\t}\r\n\r\n\t\t\th4 {\r\n\t\t\t\t\tfont-size: 1.5rem;\r\n\t\t\t}\r\n\r\n\t\t\th5 {\r\n\t\t\t\tfont-size: 1rem;\r\n\t\t\t}\r\n\t\t\r\n\t\t\th6 {\r\n\t\t\t\tfont-size: 0.8rem;\r\n\t\t\t}\r\n\t}\r\n\r\n\t@media(min-width: 767px) {\r\n\t\t\th1 {\r\n\t\t\t\t\tfont-size: 3.5rem;\r\n\t\t\t}\r\n\r\n\t\t\th2 {\r\n\t\t\t\t\tfont-size: 2.5rem;\r\n\t\t\t}\r\n\r\n\t\t\th3 {\r\n\t\t\t\t\tfont-size: 2rem;\r\n\t\t\t}\r\n\r\n\t\t\th4 {\r\n\t\t\t\t\tfont-size: 1.7rem;\r\n\t\t\t}\r\n\r\n\t\t\th5 {\r\n\t\t\t\tfont-size: 1.2rem;\r\n\t\t\t}\r\n\t\t\r\n\t\t\th6 {\r\n\t\t\t\tfont-size: 1rem;\r\n\t\t\t}\r\n\t}\r\n\r\n\r\n\tp strong {\r\n\t\tfont-weight: 700 !important;\r\n\t}\r\n\r\n\tstrong {\r\n\t\tfont-weight: 700 !important;\r\n\t}\r\n\r\n\tinput[type=text] {\r\n\t\tfont-weight: 300;\r\n\t}\r\n\r\n\timg {\r\n\t\talign-self: center;\r\n\t\tvertical-align: bottom;\r\n\t\tmax-width: 100%;\r\n\t\tflex-shrink: 0;\r\n\t}\r\n\r\n\r\n\tform {\r\n\t\twidth: 100%;\r\n\t}\r\n\r\n\t#root {\r\n\t\twidth: 100%;\r\n\t\theight: 100%;\r\n\t}\r\n\r\n\t.chameleon-text {\r\n\t\twidth: 100%;\r\n\r\n\t\toverflow-wrap: break-word;\r\n\t\tword-wrap: break-word;\r\n\t\tword-break: break-word;\r\n\r\n\t\tp, li {\r\n\t\t\t\r\n\t\t// line-height: 1.5em;\r\n\r\n\t\t}\r\n\r\n\t\tp span {\r\n\t\t\t// line-height: 1.5em;\r\n\t\t}\r\n\t}\r\n\r\n\th1, h2, h3, h4 {\r\n\r\n\t\tli {\r\n\t\t\tmargin-left: .5em;\r\n\t\t}\r\n\r\n\t\tol {\r\n\t\t\tposition: relative;\r\n\t\t\tleft: .5em;\r\n\t\t}\r\n\r\n\t\tol li:before {\r\n\t\r\n\t\t\tpadding-left: 10px !important;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tp,\r\n\th1,\r\n\th2,\r\n\th3,\r\n\th4,\r\n\th5,\r\n\th6,\r\n\tstrong, \r\n\tem, \r\n\tu {\r\n\t\tmax-width: 100%;\r\n\t}\r\n\r\n\r\n\t.fader_-2s {\r\n\t\tanimation: ${fader} 0.2s forwards;\r\n\t}\r\n\r\n\t.fader_-5s {\r\n\t\tanimation: ${fader} 0.5s forwards;\r\n\t}\r\n\r\n\t.fader_1s {\r\n\t\tanimation: ${fader} 1s forwards;\r\n\t}\r\n\r\n\tbutton {\r\n\t\tfont-family: inherit !important;\r\n\t}\r\n\r\n\tinput {\r\n\t\t:focus {\r\n\t\t\tborder: ${focusBorder};\r\n\t\t}\r\n\t}\r\n\r\n\ttextarea {\r\n\t\t:focus {\r\n\t\t\tborder: ${focusBorder};\r\n\t\t}\r\n\t}\r\n\r\n\t.wtf {\r\n\t\tborder: 10px solid green;\r\n\t\t\t}\r\n\r\n\r\n\r\n\tpre {\r\n\t\tdisplay: flex;\r\n\t\tpadding: 0 !important;\r\n\t\tborder: none !important;\r\n\t}\r\n\r\n\tcode {\r\n\t\tdisplay: inline;\r\n\t\tpadding: 10px 20px 20px 10px !important;\r\n\t\tborder-radius: 3px;\r\n\t\tbackground: #eaeffb;\r\n\t}\r\n\r\n\t*:focus {\r\n\t\toutline: none;\r\n\t}\r\n\r\n\ta:link {\r\n\t\tcolor: #0000EE;\r\n\t}\r\n\r\n\ta:visited {\r\n\t\t// color: #0073E6 !important;\r\n\t}\r\n\r\n\ta:hover {\r\n\t\ttext-decoration: none;\r\n\t}\r\n\r\n\ta:active {\r\n\t\tcolor: red;\r\n\t}\r\n\r\n\r\n\ta:focus {\r\n\t\t// text-decoration: none;\r\n\t\t// opacity: 0.45;\r\n\t}\r\n\r\n\t.center-text {\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.chameleon-text-align-left, [data-type=\"textAlignLeft\"] {\r\n\t\ttext-align: left;\r\n\r\n\t\tul, ol {\r\n\t\t\tlist-style-position: outside !important;\t\t\r\n\t\t}\r\n\t}\r\n\r\n\t.chameleon-text-align-center, [data-type=\"textAlignCenter\"] {\r\n\t\ttext-align: center;\r\n\r\n\t\tul, ol {\r\n\t\t\tlist-style-position: inside;\t\t\r\n\t\t}\r\n\r\n\t\t> ul, > ol {\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tmargin-left: 0px !important;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t.chameleon-text-align-right, [data-type=\"textAlignRight\"] {\r\n\t\ttext-align: right;\r\n\r\n\t\tul, ol {\r\n\t\t\tlist-style-position: inside;\t\t\r\n\t\t}\r\n\t\r\n\t\t> ul, > ol {\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tmargin-left: 0px;\r\n\t\t}\r\n\t  \r\n\t}\r\n\r\n\t// https://gist.github.com/ffoodd/000b59f431e3e64e4ce1a24d5bb36034\r\n\t.sr-only {\r\n\t\tborder: 0 !important;\r\n\t\tclip: rect(1px, 1px, 1px, 1px) !important; \r\n\t\t-webkit-clip-path: inset(50%) !important;\r\n\t\t\tclip-path: inset(50%) !important;  \r\n\t\theight: 1px !important;\r\n\t\tmargin: -1px !important;\r\n\t\toverflow: hidden !important;\r\n\t\tpadding: 0 !important;\r\n\t\tposition: absolute !important;\r\n\t\twidth: 1px !important;\r\n\t\twhite-space: nowrap !important;            \r\n\t}\r\n\r\n\t.lang-bracket::before {\r\n\t\tcontent: '[';\r\n\t\t color: rgb(64, 64, 64);\r\n\t}\r\n\r\n\t.lang-bracket::after {\r\n\t\tcontent: ']';\r\n\t\t color: rgb(64, 64, 64);\r\n\t}\r\n\r\n\t${flipCard}\r\n\t${matching}\r\n\t${clickAndReveal}\r\n\r\n\t}\r\n\r\n\r\n\t${laBallPulse}\r\n`;\r\n","export const flipCard = `\n.flipcard-text {\n  text-align: center;\n  \n  > div {\n  \n    ul, ol {\n\t\t\tlist-style-position: inside;\t\t\n\t\t}\n\n    > ul, > ol { \n      display: inline-block;\n      margin-left: 0px;\n    }\n  }\n\n}\n\n.flipCardFace {\n  p, li {\n    line-height: 1.2em !important;\n  }\n}\n`;\n","\nexport const matching = `\n.matching-text {\n  text-align: center;\n  \n  > div {\n  \n    > ul, > ol {\n      display: inline-block;\n      margin-left: 0px;\n    }  \n  }\n}\n\n.matchingPanel {\n  p, li {\n    line-height: 1.2em;\n  }\n}\n`;\n","\nexport const clickAndReveal = `\n.click-and-reveal-text {\n  text-align: center;\n\n  > div {\n\n    > ul, > ol {\n      display: inline-block;\n      margin-left: 0px;\n    }\n  }\n}\n`;\n","/*!\n * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/)\n * Copyright 2015 Daniel Cardoso <@DanielCardoso>\n * Licensed under MIT\n */\n\nexport const laBallPulse = `\n.la-ball-pulse,\n.la-ball-pulse > div {\n    position: relative;\n    -webkit-box-sizing: border-box;\n       -moz-box-sizing: border-box;\n            box-sizing: border-box;\n}\n.la-ball-pulse {\n    display: block;\n    font-size: 0;\n    color: #fff;\n}\n.la-ball-pulse.la-dark {\n    color: #333;\n}\n.la-ball-pulse > div {\n    display: inline-block;\n    float: none;\n    background-color: currentColor;\n    border: 0 solid currentColor;\n}\n.la-ball-pulse {\n    width: 54px;\n    height: 18px;\n}\n.la-ball-pulse > div:nth-child(1) {\n    -webkit-animation-delay: -200ms;\n       -moz-animation-delay: -200ms;\n         -o-animation-delay: -200ms;\n            animation-delay: -200ms;\n}\n.la-ball-pulse > div:nth-child(2) {\n    -webkit-animation-delay: -100ms;\n       -moz-animation-delay: -100ms;\n         -o-animation-delay: -100ms;\n            animation-delay: -100ms;\n}\n.la-ball-pulse > div:nth-child(3) {\n    -webkit-animation-delay: 0ms;\n       -moz-animation-delay: 0ms;\n         -o-animation-delay: 0ms;\n            animation-delay: 0ms;\n}\n.la-ball-pulse > div {\n    width: 10px;\n    height: 10px;\n    margin: 4px;\n    border-radius: 100%;\n    -webkit-animation: ball-pulse 1s ease infinite;\n       -moz-animation: ball-pulse 1s ease infinite;\n         -o-animation: ball-pulse 1s ease infinite;\n            animation: ball-pulse 1s ease infinite;\n}\n.la-ball-pulse.la-sm {\n    width: 26px;\n    height: 8px;\n}\n.la-ball-pulse.la-sm > div {\n    width: 4px;\n    height: 4px;\n    margin: 2px;\n}\n.la-ball-pulse.la-2x {\n    width: 108px;\n    height: 36px;\n}\n.la-ball-pulse.la-2x > div {\n    width: 20px;\n    height: 20px;\n    margin: 8px;\n}\n.la-ball-pulse.la-3x {\n    width: 162px;\n    height: 54px;\n}\n.la-ball-pulse.la-3x > div {\n    width: 30px;\n    height: 30px;\n    margin: 12px;\n}\n/*\n * Animation\n */\n@-webkit-keyframes ball-pulse {\n    0%,\n    60%,\n    100% {\n        opacity: 1;\n        -webkit-transform: scale(1);\n                transform: scale(1);\n    }\n    30% {\n        opacity: .1;\n        -webkit-transform: scale(.01);\n                transform: scale(.01);\n    }\n}\n@-moz-keyframes ball-pulse {\n    0%,\n    60%,\n    100% {\n        opacity: 1;\n        -moz-transform: scale(1);\n             transform: scale(1);\n    }\n    30% {\n        opacity: .1;\n        -moz-transform: scale(.01);\n             transform: scale(.01);\n    }\n}\n@-o-keyframes ball-pulse {\n    0%,\n    60%,\n    100% {\n        opacity: 1;\n        -o-transform: scale(1);\n           transform: scale(1);\n    }\n    30% {\n        opacity: .1;\n        -o-transform: scale(.01);\n           transform: scale(.01);\n    }\n}\n@keyframes ball-pulse {\n    0%,\n    60%,\n    100% {\n        opacity: 1;\n        -webkit-transform: scale(1);\n           -moz-transform: scale(1);\n             -o-transform: scale(1);\n                transform: scale(1);\n    }\n    30% {\n        opacity: .1;\n        -webkit-transform: scale(.01);\n           -moz-transform: scale(.01);\n             -o-transform: scale(.01);\n                transform: scale(.01);\n    }\n}\n`;\n","declare global {\n  interface Window {\n    dev: () => boolean;\n    hasRemote: () => boolean;\n    hasMode: (mode) => boolean;\n    mode: string;\n    reviewModeEnabled: boolean;\n    savedStore: any;\n    locationHistory: string | null;\n    persistHistory: boolean;\n    IS_CHAMELEON_MODULE: boolean;\n    chameleon: any;\n    fonts: any;\n    FontFace: any;\n  }\n  interface Document {\n    fonts: any;\n  }\n}\n\nimport './setup';\n\nimport 'assets/whoopsBrowserIncompatible.png';\nimport { ErrorBoundary } from 'components/errorHandler';\nimport ModuleImagesPreloader from 'components/lib/PreLoaders/ModuleImagesPreloader';\nimport Module from 'components/Module';\nimport { HostingProvider } from 'hosting/context';\n//\nimport React, { FC, Fragment as _ } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport 'regenerator-runtime/runtime.js';\nimport { addFont } from 'services/fontService';\nimport getModuleImages from 'services/getModuleImages';\nimport getStore from 'services/getStore';\nimport 'services/scorm/scormService';\nimport smoothscroll from 'smoothscroll-polyfill';\nimport 'styles/global';\nimport 'whatwg-fetch';\n\nif (!('IntersectionObserver' in window)) {\n  require('intersection-observer');\n}\n\nsmoothscroll.polyfill();\n\nwindow.hasRemote = () => getParams().hasRemote;\n\nwindow.dev = () => {\n  try {\n    return window.parent.IS_CHAMELEON_EDITOR;\n  } catch (err) {\n    //\n  }\n\n  return ['DEVELOPMENT', 'EDIT'].includes(window?.mode);\n};\n\n// disable all react-beautiful-dnd development warnings\nwindow['__react-beautiful-dnd-disable-dev-warnings'] = true;\n\nconst store = getStore();\n\ntry {\n  window.hasMode = mode => {\n    const windowMode = window.mode || 'DEVELOPMENT';\n    return mode === windowMode;\n  };\n\n  window.client = parent.client;\n} catch (err) {\n  // console.warn(err);\n}\n\nconst loadTheme = store.subscribe(() => {\n  const {\n    backgroundColor = '',\n    fontFamily = '',\n    fontSizes,\n    fontFamilies = [],\n  } = store.getState().theme;\n\n  document.body.style.background = backgroundColor;\n\n  if (!!fontFamilies.length) {\n    fontFamilies.forEach(f => {\n      addFont(f);\n    });\n  }\n\n  // just wanting to smash this until it displays for sure\n  if (fontFamily) {\n    const checkFontFamilyDisplays = setInterval(() => {\n      if (document.body.style.fontFamily.includes(fontFamily)) {\n        clearInterval(checkFontFamilyDisplays);\n      }\n\n      document.body.style.fontFamily = fontFamily;\n    }, 0);\n  }\n\n  loadTheme.unsubscribe && loadTheme.unsubscribe();\n});\n\nconst isHosted = (window as any).getParams().hosted;\nconst ccURL = (window as any).chameleon.CHAMELEON_URL;\n\nconst HostingWrapper: FC = ({ children }) => {\n  if (isHosted) {\n    const projectId = (window as any).getParams().projectId;\n\n    return (\n      <HostingProvider url={ccURL} projectId={projectId}>\n        {children}\n      </HostingProvider>\n    );\n  }\n\n  return <>{children}</>;\n};\n\nconst moduleImages = getModuleImages();\n\n// console.log(window.location.hash);\nconst location = window.location.hash;\nif (location) {\n  window.location.hash = '#';\n  window.location.hash = location;\n  // something\n}\n\nReactDOM.render(\n  <_>\n    <ErrorBoundary>\n      <HostingWrapper>\n        <Provider store={store}>\n          <Module />\n\n          {(window.dev() || store.getState()?.theme?.useImagePreloader) && (\n            <ModuleImagesPreloader images={moduleImages} />\n          )}\n        </Provider>\n      </HostingWrapper>\n    </ErrorBoundary>\n  </_>,\n  document.querySelector('#root')\n);\n","module.exports = __webpack_public_path__ + \"images/Correct_loop.gif\";","module.exports = __webpack_public_path__ + \"images/Incorrect_loop.gif\";","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar children_1 = require(\"../utils/children\");\nvar defaultModuleState = {\n    currentTopic: \"\",\n    currentInteraction: \"\",\n    topics: [],\n    interactions: [],\n    history: []\n};\nexports.ModuleContext = react_1.createContext([\n    defaultModuleState,\n    function () { }\n]);\nexports.ModuleReducer = function (state, action) {\n    if (state === void 0) { state = defaultModuleState; }\n    switch (action.type) {\n        case \"GOTO\":\n            var history_1 = state.history.splice(0);\n            history_1.push(action.data);\n            return __assign(__assign({}, state), { currentTopic: action.data });\n        case \"GO_FORWARD\":\n            var histf = state.history.splice(0);\n            histf.push(action.data);\n            var _a = action.data.split(\":\"), to_1 = _a[0], ti = _a[1];\n            var topic = state.topics.find(function (t) { return t.name === to_1; });\n            if (!topic) {\n                return state;\n            }\n            var int = topic.interactions.indexOf(ti);\n            if (int === -1) {\n                return state;\n            }\n            if (int === topic.interactions.length - 1) {\n                var topicID = state.topics.findIndex(function (t) { return t.name === to_1; });\n                if (topicID === -1) {\n                    return state;\n                }\n                if (topicID === state.topics.length - 1) {\n                    return state;\n                }\n                var currentInteraction = state.topics[topicID + 1].interactions[0];\n                return __assign(__assign({}, state), { currentTopic: state.topics[topicID + 1].name, currentInteraction: currentInteraction, history: histf });\n            }\n            else {\n                var currentInteraction = topic.interactions[int + 1];\n                return __assign(__assign({}, state), { currentTopic: to_1, currentInteraction: currentInteraction, history: histf });\n            }\n        case \"GO_BACK\":\n            var histb = state.history.splice(0);\n            var prev = histb.pop();\n            console.log(prev);\n            if (!prev)\n                return state;\n            var _b = prev.split(\":\"), top_1 = _b[0], inter = _b[1];\n            console.log(inter);\n            return __assign(__assign({}, state), { currentTopic: top_1, currentInteraction: inter, history: histb });\n    }\n    return state;\n};\nexports.goToPath = function (p) {\n    return {\n        type: \"GO_TO\",\n        data: p\n    };\n};\nexports.goBack = function () {\n    return {\n        type: \"GO_BACK\"\n    };\n};\nexports.goForward = function (current) {\n    return {\n        type: \"GO_FORWARD\",\n        data: current\n    };\n};\nexports.Module = function (_a) {\n    var children = _a.children;\n    react_1.useMemo(function () {\n        var topics = children_1.Select(children, \"Topic\");\n        defaultModuleState.currentTopic = topics[0].props.name;\n        topics.forEach(function (child, i) {\n            var topic = {\n                name: child.props.name,\n                interactions: []\n            };\n            defaultModuleState.topics.push(topic);\n            var interactions = children_1.Select(child.props.children, \"Interaction\");\n            interactions.forEach(function (int, j) {\n                defaultModuleState.interactions.push(int.props.name);\n                topic.interactions.push(int.props.name);\n            });\n        });\n        defaultModuleState.currentInteraction =\n            defaultModuleState.topics[0].interactions[0];\n    }, [children]);\n    var _b = react_1.useReducer(exports.ModuleReducer, defaultModuleState), state = _b[0], dispatch = _b[1];\n    return (react_1.default.createElement(exports.ModuleContext.Provider, { value: [state, dispatch] },\n        react_1.default.createElement(react_1.default.Fragment, null,\n            children[0],\n            react_1.cloneElement(children[1], { active: state.currentTopic }))));\n};\nexports.Module.displayName = \"Module\";\n","module.exports = __webpack_public_path__ + \"images/Image.svg\";","module.exports = __webpack_public_path__ + \"images/CloseFullscreenEmbed.svg\";","module.exports = __webpack_public_path__ + \"images/CC_Sortation_Placeholder.png\";","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./box\"));\n__export(require(\"./button\"));\n__export(require(\"./card\"));\n__export(require(\"./core\"));\n__export(require(\"./flexbox\"));\n__export(require(\"./grid\"));\n__export(require(\"./heading\"));\n__export(require(\"./image\"));\n__export(require(\"./link\"));\n__export(require(\"./text\"));\n__export(require(\"./icon\"));\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar core_1 = __importDefault(require(\"./core\"));\nvar styled_system_1 = require(\"styled-system\");\nexports.Box = styled_1.default(core_1.default)(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n \\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n\"], [\"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n \\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n\"])), styled_system_1.maxWidth, styled_system_1.minWidth, styled_system_1.height, styled_system_1.minHeight, styled_system_1.maxHeight, styled_system_1.textAlign, styled_system_1.transform, styled_system_1.alignSelf, styled_system_1.flex, styled_system_1.order, styled_system_1.overflow, styled_system_1.gridArea, styled_system_1.opacity, styled_system_1.position, styled_system_1.zIndex, styled_system_1.top, styled_system_1.right, styled_system_1.bottom, styled_system_1.left, styled_system_1.width, styled_system_1.background, styled_system_1.backgroundImage, styled_system_1.backgroundSize, styled_system_1.backgroundPosition, styled_system_1.backgroundRepeat, styled_system_1.border, styled_system_1.borderBottom, styled_system_1.borderTop, styled_system_1.borderRight, styled_system_1.borderLeft, styled_system_1.borderColor, styled_system_1.boxShadow, styled_system_1.borderRadius);\nexports.Box.displayName = \"Box\";\nexports.Box.defaultProps = {\n    flex: 1\n};\nvar templateObject_1;\n","module.exports = __webpack_public_path__ + \"images/Logo_updated.svg\";","module.exports = __webpack_public_path__ + \"images/Character A.png\";","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./editor\"));\n__export(require(\"./player\"));\n__export(require(\"./components\"));\n__export(require(\"./app\"));\n__export(require(\"./utils\"));\n__export(require(\"./chrome\"));\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar box_1 = require(\"./box\");\nvar styled_system_1 = require(\"styled-system\");\nexports.Flexbox = styled_1.default(box_1.Box)(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  display: flex;\\n  \\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n\"], [\"\\n  display: flex;\\n  \\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n\"])), styled_system_1.alignItems, styled_system_1.justifyContent, styled_system_1.flexWrap, styled_system_1.flexDirection, styled_system_1.alignContent, styled_system_1.flexBasis);\nexports.Flexbox.displayName = \"flexbox\";\nvar templateObject_1;\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar box_1 = require(\"./box\");\nvar styled_system_1 = require(\"styled-system\");\nvar texts = styled_system_1.variant({ key: \"textStyles\" });\nexports.Text = styled_1.default(box_1.Box)(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n    \", \"\\n    \", \"\\n    \", \"\\n    \", \"\\n    \", \"\\n    \", \"\\n    \", \"\\n    \", \"\\n\"], [\"\\n    \", \"\\n    \", \"\\n    \", \"\\n    \", \"\\n    \", \"\\n    \", \"\\n    \", \"\\n    \", \"\\n\"])), styled_system_1.fontFamily, styled_system_1.fontWeight, styled_system_1.textAlign, styled_system_1.lineHeight, styled_system_1.letterSpacing, texts, function (p) { return p.theme[\"Text\"]; }, styled_system_1.color);\nexports.Text.defaultProps = {\n    as: \"p\",\n    m: 0,\n    p: 0,\n    fontSize: 2\n};\nvar templateObject_1;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = require(\"react\");\nexports.defaultState = {\n    sidebarlist: []\n};\nexports.EditContext = react_1.createContext(undefined);\nexports.useSidebar = function () {\n    var _a = react_1.useState(exports.defaultState), state = _a[0], setState = _a[1];\n    var ctx = __assign(__assign(__assign({}, state), {\n        pushSidebarItem: function (item, exclusive) {\n            if (exclusive === void 0) { exclusive = true; }\n            var sl = exclusive ? [] : state.sidebarlist.splice(0);\n            sl.push(item);\n            setState({ sidebarlist: sl });\n        },\n        popSidebarItem: function () {\n            var sl = state.sidebarlist.splice(0);\n            sl.pop();\n            setState({ sidebarlist: sl });\n        },\n        clearSidebarList: function () {\n            setState({ sidebarlist: [] });\n        }\n    }), { apply: function (block) { } });\n    return ctx;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = require(\"react\");\nvar defaultContext = {\n    boxed: false,\n    nav: [],\n    search: { q: \"\", url: \"\" },\n    networkRequestActive: false,\n    networkAvailable: false,\n    isOpen: function (id) { return false; },\n    toggleMenu: function (id) { }\n};\nexports.NavContext = react_1.createContext(defaultContext);\n","module.exports = __webpack_public_path__ + \"images/Plus.svg\";","module.exports = __webpack_public_path__ + \"images/addImg@3x.svg\";","module.exports = __webpack_public_path__ + \"images/Video.svg\";","module.exports = __webpack_public_path__ + \"images/Embed.svg\";","module.exports = __webpack_public_path__ + \"images/FullScreenIcon.svg\";","module.exports = __webpack_public_path__ + \"images/PDF_smallIcon.svg\";","module.exports = __webpack_public_path__ + \"images/tick_mint.svg\";","module.exports = __webpack_public_path__ + \"images/Audio.png\";","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Components = __importStar(require(\"../components\"));\nvar react_1 = require(\"react\");\nexports.Renderer = function (root, blocks, plugins) {\n    var rootBlock = blocks[root];\n    if (!root || (!rootBlock.type && rootBlock.type !== \"Module\")) {\n        throw new Error(\"Root block must be of type module\");\n    }\n    var parsedPlugins;\n    if (!plugins) {\n        parsedPlugins = [];\n    }\n    else if (Array.isArray(plugins)) {\n        parsedPlugins = plugins;\n    }\n    else {\n        throw new Error(\"plugins must be undefined or an array of plugin objects\");\n    }\n    var renderRoot = function () {\n        return render(rootBlock);\n    };\n    var render = function (block) {\n        if (!block) {\n            throw new Error(\"block must be not null\");\n        }\n        if (block.type === \"Ref\") {\n            block = blocks[block.id];\n        }\n        var children = block.children;\n        if (!children) {\n            children = null;\n        }\n        else if (children && Array.isArray(children)) {\n            children = children.map(render);\n        }\n        var animator = {};\n        if (block.animator) {\n            animator.animator = Components[block.animator.type];\n            animator.config = block.animator.config;\n        }\n        var element = react_1.createElement(Components[block.type], __assign(__assign({ key: Math.random(), children: children }, block.props), animator));\n        var _a = parsedPlugins.reduce(function (_a, fn) {\n            var block = _a[0], element = _a[1];\n            return fn.onRenderedBlock(block, element);\n        }, [block, element]), _ = _a[0], renderedElement = _a[1];\n        return renderedElement;\n    };\n    return {\n        render: render,\n        renderRoot: renderRoot\n    };\n};\nexports.editorPlugin = {\n    onRenderedBlock: function (block, element) {\n        if (element.type.editableFields) {\n            return [\n                block,\n                react_1.createElement(Components.Editable, {\n                    block: block,\n                    key: \"edit-\" + block.id,\n                    children: react_1.cloneElement(element)\n                })\n            ];\n        }\n        return [block, element];\n    }\n};\n","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nvar useCarousel_1 = require(\"../hooks/useCarousel\");\nvar carouselAnimator_1 = require(\"./carouselAnimator\");\nvar carouselNavigation_1 = require(\"./carouselNavigation\");\nvar interaction_1 = require(\"./interaction\");\nexports.CarouselContext = react_1.createContext({});\n/**\n * React Component for displaying a list of slides.\n * Responsible for navigation, and state management, it will report back to\n * the container interaction that it has been completed\n */\nexports.Carousel = function (_a) {\n    var children = _a.children;\n    var ctx = useCarousel_1.useCarousel(children.length, 0);\n    var _b = ctx.state, current = _b.current, count = _b.count;\n    var interaction = react_1.useContext(interaction_1.InteractionContext);\n    react_1.useEffect(function () {\n        if (current === count - 1) {\n            interaction.complete();\n        }\n    }, [current, count]);\n    return (react_1.default.createElement(exports.CarouselContext.Provider, { value: ctx },\n        react_1.default.createElement(creator_ui_1.Box, { py: \"20px\", position: \"relative\", style: { boxSizing: \"content-box\" } },\n            react_1.default.createElement(carouselAnimator_1.CarouselAnimator, null, children)),\n        react_1.default.createElement(carouselNavigation_1.CarouselNavigation, null),\n        react_1.default.createElement(\"div\", { style: { display: \"none\" }, \"aria-live\": \"polite\", \"aria-atomic\": \"true\" },\n            \"Slide \",\n            current,\n            \" of \",\n            count)));\n};\nexports.Carousel.displayName = \"Carousel\";\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nvar topic_1 = require(\"./topic\");\nexports.InteractionContext = react_1.createContext({\n    topic: \"\",\n    name: \"\",\n    isComplete: false,\n    complete: function () { }\n});\nexports.Interaction = function (_a) {\n    var children = _a.children, name = _a.name, _b = _a.autoComplete, autoComplete = _b === void 0 ? true : _b;\n    var topic = react_1.useContext(topic_1.TopicContext);\n    var _c = react_1.useState({ isComplete: autoComplete }), state = _c[0], setState = _c[1];\n    return (react_1.default.createElement(exports.InteractionContext.Provider, { value: {\n            topic: topic.name,\n            name: name,\n            isComplete: state.isComplete,\n            complete: function () { return setState({ isComplete: true }); }\n        } },\n        react_1.default.createElement(creator_ui_1.Box, { as: \"section\", id: name, minHeight: \"calc(100vh - 180px)\", height: \"calc(100vh - 180px)\", width: \"100%\", p: \"20px\" }, children)));\n};\nexports.Interaction.displayName = \"Interaction\";\nexports.Interaction.editableFields = [];\nexports.Interaction.editableContainer = react_1.forwardRef(function (props, ref) {\n    var p = __assign({}, props);\n    delete p.onClick;\n    delete p.onKeyPress;\n    delete p.tabIndex;\n    return react_1.default.createElement(creator_ui_1.Box, __assign({}, p, { ref: ref, p: \"0px\", m: \"30px\", width: \"calc(100% - 60px)\" }));\n});\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar navbarLink_1 = require(\"./navbarLink\");\nvar dropDown_1 = require(\"./dropDown\");\nvar navArrow_1 = require(\"./navArrow\");\nvar navbarContext_1 = require(\"./navbarContext\");\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar ListItem = styled_1.default.li(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  position: relative;\\n  flex: 1;\\n  height: 100%;\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  font-size: 14px;\\n\"], [\"\\n  position: relative;\\n  flex: 1;\\n  height: 100%;\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  font-size: 14px;\\n\"])));\nvar DropDownList = styled_1.default.ul(templateObject_2 || (templateObject_2 = __makeTemplateObject([\"\\n  list-style: none;\\n  margin: 0;\\n  padding: 0;\\n\"], [\"\\n  list-style: none;\\n  margin: 0;\\n  padding: 0;\\n\"])));\nvar DropDownListItem = styled_1.default.li(templateObject_3 || (templateObject_3 = __makeTemplateObject([\"\\n  position: relative;\\n  display: flex;\\n  align-items: center;\\n  width: 100%;\\n  height: 64px;\\n  font-size: 16px;\\n  cursor: pointer;\\n  transition: color 0.2s;\\n  border-bottom: 1px solid rgb(221, 229, 254);\\n\\n  &:last-of-type {\\n    border-bottom: none;\\n    margin-bottom: -16px;\\n  }\\n\\n  &:first-of-type {\\n    margin-top: -16px;\\n  }\\n\\n  &:hover {\\n    color: \\\"#ff0063\\\";\\n  }\\n\"], [\"\\n  position: relative;\\n  display: flex;\\n  align-items: center;\\n  width: 100%;\\n  height: 64px;\\n  font-size: 16px;\\n  cursor: pointer;\\n  transition: color 0.2s;\\n  border-bottom: 1px solid rgb(221, 229, 254);\\n\\n  &:last-of-type {\\n    border-bottom: none;\\n    margin-bottom: -16px;\\n  }\\n\\n  &:first-of-type {\\n    margin-top: -16px;\\n  }\\n\\n  &:hover {\\n    color: \\\"#ff0063\\\";\\n  }\\n\"])));\nvar LogoIcon = styled_1.default.img(templateObject_4 || (templateObject_4 = __makeTemplateObject([\"\\n  display: block;\\n  width: 44px;\\n  height: 32px;\\n  padding-right: 4px;\\n  padding-left: 8px;\\n\"], [\"\\n  display: block;\\n  width: 44px;\\n  height: 32px;\\n  padding-right: 4px;\\n  padding-left: 8px;\\n\"])));\nexports.NavItem = function (_a) {\n    var item = _a.item, id = _a.id;\n    var url = item.url, label = item.label, children = item.children, logo = item.logo;\n    var toggleMenu = react_1.useContext(navbarContext_1.NavContext).toggleMenu;\n    if (url) {\n        return (react_1.default.createElement(ListItem, null,\n            react_1.default.createElement(navbarLink_1.Link, { target: \"_parent\", href: url }, label)));\n    }\n    return (react_1.default.createElement(ListItem, null,\n        react_1.default.createElement(navbarLink_1.Link, { onClick: function (e) {\n                e.stopPropagation();\n                toggleMenu(id);\n            }, style: { paddingRight: 16 } },\n            react_1.default.createElement(\"div\", null, label),\n            logo ? react_1.default.createElement(LogoIcon, { src: logo }) : null,\n            react_1.default.createElement(navArrow_1.NavArrow, null)),\n        react_1.default.createElement(dropDown_1.DropDown, __assign({}, { id: id }),\n            react_1.default.createElement(DropDownList, null, children.map(function (a) {\n                return (react_1.default.createElement(DropDownListItem, { key: \"item-\" + a.label },\n                    react_1.default.createElement(navbarLink_1.Link, { target: \"_parent\", href: a.url }, a.label)));\n            })))));\n};\nvar templateObject_1, templateObject_2, templateObject_3, templateObject_4;\n","module.exports = __webpack_public_path__ + \"images/new_graphic_banner_default.png\";","module.exports = __webpack_public_path__ + \"images/chameleon_icon_white.svg\";","module.exports = __webpack_public_path__ + \"images/Media_default.svg\";","module.exports = __webpack_public_path__ + \"images/Character C.png\";","module.exports = __webpack_public_path__ + \"images/Wide Image.png\";","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar styled_system_1 = require(\"styled-system\");\nvar Core = styled_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n    \", \"\\n    \", \"\\n    \", \"\\n    \", \"\\n    \", \"\\n\"], [\"\\n    \", \"\\n    \", \"\\n    \", \"\\n    \", \"\\n    \", \"\\n\"])), styled_system_1.space, styled_system_1.width, styled_system_1.color, styled_system_1.fontSize, styled_system_1.display);\nCore.displayName = \"Core\";\nexports.default = Core;\nvar templateObject_1;\n","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./windowButton\"));\n__export(require(\"./indicator\"));\n","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./accordion\"));\n__export(require(\"./accordionBody\"));\n__export(require(\"./accordionField\"));\n__export(require(\"./accordionHeader\"));\n__export(require(\"./animation\"));\n__export(require(\"./animationGroup\"));\n__export(require(\"./back\"));\n__export(require(\"./branchButton\"));\n__export(require(\"./carousel\"));\n__export(require(\"./choice\"));\n__export(require(\"./choices\"));\n__export(require(\"./column\"));\n__export(require(\"./continueButton\"));\n__export(require(\"./description\"));\n__export(require(\"./dragAndDrop\"));\n__export(require(\"./dragContainer\"));\n__export(require(\"./dragItem\"));\n__export(require(\"./dropContainer\"));\n__export(require(\"./dropItem\"));\n__export(require(\"./feedback\"));\n__export(require(\"./header\"));\n__export(require(\"./heading\"));\n__export(require(\"./image\"));\n__export(require(\"./interaction\"));\n// export * from \"./logo\";\n__export(require(\"./menu\"));\n__export(require(\"./module\"));\n__export(require(\"./multipleChoice\"));\n__export(require(\"./paragraph\"));\n__export(require(\"./quiz\"));\n__export(require(\"./rating\"));\n__export(require(\"./result\"));\n__export(require(\"./singleChoice\"));\n__export(require(\"./singleColumnLayout\"));\n__export(require(\"./slide\"));\n__export(require(\"./text\"));\n__export(require(\"./textarea\"));\n__export(require(\"./title\"));\n__export(require(\"./topic\"));\n__export(require(\"./topicTitle\"));\n__export(require(\"./twoColumnLayout\"));\n__export(require(\"./editable\"));\n__export(require(\"./video\"));\n","\"use strict\";\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n            r[k] = a[j];\n    return r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = require(\"react\");\nexports.Select = function (children, kind) {\n    var elements = [];\n    react_1.Children.forEach(children, function (child, i) {\n        if (!child.type) {\n            return;\n        }\n        if (child.type.displayName === kind) {\n            elements.push(child);\n        }\n        if (child.props.children) {\n            var es = exports.Select(child.props.children, kind);\n            elements = __spreadArrays(elements, es);\n        }\n    });\n    return elements;\n};\n","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar module_1 = require(\"./module\");\nexports.TopicContext = react_1.createContext({ name: \"\" });\nexports.Topic = function (_a) {\n    var children = _a.children, name = _a.name;\n    var _b = react_1.useContext(module_1.ModuleContext), modCtx = _b[0], _ = _b[1];\n    var c = react_1.default.Children.map(children, function (child) {\n        if (child.type.displayName === \"AnimationGroup\") {\n            return react_1.cloneElement(child, { active: modCtx.currentInteraction });\n        }\n        return child;\n    });\n    return react_1.default.createElement(exports.TopicContext.Provider, { value: { name: name } }, c);\n};\nexports.Topic.displayName = \"Topic\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nexports.Topics = function () {\n    return react_1.default.createElement(creator_ui_1.Box, null, \"Edit Topics\");\n};\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.Bar = function (_a) {\n    var children = _a.children, boxed = _a.boxed;\n    return (react_1.default.createElement(\"div\", { style: {\n            background: \"#fff\",\n            position: \"fixed\",\n            top: 0,\n            left: 0,\n            width: \"100vw\",\n            height: \"70px\",\n            zIndex: 1000,\n            boxShadow: \"0 2px 10px rgba(0, 0, 0, 0.1)\"\n        } },\n        react_1.default.createElement(\"div\", { style: {\n                display: \"flex\",\n                justifyContent: \"space-between\",\n                alignItems: \"center\",\n                maxWidth: boxed ? \"1024px\" : \"100%\",\n                margin: \"auto\"\n            } }, children)));\n};\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nvar BurgerIcon = function () {\n    return (react_1.default.createElement(\"svg\", { width: \"26px\", height: \"16px\", viewBox: \"0 0 18 14\", version: \"1.1\" },\n        react_1.default.createElement(\"title\", null, \"Burger\"),\n        react_1.default.createElement(\"desc\", null, \"Created with Sketch.\"),\n        react_1.default.createElement(\"g\", { stroke: \"none\", strokeWidth: \"1\", fill: \"none\", fillRule: \"evenodd\" },\n            react_1.default.createElement(\"g\", { fill: \"#282A2B\" },\n                react_1.default.createElement(\"rect\", { x: \"0\", y: \"0\", width: \"18\", height: \"2\" }),\n                react_1.default.createElement(\"rect\", { x: \"0\", y: \"6\", width: \"18\", height: \"2\" }),\n                react_1.default.createElement(\"rect\", { x: \"0\", y: \"12\", width: \"18\", height: \"2\" })))));\n};\nexports.Burger = function (_a) {\n    var showDrawer = _a.showDrawer, setDrawer = _a.setDrawer;\n    return (react_1.default.createElement(creator_ui_1.Flexbox, { flex: \"0 0 52px\", pl: \"24px\", pr: \"4px\", height: \"70px\", style: { cursor: \"pointer\" }, onClick: function () { return setDrawer(!showDrawer); }, justifyContent: \"center\", alignItems: \"center\" },\n        react_1.default.createElement(BurgerIcon, null)));\n};\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nexports.Drawer = styled_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  transition: transform 0.2s ease-out;\\n  transform: translate3d(-340px, 0, 0);\\n  width: 340px;\\n  height: calc(100vh - 0px);\\n  position: fixed;\\n  top: 0px;\\n  left: 0;\\n  z-index: 10000;\\n  background: #fff;\\n\"], [\"\\n  transition: transform 0.2s ease-out;\\n  transform: translate3d(-340px, 0, 0);\\n  width: 340px;\\n  height: calc(100vh - 0px);\\n  position: fixed;\\n  top: 0px;\\n  left: 0;\\n  z-index: 10000;\\n  background: #fff;\\n\"])));\nexports.Overlay = styled_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject([\"\\n  position: fixed;\\n  top: 0px;\\n  left: 0;\\n  z-index: 9999;\\n  background: rgba(0, 0, 0, 0.5);\\n  width: 100%;\\n  height: calc(100vh - 0px);\\n  cursor: pointer;\\n\"], [\"\\n  position: fixed;\\n  top: 0px;\\n  left: 0;\\n  z-index: 9999;\\n  background: rgba(0, 0, 0, 0.5);\\n  width: 100%;\\n  height: calc(100vh - 0px);\\n  cursor: pointer;\\n\"])));\nexports.DrawerLink = styled_1.default.a(templateObject_3 || (templateObject_3 = __makeTemplateObject([\"\\n  padding: 24px;\\n  display: block;\\n  color: #333;\\n  text-decoration: none;\\n  transition: color 0.2s;\\n  border-bottom: 1px solid rgb(221, 229, 254);\\n\\n  &:hover {\\n    color: #ff0063;\\n    text-decoration: none;\\n  }\\n\"], [\"\\n  padding: 24px;\\n  display: block;\\n  color: #333;\\n  text-decoration: none;\\n  transition: color 0.2s;\\n  border-bottom: 1px solid rgb(221, 229, 254);\\n\\n  &:hover {\\n    color: #ff0063;\\n    text-decoration: none;\\n  }\\n\"])));\nvar Item = styled_1.default.li(templateObject_4 || (templateObject_4 = __makeTemplateObject([\"\\n  list-style: none;\\n\"], [\"\\n  list-style: none;\\n\"])));\nexports.DrawerItem = function (_a) {\n    var item = _a.item;\n    var url = item.url, label = item.label, _b = item.children, children = _b === void 0 ? [] : _b;\n    return (react_1.default.createElement(Item, { id: \"drawer-\" + item.label + \"-i\" },\n        url ? (react_1.default.createElement(exports.DrawerLink, { href: url }, label)) : (react_1.default.createElement(exports.DrawerLink, null, label)),\n        react_1.default.createElement(\"ul\", { style: { padding: \"0\", listStyle: \"none\", margin: 0 } }, children.map(function (a, i) {\n            return (react_1.default.createElement(\"li\", { key: \"item-\" + a.label + \"-\" + i },\n                react_1.default.createElement(exports.DrawerLink, { href: a.url }, a.label)));\n        }))));\n};\nvar templateObject_1, templateObject_2, templateObject_3, templateObject_4;\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar navbarContext_1 = require(\"./navbarContext\");\nvar Container = styled_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  margin: 0;\\n  padding: 0;\\n  list-style: none;\\n  position: absolute;\\n  top: calc(100% + 12px);\\n  min-width: 256px;\\n  right: 0;\\n  background: #fff;\\n  padding: 32px;\\n  flex-direction: column;\\n  opacity: 0;\\n  transition: opacity 0.3s;\\n  min-width: 440px;\\n  border-radius: 14px;\\n  box-shadow: 0 32px 80px -30px rgba(0, 0, 0, 0.17);\\n\\n  &::before {\\n    content: \\\" \\\";\\n    width: 12px;\\n    height: 12px;\\n    border-radius: 2px;\\n    position: absolute;\\n    top: -4px;\\n    right: 24px;\\n    background: #fff;\\n    transform: rotate(45deg);\\n    box-shadow: 0px 0px 15px -5px rgba(0, 0, 0, 0.5);\\n  }\\n\"], [\"\\n  margin: 0;\\n  padding: 0;\\n  list-style: none;\\n  position: absolute;\\n  top: calc(100% + 12px);\\n  min-width: 256px;\\n  right: 0;\\n  background: #fff;\\n  padding: 32px;\\n  flex-direction: column;\\n  opacity: 0;\\n  transition: opacity 0.3s;\\n  min-width: 440px;\\n  border-radius: 14px;\\n  box-shadow: 0 32px 80px -30px rgba(0, 0, 0, 0.17);\\n\\n  &::before {\\n    content: \\\" \\\";\\n    width: 12px;\\n    height: 12px;\\n    border-radius: 2px;\\n    position: absolute;\\n    top: -4px;\\n    right: 24px;\\n    background: #fff;\\n    transform: rotate(45deg);\\n    box-shadow: 0px 0px 15px -5px rgba(0, 0, 0, 0.5);\\n  }\\n\"])));\nexports.DropDownItem = styled_1.default.li(templateObject_2 || (templateObject_2 = __makeTemplateObject([\"\\n  display: block;\\n\"], [\"\\n  display: block;\\n\"])));\nexports.DropDownCtx = react_1.createContext({\n    open: false\n});\nexports.DropDown = function (_a) {\n    var children = _a.children, id = _a.id;\n    var _b = react_1.useContext(navbarContext_1.NavContext), isOpen = _b.isOpen, toggleMenu = _b.toggleMenu;\n    var open = isOpen(id);\n    react_1.useEffect(function () {\n        var onBodyClick = function () {\n            if (open) {\n                toggleMenu(id);\n            }\n        };\n        window.addEventListener(\"click\", onBodyClick);\n        return function () { return window.removeEventListener(\"click\", onBodyClick); };\n    }, [open]);\n    return (react_1.default.createElement(exports.DropDownCtx.Provider, { value: { open: open } },\n        react_1.default.createElement(Container, { style: {\n                display: open ? \"flex\" : \"none\",\n                opacity: open ? 1 : 0\n            }, onClick: function (e) {\n                e.stopPropagation();\n                toggleMenu(id);\n            } }, children)));\n};\nvar templateObject_1, templateObject_2;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.Logo = function (_a) {\n    var _b = _a.style, style = _b === void 0 ? {} : _b;\n    return (react_1.default.createElement(\"svg\", { width: \"41px\", height: \"44px\", viewBox: \"0 0 41 44\", version: \"1.1\" },\n        react_1.default.createElement(\"defs\", null,\n            react_1.default.createElement(\"linearGradient\", { x1: \"0%\", y1: \"49.9784576%\", x2: \"100%\", y2: \"49.9784576%\", id: \"linearGradient-1\" },\n                react_1.default.createElement(\"stop\", { stopColor: \"#3CBCB8\", offset: \"0%\" }),\n                react_1.default.createElement(\"stop\", { stopColor: \"#61CECE\", offset: \"54%\" }))),\n        react_1.default.createElement(\"g\", { stroke: \"none\", strokeWidth: \"1\", fill: \"none\", fillRule: \"evenodd\" },\n            react_1.default.createElement(\"g\", { id: \"New-Dashboard-Nav\", transform: \"translate(-37.000000, -27.000000)\", fillRule: \"nonzero\" },\n                react_1.default.createElement(\"g\", { id: \"Logo_2019\", transform: \"translate(37.000000, 27.000000)\" },\n                    react_1.default.createElement(\"path\", { d: \"M15.456,29.6 C17.4556354,35.7401831 22.3805494,40.4821374 28.592,42.248 C36.1045868,39.1387759 41.0047894,31.8105734 41.008,23.68 L28.96,23.68 C28.9336224,28.1029126 25.3429891,31.675682 20.92,31.68 C18.9006207,31.705658 16.9471288,30.9620154 15.456,29.6 Z\", id: \"Fill-1\", fill: \"url(#linearGradient-1)\" }),\n                    react_1.default.createElement(\"path\", { d: \"M25.368,-2.20638349e-06 L25.368,4.064 C17.2161938,2.2078218 8.76619046,5.58832662 4.14399692,12.5548658 C-0.478196616,19.521405 -0.308512623,28.6209422 4.57019481,35.410313 C9.44890224,42.1996837 18.0190634,45.2628043 26.096,43.104 C18.529893,40.0722864 13.4003278,32.9376693 12.936,24.8 C12.8828595,24.4396532 12.8534628,24.0762031 12.848,23.712 C12.8742091,19.3046238 16.4406238,15.7382091 20.848,15.712 L25.312,15.712 L25.312,15.712 L40.9922955,15.712 C41.0175725,11.5523841 39.3825169,7.5544678 36.4494404,4.60487116 C33.5163639,1.65527452 29.5276939,-0.0022095975 25.368,-2.20638349e-06 Z M32.952,12.72 C31.1846888,12.72 29.752,11.2873112 29.752,9.52 C29.752,7.7526888 31.1846888,6.32 32.952,6.32 C34.7193112,6.32 36.152,7.7526888 36.152,9.52 C36.152,11.2873112 34.7193112,12.72 32.952,12.72 L32.952,12.72 Z\", id: \"Shape\", fill: \"#61CECE\" }),\n                    react_1.default.createElement(\"path\", { d: \"M33.12,9.512 C33.1245177,8.82254066 33.6839774,8.26561729 34.3734502,8.26422978 C35.0629229,8.26284745 35.6246154,8.8175188 35.6319029,9.50695443 C35.6391903,10.1963901 35.089348,10.7628105 34.4,10.776 C34.0654974,10.776 33.7448105,10.642581 33.5090334,10.4053022 C33.2732564,10.1680234 33.1418694,9.84649586 33.144,9.512\", id: \"Fill-12\", fill: \"#61CECE\" }))))));\n};\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar I = styled_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  margin-left: 4px;\\n  transform: rotate(90deg);\\n  transition: all 0.2s;\\n\\n  & svg {\\n    stroke: #282a2b;\\n  }\\n\"], [\"\\n  margin-left: 4px;\\n  transform: rotate(90deg);\\n  transition: all 0.2s;\\n\\n  & svg {\\n    stroke: #282a2b;\\n  }\\n\"])));\nexports.NavArrow = function () { return (react_1.default.createElement(I, null,\n    react_1.default.createElement(\"svg\", { width: \"8px\", height: \"13px\", viewBox: \"0 0 9 15\" },\n        react_1.default.createElement(\"defs\", null),\n        react_1.default.createElement(\"g\", { strokeWidth: \"1\", fill: \"none\", fillRule: \"evenodd\" },\n            react_1.default.createElement(\"g\", { id: \"Third\", transform: \"translate(-1206.000000, -566.000000)\", strokeWidth: \"2\" },\n                react_1.default.createElement(\"polyline\", { id: \"Pointer---dark\", transform: \"translate(1210.000000, 573.500000) rotate(-90.000000) translate(-1210.000000, -573.500000) \", points: \"1216.5 570.5 1210 576.5 1203.5 570.5\" })))))); };\nvar templateObject_1;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar navItem_1 = require(\"./navItem\");\nexports.Admin = function (_a) {\n    var name = _a.name, profileImg = _a.profileImg;\n    return (react_1.default.createElement(\"div\", null,\n        react_1.default.createElement(navItem_1.NavItem, { item: {\n                logo: profileImg,\n                label: name,\n                children: [\n                    {\n                        label: \"Settings\",\n                        url: \"/users/edit\"\n                    },\n                    {\n                        label: \"Logout\",\n                        url: \"/users/sign_out\"\n                    }\n                ]\n            }, id: \"user-menu\" })));\n};\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nexports.Link = styled_1.default.a(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  flex: 1;\\n  color: #333;\\n  text-decoration: none;\\n  transition: color 0.2s;\\n  display: flex;\\n  padding: 4px 8px;\\n  cursor: pointer;\\n  height: calc(100%);\\n  align-items: center;\\n  width: calc(100% + 6px);\\n  font-size: 14px;\\n\\n  &:hover {\\n    color: #ff0063;\\n    text-decoration: none;\\n  }\\n\\n  & svg {\\n    transition: stroke 0.2s;\\n  }\\n\\n  &:hover svg {\\n    transition: stroke 0.2s;\\n    stroke: #ff0063;\\n  }\\n\"], [\"\\n  flex: 1;\\n  color: #333;\\n  text-decoration: none;\\n  transition: color 0.2s;\\n  display: flex;\\n  padding: 4px 8px;\\n  cursor: pointer;\\n  height: calc(100%);\\n  align-items: center;\\n  width: calc(100% + 6px);\\n  font-size: 14px;\\n\\n  &:hover {\\n    color: #ff0063;\\n    text-decoration: none;\\n  }\\n\\n  & svg {\\n    transition: stroke 0.2s;\\n  }\\n\\n  &:hover svg {\\n    transition: stroke 0.2s;\\n    stroke: #ff0063;\\n  }\\n\"])));\nvar templateObject_1;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nexports.SearchBar = function (_a) {\n    var _b = _a.q, q = _b === void 0 ? \"\" : _b, showSearch = _a.showSearch;\n    return showSearch ? (react_1.default.createElement(\"div\", { style: {\n            width: \"100%\",\n            height: \"40px\",\n            borderRadius: \"9999px\",\n            background: \"#eaeffb\"\n        } },\n        react_1.default.createElement(creator_ui_1.Flexbox, { as: \"label\", html: \"#global-search\", alignItems: \"center\", style: { width: \"100%\", height: \"100%\", cursor: \"text\" } },\n            react_1.default.createElement(\"i\", { className: \"fa fa-search\", style: { fontSize: 14, margin: \"0 0 0 20px\" } }),\n            react_1.default.createElement(\"form\", { action: \"/search\", method: \"GET\" },\n                react_1.default.createElement(\"input\", { id: \"global-search\", type: \"text\", name: \"q\", style: {\n                        flex: 1,\n                        outline: \"none\",\n                        border: \"none\",\n                        background: \"transparent\",\n                        padding: \"0 0 0 20px\"\n                    }, defaultValue: q, placeholder: \"Search\", onKeyUp: function (e) {\n                        var value = e.currentTarget.value;\n                        if (e.key === \"Enter\") {\n                            console.log({ value: value });\n                        }\n                    } }))))) : null;\n};\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar navItem_1 = require(\"./navItem\");\nexports.NavigationList = styled_1.default.ul(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  display: flex;\\n  margin: 0;\\n  padding: 0;\\n  user-select: none;\\n  justify-content: center;\\n  align-items: center;\\n  height: 70px;\\n  list-style: none;\\n\"], [\"\\n  display: flex;\\n  margin: 0;\\n  padding: 0;\\n  user-select: none;\\n  justify-content: center;\\n  align-items: center;\\n  height: 70px;\\n  list-style: none;\\n\"])));\nexports.Navigation = function (_a) {\n    var nav = _a.nav;\n    return (react_1.default.createElement(exports.NavigationList, null, nav.map(function (r, i) { return (react_1.default.createElement(navItem_1.NavItem, { key: \"nav-\" + r.label + \"-i\", id: \"nav-\" + r.label + \"-i\", item: r })); })));\n};\nvar templateObject_1;\n","module.exports = __webpack_public_path__ + \"images/Card_Test.png\";","/**\n * Element.closest() polyfill\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n */\nif (!Element.prototype.closest) {\n  if (!Element.prototype.matches) {\n    Element.prototype.matches =\n      (Element.prototype as any).msMatchesSelector ||\n      Element.prototype.webkitMatchesSelector;\n  }\n  Element.prototype.closest = function (s) {\n    var el = this;\n    var ancestor = this;\n    if (!document.documentElement.contains(el)) return null;\n    do {\n      if (ancestor.matches(s)) return ancestor;\n      ancestor = ancestor.parentElement!;\n    } while (ancestor !== null);\n    return null;\n  };\n}\n","module.exports = __webpack_public_path__ + \"images/Loader_Logo_2.gif\";","module.exports = __webpack_public_path__ + \"images/edit.svg\";","module.exports = __webpack_public_path__ + \"images/pdf_thumbnail_26012023.png\";","module.exports = __webpack_public_path__ + \"images/CC_Correct.png\";","module.exports = __webpack_public_path__ + \"images/CC_Incorrect.png\";","module.exports = __webpack_public_path__ + \"images/CC_TryAgain.png\";","module.exports = __webpack_public_path__ + \"images/previewInteractionIcon.svg\";","module.exports = __webpack_public_path__ + \"images/reviewToolReviewsBubble.svg\";","module.exports = __webpack_public_path__ + \"images/expand.svg\";","module.exports = __webpack_public_path__ + \"images/Wide Image 2.png\";","module.exports = __webpack_public_path__ + \"images/genericAdditionalPlaceholder.png\";","module.exports = __webpack_public_path__ + \"images/CC_Phone Character.png\";","module.exports = __webpack_public_path__ + \"images/addInteractionDefault.svg\";","module.exports = __webpack_public_path__ + \"images/addInteractionHover.svg\";","module.exports = __webpack_public_path__ + \"images/Play Default.svg\";","module.exports = __webpack_public_path__ + \"images/Play Hover.svg\";","module.exports = __webpack_public_path__ + \"images/the Gwillest.png\";","module.exports = __webpack_public_path__ + \"images/addInteractionBKG.svg\";","module.exports = __webpack_public_path__ + \"images/theresNothingHereYet.png\";","module.exports = __webpack_public_path__ + \"images/watchAQuickHowToVideo.png\";","module.exports = __webpack_public_path__ + \"images/playVideo.svg\";","module.exports = __webpack_public_path__ + \"images/clickPreviewToSeeOutput.png\";","module.exports = __webpack_public_path__ + \"images/CC_Multi Choice Media Placeholders_1.svg\";","module.exports = __webpack_public_path__ + \"images/CC_Multi Choice Media Placeholders_2.svg\";","module.exports = __webpack_public_path__ + \"images/CC_Multi Choice Media Placeholders_3.svg\";","module.exports = __webpack_public_path__ + \"images/CC_Multi Choice Media Placeholders_4.svg\";","module.exports = __webpack_public_path__ + \"images/CC_Multi Choice Media Placeholders_5.svg\";","module.exports = __webpack_public_path__ + \"images/CC_Multi Choice Media Placeholders_6.svg\";","module.exports = __webpack_public_path__ + \"images/CC_Question Text + Image.svg\";","module.exports = __webpack_public_path__ + \"images/Cross.svg\";","module.exports = __webpack_public_path__ + \"images/Plus_purple.svg\";","module.exports = __webpack_public_path__ + \"images/Info.svg\";","module.exports = __webpack_public_path__ + \"images/CC_Sortation Placeholder_Panel Media 4.png\";","module.exports = __webpack_public_path__ + \"images/CC_QuestionTextImage.svg\";","module.exports = __webpack_public_path__ + \"images/HotspotSVGError.svg\";","module.exports = __webpack_public_path__ + \"images/Delete_new.svg\";","module.exports = __webpack_public_path__ + \"images/tick_grey.svg\";","module.exports = __webpack_public_path__ + \"images/Hotspot_Add.svg\";","module.exports = __webpack_public_path__ + \"images/imageUploadError_hotSpot.svg\";","module.exports = __webpack_public_path__ + \"images/SVG.svg\";","module.exports = __webpack_public_path__ + \"images/AudioIcon.svg\";","module.exports = __webpack_public_path__ + \"images/Text.svg\";","module.exports = __webpack_public_path__ + \"images/Search.svg\";","module.exports = __webpack_public_path__ + \"images/removeNavigation.svg\";","module.exports = __webpack_public_path__ + \"images/Plus_Icon.svg\";","module.exports = __webpack_public_path__ + \"images/Widest Image.png\";","module.exports = __webpack_public_path__ + \"images/hotspotLandingPageImg.png\";","module.exports = __webpack_public_path__ + \"images/hotspotQuizImg.png\";","module.exports = __webpack_public_path__ + \"images/collectFeedbackSubmitted.svg\";","module.exports = __webpack_public_path__ + \"images/CC_AW_Feedback-min.png\";","module.exports = __webpack_public_path__ + \"images/landingPageCake_1.png\";","module.exports = __webpack_public_path__ + \"images/landingPageCake_2.png\";","module.exports = __webpack_public_path__ + \"images/landingPageCake_3.png\";","module.exports = __webpack_public_path__ + \"images/landingPageCake_4.png\";","module.exports = __webpack_public_path__ + \"images/landingPageCake_5.png\";","module.exports = __webpack_public_path__ + \"images/landingPageCake_6.png\";","module.exports = __webpack_public_path__ + \"images/clickToRevealMagicMan.png\";","module.exports = __webpack_public_path__ + \"images/CC_Topic Portal V3_Topic Portal Placeholder Icon.png\";","module.exports = __webpack_public_path__ + \"images/CC_Text_Entry_Quiz_Placeholder.png\";","module.exports = __webpack_public_path__ + \"images/new_assessment_intro_default.png\";","module.exports = __webpack_public_path__ + \"images/CC_Assessment Question Image.png\";","module.exports = __webpack_public_path__ + \"images/Certificate-V2.png\";","module.exports = __webpack_public_path__ + \"images/Drag Icon_Blue.svg\";","module.exports = __webpack_public_path__ + \"images/Resize Icon.svg\";","module.exports = __webpack_public_path__ + \"images/move_cert_input.svg\";","module.exports = __webpack_public_path__ + \"images/resize_cert_input.svg\";","module.exports = __webpack_public_path__ + \"images/chameleonLogoForCertificate.svg\";","module.exports = __webpack_public_path__ + \"images/lizard.svg\";","const URLs = {\n  local: 'http://localhost:8000',\n  development: 'https://development.v2.chameleoncreator.com',\n  staging: 'https://staging.v2.chameleoncreator.com',\n  production: 'https://v2.chameleoncreator.com',\n  anz: \"https://anz.v2.chameleoncreator.com\"\n};\n\nfunction getParams() {\n  var qu = window.location.href.split('?')[1];\n  var data = {} as any;\n\n\n  if (!qu) {\n    var env = window.env || 'local';\n\n    return {\n      hasRemote: false,\n      projectId: window.projectId || '-1',\n      url: URLs[env.toLowerCase()] || URLs.local,\n      hosted: window.hosted == true,\n      mode: window.mode || 'DEVELOPMENT',\n    };\n  } else {\n    var params = qu.split('&');\n\n    for (var x in params) {\n      data[params[x].split('=')[0]] = params[x].split('=')[1];\n    }\n\n    var env = data.env || 'local';\n\n    return {\n      hasRemote: true,\n      projectId: window.projectId || data.project_id || '1',\n      url: URLs[env.toLowerCase()] || URLs.local,\n      mode: window.mode || data.mode,\n      hosted: window.hosted == true || data.hosted == 'true',\n    };\n  }\n}\n\nwindow.chameleon = {\n  CHAMELEON_URL: getParams().url,\n};\n\nwindow.hasMode = mode => {\n  const windowMode = getParams().mode || 'DEVELOPMENT';\n\n  return mode === windowMode;\n};\n\nwindow.getParams = getParams;\n","module.exports = __webpack_public_path__ + \"images/whoopsBrowserIncompatible.png\";","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nvar render_1 = require(\"./utils/render\");\nvar edit_1 = require(\"./edit\");\nvar useModule_1 = require(\"./hooks/useModule\");\nvar useSidebar_1 = require(\"./hooks/useSidebar\");\nvar frame_1 = require(\"./components/frame\");\n// import { GlobalStyles } from \"./globalStyles\";\nexports.Editor = function (_a) {\n    var data = _a.data, root = _a.root;\n    var _b = useModule_1.useModule(data, root), mod = _b[0], Set = _b[1], Remove = _b[2];\n    var blocks = mod.blocks;\n    var renderer = render_1.Renderer(root, blocks, [render_1.editorPlugin]);\n    var children = react_1.useMemo(function () { return renderer.renderRoot(); }, [blocks]);\n    var ctx = useSidebar_1.useSidebar();\n    return (react_1.default.createElement(useSidebar_1.EditContext.Provider, { value: ctx },\n        react_1.default.createElement(creator_ui_1.Flexbox, { p: 20, height: \"100vh\", width: \"100%\" },\n            react_1.default.createElement(creator_ui_1.Box, { as: \"aside\", flex: [\"0 0 0\", \"0 0 0\", \"0 0 400px\"], mr: [0, 0, 30] },\n                react_1.default.createElement(edit_1.Sidebar, null)),\n            react_1.default.createElement(creator_ui_1.Box, { as: \"main\", height: \"100%\", flex: \"1\" },\n                react_1.default.createElement(creator_ui_1.BrowserWindow, null,\n                    react_1.default.createElement(frame_1.Frame, null, children))))));\n};\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar styled_system_1 = require(\"styled-system\");\nvar flexbox_1 = require(\"./flexbox\");\nvar buttons = styled_system_1.variant({ key: \"buttons\" });\nexports.Button = styled_1.default(flexbox_1.Flexbox)(templateObject_1 || (templateObject_1 = __makeTemplateObject([\" \\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n\\n  cursor: pointer;\\n  \\n  & img {\\n    display: block;\\n  }\\n\"], [\" \\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n\\n  cursor: pointer;\\n  \\n  & img {\\n    display: block;\\n  }\\n\"])), styled_system_1.fontWeight, styled_system_1.borders, styled_system_1.borderColor, styled_system_1.borderRadius, styled_system_1.buttonStyle, buttons, function (p) { return p.theme[\"Button\"]; });\nexports.Button.defaultProps = {\n    as: \"button\",\n    fontSize: \"inherit\",\n    fontWeight: \"bold\",\n    m: 0,\n    px: 3,\n    py: 2,\n    border: 0,\n    borderRadius: 4,\n    alignItems: \"center\"\n};\nexports.Button.displayName = \"button\";\nvar templateObject_1;\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar styled_system_1 = require(\"styled-system\");\nvar flexbox_1 = require(\"./flexbox\");\nvar cards = styled_system_1.variant({ key: \"cards\" });\nexports.Card = styled_1.default(flexbox_1.Flexbox)(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n\"], [\"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n\"])), styled_system_1.borders, styled_system_1.borderColor, styled_system_1.borderRadius, styled_system_1.boxShadow, styled_system_1.backgroundImage, styled_system_1.backgroundSize, styled_system_1.backgroundPosition, styled_system_1.backgroundRepeat, styled_system_1.opacity, cards, function (p) { return p.theme[\"Card\"]; });\nexports.Card.displayName = \"Card\";\nvar templateObject_1;\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar styled_system_1 = require(\"styled-system\");\nvar box_1 = require(\"./box\");\nexports.Grid = styled_1.default(box_1.Box)(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"  \\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  display: grid;\\n\"], [\"  \\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  \", \"\\n  display: grid;\\n\"])), styled_system_1.gridGap, styled_system_1.gridRowGap, styled_system_1.gridColumnGap, styled_system_1.gridColumn, styled_system_1.gridRow, styled_system_1.gridAutoFlow, styled_system_1.gridAutoRows, styled_system_1.gridAutoColumns, styled_system_1.gridTemplateRows, styled_system_1.gridTemplateColumns, styled_system_1.gridTemplateAreas);\nexports.Grid.displayName = \"Grid\";\nvar templateObject_1;\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar text_1 = require(\"./text\");\nvar styled_system_1 = require(\"styled-system\");\nvar headings = styled_system_1.variant({ key: \"Heading\" });\nexports.Heading = styled_1.default(text_1.Text)(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  \", \"\\n\"], [\"\\n  \", \"\\n\"])), headings);\nexports.Heading.defaultProps = {\n    as: \"h1\"\n};\nexports.Heading.displayName = \"Heading\";\nvar templateObject_1;\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar styled_system_1 = require(\"styled-system\");\nvar text_1 = require(\"./text\");\nvar images = styled_system_1.variant({ key: \"Image\" });\nvar Image = styled_1.default(text_1.Text)(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  \", \"\\n\"], [\"\\n  \", \"\\n\"])), images);\nImage.defaultProps = {\n    as: \"img\"\n};\nImage.displayName = \"Image\";\nexports.default = Image;\nvar templateObject_1;\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar styled_system_1 = require(\"styled-system\");\nvar text_1 = require(\"./text\");\nvar links = styled_system_1.variant({ key: \"Link\" });\nexports.Link = styled_1.default(text_1.Text)(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  \", \"\\n\"], [\"\\n  \", \"\\n\"])), links);\nexports.Link.defaultProps = {\n    as: \"a\",\n    color: \"blue\"\n};\nvar templateObject_1;\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar box_1 = require(\"./box\");\nexports.Icon = styled_1.default(box_1.Box)(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  display: block;\\n\\n  svg {\\n    display: block;\\n  }\\n\"], [\"\\n  display: block;\\n\\n  svg {\\n    display: block;\\n  }\\n\"])));\nexports.Icon.defaultProps = {\n    as: \"i\"\n};\nexports.Icon.displayName = \"logo\";\nvar templateObject_1;\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nexports.WindowButton = styled_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  width: 13px;\\n  height: 13px;\\n  border-radius: 50%;\\n  border: 1px solid #dee3f3;\\n  flex: 0 13px;\\n  margin-right: 7px;\\n\"], [\"\\n  width: 13px;\\n  height: 13px;\\n  border-radius: 50%;\\n  border: 1px solid #dee3f3;\\n  flex: 0 13px;\\n  margin-right: 7px;\\n\"])));\nvar templateObject_1;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar core_1 = require(\"../core\");\nexports.Indicator = function (_a) {\n    var onClick = _a.onClick, isActive = _a.isActive;\n    return (react_1.default.createElement(core_1.Box, { as: \"li\", style: { cursor: \"pointer\", listStyle: \"none\" }, m: \"2px\", p: \"5px\", onClick: onClick },\n        react_1.default.createElement(core_1.Box, { width: \"10px\", height: \"10px\", borderRadius: \"50%\", bg: \"#000\", transition: \"transform 0.3\", style: {\n                transform: \"scale(\" + (isActive ? \"1.4\" : \"1\") + \")\"\n            } })));\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.test = \"test\";\n","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./browserWindow\"));\n__export(require(\"./column\"));\n__export(require(\"./row\"));\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar core_1 = require(\"../core\");\nvar atoms_1 = require(\"../atoms\");\nexports.BrowserWindow = function (props) {\n    return (react_1.default.createElement(core_1.Flexbox, { boxShadow: \"0 2px 100px -10px rgba(0, 0, 0, 0.2)\", borderRadius: \"10px\", border: \"1px solid #dee3f3\", flexDirection: \"column\", width: \"100%\", height: \"100%\" },\n        react_1.default.createElement(core_1.Flexbox, { flex: \"0 0 40px\", p: 10, px: 20, borderBottom: \"1px solid\", borderColor: \"#dee3f3\", alignItems: \"center\" },\n            react_1.default.createElement(atoms_1.WindowButton, null),\n            react_1.default.createElement(atoms_1.WindowButton, null),\n            react_1.default.createElement(atoms_1.WindowButton, null)),\n        react_1.default.createElement(core_1.Box, { p: 0, flex: \"1 1 100%\", height: \"100%\", maxHeight: \"100%\", style: { overflowX: \"hidden\", overflowY: \"auto\" } }, props.children)));\n};\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar core_1 = require(\"../core\");\nexports.Column = styled_1.default(core_1.Flexbox)(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\"], [\"\"])));\nexports.Column.defaultProps = {\n    flexDirection: \"column\",\n    justifyContent: \"center\",\n    flex: 1,\n    margin: 2,\n};\nvar templateObject_1;\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar flexbox_1 = require(\"../core/flexbox\");\nvar RowContainer = styled_1.default(flexbox_1.Flexbox)(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  @media (max-width: 767px) {\\n    flex-direction: column;\\n  }\\n\\n  flex: 0;\\n\"], [\"\\n  @media (max-width: 767px) {\\n    flex-direction: column;\\n  }\\n\\n  flex: 0;\\n\"])));\nexports.Row = function (_a) {\n    var children = _a.children, props = __rest(_a, [\"children\"]);\n    return (react_1.default.createElement(RowContainer, __assign({}, props, { m: 2 }), children));\n};\nvar templateObject_1;\n","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./back\"));\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar core_1 = require(\"../core\");\nexports.BackIcon = function (props) {\n    return (react_1.default.createElement(core_1.Icon, null,\n        react_1.default.createElement(\"svg\", { width: \"31px\", height: \"31px\", viewBox: \"0 0 31 31\", version: \"1.1\" },\n            react_1.default.createElement(\"g\", { stroke: \"none\", strokeWidth: \"1\", fill: \"none\", fillRule: \"evenodd\" },\n                react_1.default.createElement(\"g\", { transform: \"translate(-235.000000, -232.000000)\" },\n                    react_1.default.createElement(\"g\", { transform: \"translate(235.000000, 232.000000)\" },\n                        react_1.default.createElement(\"circle\", { fill: \"#ECEDF0\", cx: \"15.5\", cy: \"15.5\", r: \"15.5\" }),\n                        react_1.default.createElement(\"polyline\", { stroke: \"#525456\", strokeWidth: \"2\", transform: \"translate(15.000000, 15.500000) rotate(-270.000000) translate(-15.000000, -15.500000) \", points: \"21 13 15 18 9 13\" })))))));\n};\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.Accordion = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.Accordion.displayName = \"Accordion\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.AccordionBody = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.AccordionBody.displayName = \"AccordionBody\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.AccordionField = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.AccordionField.displayName = \"AccordionField\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.AccordionHeader = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.AccordionHeader.displayName = \"AccordionHeader\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.Animation = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.Animation.displayName = \"Animation\";\n","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\n// const PagerAnimator = (children, active) => {\n//   const el = React.Children.toArray(children).find(\n//     r => r.props.name === active\n//   );\n//   if (!el) return null;\n//   return cloneElement(el);\n// };\nexports.ScrollAnimator = function (children, active) {\n    react_1.useEffect(function () {\n        window.location.hash = active;\n    }, [active]);\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.AnimationGroup = function (_a) {\n    var children = _a.children, _b = _a.active, active = _b === void 0 ? undefined : _b;\n    //return animator(children, active);\n    return children;\n};\nexports.AnimationGroup.displayName = \"AnimationGroup\";\n","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar module_1 = require(\"./module\");\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nexports.Back = function () {\n    var _a = react_1.useContext(module_1.ModuleContext), state = _a[0], dispatch = _a[1];\n    return (react_1.default.createElement(\"button\", { onClick: function () { return dispatch(module_1.goBack()); } },\n        react_1.default.createElement(creator_ui_1.BackIcon, null)));\n};\nexports.Back.displayName = \"Back\";\n","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar module_1 = require(\"./module\");\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nexports.BranchButton = function (_a) {\n    var children = _a.children, to = _a.to;\n    var _b = react_1.useContext(module_1.ModuleContext), state = _b[0], dispatch = _b[1];\n    var goto = react_1.useMemo(function () { return function () {\n        dispatch(module_1.goToPath(to));\n    }; }, [to]);\n    return (react_1.default.createElement(creator_ui_1.Button, { width: \"fit-content\", alignSelf: \"center\", onClick: goto }, children));\n};\nexports.BranchButton.displayName = \"BranchButton\";\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = require(\"react\");\nexports.CarouselReducer = function (state, action) {\n    switch (action.type) {\n        case \"PREV\":\n            var prev = state.current === 0 ? state.count - 1 : state.current - 1;\n            return __assign(__assign({}, state), { current: prev });\n        case \"NEXT\":\n            var next = state.current === state.count - 1 ? 0 : state.current + 1;\n            return __assign(__assign({}, state), { current: next });\n        case \"GOTO\":\n            return __assign(__assign({}, state), { current: action.data });\n    }\n    return state;\n};\nexports.Next = function () {\n    return {\n        type: \"NEXT\"\n    };\n};\nexports.Prev = function () {\n    return {\n        type: \"PREV\"\n    };\n};\nexports.Goto = function (num) {\n    return {\n        type: \"GOTO\",\n        data: num\n    };\n};\nexports.useCarousel = function (slideCount, initialSlide) {\n    var _a = react_1.useReducer(exports.CarouselReducer, {\n        current: initialSlide,\n        count: slideCount\n    }), state = _a[0], dispatch = _a[1];\n    return {\n        state: state,\n        goTo: function (i) { return dispatch(exports.Goto(i)); },\n        prev: function () { return dispatch(exports.Prev()); },\n        next: function () { return dispatch(exports.Next()); }\n    };\n};\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar carousel_1 = require(\"./carousel\");\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nvar heighAwareComponent_1 = require(\"./heighAwareComponent\");\nexports.CarouselAnimator = function (_a) {\n    var children = _a.children;\n    var _b = react_1.useContext(carousel_1.CarouselContext), current = _b.state.current, goTo = _b.goTo;\n    var _c = react_1.useState(0), height = _c[0], setHeight = _c[1];\n    var slides = children.map(function (child, i) {\n        var isActive = current === i;\n        var isLeft = i < current;\n        var pos = isLeft\n            ? [\"translateX(-100%)\", \"translateX(-70%)\"]\n            : isActive\n                ? [\"translateX(-50%)\", \"translateX(-50%)\"]\n                : [\"translateX(0%)\", \"translateX(-30%)\"];\n        var forwardProps = {\n            position: \"absolute\",\n            left: \"50%\",\n            onClick: function () { return goTo(i); },\n            \"aria-hidden\": isActive ? undefined : \"true\",\n            style: {\n                cursor: isActive ? \"initial\" : \"pointer\",\n                zIndex: isActive ? 100 : 90 + (current - i * (isLeft ? -1 : 1)),\n                transition: \"transform 0.5s\",\n                transform: pos[1] + \" scale(\" + (isActive ? 1 : 0.8) + \")\"\n            }\n        };\n        return (react_1.default.createElement(heighAwareComponent_1.HeightAwareComponent, __assign({ key: \"slide-cont-\" + i, active: isActive, setHeight: setHeight }, forwardProps), react_1.default.cloneElement(child, __assign({}, forwardProps))));\n    });\n    return (react_1.default.createElement(creator_ui_1.Box, { as: \"ul\", height: height }, slides));\n};\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nexports.HeightAwareComponent = function (_a) {\n    var active = _a.active, children = _a.children, setHeight = _a.setHeight, others = __rest(_a, [\"active\", \"children\", \"setHeight\"]);\n    var measuredRef = react_1.useCallback(function (node) {\n        if (node !== null) {\n            setHeight(node.offsetHeight);\n        }\n        setTimeout(function () {\n            if (node !== null) {\n                setHeight(node.offsetHeight);\n            }\n        }, 30);\n    }, [active]);\n    return (react_1.default.createElement(react_1.default.Fragment, null, react_1.cloneElement(react_1.default.Children.only(children), __assign(__assign({}, others), { ref: measuredRef }))));\n};\n","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nvar carousel_1 = require(\"./carousel\");\nexports.CarouselNavigation = function () {\n    var _a = react_1.useContext(carousel_1.CarouselContext), _b = _a.state, current = _b.current, count = _b.count, goTo = _a.goTo, prev = _a.prev, next = _a.next;\n    var mapper = Array.from(Array(count));\n    var indicators = mapper.map(function (_, i) {\n        var isActive = current === i;\n        return (react_1.default.createElement(creator_ui_1.Indicator, { isActive: isActive, onClick: function () { return goTo(i); }, key: \"slide-indicator-\" + i }));\n    });\n    return (react_1.default.createElement(creator_ui_1.Flexbox, { justifyContent: \"center\", p: \"10px\" },\n        react_1.default.createElement(creator_ui_1.Button, { onClick: prev }, \"Prev\"),\n        react_1.default.createElement(creator_ui_1.Flexbox, { as: \"ul\" }, indicators),\n        react_1.default.createElement(creator_ui_1.Button, { onClick: next }, \"Next\")));\n};\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.Choice = function (_a) {\n    var children = _a.children, correct = _a.correct, name = _a.name;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.Choice.displayName = \"Choice\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.Choices = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.Choices.displayName = \"Choices\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nexports.Column = function (_a) {\n    var children = _a.children, align = _a.align;\n    return (react_1.default.createElement(creator_ui_1.Flexbox, { flexDirection: \"column\", justifyContent: align }, children));\n};\nexports.Column.displayName = \"Column\";\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nvar module_1 = require(\"./module\");\nvar interaction_1 = require(\"./interaction\");\nexports.ContinueButton = function (_a) {\n    var _b = _a.children, children = _b === void 0 ? \"Continue\" : _b, _c = _a.onClick, onClick = _c === void 0 ? undefined : _c, _d = _a.align, align = _d === void 0 ? \"center\" : _d, other = __rest(_a, [\"children\", \"onClick\", \"align\"]);\n    var _e = react_1.useContext(module_1.ModuleContext), _ = _e[0], dispatch = _e[1];\n    var ti = react_1.useContext(interaction_1.InteractionContext);\n    if (!onClick) {\n        onClick = function () { return dispatch(module_1.goForward(ti.topic + \":\" + ti.name)); };\n    }\n    return (react_1.default.createElement(creator_ui_1.Button, __assign({ alignSelf: align, onClick: onClick }, other), children));\n};\nexports.ContinueButton.displayName = \"ContinueButton\";\nexports.ContinueButton.editableFields = [\n    {\n        name: \"align\",\n        assign: function (block, value) {\n            block.props.alignSelf = value;\n        },\n        type: \"enum\",\n        defaultValue: [\"center\", \"center\"],\n        values: [\n            [\"left\", \"flex-start\"],\n            [\"center\", \"center\"],\n            [\"right\", \"flex-end\"]\n        ],\n        help: \"Horizontal alignment of the button\"\n    },\n    {\n        name: \"content\",\n        assign: function (block, value) {\n            block.children = value;\n        },\n        defaultValue: \"Continue\",\n        type: \"text\",\n        help: \"Button content; default is Continue\"\n    }\n];\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.Description = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.Description.displayName = \"Description\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.DragAndDrop = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.DragAndDrop.displayName = \"DragAndDrop\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.DragContainer = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.DragContainer.displayName = \"DragContainer\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.DragItem = function (_a) {\n    var children = _a.children, value = _a.value;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.DragItem.displayName = \"DragItem\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.DropContainer = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.DropContainer.displayName = \"DropContainer\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.DropItem = function (_a) {\n    var children = _a.children, value = _a.value;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.DropItem.displayName = \"DropItem\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.Feedback = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.Feedback.displayName = \"Feedback\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nexports.Header = function (_a) {\n    var children = _a.children, sticky = _a.sticky;\n    return (react_1.default.createElement(creator_ui_1.Flexbox, { style: { position: \"sticky\", top: 0 }, bg: \"#fff\", color: \"#333\", p: \"10px\", borderBottom: \"1px solid #eee\", zIndex: \"1000\", boxShadow: \"1px 1px 20px 0 rgba(0,0,0,0.2)\", alignItems: \"center\" }, children));\n};\nexports.Header.displayName = \"Header\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.Heading = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(\"h2\", null, children);\n};\nexports.Heading.displayName = exports.Heading;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.Image = function (_a) {\n    var src = _a.src, _b = _a.title, title = _b === void 0 ? \"\" : _b;\n    return react_1.default.createElement(\"img\", { src: src, title: title });\n};\nexports.Image.displayName = \"Image\";\nexports.Image.editableFields = [\n    {\n        name: \"shape\",\n        assign: function (block, value) {\n            block.props.shape = value;\n        },\n        type: \"enum\",\n        defaultValue: [\"rectangle\"],\n        values: [\n            [\"Circular\", \"circle\"],\n            [\"Rounded\", \"rounded\"],\n            [\"Rectangular\", \"rectangle\"]\n        ],\n        help: \"\"\n    },\n    {\n        name: \"Source\",\n        assign: function (block, value) {\n            block.props.src = value;\n        },\n        type: \"image\",\n        help: \"\"\n    }\n];\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Menu = function () {\n    return null;\n};\nexports.Menu.displayName = \"Menu\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.MultipleChoice = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.MultipleChoice.displayName = \"MultipleChoice\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.Paragraph = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(\"p\", null, children);\n};\nexports.Paragraph.displayName = \"Paragraph\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.Quiz = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.Quiz.displayName = \"Quiz\";\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Rating = function (_a) {\n    return null;\n};\nexports.Rating.displayName = \"Rating\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.Result = function (_a) {\n    var children = _a.children, correct = _a.correct, _b = _a.to, to = _b === void 0 ? \"\" : _b;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.Result.displayName = \"Result\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.SingleChoice = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.SingleChoice.displayName = \"SingleChoice\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nexports.SingleColumnLayout = function (_a) {\n    var children = _a.children, _b = _a.fill, fill = _b === void 0 ? true : _b, _c = _a.contain, contain = _c === void 0 ? \"boxed\" : _c;\n    return (react_1.default.createElement(creator_ui_1.Flexbox, { flexDirection: \"column\", justifyContent: \"center\", height: fill ? \"100%\" : \"auto\", maxWidth: contain === \"boxed\" ? \"960px\" : \"100%\", mx: contain === \"boxed\" ? \"auto\" : \"initial\" }, children));\n};\nexports.SingleColumnLayout.displayName = \"SingleColumnLayout\";\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nexports.Slide = react_1.forwardRef(function (_a, ref) {\n    var children = _a.children, other = __rest(_a, [\"children\"]);\n    return (react_1.default.createElement(creator_ui_1.Card, __assign({ ref: ref, as: \"li\", flexDirection: \"column\", p: \"10px\", borderRadius: \"10px\", bg: \"#fff\", border: \"1px solid #eee\", textAlign: \"center\", boxShadow: \"2px 2px 20px -2px rgba(0,0,0,0.1)\", width: \"fit-content\", height: \"fit-content\" }, other), children));\n});\nexports.Slide.displayName = \"Slide\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nexports.Text = function (_a) {\n    var children = _a.children;\n    return (react_1.default.createElement(creator_ui_1.Text, { as: \"div\", width: \"100%\" }, children));\n};\nexports.Text.displayName = \"Text\";\nexports.Text.editableFields = [];\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TextArea = function (_a) {\n    return null;\n};\nexports.TextArea.displayName = \"TextArea\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.Title = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.Title.displayName = \"Title\";\n","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar module_1 = require(\"./module\");\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nexports.TopicTitle = function () {\n    var modCtx = react_1.useContext(module_1.ModuleContext)[0];\n    return react_1.default.createElement(creator_ui_1.Box, { mx: \"10px\" }, modCtx.currentTopic);\n};\nexports.TopicTitle.displayName = \"TopicTitle\";\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nexports.TwoColumnLayout = function (_a) {\n    var children = _a.children, _b = _a.fill, fill = _b === void 0 ? true : _b;\n    return (react_1.default.createElement(creator_ui_1.Flexbox, { flexDirection: \"column\", height: fill ? \"100%\" : \"auto\" }, children));\n};\nexports.TwoColumnLayout.displayName = \"TwoColumnLayout\";\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nvar useSidebar_1 = require(\"../hooks/useSidebar\");\nexports.Editable = function (_a) {\n    var children = _a.children, block = _a.block;\n    var child = react_1.default.Children.only(children);\n    var editableFields = child.type.editableFields;\n    var ref = react_1.useRef(null);\n    var returnFocus = function () {\n        if (ref.current) {\n            ref.current.focus();\n        }\n    };\n    var ctx = react_1.useContext(useSidebar_1.EditContext);\n    var onClick = function () {\n        ctx.pushSidebarItem({\n            block: block,\n            fields: editableFields\n        });\n    };\n    var onActivate = function () {\n        ctx.pushSidebarItem({\n            block: block,\n            fields: editableFields,\n            returnFocus: returnFocus\n        });\n    };\n    var requiredProps = {\n        onClick: onClick,\n        onKeyPress: function (e) {\n            if (e.nativeEvent.key === \"Enter\") {\n                onActivate();\n            }\n        },\n        ref: ref,\n        tabIndex: 0\n    };\n    if (child.type.editableContainer) {\n        return react_1.createElement(child.type.editableContainer, __assign(__assign({}, requiredProps), { children: react_1.cloneElement(child, { onClick: function () { }, tabIndex: -1 }) }));\n    }\n    return (react_1.default.createElement(creator_ui_1.Box, __assign({ p: \"10px\", border: \"1px solid #eee\", style: { alignSelf: \"center\" }, width: block.type === \"ContinueButton\" ? \"auto\" : \"100%\" }, requiredProps), react_1.cloneElement(child, { onClick: function () { }, tabIndex: -1 })));\n};\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nexports.Video = function (_a) {\n    var children = _a.children;\n    return react_1.default.createElement(react_1.default.Fragment, null, children);\n};\nexports.Video.displayName = \"Video\";\n","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./color\"));\n__export(require(\"./enum\"));\n__export(require(\"./richText\"));\n__export(require(\"./sidebar\"));\n__export(require(\"./text\"));\n__export(require(\"./topics\"));\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nexports.Color = function () {\n    react_1.default.createElement(creator_ui_1.Box, null);\n};\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nexports.Enum = function () {\n    react_1.default.createElement(creator_ui_1.Box, null);\n};\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nexports.RichText = function () {\n    react_1.default.createElement(creator_ui_1.Box, null);\n};\n","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nvar useSidebar_1 = require(\"../hooks/useSidebar\");\nvar topics_1 = require(\"./topics\");\nvar block_1 = require(\"./block\");\nexports.Sidebar = function (props) {\n    var sidebarlist = react_1.useContext(useSidebar_1.EditContext).sidebarlist;\n    var editor;\n    if (sidebarlist.length === 0) {\n        editor = react_1.default.createElement(topics_1.Topics, null);\n    }\n    else {\n        var o = sidebarlist[sidebarlist.length - 1];\n        editor = react_1.default.createElement(block_1.Block, { data: o });\n    }\n    return react_1.default.createElement(creator_ui_1.Box, null, editor);\n};\n","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nvar useSidebar_1 = require(\"../hooks/useSidebar\");\nexports.Block = function (props) {\n    var ctx = react_1.useContext(useSidebar_1.EditContext);\n    var onReturn = function () {\n        ctx.popSidebarItem();\n    };\n    if (props.data.returnFocus) {\n        onReturn = function () {\n            ctx.popSidebarItem();\n            props.data.returnFocus();\n        };\n    }\n    var ref = react_1.useRef(null);\n    react_1.useEffect(function () {\n        if (ref.current && props.data.returnFocus) {\n            ref.current.focus();\n        }\n    }, [props.data]);\n    return (react_1.default.createElement(creator_ui_1.Box, null,\n        react_1.default.createElement(creator_ui_1.Button, { onClick: onReturn, ref: ref },\n            react_1.default.createElement(creator_ui_1.BackIcon, null),\n            \" Back\"),\n        react_1.default.createElement(creator_ui_1.Heading, { as: \"h3\" },\n            \"Editing Block: \",\n            props.data.block.type)));\n};\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nexports.Text = function () {\n    react_1.default.createElement(creator_ui_1.Box, null);\n};\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = require(\"react\");\nexports.cloneModule = function (mod) {\n    return __assign(__assign({}, mod), { blocks: __assign({}, mod.blocks) });\n};\nexports.Set = function (block) { return ({ type: \"Set\", data: block }); };\nexports.Remove = function (block) { return ({\n    type: \"Remove\",\n    data: block\n}); };\nexports.ModuleReducer = function (state, action) {\n    switch (action.type) {\n        case \"Set\": {\n            var nextState = exports.cloneModule(state);\n            nextState.blocks[action.data.id] = action.data;\n            return nextState;\n        }\n        case \"Remove\": {\n            var nextState = exports.cloneModule(state);\n            delete nextState.blocks[action.data.id];\n            return nextState;\n        }\n    }\n};\nexports.useModule = function (data, rootId) {\n    var _a = react_1.useReducer(exports.ModuleReducer, {\n        rootId: rootId,\n        blocks: data\n    }), mod = _a[0], dispatch = _a[1];\n    var SetBlock = function (block) { return dispatch(exports.Set(block)); };\n    var RomoveBlock = function (block) { return dispatch(exports.Remove(block)); };\n    return [mod, SetBlock, RomoveBlock];\n};\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar react_frame_component_1 = __importStar(require(\"react-frame-component\"));\nexports.Frame = function (props) {\n    var _a = props.style, style = _a === void 0 ? {} : _a, children = props.children, rest = __rest(props, [\"style\", \"children\"]);\n    return (react_1.default.createElement(react_frame_component_1.default, __assign({ style: __assign({ display: \"block\", overflow: \"scroll\", border: 0, width: \"100%\", height: \"100%\" }, style) }, rest),\n        react_1.default.createElement(react_frame_component_1.FrameContextConsumer, null, function (frameContext) { return (react_1.default.createElement(react_1.default.Fragment, null, children)); })));\n};\n","\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar render_1 = require(\"./utils/render\");\n// import { GlobalStyles } from \"./globalStyles\";\nexports.Player = function (_a) {\n    var data = _a.data, root = _a.root;\n    var renderer = render_1.Renderer(root, data);\n    var children = react_1.useMemo(function () { return renderer.renderRoot(); }, [data]);\n    return (react_1.default.createElement(react_1.default.Fragment, null, children));\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ExampleSerializedNestedRoot = \"62e376e7-5e02-4fda-9b2e-fe75f59064cc\";\nexports.ExampleSerializedNested = {\n    \"62e376e7-5e02-4fda-9b2e-fe75f59064cc\": {\n        id: \"62e376e7-5e02-4fda-9b2e-fe75f59064cc\",\n        type: \"Module\",\n        props: {},\n        children: [\n            { id: \"afaf91cb-894c-4f30-92f3-88c0434044e7\", type: \"Ref\" },\n            { id: \"d45955b4-50af-47f6-919c-7ff443b88de6\", type: \"Ref\" }\n        ]\n    },\n    \"afaf91cb-894c-4f30-92f3-88c0434044e7\": {\n        id: \"afaf91cb-894c-4f30-92f3-88c0434044e7\",\n        type: \"Header\",\n        props: {\n            sticky: \"top\"\n        },\n        children: [\n            { id: \"420b641b-9c33-4169-b6fc-23e1c3756975\", type: \"Ref\" },\n            { id: \"03e9c4e5-9d55-45c1-abf3-46ef460e73c4\", type: \"Ref\" },\n            { id: \"441a2e33-d06f-4822-899a-323025f8fc52\", type: \"Ref\" },\n            { id: \"746d06da-fa25-4b6f-be82-edfa6f052d88\", type: \"Ref\" }\n        ]\n    },\n    \"420b641b-9c33-4169-b6fc-23e1c3756975\": {\n        id: \"420b641b-9c33-4169-b6fc-23e1c3756975\",\n        type: \"Back\"\n    },\n    \"03e9c4e5-9d55-45c1-abf3-46ef460e73c4\": {\n        id: \"03e9c4e5-9d55-45c1-abf3-46ef460e73c4\",\n        type: \"TopicTitle\"\n    },\n    \"441a2e33-d06f-4822-899a-323025f8fc52\": {\n        id: \"441a2e33-d06f-4822-899a-323025f8fc52\",\n        type: \"Logo\"\n    },\n    \"746d06da-fa25-4b6f-be82-edfa6f052d88\": {\n        id: \"746d06da-fa25-4b6f-be82-edfa6f052d88\",\n        type: \"Menu\"\n    },\n    \"d45955b4-50af-47f6-919c-7ff443b88de6\": {\n        id: \"d45955b4-50af-47f6-919c-7ff443b88de6\",\n        type: \"AnimationGroup\",\n        meta: {\n            subType: \"Topic\"\n        },\n        children: [\n            {\n                id: \"50c7d9d7-304c-47e7-ac2a-9e4439ccfb0f\",\n                type: \"Ref\"\n            }\n        ]\n    },\n    \"50c7d9d7-304c-47e7-ac2a-9e4439ccfb0f\": {\n        id: \"50c7d9d7-304c-47e7-ac2a-9e4439ccfb0f\",\n        type: \"Topic\",\n        props: { name: \"welcome\" },\n        children: [\n            {\n                id: \"1690aa8f-2016-46dd-baa0-be5340b84aa0\",\n                type: \"Ref\"\n            }\n        ]\n    },\n    \"1690aa8f-2016-46dd-baa0-be5340b84aa0\": {\n        id: \"1690aa8f-2016-46dd-baa0-be5340b84aa0\",\n        type: \"AnimationGroup\",\n        props: {},\n        meta: {\n            subType: \"Interaction\"\n        },\n        animator: {\n            type: \"ScrollAnimator\",\n            config: {}\n        },\n        children: [{ id: \"d3ddb5d5-212e-4a4e-81fa-8de0be3a0316\", type: \"Ref\" }]\n    },\n    \"d3ddb5d5-212e-4a4e-81fa-8de0be3a0316\": {\n        id: \"d3ddb5d5-212e-4a4e-81fa-8de0be3a0316\",\n        type: \"Interaction\",\n        props: {\n            name: \"intro\"\n        },\n        children: [{ id: \"725d0fbf-f7eb-43f8-b08d-2dfb263a550c\", type: \"Ref\" }]\n    },\n    \"725d0fbf-f7eb-43f8-b08d-2dfb263a550c\": {\n        id: \"725d0fbf-f7eb-43f8-b08d-2dfb263a550c\",\n        type: \"SingleColumnLayout\",\n        children: [\n            {\n                id: \"4e71a6dc-a101-47d7-9277-e3b14805a35e\",\n                type: \"Ref\"\n            }\n        ]\n    },\n    \"4e71a6dc-a101-47d7-9277-e3b14805a35e\": {\n        id: \"4e71a6dc-a101-47d7-9277-e3b14805a35e\",\n        type: \"Column\",\n        props: {\n            align: \"center\"\n        },\n        children: [\n            {\n                id: \"04d365f3-a2ae-4970-9f3d-af259d5fec70\",\n                type: \"Ref\"\n            },\n            {\n                id: \"385afaf3-48a6-491a-b3bd-a0c2c4938c70\",\n                type: \"Ref\"\n            },\n            {\n                id: \"2238f67f-242d-413e-93d9-68f87a350ca2\",\n                type: \"Ref\"\n            }\n        ]\n    },\n    \"04d365f3-a2ae-4970-9f3d-af259d5fec70\": {\n        id: \"04d365f3-a2ae-4970-9f3d-af259d5fec70\",\n        type: \"Text\",\n        children: [\n            {\n                id: \"09d9ed61-4c03-48d9-a151-c552b581b64c\",\n                type: \"Ref\"\n            },\n            {\n                id: \"80f683c3-d5b8-4fd7-bedf-ec49ecdeac5b\",\n                type: \"Ref\"\n            }\n        ]\n    },\n    \"09d9ed61-4c03-48d9-a151-c552b581b64c\": {\n        id: \"09d9ed61-4c03-48d9-a151-c552b581b64c\",\n        type: \"Heading\",\n        children: \"Module Title\"\n    },\n    \"80f683c3-d5b8-4fd7-bedf-ec49ecdeac5b\": {\n        id: \"80f683c3-d5b8-4fd7-bedf-ec49ecdeac5b\",\n        type: \"Paragraph\",\n        children: \"Welcome text explaining what this module is about\"\n    },\n    \"ee79d1b0-2fdd-4efd-9e52-507d2b25ee07\": {\n        id: \"ee79d1b0-2fdd-4efd-9e52-507d2b25ee07\",\n        type: \"Image\",\n        props: {\n            src: \"https://dummyimage.com/400x300/333/d5d6ed.png\"\n        }\n    },\n    \"752f8931-7395-4f01-9e4b-9ace9865236a\": {\n        id: \"752f8931-7395-4f01-9e4b-9ace9865236a\",\n        type: \"Text\",\n        children: \"Slide A\"\n    },\n    \"2441aebc-4a8e-4d7b-88c2-7850b4390f2f\": {\n        id: \"2441aebc-4a8e-4d7b-88c2-7850b4390f2f\",\n        type: \"Slide\",\n        children: [\n            {\n                id: \"ee79d1b0-2fdd-4efd-9e52-507d2b25ee07\",\n                type: \"Ref\"\n            },\n            {\n                id: \"752f8931-7395-4f01-9e4b-9ace9865236a\",\n                type: \"Ref\"\n            }\n        ]\n    },\n    \"66900c97-0381-4a9d-9533-95125b08d548\": {\n        id: \"66900c97-0381-4a9d-9533-95125b08d548\",\n        type: \"Text\",\n        children: \"Slide B\"\n    },\n    \"e6cf5d47-1ce3-4300-a892-c2543bbf1ab1\": {\n        id: \"e6cf5d47-1ce3-4300-a892-c2543bbf1ab1\",\n        type: \"Image\",\n        props: {\n            src: \"https://dummyimage.com/400x300/333/d5d6ed.png\"\n        }\n    },\n    \"8ccd4fcf-fee8-43f1-bddc-3defb9184d8a\": {\n        id: \"8ccd4fcf-fee8-43f1-bddc-3defb9184d8a\",\n        type: \"Slide\",\n        children: [\n            {\n                id: \"e6cf5d47-1ce3-4300-a892-c2543bbf1ab1\",\n                type: \"Ref\"\n            },\n            {\n                id: \"66900c97-0381-4a9d-9533-95125b08d548\",\n                type: \"Ref\"\n            }\n        ]\n    },\n    \"df8164c8-f51f-4de4-bc1b-c527ac09308f\": {\n        id: \"df8164c8-f51f-4de4-bc1b-c527ac09308f\",\n        type: \"Image\",\n        props: {\n            src: \"https://dummyimage.com/400x300/333/d5d6ed.png\"\n        }\n    },\n    \"9c33776c-3eaf-4032-8cdd-a630e516072e\": {\n        id: \"9c33776c-3eaf-4032-8cdd-a630e516072e\",\n        type: \"Text\",\n        children: \"Slide C\"\n    },\n    \"e2364ede-ff20-4894-9ef3-c71c0f154b0a\": {\n        id: \"e2364ede-ff20-4894-9ef3-c71c0f154b0a\",\n        type: \"Slide\",\n        children: [\n            {\n                id: \"df8164c8-f51f-4de4-bc1b-c527ac09308f\",\n                type: \"Ref\"\n            },\n            {\n                id: \"9c33776c-3eaf-4032-8cdd-a630e516072e\",\n                type: \"Ref\"\n            }\n        ]\n    },\n    \"385afaf3-48a6-491a-b3bd-a0c2c4938c70\": {\n        id: \"385afaf3-48a6-491a-b3bd-a0c2c4938c70\",\n        type: \"Carousel\",\n        children: [\n            {\n                id: \"2441aebc-4a8e-4d7b-88c2-7850b4390f2f\",\n                type: \"Ref\"\n            },\n            {\n                id: \"8ccd4fcf-fee8-43f1-bddc-3defb9184d8a\",\n                type: \"Ref\"\n            },\n            {\n                id: \"e2364ede-ff20-4894-9ef3-c71c0f154b0a\",\n                type: \"Ref\"\n            }\n        ]\n    },\n    \"2238f67f-242d-413e-93d9-68f87a350ca2\": {\n        id: \"2238f67f-242d-413e-93d9-68f87a350ca2\",\n        type: \"ContinueButton\",\n        children: \"Continue\"\n    }\n};\nexports.ExampleSerialized = {\n    id: \"62e376e7-5e02-4fda-9b2e-fe75f59064cc\",\n    type: \"Module\",\n    props: {},\n    children: [\n        {\n            id: \"d45955b4-50af-47f6-919c-7ff443b88de6\",\n            type: \"AnimationGroup\",\n            meta: {\n                subType: \"Topic\"\n            },\n            children: [\n                {\n                    id: \"50c7d9d7-304c-47e7-ac2a-9e4439ccfb0f\",\n                    type: \"Topic\",\n                    props: { name: \"welcome\" },\n                    children: [\n                        {\n                            id: \"1690aa8f-2016-46dd-baa0-be5340b84aa0\",\n                            type: \"AnimationGroup\",\n                            meta: {\n                                subType: \"Interaction\"\n                            },\n                            props: {},\n                            animator: {\n                                type: \"ScrollAnimator\",\n                                config: {}\n                            },\n                            children: [\n                                {\n                                    id: \"d3ddb5d5-212e-4a4e-81fa-8de0be3a0316\",\n                                    type: \"Interaction\",\n                                    props: {\n                                        name: \"intro\"\n                                    },\n                                    children: [\n                                        {\n                                            id: \"725d0fbf-f7eb-43f8-b08d-2dfb263a550c\",\n                                            type: \"SingleColumnLayout\",\n                                            children: [\n                                                {\n                                                    id: \"4e71a6dc-a101-47d7-9277-e3b14805a35e\",\n                                                    type: \"Column\",\n                                                    props: {\n                                                        align: \"center\"\n                                                    },\n                                                    children: [\n                                                        {\n                                                            id: \"04d365f3-a2ae-4970-9f3d-af259d5fec70\",\n                                                            type: \"Text\",\n                                                            children: [\n                                                                {\n                                                                    id: \"09d9ed61-4c03-48d9-a151-c552b581b64c\",\n                                                                    type: \"Heading\",\n                                                                    children: \"Module Title\"\n                                                                },\n                                                                {\n                                                                    id: \"80f683c3-d5b8-4fd7-bedf-ec49ecdeac5b\",\n                                                                    type: \"Paragraph\",\n                                                                    children: \"Welcome text explaining what this module is about\"\n                                                                }\n                                                            ]\n                                                        },\n                                                        {\n                                                            id: \"385afaf3-48a6-491a-b3bd-a0c2c4938c70\",\n                                                            type: \"Carousel\",\n                                                            children: [\n                                                                {\n                                                                    id: \"2441aebc-4a8e-4d7b-88c2-7850b4390f2f\",\n                                                                    type: \"Slide\",\n                                                                    children: [\n                                                                        {\n                                                                            id: \"ee79d1b0-2fdd-4efd-9e52-507d2b25ee07\",\n                                                                            type: \"Image\",\n                                                                            props: {\n                                                                                src: \"https://dummyimage.com/400x300/333/d5d6ed.png\"\n                                                                            }\n                                                                        },\n                                                                        {\n                                                                            id: \"752f8931-7395-4f01-9e4b-9ace9865236a\",\n                                                                            type: \"Paragraph\",\n                                                                            children: \"Slide A\"\n                                                                        }\n                                                                    ]\n                                                                },\n                                                                {\n                                                                    id: \"8ccd4fcf-fee8-43f1-bddc-3defb9184d8a\",\n                                                                    type: \"Slide\",\n                                                                    children: [\n                                                                        {\n                                                                            id: \"e6cf5d47-1ce3-4300-a892-c2543bbf1ab1\",\n                                                                            type: \"Image\",\n                                                                            props: {\n                                                                                src: \"https://dummyimage.com/400x300/333/d5d6ed.png\"\n                                                                            }\n                                                                        },\n                                                                        {\n                                                                            id: \"66900c97-0381-4a9d-9533-95125b08d548\",\n                                                                            type: \"Paragraph\",\n                                                                            children: \"Slide B\"\n                                                                        }\n                                                                    ]\n                                                                },\n                                                                {\n                                                                    id: \"e2364ede-ff20-4894-9ef3-c71c0f154b0a\",\n                                                                    type: \"Slide\",\n                                                                    children: [\n                                                                        {\n                                                                            id: \"df8164c8-f51f-4de4-bc1b-c527ac09308f\",\n                                                                            type: \"Image\",\n                                                                            props: {\n                                                                                src: \"https://dummyimage.com/400x300/333/d5d6ed.png\"\n                                                                            }\n                                                                        },\n                                                                        {\n                                                                            id: \"9c33776c-3eaf-4032-8cdd-a630e516072e\",\n                                                                            type: \"Paragraph\",\n                                                                            children: \"Slide C\"\n                                                                        }\n                                                                    ]\n                                                                }\n                                                            ]\n                                                        },\n                                                        {\n                                                            id: \"2238f67f-242d-413e-93d9-68f87a350ca2\",\n                                                            type: \"ContinueButton\",\n                                                            children: \"Continue\"\n                                                        }\n                                                    ]\n                                                }\n                                            ]\n                                        }\n                                    ]\n                                },\n                                {\n                                    id: \"e9f6f212-250c-409d-a14d-68838c7e1bc3\",\n                                    type: \"Interaction\",\n                                    props: {\n                                        name: \"number-two\"\n                                    },\n                                    children: [\n                                        {\n                                            id: \"07f3cadd-7abc-4d19-8073-0ed0155627ac\",\n                                            type: \"SingleColumnLayout\",\n                                            children: [\n                                                {\n                                                    type: \"Column\",\n                                                    props: {\n                                                        align: \"center\"\n                                                    },\n                                                    children: [\n                                                        {\n                                                            id: \"610e47ed-eb35-44d6-9c00-d5db5179d21d\",\n                                                            type: \"Text\",\n                                                            children: [\n                                                                {\n                                                                    id: \"\",\n                                                                    type: \"Heading\",\n                                                                    children: \"Section 2\"\n                                                                },\n                                                                {\n                                                                    id: \"\",\n                                                                    type: \"Paragraph\",\n                                                                    children: \"Welcome text explaining what this module is about\"\n                                                                }\n                                                            ]\n                                                        },\n                                                        {\n                                                            id: \"7fbd0b94-684d-49f2-acb2-8624ead6b634\",\n                                                            type: \"Carousel\",\n                                                            children: [\n                                                                {\n                                                                    id: \"cf6e7f24-6e91-4cb9-ba94-55d0183bf4a3\",\n                                                                    type: \"Slide\",\n                                                                    children: [\n                                                                        {\n                                                                            id: \"0ef952ca-72c2-465e-a33b-32a474dd557f\",\n                                                                            type: \"Image\",\n                                                                            props: {\n                                                                                src: \"https://dummyimage.com/400x300/333/d5d6ed.png\"\n                                                                            }\n                                                                        },\n                                                                        {\n                                                                            id: \"1a284c98-6727-4e42-bb82-4735c325bb4b\",\n                                                                            type: \"Paragraph\",\n                                                                            children: \"Slide A\"\n                                                                        }\n                                                                    ]\n                                                                },\n                                                                {\n                                                                    id: \"eba83134-5738-478c-a719-2b4b3a8732ba\",\n                                                                    type: \"Slide\",\n                                                                    children: [\n                                                                        {\n                                                                            id: \"9e27942b-3252-4b6a-ab02-2543a07451cf\",\n                                                                            type: \"Image\",\n                                                                            props: {\n                                                                                src: \"https://dummyimage.com/400x300/333/d5d6ed.png\"\n                                                                            }\n                                                                        },\n                                                                        {\n                                                                            id: \"a9b357ac-f28a-4d23-8877-d9796b3154c1\",\n                                                                            type: \"Paragraph\",\n                                                                            children: \"Slide B\"\n                                                                        }\n                                                                    ]\n                                                                },\n                                                                {\n                                                                    id: \"cbe3b6b7-5f93-41f7-b449-404ac0b7fd4f\",\n                                                                    type: \"Slide\",\n                                                                    children: [\n                                                                        {\n                                                                            id: \"c911107d-54c6-45ca-a5f0-3e66b886bfed\",\n                                                                            type: \"Image\",\n                                                                            props: {\n                                                                                src: \"https://dummyimage.com/400x300/333/d5d6ed.png\"\n                                                                            }\n                                                                        },\n                                                                        {\n                                                                            id: \"e5e02602-b8e6-4c20-a340-fc2a3178f897\",\n                                                                            type: \"Paragraph\",\n                                                                            children: \"Slide C\"\n                                                                        }\n                                                                    ]\n                                                                }\n                                                            ]\n                                                        },\n                                                        {\n                                                            id: \"381ad80c-5e01-4c77-96ac-d78037cd3a6a\",\n                                                            type: \"ContinueButton\",\n                                                            children: \"Continue\"\n                                                        }\n                                                    ]\n                                                }\n                                            ]\n                                        }\n                                    ]\n                                }\n                            ]\n                        }\n                    ]\n                }\n            ]\n        }\n    ]\n};\n","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./block\"));\n__export(require(\"./children\"));\n__export(require(\"./render\"));\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n            r[k] = a[j];\n    return r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Block = /** @class */ (function () {\n    function Block(data) {\n        this.id = data.id;\n        this.type = data.type;\n        this.props = data.props;\n        this.meta = data.meta;\n        this.children = data.children;\n        this.animator = data.animator;\n    }\n    Block.new = function () {\n        return new Block({});\n    };\n    return Block;\n}());\nexports.Block = Block;\nexports.cloneBlock = function (block) {\n    var children = Array.isArray(block.children) ? __spreadArrays(block.children) : block.children;\n    return __assign(__assign({}, block), { children: children, props: __assign({}, block.props) });\n};\n","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./bar\"));\n__export(require(\"./burger\"));\n__export(require(\"./drawer\"));\n__export(require(\"./dropDown\"));\n__export(require(\"./logo\"));\n__export(require(\"./navArrow\"));\n__export(require(\"./navbar\"));\n__export(require(\"./navbarContext\"));\n__export(require(\"./navbarLink\"));\n__export(require(\"./navigation\"));\n__export(require(\"./navItem\"));\n__export(require(\"./search\"));\n__export(require(\"./user\"));\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar creator_ui_1 = require(\"@chameleoncreator/creator-ui\");\nvar navbarContext_1 = require(\"./navbarContext\");\nvar user_1 = require(\"./user\");\nvar search_1 = require(\"./search\");\nvar logo_1 = require(\"./logo\");\nvar navigation_1 = require(\"./navigation\");\nvar drawer_1 = require(\"./drawer\");\nvar burger_1 = require(\"./burger\");\nvar bar_1 = require(\"./bar\");\nvar lock_1 = require(\"./lock\");\nvar divider_1 = require(\"./divider\");\nvar networkActivity_1 = require(\"./networkActivity\");\nvar toggler = function (menu, setMenu) { return function (id) {\n    var _a;\n    setMenu(__assign(__assign({}, Object.keys(menu).reduce(function (acc, r) {\n        return (acc[r] = false);\n    }, {})), (_a = {}, _a[id] = !menu[id], _a)));\n}; };\nexports.Navbar = function (props) {\n    var _a = react_1.useState({}), menu = _a[0], setMenu = _a[1];\n    var isOpen = function (id) {\n        return !!menu[id];\n    };\n    var toggleMenu = toggler(menu, setMenu);\n    var boxed = props.boxed, nav = props.nav, currentUser = props.currentUser, _b = props.search, search = _b === void 0 ? { url: \"\", q: \"\" } : _b, lock = props.lock, networkRequestActive = props.networkRequestActive, networkAvailable = props.networkAvailable, showNetworkActivity = props.showNetworkActivity, showLock = props.showLock, showSearch = props.showSearch;\n    var ctx = {\n        boxed: boxed,\n        nav: nav,\n        currentUser: currentUser,\n        search: search,\n        lock: lock,\n        networkRequestActive: networkRequestActive,\n        networkAvailable: networkAvailable,\n        isOpen: isOpen,\n        toggleMenu: toggleMenu,\n    };\n    var _c = react_1.useState(window.innerWidth >= 768 ? \"header\" : \"drawer\"), display = _c[0], setDisplay = _c[1];\n    var _d = react_1.useState(false), showDrawer = _d[0], setDrawer = _d[1];\n    react_1.useEffect(function () {\n        var onResize = function (e) {\n            if (window.innerWidth >= 768) {\n                display !== \"header\" && setDisplay(\"header\");\n                return;\n            }\n            display !== \"drawer\" && setDisplay(\"drawer\");\n        };\n        window.addEventListener(\"resize\", onResize);\n        return function () { return window.removeEventListener(\"resize\", onResize); };\n    }, [display]);\n    var isMobileDisplay = display === \"drawer\";\n    return (react_1.default.createElement(navbarContext_1.NavContext.Provider, { value: ctx },\n        react_1.default.createElement(bar_1.Bar, { boxed: props.boxed },\n            react_1.default.createElement(creator_ui_1.Flexbox, { alignItems: \"center\", style: { flex: isMobileDisplay ? 1 : 0, height: 70 } },\n                isMobileDisplay ? react_1.default.createElement(burger_1.Burger, __assign({}, { showDrawer: showDrawer, setDrawer: setDrawer })) : null,\n                react_1.default.createElement(creator_ui_1.Flexbox, { flex: \"0\", pl: 3, pr: 2 },\n                    react_1.default.createElement(creator_ui_1.Flexbox, { as: \"span\" },\n                        react_1.default.createElement(logo_1.Logo, null))),\n                react_1.default.createElement(creator_ui_1.Flexbox, { style: { flex: isMobileDisplay ? 1 : 0 }, px: 2 },\n                    react_1.default.createElement(search_1.SearchBar, { q: search.q, url: search.url, showSearch: showSearch })),\n                !isMobileDisplay ? (react_1.default.createElement(react_1.default.Fragment, null,\n                    showLock ? (react_1.default.createElement(creator_ui_1.Flexbox, { px: 2 },\n                        react_1.default.createElement(lock_1.Lock, { lock: lock }))) : null,\n                    react_1.default.createElement(creator_ui_1.Flexbox, { px: 2 },\n                        react_1.default.createElement(networkActivity_1.NetworkActivity, { showActivity: showNetworkActivity, isActive: networkRequestActive })))) : null),\n            !isMobileDisplay ? (react_1.default.createElement(creator_ui_1.Flexbox, { flex: \"1\", justifyContent: \"flex-end\", px: 3 },\n                react_1.default.createElement(navigation_1.Navigation, { nav: nav }),\n                currentUser ? react_1.default.createElement(user_1.Admin, { name: currentUser.firstName, profileImg: currentUser.profileImage }) : null)) : null),\n        isMobileDisplay ? (react_1.default.createElement(react_1.default.Fragment, null,\n            react_1.default.createElement(drawer_1.Overlay, { style: {\n                    display: showDrawer ? \"block\" : \"none\",\n                }, onClick: function () { return setDrawer(false); } }),\n            react_1.default.createElement(drawer_1.Drawer, { style: {\n                    transform: showDrawer ? \"translate3d(0,0,0)\" : \"translate3d(-340px,0,0)\",\n                } },\n                react_1.default.createElement(creator_ui_1.Flexbox, { px: 3, py: \"11px\" },\n                    react_1.default.createElement(logo_1.Logo, null)),\n                react_1.default.createElement(divider_1.Divider, null),\n                react_1.default.createElement(creator_ui_1.Box, { as: \"ul\", p: 0, m: 0 }, nav.map(function (r, i) { return (react_1.default.createElement(drawer_1.DrawerItem, { key: \"nav-\" + r.label + \"-i\", item: r })); }))))) : null));\n};\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar LockedIcon = function () { return (react_1.default.createElement(\"svg\", { width: \"45px\", height: \"45px\", viewBox: \"0 0 48 48\" },\n    react_1.default.createElement(\"g\", { stroke: \"none\", strokeWidth: \"1\", fill: \"none\", fillRule: \"evenodd\" },\n        react_1.default.createElement(\"g\", { transform: \"translate(1.000000, 1.000000)\" },\n            react_1.default.createElement(\"g\", { transform: \"translate(15.000000, 11.000000)\" },\n                react_1.default.createElement(\"path\", { d: \"M15.1678711,19.9519192 L1.71800361,19.9519192 C0.769075904,19.9519192 -2.04819277e-05,19.1933333 -2.04819277e-05,18.2573737 L-2.04819277e-05,9.31353535 C-2.04819277e-05,8.37777778 0.769075904,7.6189899 1.71800361,7.6189899 L15.1678711,7.6189899 C16.116594,7.6189899 16.8858952,8.37777778 16.8858952,9.31353535 L16.8858952,18.2573737 C16.8858952,19.1933333 16.116594,19.9519192 15.1678711,19.9519192 Z\", stroke: \"#111214\" }),\n                react_1.default.createElement(\"path\", { d: \"M13.2371831,7.61907071 L13.2371831,4.72876768 C13.2371831,2.11725253 11.0906771,8.08080808e-05 8.44297831,8.08080808e-05 C5.79527952,8.08080808e-05 3.64877349,2.11725253 3.64877349,4.72876768 L3.64877349,7.61907071\", stroke: \"#111214\" }),\n                react_1.default.createElement(\"path\", { d: \"M9.98668072,12.667899 C9.98668072,11.8268889 9.29541566,11.1452727 8.44295783,11.1452727 C7.59029518,11.1452727 6.89923494,11.8268889 6.89923494,12.667899 C6.89923494,13.207899 7.18495783,13.6812323 7.61487349,13.9515354 L7.61487349,15.627899 C7.61487349,16.0790101 7.98559639,16.4446667 8.44295783,16.4446667 C8.90031928,16.4446667 9.27104217,16.0790101 9.27104217,15.627899 L9.27104217,13.9515354 C9.70075301,13.6812323 9.98668072,13.207899 9.98668072,12.667899\", id: \"Fill-5\", fill: \"#111214\" })),\n            react_1.default.createElement(\"circle\", { stroke: \"#D0DBFE\", cx: \"23\", cy: \"23\", r: \"23\" }),\n            react_1.default.createElement(\"circle\", { fill: \"#FF0566\", cx: \"40\", cy: \"8\", r: \"4\" }))))); };\nvar UnlockedIcon = function () { return (react_1.default.createElement(\"svg\", { width: \"45px\", height: \"45px\", viewBox: \"0 0 48 48\" },\n    react_1.default.createElement(\"g\", { stroke: \"none\", strokeWidth: \"1\", fill: \"none\", fillRule: \"evenodd\" },\n        react_1.default.createElement(\"g\", { transform: \"translate(1.000000, 1.000000)\" },\n            react_1.default.createElement(\"g\", { transform: \"translate(15.000000, 11.000000)\" },\n                react_1.default.createElement(\"path\", { d: \"M15.167912,19.9519192 L1.71804458,19.9519192 C0.769116867,19.9519192 2.04819277e-05,19.1933333 2.04819277e-05,18.2573737 L2.04819277e-05,9.31353535 C2.04819277e-05,8.37777778 0.769116867,7.6189899 1.71804458,7.6189899 L15.167912,7.6189899 C16.1166349,7.6189899 16.8859361,8.37777778 16.8859361,9.31353535 L16.8859361,18.2573737 C16.8859361,19.1933333 16.1166349,19.9519192 15.167912,19.9519192 Z\", stroke: \"#111214\" }),\n                react_1.default.createElement(\"path\", { d: \"M12.8603976,2.88810101 C12.1326747,1.19092929 10.4287831,2.02020202e-05 8.44306024,2.02020202e-05 L8.44285542,2.02020202e-05 C5.79515663,2.02020202e-05 3.6486506,2.11719192 3.6486506,4.72870707 L3.6486506,7.6190101\", stroke: \"#111214\" }),\n                react_1.default.createElement(\"path\", { d: \"M9.98674217,12.667899 C9.98674217,11.8268889 9.29547711,11.1452727 8.44281446,11.1452727 C7.59035663,11.1452727 6.89909157,11.8268889 6.89909157,12.667899 C6.89909157,13.207899 7.18501928,13.6812323 7.61473012,13.9515354 L7.61473012,15.627899 C7.61473012,16.0790101 7.98565783,16.4446667 8.44301928,16.4446667 C8.9001759,16.4446667 9.27110361,16.0790101 9.27110361,15.627899 L9.27110361,13.9515354 C9.70081446,13.6812323 9.98674217,13.207899 9.98674217,12.667899\", fill: \"#111214\" })),\n            react_1.default.createElement(\"circle\", { stroke: \"#D0DBFE\", cx: \"23\", cy: \"23\", r: \"23\" }),\n            react_1.default.createElement(\"circle\", { fill: \"#4DE2C1\", cx: \"40\", cy: \"8\", r: \"4\" }))))); };\nvar LockIcon = styled_1.default.i(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  width: 45px;\\n  height: 45px;\\n  cursor: pointer;\\n  transition: opacity 0.2s;\\n\\n  &:hover {\\n    opacity: 0.5;\\n  }\\n\"], [\"\\n  width: 45px;\\n  height: 45px;\\n  cursor: pointer;\\n  transition: opacity 0.2s;\\n\\n  &:hover {\\n    opacity: 0.5;\\n  }\\n\"])));\nexports.Lock = function (_a) {\n    var lock = _a.lock;\n    var _b = react_1.useState(false), locked = _b[0], setLocked = _b[1];\n    return (react_1.default.createElement(LockIcon, { onClick: function (e) {\n            setLocked(!locked);\n        } }, locked ? react_1.default.createElement(LockedIcon, null) : react_1.default.createElement(UnlockedIcon, null)));\n};\nvar templateObject_1;\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nexports.Divider = styled_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  position: \", \";\\n  width: 100%;\\n  height: 0px;\\n  border-bottom: 1px solid #dde5fe;\\n\"], [\"\\n  position: \", \";\\n  width: 100%;\\n  height: 0px;\\n  border-bottom: 1px solid #dde5fe;\\n\"])), function (p) { return p.position || \"initial\"; });\nvar templateObject_1;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar loadingSpinner_1 = require(\"./loadingSpinner\");\nexports.NetworkActivity = function (_a) {\n    var showActivity = _a.showActivity, isActive = _a.isActive;\n    if (showActivity && isActive) {\n        return react_1.default.createElement(loadingSpinner_1.LoadingSpinner, null);\n    }\n    return null;\n};\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importDefault(require(\"react\"));\nvar emotion_1 = require(\"emotion\");\nvar styled_1 = __importDefault(require(\"@emotion/styled\"));\nvar lineWeight = 5;\nvar dualRingAnimation = emotion_1.keyframes(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n  0% {\\n    transform: rotate(0deg);\\n  }\\n  100% {\\n    transform: rotate(360deg);\\n  }\\n\"], [\"\\n  0% {\\n    transform: rotate(0deg);\\n  }\\n  100% {\\n    transform: rotate(360deg);\\n  }\\n\"])));\nvar Ring = styled_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject([\"\\n  display: inline-block;\\n  width: \", \"px;\\n  height: \", \"px;\\n  animation: 1.2s linear infinite;\\n\\n  &:after {\\n    content: \\\"\\\";\\n    display: block;\\n    width: \", \"px;\\n    height: \", \"px;\\n\\n    border-radius: 50%;\\n    border: \", \"px solid \", \";\\n    border-color: \", \" transparent \", \" transparent;\\n    animation: \", \" 1.2s linear infinite;\\n  }\\n\"], [\"\\n  display: inline-block;\\n  width: \", \"px;\\n  height: \", \"px;\\n  animation: 1.2s linear infinite;\\n\\n  &:after {\\n    content: \\\"\\\";\\n    display: block;\\n    width: \", \"px;\\n    height: \", \"px;\\n\\n    border-radius: 50%;\\n    border: \", \"px solid \", \";\\n    border-color: \", \" transparent \", \" transparent;\\n    animation: \", \" 1.2s linear infinite;\\n  }\\n\"])), function (p) { return p.size; }, function (p) { return p.size; }, function (p) { return p.size - lineWeight * 2; }, function (p) { return p.size - lineWeight * 2; }, lineWeight, function (p) { return p.color; }, function (p) { return p.color; }, function (p) { return p.color; }, dualRingAnimation);\nvar SpinContainer = styled_1.default.div(templateObject_3 || (templateObject_3 = __makeTemplateObject([\"\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n  width: 100%;\\n  height: 100%;\\n\"], [\"\\n  display: flex;\\n  justify-content: center;\\n  align-items: center;\\n  width: 100%;\\n  height: 100%;\\n\"])));\nexports.LoadingSpinner = function (_a) {\n    var _b = _a.size, size = _b === void 0 ? 36 : _b, _c = _a.color, color = _c === void 0 ? \"#ff0063\" : _c;\n    return (react_1.default.createElement(SpinContainer, null,\n        react_1.default.createElement(Ring, { size: size, color: color })));\n};\nvar templateObject_1, templateObject_2, templateObject_3;\n","// from:https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md\n(function(arr) {\n  arr.forEach(function(item) {\n    if (item.hasOwnProperty('remove')) {\n      return;\n    }\n    Object.defineProperty(item, 'remove', {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: function remove() {\n        this.parentNode.removeChild(this);\n      },\n    });\n  });\n})([Element.prototype, CharacterData.prototype, DocumentType.prototype]);\n","// from:https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md\n(function(arr) {\n  arr.forEach(function(item) {\n    if (item.hasOwnProperty('remove')) {\n      return;\n    }\n    Object.defineProperty(item, 'remove', {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: function remove() {\n        this.parentNode.removeChild(this);\n      },\n    });\n  });\n})([Element.prototype, CharacterData.prototype, DocumentType.prototype]);\n","const url = new URL(window.location.href);\nconst queryParams = new URLSearchParams(url.search);\n\nconst highlightActiveElement =\n  queryParams.has('highlightActiveElement') &&\n  queryParams.get('highlightActiveElement') === '1';\n\nif (window.parent === window && highlightActiveElement) {\n  const ACTIVE_ELEMENT_MARKER = document.createElement('div');\n  ACTIVE_ELEMENT_MARKER.style.position = 'fixed';\n  ACTIVE_ELEMENT_MARKER.style.borderRadius = '1px';\n  ACTIVE_ELEMENT_MARKER.style.boxShadow = `\n  0 0 0 2px #00D9D3, 0 0 0 3px #fff,  0 0 0 5px #00D9D3\n  `;\n\n  document.body.appendChild(ACTIVE_ELEMENT_MARKER);\n\n  let currentActiveElement;\n\n  setInterval(() => {\n    const { activeElement } = document as any;\n\n    if (!activeElement) {\n      return;\n    }\n\n    const { top, left, width, height } = activeElement.getBoundingClientRect();\n\n    const currentActiveElementIsSection =\n      activeElement.tagName.toLowerCase() === 'section';\n\n    const topOffset = !currentActiveElementIsSection ? 5 : -20;\n    const leftOffset = !currentActiveElementIsSection ? 5 : -20;\n    const widthOffset = !currentActiveElementIsSection ? 10 : -40;\n    const heightOffset = !currentActiveElementIsSection ? 10 : -40;\n\n    ACTIVE_ELEMENT_MARKER.style.pointerEvents = 'none';\n    ACTIVE_ELEMENT_MARKER.style.top = `${top - topOffset}px`;\n    ACTIVE_ELEMENT_MARKER.style.left = `${left - leftOffset}px`;\n    ACTIVE_ELEMENT_MARKER.style.width = `${width + widthOffset}px`;\n    ACTIVE_ELEMENT_MARKER.style.height = `${height + heightOffset}px`;\n    ACTIVE_ELEMENT_MARKER.style.zIndex = '2147483647';\n\n    if (currentActiveElement !== activeElement) {\n      // so only fires when activeElement changes\n      // we can put the above code in here. but creates lag drawing the focus indication\n      //\n\n      currentActiveElement = activeElement;\n\n      if (currentActiveElement.tagName.toLowerCase() === 'section') {\n        console.log('is section :', currentActiveElement.tagName.toLowerCase());\n      }\n    }\n  }, 1000 / 60);\n}\n","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./core\"));\n__export(require(\"./atoms\"));\n__export(require(\"./molecules\"));\n__export(require(\"./elements\"));\n__export(require(\"./icons\"));\n","module.exports = __webpack_public_path__ + \"images/Rectangle.png\";"],"sourceRoot":""}