{"version":3,"sources":["_metronic/i18n/Metronici18n.tsx","_metronic/i18n/i18nProvider.tsx","_metronic/layout/core/DefaultLayoutConfig.ts","_metronic/layout/core/LayoutSetup.ts","_metronic/layout/core/LayoutProvider.tsx","_metronic/layout/core/PageData.tsx","_metronic/layout/core/MetronicSplashScreen.tsx","_metronic/helpers/AssetHelpers.ts","_metronic/helpers/RouterHelpers.ts","_metronic/helpers/components/KTSVG.tsx","_metronic/layout/components/aside/AsideMenuItemWithSub.tsx","_metronic/layout/components/aside/AsideMenuItem.tsx","_metronic/layout/components/aside/AsideMenuMain.tsx","_metronic/assets/ts/components/_CookieComponent.ts","_metronic/assets/ts/_utils/_ElementStyleUtil.ts","_metronic/assets/ts/_utils/_DataUtil.ts","_metronic/assets/ts/_utils/_TypesHelpers.ts","_metronic/assets/ts/_utils/_DOMEventHandlerUtil.ts","_metronic/assets/ts/_utils/ElementAnimateUtil.ts","_metronic/assets/ts/_utils/DomHelpers.ts","_metronic/assets/ts/_utils/EventHandlerUtil.ts","_metronic/assets/ts/components/_DrawerComponent.ts","_metronic/assets/ts/components/_FeedbackComponent.ts","_metronic/assets/ts/components/_ImageInputComponent.ts","_metronic/assets/ts/components/_ScrollComponent.ts","_metronic/assets/ts/components/_ScrollTopComponent.ts","_metronic/assets/ts/components/_StepperComponent.ts","_metronic/assets/ts/components/_StickyComponent.ts","_metronic/assets/ts/components/_ToggleComponent.ts","_metronic/assets/ts/components/_PasswordMeterComponent.ts","_metronic/assets/ts/components/_PlaceComponent.ts","_metronic/assets/ts/components/MenuComponent.ts","_metronic/assets/ts/components/SearchComponent.ts","_metronic/layout/components/aside/AsideMenu.tsx","_metronic/layout/components/aside/AsideDefault.tsx","_metronic/layout/components/Footer.tsx","_metronic/layout/components/header/page-title/DefaultTitle.tsx","_metronic/layout/components/toolbar/Toolbar1.tsx","_metronic/layout/components/toolbar/Toolbar.tsx","_metronic/layout/components/ScrollTop.tsx","_metronic/layout/components/Content.tsx","_metronic/layout/MasterInit.tsx","_metronic/layout/MasterLayout.tsx","components/FormInput/DropDownList/DropDownList.tsx","components/FormInput/TextBox/TextBox.tsx","components/FormInput/RadioButtonList/RadioButtonList.tsx","components/FormInput/Checkbox/Checkbox.tsx","components/Registration/Registration.tsx","components/Questionnaire/ItemOption/ItemOption.tsx","components/Questionnaire/CustomQuestion/CustomQuestion.tsx","components/Questionnaire/ProgressBar/ProgressBar.tsx","components/Questionnaire/SubmitButton/SubmitButton.tsx","components/Questionnaire/NavigationButtons/NavigationButtons.tsx","components/Questionnaire/CustomQuestionnaire/CustomQuestionnaire.tsx","components/Questionnaire/PairQuestion/PairQuestion.tsx","components/Questionnaire/PairQuestionnaire/PairQuestionnaire.tsx","components/Completed/Completed.tsx","components/Spinner/Spinner.tsx","components/ErrorAlert/ErrorAlert.tsx","pages/AssessmentPage/AssessmentPage.tsx","Routes.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["initialState","process","REACT_APP_I18N_CONFIG_KEY","selectedLang","I18nContext","createContext","allMessages","de","en","es","fr","ja","zh","I18nProvider","children","locale","useContext","messages","DefaultLayoutConfig","main","type","primaryColor","darkSkinEnabled","loader","display","scrolltop","header","width","left","fixed","desktop","tabletAndMobile","menuIcon","logoPath","megaMenu","aside","theme","menu","minimized","minimize","hoverable","content","layout","toolbar","tabletAndMobileMode","layouts","toolbar1","height","heightAndTabletMobileMode","toolbar2","toolbar3","toolbar4","toolbar5","footer","pageTitle","breadCrumbs","description","direction","responsive","responsiveBreakpoint","responsiveTarget","LAYOUT_CONFIG_KEY","REACT_APP_BASE_LAYOUT_CONFIG_KEY","getEmptyHTMLAttributes","asideMenu","Map","headerMobile","headerMenu","headerContainer","getEmptyCSSVariables","body","LayoutSetup","classes","asideToggle","toolbarContainer","contentContainer","footerContainer","sidebar","attributes","Object","assign","cssVariables","config","Array","from","document","forEach","attr","removeAttribute","name","setAttribute","backgroundImage","style","class","classList","add","push","typeOptions","bodyStyles","cssText","this","set","initLayout","initHeader","initPageTitle","initToolbar","initContent","initAside","initFooter","initAsideMenu","fieldsToUpdate","updatedConfig","initCSSClasses","initCSSVariables","initHTMLAttributes","isLoaded","initConfig","localStorage","setItem","JSON","stringify","er","console","error","setLayout","ls","getItem","parse","getLayout","bootstrap","updatePartialConfig","LayoutContext","disableSplashScreen","splashScreen","getElementById","setProperty","LayoutProvider","useState","setConfig","setClasses","setAttributes","setCSSVariables","value","_themeConfig","enableSplashScreen","cl","remove","setTimeout","useEffect","Provider","useLayout","PageDataContext","setPageTitle","_title","setPageBreadcrumbs","_breadcrumbs","setPageDescription","_description","PageDataProvider","pageDescription","pageBreadcrumbs","usePageData","MetronicSplashScreenContext","undefined","LayoutSplashScreen","visible","setCount","prev","toAbsoluteUrl","pathname","checkIsActive","url","current","split","getCurrentUrl","indexOf","KTSVG","className","path","svgClassName","src","AsideMenuItemWithSub","to","title","icon","fontIcon","hasBullet","isActive","useLocation","clsx","AsideMenuItem","active","AsideMenuMain","intl","useIntl","formatMessage","id","target","href","REACT_APP_PREVIEW_DOCS_URL","REACT_APP_VERSION","CookieComponent","matches","cookie","match","RegExp","replace","decodeURIComponent","cookieOptions","options","expires","Date","toUTCString","updatedCookie","encodeURIComponent","optionKey","optionValue","ElementStyleUtil","element","property","important","attributeName","getPropertyValue","attibuteName","removeProperty","DataUtil","instance","key","data","instanceData","store","get","newMap","delete","has","result","val","v","k","getObjectPropertyValueByKey","obj","map","entries","hasOwnProperty","getUniqueIdWithPrefix","prefix","Math","floor","random","getTime","toString","stringSnakeToCamel","str","m","toUpperCase","DOMEventHandlerUtil","selector","eventName","callBack","eventId","e","targets","querySelectorAll","i","length","call","parentElement","addEventListener","funcFromStore","removeEventListener","calee","currentTarget","ElementAnimateUtil","duration","update","complete","easings","t","b","c","d","change","start","window","performance","now","requestAnimationFrame","loop","timestamp","time","animationName","animateClasses","cssClass","one","offset","targetPos","getElementOffset","top","scrollPos","pageYOffset","documentElement","scrollTop","animate","scrollTo","getCSS","el","styleProp","defaultView","ownerDocument","toLowerCase","getComputedStyle","getElementActualCss","prop","cache","css","getAttribute","offsetWidth","offsetHeight","parseFloat","attributeValue","getElementIndex","parentNode","getElementMatches","p","Element","prototype","f","webkitMatchesSelector","tagName","getClientRects","rect","getBoundingClientRect","win","pageXOffset","getScrollTop","scrollingElement","getViewPort","innerWidth","innerHeight","isVisibleElement","throttle","timer","func","delay","getElementChild","childNodes","child","nodeType","getElementChildren","slide","dir","speed","callback","calcHeight","getElementActualHeight","calcPaddingTop","calcPaddingBottom","parseInt","paddingTop","paddingBottom","overflow","getBreakpoint","breakpoint","variableName","hex","trim","getCSSVariableValue","getAttributeValueByBreakpoint","incomingAttr","jsonStr","join","matched","substring","toJSON","resultKey","resultBreakpoint","EventHandlerUtil","metas","handlerId","meta","getEventMetasByName","setEventMetasByName","handerId","fired","getEventsMetaByHandlerId","setEventMetaByNameAndHandlerId","handler","setFiredByNameAndHandlerId","addEvent","removeEvent","on","defaultDrawerOptions","overlay","baseClass","overlayClass","DrawerComponent","_element","overlayElement","toggleElement","instanceUid","shown","lastWidth","closeElement","_handlers","togglers","_getOption","closers","preventDefault","_toggle","_hide","_update","String","hasBaseClass","contains","bodyCanvasAttr","optionName","option","trigger","_show","_deleteOverlay","_createOverlay","createElement","elementZIndex","overlayZindex","append","overlayClassOption","removeChild","_getDirection","_getWidth","toggle","show","hide","isShown","goElement","off","event","item","drawer","getInstance","hasInstace","hideAll","getAllInstancesByKey","dr","updateAll","handleDismiss","closest","createInstances","initGlobalHandlers","reinitialization","defaultImageInputOptions","defaultImageInputQueires","componentName","instanseQuery","inputQuery","wrapperQuery","cancelQuery","removeQuery","hiddenQuery","ImageInputComponent","_options","_queries","inputElement","wrapperElement","cancelElement","removeElement","hiddenElement","queries","uid","_change","files","reader","FileReader","onload","readAsDataURL","_cancel","_remove","querySelector","handlers","ImageInput","elements","createInsance","defaultScrollOptions","saveState","ScrollComponent","getOption","hasAttribute","getHeightType","getAutoHeight","dependencies","wrappers","len","borderTop","borderBottom","setupHeight","getHeight","heightType","setupState","pos","setupScrollHandler","scrollHandler","cookieId","destroyScrollHandler","resetHeight","heghtType","Function","getElement","scroll","resize","createInstance","defaultScrollTopOptions","ScrollTopComponent","_scroll","_go","go","goTop","defaultStepperOptions","startIndex","animation","animationSpeed","animationNextClass","animationPreviousClass","StepperComponent","steps","btnNext","btnPrev","btnSubmit","totatStepsNumber","passedStepIndex","currentStepIndex","_goTo","index","refreshUI","initHandlers","stepDirection","_getStepDirection","getStepContent","getLastStepIndex","getTotalStepsNumber","state","isLastStep","isFirstStep","animateClass","isBetweenStep","goto","goNext","getNextStepIndex","goPrev","getPrevStepIndex","goFirst","goLast","getCurrentStepIndex","getPassedStepIndex","destroy","log","stepper","defaultStickyOptions","reverse","animationClass","StickyComponent","instanceName","eventTriggerState","lastScrollTop","offsetNum","st","enable","disable","dataStickyAttr","attrValue","zindex","widthTarget","targetElement","offsetLeft","sticky","defaultToggleOptions","ToggleComponent","attribute","_isEnabled","_disable","_enable","isEnabled","elementTargetAttr","elementToggleAttr","defaultPasswordMeterOptions","minLength","checkUppercase","checkLowercase","checkDigit","checkChar","scoreHighlightClass","defaultPasswordMeterQueires","visibilityQuery","highlightQuery","PasswordMeterComponent","visibilityElement","highlightElement","score","checkSteps","reset","highlight","check","visitbility","visibleIcon","hiddenIcon","focus","test","count","items","slice","total","checkScore","getCheckScore","getScore","checkLength","checkLowerCase","passwordMeter","defaultPlaceOptions","mode","defaultPlaceQueires","attrQuery","PlaceComponent","parentSelector","prepend","place","defaultMenuOptions","dropdown","hoverTimeout","accordion","slideSpeed","expand","MenuComponent","triggerElement","_setTriggerElement","_isTriggerElement","_getItemOption","_getItemElement","itemElement","sub","subItem","_getItemParentElement","parentItem","_getItemParentElements","parent","parents","buffer","unshift","_getDropdownPopperConfig","placementOption","placement","flipValue","flip","offsetValue","strategy","modifiers","rootBoundary","altBoundary","fallbackPlacements","_getItemChildElement","_getItemChildElements","_getItemSubElement","_getCss","_getItemSubType","_isItemSubShown","_isItemDropdownPermanent","_isItemParentShown","s","getElementParents","_isItemSubElement","_hasItemSub","_getItemLinkElement","_getItemToggleElement","_showDropdown","hideDropdowns","parentZindex","bufferNode","position","isNaN","getHighestZindex","initDropdownPopper","appendChild","reference","attach","popper","createPopper","_hideDropdown","referenceNode","insertBefore","nextSibling","insertAfterElement","destroyDropdownPopper","_showAccordion","_hideAccordions","subElement","_hideAccordion","itemsToHide","itemToHide","_reset","removeClass","_destroy","_mouseout","timeout","_mouseover","clearTimeout","_dismiss","itemSubType","_link","_click","click","link","dismiss","mouseover","mouseout","getItemTriggerType","getItemSubType","getItemLinkElement","getItemToggleElement","getItemSubElement","getItemParentElements","isItemSubShown","isItemParentShown","getTriggerElement","isItemDropdownPermanent","hideAccordions","elementMenu","menuData","subMenu","skip","updateDropdowns","forceUpdate","menuInstance","menuItems","menuObj","stopPropagation","defaultSearchOptions","keypress","enter","showOnFocus","defaultSearchQueires","SearchComponent","contentElement","formElement","spinnerElement","clearElement","submitElement","toolbarElement","resultsElement","suggestionElement","emptyElement","processing","menuObject","_getElement","getResponsiveFormMode","blur","charCode","keyCode","search","input","clear","responsiveFormMode","isProcessing","getQuery","getMenu","getFormElement","Search","AsideMenu","asideMenuCSSClasses","scrollRef","useRef","ref","AsideDefault","Footer","getFullYear","DefaultTitle","isSeparator","Toolbar1","Toolbar","ScrollTop","isFirstRun","reInitialization","stickyHeader","updateHeaderSticky","Content","location","MasterInit","MasterLayout","DropDownList","inputId","label","required","errors","touched","as","Key","Value","TextBox","placeholder","RadioButtonList","Checkbox","Registration","customIntroductionText","beforeAgreementText","hideAddress","customRegistrationInputs","onFormSubmit","formInitialValues","Email","FirstName","LastName","Address1","Address2","City","State","ZipCode","Phone","Country","AgreeToTerms","formValidationSchema","Yup","email","max","oneOf","states","StateCode","StateName","filter","stateItems","setStateItems","dangerouslySetInnerHTML","__html","initialValues","validationSchema","onSubmit","values","setSubmitting","setFieldValue","onChange","countryCode","resetStates","Type","Label","Options","ItemOption","questionId","optionId","isSelected","onSelect","htmlFor","checked","CustomQuestion","itemNumber","question","selectedOptionId","showRequiredMessage","onOptionSelected","handleItemOptionSelect","CustomQuestionID","CustomOptionID","OptionText","ProgressBar","currentQuestionNumber","questionCount","progress","role","SubmitButton","onClick","NavigationButtons","showPreviousButton","showNextButton","onPrevious","onNext","disabled","faAngleLeft","size","faAngleRight","CustomQuestionnaire","customQuestions","startQuestionNumber","setCurrentQuestionNumber","highestSeenQuestionNumber","setHighestSeenQuestionNumber","userAnswers","setUserAnswers","setShowRequiredMessage","getCurrentQuestion","getCurrentUserAnswer","maxWidth","CustomQuestionText","CustomOptionId","currentQuestion","currentUserAnswers","CustomQuestionId","currentAnswer","PairQuestion","Fragment","AnswerID","AnswerText","PairQuestionnaire","questions","Answers","AnswerId","QuestionId","QuestionID","Completed","customThankYouText","rating","ratingInterpretation","isPrivate","isFormSubmitted","shareResult","setShareResult","wantTraining","setWantTraining","wantEmployment","setWantEmployment","thankYouText","faStar","Spinner","ErrorAlert","onTryAgain","faExclamationTriangle","AssessmentPage","isLoading","setIsLoading","hasError","setHasError","step","setStep","assessmentData","setAssessmentData","sessionStorage","sessionAssessmentId","setSessionAssessmentId","sessionLocAssessmentId","setSessionLocAssessmentId","registrationId","setRegistrationId","candidateProfile","setCandidateProfile","preAssessmentAnswers","setPreAssessmentAnswers","assessmentAnswers","setAssessmentAnswers","isAssessmentComplete","setIsAssessmentComplete","resultId","setResultId","setCustomThankYouText","setRating","setRatingInterpretation","setIsFormSubmitted","useParams","assessmentId","locAssessmentId","restartAssessment","a","fetch","response","ok","json","CustomClientScript","script","async","currentStep","CustomQuestions","Questions","CustomThankYouPage","ImageHeader","backgroundRepeat","backgroundPosition","backgroundPositionY","alt","LogoPath","AssessmentTypeName","RegistrationIntroText","BeforeAgreementText","HideAddress","CustomRegistrationInputs","registrationFormValues","registrationData","assessmentTypeID","AssessmentTypeID","locAssessmentID","LocAssessmentID","method","headers","candidateId","preAssessmentFormValues","assessmentFormValues","customParams","completedAssessment","partnerId","PartnerID","incompleteCandidateID","IsPrivate","assessmentName","customAnswers","answers","ResultId","CustomThankYouText","Rating","RatingInterpretation","RedirectUrl","shareResults","ShareResult","WantTraining","WantEmployment","Routes","exact","component","App","basename","fallback","reportWebVitals","onPerfEntry","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode"],"mappings":"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","file":"static/js/main.2a52574b.chunk.js","sourcesContent":["import React, { FC, createContext, useContext } from 'react';\n\nconst I18N_CONFIG_KEY = process.env.REACT_APP_I18N_CONFIG_KEY || 'i18nConfig';\n\ntype Props = {\n selectedLang: 'de' | 'en' | 'es' | 'fr' | 'ja' | 'zh';\n};\nconst initialState: Props = {\n selectedLang: 'en',\n};\n\nfunction getConfig(): Props {\n const ls = localStorage.getItem(I18N_CONFIG_KEY);\n if (ls) {\n try {\n return JSON.parse(ls) as Props;\n } catch (er) {\n console.error(er);\n }\n }\n return initialState;\n}\n\n// Side effect\nexport function setLanguage(lang: string) {\n localStorage.setItem(I18N_CONFIG_KEY, JSON.stringify({ selectedLang: lang }));\n window.location.reload();\n}\n\nconst I18nContext = createContext(initialState);\n\nconst useLang = () => {\n return useContext(I18nContext).selectedLang;\n};\n\nconst MetronicI18nProvider: FC = ({ children }) => {\n const lang = getConfig();\n return {children};\n};\n\nexport { MetronicI18nProvider, useLang };\n","import { FC } from 'react';\nimport { useLang } from './Metronici18n';\nimport { IntlProvider } from 'react-intl';\nimport '@formatjs/intl-relativetimeformat/polyfill';\nimport '@formatjs/intl-relativetimeformat/locale-data/en';\nimport '@formatjs/intl-relativetimeformat/locale-data/de';\nimport '@formatjs/intl-relativetimeformat/locale-data/es';\nimport '@formatjs/intl-relativetimeformat/locale-data/fr';\nimport '@formatjs/intl-relativetimeformat/locale-data/ja';\nimport '@formatjs/intl-relativetimeformat/locale-data/zh';\n\nimport deMessages from './messages/de.json';\nimport enMessages from './messages/en.json';\nimport esMessages from './messages/es.json';\nimport frMessages from './messages/fr.json';\nimport jaMessages from './messages/ja.json';\nimport zhMessages from './messages/zh.json';\n\nconst allMessages = {\n de: deMessages,\n en: enMessages,\n es: esMessages,\n fr: frMessages,\n ja: jaMessages,\n zh: zhMessages,\n};\n\nconst I18nProvider: FC = ({ children }) => {\n const locale = useLang();\n const messages = allMessages[locale];\n\n return (\n \n {children}\n \n );\n};\n\nexport { I18nProvider };\n","import { ILayout } from './LayoutModels';\n\nexport const DefaultLayoutConfig: ILayout = {\n main: {\n type: 'default',\n primaryColor: '#009EF7',\n darkSkinEnabled: true,\n },\n loader: {\n display: true,\n type: 'default', // Set default|spinner-message|spinner-logo to hide or show page loader\n },\n scrolltop: {\n display: true,\n },\n header: {\n display: true, // Set true|false to show or hide Header\n width: 'fixed', // Set fixed|fluid to change width type\n left: 'menu',\n fixed: {\n desktop: true, // Set true|false to set fixed Header for desktop mode\n tabletAndMobile: true, // Set true|false to set fixed Header for tablet and mobile modes\n },\n menuIcon: 'svg',\n logoPath: '/media/logos/logo.png',\n },\n megaMenu: {\n display: true, // Set true|false to show or hide Mega Menu\n },\n aside: {\n display: false,\n theme: 'dark',\n menu: 'main',\n fixed: true,\n minimized: false,\n minimize: true,\n hoverable: true,\n menuIcon: 'svg',\n },\n content: {\n width: 'fixed', // Set fixed|fluid to change width\n layout: 'default',\n },\n toolbar: {\n display: true, // Display toolbar\n width: 'fixed', // Set fixed|fluid to change width type,\n fixed: {\n desktop: true,\n tabletAndMobileMode: true,\n },\n layout: 'toolbar1',\n layouts: {\n toolbar1: {\n height: '55px',\n heightAndTabletMobileMode: '55px',\n },\n toolbar2: {\n height: '75px',\n heightAndTabletMobileMode: '65px',\n },\n toolbar3: {\n height: '55px',\n heightAndTabletMobileMode: '55px',\n },\n toolbar4: {\n height: '65px',\n heightAndTabletMobileMode: '65px',\n },\n toolbar5: {\n height: '75px',\n heightAndTabletMobileMode: '65px',\n },\n },\n },\n footer: {\n width: 'fixed', // Set fixed|fluid to change width type\n },\n pageTitle: {\n display: true,\n breadCrumbs: true,\n description: false,\n layout: 'default',\n direction: 'row',\n responsive: true,\n responsiveBreakpoint: 'lg',\n responsiveTarget: '#kt_toolbar_container',\n },\n};\n","import {\n IAside,\n IContent,\n IFooter,\n IHeader,\n IToolbar,\n ILayout,\n ILayoutCSSClasses,\n ILayoutHTMLAttributes,\n ILayoutCSSVariables,\n IPageTitle,\n} from './LayoutModels';\nimport { toAbsoluteUrl } from '../../helpers';\nimport { DefaultLayoutConfig } from './DefaultLayoutConfig';\n\nconst LAYOUT_CONFIG_KEY = process.env.REACT_APP_BASE_LAYOUT_CONFIG_KEY || 'LayoutConfig';\n\nexport function getLayout(): ILayout {\n const ls = localStorage.getItem(LAYOUT_CONFIG_KEY);\n if (ls) {\n try {\n return JSON.parse(ls) as ILayout;\n } catch (er) {\n console.error(er);\n }\n }\n return DefaultLayoutConfig;\n}\n\nfunction setLayout(config: ILayout): void {\n try {\n localStorage.setItem(LAYOUT_CONFIG_KEY, JSON.stringify(config));\n } catch (er) {\n console.error(er);\n }\n}\n\nexport function getEmptyCssClasses() {\n return {\n header: [],\n headerContainer: [],\n headerMobile: [],\n headerMenu: [],\n aside: [],\n asideMenu: [],\n asideToggle: [],\n toolbar: [],\n toolbarContainer: [],\n content: [],\n contentContainer: [],\n footerContainer: [],\n sidebar: [],\n pageTitle: [],\n };\n}\n\nexport function getEmptyHTMLAttributes() {\n return {\n asideMenu: new Map(),\n headerMobile: new Map(),\n headerMenu: new Map(),\n headerContainer: new Map(),\n pageTitle: new Map(),\n };\n}\n\nexport function getEmptyCSSVariables() {\n return {\n body: new Map(),\n };\n}\n\nexport class LayoutSetup {\n public static isLoaded: boolean = false;\n public static config: ILayout = getLayout();\n public static classes: ILayoutCSSClasses = getEmptyCssClasses();\n public static attributes: ILayoutHTMLAttributes = getEmptyHTMLAttributes();\n public static cssVariables: ILayoutCSSVariables = getEmptyCSSVariables();\n\n private static initCSSClasses(): void {\n LayoutSetup.classes = getEmptyCssClasses();\n }\n\n private static initHTMLAttributes(): void {\n LayoutSetup.attributes = Object.assign({}, getEmptyHTMLAttributes());\n }\n\n private static initCSSVariables(): void {\n LayoutSetup.cssVariables = getEmptyCSSVariables();\n }\n\n private static initLayout(config: ILayout): void {\n Array.from(document.body.attributes).forEach((attr) => {\n document.body.removeAttribute(attr.name);\n });\n // document.body.style.backgroundImage = `url(${toAbsoluteUrl('/media/patterns/assess-bg-hd.gif')})`;\n document.body.setAttribute('id', 'kt_body');\n if (config.main?.body?.backgroundImage) {\n document.body.style.backgroundImage = `url('${config.main.body.backgroundImage}')`;\n }\n\n if (config.main?.body?.class) {\n document.body.classList.add(config.main.body.class);\n }\n\n // if (config.loader.display) {\n // document.body.classList.add('page-loading')\n // document.body.classList.add('page-loading-enabled')\n // }\n }\n\n private static initHeader(config: IHeader): void {\n LayoutSetup.classes.headerContainer.push(config.width === 'fluid' ? 'container-fluid' : 'container');\n\n if (config.fixed.desktop) {\n document.body.classList.add('header-fixed');\n }\n\n if (config.fixed.tabletAndMobile) {\n document.body.classList.add('header-tablet-and-mobile-fixed');\n }\n }\n\n private static initToolbar(config: IToolbar): void {\n if (!config.display) {\n return;\n }\n\n document.body.classList.add('toolbar-enabled');\n LayoutSetup.classes.toolbarContainer.push(config.width === 'fluid' ? 'container-fluid' : 'container');\n\n if (config.fixed.desktop) {\n document.body.classList.add('toolbar-fixed');\n }\n\n if (config.fixed.tabletAndMobileMode) {\n document.body.classList.add('toolbar-tablet-and-mobile-fixed');\n }\n\n // Height setup\n const type = config.layout;\n const typeOptions = config.layouts[type];\n if (typeOptions) {\n let bodyStyles: string = '';\n if (typeOptions.height) {\n bodyStyles += ` --kt-toolbar-height: ${typeOptions.height};`;\n }\n\n if (typeOptions.heightAndTabletMobileMode) {\n bodyStyles += ` --kt-toolbar-height-tablet-and-mobile: ${typeOptions.heightAndTabletMobileMode};`;\n }\n document.body.style.cssText += bodyStyles;\n }\n }\n\n private static initPageTitle(config: IPageTitle): void {\n if (!config.display) {\n return;\n }\n\n if (config.direction === 'column') {\n this.classes.pageTitle.push('flex-column');\n this.classes.pageTitle.push('align-items-start');\n } else {\n this.classes.pageTitle.push('align-items-center');\n this.classes.pageTitle.push('flex-wrap');\n }\n this.classes.pageTitle.push('me-3');\n\n if (config.responsive) {\n this.classes.pageTitle.push('mb-5');\n this.classes.pageTitle.push('mb-lg-0');\n\n LayoutSetup.attributes.pageTitle.set('data-kt-swapper', true);\n LayoutSetup.attributes.pageTitle.set('data-kt-swapper-mode', 'prepend');\n LayoutSetup.attributes.pageTitle.set(\n 'data-kt-swapper-parent',\n `{ default: '#kt_content_container', '${config.responsiveBreakpoint}': '${config.responsiveTarget}'}`\n );\n }\n }\n\n private static initContent(config: IContent): void {\n LayoutSetup.classes.contentContainer.push(config.width === 'fluid' ? 'container-fluid' : 'container');\n // if (Theme::getOption('layout', 'content/container-class')) {\n // \tTheme::addHtmlClass('content-container', Theme::getOption('layout', 'content/container-class'));\n // }\n }\n\n private static initAside(config: IAside): void {\n // Check if aside is displayed\n if (!config.display) {\n return;\n }\n\n // Enable Aside\n document.body.classList.add('aside-enabled');\n LayoutSetup.classes.aside.push(`aside-${config.theme}`);\n\n // Fixed Aside\n if (config.fixed) {\n document.body.classList.add('aside-fixed');\n }\n\n // Default minimized\n if (config.minimized) {\n document.body.setAttribute('data-kt-aside-minimize', 'on');\n }\n\n // Hoverable on minimize\n if (config.hoverable) {\n LayoutSetup.classes.aside.push('aside-hoverable');\n }\n }\n\n private static initAsideMenu(config: IAside): void {\n // if (Theme::getOption('layout', 'aside/menu') === 'documentation') {\n // \tself::$menu = new Menu( Theme::getOption('menu', 'documentation'), Theme::getPagePath() );\n // } else {\n // \tself::$menu = new Menu( Theme::getOption('menu', 'main'), Theme::getPagePath() );\n // }\n // if (Theme::getOption('layout', 'aside/menu-icons-display') === false) {\n // \tself::$menu->displayIcons(false);\n // }\n // self::$menu->setIconType(Theme::getOption('layout', 'aside/menu-icon'));\n }\n\n // private static initSidebar(sidebarConfig: ISidebarConfig): void {\n // // / Set Sidebar enabled class\n // if (sidebarConfig.display) {\n // document.body.classList.add('sidebar-enabled')\n // } else {\n // return\n // }\n\n // // Set Sidebar shown status\n // if (sidebarConfig.shown) {\n // document.body.setAttribute('data-sidebar', 'on')\n // }\n\n // // Set Sidebar background color class\n // ThemeSetup.classes.sidebar.push(sidebarConfig.bgColor)\n // }\n\n private static initFooter(config: IFooter): void {\n LayoutSetup.classes.footerContainer.push(`container${config.width === 'fluid' ? '-fluid' : ''}`);\n }\n\n private static initConfig(config: ILayout): void {\n if (config.main?.darkSkinEnabled) {\n document.body.classList.add('dark-skin');\n }\n\n // Init layout\n LayoutSetup.initLayout(config);\n if (config.main?.type !== 'default') {\n return;\n }\n\n LayoutSetup.initHeader(config.header);\n LayoutSetup.initPageTitle(config.pageTitle as IPageTitle);\n LayoutSetup.initToolbar(config.toolbar);\n LayoutSetup.initContent(config.content);\n LayoutSetup.initAside(config.aside);\n LayoutSetup.initFooter(config.footer);\n LayoutSetup.initAsideMenu(config.aside);\n }\n\n public static updatePartialConfig(fieldsToUpdate: Partial): ILayout {\n const config = LayoutSetup.config;\n const updatedConfig = { ...config, ...fieldsToUpdate };\n LayoutSetup.initCSSClasses();\n LayoutSetup.initCSSVariables();\n LayoutSetup.initHTMLAttributes();\n LayoutSetup.isLoaded = false;\n LayoutSetup.config = updatedConfig;\n LayoutSetup.initConfig(Object.assign({}, updatedConfig));\n LayoutSetup.isLoaded = true; // remove loading there\n return updatedConfig;\n }\n\n public static setConfig(config: ILayout): void {\n setLayout(config);\n }\n\n public static bootstrap = (() => {\n LayoutSetup.updatePartialConfig(LayoutSetup.config);\n })();\n}\n","import React, { createContext, useContext, useState, useEffect } from 'react';\nimport { DefaultLayoutConfig } from './DefaultLayoutConfig';\nimport { getEmptyCssClasses, getEmptyCSSVariables, getEmptyHTMLAttributes, LayoutSetup } from './LayoutSetup';\nimport { ILayout, ILayoutCSSVariables, ILayoutCSSClasses, ILayoutHTMLAttributes } from './LayoutModels';\n\nexport interface LayoutContextModel {\n config: ILayout;\n classes: ILayoutCSSClasses;\n attributes: ILayoutHTMLAttributes;\n cssVariables: ILayoutCSSVariables;\n setLayout: (config: LayoutSetup) => void;\n}\n\nconst LayoutContext = createContext({\n config: DefaultLayoutConfig,\n classes: getEmptyCssClasses(),\n attributes: getEmptyHTMLAttributes(),\n cssVariables: getEmptyCSSVariables(),\n setLayout: (config: LayoutSetup) => {},\n});\n\nconst enableSplashScreen = () => {\n const splashScreen = document.getElementById('splash-screen');\n if (splashScreen) {\n splashScreen.style.setProperty('display', 'flex');\n }\n};\n\nconst disableSplashScreen = () => {\n const splashScreen = document.getElementById('splash-screen');\n if (splashScreen) {\n splashScreen.style.setProperty('display', 'none');\n }\n};\n\nconst LayoutProvider: React.FC = ({ children }) => {\n const [config, setConfig] = useState(LayoutSetup.config);\n const [classes, setClasses] = useState(LayoutSetup.classes);\n const [attributes, setAttributes] = useState(LayoutSetup.attributes);\n const [cssVariables, setCSSVariables] = useState(LayoutSetup.cssVariables);\n const setLayout = (_themeConfig: Partial) => {\n enableSplashScreen();\n const bodyClasses = Array.from(document.body.classList);\n bodyClasses.forEach((cl) => document.body.classList.remove(cl));\n LayoutSetup.updatePartialConfig(_themeConfig);\n setConfig(Object.assign({}, LayoutSetup.config));\n setClasses(LayoutSetup.classes);\n setAttributes(LayoutSetup.attributes);\n setCSSVariables(LayoutSetup.cssVariables);\n setTimeout(() => {\n disableSplashScreen();\n }, 500);\n };\n const value: LayoutContextModel = {\n config,\n classes,\n attributes,\n cssVariables,\n setLayout,\n };\n\n useEffect(() => {\n disableSplashScreen();\n }, []);\n\n return {children};\n};\n\nexport { LayoutContext, LayoutProvider };\n\nexport function useLayout() {\n return useContext(LayoutContext);\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { FC, createContext, useContext, useEffect, useState } from 'react';\n\nexport interface PageLink {\n title: string;\n path: string;\n isActive: boolean;\n isSeparator?: boolean;\n}\n\nexport interface PageDataContextModel {\n pageTitle?: string;\n setPageTitle: (_title: string) => void;\n pageDescription?: string;\n setPageDescription: (_description: string) => void;\n pageBreadcrumbs?: Array;\n setPageBreadcrumbs: (_breadcrumbs: Array) => void;\n}\n\nconst PageDataContext = createContext({\n setPageTitle: (_title: string) => {},\n setPageBreadcrumbs: (_breadcrumbs: Array) => {},\n setPageDescription: (_description: string) => {},\n});\n\nconst PageDataProvider: React.FC = ({ children }) => {\n const [pageTitle, setPageTitle] = useState('');\n const [pageDescription, setPageDescription] = useState('');\n const [pageBreadcrumbs, setPageBreadcrumbs] = useState>([]);\n const value: PageDataContextModel = {\n pageTitle,\n setPageTitle,\n pageDescription,\n setPageDescription,\n pageBreadcrumbs,\n setPageBreadcrumbs,\n };\n return {children};\n};\n\nfunction usePageData() {\n return useContext(PageDataContext);\n}\n\ntype Props = {\n description?: string;\n breadcrumbs?: Array;\n};\n\nconst PageTitle: FC = ({ children, description, breadcrumbs }) => {\n const { setPageTitle, setPageDescription, setPageBreadcrumbs } = usePageData();\n useEffect(() => {\n if (children) {\n setPageTitle(children.toString());\n }\n return () => {\n setPageTitle('');\n };\n }, [children]);\n\n useEffect(() => {\n if (description) {\n setPageDescription(description);\n }\n return () => {\n setPageDescription('');\n };\n }, [description]);\n\n useEffect(() => {\n if (breadcrumbs) {\n setPageBreadcrumbs(breadcrumbs);\n }\n return () => {\n setPageBreadcrumbs([]);\n };\n }, [breadcrumbs]);\n\n return <>;\n};\n\nconst PageDescription: React.FC = ({ children }) => {\n const { setPageDescription } = usePageData();\n useEffect(() => {\n if (children) {\n setPageDescription(children.toString());\n }\n return () => {\n setPageDescription('');\n };\n }, [children]);\n return <>;\n};\n\nexport { PageDescription, PageTitle, PageDataProvider, usePageData };\n","import React, { FC, createContext, useContext, useState, useEffect, SetStateAction, Dispatch } from 'react';\n\nconst MetronicSplashScreenContext = createContext> | undefined>(undefined);\n\nconst MetronicSplashScreenProvider: FC = ({ children }) => {\n const [count, setCount] = useState(0);\n let visible = count > 0;\n\n useEffect(() => {\n const splashScreen = document.getElementById('splash-screen');\n\n // Show SplashScreen\n if (splashScreen && visible) {\n splashScreen.classList.remove('hidden');\n\n return () => {\n splashScreen.classList.add('hidden');\n };\n }\n\n // Hide SplashScreen\n let timeout: number;\n if (splashScreen && !visible) {\n timeout = window.setTimeout(() => {\n splashScreen.classList.add('hidden');\n }, 3000);\n }\n\n return () => {\n clearTimeout(timeout);\n };\n }, [visible]);\n\n return {children};\n};\n\nconst LayoutSplashScreen: FC<{ visible?: boolean }> = ({ visible = true }) => {\n // Everything are ready - remove splashscreen\n const setCount = useContext(MetronicSplashScreenContext);\n\n useEffect(() => {\n if (!visible) {\n return;\n }\n\n if (setCount) {\n setCount((prev) => {\n return prev + 1;\n });\n }\n\n return () => {\n if (setCount) {\n setCount((prev) => {\n return prev - 1;\n });\n }\n };\n }, [setCount, visible]);\n\n return null;\n};\n\nexport { MetronicSplashScreenProvider, LayoutSplashScreen };\n","export const toAbsoluteUrl = (pathname: string) => process.env.PUBLIC_URL + pathname;\n","export function getCurrentUrl(pathname: string) {\n return pathname.split(/[?#]/)[0];\n}\n\nexport function checkIsActive(pathname: string, url: string) {\n const current = getCurrentUrl(pathname);\n if (!current || !url) {\n return false;\n }\n\n if (current === url) {\n return true;\n }\n\n if (current.indexOf(url) > -1) {\n return true;\n }\n\n return false;\n}\n","import React from 'react';\nimport SVG from 'react-inlinesvg';\nimport { toAbsoluteUrl } from '../AssetHelpers';\ntype Props = {\n className?: string;\n path: string;\n svgClassName?: string;\n};\n\nconst KTSVG: React.FC = ({ className = '', path, svgClassName = 'mh-50px' }) => {\n return (\n \n \n \n );\n};\n\nexport { KTSVG };\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useLocation } from 'react-router';\nimport { checkIsActive, KTSVG } from '../../../helpers';\nimport { useLayout } from '../../core';\n\ntype Props = {\n to: string;\n title: string;\n icon?: string;\n fontIcon?: string;\n hasBullet?: boolean;\n};\n\nconst AsideMenuItemWithSub: React.FC = ({ children, to, title, icon, fontIcon, hasBullet }) => {\n const { pathname } = useLocation();\n const isActive = checkIsActive(pathname, to);\n const { config } = useLayout();\n const { aside } = config;\n\n return (\n
\n \n {hasBullet && (\n \n \n \n )}\n {icon && aside.menuIcon === 'svg' && (\n \n \n \n )}\n {fontIcon && aside.menuIcon === 'font' && }\n {title}\n \n \n
{children}
\n
\n );\n};\n\nexport { AsideMenuItemWithSub };\n","import React from 'react';\nimport clsx from 'clsx';\nimport { Link } from 'react-router-dom';\nimport { useLocation } from 'react-router';\nimport { checkIsActive, KTSVG } from '../../../helpers';\nimport { useLayout } from '../../core';\n\ntype Props = {\n to: string;\n title: string;\n icon?: string;\n fontIcon?: string;\n hasBullet?: boolean;\n};\n\nconst AsideMenuItem: React.FC = ({ children, to, title, icon, fontIcon, hasBullet = false }) => {\n const { pathname } = useLocation();\n const isActive = checkIsActive(pathname, to);\n const { config } = useLayout();\n const { aside } = config;\n\n return (\n
\n \n {hasBullet && (\n \n \n \n )}\n {icon && aside.menuIcon === 'svg' && (\n \n \n \n )}\n {fontIcon && aside.menuIcon === 'font' && }\n {title}\n \n {children}\n
\n );\n};\n\nexport { AsideMenuItem };\n","/* eslint-disable react/jsx-no-target-blank */\nimport React from 'react';\nimport { useIntl } from 'react-intl';\nimport { KTSVG } from '../../../helpers';\nimport { AsideMenuItemWithSub } from './AsideMenuItemWithSub';\nimport { AsideMenuItem } from './AsideMenuItem';\n\nexport function AsideMenuMain() {\n const intl = useIntl();\n\n return (\n <>\n \n \n
\n
\n Crafted\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 Apps\n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
\n \n \n );\n}\n","/* eslint-disable no-useless-escape */\n// DOCS: https://javascript.info/cookie\nexport class CookieComponent {\n /**\n * Returns the cookie with the given name, or undefined if not found\n *\n * @param {string} name - cookie name\n * @returns string | null\n */\n public static get(name: string): string | undefined {\n let matches = document.cookie.match(new RegExp('(?:^|; )' + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + '=([^;]*)'));\n return matches ? decodeURIComponent(matches[1]) : undefined;\n }\n\n /**\n * Please note that a cookie value is encoded,\n * so getCookie uses a built-in decodeURIComponent function to decode it.\n *\n * @param {string} name - cookie name\n * @param {string | number | boolean} value - cookie value\n * @param {any} cookieOptions - cookie options\n * @returns void\n */\n public static set(name: string, value: string | number | boolean, cookieOptions: any): void {\n const options = {\n path: '/',\n // add other defaults here if necessary\n ...cookieOptions,\n };\n\n if (options.expires instanceof Date) {\n options.expires = options.expires.toUTCString();\n }\n\n let updatedCookie = encodeURIComponent(name) + '=' + encodeURIComponent(value);\n\n for (let optionKey in options) {\n updatedCookie += '; ' + optionKey;\n let optionValue = options[optionKey];\n if (optionValue !== true) {\n updatedCookie += '=' + optionValue;\n }\n }\n\n document.cookie = updatedCookie;\n }\n\n /**\n * To delete a cookie, we can call it with a negative expiration date\n *\n * @param {string} name\n */\n public static delete(name: string): void {\n CookieComponent.set(name, '', {\n 'max-age': -1,\n });\n }\n}\n","export class ElementStyleUtil {\n public static set(element: HTMLElement, property: string, value?: any, important?: boolean) {\n if (important) {\n element.style.setProperty(property, value, 'important');\n } else {\n element.style.setProperty(property, value);\n }\n }\n\n public static get(element: HTMLElement, attributeName: string) {\n return element.style.getPropertyValue(attributeName);\n }\n\n public static remove(element: HTMLElement, attibuteName: string) {\n element.style.removeProperty(attibuteName);\n }\n}\n","export class DataUtil {\n static store: Map> = new Map();\n\n public static set(instance: HTMLElement | undefined, key: string, data: any): void {\n if (!instance) {\n return;\n }\n\n const instanceData = DataUtil.store.get(instance);\n if (!instanceData) {\n const newMap = new Map().set(key, data);\n DataUtil.store.set(instance, newMap);\n return;\n }\n\n instanceData.set(key, data);\n }\n\n public static get(instance: HTMLElement, key: string): any | undefined {\n const instanceData = DataUtil.store.get(instance);\n if (!instanceData) {\n return;\n }\n\n return instanceData.get(key);\n }\n\n public static remove(instance: HTMLElement, key: string): void {\n const instanceData = DataUtil.store.get(instance);\n if (!instanceData) {\n return;\n }\n\n instanceData.delete(key);\n }\n\n public static has(instance: HTMLElement, key: string): boolean {\n const instanceData = DataUtil.store.get(instance);\n if (instanceData) {\n return instanceData.has(key);\n }\n\n return false;\n }\n\n public static getAllInstancesByKey(key: string) {\n const result: any[] = [];\n DataUtil.store.forEach((val) => {\n val.forEach((v, k) => {\n if (k === key) {\n result.push(v);\n }\n });\n });\n return result;\n }\n}\n","function getObjectPropertyValueByKey(obj: any, key: string): any | undefined {\n const map = new Map(Object.entries(obj));\n if (obj.hasOwnProperty(key) && map) {\n return map.get(key);\n }\n}\n\n/**\n * Generates unique ID for give prefix.\n * @param {string} prefix Prefix for generated ID\n * @returns {boolean}\n */\nfunction getUniqueIdWithPrefix(prefix: string | undefined): string {\n const result = Math.floor(Math.random() * new Date().getTime()).toString();\n if (!prefix) {\n return result;\n }\n\n return `${prefix}${result}`;\n}\n\n/* eslint-disable no-useless-escape */\nfunction stringSnakeToCamel(str: string): string {\n return str.replace(/(\\-\\w)/g, function (m) {\n return m[1].toUpperCase();\n });\n}\n\nfunction toJSON(value: string | JSON): JSON | undefined {\n if (typeof value !== 'string') {\n return value;\n }\n\n if (!value) {\n return undefined;\n }\n\n // (\"'\" => \"\\\"\");\n const result = value\n .toString()\n .split('')\n .map((el) => (el !== \"'\" ? el : '\"'))\n .join('');\n var jsonStr = result.replace(/(\\w+:)|(\\w+ :)/g, function (matched) {\n return '\"' + matched.substring(0, matched.length - 1) + '\":';\n });\n try {\n return JSON.parse(jsonStr);\n } catch {\n return undefined;\n }\n}\n\nexport { getObjectPropertyValueByKey, getUniqueIdWithPrefix, stringSnakeToCamel, toJSON };\n","import { getUniqueIdWithPrefix } from './_TypesHelpers';\n\nexport class DOMEventHandlerUtil {\n public static store = new Map();\n\n public static on(element: HTMLElement, selector: string, eventName: string, callBack: any): string {\n const eventId = getUniqueIdWithPrefix('DOMEvent');\n DOMEventHandlerUtil.store.set(eventId, (e: Event) => {\n const targets = element.querySelectorAll(selector);\n let target: HTMLElement | null = e.target as HTMLElement;\n while (target && target !== element) {\n for (let i = 0; i < targets.length; i++) {\n if (target === targets[i]) {\n callBack.call(target, e);\n }\n }\n\n if (target.parentElement) {\n target = target.parentElement;\n } else {\n target = null;\n }\n }\n });\n element.addEventListener(eventName, DOMEventHandlerUtil.store.get(eventId));\n return eventId;\n }\n\n public static off(element: HTMLElement, eventName: string, eventId: string): void {\n const funcFromStore = DOMEventHandlerUtil.store.get(eventId);\n if (!funcFromStore) {\n return;\n }\n\n element.removeEventListener(eventName, funcFromStore);\n DOMEventHandlerUtil.store.delete(eventId);\n }\n\n public static one(element: HTMLElement, eventName: string, callBack: Function): void {\n element.addEventListener(eventName, function calee(e) {\n // remove event\n if (e.target && e.target.removeEventListener) {\n e.target.removeEventListener(e.type, calee);\n }\n\n if (element && e && e.currentTarget) {\n // if (element && element.removeEventListener && e && e.currentTarget) {\n e.currentTarget.removeEventListener(e.type, calee);\n }\n\n // call hander\n return callBack(e);\n });\n }\n}\n","import { DOMEventHandlerUtil } from './_DOMEventHandlerUtil';\nimport { ElementStyleUtil } from './_ElementStyleUtil';\nimport { getElementOffset } from './DomHelpers';\n\nexport class ElementAnimateUtil {\n public static animate(from: number, to: number, duration: number, update: Function, complete?: Function) {\n /**\n * TinyAnimate.easings\n * Adapted from jQuery Easing\n */\n const easings = {\n linear: function (t: number, b: number, c: number, d: number) {\n return (c * t) / d + b;\n },\n };\n\n // Create mock done() function if necessary\n if (!complete) {\n complete = function () {};\n }\n\n // Animation loop\n // let canceled = false;\n const change = to - from;\n\n function loop(timestamp: number) {\n var time = (timestamp || +new Date()) - start;\n\n if (time >= 0) {\n update(easings.linear(time, from, change, duration));\n }\n if (time >= 0 && time >= duration) {\n update(to);\n if (complete) {\n complete();\n }\n } else {\n window.requestAnimationFrame(loop);\n }\n }\n\n update(from);\n\n // Start animation loop\n const start = window.performance && window.performance.now ? window.performance.now() : +new Date();\n\n window.requestAnimationFrame(loop);\n }\n\n public static animateClass(element: HTMLElement, animationName: string, callBack?: Function): void {\n const animateClasses = animationName.split(' ');\n animateClasses.forEach((cssClass) => element.classList.add(cssClass));\n DOMEventHandlerUtil.one(element, 'animationend', function () {\n animateClasses.forEach((cssClass) => element.classList.remove(cssClass));\n });\n\n if (callBack) {\n DOMEventHandlerUtil.one(element, 'animationend', callBack);\n }\n }\n\n public static transitionEnd(element: HTMLElement, callBack: Function) {\n DOMEventHandlerUtil.one(element, 'transitionend', callBack);\n }\n\n public static animationEnd(element: HTMLElement, callBack: Function) {\n DOMEventHandlerUtil.one(element, 'animationend', callBack);\n }\n\n public static animationDelay(element: HTMLElement, value: string) {\n ElementStyleUtil.set(element, 'animation-delay', value);\n }\n\n public static animationDuration(element: HTMLElement, value: string) {\n ElementStyleUtil.set(element, 'animation-duration', value);\n }\n\n public static scrollTo(element: HTMLElement | null, offset: number, duration: number = 500) {\n let targetPos = element ? getElementOffset(element).top : 0;\n let scrollPos = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n\n if (offset) {\n scrollPos += offset;\n targetPos = targetPos - offset;\n }\n\n const from = scrollPos;\n const to = targetPos;\n\n ElementAnimateUtil.animate(from, to, duration, function (value: number) {\n document.documentElement.scrollTop = value;\n // document.body.parentNode.scrollTop = value;\n document.body.scrollTop = value;\n }); //, easing, done\n }\n public static scrollTop(offset: number, duration: number) {\n ElementAnimateUtil.scrollTo(null, offset, duration);\n }\n}\n","import { OffsetModel } from './models/OffsetModel';\nimport { ViewPortModel } from './models/ViewPortModel';\nimport { ElementStyleUtil } from './_ElementStyleUtil';\nimport { DataUtil } from './_DataUtil';\nimport { ElementAnimateUtil } from './ElementAnimateUtil';\nimport { getObjectPropertyValueByKey, toJSON } from './_TypesHelpers';\n\nfunction getCSS(el: HTMLElement, styleProp: string) {\n const defaultView = (el.ownerDocument || document).defaultView;\n\n if (!defaultView) {\n return '';\n }\n\n // sanitize property name to css notation\n // (hyphen separated words eg. font-Size)\n styleProp = styleProp.replace(/([A-Z])/g, '-$1').toLowerCase();\n\n return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);\n}\n\nfunction getCSSVariableValue(variableName: string) {\n let hex = getComputedStyle(document.documentElement).getPropertyValue(variableName);\n if (hex && hex.length > 0) {\n hex = hex.trim();\n }\n\n return hex;\n}\n\nfunction getElementActualCss(el: HTMLElement, prop: any, cache: boolean) {\n let css = '';\n\n if (!el.getAttribute('kt-hidden-' + prop) || cache === false) {\n let value;\n\n // the element is hidden so:\n // making the el block so we can meassure its height but still be hidden\n css = el.style.cssText;\n el.style.cssText = 'position: absolute; visibility: hidden; display: block;';\n\n if (prop === 'width') {\n value = el.offsetWidth;\n } else if (prop === 'height') {\n value = el.offsetHeight;\n }\n\n el.style.cssText = css;\n\n // store it in cache\n if (value !== undefined) {\n el.setAttribute('kt-hidden-' + prop, value.toString());\n return parseFloat(value.toString());\n }\n return 0;\n } else {\n // store it in cache\n const attributeValue = el.getAttribute('kt-hidden-' + prop);\n if (attributeValue || attributeValue === '0') {\n return parseFloat(attributeValue);\n }\n }\n}\n\nfunction getElementActualHeight(el: HTMLElement) {\n return getElementActualCss(el, 'height', false);\n}\n\nfunction getElementActualWidth(el: HTMLElement, cache?: boolean) {\n return getElementActualCss(el, 'width', false);\n}\n\nfunction getElementIndex(element: HTMLElement) {\n if (element.parentNode) {\n const c = element.parentNode.children;\n for (let i = 0; i < c.length; i++) {\n if (c[i] === element) return i;\n }\n }\n return -1;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches\nfunction getElementMatches(element: HTMLElement, selector: string) {\n const p = Element.prototype;\n const f = p.matches || p.webkitMatchesSelector;\n\n if (element && element.tagName) {\n return f.call(element, selector);\n } else {\n return false;\n }\n}\n\nfunction getElementOffset(el: HTMLElement): OffsetModel {\n // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n // Support: IE <=11 only\n // Running getBoundingClientRect on a\n // disconnected node in IE throws an error\n if (!el.getClientRects().length) {\n return { top: 0, left: 0 };\n }\n\n // Get document-relative position by adding viewport scroll to viewport-relative gBCR\n const rect = el.getBoundingClientRect();\n const win = el.ownerDocument.defaultView;\n if (win) {\n return {\n top: rect.top + win.pageYOffset,\n left: rect.left + win.pageXOffset,\n };\n }\n\n return rect;\n}\n\nfunction getElementParents(element: Element, selector: string) {\n // Element.matches() polyfill\n if (!Element.prototype.matches) {\n Element.prototype.matches = function (s) {\n const matches = (document || this.ownerDocument).querySelectorAll(s);\n let i = matches.length;\n while (--i >= 0 && matches.item(i) !== this) {}\n return i > -1;\n };\n }\n\n // Set up a parent array\n const parents = [];\n\n let el: Element | null = element;\n\n // Push each parent element to the array\n for (; el && el !== document.body; el = el.parentElement) {\n if (selector) {\n if (el.matches(selector)) {\n parents.push(el);\n }\n continue;\n }\n parents.push(el);\n }\n\n // Return our parent array\n return parents;\n}\n\nfunction getHighestZindex(el: HTMLElement) {\n let bufferNode: Node | null = el as Node;\n let buffer = el;\n while (bufferNode && bufferNode !== document) {\n // Ignore z-index if position is set to a value where z-index is ignored by the browser\n // This makes behavior of this function consistent across browsers\n // WebKit always returns auto if the element is positioned\n const position = buffer.style.getPropertyValue('position');\n if (position === 'absolute' || position === 'relative' || position === 'fixed') {\n // IE returns 0 when zIndex is not specified\n // other browsers return a string\n // we ignore the case of nested elements with an explicit value of 0\n //
\n const value = parseInt(buffer.style.getPropertyValue('z-index'));\n if (!isNaN(value) && value !== 0) {\n return value;\n }\n }\n\n bufferNode = bufferNode.parentNode;\n buffer = bufferNode as HTMLElement;\n }\n return null;\n}\n\nfunction getScrollTop(): number {\n return (document.scrollingElement || document.documentElement).scrollTop;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth\nfunction getViewPort(): ViewPortModel {\n return {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n}\n\nfunction insertAfterElement(el: HTMLElement, referenceNode: HTMLElement) {\n return referenceNode.parentNode?.insertBefore(el, referenceNode.nextSibling);\n}\n\nfunction isElementHasClasses(element: HTMLElement, classesStr: string): boolean {\n const classes = classesStr.split(' ');\n for (let i = 0; i < classes.length; i++) {\n if (!element.classList.contains(classes[i])) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isVisibleElement(element: HTMLElement): boolean {\n return !(element.offsetWidth === 0 && element.offsetHeight === 0);\n}\n\n// Throttle function: Input as function which needs to be throttled and delay is the time interval in milliseconds\nfunction throttle(timer: number | undefined, func: Function, delay?: number) {\n // If setTimeout is already scheduled, no need to do anything\n if (timer) {\n return;\n }\n\n // Schedule a setTimeout after delay seconds\n timer = window.setTimeout(function () {\n func();\n\n // Once setTimeout function execution is finished, timerId = undefined so that in
\n // the next scroll event function execution can be scheduled by the setTimeout\n timer = undefined;\n }, delay);\n}\n\nfunction getElementChildren(element: HTMLElement, selector: string): Array | null {\n if (!element || !element.childNodes) {\n return null;\n }\n\n const result: Array = [];\n for (let i = 0; i < element.childNodes.length; i++) {\n const child = element.childNodes[i];\n // child.nodeType == 1 => Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference\n if (child.nodeType === 1 && getElementMatches(child as HTMLElement, selector)) {\n result.push(child as HTMLElement);\n }\n }\n\n return result;\n}\n\nfunction getElementChild(element: HTMLElement, selector: string): HTMLElement | null {\n const children = getElementChildren(element, selector);\n return children ? children[0] : null;\n}\n\nfunction isMobileDevice(): boolean {\n let test = getViewPort().width < +getBreakpoint('lg') ? true : false;\n\n if (test === false) {\n // For use within normal web clients\n test = navigator.userAgent.match(/iPad/i) != null;\n }\n\n return test;\n}\n\nfunction slide(el: HTMLElement, dir: string, speed: number, callback: any) {\n if (!el || (dir === 'up' && isVisibleElement(el) === false) || (dir === 'down' && isVisibleElement(el) === true)) {\n return;\n }\n\n speed = speed ? speed : 600;\n let calcHeight = getElementActualHeight(el);\n let calcPaddingTop: number = 0;\n let calcPaddingBottom: number = 0;\n\n if (ElementStyleUtil.get(el, 'padding-top') && DataUtil.get(el, 'slide-padding-top') !== true) {\n DataUtil.set(el, 'slide-padding-top', ElementStyleUtil.get(el, 'padding-top'));\n }\n\n if (ElementStyleUtil.get(el, 'padding-bottom') && DataUtil.has(el, 'slide-padding-bottom') !== true) {\n DataUtil.set(el, 'slide-padding-bottom', ElementStyleUtil.get(el, 'padding-bottom'));\n }\n\n if (DataUtil.has(el, 'slide-padding-top')) {\n calcPaddingTop = parseInt(DataUtil.get(el, 'slide-padding-top'));\n }\n\n if (DataUtil.has(el, 'slide-padding-bottom')) {\n calcPaddingBottom = parseInt(DataUtil.get(el, 'slide-padding-bottom'));\n }\n\n if (dir === 'up') {\n // up\n el.style.cssText = 'display: block; overflow: hidden;';\n\n if (calcPaddingTop) {\n ElementAnimateUtil.animate(0, calcPaddingTop, speed, function (value: number) {\n el.style.paddingTop = calcPaddingTop - value + 'px';\n });\n }\n\n if (calcPaddingBottom) {\n ElementAnimateUtil.animate(0, calcPaddingBottom, speed, function (value: number) {\n el.style.paddingBottom = calcPaddingBottom - value + 'px';\n });\n }\n\n ElementAnimateUtil.animate(\n 0,\n calcHeight || 0,\n speed,\n function (value: number) {\n el.style.height = (calcHeight || 0) - value + 'px';\n },\n function () {\n el.style.height = '';\n el.style.display = 'none';\n\n if (typeof callback === 'function') {\n callback();\n }\n }\n );\n } else if (dir === 'down') {\n // down\n el.style.cssText = 'display: block; overflow: hidden;';\n\n if (calcPaddingTop) {\n ElementAnimateUtil.animate(\n 0,\n calcPaddingTop,\n speed,\n function (value: number) {\n //\n el.style.paddingTop = value + 'px';\n },\n function () {\n el.style.paddingTop = '';\n }\n );\n }\n\n if (calcPaddingBottom) {\n ElementAnimateUtil.animate(\n 0,\n calcPaddingBottom,\n speed,\n function (value: number) {\n el.style.paddingBottom = value + 'px';\n },\n function () {\n el.style.paddingBottom = '';\n }\n );\n }\n\n ElementAnimateUtil.animate(\n 0,\n calcHeight || 0,\n speed,\n function (value: number) {\n el.style.height = value + 'px';\n },\n function () {\n el.style.height = '';\n el.style.display = '';\n el.style.overflow = '';\n\n if (typeof callback === 'function') {\n callback();\n }\n }\n );\n }\n}\n\nfunction slideUp(el: HTMLElement, speed: number, callback: any) {\n slide(el, 'up', speed, callback);\n}\n\nfunction slideDown(el: HTMLElement, speed: number, callback: any) {\n slide(el, 'down', speed, callback);\n}\n\nfunction getBreakpoint(breakpoint: string) {\n let value: number | string = getCSSVariableValue('--bs-' + breakpoint);\n if (value) {\n value = parseInt(value.trim());\n }\n\n return value;\n}\n\nfunction getAttributeValueByBreakpoint(incomingAttr: string): string | JSON {\n let value = toJSON(incomingAttr);\n if (typeof value !== 'object') {\n return incomingAttr;\n }\n\n const width = getViewPort().width;\n let resultKey;\n let resultBreakpoint = -1;\n let breakpoint;\n\n for (let key in value) {\n if (key === 'default') {\n breakpoint = 0;\n } else {\n breakpoint = getBreakpoint(key) ? +getBreakpoint(key) : parseInt(key);\n }\n\n if (breakpoint <= width && breakpoint > resultBreakpoint) {\n resultKey = key;\n resultBreakpoint = breakpoint;\n }\n }\n\n return resultKey ? getObjectPropertyValueByKey(value, resultKey) : value;\n}\n\nfunction colorLighten(color: string, amount: number) {\n const addLight = (_color: string, _amount: number) => {\n const cc = parseInt(_color, 16) + _amount;\n const cNum = cc > 255 ? 255 : cc;\n const c = cNum.toString(16).length > 1 ? cNum.toString(16) : `0${cNum.toString(16)}`;\n return c;\n };\n\n color = color.indexOf('#') >= 0 ? color.substring(1, color.length) : color;\n amount = parseInt(((255 * amount) / 100).toString());\n return (color = `#${addLight(color.substring(0, 2), amount)}${addLight(color.substring(2, 4), amount)}${addLight(\n color.substring(4, 6),\n amount\n )}`);\n}\n\nfunction colorDarken(color: string, amount: number) {\n const subtractLight = (_color: string, _amount: number) => {\n const cc = parseInt(color, 16) - amount;\n const cNum = cc < 0 ? 0 : cc;\n const c = cNum.toString(16).length > 1 ? cNum.toString(16) : `0${cNum.toString(16)}`;\n return c;\n };\n\n color = color.indexOf('#') >= 0 ? color.substring(1, color.length) : color;\n amount = parseInt(((255 * amount) / 100).toString());\n\n return (color = `#${subtractLight(color.substring(0, 2), amount)}${subtractLight(color.substring(2, 4), amount)}${subtractLight(\n color.substring(4, 6),\n amount\n )}`);\n}\n\nexport {\n getBreakpoint,\n getCSS,\n getCSSVariableValue,\n getElementActualCss,\n getElementActualHeight,\n getElementActualWidth,\n getElementIndex,\n getElementMatches,\n getElementOffset,\n getElementParents,\n getHighestZindex,\n getScrollTop,\n getViewPort,\n insertAfterElement,\n isElementHasClasses,\n isVisibleElement,\n throttle,\n getElementChildren,\n getElementChild,\n isMobileDevice,\n slide,\n slideUp,\n slideDown,\n getAttributeValueByBreakpoint,\n colorLighten,\n colorDarken,\n};\n","import { DataUtil } from './_DataUtil';\nimport { getUniqueIdWithPrefix } from './_TypesHelpers';\n\nexport interface EventMeta {\n name: string;\n callback: Function;\n one: boolean;\n fired: boolean;\n}\n\nexport class EventHandlerUtil {\n static store: Map> = new Map();\n\n private static setEventMetasByName(name: string, metas: Map): void {\n EventHandlerUtil.store.set(name, metas);\n }\n\n private static getEventMetasByName(name: string): Map | undefined {\n return EventHandlerUtil.store.get(name);\n }\n\n private static setEventMetaByNameAndHandlerId(name: string, handlerId: string, meta: EventMeta): void {\n let metas = EventHandlerUtil.getEventMetasByName(name);\n if (!metas) {\n metas = new Map();\n }\n\n metas.set(handlerId, meta);\n EventHandlerUtil.setEventMetasByName(name, metas);\n }\n\n private static getEventsMetaByHandlerId(name: string, handlerId: string): EventMeta | undefined {\n const metas = EventHandlerUtil.store.get(name);\n if (!metas) {\n return;\n }\n\n return metas.get(handlerId);\n }\n\n private static setFiredByNameAndHandlerId(name: string, handerId: string, fired: boolean): void {\n const meta = EventHandlerUtil.getEventsMetaByHandlerId(name, handerId);\n if (!meta) {\n return;\n }\n\n meta.fired = fired;\n EventHandlerUtil.setEventMetaByNameAndHandlerId(name, handerId, meta);\n }\n\n private static addEvent(element: HTMLElement, name: string, callback: Function, one: boolean = false) {\n const handlerId = getUniqueIdWithPrefix('event');\n DataUtil.set(element, name, handlerId);\n const meta: EventMeta = {\n name: name,\n callback: callback,\n one: one,\n fired: false,\n };\n\n EventHandlerUtil.setEventMetaByNameAndHandlerId(name, handlerId, meta);\n }\n\n private static removeEvent(element: HTMLElement, name: string) {\n const handlerId = DataUtil.get(element, name);\n if (!handlerId) {\n return;\n }\n\n const metas = EventHandlerUtil.getEventMetasByName(name);\n if (!metas) {\n return;\n }\n\n metas.delete(handlerId);\n EventHandlerUtil.setEventMetasByName(name, metas);\n }\n\n public static trigger(element: HTMLElement, name: string, e?: Event) {\n if (DataUtil.has(element, name)) {\n const handlerId = DataUtil.get(element, name);\n if (!handlerId) {\n return undefined;\n }\n\n const handler = EventHandlerUtil.getEventsMetaByHandlerId(name, handlerId);\n if (handler) {\n if (handler.name === name) {\n if (handler.one === true) {\n if (handler.fired === false) {\n EventHandlerUtil.setFiredByNameAndHandlerId(name, handlerId, true);\n return handler.callback.call(this, e);\n }\n } else {\n return handler.callback.call(this, e);\n }\n }\n }\n }\n\n return null;\n }\n\n public static on = function (element: HTMLElement, name: string, callBack: Function): void {\n EventHandlerUtil.addEvent(element, name, callBack, false);\n };\n\n public static one(element: HTMLElement, name: string, callBack: Function): void {\n EventHandlerUtil.addEvent(element, name, callBack, true);\n }\n\n public static off(element: HTMLElement, name: string): void {\n EventHandlerUtil.removeEvent(element, name);\n }\n}\n","import {\n DataUtil,\n EventHandlerUtil,\n getUniqueIdWithPrefix,\n getObjectPropertyValueByKey,\n stringSnakeToCamel,\n getAttributeValueByBreakpoint,\n throttle,\n getCSS,\n DOMEventHandlerUtil,\n ElementStyleUtil,\n} from '../_utils/index';\n\nexport interface DrawerOptions {\n overlay: boolean;\n baseClass: string;\n overlayClass: string;\n direction: string;\n}\n\nconst defaultDrawerOptions: DrawerOptions = {\n overlay: true,\n baseClass: 'drawer',\n overlayClass: 'drawer-overlay',\n direction: 'end',\n};\n\nclass DrawerComponent {\n element: HTMLElement;\n overlayElement: HTMLElement | null = null;\n toggleElement: HTMLElement | null = null;\n options: DrawerOptions;\n instanceUid: string;\n name: string = '';\n shown: boolean = false;\n lastWidth: number = 0;\n closeElement: HTMLElement | null = null;\n\n constructor(_element: HTMLElement, options: DrawerOptions) {\n this.element = _element;\n this.options = Object.assign(defaultDrawerOptions, options);\n this.instanceUid = getUniqueIdWithPrefix('drawer');\n this.overlayElement = null;\n this.name = this.element.getAttribute('data-kt-drawer-name') || '';\n this.shown = false;\n this.toggleElement = null;\n // Event Handlers\n this._handlers();\n // Update Instance\n this._update();\n // Bind Instance\n DataUtil.set(this.element, 'drawer', this);\n }\n\n private _handlers = () => {\n const togglers = this._getOption('toggle') as string;\n const closers = this._getOption('close') as string;\n\n if (togglers !== null && togglers.length > 0) {\n DOMEventHandlerUtil.on(document.body, togglers, 'click', (e: Event) => {\n e.preventDefault();\n this.toggleElement = document.getElementById(togglers);\n this._toggle();\n });\n }\n\n if (closers !== null && closers.length > 0) {\n DOMEventHandlerUtil.on(document.body, closers, 'click', (e: Event) => {\n e.preventDefault();\n this.closeElement = document.getElementById(closers);\n\n this._hide();\n });\n }\n };\n\n private _update = () => {\n const width = String(this._getOption('width'));\n const direction = String(this._getOption('direction'));\n\n // Reset state\n const hasBaseClass = this.element.classList.contains(`${this.options.baseClass}-on`);\n const bodyCanvasAttr = String(document.body.getAttribute(`data-kt-drawer-${this.name}-`));\n\n if (hasBaseClass === true && bodyCanvasAttr === 'on') {\n this.shown = true;\n } else {\n this.shown = false;\n }\n\n // Activate/deactivate\n if (this._getOption('activate') === true) {\n this.element.classList.add(this.options.baseClass);\n this.element.classList.add(`${this.options.baseClass}-${direction}`);\n ElementStyleUtil.set(this.element, 'width', width, true);\n\n this.lastWidth = parseInt(width);\n } else {\n ElementStyleUtil.set(this.element, 'width', '');\n this.element.classList.remove(this.options.baseClass);\n this.element.classList.remove(`${this.options.baseClass}-${direction}`);\n this._hide();\n }\n };\n\n private _getOption = (name: string) => {\n const attr = this.element.getAttribute(`data-kt-drawer-${name}`);\n if (attr) {\n let value = getAttributeValueByBreakpoint(attr);\n if (value !== null && String(value) === 'true') {\n return true;\n } else {\n if (value !== null && String(value) === 'false') {\n return false;\n }\n }\n\n return value;\n } else {\n const optionName = stringSnakeToCamel(name);\n const option = getObjectPropertyValueByKey(this.options, optionName);\n if (option) {\n return getAttributeValueByBreakpoint(option);\n } else {\n return null;\n }\n }\n };\n\n private _toggle = () => {\n if (EventHandlerUtil.trigger(this.element, 'kt.drawer.toggle') === false) {\n return;\n }\n\n if (this.shown) {\n this._hide();\n } else {\n this._show();\n }\n\n EventHandlerUtil.trigger(this.element, 'kt.drawer.toggled');\n };\n\n private _hide = () => {\n if (EventHandlerUtil.trigger(this.element, 'kt.drawer.hide') === false) {\n return;\n }\n\n this.shown = false;\n this._deleteOverlay();\n document.body.removeAttribute(`data-kt-drawer-${this.name}`);\n document.body.removeAttribute(`data-kt-drawer`);\n this.element.classList.remove(`${this.options.baseClass}-on`);\n if (this.toggleElement != null) {\n this.toggleElement.classList.remove('active');\n }\n\n EventHandlerUtil.trigger(this.element, 'kt.drawer.after.hidden');\n };\n\n private _show = () => {\n if (EventHandlerUtil.trigger(this.element, 'kt.drawer.show') === false) {\n return;\n }\n\n this.shown = true;\n this._createOverlay();\n document.body.setAttribute(`data-kt-drawer-${this.name}`, 'on');\n document.body.setAttribute('data-kt-drawer', 'on');\n this.element.classList.add(`${this.options.baseClass}-on`);\n if (this.toggleElement !== null) {\n this.toggleElement.classList.add('active');\n }\n\n EventHandlerUtil.trigger(this.element, 'kt.drawer.shown');\n };\n\n private _createOverlay = () => {\n if (this._getOption('overlay') === true) {\n this.overlayElement = document.createElement('DIV');\n const elementZIndex = getCSS(this.element, 'z-index');\n if (elementZIndex) {\n const overlayZindex = parseInt(elementZIndex) - 1;\n ElementStyleUtil.set(this.overlayElement, 'z-index', overlayZindex); // update\n }\n document.body.append(this.overlayElement);\n const overlayClassOption = this._getOption('overlay-class');\n if (overlayClassOption) {\n this.overlayElement.classList.add(overlayClassOption.toString());\n }\n this.overlayElement.addEventListener('click', (e) => {\n e.preventDefault();\n this._hide();\n });\n }\n };\n\n private _deleteOverlay = () => {\n if (this.overlayElement !== null && this.overlayElement.parentNode) {\n this.overlayElement.parentNode.removeChild(this.overlayElement);\n }\n };\n\n private _getDirection = () => {\n return String(this._getOption('direction')) === 'left' ? 'left' : 'right';\n };\n\n private _getWidth = () => {\n let width = this._getOption('width');\n if (width && width === 'auto') {\n width = getCSS(this.element, 'width');\n }\n\n return width;\n };\n\n ///////////////////////\n // ** Public API ** //\n ///////////////////////\n public toggle = () => {\n this._toggle();\n };\n\n public show = () => {\n this._show();\n };\n\n public hide = () => {\n this._hide();\n };\n\n public isShown = () => {\n return this.shown;\n };\n\n public update = () => {\n this._update();\n };\n\n public goElement = () => {\n return this.element;\n };\n\n // Event API\n public on = (name: string, handler: Function) => {\n return EventHandlerUtil.on(this.element, name, handler);\n };\n\n public one = (name: string, handler: Function) => {\n return EventHandlerUtil.one(this.element, name, handler);\n };\n\n public off = (name: string) => {\n return EventHandlerUtil.off(this.element, name);\n };\n\n public trigger = (name: string, event: Event) => {\n return EventHandlerUtil.trigger(this.element, name, event);\n };\n\n // Static methods\n public static hasInstace = (element: HTMLElement): boolean => {\n return DataUtil.has(element, 'drawer');\n };\n\n public static getInstance = (element: HTMLElement) => {\n return DataUtil.get(element, 'drawer');\n };\n\n public static hideAll = () => {\n const oldInstances = DataUtil.getAllInstancesByKey('drawer');\n oldInstances.forEach((dr) => {\n dr.hide();\n });\n };\n\n public static updateAll = () => {\n const oldInstances = DataUtil.getAllInstancesByKey('drawer');\n oldInstances.forEach((dr) => {\n dr.update();\n });\n };\n\n // Create Instances\n public static createInstances(selector: string): void {\n const elements = document.body.querySelectorAll(selector);\n elements.forEach((element) => {\n const item = element as HTMLElement;\n let drawer = DrawerComponent.getInstance(item);\n if (!drawer) {\n drawer = new DrawerComponent(item, defaultDrawerOptions);\n }\n drawer.hide();\n });\n }\n\n // Dismiss instances\n public static handleDismiss = () => {\n // External drawer toggle handler\n DOMEventHandlerUtil.on(document.body, '[data-kt-drawer-dismiss=\"true\"]', 'click', () => {\n /* @ts-ignore */\n const element = this.closest('[data-kt-drawer=\"true\"]');\n if (element) {\n const drawer = DrawerComponent.getInstance(element);\n if (drawer && drawer.isShown()) {\n drawer.hide();\n }\n }\n });\n };\n\n // Global Initialization\n public static initGlobalHandlers(): void {\n // Window Resize Handling\n window.addEventListener('resize', function () {\n let timer: number | undefined;\n throttle(\n timer,\n () => {\n // Locate and update Drawer instances on window resize\n const elements = document.body.querySelectorAll('[data-kt-drawer=\"true\"]');\n elements.forEach((el) => {\n const item = el as HTMLElement;\n const instance = DrawerComponent.getInstance(item);\n if (instance) {\n instance.update();\n }\n });\n },\n 200\n );\n });\n }\n\n public static bootstrap = () => {\n DrawerComponent.createInstances('[data-kt-drawer=\"true\"]');\n DrawerComponent.initGlobalHandlers();\n DrawerComponent.handleDismiss();\n };\n\n public static reinitialization = () => {\n DrawerComponent.createInstances('[data-kt-drawer=\"true\"]');\n DrawerComponent.hideAll();\n DrawerComponent.updateAll();\n DrawerComponent.handleDismiss();\n };\n}\n\nexport { DrawerComponent, defaultDrawerOptions };\n","import { DataUtil, ElementStyleUtil, EventHandlerUtil, getUniqueIdWithPrefix, getAttributeValueByBreakpoint } from '../_utils/index';\n\nexport interface FeedbackOptions {\n width?: number;\n placement?: string;\n content?: string;\n type?: string;\n}\n\nconst defaultFeedbackOptions: FeedbackOptions = {\n width: 100,\n placement: 'top-center',\n content: '',\n type: 'popup',\n};\n\nclass FeedbackComponent {\n element: HTMLElement;\n options: FeedbackOptions;\n instanceUid: string;\n shown: boolean;\n\n constructor(_element: HTMLElement, options: FeedbackOptions) {\n this.element = _element;\n this.options = Object.assign(defaultFeedbackOptions, options);\n this.instanceUid = getUniqueIdWithPrefix('feedback');\n this.shown = false;\n\n // Event handlers\n this._handlers(); // will add in the show popup\n DataUtil.set(this.element, 'feedback', this);\n }\n\n private _handlers = () => {\n this.element.addEventListener('click', (e: Event) => {\n e.preventDefault();\n this._go();\n });\n };\n\n private _go = () => {};\n\n private showPopup = () => {\n this.element = document.createElement('DIV');\n\n this.element.classList.add('feedback feedback-popup');\n this.element.innerHTML = this.options.content || '';\n\n if (this.options.placement === 'top-center') {\n this.setPopupTopCenterPosition();\n }\n\n document.body.appendChild(this.element);\n this.element.classList.add('feedback-shown');\n this.shown = true;\n };\n\n private setPopupTopCenterPosition = () => {\n const width = getAttributeValueByBreakpoint(this.options.width?.toString() || '0');\n const height = ElementStyleUtil.get(this.element, 'height');\n this.element.classList.add('feedback-top-center');\n ElementStyleUtil.set(this.element, 'width', width);\n ElementStyleUtil.set(this.element, 'left', '50%');\n ElementStyleUtil.set(this.element, 'top', '-' + height);\n };\n\n private hidePopup = () => {\n this.element.remove();\n };\n\n ///////////////////////\n // ** Public API ** //\n ///////////////////////\n public show = () => {\n if (EventHandlerUtil.trigger(this.element, 'kt.feedback.show') === false) {\n return;\n }\n\n if (this.options.type === 'popup') {\n this.showPopup();\n }\n\n EventHandlerUtil.trigger(this.element, 'kt.feedback.shown');\n\n return this;\n };\n\n public hide = () => {\n if (EventHandlerUtil.trigger(this.element, 'kt.feedback.hide') === false) {\n return;\n }\n\n if (this.options.type === 'popup') {\n this.hidePopup();\n }\n\n this.shown = false;\n EventHandlerUtil.trigger(this.element, 'kt.feedback.hidden');\n return this;\n };\n\n public isShown = () => {\n return this.isShown;\n };\n\n public getElement = () => {\n return this.element;\n };\n\n // Event API\n public on = (name: string, handler: Function) => {\n return EventHandlerUtil.on(this.element, name, handler);\n };\n\n public one = (name: string, handler: Function) => {\n return EventHandlerUtil.one(this.element, name, handler);\n };\n\n public off = (name: string) => {\n return EventHandlerUtil.off(this.element, name);\n };\n\n public trigger = (name: string, event: Event) => {\n return EventHandlerUtil.trigger(this.element, name, event);\n };\n\n // Create Instances\n public static createInstances(selector: string) {\n throw new Error('not implemented');\n }\n\n // Static methods\n public static hasInstace(element: HTMLElement) {\n throw new Error('not implemented');\n }\n\n public static getInstance(element: HTMLElement) {\n throw new Error('not implemented');\n }\n\n public static bootstrap(attr: string = '[data-Feedback]') {\n throw new Error('not implemented');\n }\n}\n\nexport { FeedbackComponent, defaultFeedbackOptions };\n","import { EventHandlerUtil, DataUtil, getUniqueIdWithPrefix, getCSS } from '../_utils/index';\n\nexport interface IImageInputOptions {}\n\nexport interface IImageInputQueries {\n componentName: string;\n instanseQuery: string;\n inputQuery: string;\n wrapperQuery: string;\n cancelQuery: string;\n removeQuery: string;\n hiddenQuery: string;\n}\n\nconst defaultImageInputOptions = {};\n\nconst defaultImageInputQueires: IImageInputQueries = {\n componentName: 'image-input',\n instanseQuery: '[data-kt-image-input]',\n inputQuery: 'input[type=\"file\"]',\n wrapperQuery: '.image-input-wrapper',\n cancelQuery: '[data-kt-image-input-action=\"cancel\"]',\n removeQuery: '[data-kt-image-input-action=\"remove\"]',\n hiddenQuery: 'input[type=\"hidden\"]',\n};\n\nclass ImageInputComponent {\n element: HTMLElement;\n inputElement: HTMLInputElement | null;\n wrapperElement: HTMLElement | null;\n cancelElement: HTMLElement | null;\n removeElement: HTMLElement | null;\n hiddenElement: HTMLInputElement | null;\n src: string = '';\n options: IImageInputOptions;\n queries: IImageInputQueries;\n uid: string;\n value: string = '';\n\n constructor(_element: HTMLElement, _options: IImageInputOptions, _queries: IImageInputQueries) {\n // Variables\n this.options = Object.assign(defaultImageInputOptions, _options);\n this.queries = _queries;\n this.uid = getUniqueIdWithPrefix(this.queries.componentName);\n\n // Elements\n this.element = _element;\n this.inputElement = this.element.querySelector(this.queries.inputQuery);\n this.wrapperElement = this.element.querySelector(this.queries.wrapperQuery);\n this.cancelElement = this.element.querySelector(this.queries.cancelQuery);\n this.removeElement = this.element.querySelector(this.queries.removeQuery);\n this.hiddenElement = this.element.querySelector(this.queries.hiddenQuery);\n if (this.wrapperElement) {\n this.src = getCSS(this.wrapperElement, 'backgroundImage');\n }\n\n // Event Handlers\n this.handlers();\n\n DataUtil.set(this.element, this.queries.componentName, this);\n }\n\n private handlers(): void {\n this.element.addEventListener('change', this._change);\n if (this.cancelElement) {\n this.cancelElement.addEventListener('click', this._cancel);\n }\n\n if (this.removeElement) {\n this.removeElement.addEventListener('click', this._cancel);\n }\n }\n\n // Event Handlers\n private _change = (e: Event) => {\n e.preventDefault();\n\n if (this.inputElement !== null && this.inputElement.files && this.inputElement.files[0]) {\n // Fire change event\n if (EventHandlerUtil.trigger(this.element, 'kt.imageinput.change', e) === false) {\n return;\n }\n\n const reader = new FileReader();\n\n reader.onload = (e: ProgressEvent) => {\n if (this.wrapperElement && e.target) {\n this.wrapperElement.style.setProperty('background-image', `url('${e.target.result}')`);\n }\n };\n\n reader.readAsDataURL(this.inputElement.files[0]);\n this.element.classList.add('image-input-changed');\n this.element.classList.remove('image-input-empty');\n\n // Fire removed event\n EventHandlerUtil.trigger(this.element, 'kt.imageinput.changed', e);\n }\n };\n\n private _cancel = (e: Event) => {\n e.preventDefault();\n\n // Fire cancel event\n if (EventHandlerUtil.trigger(this.element, 'kt.imageinput.cancel', e) === false) {\n return;\n }\n\n this.element.classList.remove('image-input-changed');\n this.element.classList.remove('image-input-empty');\n this.element.style.setProperty('background-image', this.src);\n if (this.inputElement) {\n this.inputElement.value = '';\n }\n\n if (this.hiddenElement !== null) {\n this.hiddenElement.value = '0';\n }\n\n // Fire canceled event\n EventHandlerUtil.trigger(this.element, 'kt.imageinput.canceled', e);\n };\n\n private _remove = (e: Event) => {\n e.preventDefault();\n\n // Fire remove event\n if (EventHandlerUtil.trigger(this.element, 'kt.imageinput.remove', e) === false) {\n return;\n }\n\n this.element.classList.remove('image-input-changed');\n this.element.classList.add('image-input-empty');\n if (this.wrapperElement) {\n this.wrapperElement.style.setProperty('background-image', 'none');\n }\n\n if (this.inputElement) {\n this.inputElement.value = '';\n }\n\n if (this.hiddenElement !== null) {\n this.hiddenElement.value = '1';\n }\n\n // Fire removed event\n EventHandlerUtil.trigger(this.element, 'kt.imageinput.removed', e);\n };\n\n ///////////////////////\n // ** Public API ** //\n ///////////////////////\n public getInputElement(): HTMLInputElement | null {\n return this.inputElement;\n }\n\n public getElement(): HTMLElement {\n return this.element;\n }\n\n // Event API\n public on = (name: string, handler: Function) => {\n return EventHandlerUtil.on(this.element, name, handler);\n };\n\n public one = (name: string, handler: Function) => {\n return EventHandlerUtil.one(this.element, name, handler);\n };\n\n public off = (name: string) => {\n return EventHandlerUtil.off(this.element, name);\n };\n\n public trigger = (name: string, event: Event) => {\n return EventHandlerUtil.trigger(this.element, name, event);\n };\n\n // Static methods\n public static getInstance = (el: HTMLElement, componentName: string = defaultImageInputQueires.componentName) => {\n const ImageInput = DataUtil.get(el, componentName);\n if (ImageInput) {\n return ImageInput;\n }\n\n return null;\n };\n\n public static createInstances = (\n selector: string = defaultImageInputQueires.instanseQuery,\n options: IImageInputOptions = defaultImageInputOptions,\n queries: IImageInputQueries = defaultImageInputQueires\n ) => {\n const elements = document.body.querySelectorAll(selector);\n elements.forEach((el) => {\n const item = el as HTMLElement;\n let ImageInput = ImageInputComponent.getInstance(item);\n if (!ImageInput) {\n ImageInput = new ImageInputComponent(item, options, queries);\n }\n });\n };\n\n public static createInsance = (\n selector: string = defaultImageInputQueires.instanseQuery,\n options: IImageInputOptions = defaultImageInputOptions,\n queries: IImageInputQueries = defaultImageInputQueires\n ): ImageInputComponent | undefined => {\n const element = document.body.querySelector(selector);\n if (!element) {\n return;\n }\n const item = element as HTMLElement;\n let ImageInput = ImageInputComponent.getInstance(item);\n if (!ImageInput) {\n ImageInput = new ImageInputComponent(item, options, queries);\n }\n return ImageInput;\n };\n\n public static bootstrap = (selector: string = defaultImageInputQueires.instanseQuery) => {\n ImageInputComponent.createInstances(selector);\n };\n\n public static reinitialization = (selector: string = defaultImageInputQueires.instanseQuery) => {\n ImageInputComponent.createInstances(selector);\n };\n}\nexport { ImageInputComponent, defaultImageInputOptions, defaultImageInputQueires };\n","import {\n DataUtil,\n getObjectPropertyValueByKey,\n stringSnakeToCamel,\n getAttributeValueByBreakpoint,\n getViewPort,\n isVisibleElement,\n throttle,\n getCSS,\n ElementStyleUtil,\n} from '../_utils/index';\nimport { CookieComponent } from './_CookieComponent';\n\nexport interface ScrollOptions {\n saveState?: boolean;\n}\n\nconst defaultScrollOptions: ScrollOptions = {\n saveState: true,\n};\n\nclass ScrollComponent {\n element: HTMLElement;\n options: ScrollOptions;\n id: string;\n\n constructor(_element: HTMLElement, options: ScrollOptions) {\n this.element = _element;\n this.options = Object.assign(defaultScrollOptions, options);\n this.id = this.element.getAttribute('id') || '';\n this.update();\n // this.element.setAttribute('data-kt-scrolltop', 'true')\n DataUtil.set(this.element, 'scroll', this);\n }\n\n private getOption = (name: string) => {\n if (this.element.hasAttribute('data-kt-scroll-' + name) === true) {\n const attr = this.element.getAttribute('data-kt-scroll-' + name) || '';\n let value: string | JSON | boolean = getAttributeValueByBreakpoint(attr);\n if (value !== null && String(value) === 'true') {\n value = true;\n } else if (value !== null && String(value) === 'false') {\n value = false;\n }\n\n return value;\n } else {\n const optionName = stringSnakeToCamel(name);\n const option = getObjectPropertyValueByKey(this.options, optionName);\n if (option) {\n return getAttributeValueByBreakpoint(option);\n } else {\n return null;\n }\n }\n };\n\n private getHeightType = () => {\n if (this.getOption('height')) {\n return 'height';\n }\n if (this.getOption('min-height')) {\n return 'min-height';\n }\n if (this.getOption('max-height')) {\n return 'max-height';\n }\n };\n\n private getAutoHeight = () => {\n let height: number | string = getViewPort().height;\n const dependencies = this.getOption('dependencies');\n const wrappers = this.getOption('wrappers');\n const offset = this.getOption('offset');\n\n // Height dependencies\n if (dependencies !== null) {\n const elements = document.querySelectorAll(dependencies as string);\n if (elements && elements.length > 0) {\n for (let i = 0, len = elements.length; i < len; i++) {\n const element = elements[i] as HTMLElement;\n if (isVisibleElement(element) === false) {\n continue;\n }\n\n height = height - parseInt(getCSS(element, 'height'));\n height = height - parseInt(getCSS(element, 'margin-top'));\n height = height - parseInt(getCSS(element, 'margin-bottom'));\n\n const borderTop = getCSS(element, 'border-top');\n if (borderTop) {\n height = height - parseInt(borderTop);\n }\n\n const borderBottom = getCSS(element, 'border-bottom');\n if (borderBottom) {\n height = height - parseInt(borderBottom);\n }\n }\n }\n }\n\n // Wrappers\n if (wrappers !== null) {\n var elements = document.querySelectorAll(wrappers as string);\n if (elements && elements.length > 0) {\n for (let i = 0, len = elements.length; i < len; i++) {\n const element = elements[i] as HTMLElement;\n\n if (!isVisibleElement(element)) {\n continue;\n }\n\n height = height - parseInt(getCSS(element, 'margin-top'));\n height = height - parseInt(getCSS(element, 'margin-bottom'));\n height = height - parseInt(getCSS(element, 'padding-top'));\n height = height - parseInt(getCSS(element, 'padding-bottom'));\n\n const borderTop = getCSS(element, 'border-top');\n if (borderTop) {\n height = height - parseInt(borderTop);\n }\n\n const borderBottom = getCSS(element, 'border-bottom');\n if (borderBottom) {\n height = height - parseInt(borderBottom);\n }\n }\n }\n }\n\n // Custom offset\n if (offset !== null) {\n height = height - parseInt(offset as string);\n }\n\n height = height - parseInt(getCSS(this.element, 'margin-top'));\n height = height - parseInt(getCSS(this.element, 'margin-bottom'));\n\n const borderTop = getCSS(this.element, 'border-top');\n if (borderTop) {\n height = height - parseInt(borderTop);\n }\n\n const borderBottom = getCSS(this.element, 'border-bottom');\n if (borderBottom) {\n height = height - parseInt(borderBottom);\n }\n\n height = String(height) + 'px';\n\n return height;\n };\n\n private setupHeight = () => {\n let height = this.getHeight();\n let heightType = this.getHeightType() as string;\n\n // Set height\n if (height !== null && height.length > 0) {\n ElementStyleUtil.set(this.element, heightType, height);\n } else {\n ElementStyleUtil.set(this.element, heightType, '');\n }\n };\n\n private setupState = () => {\n if (this.getOption('save-state') === true && this.id) {\n const cookie = CookieComponent.get(this.id + 'st');\n if (cookie) {\n var pos = parseInt(cookie);\n\n if (pos > 0) {\n this.element.scrollTop = pos;\n }\n }\n }\n };\n\n private setupScrollHandler = () => {\n if (this.getOption('save-state') === true && this.id) {\n this.element.addEventListener('scroll', this.scrollHandler);\n } else {\n this.element.removeEventListener('scroll', this.scrollHandler);\n }\n };\n\n private scrollHandler = () => {\n const cookieId = this.id + 'st';\n CookieComponent.set(cookieId, this.element.scrollTop, {});\n };\n\n private destroyScrollHandler = () => {\n this.element.removeEventListener('scroll', this.scrollHandler);\n };\n\n private resetHeight = () => {\n const heghtType = this.getHeightType();\n if (heghtType) {\n ElementStyleUtil.set(this.element, heghtType, '');\n }\n };\n\n ///////////////////////\n // ** Public API ** //\n ///////////////////////\n public update = () => {\n // Activate/deactivate\n if (this.getOption('activate') === true || !this.element.hasAttribute('data-kt-scroll-activate')) {\n this.setupHeight();\n this.setupScrollHandler();\n this.setupState();\n } else {\n this.resetHeight();\n this.destroyScrollHandler();\n }\n };\n\n public getHeight = () => {\n const heightType = this.getHeightType();\n const height = this.getOption(heightType || '');\n if (height instanceof Function) {\n return height.call(height);\n } else if (height !== null && typeof height === 'string' && height.toLowerCase() === 'auto') {\n return this.getAutoHeight();\n } else {\n return height;\n }\n };\n\n public getElement = () => {\n return this.element;\n };\n\n // Static methods\n public static hasInstace(element: HTMLElement) {\n return DataUtil.has(element, 'scroll');\n }\n\n public static getInstance(element: HTMLElement) {\n if (element !== null && ScrollComponent.hasInstace(element)) {\n return DataUtil.get(element, 'scroll');\n }\n }\n\n // Create Instances\n public static createInstances(selector: string) {\n const elements = document.body.querySelectorAll(selector);\n elements.forEach((element: Element) => {\n const item = element as HTMLElement;\n let scroll = ScrollComponent.getInstance(item);\n if (!scroll) {\n scroll = new ScrollComponent(item, defaultScrollOptions);\n }\n });\n }\n\n public static destroyAll(attr: string = '[data-kt-scroll=\"true\"]') {}\n\n public static bootstrap(attr: string = '[data-kt-scroll=\"true\"]') {\n ScrollComponent.createInstances(attr);\n ScrollComponent.resize();\n }\n\n public static createInstance = (element: HTMLElement, options: ScrollOptions = defaultScrollOptions): ScrollComponent | undefined => {\n let scroll = ScrollComponent.getInstance(element);\n if (!scroll) {\n scroll = new ScrollComponent(element, options);\n }\n return scroll;\n };\n\n public static reinitialization(attr: string = '[data-kt-scroll=\"true\"]') {\n ScrollComponent.createInstances(attr);\n }\n\n public static resize() {\n // Window Resize Handling\n window.addEventListener('resize', function () {\n let timer;\n throttle(\n timer,\n () => {\n // Locate and update Drawer instances on window resize\n const elements = document.body.querySelectorAll('[data-kt-scroll=\"true\"]');\n elements.forEach((element: Element) => {\n const instance = ScrollComponent.getInstance(element as HTMLElement);\n if (instance) {\n instance.update();\n }\n });\n },\n 200\n );\n });\n }\n}\n\nexport { ScrollComponent, defaultScrollOptions };\n","import {\n getScrollTop,\n getAttributeValueByBreakpoint,\n throttle,\n getObjectPropertyValueByKey,\n stringSnakeToCamel,\n getUniqueIdWithPrefix,\n DataUtil,\n ElementAnimateUtil,\n} from '../_utils/index';\n\nexport interface IScrollTopOptions {\n offset: number;\n speed: number;\n}\n\nconst defaultScrollTopOptions: IScrollTopOptions = {\n offset: 200,\n speed: 600,\n};\n\nclass ScrollTopComponent {\n element: HTMLElement;\n options: IScrollTopOptions;\n instanceUid: string;\n\n constructor(_element: HTMLElement, options: IScrollTopOptions) {\n this.element = _element;\n this.options = Object.assign(defaultScrollTopOptions, options);\n this.instanceUid = getUniqueIdWithPrefix('scrolltop');\n\n // Event Handlers\n this._handlers();\n\n // Bind Instance\n DataUtil.set(this.element, 'scrolltop', this);\n }\n\n private _handlers = () => {\n let timer: number;\n window.addEventListener('scroll', () => {\n throttle(timer, () => {\n this._scroll();\n });\n });\n\n this.element.addEventListener('click', (e: Event) => {\n e.preventDefault();\n this._go();\n });\n };\n\n private _scroll = () => {\n const offset = parseInt(this._getOption('offset') as string);\n const pos = getScrollTop(); // current vertical position\n if (pos > offset) {\n if (!document.body.hasAttribute('data-kt-scrolltop')) {\n document.body.setAttribute('data-kt-scrolltop', 'on');\n }\n } else {\n if (document.body.hasAttribute('data-kt-scrolltop')) {\n document.body.removeAttribute('data-kt-scrolltop');\n }\n }\n };\n\n private _go = () => {\n const speed = parseInt(this._getOption('speed') as string);\n ElementAnimateUtil.scrollTop(0, speed);\n };\n\n private _getOption = (name: string) => {\n const attr = this.element.getAttribute(`data-kt-scrolltop-${name}`);\n if (attr) {\n const value = getAttributeValueByBreakpoint(attr);\n return value !== null && String(value) === 'true';\n }\n\n const optionName = stringSnakeToCamel(name);\n const option = getObjectPropertyValueByKey(this.options, optionName);\n if (option) {\n return getAttributeValueByBreakpoint(option);\n }\n\n return null;\n };\n\n ///////////////////////\n // ** Public API ** //\n ///////////////////////\n\n // Plugin API\n public go = () => {\n return this._go();\n };\n\n public getElement = () => {\n return this.element;\n };\n\n // Static methods\n public static getInstance = (el: HTMLElement) => {\n const scrollTop = DataUtil.get(el, 'scrolltop');\n if (scrollTop) {\n return scrollTop;\n }\n\n return null;\n };\n\n public static createInstances = (selector: string) => {\n const elements = document.body.querySelectorAll(selector);\n elements.forEach((el) => {\n const item = el as HTMLElement;\n let scrollTop = ScrollTopComponent.getInstance(item);\n if (!scrollTop) {\n scrollTop = new ScrollTopComponent(item, defaultScrollTopOptions);\n }\n });\n };\n\n public static createInsance = (\n selector: string,\n options: IScrollTopOptions = defaultScrollTopOptions\n ): ScrollTopComponent | undefined => {\n const element = document.body.querySelector(selector);\n if (!element) {\n return;\n }\n const item = element as HTMLElement;\n let scrollTop = ScrollTopComponent.getInstance(item);\n if (!scrollTop) {\n scrollTop = new ScrollTopComponent(item, options);\n }\n return scrollTop;\n };\n\n public static bootstrap = () => {\n ScrollTopComponent.createInstances('[data-kt-scrolltop=\"true\"]');\n };\n\n public static reinitialization = () => {\n ScrollTopComponent.createInstances('[data-kt-scrolltop=\"true\"]');\n };\n\n public static goTop = () => {\n ElementAnimateUtil.scrollTop(0, defaultScrollTopOptions.speed);\n };\n}\nexport { ScrollTopComponent, defaultScrollTopOptions };\n","import {\n getElementIndex,\n getUniqueIdWithPrefix,\n ElementAnimateUtil,\n EventHandlerUtil,\n DataUtil,\n DOMEventHandlerUtil,\n ElementStyleUtil,\n} from '../_utils/index';\n\nexport interface IStepperOptions {\n startIndex: number;\n animation: boolean;\n animationSpeed: string;\n animationNextClass: string;\n animationPreviousClass: string;\n}\n\nconst defaultStepperOptions: IStepperOptions = {\n startIndex: 1,\n animation: false,\n animationSpeed: '0.3s',\n animationNextClass: 'animate__animated animate__slideInRight animate__fast',\n animationPreviousClass: 'animate__animated animate__slideInLeft animate__fast',\n};\n\nclass StepperComponent {\n element: HTMLElement;\n options: IStepperOptions;\n instanceUid: string;\n steps: NodeListOf;\n btnNext: HTMLElement | null;\n btnPrev: HTMLElement | null;\n btnSubmit: HTMLElement | null;\n totatStepsNumber: number = 0;\n passedStepIndex: number = 0;\n currentStepIndex: number = 1;\n\n constructor(_element: HTMLElement, options: IStepperOptions) {\n this.element = _element;\n this.options = Object.assign(defaultStepperOptions, options);\n this.instanceUid = getUniqueIdWithPrefix('stepper');\n\n // Elements\n this.steps = this.element.querySelectorAll('[data-kt-stepper-element=\"nav\"]');\n this.btnNext = this.element.querySelector('[data-kt-stepper-action=\"next\"]');\n this.btnPrev = this.element.querySelector('[data-kt-stepper-action=\"previous\"]');\n this.btnSubmit = this.element.querySelector('[data-kt-stepper-action=\"submit\"]');\n\n // Variables\n this.totatStepsNumber = this.steps?.length | 0;\n this.passedStepIndex = 0;\n this.currentStepIndex = 1;\n\n // Set Current Step\n if (this.options.startIndex > 1) {\n this._goTo(this.options.startIndex);\n }\n\n // Event Handlers\n this.initHandlers();\n\n // Bind Instance\n DataUtil.set(this.element, 'stepper', this);\n }\n\n private _goTo = (index: number) => {\n EventHandlerUtil.trigger(this.element, 'kt.stepper.change');\n // Skip if this step is already shown\n if (index === this.currentStepIndex || index > this.totatStepsNumber || index < 0) {\n return;\n }\n\n // Validate step number\n index = parseInt(index.toString());\n // Set current step\n this.passedStepIndex = this.currentStepIndex;\n this.currentStepIndex = index;\n\n // Refresh elements\n this.refreshUI();\n\n EventHandlerUtil.trigger(this.element, 'kt.stepper.changed');\n };\n\n private initHandlers = () => {\n this.btnNext?.addEventListener('click', (e: Event) => {\n e.preventDefault();\n\n EventHandlerUtil.trigger(this.element, 'kt.stepper.next', e);\n });\n\n this.btnPrev?.addEventListener('click', (e: Event) => {\n e.preventDefault();\n\n EventHandlerUtil.trigger(this.element, 'kt.stepper.previous', e);\n });\n\n DOMEventHandlerUtil.on(this.element, '[data-kt-stepper-action=\"step\"]', 'click', (e: Event) => {\n e.preventDefault();\n\n if (this.steps && this.steps.length > 0) {\n for (let i = 0; i < this.steps.length; i++) {\n if ((this.steps[i] as HTMLElement) === this.element) {\n let index = i + 1;\n\n const stepDirection = this._getStepDirection(index);\n EventHandlerUtil.trigger(this.element, `stepper.${stepDirection}`, e);\n return;\n }\n }\n }\n });\n };\n\n private _getStepDirection = (index: number) => {\n return index > this.currentStepIndex ? 'next' : 'previous';\n };\n\n private getStepContent = (index: number) => {\n const content = this.element.querySelectorAll('[data-kt-stepper-element=\"content\"]');\n if (!content) {\n return false;\n }\n\n if (content[index - 1]) {\n return content[index - 1];\n }\n\n return false;\n };\n\n private getLastStepIndex = () => {\n return this.totatStepsNumber;\n };\n\n private getTotalStepsNumber = () => {\n return this.totatStepsNumber;\n };\n\n private refreshUI = () => {\n let state = '';\n\n if (this.isLastStep()) {\n state = 'last';\n } else if (this.isFirstStep()) {\n state = 'first';\n } else {\n state = 'between';\n }\n\n // Set state class\n this.element.classList.remove('last');\n this.element.classList.remove('first');\n this.element.classList.remove('between');\n\n this.element.classList.add(state);\n\n // Step Items\n const elements = this.element.querySelectorAll(\n '[data-kt-stepper-element=\"nav\"], [data-kt-stepper-element=\"content\"], [data-kt-stepper-element=\"info\"]'\n );\n\n if (!elements || elements.length <= 0) {\n return;\n }\n\n for (var i = 0, len = elements.length; i < len; i++) {\n var element = elements[i] as HTMLElement;\n var index = getElementIndex(element) + 1;\n\n element.classList.remove('current');\n element.classList.remove('completed');\n element.classList.remove('pending');\n\n if (index === this.currentStepIndex) {\n element.classList.add('current');\n\n if (this.options.animation !== false && element.getAttribute('data-kt-stepper-element') === 'content') {\n ElementStyleUtil.set(element, 'animationDuration', this.options.animationSpeed);\n\n const animation =\n this._getStepDirection(this.passedStepIndex) === 'previous'\n ? this.options.animationPreviousClass\n : this.options.animationNextClass;\n ElementAnimateUtil.animateClass(element, animation);\n }\n } else {\n if (index < this.currentStepIndex) {\n element.classList.add('completed');\n } else {\n element.classList.add('pending');\n }\n }\n }\n };\n\n private isLastStep = () => {\n return this.currentStepIndex === this.totatStepsNumber;\n };\n\n private isFirstStep = () => {\n return this.currentStepIndex === 1;\n };\n\n private isBetweenStep = () => {\n return this.isLastStep() === false && this.isFirstStep() === false;\n };\n\n // ///////////////////////\n // // ** Public API ** //\n // ///////////////////////\n\n // // Plugin API\n public goto = (index: number) => {\n return this._goTo(index);\n };\n\n public goNext = () => {\n return this.goto(this.getNextStepIndex());\n };\n\n public goPrev = () => {\n return this.goto(this.getPrevStepIndex());\n };\n\n public goFirst = () => {\n return this.goto(1);\n };\n\n public goLast = () => {\n return this.goto(this.getLastStepIndex());\n };\n\n public getCurrentStepIndex = () => {\n return this.currentStepIndex;\n };\n\n public getNextStepIndex = () => {\n if (this.totatStepsNumber >= this.currentStepIndex + 1) {\n return this.currentStepIndex + 1;\n } else {\n return this.totatStepsNumber;\n }\n };\n\n public getPassedStepIndex = () => {\n return this.passedStepIndex;\n };\n\n public getPrevStepIndex = () => {\n if (this.currentStepIndex - 1 > 1) {\n return this.currentStepIndex - 1;\n } else {\n return 1;\n }\n };\n\n public getElement = (index: number) => {\n return this.element;\n };\n\n // Event API\n public on = (name: string, handler: Function) => {\n return EventHandlerUtil.on(this.element, name, handler);\n };\n\n public one = (name: string, handler: Function) => {\n return EventHandlerUtil.one(this.element, name, handler);\n };\n\n public off = (name: string) => {\n return EventHandlerUtil.off(this.element, name);\n };\n\n public destroy = () => {\n console.log('destroy stepper');\n };\n\n public trigger = (name: string, event: Event) => {\n return EventHandlerUtil.trigger(this.element, name, event);\n };\n\n // Static methods\n public static hasInstace(element: HTMLElement): boolean {\n return DataUtil.has(element, 'stepper');\n }\n\n public static getInstance(element: HTMLElement): StepperComponent | null {\n if (element !== null && StepperComponent.hasInstace(element)) {\n return DataUtil.get(element, 'stepper');\n }\n return null;\n }\n\n // Create Instances\n public static createInstances(selector: string): void {\n const elements = document.body.querySelectorAll(selector);\n elements.forEach((element) => {\n const item = element as HTMLElement;\n let stepper = StepperComponent.getInstance(item);\n if (!stepper) {\n stepper = new StepperComponent(item, defaultStepperOptions);\n }\n });\n }\n\n public static createInsance = (element: HTMLElement, options: IStepperOptions = defaultStepperOptions): StepperComponent | null => {\n if (!element) {\n return null;\n }\n let stepper = StepperComponent.getInstance(element);\n if (!stepper) {\n stepper = new StepperComponent(element, options);\n }\n return stepper;\n };\n\n public static bootstrap(attr: string = '[data-kt-stepper]') {\n StepperComponent.createInstances(attr);\n }\n}\n\nexport { StepperComponent, defaultStepperOptions };\n","import {\n getElementOffset,\n getScrollTop,\n getAttributeValueByBreakpoint,\n getUniqueIdWithPrefix,\n getObjectPropertyValueByKey,\n stringSnakeToCamel,\n getCSS,\n DataUtil,\n ElementAnimateUtil,\n ElementStyleUtil,\n EventHandlerUtil,\n} from '../_utils/index';\n\nexport interface StickyOptions {\n offset: number;\n reverse: boolean;\n animation: boolean;\n animationSpeed: string;\n animationClass: string;\n}\n\nconst defaultStickyOptions: StickyOptions = {\n offset: 200,\n reverse: false,\n animation: true,\n animationSpeed: '0.3s',\n animationClass: 'animation-slide-in-down',\n};\n\nclass StickyComponent {\n element: HTMLElement;\n options: StickyOptions;\n instanceUid: string;\n instanceName: string | null = '';\n attributeName: string;\n eventTriggerState: boolean;\n lastScrollTop: number;\n\n constructor(_element: HTMLElement, options: StickyOptions) {\n this.element = _element;\n this.options = Object.assign(defaultStickyOptions, options);\n this.instanceUid = getUniqueIdWithPrefix('sticky');\n this.instanceName = this.element.getAttribute('data-kt-sticky-name');\n this.attributeName = 'data-kt-sticky-' + this.instanceName;\n this.eventTriggerState = true;\n this.lastScrollTop = 0;\n\n // Event Handlers\n window.addEventListener('scroll', this.scroll);\n\n // Initial Launch\n this.scroll();\n\n DataUtil.set(this.element, 'sticky', this);\n }\n\n private scroll = () => {\n let offset = this.getOption('offset');\n let reverse = this.getOption('reverse');\n\n // Exit if false\n if (offset === false) {\n return;\n }\n\n let offsetNum = 0;\n if (typeof offset === 'string') {\n offsetNum = parseInt(offset);\n }\n\n const st = getScrollTop();\n\n // Reverse scroll mode\n if (reverse === true) {\n // Release on reverse scroll mode\n if (st > offsetNum && this.lastScrollTop < st) {\n if (document.body.hasAttribute(this.attributeName) === false) {\n this.enable();\n document.body.setAttribute(this.attributeName, 'on');\n }\n\n if (this.eventTriggerState === true) {\n EventHandlerUtil.trigger(this.element, 'kt.sticky.on');\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change');\n\n this.eventTriggerState = false;\n }\n } else {\n // Back scroll mode\n if (document.body.hasAttribute(this.attributeName)) {\n this.disable();\n document.body.removeAttribute(this.attributeName);\n }\n\n if (this.eventTriggerState === false) {\n EventHandlerUtil.trigger(this.element, 'kt.sticky.off');\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change');\n\n this.eventTriggerState = true;\n }\n }\n\n this.lastScrollTop = st;\n return;\n }\n\n // Classic scroll mode\n if (st > offsetNum) {\n if (document.body.hasAttribute(this.attributeName) === false) {\n this.enable();\n document.body.setAttribute(this.attributeName, 'on');\n }\n\n if (this.eventTriggerState === true) {\n EventHandlerUtil.trigger(this.element, 'kt.sticky.on');\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change');\n this.eventTriggerState = false;\n }\n } else {\n // back scroll mode\n if (document.body.hasAttribute(this.attributeName) === true) {\n this.disable();\n document.body.removeAttribute(this.attributeName);\n }\n\n if (this.eventTriggerState === false) {\n EventHandlerUtil.trigger(this.element, 'kt.sticky.off');\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change');\n this.eventTriggerState = true;\n }\n }\n };\n\n private getOption = (name: string) => {\n const dataStickyAttr = 'data-kt-sticky-' + name;\n if (this.element.hasAttribute(dataStickyAttr) === true) {\n const attrValueInStr = this.element.getAttribute(dataStickyAttr);\n const attrValue = getAttributeValueByBreakpoint(attrValueInStr || '');\n if (attrValue !== null && String(attrValue) === 'true') {\n return true;\n } else if (attrValue !== null && String(attrValue) === 'false') {\n return false;\n }\n\n return attrValue;\n } else {\n const optionName = stringSnakeToCamel(name);\n const option = getObjectPropertyValueByKey(this.options, optionName);\n if (option) {\n return getAttributeValueByBreakpoint(option);\n }\n }\n };\n\n private disable = () => {\n ElementStyleUtil.remove(this.element, 'top');\n ElementStyleUtil.remove(this.element, 'width');\n ElementStyleUtil.remove(this.element, 'left');\n ElementStyleUtil.remove(this.element, 'right');\n ElementStyleUtil.remove(this.element, 'z-index');\n ElementStyleUtil.remove(this.element, 'position');\n };\n\n private enable = (update: boolean = false) => {\n const top = this.getOption('top');\n const left = this.getOption('left');\n // const right = this.getOption(\"right\");\n let width = this.getOption('width');\n const zindex = this.getOption('zindex');\n\n if (update !== true && this.getOption('animation') === true) {\n ElementStyleUtil.set(this.element, 'animationDuration', this.getOption('animationSpeed'));\n ElementAnimateUtil.animateClass(this.element, 'animation ' + this.getOption('animationClass'));\n }\n\n if (zindex !== null) {\n ElementStyleUtil.set(this.element, 'z-index', zindex);\n ElementStyleUtil.set(this.element, 'position', 'fixed');\n }\n\n if (top !== null) {\n ElementStyleUtil.set(this.element, 'top', top);\n }\n\n if (width !== null && width !== undefined) {\n const widthTarget = getObjectPropertyValueByKey(width, 'target');\n if (widthTarget) {\n const targetElement = document.querySelector(widthTarget);\n if (targetElement) {\n width = getCSS(targetElement, 'width');\n }\n }\n ElementStyleUtil.set(this.element, 'width', width);\n }\n\n if (left !== null) {\n if (String(left).toLowerCase() === 'auto') {\n var offsetLeft = getElementOffset(this.element).left;\n\n if (offsetLeft > 0) {\n ElementStyleUtil.set(this.element, 'left', String(offsetLeft) + 'px');\n }\n }\n }\n };\n\n public update = () => {\n if (document.body.hasAttribute(this.attributeName) === true) {\n this.disable();\n document.body.removeAttribute(this.attributeName);\n this.enable(true);\n document.body.setAttribute(this.attributeName, 'on');\n }\n };\n\n // Event API\n public on = (name: string, callBack: Function) => {\n return EventHandlerUtil.on(this.element, name, callBack);\n };\n\n public one = (name: string, callback: Function) => {\n return EventHandlerUtil.one(this.element, name, callback);\n };\n\n public off = (name: string) => {\n return EventHandlerUtil.off(this.element, name);\n };\n\n public trigger = (name: string) => {\n return EventHandlerUtil.trigger(this.element, name);\n };\n\n // Static methods\n public static hasInstace(element: HTMLElement) {\n return DataUtil.has(element, 'sticky');\n }\n\n public static getInstance(element: HTMLElement) {\n if (element !== null && StickyComponent.hasInstace(element)) {\n return DataUtil.get(element, 'sticky');\n }\n }\n\n // Create Instances\n public static createInstances(selector: string) {\n const elements = document.body.querySelectorAll(selector);\n elements.forEach((element) => {\n const item = element as HTMLElement;\n let sticky = StickyComponent.getInstance(item);\n if (!sticky) {\n sticky = new StickyComponent(item, defaultStickyOptions);\n }\n });\n }\n\n public static createInsance = (selector: string, options: StickyOptions = defaultStickyOptions): StickyComponent | undefined => {\n const element = document.body.querySelector(selector);\n if (!element) {\n return;\n }\n const item = element as HTMLElement;\n let sticky = StickyComponent.getInstance(item);\n if (!sticky) {\n sticky = new StickyComponent(item, options);\n }\n return sticky;\n };\n\n public static bootstrap(attr: string = '[data-kt-sticky=\"true\"]') {\n StickyComponent.createInstances(attr);\n }\n\n public static reInitialization(attr: string = '[data-kt-sticky=\"true\"]') {\n StickyComponent.createInstances(attr);\n }\n}\n\nexport { StickyComponent, defaultStickyOptions };\n","import { DataUtil, getUniqueIdWithPrefix, EventHandlerUtil } from '../_utils/index';\n// Helpers\nimport { CookieComponent } from './_CookieComponent';\n\nexport interface ToggleOptions {\n saveState: boolean;\n targetState?: string;\n toggleState?: string;\n targetToggleMode?: string;\n}\n\nconst defaultToggleOptions: ToggleOptions = {\n saveState: false,\n};\n\nclass ToggleComponent {\n element: HTMLElement;\n instanceUid: string;\n options: ToggleOptions;\n state: string = '';\n target: HTMLElement | null = null;\n attribute: string = '';\n\n constructor(_element: HTMLElement, options: ToggleOptions) {\n this.options = Object.assign(defaultToggleOptions, options);\n this.instanceUid = getUniqueIdWithPrefix('toggle');\n this.element = _element;\n\n const elementTargetAttr = this.element.getAttribute('data-kt-toggle-target');\n if (elementTargetAttr) {\n this.target = document.querySelector(elementTargetAttr);\n }\n const elementToggleAttr = this.element.getAttribute('data-kt-toggle-state');\n this.state = elementToggleAttr || '';\n this.attribute = 'data-kt-' + this.element.getAttribute('data-kt-toggle-name');\n\n // Event Handlers\n this._handlers();\n\n // Update Instance\n // Bind Instance\n DataUtil.set(this.element, 'toggle', this);\n }\n\n private _handlers = () => {\n this.element.addEventListener('click', (e: Event) => {\n e.preventDefault();\n this._toggle();\n });\n };\n\n // Event handlers\n private _toggle = () => {\n // Trigger \"after.toggle\" event\n EventHandlerUtil.trigger(this.element, 'kt.toggle.change');\n\n if (this._isEnabled()) {\n this._disable();\n } else {\n this._enable();\n }\n\n // Trigger \"before.toggle\" event\n EventHandlerUtil.trigger(this.element, 'kt.toggle.changed');\n return this;\n };\n\n private _enable = () => {\n if (this._isEnabled()) {\n return;\n }\n\n EventHandlerUtil.trigger(this.element, 'kt.toggle.enable');\n this.target?.setAttribute(this.attribute, 'on');\n if (this.state.length > 0) {\n this.element.classList.add(this.state);\n }\n\n if (this.options.saveState) {\n CookieComponent.set(this.attribute, 'on', {});\n }\n\n EventHandlerUtil.trigger(this.element, 'kt.toggle.enabled');\n return this;\n };\n\n private _disable = () => {\n if (!this._isEnabled()) {\n return false;\n }\n\n EventHandlerUtil.trigger(this.element, 'kt.toggle.disable');\n this.target?.removeAttribute(this.attribute);\n\n if (this.state.length > 0) {\n this.element.classList.remove(this.state);\n }\n\n if (this.options.saveState) {\n CookieComponent.delete(this.attribute);\n }\n\n EventHandlerUtil.trigger(this.element, 'kt.toggle.disabled');\n return this;\n };\n\n private _isEnabled = () => {\n if (!this.target) {\n return false;\n }\n\n return String(this.target.getAttribute(this.attribute)).toLowerCase() === 'on';\n };\n\n ///////////////////////\n // ** Public API ** //\n ///////////////////////\n\n // Plugin API\n // Plugin API\n public toggle = () => {\n return this._toggle();\n };\n\n public enable = () => {\n return this._enable();\n };\n\n public disable = () => {\n return this._disable();\n };\n\n public isEnabled = () => {\n return this._isEnabled();\n };\n\n public goElement = () => {\n return this.element;\n };\n\n // Event API\n public on = (name: string, handler: Function) => {\n return EventHandlerUtil.on(this.element, name, handler);\n };\n\n public one = (name: string, handler: Function) => {\n return EventHandlerUtil.one(this.element, name, handler);\n };\n\n public off = (name: string) => {\n return EventHandlerUtil.off(this.element, name);\n };\n\n public trigger = (name: string, event?: Event) => {\n return EventHandlerUtil.trigger(this.element, name, event);\n };\n\n // Static methods\n public static getInstance = (el: HTMLElement) => {\n const toggleElement = DataUtil.get(el, 'toggle');\n if (toggleElement) {\n return toggleElement;\n }\n\n return null;\n };\n\n public static createInstances = (selector: string) => {\n const elements = document.body.querySelectorAll(selector);\n elements.forEach((el) => {\n const item = el as HTMLElement;\n let toggleElement = ToggleComponent.getInstance(item);\n if (!toggleElement) {\n toggleElement = new ToggleComponent(item, defaultToggleOptions);\n }\n });\n };\n\n public static createInsance = (selector: string, options: ToggleOptions = defaultToggleOptions): ToggleComponent | undefined => {\n const element = document.body.querySelector(selector);\n if (!element) {\n return;\n }\n const item = element as HTMLElement;\n let toggle = ToggleComponent.getInstance(item);\n if (!toggle) {\n toggle = new ToggleComponent(item, options);\n }\n return toggle;\n };\n\n public static reinitialization = () => {\n ToggleComponent.createInstances('[data-kt-toggle]');\n };\n\n public static bootstrap = () => {\n ToggleComponent.createInstances('[data-kt-toggle]');\n };\n}\n\nexport { ToggleComponent, defaultToggleOptions };\n","/* eslint-disable array-callback-return */\n/* eslint-disable no-useless-escape */\nimport { DataUtil } from '../_utils/index';\n\nexport interface IPasswordMeterOptions {\n minLength: number;\n checkUppercase: boolean;\n checkLowercase: boolean;\n checkDigit: boolean;\n checkChar: boolean;\n scoreHighlightClass: string;\n}\n\nexport interface IPasswordMeterQueries {\n componentName: string;\n instanseQuery: string;\n inputQuery: string;\n visibilityQuery: string;\n highlightQuery: string;\n}\n\nconst defaultPasswordMeterOptions = {\n minLength: 8,\n checkUppercase: true,\n checkLowercase: true,\n checkDigit: true,\n checkChar: true,\n scoreHighlightClass: 'active',\n};\n\nconst defaultPasswordMeterQueires: IPasswordMeterQueries = {\n componentName: 'password-meter',\n instanseQuery: '[data-kt-password-meter]',\n inputQuery: 'input[type]',\n visibilityQuery: '[data-kt-password-meter-control=\"visibility\"]',\n highlightQuery: '[data-kt-password-meter-control=\"highlight\"]',\n};\n\nclass PasswordMeterComponent {\n element: HTMLElement;\n inputElement: HTMLInputElement | null;\n visibilityElement: HTMLElement | null;\n highlightElement: HTMLElement | null;\n options: IPasswordMeterOptions;\n queries: IPasswordMeterQueries;\n score: number;\n checkSteps: number;\n\n constructor(_element: HTMLElement, _options: IPasswordMeterOptions, _queries: IPasswordMeterQueries) {\n this.element = _element;\n this.options = Object.assign(defaultPasswordMeterOptions, _options);\n this.queries = _queries;\n this.score = 0;\n this.checkSteps = 5;\n\n // Elements\n this.inputElement = this.element.querySelector(this.queries.inputQuery);\n this.visibilityElement = this.element.querySelector(this.queries.visibilityQuery);\n this.highlightElement = this.element.querySelector(this.queries.highlightQuery);\n\n // Event Handlers\n this.handlers();\n\n DataUtil.set(this.element, this.queries.componentName, this);\n }\n\n private handlers(): void {\n if (this.inputElement) {\n this.inputElement.addEventListener('input', () => {\n this.check();\n });\n }\n\n if (this.visibilityElement) {\n this.visibilityElement.addEventListener('click', () => {\n this.visitbility();\n });\n }\n }\n\n private visitbility() {\n if (this.visibilityElement && this.inputElement) {\n const visibleIcon = this.visibilityElement.querySelector('i:not(.d-none), .svg-icon:not(.d-none)');\n\n const hiddenIcon = this.visibilityElement.querySelector('i.d-none, .svg-icon.d-none');\n\n const typeAttr = this.inputElement.getAttribute('type') || '';\n\n if (typeAttr === 'password') {\n this.inputElement.setAttribute('type', 'text');\n } else {\n this.inputElement.setAttribute('type', 'password');\n }\n\n visibleIcon?.classList.add('d-none');\n hiddenIcon?.classList.remove('d-none');\n\n this.inputElement.focus();\n }\n }\n\n private checkScore(): number {\n return 0;\n }\n\n private checkLength(): boolean {\n if (this.inputElement) {\n return this.inputElement.value.length >= this.options.minLength; // 20 score\n }\n\n return false;\n }\n\n private checkLowerCase(): boolean {\n const val = this.inputElement ? this.inputElement.value : '';\n return /[a-z]/.test(val); // 20 score\n }\n\n private checkUppercase(): boolean {\n const val = this.inputElement ? this.inputElement.value : '';\n return /[A-Z]/.test(val); // 20 score\n }\n\n private checkDigit(): boolean {\n const val = this.inputElement ? this.inputElement.value : '';\n return /[0-9]/.test(val); // 20 score\n }\n\n private checkChar(): boolean {\n const val = this.inputElement ? this.inputElement.value : '';\n return /[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g.test(val); // 20 score\n }\n\n private getCheckScore(): number {\n let count = 1;\n if (this.options.checkUppercase) {\n count++;\n }\n\n if (this.options.checkLowercase) {\n count++;\n }\n\n if (this.options.checkDigit) {\n count++;\n }\n\n if (this.options.checkChar) {\n count++;\n }\n\n this.checkSteps = count;\n return 100 / this.checkSteps;\n }\n\n private highlight() {\n const items = this.highlightElement ? [].slice.call(this.highlightElement.querySelectorAll('div')) : [];\n const total = items.length;\n let index = 0;\n const checkScore = this.getCheckScore();\n const score = this.getScore();\n\n items.map((item: HTMLElement) => {\n index++;\n if (checkScore * index * (this.checkSteps / total) <= score) {\n item.classList.add('active');\n } else {\n item.classList.remove('active');\n }\n });\n }\n\n ///////////////////////\n // ** Public API ** //\n ///////////////////////\n public reset = () => {\n this.score = 0;\n this.highlight();\n };\n\n public getScore() {\n return this.score;\n }\n\n public check() {\n let score = 0;\n const checkScore = this.checkScore();\n if (this.checkLength()) {\n score = score + checkScore;\n }\n\n if (this.options.checkUppercase && this.checkLowerCase()) {\n score = score + checkScore;\n }\n\n if (this.options.checkLowercase && this.checkUppercase()) {\n score = score + checkScore;\n }\n\n if (this.options.checkDigit && this.checkDigit()) {\n score = score + checkScore;\n }\n\n if (this.options.checkChar && this.checkChar()) {\n score = score + checkScore;\n }\n\n this.score = score;\n this.highlight();\n }\n\n // Static methods\n public static getInstance = (el: HTMLElement, componentName: string = defaultPasswordMeterQueires.componentName) => {\n const passwordMeter = DataUtil.get(el, componentName);\n if (passwordMeter) {\n return passwordMeter;\n }\n\n return null;\n };\n\n public static createInstances = (\n selector: string = defaultPasswordMeterQueires.instanseQuery,\n options: IPasswordMeterOptions = defaultPasswordMeterOptions,\n queries: IPasswordMeterQueries = defaultPasswordMeterQueires\n ) => {\n const elements = document.body.querySelectorAll(selector);\n elements.forEach((el) => {\n const item = el as HTMLElement;\n let passwordMeter = PasswordMeterComponent.getInstance(item);\n if (!passwordMeter) {\n passwordMeter = new PasswordMeterComponent(item, options, queries);\n }\n });\n };\n\n public static createInsance = (\n selector: string = defaultPasswordMeterQueires.instanseQuery,\n options: IPasswordMeterOptions = defaultPasswordMeterOptions,\n queries: IPasswordMeterQueries = defaultPasswordMeterQueires\n ): PasswordMeterComponent | undefined => {\n const element = document.body.querySelector(selector);\n if (!element) {\n return;\n }\n const item = element as HTMLElement;\n let passwordMeter = PasswordMeterComponent.getInstance(item);\n if (!passwordMeter) {\n passwordMeter = new PasswordMeterComponent(item, options, queries);\n }\n return passwordMeter;\n };\n\n public static bootstrap = (selector: string = defaultPasswordMeterQueires.instanseQuery) => {\n PasswordMeterComponent.createInstances(selector);\n };\n\n public static reinitialization = (selector: string = defaultPasswordMeterQueires.instanseQuery) => {\n PasswordMeterComponent.createInstances(selector);\n };\n}\nexport { PasswordMeterComponent, defaultPasswordMeterOptions, defaultPasswordMeterQueires };\n","import {\n DataUtil,\n getAttributeValueByBreakpoint,\n stringSnakeToCamel,\n getObjectPropertyValueByKey,\n EventHandlerUtil,\n throttle,\n} from '../_utils/index';\n\nexport interface IPlaceOptions {\n mode: string;\n}\n\nexport interface IPlaceQueries {\n componentName: string;\n instanseQuery: string;\n attrQuery: string;\n}\n\nconst defaultPlaceOptions: IPlaceOptions = {\n mode: 'append',\n};\n\nconst defaultPlaceQueires: IPlaceQueries = {\n componentName: 'place',\n instanseQuery: '[data-kt-place=\"true\"]',\n attrQuery: 'data-kt-place-',\n};\n\nclass PlaceComponent {\n element: HTMLElement;\n options: IPlaceOptions;\n queries: IPlaceQueries;\n\n constructor(_element: HTMLElement, _options: IPlaceOptions, _queries: IPlaceQueries) {\n this.element = _element;\n this.options = Object.assign(defaultPlaceOptions, _options);\n this.queries = _queries;\n\n // Initial update\n this.update();\n\n DataUtil.set(this.element, this.queries.componentName, this);\n }\n\n private getOption(name: string) {\n const attr = this.element.getAttribute(`${this.queries.attrQuery}${name}`);\n if (attr) {\n let value = getAttributeValueByBreakpoint(attr);\n if (attr != null && String(value) === 'true') {\n return true;\n } else if (value !== null && String(value) === 'false') {\n return false;\n }\n return value;\n } else {\n const optionName = stringSnakeToCamel(name);\n const option = getObjectPropertyValueByKey(this.options, optionName);\n if (option) {\n return getAttributeValueByBreakpoint(option);\n } else {\n return null;\n }\n }\n }\n\n ///////////////////////\n // ** Public API ** //\n ///////////////////////\n public update = () => {\n const parentSelector = this.getOption('parent')?.toString();\n const mode = this.getOption('mode');\n const parentElement = parentSelector ? document.querySelector(parentSelector) : null;\n\n if (parentElement && this.element.parentNode !== parentElement) {\n if (mode === 'prepend') {\n parentElement.prepend(this.element);\n } else if (mode === 'append') {\n parentElement.append(this.element);\n }\n }\n };\n\n // Event API\n public on = (name: string, handler: Function) => {\n return EventHandlerUtil.on(this.element, name, handler);\n };\n\n public one = (name: string, handler: Function) => {\n return EventHandlerUtil.one(this.element, name, handler);\n };\n\n public off = (name: string) => {\n return EventHandlerUtil.off(this.element, name);\n };\n\n public trigger = (name: string, event: Event) => {\n return EventHandlerUtil.trigger(this.element, name, event);\n };\n\n // Static methods\n public static getInstance = (el: HTMLElement, componentName: string = defaultPlaceQueires.componentName): PlaceComponent | null => {\n const place = DataUtil.get(el, componentName);\n if (place) {\n return place as PlaceComponent;\n }\n\n return null;\n };\n\n public static createInstances = (\n selector: string = defaultPlaceQueires.instanseQuery,\n options: IPlaceOptions = defaultPlaceOptions,\n queries: IPlaceQueries = defaultPlaceQueires\n ) => {\n const elements = document.body.querySelectorAll(selector);\n elements.forEach((el) => {\n const item = el as HTMLElement;\n let place = PlaceComponent.getInstance(item);\n if (!place) {\n place = new PlaceComponent(item, options, queries);\n }\n });\n };\n\n public static createInsance = (\n selector: string = defaultPlaceQueires.instanseQuery,\n options: IPlaceOptions = defaultPlaceOptions,\n queries: IPlaceQueries = defaultPlaceQueires\n ): PlaceComponent | undefined => {\n const element = document.body.querySelector(selector);\n if (!element) {\n return;\n }\n const item = element as HTMLElement;\n let place = PlaceComponent.getInstance(item);\n if (!place) {\n place = new PlaceComponent(item, options, queries);\n }\n return place;\n };\n\n public static bootstrap = (selector: string = defaultPlaceQueires.instanseQuery) => {\n PlaceComponent.createInstances(selector);\n };\n\n public static reinitialization = (selector: string = defaultPlaceQueires.instanseQuery) => {\n PlaceComponent.createInstances(selector);\n };\n}\n\n// Window resize handler\nwindow.addEventListener('resize', function () {\n let timer;\n\n throttle(\n timer,\n () => {\n // Locate and update Offcanvas instances on window resize\n const elements = document.querySelectorAll(defaultPlaceQueires.instanseQuery);\n elements.forEach((el) => {\n const place = PlaceComponent.getInstance(el as HTMLElement);\n if (place) {\n place.update();\n }\n });\n },\n 200\n );\n});\n\nexport { PlaceComponent, defaultPlaceOptions, defaultPlaceQueires };\n","import { createPopper, VirtualElement } from '@popperjs/core';\nimport {\n getElementChild,\n getElementParents,\n getAttributeValueByBreakpoint,\n getUniqueIdWithPrefix,\n DataUtil,\n ElementStyleUtil,\n EventHandlerUtil,\n insertAfterElement,\n slideUp,\n slideDown,\n DOMEventHandlerUtil,\n throttle,\n getHighestZindex,\n} from '../_utils/index';\n\nexport interface MenuOptions {\n dropdown: {\n hoverTimeout: number;\n zindex: number;\n };\n accordion: {\n slideSpeed: number;\n expand: boolean;\n };\n}\n\nconst defaultMenuOptions: MenuOptions = {\n dropdown: {\n hoverTimeout: 200,\n zindex: 105,\n },\n accordion: {\n slideSpeed: 250,\n expand: false,\n },\n};\n\ntype PopperPlacement =\n | 'right'\n | 'auto'\n | 'auto-start'\n | 'auto-end'\n | 'top'\n | 'bottom'\n | 'left'\n | 'top-start'\n | 'top-end'\n | 'bottom-start'\n | 'bottom-end'\n | 'right-start'\n | 'right-end'\n | 'left-start'\n | 'left-end'\n | undefined;\n\nclass MenuComponent {\n element: HTMLElement;\n options: MenuOptions;\n instanceUid: string;\n triggerElement: HTMLElement | null = null;\n\n constructor(_element: HTMLElement, options: MenuOptions) {\n this.element = _element;\n this.options = Object.assign(defaultMenuOptions, options);\n this.instanceUid = getUniqueIdWithPrefix('menu');\n // this.element.setAttribute('data-kt-menu', 'true')\n this._setTriggerElement();\n this._update();\n DataUtil.set(this.element, 'menu', this);\n return this;\n }\n\n // Set external trigger element\n private _setTriggerElement = () => {\n const target = document.querySelector(`[data-kt-menu-target=\"#${this.element.getAttribute('id')}\"`);\n\n if (target) {\n this.triggerElement = target as HTMLElement;\n } else if (this.element.closest('[data-kt-menu-trigger]')) {\n this.triggerElement = this.element.closest('[data-kt-menu-trigger]') as HTMLElement;\n } else if (this.element.parentNode && getElementChild(this.element.parentNode as HTMLElement, '[data-kt-menu-trigger]')) {\n const child = getElementChild(this.element.parentNode as HTMLElement, '[data-kt-menu-trigger]');\n if (child) {\n this.triggerElement = child;\n }\n }\n\n if (this.triggerElement) {\n DataUtil.set(this.triggerElement, 'menu', this);\n }\n };\n\n // Test if menu has external trigger element\n private _isTriggerElement = (item: HTMLElement) => {\n return this.triggerElement === item;\n };\n\n // Get item option(through html attributes)\n private _getItemOption = (item: HTMLElement, name: string) => {\n let value = null;\n if (item && item.hasAttribute('data-kt-menu-' + name)) {\n const attr = item.getAttribute('data-kt-menu-' + name) || '';\n value = getAttributeValueByBreakpoint(attr);\n if (value !== null && String(value) === 'true') {\n value = true;\n } else if (value !== null && String(value) === 'false') {\n value = false;\n }\n }\n return value;\n };\n\n // Get item element\n private _getItemElement = (_element: HTMLElement) => {\n // Element is the external trigger element\n if (this._isTriggerElement(_element)) {\n return _element;\n }\n\n // Element has item toggler attribute\n if (_element.hasAttribute('data-kt-menu-trigger')) {\n return _element;\n }\n\n // Element has item DOM reference in it's data storage\n const itemElement = DataUtil.get(_element, 'item');\n if (itemElement) {\n return itemElement;\n }\n\n // Item is parent of element\n const item = _element.closest('.menu-item[data-kt-menu-trigger]');\n if (item) {\n return item;\n }\n\n // Element's parent has item DOM reference in it's data storage\n const sub = _element.closest('.menu-sub');\n if (sub) {\n const subItem = DataUtil.get(sub as HTMLElement, 'item');\n if (subItem) {\n return subItem;\n }\n }\n };\n\n // Get item parent element\n private _getItemParentElement = (item: HTMLElement) => {\n const sub = item.closest('.menu-sub');\n if (!sub) {\n return null;\n }\n\n const subItem = DataUtil.get(sub as HTMLElement, 'item');\n if (subItem) {\n return subItem;\n }\n\n const parentItem = sub.closest('.menu-item[data-kt-menu-trigger]');\n if (sub && parentItem) {\n return parentItem;\n }\n\n return null;\n };\n\n // Get item parent elements\n private _getItemParentElements = (item: HTMLElement) => {\n const parents = [];\n let parent;\n let i = 0;\n let buffer = item;\n\n do {\n parent = this._getItemParentElement(buffer);\n if (parent) {\n parents.push(parent);\n buffer = parent;\n }\n\n i++;\n } while (parent !== null && i < 20);\n\n if (this.triggerElement) {\n parents.unshift(this.triggerElement);\n }\n\n return parents;\n };\n\n // Prepare popper config for dropdown(see: https://popper.js.org/docs/v2/)\n private _getDropdownPopperConfig = (item: HTMLElement) => {\n // Placement\n const placementOption = this._getItemOption(item, 'placement');\n let placement: PopperPlacement = 'right';\n if (placementOption) {\n placement = placementOption as PopperPlacement;\n }\n\n // Flip\n const flipValue = this._getItemOption(item, 'flip');\n const flip = flipValue ? flipValue.toString().split(',') : [];\n\n // Offset\n const offsetValue = this._getItemOption(item, 'offset');\n const offset = offsetValue ? offsetValue.toString().split(',') : [];\n\n // Strategy\n const strategy: 'absolute' | 'fixed' | undefined = this._getItemOption(item, 'overflow') === true ? 'absolute' : 'fixed';\n\n return {\n placement: placement,\n strategy: strategy,\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: offset,\n },\n },\n {\n name: 'preventOverflow',\n options: {\n //altBoundary: true,\n //altAxis: true,\n rootBoundary: 'clippingParents',\n },\n },\n {\n name: 'flip',\n options: {\n altBoundary: true,\n fallbackPlacements: flip,\n },\n },\n ],\n };\n };\n\n // Get item child element\n private _getItemChildElement = (item: HTMLElement) => {\n let selector = item;\n\n const subItem = DataUtil.get(item, 'sub');\n if (subItem) {\n selector = subItem;\n }\n\n if (selector) {\n //element = selector.querySelector('.show.menu-item[data-kt-menu-trigger]');\n const element = selector.querySelector('.menu-item[data-kt-menu-trigger]');\n if (element) {\n return element;\n }\n }\n return null;\n };\n\n // Get item child elements\n private _getItemChildElements = (item: HTMLElement) => {\n const children = [];\n let child;\n let i = 0;\n let buffer = item;\n do {\n child = this._getItemChildElement(buffer);\n if (child) {\n children.push(child);\n buffer = child as HTMLElement;\n }\n\n i++;\n } while (child !== null && i < 20);\n\n return children;\n };\n\n // Get item sub element\n private _getItemSubElement = (item: HTMLElement) => {\n if (!item) {\n return null;\n }\n\n if (this._isTriggerElement(item)) {\n return this.element;\n }\n\n if (item.classList.contains('menu-sub')) {\n return item;\n } else if (DataUtil.has(item, 'sub')) {\n return DataUtil.get(item, 'sub');\n } else {\n return getElementChild(item, '.menu-sub');\n }\n };\n\n private _getCss = (el: HTMLElement, styleProp: string) => {\n const defaultView = (el.ownerDocument || document).defaultView;\n if (!defaultView) {\n return '';\n }\n\n // sanitize property name to css notation\n // (hyphen separated words eg. font-Size)\n styleProp = styleProp.replace(/([A-Z])/g, '-$1').toLowerCase();\n\n return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);\n };\n\n // Get item sub type\n private _getItemSubType = (element: HTMLElement) => {\n const sub = this._getItemSubElement(element);\n if (sub && parseInt(this._getCss(sub, 'z-index')) > 0) {\n return 'dropdown';\n } else {\n return 'accordion';\n }\n };\n\n // Test if item's sub is shown\n private _isItemSubShown = (item: HTMLElement) => {\n let sub = this._getItemSubElement(item);\n if (sub) {\n if (this._getItemSubType(item) === 'dropdown') {\n return sub.classList.contains('show') && sub.hasAttribute('data-popper-placement');\n } else {\n return item.classList.contains('show');\n }\n }\n\n return false;\n };\n\n // Test if item dropdown is permanent\n private _isItemDropdownPermanent = (item: HTMLElement) => {\n return this._getItemOption(item, 'permanent') === true;\n };\n\n // Test if item's parent is shown\n private _isItemParentShown = (item: HTMLElement) => {\n return getElementParents(item, '.menu-item.show').length > 0;\n };\n\n // Test of it is item sub element\n private _isItemSubElement = (item: HTMLElement) => {\n return item.classList.contains('menu-sub');\n };\n\n // Test if item has sub\n private _hasItemSub = (item: HTMLElement) => {\n return item.classList.contains('menu-item') && item.hasAttribute('data-kt-menu-trigger');\n };\n\n // Get link element\n private _getItemLinkElement = (item: HTMLElement) => {\n return getElementChild(item, '.menu-link');\n };\n\n // Get toggle element\n private _getItemToggleElement = (item: HTMLElement) => {\n if (this.triggerElement) {\n return this.triggerElement;\n }\n\n return this._getItemLinkElement(item);\n };\n\n // Show item dropdown\n private _showDropdown = (item: HTMLElement) => {\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.show') === false) {\n return;\n }\n\n // Hide all currently shown dropdowns except current one\n MenuComponent.hideDropdowns(item);\n\n // const toggle = this._isTriggerElement(item) ? item : this._getItemLinkElement(item);\n const sub = this._getItemSubElement(item);\n const width = this._getItemOption(item, 'width');\n const height = this._getItemOption(item, 'height');\n\n let zindex = this.options.dropdown.zindex;\n const parentZindex = getHighestZindex(item); // update\n // Apply a new z-index if dropdown's toggle element or it's parent has greater z-index // update\n if (parentZindex !== null && parentZindex >= zindex) {\n zindex = parentZindex + 1;\n }\n\n if (zindex) {\n ElementStyleUtil.set(sub, 'z-index', zindex);\n }\n\n if (width) {\n ElementStyleUtil.set(sub, 'width', width);\n }\n\n if (height) {\n ElementStyleUtil.set(sub, 'height', height);\n }\n\n this.initDropdownPopper(item, sub);\n\n item.classList.add('show');\n item.classList.add('menu-dropdown');\n sub.classList.add('show');\n\n // Append the sub the the root of the menu\n if (this._getItemOption(item, 'overflow') === true) {\n document.body.appendChild(sub);\n DataUtil.set(item, 'sub', sub);\n DataUtil.set(sub, 'item', item);\n DataUtil.set(sub, 'menu', this);\n } else {\n DataUtil.set(sub, 'item', item);\n }\n\n EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.shown');\n };\n\n // Init dropdown popper(new)\n private initDropdownPopper = (item: HTMLElement, sub: HTMLElement) => {\n // Setup popper instance\n let reference;\n const attach = this._getItemOption(item, 'attach') as string;\n\n if (attach) {\n if (attach === 'parent') {\n reference = item.parentNode;\n } else {\n reference = document.querySelector(attach);\n }\n } else {\n reference = item;\n }\n\n if (reference) {\n const popper = createPopper(reference as Element | VirtualElement, sub, this._getDropdownPopperConfig(item));\n DataUtil.set(item, 'popper', popper);\n }\n };\n\n // Hide item dropdown\n private _hideDropdown = (item: HTMLElement) => {\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hide') === false) {\n return;\n }\n\n const sub = this._getItemSubElement(item);\n ElementStyleUtil.set(sub, 'z-index', '');\n ElementStyleUtil.set(sub, 'width', '');\n ElementStyleUtil.set(sub, 'height', '');\n item.classList.remove('show');\n item.classList.remove('menu-dropdown');\n sub.classList.remove('show');\n\n // Append the sub back to it's parent\n if (this._getItemOption(item, 'overflow') === true) {\n if (item.classList.contains('menu-item')) {\n item.appendChild(sub);\n } else {\n insertAfterElement(this.element, item);\n }\n\n DataUtil.remove(item, 'sub');\n DataUtil.remove(sub, 'item');\n DataUtil.remove(sub, 'menu');\n }\n\n if (DataUtil.has(item, 'popper') === true) {\n DataUtil.get(item, 'popper').destroy();\n DataUtil.remove(item, 'popper');\n }\n\n // Destroy popper(new)\n this.destroyDropdownPopper(item);\n EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hidden');\n };\n\n // Destroy dropdown popper(new)\n private destroyDropdownPopper = (item: HTMLElement) => {\n if (DataUtil.has(item, 'popper') === true) {\n DataUtil.get(item, 'popper').destroy();\n DataUtil.remove(item, 'popper');\n }\n\n EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hidden');\n };\n\n private _showAccordion = (item: HTMLElement) => {\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.show') === false) {\n return;\n }\n\n if (this.options.accordion.expand === false) {\n this._hideAccordions(item);\n }\n\n if (DataUtil.has(item, 'popper') === true) {\n this._hideDropdown(item);\n }\n\n item.classList.add('hover'); // updateWW\n item.classList.add('showing');\n\n const subElement = this._getItemSubElement(item);\n if (subElement) {\n const sub = subElement as HTMLElement;\n slideDown(sub, this.options.accordion.slideSpeed, () => {\n item.classList.remove('showing');\n item.classList.add('show');\n sub.classList.add('show');\n EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.shown');\n });\n }\n };\n\n private _hideAccordion = (item: HTMLElement) => {\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.hide') === false) {\n return;\n }\n\n const sub = this._getItemSubElement(item);\n item.classList.add('hiding');\n\n if (sub) {\n slideUp(sub, this.options.accordion.slideSpeed, () => {\n item.classList.remove('hiding');\n item.classList.remove('show');\n sub.classList.remove('show');\n item.classList.remove('hover'); // update\n EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.hidden');\n });\n }\n };\n\n // Hide all shown accordions of item\n private _hideAccordions = (item: HTMLElement) => {\n const itemsToHide = this.element.querySelectorAll('.show[data-kt-menu-trigger]');\n if (itemsToHide && itemsToHide.length > 0) {\n for (var i = 0, len = itemsToHide.length; i < len; i++) {\n const itemToHide = itemsToHide[i] as HTMLElement;\n\n if (\n this._getItemSubType(itemToHide) === 'accordion' &&\n itemToHide !== item &&\n item.contains(itemToHide) === false &&\n itemToHide.contains(item) === false\n ) {\n this._hideAccordion(itemToHide);\n }\n }\n }\n };\n\n // Event Handlers\n // Reset item state classes if item sub type changed\n private _reset = (item: HTMLElement) => {\n if (this._hasItemSub(item) === false) {\n return;\n }\n\n const sub = this._getItemSubElement(item);\n\n // Reset sub state if sub type is changed during the window resize\n if (DataUtil.has(item, 'type') && DataUtil.get(item, 'type') !== this._getItemSubType(item)) {\n // updated\n item.classList.remove('hover');\n item.classList.remove('show');\n item.classList.remove('show');\n if (sub && sub.removeClass) {\n sub.removeClass(sub, 'show');\n }\n } // updated\n };\n\n // TODO: not done\n private _destroy = () => {};\n\n // Update all item state classes if item sub type changed\n private _update = () => {\n const items = this.element.querySelectorAll('.menu-item[data-kt-menu-trigger]');\n items.forEach((el) => this._reset(el as HTMLElement));\n };\n\n // Hide item sub\n private _hide = (item: HTMLElement) => {\n if (!item) {\n return;\n }\n\n if (this._isItemSubShown(item) === false) {\n return;\n }\n\n if (this._getItemSubType(item) === 'dropdown') {\n this._hideDropdown(item);\n } else if (this._getItemSubType(item) === 'accordion') {\n this._hideAccordion(item);\n }\n };\n\n // Show item sub\n private _show = (item: HTMLElement) => {\n if (!item) {\n return;\n }\n\n if (this._isItemSubShown(item) === true) {\n return;\n }\n\n if (this._getItemSubType(item) === 'dropdown') {\n this._showDropdown(item); // // show current dropdown\n } else if (this._getItemSubType(item) === 'accordion') {\n this._showAccordion(item);\n }\n\n // Remember last submenu type\n\n DataUtil.set(item, 'type', this._getItemSubType(item)); // updated\n };\n\n // Toggle item sub\n private _toggle = (item: HTMLElement) => {\n if (!item) {\n return;\n }\n\n if (this._isItemSubShown(item) === true) {\n this._hide(item);\n } else {\n this._show(item);\n }\n };\n\n // Mouseout handle\n private _mouseout = (element: HTMLElement, e: MouseEvent) => {\n const item = this._getItemElement(element);\n if (!item) {\n return;\n }\n\n if (this._getItemOption(item, 'trigger') !== 'hover') {\n return;\n }\n\n const timeout = setTimeout(() => {\n if (DataUtil.get(item, 'hover') === '1') {\n this._hide(item);\n }\n }, this.options.dropdown.hoverTimeout);\n\n DataUtil.set(item, 'hover', '1');\n DataUtil.set(item, 'timeout', timeout);\n };\n\n // Mouseover handle\n private _mouseover = (element: HTMLElement, e: MouseEvent) => {\n const item = this._getItemElement(element);\n if (!item) {\n return;\n }\n\n if (this._getItemOption(item, 'trigger') !== 'hover') {\n return;\n }\n\n if (DataUtil.get(item, 'hover') === '1') {\n clearTimeout(DataUtil.get(item, 'timeout'));\n DataUtil.remove(item, 'hover');\n DataUtil.remove(item, 'timeout');\n }\n\n this._show(item);\n };\n\n // Dismiss handler\n private _dismiss = (element: HTMLElement, e: Event) => {\n const item = this._getItemElement(element);\n const items = this._getItemChildElements(item);\n //if ( item !== null && _getItemOption(item, 'trigger') === 'click' && _getItemSubType(item) === 'dropdown' ) {\n const itemSubType = this._getItemSubType(item);\n if (item !== null && itemSubType === 'dropdown') {\n this._hide(item); // hide items dropdown\n\n // Hide all child elements as well\n if (items.length > 0) {\n for (let i = 0, len = items.length; i < len; i++) {\n //if ( _getItemOption(item, 'trigger') === 'click' && _getItemSubType(item) === 'dropdown' ) {\n if (items[i] !== null && this._getItemSubType(items[i] as HTMLElement) === 'dropdown') {\n this._hide(items[i] as HTMLElement);\n }\n }\n }\n }\n };\n\n // Link handler\n private _link = (element: HTMLElement, e: Event) => {\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.link.click') === false) {\n return;\n }\n\n // Dismiss all shown dropdowns\n MenuComponent.hideDropdowns(undefined);\n EventHandlerUtil.trigger(this.element, 'kt.menu.link.clicked');\n };\n\n private _click = (element: HTMLElement, e: Event) => {\n e.preventDefault();\n const item = this._getItemElement(element);\n if (this._getItemOption(item, 'trigger') !== 'click') {\n return;\n }\n\n if (this._getItemOption(item, 'toggle') === false) {\n this._show(item);\n } else {\n this._toggle(item);\n }\n };\n\n ///////////////////////\n // ** Public API ** //\n ///////////////////////\n public click = (element: HTMLElement, e: Event) => {\n return this._click(element, e);\n };\n\n public link = (element: HTMLElement, e: Event) => {\n return this._link(element, e);\n };\n\n public dismiss = (element: HTMLElement, e: Event) => {\n return this._dismiss(element, e);\n };\n\n public mouseover = (element: HTMLElement, e: Event) => {\n return this._mouseover(element, e as MouseEvent);\n };\n\n public mouseout = (element: HTMLElement, e: Event) => {\n return this._mouseout(element, e as MouseEvent);\n };\n\n // General Methods\n public getItemTriggerType = (item: HTMLElement) => {\n return this._getItemOption(item, 'trigger');\n };\n\n public getItemSubType = (element: HTMLElement) => {\n return this._getItemSubType(element);\n };\n\n public show = (item: HTMLElement) => {\n return this._show(item);\n };\n\n public hide = (item: HTMLElement) => {\n return this._hide(item);\n };\n\n public reset = (item: HTMLElement) => {\n return this._reset(item);\n };\n\n public update = () => {\n return this._update();\n };\n\n public getElement = () => {\n return this.element;\n };\n\n public getItemLinkElement = (item: HTMLElement) => {\n return this._getItemLinkElement(item);\n };\n\n public getItemToggleElement = (item: HTMLElement) => {\n return this._getItemToggleElement(item);\n };\n\n public getItemSubElement = (item: HTMLElement) => {\n return this._getItemSubElement(item);\n };\n\n public getItemParentElements = (item: HTMLElement) => {\n return this._getItemParentElements(item);\n };\n\n public isItemSubShown = (item: HTMLElement) => {\n return this._isItemSubShown(item);\n };\n\n public isItemParentShown = (item: HTMLElement) => {\n return this._isItemParentShown(item);\n };\n\n public getTriggerElement = () => {\n return this.triggerElement;\n };\n\n public isItemDropdownPermanent = (item: HTMLElement) => {\n return this._isItemDropdownPermanent(item);\n };\n\n // Accordion Mode Methods\n public hideAccordions = (item: HTMLElement) => {\n return this._hideAccordions(item);\n };\n\n // Event API\n public on = (name: string, handler: any) => {\n return EventHandlerUtil.on(this.element, name, handler);\n };\n\n public one = (name: string, handler: any) => {\n return EventHandlerUtil.one(this.element, name, handler);\n };\n\n public off = (name: string) => {\n return EventHandlerUtil.off(this.element, name);\n };\n\n // public static methods\n // Get KTMenu instance by element\n public static getInstance = (element: HTMLElement) => {\n // Element has menu DOM reference in it's DATA storage\n const elementMenu = DataUtil.get(element, 'menu');\n if (elementMenu) {\n return elementMenu;\n }\n\n // Element has .menu parent\n const menu = element.closest('.menu');\n if (menu) {\n const menuData = DataUtil.get(menu as HTMLElement, 'menu');\n if (menuData) {\n return menuData;\n }\n }\n\n // Element has a parent with DOM reference to .menu in it's DATA storage\n if (element.classList.contains('menu-link')) {\n const sub = element.closest('.menu-sub');\n if (sub) {\n const subMenu = DataUtil.get(sub as HTMLElement, 'menu');\n if (subMenu) {\n return subMenu;\n }\n }\n }\n\n return null;\n };\n\n // Hide all dropdowns and skip one if provided\n public static hideDropdowns = (skip: HTMLElement | undefined) => {\n const items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]');\n\n if (items && items.length > 0) {\n for (let i = 0, len = items.length; i < len; i++) {\n const item = items[i];\n const menu = MenuComponent.getInstance(item as HTMLElement);\n\n if (menu && menu.getItemSubType(item) === 'dropdown') {\n if (skip) {\n if (menu.getItemSubElement(item).contains(skip) === false && item.contains(skip) === false && item !== skip) {\n menu.hide(item);\n }\n } else {\n menu.hide(item);\n }\n }\n }\n }\n };\n\n public static updateDropdowns = () => {\n const items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]');\n if (items && items.length > 0) {\n for (var i = 0, len = items.length; i < len; i++) {\n var item = items[i];\n\n if (DataUtil.has(item as HTMLElement, 'popper')) {\n DataUtil.get(item as HTMLElement, 'popper').forceUpdate();\n }\n }\n }\n };\n\n // Global handlers\n public static createInstances = (selector: string) => {\n // Initialize menus\n document.querySelectorAll(selector).forEach((el) => {\n const menuItem = el as HTMLElement;\n let menuInstance = MenuComponent.getInstance(menuItem);\n if (!menuInstance) {\n menuInstance = new MenuComponent(el as HTMLElement, defaultMenuOptions);\n }\n });\n };\n\n public static initGlobalHandlers = () => {\n // Dropdown handler\n document.addEventListener('click', (e) => {\n const menuItems = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]');\n if (menuItems && menuItems.length > 0) {\n for (let i = 0; i < menuItems.length; i++) {\n const item = menuItems[i] as HTMLElement;\n const menuObj = MenuComponent.getInstance(item) as MenuComponent;\n if (menuObj && menuObj.getItemSubType(item) === 'dropdown') {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const menu = menuObj.getElement();\n const sub = menuObj.getItemSubElement(item) as HTMLElement;\n if (item === e.target || item.contains(e.target as HTMLElement)) {\n continue;\n }\n\n if (sub && (sub === e.target || sub.contains(e.target as HTMLElement))) {\n continue;\n }\n menuObj.hide(item);\n }\n }\n }\n });\n\n // Sub toggle handler\n DOMEventHandlerUtil.on(\n document.body,\n '.menu-item[data-kt-menu-trigger] > .menu-link, [data-kt-menu-trigger]:not(.menu-item):not([data-kt-menu-trigger=\"auto\"])',\n 'click',\n function (this: HTMLElement, e: Event) {\n const menu = MenuComponent.getInstance(this) as MenuComponent;\n if (menu) {\n return menu.click(this, e);\n }\n }\n );\n\n // // Link handler\n DOMEventHandlerUtil.on(\n document.body,\n '.menu-item:not([data-kt-menu-trigger]) > .menu-link',\n 'click',\n function (this: HTMLElement, e: Event) {\n e.stopPropagation();\n const menu = MenuComponent.getInstance(this);\n if (menu && menu.link) {\n return menu.link(this, e);\n }\n }\n );\n\n // Dismiss handler\n DOMEventHandlerUtil.on(document.body, '[data-kt-menu-dismiss=\"true\"]', 'click', function (this: HTMLElement, e: Event) {\n const menu = MenuComponent.getInstance(this) as MenuComponent;\n if (menu) {\n return menu.dismiss(this, e);\n }\n });\n\n // Mouseover handler\n DOMEventHandlerUtil.on(document.body, '[data-kt-menu-trigger], .menu-sub', 'mouseover', function (this: HTMLElement, e: Event) {\n const menu = MenuComponent.getInstance(this) as MenuComponent;\n if (menu && menu.getItemSubType(this) === 'dropdown') {\n return menu.mouseover(this, e);\n }\n });\n\n // Mouseout handler\n DOMEventHandlerUtil.on(document.body, '[data-kt-menu-trigger], .menu-sub', 'mouseout', function (this: HTMLElement, e: Event) {\n const menu = MenuComponent.getInstance(this) as MenuComponent;\n if (menu && menu.getItemSubType(this) === 'dropdown') {\n return menu.mouseout(this, e);\n }\n });\n\n // Resize handler\n window.addEventListener('resize', () => {\n let timer;\n throttle(\n timer,\n () => {\n // Locate and update Drawer instances on window resize\n const elements = document.querySelectorAll('[data-kt-menu=\"true\"]');\n elements.forEach((el) => {\n const menu = MenuComponent.getInstance(el as HTMLElement);\n if (menu) {\n menu.update();\n }\n });\n },\n 200\n );\n });\n };\n\n public static bootstrap = () => {\n MenuComponent.initGlobalHandlers();\n MenuComponent.createInstances('[data-kt-menu=\"true\"]');\n };\n\n public static reinitialization = () => {\n MenuComponent.createInstances('[data-kt-menu=\"true\"]');\n };\n\n public static createInsance = (selector: string, options: MenuOptions = defaultMenuOptions): MenuComponent | undefined => {\n const element = document.body.querySelector(selector);\n if (!element) {\n return;\n }\n const item = element as HTMLElement;\n let menu = MenuComponent.getInstance(item);\n if (!menu) {\n menu = new MenuComponent(item, options);\n }\n return menu;\n };\n}\n\nexport { MenuComponent, defaultMenuOptions };\n","import {\n EventHandlerUtil,\n DataUtil,\n getBreakpoint,\n getAttributeValueByBreakpoint,\n stringSnakeToCamel,\n getObjectPropertyValueByKey,\n getViewPort,\n isVisibleElement,\n throttle,\n} from '../_utils/index';\n\nimport { MenuComponent, defaultMenuOptions } from './MenuComponent';\n\nexport interface ISearchOptions {\n minLength: number; // Miniam text lenght to query search\n keypress: boolean; // Enable search on keypress\n enter: boolean; // Enable search on enter key press\n layout: 'menu' | 'inline'; // Use 'menu' or 'inline' layout options to display search results\n responsive?: number; // Pass integer value or bootstrap compatible breakpoint key(sm,md,lg,xl,xxl) to enable reponsive form mode for device width below the breakpoint value\n showOnFocus: boolean; // Always show menu on input focus\n}\n\nexport interface ISearchQueries {\n componentName: string;\n instanseQuery: string;\n attrQuery: string;\n}\n\nconst defaultSearchOptions: ISearchOptions = {\n minLength: 2, // Miniam text lenght to query search\n keypress: true, // Enable search on keypress\n enter: true, // Enable search on enter key press\n layout: 'menu', // Use 'menu' or 'inline' layout options to display search results\n showOnFocus: true, // Always show menu on input focus\n};\n\nconst defaultSearchQueires: ISearchQueries = {\n componentName: 'search',\n instanseQuery: '[data-kt-search]',\n attrQuery: 'data-kt-search-',\n};\n\nclass SearchComponent {\n element: HTMLElement;\n contentElement: HTMLElement;\n formElement: HTMLFormElement;\n inputElement: HTMLInputElement;\n spinnerElement: HTMLElement;\n clearElement: HTMLElement;\n toggleElement: HTMLElement;\n submitElement: HTMLElement;\n toolbarElement: HTMLElement;\n resultsElement: HTMLElement;\n suggestionElement: HTMLElement;\n emptyElement: HTMLElement;\n layout: any;\n\n options: ISearchOptions;\n queries: ISearchQueries;\n\n processing: boolean = false;\n menuObject: MenuComponent | undefined;\n\n constructor(_element: HTMLElement, _options: ISearchOptions, _queries: ISearchQueries) {\n // Variables\n this.options = Object.assign(defaultSearchOptions, _options);\n this.queries = _queries;\n\n // Elements\n this.element = _element;\n this.contentElement = this._getElement('content') as HTMLElement;\n this.formElement = this._getElement('form') as HTMLFormElement;\n this.inputElement = this._getElement('input') as HTMLInputElement;\n this.spinnerElement = this._getElement('spinner') as HTMLElement;\n this.clearElement = this._getElement('clear') as HTMLElement;\n this.toggleElement = this._getElement('toggle') as HTMLElement;\n this.submitElement = this._getElement('submit') as HTMLElement;\n this.toolbarElement = this._getElement('toolbar') as HTMLElement;\n\n this.resultsElement = this._getElement('results') as HTMLElement;\n this.suggestionElement = this._getElement('suggestion') as HTMLElement;\n this.emptyElement = this._getElement('empty') as HTMLElement;\n\n // Layout\n this.layout = this.getOption('layout');\n if (this.layout === 'menu') {\n this.menuObject = new MenuComponent(this.contentElement, defaultMenuOptions);\n }\n\n // Update\n this.update();\n\n // Event Handlers\n this.handlers();\n\n DataUtil.set(this.element, this.queries.componentName, this);\n }\n\n private _getElement = (name: string) => {\n return this.element.querySelector('[data-kt-search-element=\"' + name + '\"]');\n };\n\n // Get option\n private getOption = (name: string) => {\n const attr = this.element.getAttribute(`${this.queries.attrQuery}${name}`);\n if (attr) {\n let value = getAttributeValueByBreakpoint(attr);\n\n if (value !== null && String(value) === 'true') {\n return true;\n } else if (value !== null && String(value) === 'false') {\n return false;\n }\n\n return value;\n } else {\n const optionName = stringSnakeToCamel(name);\n\n const option = getObjectPropertyValueByKey(this.options, optionName);\n if (option) {\n return getAttributeValueByBreakpoint(option);\n } else {\n return null;\n }\n }\n };\n\n // Check if responsive form mode is enabled\n private getResponsiveFormMode = () => {\n const responsive = this.getOption('responsive') as string;\n const width = getViewPort().width;\n\n if (!responsive) {\n return null;\n }\n\n const breakpoint = getBreakpoint(responsive);\n let breakPointNum = -1;\n if (!breakpoint) {\n breakPointNum = parseInt(responsive);\n } else {\n breakPointNum = +breakpoint;\n }\n\n if (width < breakPointNum) {\n return 'on';\n } else {\n return 'off';\n }\n };\n\n // Focus\n private focus = () => {\n this.element.classList.add('focus');\n\n if (this.getOption('show-on-focus') === true || this.inputElement.value.length >= this.options.minLength) {\n this.show();\n }\n };\n\n // Blur\n private blur = () => {\n this.element.classList.remove('focus');\n };\n\n // Enter\n private enter = (e: KeyboardEvent) => {\n const key = e.charCode || e.keyCode || 0;\n\n if (key === 13) {\n e.preventDefault();\n\n this.search();\n }\n };\n\n // Input\n private input = () => {\n if (this.getOption('min-length')) {\n const minLength = parseInt(this.getOption('min-length') as string);\n\n if (this.inputElement.value.length >= minLength) {\n this.search();\n } else if (this.inputElement.value.length === 0) {\n this.clear();\n }\n }\n };\n\n private handlers(): void {\n // Focus\n this.inputElement.addEventListener('focus', this.focus);\n\n // Blur\n this.inputElement.addEventListener('blur', this.blur);\n\n // Keypress\n if (this.getOption('keypress') === true) {\n this.inputElement.addEventListener('input', this.input);\n }\n\n // Submit\n if (this.submitElement) {\n this.submitElement.addEventListener('click', this.search);\n }\n\n // Enter\n if (this.getOption('enter') === true) {\n this.inputElement.addEventListener('keypress', this.enter);\n }\n\n // Clear\n if (this.clearElement) {\n this.clearElement.addEventListener('click', this.clear);\n }\n\n // Menu\n if (this.menuObject) {\n // Toggle menu\n if (this.toggleElement) {\n this.toggleElement.addEventListener('click', this.show);\n\n this.menuObject.on('kt.menu.dropdown.show', function () {\n // @ts-ignore\n if (isVisibleElement(this.toggleElement)) {\n // @ts-ignore\n this.toggleElement.classList.add('active');\n // @ts-ignore\n this.toggleElement.classList.add('show');\n }\n });\n\n this.menuObject.on('kt.menu.dropdown.hide', function () {\n // @ts-ignore\n if (isVisibleElement(this.toggleElement)) {\n // @ts-ignore\n this.toggleElement.classList.remove('active');\n // @ts-ignore\n this.toggleElement.classList.remove('show');\n }\n });\n }\n\n this.menuObject.on('kt.menu.dropdown.shown', function () {\n // @ts-ignore\n this.inputElement.focus();\n });\n }\n\n // Window resize handling\n window.addEventListener('resize', () => {\n let timer;\n\n throttle(\n timer,\n () => {\n this.update();\n },\n 200\n );\n });\n }\n\n ///////////////////////\n // ** Public API ** //\n ///////////////////////\n // Update\n public update = () => {\n // Handle responsive form\n if (this.layout === 'menu') {\n let responsiveFormMode = this.getResponsiveFormMode();\n\n if (responsiveFormMode === 'on' && this.contentElement.contains(this.formElement) === false) {\n this.contentElement.prepend(this.formElement);\n this.formElement.classList.remove('d-none');\n } else if (responsiveFormMode === 'off' && this.contentElement.contains(this.formElement) === true) {\n this.element.prepend(this.formElement);\n this.formElement.classList.add('d-none');\n }\n }\n };\n\n // Show menu\n public show = () => {\n if (this.menuObject) {\n this.update();\n\n this.menuObject.show(this.element);\n }\n };\n\n // Hide menu\n public hide = () => {\n if (this.menuObject) {\n this.update();\n\n this.menuObject.hide(this.element);\n }\n };\n\n // Search\n public search = () => {\n if (this.processing === false) {\n // Show search spinner\n if (this.spinnerElement) {\n this.spinnerElement.classList.remove('d-none');\n }\n\n // Hide search clear button\n if (this.clearElement) {\n this.clearElement.classList.add('d-none');\n }\n\n // Hide search toolbar\n if (this.toolbarElement) {\n this.toolbarElement.classList.add('d-none');\n }\n\n // Focus input\n this.inputElement.focus();\n\n this.processing = true;\n EventHandlerUtil.trigger(this.element, 'kt.search.process');\n }\n };\n\n // Complete\n public complete = () => {\n if (this.spinnerElement) {\n this.spinnerElement.classList.add('d-none');\n }\n\n // Show search toolbar\n if (this.clearElement) {\n this.clearElement.classList.remove('d-none');\n }\n\n if (this.inputElement.value.length === 0) {\n this.clear();\n }\n\n // Focus input\n this.inputElement.focus();\n\n this.show();\n\n this.processing = false;\n };\n\n // Clear\n public clear = () => {\n if (EventHandlerUtil.trigger(this.element, 'kt.search.clear') === false) {\n return;\n }\n\n // Clear and focus input\n this.inputElement.value = '';\n this.inputElement.focus();\n\n // Hide clear icon\n if (this.clearElement) {\n this.clearElement.classList.add('d-none');\n }\n\n // Show search toolbar\n if (this.toolbarElement) {\n this.toolbarElement.classList.remove('d-none');\n }\n\n // Hide menu\n if (this.getOption('show-on-focus') === false) {\n this.hide();\n }\n\n EventHandlerUtil.trigger(this.element, 'kt.search.cleared');\n };\n\n public isProcessing = () => {\n return this.processing;\n };\n\n public getQuery = () => {\n return this.inputElement.value;\n };\n\n public getMenu = () => {\n return this.menuObject;\n };\n\n public getFormElement = () => {\n return this.formElement;\n };\n\n public getInputElement(): HTMLInputElement {\n return this.inputElement;\n }\n\n public getContentElement(): HTMLElement {\n return this.contentElement;\n }\n\n public getElement(): HTMLElement {\n return this.element;\n }\n\n // Event API\n public on = (name: string, handler: Function) => {\n return EventHandlerUtil.on(this.element, name, handler);\n };\n\n public one = (name: string, handler: Function) => {\n return EventHandlerUtil.one(this.element, name, handler);\n };\n\n public off = (name: string) => {\n return EventHandlerUtil.off(this.element, name);\n };\n\n // Static methods\n public static getInstance = (el: HTMLElement, componentName: string = defaultSearchQueires.componentName) => {\n const Search = DataUtil.get(el, componentName);\n if (Search) {\n return Search;\n }\n\n return null;\n };\n\n public static createInstances = (\n selector: string = defaultSearchQueires.instanseQuery,\n options: ISearchOptions = defaultSearchOptions,\n queries: ISearchQueries = defaultSearchQueires\n ) => {\n const elements = document.body.querySelectorAll(selector);\n elements.forEach((el) => {\n const item = el as HTMLElement;\n let Search = SearchComponent.getInstance(item);\n if (!Search) {\n Search = new SearchComponent(item, options, queries);\n }\n });\n };\n\n public static createInsance = (\n selector: string = defaultSearchQueires.instanseQuery,\n options: ISearchOptions = defaultSearchOptions,\n queries: ISearchQueries = defaultSearchQueires\n ): SearchComponent | undefined => {\n const element = document.body.querySelector(selector);\n if (!element) {\n return;\n }\n const item = element as HTMLElement;\n let Search = SearchComponent.getInstance(item);\n if (!Search) {\n Search = new SearchComponent(item, options, queries);\n }\n return Search;\n };\n\n public static bootstrap = (selector: string = defaultSearchQueires.instanseQuery) => {\n SearchComponent.createInstances(selector);\n };\n\n public static reinitialization = (selector: string = defaultSearchQueires.instanseQuery) => {\n SearchComponent.createInstances(selector);\n };\n}\nexport { SearchComponent, defaultSearchOptions, defaultSearchQueires };\n","import React, { useRef, useEffect } from 'react';\nimport { useLocation } from 'react-router';\nimport clsx from 'clsx';\nimport { AsideMenuMain } from './AsideMenuMain';\nimport { DrawerComponent, MenuComponent, ScrollComponent, ToggleComponent } from '../../../assets/ts/components';\n\ntype Props = {\n asideMenuCSSClasses: string[];\n};\n\nconst AsideMenu: React.FC = ({ asideMenuCSSClasses }) => {\n const scrollRef = useRef(null);\n const { pathname } = useLocation();\n\n useEffect(() => {\n setTimeout(() => {\n MenuComponent.reinitialization();\n DrawerComponent.reinitialization();\n ToggleComponent.reinitialization();\n ScrollComponent.reinitialization();\n if (scrollRef.current) {\n scrollRef.current.scrollTop = 0;\n }\n }, 50);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pathname]);\n\n return (\n \n \n \n \n \n );\n};\n\nexport { AsideMenu };\n","/* eslint-disable react/jsx-no-target-blank */\n/* eslint-disable jsx-a11y/anchor-is-valid */\nimport React, { FC } from 'react';\nimport clsx from 'clsx';\nimport { useLayout } from '../../core';\nimport { KTSVG } from '../../../helpers';\nimport { AsideMenu } from './AsideMenu';\n\nconst AsideDefault: FC = () => {\n const { config, classes } = useLayout();\n const { aside } = config;\n\n return (\n \n {/* begin::Aside menu */}\n
\n \n
\n {/* end::Aside menu */}\n\n {/* begin::Footer */}\n \n {/* end::Footer */}\n \n );\n};\n\nexport { AsideDefault };\n","/* eslint-disable jsx-a11y/anchor-is-valid */\nimport { FC } from 'react';\nimport { useLayout } from '../core';\n\nconst Footer: FC = () => {\n const { classes } = useLayout();\n return (\n \n );\n};\n\nexport { Footer };\n","import React, { FC } from 'react';\nimport { Link } from 'react-router-dom';\nimport { useLayout } from '../../../core/LayoutProvider';\nimport { usePageData } from '../../../core/PageData';\n\nconst DefaultTitle: FC = () => {\n const { pageTitle, pageDescription, pageBreadcrumbs } = usePageData();\n const { config, attributes } = useLayout();\n return (\n
\n {/* begin::Title */}\n {pageTitle && (\n

\n {pageTitle}\n {pageDescription && config.pageTitle && config.pageTitle.description && (\n <>\n \n {pageDescription}\n \n )}\n

\n )}\n {/* end::Title */}\n\n {pageBreadcrumbs && pageBreadcrumbs.length > 0 && config.pageTitle && config.pageTitle.breadCrumbs && (\n
    \n {Array.from(pageBreadcrumbs).map((item, index) => (\n
  • \n {!item.isSeparator ? (\n \n {item.title}\n \n ) : (\n \n )}\n
  • \n ))}\n
  • {pageTitle}
  • \n
\n )}\n
\n );\n};\n\nexport { DefaultTitle };\n","/* eslint-disable jsx-a11y/anchor-is-valid */\nimport clsx from 'clsx';\nimport React, { FC, useEffect } from 'react';\nimport { KTSVG } from '../../../helpers';\nimport { useLayout } from '../../core';\nimport { DefaultTitle } from '../header/page-title/DefaultTitle';\nimport { MenuComponent } from '../../../assets/ts/components';\nimport { useLocation } from 'react-router-dom';\n\nconst Toolbar1: FC = () => {\n const { classes } = useLayout();\n const { pathname } = useLocation();\n\n useEffect(() => {\n MenuComponent.reinitialization();\n }, [pathname]);\n\n return (\n
\n {/* begin::Container */}\n
\n \n\n {/* begin::Actions */}\n {/*
*/}\n {/* begin::Wrapper */}\n {/*
*/}\n {/* begin::Menu */}\n {/* \n \n Filter\n */}\n\n {/* end::Menu */}\n {/*
*/}\n {/* end::Wrapper */}\n\n {/* begin::Button */}\n\n {/* \n Create\n */}\n {/* end::Button */}\n {/*
*/}\n {/* end::Actions */}\n
\n {/* end::Container */}\n
\n );\n};\n\nexport { Toolbar1 };\n","import React from 'react';\nimport { useLayout } from '../../core/LayoutProvider';\nimport { Toolbar1 } from './Toolbar1';\n\nconst Toolbar = () => {\n const { config } = useLayout();\n\n switch (config.toolbar.layout) {\n case 'toolbar1':\n return ;\n\n default:\n return ;\n }\n};\n\nexport { Toolbar };\n","import React, { useEffect, useRef } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport {\n // ScrollComponent,\n ScrollTopComponent,\n MenuComponent,\n DrawerComponent,\n ToggleComponent,\n StickyComponent,\n} from '../../assets/ts/components';\nimport { KTSVG } from '../../helpers';\n\nexport function ScrollTop() {\n const { pathname } = useLocation();\n const isFirstRun = useRef(true);\n\n const pluginsReinitialization = () => {\n setTimeout(() => {\n // ScrollTopComponent.reinitialization()\n MenuComponent.reinitialization();\n StickyComponent.reInitialization();\n setTimeout(() => {\n ToggleComponent.reinitialization();\n DrawerComponent.reinitialization();\n // ScrollComponent.reinitialization()\n }, 70);\n }, 140);\n };\n\n const scrollTop = () => {\n ScrollTopComponent.goTop();\n };\n\n const updateHeaderSticky = () => {\n const stickyHeader = document.body.querySelectorAll(`[data-kt-sticky-name=\"header\"]`);\n if (stickyHeader && stickyHeader.length > 0) {\n const sticky = StickyComponent.getInstance(stickyHeader[0] as HTMLElement);\n if (sticky) {\n sticky.update();\n }\n }\n };\n\n useEffect(() => {\n if (isFirstRun.current) {\n isFirstRun.current = false;\n } else {\n pluginsReinitialization();\n }\n\n updateHeaderSticky();\n setTimeout(() => {\n scrollTop();\n }, 0);\n }, [pathname]);\n\n return (\n
\n \n
\n );\n}\n","import React, { useEffect } from 'react';\nimport { useLocation } from 'react-router';\nimport clsx from 'clsx';\nimport { DrawerComponent } from '../../assets/ts/components';\n\nconst Content: React.FC = ({ children }) => {\n const location = useLocation();\n useEffect(() => {\n DrawerComponent.hideAll();\n }, [location]);\n\n return (\n
\n {children}\n
\n );\n};\n\nexport { Content };\n","import { useEffect, useRef } from 'react';\nimport {\n MenuComponent,\n DrawerComponent,\n ScrollComponent,\n ScrollTopComponent,\n StickyComponent,\n ToggleComponent,\n} from '../assets/ts/components';\n\nimport { useLayout } from './core';\n\nexport function MasterInit() {\n const { config } = useLayout();\n const isFirstRun = useRef(true);\n const pluginsInitialization = () => {\n isFirstRun.current = false;\n setTimeout(() => {\n ToggleComponent.bootstrap();\n ScrollTopComponent.bootstrap();\n DrawerComponent.bootstrap();\n StickyComponent.bootstrap();\n MenuComponent.bootstrap();\n ScrollComponent.bootstrap();\n }, 200);\n };\n\n useEffect(() => {\n if (isFirstRun.current) {\n isFirstRun.current = false;\n pluginsInitialization();\n }\n }, [config]);\n\n return <>;\n}\n","import React from 'react';\nimport { AsideDefault } from './components/aside/AsideDefault';\nimport { Footer } from './components/Footer';\nimport { HeaderWrapper } from './components/header/HeaderWrapper';\nimport { Toolbar } from './components/toolbar/Toolbar';\nimport { ScrollTop } from './components/ScrollTop';\nimport { Content } from './components/Content';\nimport { MasterInit } from './MasterInit';\nimport { PageDataProvider, useLayout } from './core';\nimport { DrawerMessenger, ExploreMain, ActivityDrawer, Main, InviteUsers, UpgradePlan } from '../partials';\nimport clsx from 'clsx';\n\nconst MasterLayout: React.FC = ({ children }) => {\n const { classes } = useLayout();\n\n return (\n \n
\n
\n {/* */}\n\n
\n \n \n \n {children}\n
\n
\n
\n
\n \n\n {/* begin:: Drawers */}\n {/* \n \n */}\n {/* end:: Drawers */}\n\n {/* begin:: Modals */}\n {/*
\n \n */}\n {/* end:: Modals */}\n\n \n \n \n );\n};\n\nexport { MasterLayout };\n","import { Field, FormikErrors, FormikTouched } from 'formik';\nimport React from 'react';\nimport { KeyValueModel } from '../../../models/KeyValueModel';\n\ntype Props = {\n inputId: string;\n label: string;\n required: boolean;\n options: KeyValueModel[];\n errors: FormikErrors;\n touched: FormikTouched;\n};\n\nconst DropDownList: React.FC = ({ inputId, label, required, options, errors, touched }) => {\n return (\n <>\n \n \n \n {options && options.map(option => (\n \n ))}\n \n {(errors as any)[inputId] && (touched as any)[inputId] \n ?
{(errors as any)[inputId]}
\n : null}\n \n );\n};\n\nexport default DropDownList;\n","import { Field, FormikErrors, FormikTouched } from 'formik';\nimport React from 'react';\n\ntype Props = {\n inputId: string;\n label: string;\n placeholder: string;\n required: boolean;\n errors: FormikErrors;\n touched: FormikTouched;\n};\n\nconst TextBox: React.FC = ({ inputId, label, placeholder, required, errors, touched }) => {\n return (\n <>\n \n \n {(errors as any)[inputId] && (touched as any)[inputId] \n ?
{(errors as any)[inputId]}
\n : null}\n \n );\n};\n\nexport default TextBox;\n","import { Field, FormikErrors, FormikTouched } from 'formik';\nimport React from 'react';\nimport { KeyValueModel } from '../../../models/KeyValueModel';\n\ntype Props = {\n inputId: string;\n label: string;\n required: boolean;\n options: KeyValueModel[];\n errors: FormikErrors;\n touched: FormikTouched;\n};\n\nconst RadioButtonList: React.FC = ({ inputId, label, required, options, errors, touched }) => {\n return (\n <>\n \n
\n {options && options.map(option => (\n
\n \n \n
\n ))}\n
\n {(errors as any)[inputId] && (touched as any)[inputId] \n ?
{(errors as any)[inputId]}
\n : null}\n \n );\n};\n\nexport default RadioButtonList;\n","import { Field, FormikErrors, FormikTouched } from 'formik';\nimport React from 'react';\n\ntype Props = {\n inputId: string;\n label: string;\n errors: FormikErrors;\n touched: FormikTouched;\n};\n\nconst Checkbox: React.FC = ({ inputId, label, errors, touched }) => {\n return (\n <>\n
\n \n
\n {(errors as any)[inputId] && (touched as any)[inputId] \n ?
{(errors as any)[inputId]}
\n : null}\n \n );\n};\n\nexport default Checkbox;\n","import { Field, Form, Formik, FormikHelpers } from 'formik';\nimport React, { useState } from 'react';\nimport { CandidateProfileModel } from '../../models/CandidateProfileModel';\nimport { KTSVG } from '../../_metronic/helpers';\nimport * as Yup from 'yup';\nimport { CustomInputModel } from '../../models/CustomInputModel';\nimport DropDownList from '../FormInput/DropDownList/DropDownList';\nimport TextBox from '../FormInput/TextBox/TextBox';\nimport RadioButtonList from '../FormInput/RadioButtonList/RadioButtonList';\nimport Checkbox from '../FormInput/Checkbox/Checkbox';\nimport { StateModel } from '../../models/StateModel';\n\ntype Props = {\n customIntroductionText: string | null;\n beforeAgreementText: string | null;\n hideAddress: boolean;\n customRegistrationInputs: CustomInputModel[];\n onFormSubmit: (values: CandidateProfileModel) => void;\n};\n\nconst Registration: React.FC = ({ customIntroductionText, beforeAgreementText, hideAddress, customRegistrationInputs, onFormSubmit }) => {\n const formInitialValues: any = {\n Email: '',\n FirstName: '',\n LastName: '',\n Address1: '',\n Address2: '',\n City: '',\n State: '',\n ZipCode: '',\n Phone: '',\n Country: 'US',\n AgreeToTerms: false,\n };\n\n const formValidationSchema: any = {\n Email: Yup.string().email('Invalid email address').required('Required'),\n FirstName: Yup.string().max(50, 'Must be 50 characters or less').required('Required'),\n LastName: Yup.string().max(50, 'Must be 50 characters or less').required('Required'),\n AgreeToTerms: Yup.boolean().required('Required').oneOf([true], 'You must accept the terms and conditions.'),\n };\n\n const states: StateModel[] = [\n { Country: 'US', StateCode: 'AL', StateName: 'Alabama' },\n { Country: 'US', StateCode: 'AK', StateName: 'Alaska' },\n { Country: 'US', StateCode: 'AZ', StateName: 'Arizona' },\n { Country: 'US', StateCode: 'AR', StateName: 'Arkansas' },\n { Country: 'US', StateCode: 'CA', StateName: 'California' },\n { Country: 'US', StateCode: 'CO', StateName: 'Colorado' },\n { Country: 'US', StateCode: 'CT', StateName: 'Connecticut' },\n { Country: 'US', StateCode: 'DE', StateName: 'Delaware' },\n { Country: 'US', StateCode: 'DC', StateName: 'Dist of Columbia' },\n { Country: 'US', StateCode: 'FL', StateName: 'Florida' },\n { Country: 'US', StateCode: 'GA', StateName: 'Georgia' },\n { Country: 'US', StateCode: 'HI', StateName: 'Hawaii' },\n { Country: 'US', StateCode: 'IL', StateName: 'Illinois' },\n { Country: 'US', StateCode: 'IN', StateName: 'Indiana' },\n { Country: 'US', StateCode: 'IA', StateName: 'Iowa' },\n { Country: 'US', StateCode: 'KS', StateName: 'Kansas' },\n { Country: 'US', StateCode: 'KY', StateName: 'Kentucky' },\n { Country: 'US', StateCode: 'LA', StateName: 'Louisiana' },\n { Country: 'US', StateCode: 'ME', StateName: 'Maine' },\n { Country: 'US', StateCode: 'MD', StateName: 'Maryland' },\n { Country: 'US', StateCode: 'MA', StateName: 'Massachusetts' },\n { Country: 'US', StateCode: 'MI', StateName: 'Michigan' },\n { Country: 'US', StateCode: 'MN', StateName: 'Minnesota' },\n { Country: 'US', StateCode: 'MS', StateName: 'Mississippi' },\n { Country: 'US', StateCode: 'MO', StateName: 'Missouri' },\n { Country: 'US', StateCode: 'MT', StateName: 'Montana' },\n { Country: 'US', StateCode: 'NE', StateName: 'Nebraska' },\n { Country: 'US', StateCode: 'NV', StateName: 'Nevada' },\n { Country: 'US', StateCode: 'NH', StateName: 'New Hampshire' },\n { Country: 'US', StateCode: 'NJ', StateName: 'New Jersey' },\n { Country: 'US', StateCode: 'NM', StateName: 'New Mexico' },\n { Country: 'US', StateCode: 'NY', StateName: 'New York' },\n { Country: 'US', StateCode: 'NC', StateName: 'North Carolina' },\n { Country: 'US', StateCode: 'ND', StateName: 'North Dakota' },\n { Country: 'US', StateCode: 'OH', StateName: 'Ohio' },\n { Country: 'US', StateCode: 'OK', StateName: 'Oklahoma' },\n { Country: 'US', StateCode: 'OR', StateName: 'Oregon' },\n { Country: 'US', StateCode: 'PA', StateName: 'Pennsylvania' },\n { Country: 'US', StateCode: 'RI', StateName: 'Rhode Island' },\n { Country: 'US', StateCode: 'SC', StateName: 'South Carolina' },\n { Country: 'US', StateCode: 'SD', StateName: 'South Dakota' },\n { Country: 'US', StateCode: 'TN', StateName: 'Tennessee' },\n { Country: 'US', StateCode: 'TX', StateName: 'Texas' },\n { Country: 'US', StateCode: 'UT', StateName: 'Utah' },\n { Country: 'US', StateCode: 'VT', StateName: 'Vermont' },\n { Country: 'US', StateCode: 'VA', StateName: 'Virginia' },\n { Country: 'US', StateCode: 'WA', StateName: 'Washington' },\n { Country: 'US', StateCode: 'WV', StateName: 'West Virginia' },\n { Country: 'US', StateCode: 'WI', StateName: 'Wisconsin' },\n { Country: 'US', StateCode: 'WY', StateName: 'Wyoming' },\n { Country: 'CA', StateCode: 'AB', StateName: 'Alberta' },\n { Country: 'CA', StateCode: 'BC', StateName: 'British Columbia' },\n { Country: 'CA', StateCode: 'MB', StateName: 'Manitoba' },\n { Country: 'CA', StateCode: 'NB', StateName: 'New Brunswick' },\n { Country: 'CA', StateCode: 'NF', StateName: 'New Foundland' },\n { Country: 'CA', StateCode: 'NT', StateName: 'Northwest Territories' },\n { Country: 'CA', StateCode: 'NS', StateName: 'Nova Scotia' },\n { Country: 'CA', StateCode: 'ON', StateName: 'Ontario' },\n { Country: 'CA', StateCode: 'PE', StateName: 'Prince Edward Island' },\n { Country: 'CA', StateCode: 'QC', StateName: 'Quebec' },\n { Country: 'CA', StateCode: 'SK', StateName: 'Saskatchewan' },\n { Country: 'CA', StateCode: 'YT', StateName: 'Yukon Territories' },\n { Country: 'AU', StateCode: 'AC', StateName: 'Australian Capital Territory' },\n { Country: 'AU', StateCode: 'SW', StateName: 'New South Wales' },\n { Country: 'AU', StateCode: 'NO', StateName: 'Northern Territory' },\n { Country: 'AU', StateCode: 'QL', StateName: 'Queensland' },\n { Country: 'AU', StateCode: 'SA', StateName: 'South Australia' },\n { Country: 'AU', StateCode: 'TS', StateName: 'Tasmania' },\n { Country: 'AU', StateCode: 'VI', StateName: 'Victoria' },\n { Country: 'AU', StateCode: 'WE', StateName: 'Western Australia' }\n ];\n\n const defaultCountryCode = 'US';\n const [stateItems, setStateItems] = useState(\n states.filter((item) => item.Country === defaultCountryCode)\n );\n\n if (!hideAddress) {\n formValidationSchema.Address1 = Yup.string().required('Required');\n formValidationSchema.City = Yup.string().required('Required');\n formValidationSchema.State = Yup.string().required('Required');\n formValidationSchema.ZipCode = Yup.string().required('Required');\n formValidationSchema.Country = Yup.string().required('Required');\n }\n\n if (customRegistrationInputs) {\n customRegistrationInputs.forEach(element => {\n formInitialValues[element.Key] = '';\n formValidationSchema[element.Key] = Yup.string().required('Required');\n });\n }\n\n return (\n <>\n
\n {customIntroductionText && (\n
\n )}\n

Registration

\n
Please fill-in the form below.
\n
\n
\n ) => {\n setTimeout(() => {\n onFormSubmit(values);\n setSubmitting(false);\n }, 500);\n }}\n >\n {({ setFieldValue, errors, touched }) => { \n function resetStates(countryCode: string) {\n setFieldValue('State', '');\n setStateItems(states.filter((item) => item.Country === countryCode));\n }\n \n function handleCountryChange(e: any) {\n const countryCode = e.target.value;\n setFieldValue('Country', countryCode);\n resetStates(countryCode);\n }\n\n return (\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n {!hideAddress && (\n <>\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n \n \n {stateItems.map(({ StateCode, StateName }) => (\n \n ))}\n \n {errors.State && touched.State ?
{errors.State}
: null}\n
\n
\n
\n
\n \n
\n
\n \n \n \n \n \n \n \n {errors.Country && touched.Country ?
{errors.Country}
: null}\n
\n
\n \n )}\n {customRegistrationInputs && customRegistrationInputs.map(element => {\n if (element.Type === 'Text') {\n return (\n
\n \n
\n );\n }\n else if (element.Type === 'DropDownList') {\n return (\n
\n \n
\n );\n }\n else if (element.Type === 'RadioButtonList') {\n return (\n
\n \n
\n );\n }\n if (element.Type === 'Checkbox') {\n return (\n
\n \n
\n );\n }\n })}\n\n {beforeAgreementText && (\n
\n
\n
\n
\n
\n )}\n
\n
\n \n
\n {errors.AgreeToTerms && touched.AgreeToTerms ? (\n
{errors.AgreeToTerms}
\n ) : null}\n
\n
\n \n
\n
\n )}}\n \n
\n \n );\n};\n\nexport default Registration;\n","import React from 'react';\nimport { KTSVG } from '../../../_metronic/helpers';\n\ntype Props = {\n questionId: number;\n optionId: number;\n label: string;\n isSelected: boolean;\n onSelect: (optionId: number) => void;\n};\n\nconst ItemOption: React.FC = ({ questionId, optionId, label, isSelected, onSelect }) => {\n const onValueChanged = (event: React.ChangeEvent) => {\n onSelect(+event.target.value);\n };\n\n return (\n <>\n \n \n \n \n \n \n {label}\n \n \n \n \n );\n};\n\nexport default ItemOption;\n","import React from 'react';\nimport ItemOption from '../ItemOption/ItemOption';\nimport { OptionModel } from '../../../models/OptionModel';\n\ntype Props = {\n itemNumber: number;\n question: string;\n options: OptionModel[];\n selectedOptionId: number;\n showRequiredMessage: boolean;\n onOptionSelected: (optionId: number) => void;\n};\n\nconst CustomQuestion: React.FC = ({ itemNumber, question, options, selectedOptionId, showRequiredMessage, onOptionSelected }) => {\n const handleItemOptionSelect = (optionId: number) => {\n onOptionSelected(optionId);\n };\n\n return (\n
\n
\n
\n
\n \n\n {options.map((option, index) => (\n
\n \n
\n ))}\n\n {showRequiredMessage && (\n
You have to select one before you can continue.
\n )}\n
\n
\n
\n
\n );\n};\n\nexport default CustomQuestion;\n","import React from 'react';\n\ntype Props = {\n currentQuestionNumber: number;\n questionCount: number;\n};\n\nconst ProgressBar: React.FC = ({ currentQuestionNumber, questionCount }) => {\n const progress = (currentQuestionNumber / questionCount) * 100;\n\n return (\n
\n
\n
\n Question {currentQuestionNumber} of {questionCount}\n
\n
\n
\n
\n
\n \n );\n};\n\nexport default ProgressBar;\n","import React from 'react';\nimport { KTSVG } from '../../../_metronic/helpers';\n\ntype Props = {\n show: boolean;\n onSubmit: () => void;\n};\n\nconst SubmitButton: React.FC = ({ show, onSubmit }) => {\n if (show) {\n return (\n
\n \n
\n );\n }\n return null;\n};\n\nexport default SubmitButton;\n","import React from 'react';\nimport { faAngleLeft, faAngleRight } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\ntype Props = {\n showPreviousButton: boolean;\n showNextButton: boolean;\n onPrevious: () => void;\n onNext: () => void;\n};\n\nconst NavigationButtons: React.FC = ({ showPreviousButton, showNextButton, onPrevious, onNext }) => {\n return (\n <>\n \n \n \n );\n};\n\nexport default NavigationButtons;\n","import React, { useEffect, useState } from 'react';\nimport CustomQuestion from '../CustomQuestion/CustomQuestion';\nimport ProgressBar from '../ProgressBar/ProgressBar';\nimport { CustomQuestionModel } from '../../../models/CustomQuestionModel';\nimport { CustomAnswerModel } from '../../../models/CustomAnswerModel';\nimport SubmitButton from '../SubmitButton/SubmitButton';\nimport NavigationButtons from '../NavigationButtons/NavigationButtons';\n\ntype Props = {\n customQuestions: CustomQuestionModel[];\n startQuestionNumber: number;\n onFormSubmit: (answers: CustomAnswerModel[]) => void;\n};\n\nconst CustomQuestionnaire: React.FC = ({ customQuestions, startQuestionNumber, onFormSubmit }) => {\n const [currentQuestionNumber, setCurrentQuestionNumber] = useState(startQuestionNumber);\n const [highestSeenQuestionNumber, setHighestSeenQuestionNumber] = useState(startQuestionNumber);\n const [userAnswers, setUserAnswers] = useState([] as CustomAnswerModel[]);\n const [showRequiredMessage, setShowRequiredMessage] = useState(false);\n\n useEffect(() => {\n if (currentQuestionNumber > highestSeenQuestionNumber) {\n setHighestSeenQuestionNumber(currentQuestionNumber);\n }\n }, [currentQuestionNumber]);\n\n const handlePreviousButtonClick = () => {\n if (currentQuestionNumber > 1) {\n setShowRequiredMessage(false);\n setCurrentQuestionNumber(currentQuestionNumber - 1);\n }\n };\n\n const handleNextButtonClick = () => {\n if (currentQuestionNumber < customQuestions.length) {\n const currentAnswer = getCurrentUserAnswer();\n if (!currentAnswer || !currentAnswer.CustomOptionId) {\n setShowRequiredMessage(true);\n } else {\n setShowRequiredMessage(false);\n setCurrentQuestionNumber(currentQuestionNumber + 1);\n }\n }\n };\n\n const handleSubmitButtonClick = () => {\n if (currentQuestionNumber === customQuestions.length) {\n const currentAnswer = getCurrentUserAnswer();\n if (!currentAnswer || !currentAnswer.CustomOptionId) {\n setShowRequiredMessage(true);\n } else {\n setShowRequiredMessage(false);\n onFormSubmit(userAnswers);\n }\n }\n };\n\n const handleOptionSelected = (optionId: number) => {\n const currentQuestion = getCurrentQuestion();\n if (currentQuestion) {\n const currentUserAnswers = [...userAnswers];\n currentUserAnswers[currentQuestionNumber - 1] = {\n CustomQuestionId: currentQuestion.CustomQuestionID,\n CustomOptionId: optionId,\n };\n setUserAnswers(currentUserAnswers);\n setShowRequiredMessage(false);\n if (currentQuestionNumber < customQuestions.length) {\n setTimeout(() => {\n setCurrentQuestionNumber(currentQuestionNumber + 1);\n }, 300);\n }\n }\n };\n\n const getCurrentQuestion = (): CustomQuestionModel | undefined => {\n return customQuestions[currentQuestionNumber - 1];\n };\n\n const getCurrentUserAnswer = (): CustomAnswerModel | undefined => {\n return userAnswers[currentQuestionNumber - 1];\n };\n\n return (\n <>\n
\n

Pre-Assessment Questions

\n
\n Please answer the questions below before proceeding to the Assessment proper.\n
\n
\n
\n \n
\n
\n \n
\n 1}\n showNextButton={currentQuestionNumber < customQuestions.length && currentQuestionNumber < highestSeenQuestionNumber}\n onPrevious={handlePreviousButtonClick}\n onNext={handleNextButtonClick}\n />\n
\n
\n
\n \n
\n \n );\n};\n\nexport default CustomQuestionnaire;\n","import React from 'react';\nimport ItemOption from '../ItemOption/ItemOption';\nimport { AnswerModel } from '../../../models/AnswerModel';\n\ntype Props = {\n itemNumber: number;\n options: AnswerModel[];\n selectedOptionId: number;\n showRequiredMessage: boolean;\n onOptionSelected: (optionId: number) => void;\n};\n\nconst PairQuestion: React.FC = ({ itemNumber, options, selectedOptionId, showRequiredMessage, onOptionSelected }) => {\n const handleItemOptionSelect = (optionId: number) => {\n onOptionSelected(optionId);\n };\n\n return (\n
\n
\n
\n
\n
\n

{itemNumber}.

\n
\n\n {options.map((option, index) => (\n \n {index > 0 &&
}\n
\n \n
\n
\n ))}\n\n {showRequiredMessage && (\n <>\n
\n
You have to select one before you can continue.
\n \n )}\n
\n
\n
\n
\n\n );\n};\n\nexport default PairQuestion;\n","import { useEffect, useState } from 'react';\nimport { CandidateAnswerModel } from '../../../models/CandidateAnswerModel';\nimport { QuestionModel } from '../../../models/QuestionModel';\nimport NavigationButtons from '../NavigationButtons/NavigationButtons';\nimport PairQuestion from '../PairQuestion/PairQuestion';\nimport ProgressBar from '../ProgressBar/ProgressBar';\nimport SubmitButton from '../SubmitButton/SubmitButton';\n\ntype Props = {\n questions: QuestionModel[];\n startQuestionNumber: number;\n onFormSubmit: (answers: CandidateAnswerModel[]) => void;\n};\n\nconst PairQuestionnaire: React.FC = ({ questions, startQuestionNumber, onFormSubmit }) => {\n const [currentQuestionNumber, setCurrentQuestionNumber] = useState(startQuestionNumber);\n const [highestSeenQuestionNumber, setHighestSeenQuestionNumber] = useState(startQuestionNumber);\n const [userAnswers, setUserAnswers] = useState([] as CandidateAnswerModel[]);\n const [showRequiredMessage, setShowRequiredMessage] = useState(false);\n\n useEffect(() => {\n if (currentQuestionNumber > highestSeenQuestionNumber) {\n setHighestSeenQuestionNumber(currentQuestionNumber);\n }\n }, [currentQuestionNumber]);\n\n const handlePreviousButtonClick = () => {\n if (currentQuestionNumber > 1) {\n setShowRequiredMessage(false);\n setCurrentQuestionNumber(currentQuestionNumber - 1);\n }\n };\n\n const handleNextButtonClick = () => {\n if (currentQuestionNumber < questions.length) {\n const currentAnswer = getCurrentUserAnswer();\n if (!currentAnswer || !currentAnswer.AnswerId) {\n setShowRequiredMessage(true);\n } else {\n setShowRequiredMessage(false);\n setCurrentQuestionNumber(currentQuestionNumber + 1);\n }\n }\n };\n\n const handleSubmitButtonClick = () => {\n if (currentQuestionNumber === questions.length) {\n const currentAnswer = getCurrentUserAnswer();\n if (!currentAnswer || !currentAnswer.AnswerId) {\n setShowRequiredMessage(true);\n } else {\n setShowRequiredMessage(false);\n onFormSubmit(userAnswers);\n }\n }\n };\n\n const handleOptionSelected = (optionId: number) => {\n const currentQuestion = getCurrentQuestion();\n if (currentQuestion) {\n const currentUserAnswers = [...userAnswers];\n currentUserAnswers[currentQuestionNumber - 1] = {\n QuestionId: currentQuestion.QuestionID,\n AnswerId: optionId,\n };\n setUserAnswers(currentUserAnswers);\n setShowRequiredMessage(false);\n if (currentQuestionNumber < questions.length) {\n setTimeout(() => {\n setCurrentQuestionNumber(currentQuestionNumber + 1);\n }, 300);\n }\n }\n };\n\n const getCurrentQuestion = (): QuestionModel | undefined => {\n return questions[currentQuestionNumber - 1];\n };\n\n const getCurrentUserAnswer = (): CandidateAnswerModel | undefined => {\n return userAnswers[currentQuestionNumber - 1];\n };\n\n return (\n <>\n
\n

Assessment Questions

\n
\n The paired behaviors below describe individuals in this job. Please select the one that best describes you.\n
\n
\n
\n \n
\n
\n \n
\n 1}\n showNextButton={currentQuestionNumber < questions.length && currentQuestionNumber < highestSeenQuestionNumber}\n onPrevious={handlePreviousButtonClick}\n onNext={handleNextButtonClick}\n />\n
\n
\n
\n \n
\n \n );\n};\n\nexport default PairQuestionnaire;\n","import { faStar } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Field } from 'formik';\nimport React, { useState } from 'react';\nimport { KTSVG } from '../../_metronic/helpers';\n\ntype Props = {\n customThankYouText: string | null;\n rating: number;\n ratingInterpretation: string | null;\n isPrivate: boolean;\n isFormSubmitted: boolean;\n onFormSubmit: (shareResult: boolean, wantTraining: boolean, wantEmployment: boolean) => void;\n};\n\nconst Completed: React.FC = ({\n customThankYouText,\n rating,\n ratingInterpretation,\n isPrivate,\n isFormSubmitted,\n onFormSubmit\n}) => {\n\n const [shareResult, setShareResult] = useState(false);\n const [wantTraining, setWantTraining] = useState(false);\n const [wantEmployment, setWantEmployment] = useState(false);\n\n const perfectScore = 5;\n\n let thankYouText = 'You have successfully completed the assessment.';\n\n if (isPrivate) {\n thankYouText += ' Please close this window to exit the system. Thank you!';\n }\n\n if (customThankYouText && customThankYouText.length > 0) {\n thankYouText = customThankYouText;\n }\n\n const handleSubmitButtonClick = () => {\n onFormSubmit(shareResult, wantTraining, wantEmployment);\n };\n\n return (\n
\n
\n

Assessment Completed

\n
\n
\n
\n
\n {thankYouText}\n
\n {!isPrivate && (\n
\n
\n {[...Array(rating)].map(i => (\n \n ))}\n {[...Array(perfectScore - rating)].map(i => (\n \n ))}\n
\n {ratingInterpretation != null && (\n
\n
\n )}\n {!isFormSubmitted && (\n
\n

Share your result with our partners:

\n

\n Our partners are interested in discussing training and employment opportunities\n with candidates who are a strong behavioral match for the jobs they offer.\n

\n

\n Your result is currently saved as \"private\", which means only you can see it. If\n you wish to share your result and contact information with JOBehaviors' partners,\n please check the option below:\n

\n\n
\n \n
\n\n
\n

\n Please indicate your interest in the following for this particular assessment:\n

\n\n
\n \n
\n\n
\n \n
\n
\n\n
\n \n
\n\n
\n )}\n {isFormSubmitted && (\n
\n {shareResult && (\n \n Your results and contact information will be shared with JOBehaviors partners. \n \n )}\n Please close this window to exit the system. Thank you!\n
\n )}\n
\n )}\n
\n
\n
\n );\n};\n\nexport default Completed;\n","import React from 'react';\n\ntype Props = {\n show: boolean;\n};\n\nconst Spinner: React.FC = ({ show }) => {\n if (show) {\n return (\n
\n
\n
\n \n Loading...\n
\n
\n
\n );\n }\n return null;\n};\n\nexport default Spinner;\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons'\n\n\n\ntype Props = {\n show: boolean;\n onTryAgain?: () => void;\n};\n\nconst ErrorAlert: React.FC = ({ show, onTryAgain }) => {\n if (show) {\n return ( \n
\n
\n
\n \n
\n

An error was encountered.

\n {onTryAgain && (\n \n )}\n
\n
\n );\n }\n return null;\n};\n\nexport default ErrorAlert;\n","import { useEffect, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { AssessmentModel } from '../../models/AssessmentModel';\nimport { CandidateProfileModel } from '../../models/CandidateProfileModel';\nimport Registration from '../../components/Registration/Registration';\nimport CustomQuestionnaire from '../../components/Questionnaire/CustomQuestionnaire/CustomQuestionnaire';\nimport PairQuestionnaire from '../../components/Questionnaire/PairQuestionnaire/PairQuestionnaire';\nimport { CustomAnswerModel } from '../../models/CustomAnswerModel';\nimport { CandidateAnswerModel } from '../../models/CandidateAnswerModel';\nimport Completed from '../../components/Completed/Completed';\nimport { KeyValueModel } from '../../models/KeyValueModel';\nimport { toAbsoluteUrl } from '../../_metronic/helpers';\nimport Spinner from '../../components/Spinner/Spinner';\nimport ErrorAlert from '../../components/ErrorAlert/ErrorAlert';\nimport { AssessmentResultModel } from '../../models/AssessmentResultModel';\n\nconst AssessmentPage = () => {\n const [isLoading, setIsLoading] = useState(false);\n const [hasError, setHasError] = useState(false);\n const [step, setStep] = useState('registration');\n const [assessmentData, setAssessmentData] = useState(null as AssessmentModel | null);\n const [sessionAssessmentId, setSessionAssessmentId] = useState(\n (sessionStorage.getItem('assessmentId') ? JSON.parse(sessionStorage.getItem('assessmentId') || '') : '') as string\n );\n const [sessionLocAssessmentId, setSessionLocAssessmentId] = useState(\n (sessionStorage.getItem('locAssessmentId') ? JSON.parse(sessionStorage.getItem('locAssessmentId') || '') : '') as string\n );\n const [registrationId, setRegistrationId] = useState(\n (sessionStorage.getItem('registrationId')\n ? JSON.parse(sessionStorage.getItem('registrationId') || '')\n : null) as number | null\n );\n const [candidateProfile, setCandidateProfile] = useState(\n (sessionStorage.getItem('candidateProfile')\n ? JSON.parse(sessionStorage.getItem('candidateProfile') || '')\n : null) as CandidateProfileModel | null\n );\n const [preAssessmentAnswers, setPreAssessmentAnswers] = useState(\n (sessionStorage.getItem('preAssessmentAnswers')\n ? JSON.parse(sessionStorage.getItem('preAssessmentAnswers') || '')\n : []) as CustomAnswerModel[]\n );\n const [assessmentAnswers, setAssessmentAnswers] = useState(\n (sessionStorage.getItem('assessmentAnswers')\n ? JSON.parse(sessionStorage.getItem('assessmentAnswers') || '')\n : []) as CandidateAnswerModel[]\n );\n const [isAssessmentComplete, setIsAssessmentComplete] = useState(false);\n const [resultId, setResultId] = useState(0);\n const [customThankYouText, setCustomThankYouText] = useState(null as string | null);\n const [rating, setRating] = useState(0);\n const [ratingInterpretation, setRatingInterpretation] = useState(null as string | null);\n const [isFormSubmitted, setIsFormSubmitted] = useState(false);\n\n //todo: move\n const partnerLogoBaseUrl = 'https://jobehaviors.com/Partner/PartnerFiles/Logos/';\n\n let { assessmentId, locAssessmentId } = useParams<{ assessmentId: string; locAssessmentId: string }>();\n\n useEffect(() => {\n if (!locAssessmentId) {\n locAssessmentId = '';\n }\n if (sessionAssessmentId !== assessmentId || sessionLocAssessmentId !== locAssessmentId) {\n setSessionAssessmentId(assessmentId);\n setSessionLocAssessmentId(locAssessmentId);\n restartAssessment();\n }\n (async (): Promise => {\n try {\n setIsLoading(true);\n setHasError(false);\n\n const response = await fetch(`/api/assessment/${assessmentId}?la=${locAssessmentId}`);\n if (response.ok) {\n const data: AssessmentModel = await response.json();\n setAssessmentData(data);\n }\n else {\n setHasError(true);\n }\n }\n catch (error) {\n setHasError(true);\n }\n finally {\n setIsLoading(false);\n }\n })();\n }, [assessmentId, locAssessmentId]);\n\n useEffect(() => {\n if (assessmentData?.CustomClientScript && assessmentData.CustomClientScript !== '') {\n const script = document.createElement('script');\n script.src = `/scripts/${assessmentData.CustomClientScript}.js`;\n script.async = true;\n document.body.appendChild(script);\n }\n }, [assessmentData]);\n\n useEffect(() => {\n sessionStorage.setItem('assessmentId', JSON.stringify(sessionAssessmentId));\n }, [sessionAssessmentId]);\n\n useEffect(() => {\n sessionStorage.setItem('locAssessmentId', JSON.stringify(sessionLocAssessmentId));\n }, [sessionLocAssessmentId]);\n\n useEffect(() => {\n sessionStorage.setItem('registrationId', JSON.stringify(registrationId));\n }, [registrationId]);\n\n useEffect(() => {\n sessionStorage.setItem('candidateProfile', JSON.stringify(candidateProfile));\n }, [candidateProfile]);\n\n useEffect(() => {\n sessionStorage.setItem('preAssessmentAnswers', JSON.stringify(preAssessmentAnswers));\n }, [preAssessmentAnswers]);\n\n useEffect(() => {\n sessionStorage.setItem('assessmentAnswers', JSON.stringify(assessmentAnswers));\n }, [assessmentAnswers]);\n\n useEffect(() => {\n const getAssessmentStep = () => {\n if (assessmentData &&\n !candidateProfile &&\n !isAssessmentComplete) {\n return 'registration';\n }\n else if (assessmentData &&\n candidateProfile &&\n preAssessmentAnswers.length < assessmentData.CustomQuestions.length &&\n !isAssessmentComplete) {\n return 'preassessment';\n }\n else if (assessmentData &&\n candidateProfile &&\n preAssessmentAnswers.length === assessmentData.CustomQuestions.length &&\n assessmentAnswers.length < assessmentData.Questions.length &&\n !isAssessmentComplete) {\n return 'assessment';\n }\n else if (assessmentData &&\n isAssessmentComplete &&\n (!assessmentData.CustomThankYouPage || assessmentData.CustomThankYouPage.trim() === '')) {\n return 'completed';\n }\n else if (assessmentData &&\n isAssessmentComplete &&\n (assessmentData.CustomThankYouPage && assessmentData.CustomThankYouPage.trim().length > 0)) {\n setIsLoading(true);\n return 'redirecting';\n }\n return 'undefined';\n };\n const currentStep = getAssessmentStep();\n setHasError(currentStep === 'undefined');\n setStep(currentStep);\n }, [\n assessmentData,\n candidateProfile,\n isAssessmentComplete,\n preAssessmentAnswers,\n assessmentAnswers\n ]);\n\n const restartAssessment = () => {\n setRegistrationId(0);\n setCandidateProfile(null);\n setPreAssessmentAnswers([]);\n setAssessmentAnswers([]);\n };\n\n const handleErrorTryAgain = () => {\n restartAssessment();\n };\n\n const handleRegistrationFormSubmit = (registrationFormValues: CandidateProfileModel) => {\n setCandidateProfile(registrationFormValues);\n\n if (assessmentData) {\n const registrationData = {\n assessmentTypeID: assessmentData.AssessmentTypeID,\n locAssessmentID: assessmentData.LocAssessmentID,\n candidateProfile: registrationFormValues\n };\n\n (async (): Promise => {\n try {\n const response = await fetch('/api/candidate', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(registrationData),\n });\n if (response.ok) {\n const candidateId: number = await response.json();\n\n setRegistrationId(candidateId);\n }\n } catch (error) {\n console.log('error', error);\n }\n })();\n }\n };\n\n const handlePreAssessmentFormSubmit = (preAssessmentFormValues: CustomAnswerModel[]) => {\n setPreAssessmentAnswers(preAssessmentFormValues);\n };\n\n const handleAssessmentFormSubmit = (assessmentFormValues: CandidateAnswerModel[]) => {\n setAssessmentAnswers(assessmentFormValues);\n\n const customParams = assessmentData?.CustomRegistrationInputs?.map(element => {\n return {\n Key: element.Key,\n Value: (candidateProfile as any)[element.Key]\n } as KeyValueModel;\n });\n\n if (assessmentData) {\n const completedAssessment = {\n partnerId: assessmentData.PartnerID,\n assessmentTypeID: assessmentData.AssessmentTypeID,\n locAssessmentID: assessmentData.LocAssessmentID,\n incompleteCandidateID: registrationId,\n isPrivate: assessmentData.IsPrivate,\n assessmentName: assessmentData.AssessmentTypeName,\n candidateProfile,\n customAnswers: preAssessmentAnswers,\n answers: assessmentFormValues,\n customParams: customParams\n };\n\n (async (): Promise => {\n try {\n setIsLoading(true);\n setHasError(false);\n\n const response = await fetch('/api/assessment', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(completedAssessment),\n });\n if (response.ok) {\n const data: AssessmentResultModel = await response.json();\n\n setIsAssessmentComplete(true);\n setResultId(data.ResultId);\n setCustomThankYouText(data.CustomThankYouText);\n setRating(data.Rating);\n setRatingInterpretation(data.RatingInterpretation);\n\n restartAssessment();\n\n if (assessmentData.CustomThankYouPage && assessmentData.CustomThankYouPage.trim().length > 0) {\n window.location.href = '/completed/' + assessmentData.CustomThankYouPage;\n }\n else if (data.RedirectUrl && data.RedirectUrl.trim().length > 0) {\n window.location.href = data.RedirectUrl;\n }\n }\n else {\n setHasError(true);\n }\n } catch (error) {\n setHasError(true);\n }\n finally {\n setIsLoading(false);\n }\n })();\n }\n };\n\n const handleShareFormSubmit = (shareResult: boolean, wantTraining: boolean, wantEmployment: boolean) => {\n const shareResults = {\n ResultId: resultId,\n ShareResult: shareResult,\n WantTraining: wantTraining,\n WantEmployment: wantEmployment\n };\n\n (async (): Promise => {\n try {\n setIsLoading(true);\n setHasError(false);\n\n const response = await fetch('/api/assessment/share', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(shareResults),\n });\n if (response.ok) {\n setIsFormSubmitted(true);\n }\n else {\n setHasError(true);\n }\n } catch (error) {\n setHasError(true);\n }\n finally {\n setIsLoading(false);\n }\n })();\n };\n\n const backgroundImage = assessmentData?.ImageHeader\n ? toAbsoluteUrl(`/media/headers/${assessmentData.ImageHeader}`)\n : toAbsoluteUrl('/media/headers/background.png');\n\n return (\n <>\n \n \n {!hasError && assessmentData && (\n
\n
\n
\n
\n \n

{assessmentData?.AssessmentTypeName}

\n
\n {step === 'registration' && (\n \n )}\n {step === 'preassessment' && (\n \n )}\n {step === 'assessment' && (\n \n )}\n {step === 'completed' && (\n \n )}\n
\n
\n
\n )}\n \n );\n};\n\nexport default AssessmentPage;\n","import { BrowserRouter, Route, Switch } from 'react-router-dom';\nimport AssessmentPage from './pages/AssessmentPage/AssessmentPage';\n\nconst Routes = () => (\n \n
\n \n \n \n
\n
\n);\n\nexport default Routes;\n","import React, { Suspense } from 'react';\nimport { BrowserRouter } from 'react-router-dom';\nimport { I18nProvider } from './_metronic/i18n/i18nProvider';\nimport { LayoutSplashScreen, LayoutProvider } from './_metronic/layout/core';\nimport { MasterLayout } from './_metronic/layout/MasterLayout';\nimport Routes from './Routes';\nimport './App.css';\n\ntype Props = {\n basename: string;\n};\n\nconst App: React.FC = ({ basename }) => {\n return (\n }>\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default App;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nimport './_metronic/assets/sass/style.scss';\nimport './_metronic/assets/sass/style.react.scss';\n\nconst { PUBLIC_URL } = process.env;\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}