{"version":3,"file":"static/chunks/252-2c7f796377a83f2c.js","mappings":"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","sources":["webpack://_N_E/../../libs/lms/src/assets/images/icon-complete.svg","webpack://_N_E/../../libs/lms/src/lib/components/accordion/accordion-item.tsx","webpack://_N_E/../../libs/lms/src/lib/components/accordion/accordion-content.tsx","webpack://_N_E/../../libs/lms/src/assets/images/icon_collapse.svg","webpack://_N_E/../../libs/lms/src/assets/images/icon_expand.svg","webpack://_N_E/../../libs/lms/src/lib/components/accordion/accordion-header.tsx","webpack://_N_E/../../libs/lms/src/lib/components/accordion/accordion.tsx","webpack://_N_E/../../libs/lms/src/assets/images/icon_profile.svg","webpack://_N_E/../../libs/lms/src/assets/images/icon-exit.svg","webpack://_N_E/../../libs/lms/src/assets/images/menu-close.svg","webpack://_N_E/../../libs/lms/src/lib/components/aside/aside.tsx","webpack://_N_E/../../libs/lms/src/lib/components/button/button.tsx","webpack://_N_E/../../libs/lms/src/assets/images/icon_dropbox.svg","webpack://_N_E/../../libs/lms/src/lib/components/combobox/combobox.tsx","webpack://_N_E/../../libs/lms/src/lib/components/dropdown/dropdown.tsx","webpack://_N_E/../../libs/lms/src/assets/images/exmark.svg","webpack://_N_E/../../libs/lms/src/lib/components/errorMessage/errorMessage.tsx","webpack://_N_E/../../libs/lms/src/lib/components/footer/footer.tsx","webpack://_N_E/../../libs/lms/src/lib/components/freeTextInput/freeTextinput.tsx","webpack://_N_E/../../libs/lms/src/assets/images/icon_back.svg","webpack://_N_E/../../libs/lms/src/assets/images/menu-open.svg","webpack://_N_E/../../libs/lms/src/assets/images/icon_language_default.svg","webpack://_N_E/../../libs/lms/src/lib/components/languageSelector/languageSelector.tsx","webpack://_N_E/../../libs/lms/src/lib/components/header/header.tsx","webpack://_N_E/../../libs/lms/src/lib/components/infoMessage/infoMessage.tsx","webpack://_N_E/../../libs/lms/src/assets/images/menu-close-modal.svg","webpack://_N_E/../../libs/lms/src/lib/components/Modal/Modal.tsx","webpack://_N_E/../../libs/lms/src/lib/components/notifications/notifications.tsx","webpack://_N_E/../../libs/lms/src/lib/components/rating/rating.tsx","webpack://_N_E/../../libs/lms/src/lib/components/spinner/spinner.tsx","webpack://_N_E/../../libs/lms/src/lib/components/successMessage/successMessage.tsx","webpack://_N_E/../../libs/lms/src/lib/components/text/text.tsx","webpack://_N_E/../../libs/lms/src/lib/utils/groqQueries.ts","webpack://_N_E/../../libs/lms/src/lib/lms.ts","webpack://_N_E/../../libs/lms/src/index.ts","webpack://_N_E/../../libs/lms/src/lib/components/Modal/ModalProps.tsx","webpack://_N_E/../../libs/lms/src/lib/components/header/header.mode.tsx","webpack://_N_E/../../libs/lms/src/lib/enums/FeedbackMode.tsx","webpack://_N_E/../../libs/lms/src/lib/hooks/useCourseModal.ts","webpack://_N_E/../../libs/lms/src/lib/utils/scormAPI.ts","webpack://_N_E/../../libs/lms/src/lib/hooks/useSCORM.ts","webpack://_N_E/../../libs/lms/src/lib/hooks/useUserCourses.ts","webpack://_N_E/../../libs/lms/src/lib/utils/TypeCourseData.ts","webpack://_N_E/../../libs/lms/src/lib/utils/alertMessage.ts","webpack://_N_E/../../libs/lms/src/lib/utils/alertUtils.ts","webpack://_N_E/../../libs/lms/src/lib/components/Modal/Modal.module.scss","webpack://_N_E/../../libs/lms/src/lib/components/accordion/accordion.module.scss","webpack://_N_E/../../libs/lms/src/lib/components/button/button.module.scss","webpack://_N_E/../../libs/lms/src/lib/components/errorMessage/errorMessage.module.scss","webpack://_N_E/../../libs/lms/src/lib/components/footer/footer.module.scss","webpack://_N_E/../../libs/lms/src/lib/components/freeTextInput/freeTextInput.module.scss","webpack://_N_E/../../libs/lms/src/lib/components/header/header.module.scss","webpack://_N_E/../../libs/lms/src/lib/components/languageSelector/languageSelector.module.scss","webpack://_N_E/../../libs/lms/src/lib/components/notifications/notifications.module.scss","webpack://_N_E/../../libs/lms/src/lib/components/rating/rating.module.scss","webpack://_N_E/../../libs/lms/src/lib/components/spinner/spinner.module.scss","webpack://_N_E/../../libs/lms/src/lib/components/text/text.module.scss","webpack://_N_E/"],"sourcesContent":["var _circle, _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgIconComplete = function SvgIconComplete(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 21,\n height: 21,\n fill: \"none\"\n }, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 10.967,\n cy: 10.659,\n r: 9,\n fill: \"#fff\"\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#000\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"m6.778 10.015 3.443 3.685 4.934-5.282\"\n })));\n};\nexport default SvgIconComplete;","import React, {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useState\n} from \"react\";\n\nimport { AccordionContext } from \"./accordion\";\nimport styles from \"./accordion.module.scss\";\nexport interface AccordionItemProps\n extends React.HTMLAttributes {\n /**\n * Content in Accordion.Item\n * Should include one Accordion.Header and one Accordion.Content\n */\n children: React.ReactNode;\n /**\n * Controlled open-state\n * Using this removes automatic control of open-state\n */\n open?: boolean;\n /**\n * Defaults the accordion to open if not controlled\n * @default false\n */\n defaultOpen?: boolean;\n id: string;\n}\n\nexport type AccordionItemType = React.ForwardRefExoticComponent<\n AccordionItemProps & React.RefAttributes\n>;\n\nexport interface AccordionItemContextProps {\n open: boolean;\n toggleOpen: () => void;\n}\n\nexport const AccordionItemContext =\n createContext(null);\n\nconst AccordionItem: AccordionItemType = forwardRef(\n ({ children, open, defaultOpen = false, id }, ref) => {\n const accordionContext = useContext(AccordionContext);\n open = accordionContext?.open === id ? true : false;\n\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n\n return (\n
\n {\n if (open === undefined) {\n setInternalOpen((iOpen) => !iOpen);\n }\n if (open) {\n accordionContext?.toggleOpen(\"\");\n } else {\n accordionContext?.toggleOpen(id);\n }\n }\n }}\n >\n {children}\n \n
\n );\n }\n);\n\nexport default AccordionItem;\n","import classNames from \"classnames\";\nimport React, { forwardRef, useContext, useEffect, useRef } from \"react\";\n\nimport styles from \"./accordion.module.scss\";\n//import AnimateHeight from \"../util/AnimateHeight\";\n//import { BodyLong } from \"../typography/BodyLong\";\nimport { AccordionItemContext } from \"./accordion-item\";\nexport interface AccordionContentProps\n extends React.HTMLAttributes {\n /**\n * Content inside Accordion.Content\n */\n children: React.ReactNode;\n}\n\nexport type AccordionContentType = React.ForwardRefExoticComponent<\n AccordionContentProps & React.RefAttributes\n>;\n\nconst AccordionContent: AccordionContentType = forwardRef(\n ({ children, className, id, ...rest }, ref) => {\n const context = useContext(AccordionItemContext);\n\n if (context === null) {\n console.error(\n \" has to be used within an \"\n );\n return null;\n }\n\n const contentClass = classNames(styles[\"content\"], {\n [styles[\"open\"]]: context.open,\n [styles[\"close\"]]: !context.open\n });\n\n let runningTimeoutAutofocus: number;\n const refContainer = useRef(null);\n\n /**\n * setTimeout for a delayed function/method call. Clears running.\n * @param delayCallback Function to trigger delayed. No args. Name only (MySuperFunction).\n * @param delayMs Delay in milliseconds.\n * @param clearTimeoutID Timeout to clear, for instance same variable (number) used initiallyto clear itself and avoid multiple running timeouts.\n */\n function DelayedCallback(\n delayCallback: Function,\n delayMs: number,\n clearTimeoutID: number\n ) {\n let newTimeout = 0;\n\n if (clearTimeoutID !== null) clearTimeout(clearTimeoutID);\n newTimeout = setTimeout(delayCallback, delayMs);\n\n return newTimeout;\n }\n\n /**\n * Sets focus to starting element of active context.\n * By doing this delayed (after render) to an element with tabindex=\"0\" NVDA for instance will start talking DOM-elements within that box.\n * This will require custom adjustments per template.\n */\n function FocusTTS() {\n if (refContainer.current !== null) {\n // console.log(\"rating.FocusTTS\");\n refContainer.current.focus({\n preventScroll: true\n });\n }\n }\n\n function DelayedFocusTTS() {\n //issue delayed focus for first element (nvda)\n clearTimeout(runningTimeoutAutofocus);\n runningTimeoutAutofocus = DelayedCallback(\n FocusTTS,\n 200,\n runningTimeoutAutofocus\n );\n }\n\n /**\n * Cleanup!\n */\n function Release() {\n clearTimeout(runningTimeoutAutofocus);\n }\n\n //only trigger once, and handle gc/release\n useEffect(() => {\n if (context.open) {\n DelayedFocusTTS();\n }\n\n return () => Release();\n });\n\n return (\n
\n
{children}
\n
\n );\n }\n);\n\nexport default AccordionContent;\n","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgIconCollapse = function SvgIconCollapse(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n fill: \"none\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeWidth: 3,\n d: \"M5 20 20 5M20 20 5 5\"\n })));\n};\nexport default SvgIconCollapse;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgIconExpand = function SvgIconExpand(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n fill: \"none\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeWidth: 3,\n d: \"M12 20.756V3.244M20.756 12H3.244\"\n })));\n};\nexport default SvgIconExpand;","import { Button, Text } from \"@taskalliance/lms\";\nimport CollapseIcon from \"assets/images/icon_collapse.svg\";\nimport ExpandIcon from \"assets/images/icon_expand.svg\";\nimport React, { forwardRef, useContext } from \"react\";\n\n//import { AccordionContext } from \"./accordion\";\nimport styles from \"./accordion.module.scss\";\nimport { AccordionItemContext } from \"./accordion-item\";\n\nexport interface AccordionHeaderProps\n extends React.ButtonHTMLAttributes {\n contentId: string;\n /**\n * Text inside Accordion.Header\n */\n children: React.ReactNode;\n}\n\nexport type AccordionHeaderType = React.ForwardRefExoticComponent<\n AccordionHeaderProps & React.RefAttributes\n>;\n\nconst AccordionHeader: AccordionHeaderType = forwardRef(\n ({ children, contentId, className, onClick, ...rest }, ref) => {\n //const accordionContext = useContext(AccordionContext);\n const itemContext = useContext(AccordionItemContext);\n\n if (itemContext === null) {\n console.error(\n \" has to be used within an \"\n );\n return null;\n }\n\n const handleClick = (\n e: React.MouseEvent\n ) => {\n //accordionContext?.toggleOpen();\n itemContext.toggleOpen();\n onClick && onClick(e);\n };\n\n return (\n
\n \n \n {children}\n \n {itemContext.open ? : }\n \n
\n );\n }\n);\n\nexport default AccordionHeader;\n","import React, { createContext, forwardRef, useState } from \"react\";\n\nimport styles from \"./accordion.module.scss\";\nimport AccordionContent, { AccordionContentType } from \"./accordion-content\";\nimport AccordionHeader, { AccordionHeaderType } from \"./accordion-header\";\nimport AccordionItem, { AccordionItemType } from \"./accordion-item\";\n\ninterface AccordionComponent\n extends React.ForwardRefExoticComponent<\n AccordionProps & React.RefAttributes\n > {\n Item: AccordionItemType;\n Header: AccordionHeaderType;\n Content: AccordionContentType;\n}\n\nexport interface AccordionContextProps {\n open: string;\n toggleOpen: (id: string) => void;\n}\n\nexport const AccordionContext = createContext(\n null\n);\n\nexport interface AccordionProps extends React.HTMLAttributes {\n children: React.ReactNode;\n /**\n * Controlled open-state\n * Using this removes automatic control of open-state\n */\n open?: boolean;\n}\n\nexport const Accordion = forwardRef(\n ({ ...rest }, ref) => {\n const [openItem, setOpenItem] = useState(\"bob\");\n\n return (\n {\n setOpenItem(id);\n },\n }}\n >\n
\n \n );\n }\n) as AccordionComponent;\n\nAccordion.Header = AccordionHeader;\nAccordion.Content = AccordionContent;\nAccordion.Item = AccordionItem;\n\nexport default Accordion;\n","var _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgIconProfile = function SvgIconProfile(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 18,\n height: 22,\n fill: \"none\"\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n stroke: \"currentColor\",\n strokeWidth: 2\n }, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 9,\n cy: 5.88,\n r: 4.818\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.377 20.937H1.623c.101-4.139 3.365-7.462 7.377-7.462s7.276 3.323 7.377 7.462Z\"\n }))));\n};\nexport default SvgIconProfile;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgIconExit = function SvgIconExit(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 18,\n height: 19,\n fill: \"none\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M7.357 4.167V1.5H17v16H7.357v-2.667M3.679 12.357 1 9.5m0 0 2.679-2.857M1 9.5h8.571\"\n })));\n};\nexport default SvgIconExit;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgMenuClose = function SvgMenuClose(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 26,\n height: 25,\n fill: \"none\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeWidth: 3,\n d: \"m2.2 23.343 21.6-21.6M23.8 23.343 2.2 1.743\"\n })));\n};\nexport default SvgMenuClose;","import { useAuth } from \"@hooks/api\";\nimport { Button } from \"@taskalliance/lms\";\nimport IconProfile from \"assets/images/icon_profile.svg\";\nimport IconExit from \"assets/images/icon-exit.svg\";\nimport { useRouter } from \"next/router\";\nimport { FunctionComponent, useRef } from \"react\";\n\nimport styles from \"./aside.module.scss\";\n\nimport IconClose from \"assets/images/menu-close.svg\";\n\ninterface AsideProps {\n asideData: any;\n showProfileButton?: boolean;\n}\n\nexport const Aside: FunctionComponent = ({\n asideData,\n showProfileButton\n}) => {\n const { logout } = useAuth();\n const router = useRouter();\n\n const asideMenu = useRef(null);\n\n const closeMenu = () => {\n asideMenu.current?.classList.remove(\"open\");\n };\n\n const logOff = () => {\n logout();\n router.push(\"/\");\n };\n\n const goToProfile = () => {\n closeMenu();\n router.push(\"/auth/profile\");\n };\n\n if (typeof document !== \"undefined\") {\n document.onkeydown = (event: KeyboardEvent) => {\n let isEscape = false;\n if (\"key\" in event) {\n isEscape =\n event.key === \"Escape\" ||\n event.key === \"Esc\" ||\n event.code === \"Escape\";\n }\n\n if (isEscape) {\n closeMenu();\n }\n };\n }\n\n // const handleClickOutside = (e: any) => {\n // if (asideMenu?.current?.contains(e.target)) {\n // closeMenu();\n // }\n // };\n\n // useEffect(() => {\n // document.addEventListener(\"mousedown\", handleClickOutside);\n // return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n // });\n\n return (\n \n );\n};\n\nexport default Aside;\n","// eslint-disable-next-line no-unused-vars\nimport classNames from \"classnames\";\nimport React, {\n BaseSyntheticEvent,\n ButtonHTMLAttributes,\n ReactNode\n} from \"react\";\n\nimport styles from \"./button.module.scss\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes {\n autoFocus?: boolean;\n disabled?: boolean;\n ariaDisabled?: boolean;\n ariaLabel?: string;\n ariaDescribedby?: string;\n ariaControls?: string;\n ariaExpanded?: boolean;\n form?: string;\n name?: string;\n type?: \"button\" | \"reset\" | \"submit\";\n /**\n * The default styles for buttons\n */\n variant?:\n | \"primary\"\n | \"secondary\"\n | \"ghost\"\n | \"header\"\n | \"link\"\n | \"aside\"\n | \"headerClose\"\n | \"accordion\";\n innerVariant?: \"negative\";\n size?: \"xsmall\" | \"small\" | \"medium\" | \"large\" | \"full\" | \"long\";\n value?: string;\n onClick?: any;\n style?: any;\n innerStyle?: any;\n rtl?: boolean;\n id?: string;\n attribute?: string;\n\n /**\n * All content - text, image etc.\n */\n children?: ReactNode;\n\n /** If supplied, triggers audio on click. */\n soundClickSRC?: string;\n\n /** If supplied, triggers SFX on click (\"wrong\", \"correct\" etc). */\n soundClickType?: string;\n}\n\nexport const Button = React.forwardRef(\n (\n {\n autoFocus = false,\n disabled = false,\n ariaDisabled,\n ariaDescribedby,\n ariaControls,\n ariaExpanded,\n name,\n type = \"button\",\n variant = \"primary\",\n innerVariant = \"\",\n size = \"medium\",\n value,\n children,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onClick = () => {},\n style,\n innerStyle,\n ariaLabel,\n rtl = false,\n soundClickSRC = \"\",\n soundClickType = \"\",\n id,\n tabIndex,\n attribute = \"button\"\n },\n ref\n ) => {\n const className = classNames(styles[\"btn\"], {\n [styles[\"primary\"]]: variant === \"primary\",\n [styles[\"secondary\"]]: variant === \"secondary\",\n [styles[\"ghost\"]]: variant === \"ghost\",\n [styles[\"header\"]]: variant === \"header\",\n [styles[\"headerClose\"]]: variant === \"headerClose\",\n [styles[\"accordion\"]]: variant === \"accordion\",\n [styles[\"link\"]]: variant === \"link\",\n [styles[\"aside\"]]: variant === \"aside\",\n [styles[\"xsmall\"]]: size === \"xsmall\",\n [styles[\"small\"]]: size === \"small\",\n [styles[\"medium\"]]: size === \"medium\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"full\"]]: size === \"full\",\n [styles[\"long\"]]: size === \"long\",\n [styles[\"flex\"]]: children && typeof children === \"object\",\n [styles[\"rtl\"]]: rtl === true,\n [styles[\"open\"]]: ariaExpanded === true\n });\n\n const innerClassName = classNames(styles[\"innerBtn\"], {\n [styles[\"negative\"]]: innerVariant === \"negative\"\n });\n\n /**\n * Triggers if user just clicked.\n * @param event Click event, forwarded to prop if it exists.\n */\n function HandleClick(event: BaseSyntheticEvent) {\n //sound?\n\n //custom event callback?\n if (onClick !== undefined) onClick(event);\n }\n\n if (typeof window !== \"undefined\") {\n if (\"ontouchstart\" in document.documentElement) {\n const buttons = Array.from(\n document.querySelectorAll(`.${styles[\"btn\"]}`)\n );\n const headerBtns = Array.from(\n document.querySelectorAll(`.${styles[\"header\"]}`)\n );\n buttons.forEach((button) => button.classList.add(styles[\"nohover\"]));\n headerBtns.forEach((button) => button.classList.add(styles[\"nohover\"]));\n }\n }\n\n /**\n * Applies dangerouslySetInnerHTML if raw string contains ­, else keeps children intact.\n * @returns React DOM-element.\n */\n const checkShy = () => {\n let foundDangerously = false;\n const shyString = children?.toString() ?? \"\";\n\n if (shyString.indexOf(\"­\") > 0) {\n foundDangerously = true;\n //console.info(\"Text: checkShy=\",shyString+\", foundDangerously=\"+foundDangerously);\n }\n\n if (foundDangerously) {\n return (\n
\n );\n } else {\n return (\n
\n {children}\n
\n );\n }\n };\n\n return (\n \n {checkShy()}\n \n );\n }\n);\n\nexport default Button;\n","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgIconDropbox = function SvgIconDropbox(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"1em\",\n height: \"1em\",\n fill: \"none\",\n \"aria-hidden\": \"true\",\n viewBox: \"0 0 24 24\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M5.97 9.47a.75.75 0 0 1 1.06 0L12 14.44l4.97-4.97a.75.75 0 1 1 1.06 1.06l-5.5 5.5a.75.75 0 0 1-1.06 0l-5.5-5.5a.75.75 0 0 1 0-1.06\"\n })));\n};\nexport default SvgIconDropbox;","import IconDropbox from \"assets/images/icon_dropbox.svg\";\nimport IconComplete from \"assets/images/icon-complete.svg\";\nimport React, {\n ChangeEvent,\n FunctionComponent,\n useEffect,\n useRef,\n useState\n} from \"react\";\n\nimport styles from \"./combobox.module.scss\";\n\ninterface ComboboxProps {\n id: string;\n label: string;\n chosenOption?: string;\n chosenIndex?: number;\n options: Array;\n onSelect?: (\n childId: string | undefined,\n parentId: string | undefined\n ) => void;\n onChange?: (value: string) => void;\n readOnlyInput?: boolean;\n placeholder?: string;\n}\n\nexport const Combobox: FunctionComponent = ({\n id,\n label,\n chosenOption,\n chosenIndex,\n options,\n onSelect,\n onChange,\n readOnlyInput = false,\n placeholder\n}) => {\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [filteredOptions, setFilteredOptions] = useState(options);\n const [selectedOption, setSelectedOption] = useState(chosenOption ?? null);\n const [isOpen, setIsOpen] = useState(false);\n const [highlightedIndex, setHighlightedIndex] = useState(\n chosenIndex ? chosenIndex : -1\n );\n\n const comboboxRef = useRef(null);\n const inputRef = useRef(null);\n\n // Handle closing dropdown, keydown and scrolling\n useEffect(() => {\n const handleOutsideClick = (event: MouseEvent) => {\n if (comboboxRef.current && !comboboxRef.current.contains(event.target)) {\n setIsOpen(false);\n }\n };\n\n const handleEscKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setIsOpen(false);\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (document.activeElement === inputRef.current) {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n if (isOpen) {\n setHighlightedIndex((prevIndex) =>\n prevIndex < filteredOptions.length - 1 ? prevIndex + 1 : prevIndex\n );\n handleScroll(\"down\");\n } else {\n toggleDropdown();\n }\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n if (isOpen) {\n setHighlightedIndex((prevIndex) =>\n prevIndex > 0 ? prevIndex - 1 : prevIndex\n );\n handleScroll(\"up\");\n } else {\n toggleDropdown();\n }\n } else if (event.key === \"Enter\") {\n if (!isOpen) {\n toggleDropdown();\n }\n if (isOpen && highlightedIndex !== -1) {\n handleOptionClick(filteredOptions[highlightedIndex]);\n }\n }\n }\n };\n\n const handleScroll = (direction: \"up\" | \"down\") => {\n const dropdown = document.querySelector(\n `.${styles[\"combobox-dropdown\"]}`\n );\n const itemHeight = document.querySelector(\n `.${styles[\"combobox-item\"]}`\n )?.clientHeight;\n\n if (dropdown) {\n if (direction === \"up\" && highlightedIndex > 0) {\n dropdown.scrollTop = (highlightedIndex - 1) * itemHeight;\n } else if (\n direction === \"down\" &&\n highlightedIndex < filteredOptions.length - 1\n ) {\n dropdown.scrollTop = (highlightedIndex + 1) * itemHeight;\n }\n }\n };\n\n document.addEventListener(\"click\", handleOutsideClick);\n document.addEventListener(\"keydown\", handleEscKey);\n document.addEventListener(\"keydown\", handleKeyDown);\n\n return () => {\n document.removeEventListener(\"click\", handleOutsideClick);\n document.removeEventListener(\"keydown\", handleEscKey);\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [comboboxRef, isOpen, filteredOptions, highlightedIndex]);\n\n const handleInputChange = (e: ChangeEvent) => {\n const value = e.target.value;\n setSearchTerm(value);\n\n if (value !== \"\") {\n setIsOpen(true);\n } else {\n setIsOpen(false);\n if (onSelect) {\n onSelect(undefined, undefined);\n }\n }\n\n if (selectedOption !== null) {\n setSelectedOption(null);\n }\n\n const filtered = options.filter((option) =>\n option.title.toLowerCase().includes(value.toLowerCase())\n );\n setFilteredOptions(filtered);\n setHighlightedIndex(-1);\n };\n\n const handleOptionClick = (option: any) => {\n setSelectedOption(option.title);\n clearSearch();\n setIsOpen(false);\n if (onSelect) {\n onSelect(option.id, option.parentGroupId);\n }\n if (onChange) {\n onChange(option.id);\n }\n };\n\n const handleOptionHover = (index: number) => {\n setHighlightedIndex(index);\n };\n\n const toggleDropdown = () => {\n setIsOpen(!isOpen);\n if (!isOpen) {\n // If opening the dropdown, scroll to the selected option\n setTimeout(() => {\n scrollSelectedOptionIntoView();\n }, 100);\n }\n };\n\n const scrollSelectedOptionIntoView = () => {\n const selectedOptionElement = document.querySelector(\n \"[aria-selected='true']\"\n ) as HTMLElement;\n\n if (selectedOptionElement) {\n selectedOptionElement.scrollIntoView({ block: \"nearest\" });\n }\n };\n\n const clearSearch = () => {\n setSearchTerm(\"\");\n setFilteredOptions(options);\n };\n\n return (\n
\n \n
\n e.target.select()}\n readOnly={readOnlyInput}\n placeholder={placeholder}\n />\n
\n Alternatives\n \n
\n
\n\n {filteredOptions && filteredOptions.length > 0 && isOpen && (\n
    \n {filteredOptions.map((option, index) => (\n handleOptionClick(option)}\n onMouseEnter={() => handleOptionHover(index)}\n >\n {option.title}\n {option.title === selectedOption && }\n \n ))}\n
\n )}\n
\n );\n};\n\nexport default Combobox;\n","import React, { FunctionComponent } from \"react\";\n\nimport styles from \"./dropdown.module.scss\";\n\ninterface DropdownProps {\n id: string;\n name: string;\n onChange: any;\n options: Array;\n defaultOption?: string;\n chosenOption?: string;\n}\n\nexport const Dropdown: FunctionComponent = ({\n id,\n name,\n onChange,\n options,\n defaultOption,\n chosenOption\n}) => {\n return (\n
\n \n
\n );\n};\n\nexport default Dropdown;\n","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgExmark = function SvgExmark(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 4,\n height: 13,\n fill: \"none\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"m3.316.66-.292 8.312H.774L.484.659zM.402 11.532c0-.32.134-.59.403-.807.276-.223.646-.335 1.11-.335.463 0 .83.112 1.098.335.276.217.414.486.414.807 0 .316-.138.582-.414.8-.268.217-.635.326-1.099.326-.463 0-.833-.109-1.109-.326-.269-.218-.403-.484-.403-.8\"\n })));\n};\nexport default SvgExmark;","import Exmark from \"assets/images/exmark.svg\";\nimport React, { FunctionComponent } from \"react\";\n\nimport styles from \"./errorMessage.module.scss\";\n\ninterface ErrorProps {\n children: any;\n}\n\nexport const ErrorMessage: FunctionComponent = ({ children }) => {\n return (\n
\n \n \n \n
{children}
\n
\n );\n};\n\nexport default ErrorMessage;\n","import { Text } from \"@taskalliance/lms\";\nimport Image from \"next/image\";\nimport Link from \"next/link\";\nimport React, { FunctionComponent } from \"react\";\n\nimport styles from \"./footer.module.scss\";\n\ninterface footerProps {\n footerData: any;\n}\n\nexport const Footer: FunctionComponent = ({ footerData }) => {\n return (\n
\n
\n {footerData && footerData?.footerImage.url && (\n \n )}\n
\n
\n
\n \n {footerData?.footerText}\n \n
\n {footerData?.footerLinks && footerData?.footerLinks.length > 0 && (\n
\n \n {footerData?.footerLinks.map(\n (\n footerLink: {\n _key: string;\n href: string;\n linkText: string;\n blank: boolean;\n },\n index: number\n ) => (\n \n \n {footerLink.linkText}\n \n {index !== footerData?.footerLinks.length - 1 ? \" | \" : \"\"}\n \n )\n )}\n \n
\n )}\n
\n
\n
\n );\n};\n\nexport default Footer;\n","import { Button, Text } from \"@taskalliance/lms\";\nimport {\n BaseSyntheticEvent,\n FormEventHandler,\n FunctionComponent,\n useRef,\n useState\n} from \"react\";\n\nimport styles from \"./freeTextInput.module.scss\";\n\nexport interface FreeTextInputProps {\n textareaLabel?: string;\n submitLabel?: string;\n instructionText?: string;\n textareaRemainText?: string;\n maxNumberCharacters?: number;\n textareaTooMuchText?: string;\n /** Callback function to send value to, for instance courses SetFeedbackByIndex(value, 0). */\n submitInput?: any;\n}\n\nexport const FreeTextInput: FunctionComponent = ({\n textareaLabel,\n submitLabel,\n instructionText,\n textareaRemainText = \"{{x}} characters left\",\n maxNumberCharacters = 100,\n textareaTooMuchText = \"{{x}} characters too much\",\n submitInput\n}) => {\n const [charsInfo, setCharsInfo] = useState(\n textareaRemainText.replace(\"{{x}}\", maxNumberCharacters.toString())\n );\n const [disableBtn, setDisableBtn] = useState(true);\n\n const textareaRef = useRef(null);\n const instructionTextRef = useRef(null);\n\n const checkText = () => {\n if (textareaRef.current !== null) {\n const countLeft = maxNumberCharacters - textareaRef.current.value.length;\n const countTooMuch =\n textareaRef.current.value.length - maxNumberCharacters;\n const countertext = document.getElementsByClassName(\n styles[\"characterCounter\"]\n );\n if (textareaRef.current.value.length > 0) {\n setDisableBtn(false);\n if (maxNumberCharacters >= textareaRef.current.value.length) {\n countertext[0].classList.remove(styles[\"characterCounterError\"]);\n setCharsInfo(\n textareaRemainText.replace(\"{{x}}\", countLeft.toString())\n );\n } else {\n countertext[0].classList.add(styles[\"characterCounterError\"]);\n setCharsInfo(\n textareaTooMuchText.replace(\"{{x}}\", countTooMuch.toString())\n );\n setDisableBtn(true);\n }\n } else {\n setDisableBtn(true);\n setCharsInfo(textareaRemainText.replace(\"{{x}}\", countLeft.toString()));\n }\n }\n };\n\n /**\n * Local submit handler, sending data down the submitInput callback(*:any).\n */\n const handleSubmit = (submitEvent: BaseSyntheticEvent) => {\n const newValue = textareaRef.current?.value;\n submitEvent.preventDefault();\n\n if (submitInput && textareaRef.current !== null) {\n submitInput(newValue);\n } else {\n console.warn(\"No submitInput or textareaRef?\");\n }\n };\n\n return (\n
\n
\n
\n
\n \n
\n \n \n {charsInfo}\n \n
\n\n \n {instructionText}\n \n
\n \n {submitLabel}\n \n
\n \n
\n
\n
\n );\n};\n\nexport default FreeTextInput;\n","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgIconBack = function SvgIconBack(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 17,\n height: 29,\n fill: \"none\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 4,\n d: \"M14.632 2.635 2 14.635l12.632 12\"\n })));\n};\nexport default SvgIconBack;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgMenuOpen = function SvgMenuOpen(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 32,\n height: 27,\n fill: \"none\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n fillRule: \"evenodd\",\n d: \"M0 2.133C0 .955.955 0 2.133 0h27.734a2.133 2.133 0 0 1 0 4.267H2.133A2.133 2.133 0 0 1 0 2.133M0 13.356c0-1.178.955-2.133 2.133-2.133h27.734a2.133 2.133 0 1 1 0 4.266H2.133A2.133 2.133 0 0 1 0 13.356M0 24.579c0-1.178.955-2.133 2.133-2.133h27.734a2.133 2.133 0 1 1 0 4.266H2.133A2.133 2.133 0 0 1 0 24.58\",\n clipRule: \"evenodd\"\n })));\n};\nexport default SvgMenuOpen;","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgIconLanguageDefault = function SvgIconLanguageDefault(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 40,\n height: 40,\n fill: \"none\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 1.5,\n d: \"M14.833 24.654H7.82c.63 1.665 1.626 3.178 2.987 4.54 2.518 2.517 5.553 3.785 9.105 3.806m-5.079-8.346c.265 1.665.685 3.178 1.259 4.54 1.013 2.397 2.225 3.661 3.637 3.793.06.006.12.01.183.013m-5.079-8.346a23.474 23.474 0 0 1-.11-.775c-.027-.2-.05-.4-.072-.603A31.323 31.323 0 0 1 14.487 20c0-1.366.078-2.655.233-3.87.033-.264.071-.525.112-.783m.001 9.307h10.5M19.912 33l.24-.002m0 0a13.515 13.515 0 0 0 2.158-.184c2.613-.437 4.906-1.643 6.88-3.618 1.363-1.363 2.36-2.877 2.992-4.542a11.524 11.524 0 0 0 .43-1.377c.259-1.038.388-2.13.388-3.276 0-1.366-.183-2.656-.551-3.87a12.11 12.11 0 0 0-.267-.783c-.632-1.664-1.63-3.176-2.992-4.537-1.976-1.978-4.271-3.187-6.887-3.624a13.74 13.74 0 0 0-2.073-.184h-.08L20 7.001h-.024l-.166.002h-.026c-3.497.05-6.49 1.318-8.979 3.807-1.36 1.361-2.356 2.873-2.987 4.537m12.334 17.651c.307-.014.606-.075.896-.187 1.134-.437 2.128-1.642 2.983-3.616.593-1.363 1.026-2.876 1.302-4.541M7.818 15.347c-.098.258-.187.519-.267.784A13.281 13.281 0 0 0 7 20c0 1.144.13 2.237.387 3.275a11.562 11.562 0 0 0 .43 1.378m0-9.307h7.015m0 0c.266-1.664.688-3.176 1.262-4.537 1.013-2.399 2.225-3.665 3.637-3.8l.056-.007m-4.955 8.344h10.5m0 9.307a23.437 23.437 0 0 0 .188-1.378c.112-1.038.168-2.13.168-3.276 0-1.366-.08-2.655-.24-3.87a21.444 21.444 0 0 0-.117-.783m.002 9.307h6.85m-6.852-9.307h6.852m-6.852 0c-.274-1.664-.708-3.176-1.3-4.537-.856-1.98-1.853-3.188-2.992-3.624-.263-.1-.532-.16-.807-.183h-.033\"\n })));\n};\nexport default SvgIconLanguageDefault;","import { useUsers } from \"@hooks/api\";\nimport IconGlobe from \"assets/images/icon_language_default.svg\";\nimport Link from \"next/link\";\nimport { useRouter } from \"next/router\";\nimport React, { useEffect, useState } from \"react\";\n\nimport styles from \"./languageSelector.module.scss\";\n\ninterface LanguageSelectorProps {\n languages: string[]; // Array of language codes (e.g., [\"En\", \"Fr\"])\n href: string; //for example: /auth/profile\n withIcon?: boolean;\n customClassName?: string;\n onSelectLanguage?: (language: string) => void;\n}\n\nexport const LanguageSelector: React.FC = ({\n languages,\n href,\n withIcon = true,\n customClassName,\n onSelectLanguage\n}) => {\n const router = useRouter();\n const { user } = useUsers();\n const [isOpen, setIsOpen] = useState(false);\n const [selectedLanguage, setSelectedLanguage] = useState(router.locale);\n\n const toggleDropdown = () => {\n setIsOpen(!isOpen);\n };\n\n const selectLanguage = (language: string) => {\n setSelectedLanguage(language);\n onSelectLanguage ? onSelectLanguage(language) : null;\n };\n\n useEffect(() => {\n selectLanguage(\n router.locale.split(\"\")[0].toUpperCase() + router.locale.substring(1)\n );\n }, [router.locale]);\n\n useEffect(() => {\n withIcon ? setIsOpen(false) : setIsOpen(true);\n }, [withIcon, selectedLanguage]);\n\n useEffect(() => {\n const f = async () => {\n if (selectedLanguage.toLowerCase() !== router.locale) {\n languages.find((language) => {\n if (language.toLowerCase() === router.locale) {\n setSelectedLanguage(language);\n }\n });\n }\n };\n f();\n }, [router]);\n\n useEffect(() => {\n if (user) {\n languages.some((language) => {\n language.toLowerCase() === user?.language?.toLowerCase()\n ? setSelectedLanguage(language)\n : null;\n });\n } else {\n languages.find((language) => {\n if (language.toLowerCase() === router.locale) {\n setSelectedLanguage(language);\n }\n });\n }\n }, [user]);\n\n return (\n
\n {isOpen && (\n
\n {languages.map((language, index) => (\n
\n \n \n {language}\n \n
\n
\n ))}\n
\n )}\n {withIcon && (\n \n
\n {!isOpen && selectedLanguage}\n {isOpen ? (\n
\n \n
\n ) : (\n \n )}\n
\n \n )}\n \n );\n};\n\nexport default LanguageSelector;\n","import { Button, Notifications } from \"@taskalliance/lms\";\nimport BackIcon from \"assets/images/icon_back.svg\";\nimport MenuOpenIcon from \"assets/images/menu-open.svg\";\nimport LanguageSelector from \"libs/lms/src/lib/components/languageSelector/languageSelector\";\nimport Link from \"next/link\";\nimport { useRouter } from \"next/router\";\n\nimport Aside from \"../aside/aside\";\nimport { HeaderMode } from \"./header.mode\";\nimport styles from \"./header.module.scss\";\nimport { HeaderProps } from \"./header.props\";\n\nexport const Header: React.FunctionComponent = ({\n mode = HeaderMode.PUBLIC,\n headerData,\n showBackButton = false,\n headerToggleProfile = false,\n notificationText,\n languages = false,\n hrefLanguages\n}) => {\n /**\n * TODO:\n * switch between public and authenticated\n */\n const router = useRouter();\n\n const goBack = () => {\n router.back();\n };\n\n const openMenu = () => {\n document.querySelector(\"header > aside\")?.classList.add(\"open\");\n };\n\n if (mode == HeaderMode.AUTHENTICATED) {\n return (\n
\n
\n
\n {showBackButton && (\n \n \n \n )}\n
\n
\n \n \n \n
\n
\n {notificationText && (\n \n )}\n
\n );\n } else {\n return (\n
\n
\n {headerData?.headerTitle}\n {languages && (\n \n )}\n
\n
\n );\n }\n};\n\nexport default Header;\n","import Exmark from \"assets/images/exmark.svg\";\nimport React, { FunctionComponent } from \"react\";\n\nimport styles from \"./infoMessage.module.scss\";\n\ninterface InfoProps {\n children: any;\n}\n\nexport const InfoMessage: FunctionComponent = ({ children }) => {\n return (\n
\n \n \n \n
{children}
\n
\n );\n};\n\nexport default InfoMessage;\n","var _path;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgMenuCloseModal = function SvgMenuCloseModal(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 26,\n height: 25,\n fill: \"none\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeWidth: 3,\n d: \"m2.2 23.343 21.6-21.6M23.8 23.343 2.2 1.743\"\n })));\n};\nexport default SvgMenuCloseModal;","import { Button, FreeTextInput, Rating, Text } from \"@taskalliance/lms\";\nimport IconClose from \"assets/images/menu-close-modal.svg\";\nimport Link from \"next/link\";\nimport { FunctionComponent, useEffect, useRef } from \"react\";\n\nimport styles from \"./Modal.module.scss\";\nimport { ModalContentType, ModalProps } from \"./ModalProps\";\n\nexport const Modal: FunctionComponent = ({\n modalHeadline,\n modalText,\n modalBtnSubmit,\n modalBtnClose,\n modalType = null,\n toggleModal,\n submitModal,\n exitBtn = true,\n contentBtn = false,\n dualBtn = false,\n bottomBtn = false,\n bottomBtnLabel = \"OK\",\n dualBtnCancel,\n dualBtnSubmit,\n submitBtnStyle,\n submitBtnInnerStyle,\n bottomBtnStyle,\n bottomBtnInnerStyle,\n sizeButton = \"medium\",\n courseNumber,\n courseTotal,\n completedText = \"completed\",\n storeValueCallback,\n setting,\n linkBottom = false,\n linkBottomLabel\n}) => {\n const refContainer = useRef(null);\n const refContainerText = useRef(null);\n\n const submitCancel = () => {\n toggleModal(false);\n };\n\n let runningTimeoutAutofocus: number;\n\n /**\n * Sets everything except itself to modal, then back on exit/release.\n * Works by flipping tabindex back and forth (or removed on unset).\n */\n function SetModalByContainer(rootContainer: HTMLElement, newState: boolean) {\n let oldTabIndex;\n let currentNode;\n let nodeList: NodeList;\n if (newState) {\n nodeList = rootContainer.querySelectorAll(\n 'button, input, [tabindex=\"0\"]'\n ) as NodeList;\n } else {\n nodeList = rootContainer.querySelectorAll(\"[tabindex_old]\") as NodeList;\n }\n\n for (let i = 0; i < nodeList.length; i++) {\n if (newState) {\n currentNode = nodeList[i] as HTMLElement;\n oldTabIndex = currentNode.getAttribute(\"tabindex\");\n if (oldTabIndex == null) oldTabIndex = \"null\";\n currentNode.setAttribute(\"tabindex_old\", oldTabIndex);\n currentNode.setAttribute(\"tabindex\", \"-1\");\n } else {\n currentNode = nodeList[i] as HTMLElement;\n oldTabIndex = currentNode.getAttribute(\"tabindex_old\");\n currentNode.removeAttribute(\"tabindex_old\");\n if (oldTabIndex === \"null\") {\n currentNode.removeAttribute(\"tabindex\");\n } else if (oldTabIndex != null) {\n currentNode.setAttribute(\"tabindex\", oldTabIndex);\n }\n }\n }\n }\n\n /**\n * Sets DOM either disabled (true/modal) or enabled (false).\n * Works by affecting tabindex attribute to avoid being able to tab elements below modal itself (screen readers).\n * @param newState True=modal (minus itself), false=no modal.\n */\n function SetModal(newState: boolean) {\n if (newState) {\n if (refContainer.current != undefined) {\n SetModalByContainer(document.body, true);\n SetModalByContainer(refContainer.current, false);\n }\n } else {\n SetModalByContainer(document.body, false);\n }\n }\n\n /**\n * Local handler for submitting component value down to parent.\n * @param newValue\n */\n function HandleSubmit(newValue: any) {\n console.log(\"Modal.HandleSubmit: newValue=\", newValue);\n\n //trigger store function?\n if (storeValueCallback != null) storeValueCallback(newValue);\n\n //trigger prop function\n submitModal();\n }\n\n /**\n * setTimeout for a delayed function/method call. Clears running.\n * @param delayCallback Function to trigger delayed. No args. Name only (MySuperFunction).\n * @param delayMs Delay in milliseconds.\n * @param clearTimeoutID Timeout to clear, for instance same variable (number) used initiallyto clear itself and avoid multiple running timeouts.\n */\n function DelayedCallback(\n delayCallback: Function,\n delayMs: number,\n clearTimeoutID: number\n ) {\n let newTimeout = 0;\n\n if (clearTimeoutID !== null) clearTimeout(clearTimeoutID);\n newTimeout = setTimeout(delayCallback, delayMs);\n\n return newTimeout;\n }\n\n /**\n * Sets focus to starting element of active context.\n * By doing this delayed (after render) to an element with tabindex=\"0\" NVDA for instance will start talking DOM-elements within that box.\n * This will require custom adjustments per template.\n */\n function FocusTTS() {\n if (refContainerText.current != null) {\n //console.log(\"Modal.FocusTTS\");\n refContainerText.current.focus({\n preventScroll: true\n });\n }\n }\n\n /**\n * Cleanup!\n */\n function Release() {\n //console.log(\"Modal: Release!\");\n clearTimeout(runningTimeoutAutofocus);\n SetModal(false);\n }\n\n function DelayedFocusTTS() {\n //issue delayed focus for first element (nvda)\n clearTimeout(runningTimeoutAutofocus);\n runningTimeoutAutofocus = DelayedCallback(\n FocusTTS,\n 200,\n runningTimeoutAutofocus\n );\n }\n\n /**\n * Only trigger once, and handle GC/release.\n */\n useEffect(() => {\n //issue delayed focus for first element (nvda)\n //DelayedFocusTTS();\n SetModal(true);\n\n return () => Release();\n }, []);\n\n return (\n
\n
\n \n <>{DelayedFocusTTS()}\n
\n \n {modalHeadline !== \"\" && (\n

\n {modalHeadline}\n

\n )}\n

\n {modalText}\n

\n
\n {courseNumber !== undefined &&\n courseTotal !== undefined &&\n courseTotal > 1 && (\n
\n \n {courseNumber}/{courseTotal}\n \n \n {completedText}\n \n
\n )}\n\n {contentBtn && (\n
\n \n {modalBtnSubmit ? modalBtnSubmit : modalBtnClose}\n \n
\n )}\n\n {linkBottom && (\n
\n \n \n {linkBottomLabel}\n \n \n
\n )}\n\n {dualBtn && (\n
\n \n {dualBtnCancel}\n \n \n {dualBtnSubmit}\n \n
\n )}\n\n {modalType === ModalContentType.NUMBER && (\n \n )}\n\n {modalType === ModalContentType.TEXTINPUT && (\n \n )}\n
\n {exitBtn && (\n
\n \n \n \n
\n )}\n \n {bottomBtn && (\n
\n \n {bottomBtnLabel}\n \n
\n )}\n \n );\n};\n\nexport default Modal;\n","import { Text } from \"@taskalliance/lms\";\nimport classNames from \"classnames\";\nimport { FunctionComponent } from \"react\";\n\nimport styles from \"./notifications.module.scss\";\n\ninterface NotificationsProps {\n notificationText?: string;\n}\n\nexport const Notifications: FunctionComponent = ({\n notificationText\n}) => {\n /*\n const notifications = useAppSelector((state) => state.notifications);\n const variant = notifications.notification?.variant || 'counter';\n const content = notifications.notification?.content || null;\n */\n\n const notificationClassNames = classNames(styles[\"notifications-content\"], {\n //[styles['counter']]: variant === 'counter',\n //[styles['title']]: variant === 'title',\n //[styles['streak']]: variant === 'streak',\n //[styles['hidden']]: !content,\n });\n\n return (\n
\n
\n
\n
\n \n {notificationText}\n \n
\n
\n
\n );\n};\n\nexport default Notifications;\n","import { Button, Text } from \"@taskalliance/lms\";\nimport {\n ChangeEvent,\n FunctionComponent,\n useEffect,\n useRef,\n useState\n} from \"react\";\n\nimport styles from \"./rating.module.scss\";\nimport { RatingProps } from \"./ratingProps\";\n\nexport const Rating: FunctionComponent = ({\n numbersOfRating,\n instructionText,\n submitLabel,\n submitRate\n}) => {\n const [value, setValue] = useState(\"\");\n const [disabledSubmit, setDisabledSubmit] = useState(true);\n const [submittedInput, setSubmittedInput] = useState();\n\n let runningTimeoutAutofocus: number;\n const refContainer = useRef(null);\n\n const getValue = (event: ChangeEvent) => {\n const parent = event.target.parentElement;\n const grandParent = parent?.parentElement;\n\n // Let's see if you understand this later\n const eventCheckedValue = !event.target.checked;\n\n if (parent && grandParent) {\n for (const element of grandParent.children) {\n const input: HTMLInputElement | null = element.querySelector(\n \"input[type='checkbox']\"\n );\n if (input !== null) {\n input.checked = false;\n }\n }\n const selectedInput: HTMLInputElement | null = parent.querySelector(\n \"input[type='checkbox']\"\n );\n\n if (selectedInput !== null) {\n selectedInput.checked = !eventCheckedValue;\n\n if (selectedInput.checked) {\n setDisabledSubmit(false);\n setValue(event.target.value);\n setSubmittedInput(selectedInput);\n } else {\n setDisabledSubmit(true);\n setValue(\"\");\n setSubmittedInput(undefined);\n }\n }\n }\n };\n\n const rateValues = [];\n for (let i = 1; i <= numbersOfRating; i++) {\n rateValues.push(\n
\n \n \n
\n );\n }\n\n /**\n * Local submit handler, sending data down the submitRate callback(*:any).\n */\n const handleSubmit = () => {\n const newValue = value;\n\n if (submitRate) {\n console.log(\"Value to be saved:\", value);\n if (submittedInput !== undefined) {\n submittedInput.checked = false;\n }\n setValue(\"\");\n setDisabledSubmit(true);\n submitRate(newValue);\n } else {\n console.warn(\"No submitRate?\");\n }\n };\n\n /**\n * setTimeout for a delayed function/method call. Clears running.\n * @param delayCallback Function to trigger delayed. No args. Name only (MySuperFunction).\n * @param delayMs Delay in milliseconds.\n * @param clearTimeoutID Timeout to clear, for instance same variable (number) used initiallyto clear itself and avoid multiple running timeouts.\n */\n function DelayedCallback(\n delayCallback: Function,\n delayMs: number,\n clearTimeoutID: number\n ) {\n let newTimeout = 0;\n\n if (clearTimeoutID !== null) clearTimeout(clearTimeoutID);\n newTimeout = setTimeout(delayCallback, delayMs);\n\n return newTimeout;\n }\n\n /**\n * Sets focus to starting element of active context.\n * By doing this delayed (after render) to an element with tabindex=\"0\" NVDA for instance will start talking DOM-elements within that box.\n * This will require custom adjustments per template.\n */\n function FocusTTS() {\n if (refContainer.current !== null) {\n //console.log(\"rating.FocusTTS\");\n refContainer.current.focus({\n preventScroll: true\n });\n }\n }\n\n function DelayedFocusTTS() {\n //issue delayed focus for first element (nvda)\n clearTimeout(runningTimeoutAutofocus);\n runningTimeoutAutofocus = DelayedCallback(\n FocusTTS,\n 200,\n runningTimeoutAutofocus\n );\n }\n\n /**\n * Cleanup!\n */\n function Release() {\n clearTimeout(runningTimeoutAutofocus);\n }\n\n //only trigger once, and handle gc/release\n useEffect(() => {\n //DelayedFocusTTS;\n\n return () => Release();\n });\n\n return (\n
\n \n <>\n {/*inline trigger focus to work around consecutive not triggering useeffect*/}\n {/*DelayedFocusTTS()*/}\n \n
\n
{rateValues}
\n
\n {instructionText}\n
\n
\n \n {submitLabel}\n \n
\n
\n
\n \n );\n};\n\nexport default Rating;\n","import { FunctionComponent, HTMLAttributes } from \"react\";\n\nimport styles from \"./spinner.module.scss\";\n\nexport interface SpinnerProps extends HTMLAttributes {\n color?: string;\n emptyColor?: string;\n size?: string;\n time?: string;\n thickness?: string;\n}\n\nexport const Spinner: FunctionComponent = ({\n color = \"#292e28\",\n emptyColor = \"#f1f1f1\",\n size = \"30px\",\n time = \"1s\",\n thickness = \"4px\"\n}) => {\n if (typeof window !== \"undefined\") {\n const styleSheet = document.styleSheets[0];\n\n const keyframes = `@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }`;\n\n styleSheet.insertRule(keyframes, styleSheet.cssRules.length);\n }\n\n const spinnerStyles = {\n border: `${thickness} solid ${emptyColor}`,\n borderTop: `${thickness} solid ${color}`,\n borderRadius: \"50%\",\n width: size,\n height: size,\n animation: `spin ${time} linear infinite`\n };\n\n return (\n
\n );\n};\n\nexport default Spinner;\n","import Exmark from \"assets/images/exmark.svg\";\nimport React, { FunctionComponent } from \"react\";\n\nimport styles from \"./successMessage.module.scss\";\n\ninterface SuccessProps {\n children: any;\n}\n\nexport const SuccessMessage: FunctionComponent = ({\n children\n}) => {\n return (\n
\n \n \n \n
{children}
\n
\n );\n};\n\nexport default SuccessMessage;\n","/* eslint-disable @typescript-eslint/ban-types */\n// eslint-disable-next-line no-unused-vars\nimport classNames from \"classnames\";\nimport React, { ReactNode } from \"react\";\n\nimport styles from \"./text.module.scss\";\n\ninterface Props {\n size?:\n | \"xxsmall\"\n | \"xsmall\"\n | \"small\"\n | \"medium\"\n | \"large\"\n | \"xlarge\"\n | \"xxlarge\";\n children?: ReactNode;\n style?: React.CSSProperties;\n customClassName?: string;\n /**\n * Right-to-left text direction\n */\n rtl?: boolean;\n forceDangerouslySetInnerHTML?: boolean;\n}\n\n/**\n * Support for forwarding refs for this polymorphic component is based on this:\n * https://www.benmvp.com/blog/forwarding-refs-polymorphic-react-component-typescript/\n */\n\n// Source: https://github.com/emotion-js/emotion/blob/master/packages/styled-base/types/helper.d.ts\n// A more precise version of just React.ComponentPropsWithoutRef on its own\nexport type PropsOf<\n C extends keyof JSX.IntrinsicElements | React.JSXElementConstructor\n> = JSX.LibraryManagedAttributes>;\n\ntype AsProp = {\n /**\n * An override of the default HTML tag.\n * Can also be another React component.\n */\n as?: C;\n};\n\n/**\n * Allows for extending a set of props (`ExtendedProps`) by an overriding set of props\n * (`OverrideProps`), ensuring that any duplicates are overridden by the overriding\n * set of props.\n */\nexport type ExtendableProps<\n ExtendedProps = {},\n OverrideProps = {}\n> = OverrideProps & Omit;\n\n/**\n * Allows for inheriting the props from the specified element type so that\n * props like children, className & style work, as well as element-specific\n * attributes like aria roles. The component (`C`) must be passed in.\n */\nexport type InheritableElementProps<\n C extends React.ElementType,\n Props = {}\n> = ExtendableProps, Props>;\n\n/**\n * A more sophisticated version of `InheritableElementProps` where\n * the passed in `as` prop will determine which props can be included\n */\nexport type PolymorphicComponentProps<\n C extends React.ElementType,\n Props = {}\n> = InheritableElementProps>;\n\n/**\n * Utility type to extract the `ref` prop from a polymorphic component\n */\nexport type PolymorphicRef =\n React.ComponentPropsWithRef[\"ref\"];\n\n/**\n * A wrapper of `PolymorphicComponentProps` that also includes the `ref`\n * prop for the polymorphic component\n */\nexport type PolymorphicComponentPropsWithRef<\n C extends React.ElementType,\n Props = {}\n> = PolymorphicComponentProps & { ref?: PolymorphicRef };\n\n/**\n * The updated component props using PolymorphicComponentPropWithRef\n */\ntype TextProps = PolymorphicComponentPropsWithRef<\n C,\n Props\n>;\n\n/**\n * The type used in the type annotation for the component\n */\ntype TextComponent = (\n props: TextProps\n) => React.ReactElement | null;\n\nexport const Text: TextComponent = React.forwardRef(\n (\n {\n as,\n size,\n children,\n style,\n customClassName,\n rtl,\n forceDangerouslySetInnerHTML = false\n }: TextProps,\n ref?: PolymorphicRef\n ) => {\n const TextElement = as || \"span\";\n const className = classNames(styles[\"txt\"], customClassName, {\n [styles[\"xxsmall\"]]: size === \"xxsmall\",\n [styles[\"xsmall\"]]: size === \"xsmall\",\n [styles[\"small\"]]: size === \"small\",\n [styles[\"medium\"]]: size === \"medium\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"xlarge\"]]: size === \"xlarge\",\n [styles[\"xxlarge\"]]: size === \"xxlarge\",\n [styles[\"rtl\"]]: rtl === true\n });\n\n /**\n * Applies dangerouslySetInnerHTML if raw string contains ­, else keeps children intact.\n * @returns React DOM-element.\n */\n const checkShy = () => {\n let foundDangerously = false;\n const shyString = children?.toString() ?? \"\";\n\n if (shyString.indexOf(\"­\") > 0 && forceDangerouslySetInnerHTML) {\n foundDangerously = true;\n }\n\n //prop override?\n if (forceDangerouslySetInnerHTML === true) foundDangerously = true;\n\n if (foundDangerously === true) {\n return (\n \n );\n } else {\n return (\n \n {children}\n \n );\n }\n };\n\n return checkShy();\n }\n);\n\nexport default Text;\n","import { groq } from \"next-sanity\";\n\nexport const pageQuery = (pageName: string) => groq`\n*[_type in [\"${pageName}\"]] {\n ...\n }\n`;\n\nexport const settingsQuery = groq`\n *[_type in [\"siteSettings\"]] {\n header,\n footer {\n footerImage {\n alt,\n \"url\": asset->url,\n \"width\": asset->metadata.dimensions.width,\n \"height\": asset->metadata.dimensions.height\n },\n footerText,\n footerLinks\n },\n defaultVariables,\n modalFreeTextInput,\n modalRating,\n emailScheduling,\n repetitionUnlock,\n languageList\n }\n`;\n\nexport const coursesPageQuery = groq`\n*[_type in [\"coursesPage\"]] {\n ...,\n backgroundImage {\n \"url\": asset->url,\n \"width\": asset->metadata.dimensions.width,\n \"height\": asset->metadata.dimensions.height\n },\n menuLayers[] {\n ...,\n \"image\": image.asset->url,\n \"imageDesktop\": imageDesktop.asset->url,\n },\n explaination {\n explainText,\n \"iconTypes\": [\n {\"icon\": iconFinished.icon, \"text\": iconFinished.text},\n {\"icon\": iconLocked.icon, \"text\": iconLocked.text},\n {\"icon\": iconOngoing.icon, \"text\": iconOngoing.text}\n ]\n }\n}\n`;\n\nexport const menteesPageQuery = groq`\n *[_type in [\"menteesPage\"]] {\n mainPageTitle,\n mainPageDescription,\n noEmployeesMainPageDescription,\n explaination,\n navButtons,\n guide {\n guideTitle,\n guideDescription,\n accordionSections[]{\n \"id\": _key,\n header,\n items[]{\n \"id\": _key,\n header,\n content\n }\n }\n },\n modulesSection {\n moduleTitle,\n moduleDescription,\n explaination {\n explainText,\n \"iconTypes\": [\n {\"icon\": iconFinished.icon, \"text\": iconFinished.text},\n {\"icon\": iconLocked.icon, \"text\": iconLocked.text},\n {\"icon\": iconOngoing.icon, \"text\": iconOngoing.text}\n ]\n },\n btnColumns,\n },\n modal\n }\n`;\n","export * from \"./classes/LearningPathRepetition\";\nexport * from \"./components/accordion/accordion\";\nexport * from \"./components/aside/aside\";\nexport * from \"./components/button/button\";\nexport * from \"./components/combobox/combobox\";\nexport * from \"./components/dropdown/dropdown\";\nexport * from \"./components/errorMessage/errorMessage\";\nexport * from \"./components/footer/footer\";\nexport * from \"./components/freeTextInput/freeTextinput\";\nexport * from \"./components/header/header\";\nexport * from \"./components/header/header.mode\";\nexport * from \"./components/infoMessage/infoMessage\";\nexport * from \"./components/languageSelector/languageSelector\";\nexport * from \"./components/Modal/Modal\";\nexport * from \"./components/notifications/notifications\";\nexport * from \"./components/rating/rating\";\nexport * from \"./components/spinner/spinner\";\nexport * from \"./components/successMessage/successMessage\";\nexport * from \"./components/text/text\";\nexport * from \"./enums/FeedbackMode\";\nexport * from \"./hooks/api\";\nexport * from \"./hooks/authReducer\";\nexport * from \"./hooks/useCourseModal\";\nexport * from \"./hooks/useSCORM\";\nexport * from \"./hooks/useUserCourses\";\nexport * from \"./utils/alertMessage\";\nexport * from \"./utils/alertUtils\";\nexport * from \"./utils/groqQueries\";\nexport * from \"./utils/scormAPI\";\nexport * from \"./utils/validCheck\";\n","export * from './lib/lms';\n","/* eslint-disable @typescript-eslint/ban-types */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport React from \"react\";\n\nexport enum ModalContentType {\n /** Standard text box with title and body (should be default). */\n TEXT = \"text\",\n\n /** Rating box (1-x). */\n NUMBER = \"number\",\n\n /** Input box (feedback). */\n TEXTINPUT = \"textinput\"\n}\nexport interface ModalProps {\n modalHeadline?: string;\n modalText: string;\n modalBtnCancel?: string;\n modalBtnSubmit?: string;\n modalBtnClose?: string;\n toggleModal: Function;\n submitModal: Function;\n exitBtn?: boolean;\n contentBtn?: boolean;\n dualBtn?: boolean;\n bottomBtn?: boolean;\n bottomBtnLabel?: string;\n dualBtnCancel?: string;\n dualBtnSubmit?: string;\n submitBtnStyle?: Record;\n submitBtnInnerStyle?: Record;\n bottomBtnStyle?: Record;\n bottomBtnInnerStyle?: Record;\n cancelBtnStyle?: Record;\n cancelBtnInnerStyle?: Record;\n sizeButton?: \"small\" | \"medium\" | \"large\";\n courseNumber?: number;\n courseTotal?: number;\n completedText?: string;\n modalType?: ModalContentType;\n setting?: any;\n linkBottom?: boolean;\n linkBottomLabel?: string;\n\n /** Callback function to send value to, for instance courses SetFeedbackByIndex(value, 0). */\n storeValueCallback?: Function;\n}\n","export enum HeaderMode {\n PUBLIC = \"public\",\n AUTHENTICATED = \"authenticated\"\n}\n","export enum FeedbackMode {\n /** Closed, not being used (default). If a mode is anything but this, we're assuming we shold be rendering feedback modal. */\n CLOSED = \"closed\",\n\n /** Introduction/first page. */\n INTRO = \"intro\",\n\n /** One question/exercise of a type (text/input, number/rating). */\n QUESTION = \"question\",\n\n /** Summary/end page. */\n SUMMARY = \"summary\"\n}\n","import { useEffect, useState } from \"react\";\n\nimport { TypeCourseData } from \"../utils/TypeCourseData\";\n\ninterface UseCourseModalReturn {\n modalPopUp: boolean;\n selectedCourse: TypeCourseData | null;\n openCourseModal: (course: TypeCourseData) => void;\n clearSelectedCourse: () => void;\n toggleModal: () => void;\n closeModal: () => void;\n}\n\nconst useCourseModal = (): UseCourseModalReturn => {\n const [modalPopUp, setModalPopUp] = useState(false);\n const [selectedCourse, setSelectedCourse] = useState(\n null\n );\n\n const openCourseModal = (course: TypeCourseData): void => {\n setSelectedCourse(course);\n setModalPopUp(true);\n };\n\n const clearSelectedCourse = (): void => {\n setSelectedCourse(null);\n };\n\n const toggleModal = (): void => {\n setModalPopUp(!modalPopUp);\n };\n\n const closeModal = (): void => {\n setModalPopUp(false);\n };\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (modalPopUp && event.key === \"Escape\") {\n toggleModal();\n }\n };\n\n if (typeof document !== \"undefined\") {\n document.addEventListener(\"keydown\", handleKeyDown);\n }\n\n return () => {\n if (typeof document !== \"undefined\") {\n document.removeEventListener(\"keydown\", handleKeyDown);\n }\n };\n }, [modalPopUp, toggleModal]);\n\n return {\n modalPopUp,\n selectedCourse,\n openCourseModal,\n clearSelectedCourse,\n toggleModal,\n closeModal\n };\n};\n\nexport default useCourseModal;\n","export const scormAPI = (cmiData) => {\n //console.log(\"scormAPI 1.2:\", cmiData);\n window[\"API\"] = (function () {\n let data = cmiData;\n return {\n LMSInitialize: function (str = \"\") {\n return \"true\";\n },\n LMSCommit: function () {\n // persist data\n const customEvent = new CustomEvent(\"Commit\", {\n detail: {\n data: data\n }\n });\n document.dispatchEvent(customEvent);\n return \"true\";\n },\n LMSFinish: function () {\n // persist data and close communication\n\n //todo: old code left intact for now\n /*const customEvent = new CustomEvent(\"Finish\", {\n data: data\n });*/\n\n //packed inside detail object to avoid build error\n const customEvent = new CustomEvent(\"Finish\", {\n detail: {\n data: data\n }\n });\n document.dispatchEvent(customEvent);\n return \"true\";\n },\n LMSGetValue: function (model) {\n return data[model] || \"\";\n },\n LMSSetValue: function (model, value) {\n data[model] = value;\n //this.LMSCommit();\n return \"true\";\n },\n LMSGetLastError: function () {\n return \"0\";\n },\n LMSGetErrorString: function (errorCode) {\n return \"No error\";\n },\n LMSGetDiagnostic: function (errorCode) {\n return \"No error\";\n }\n };\n })();\n};\n","import { useCallback, useEffect, useState } from \"react\";\n\nimport { scormAPI } from \"../utils/scormAPI\";\nimport {\n TypeCourseData,\n TypeCourseDataAttempts\n} from \"../utils/TypeCourseData\";\nimport { useAuth, useLMS } from \"./api\";\n\nconst useSCORM = () => {\n const [state, setState] = useState();\n const [totalTime, setTotalTime] = useState(0);\n const [activeAttempt, setActiveAttempt] = useState(null);\n const { createAttempt, getAttempt, updateAttempt } = useLMS();\n const { userId } = useAuth();\n const callback = useCallback((e: any) => {\n setState(e);\n }, []);\n\n /**\n * Default initial SCORM state.\n */\n const NEW_EMPTY_ATTEMPT = {\n \"cmi.core.lesson_location\": \"\",\n \"cmi.core.lesson_status\": \"not attempted\",\n \"cmi.core.lesson_mode\": \"normal\",\n \"cmi.suspend_data\": \"\",\n \"cmi.launch_data\": \"\",\n \"cmi.core.session_time\": \"0000:00:00\",\n \"cmi.core.total_time\": \"0000:00:00\"\n };\n\n const convertCMITimespanToSeconds = (cmiTime = \"0000:00:00\") => {\n const seconds = Number(cmiTime.split(\":\")[2]);\n const minutes = Number(cmiTime.split(\":\")[1]);\n const hours = Number(cmiTime.split(\":\")[0]);\n return hours * 3600 + minutes * 60 + seconds;\n };\n\n const convertSecondsToCMITimespan = (time = 0) => {\n let remainder = 0;\n const hours = (time - (time % 3600)) / 3600;\n remainder = time % 3600;\n const minutes = (remainder - (remainder % 60)) / 60;\n const seconds = remainder % 60;\n const cmiTime = `${String(hours).padStart(4, \"0\")}:${String(\n minutes\n ).padStart(2, \"0\")}:${String(seconds).padStart(2, \"0\")}`; //\"0000:00:00\";\n return cmiTime;\n };\n\n /**\n * Initialize SCORM attempt.\n * Needs serious tweaking.\n */\n async function InitializeSCORM(selectedCourse: TypeCourseData) {\n let attemptObject;\n let lastAttempt: TypeCourseDataAttempts;\n\n //start from scratch, or continue?\n if (selectedCourse.attempts.length === 0) {\n /* console.log(\n \"--------> First attempt, createAttempt: userId=\" +\n userId +\n \", courseid=\" +\n selectedCourse.courseId\n ); */\n attemptObject = await createAttempt(userId, selectedCourse.courseId);\n scormAPI(JSON.parse(JSON.stringify(NEW_EMPTY_ATTEMPT)));\n setActiveAttempt(attemptObject.data);\n setTotalTime(0);\n } else {\n //continue, in this case never restart or create another attempt but make use of the one we have\n lastAttempt = selectedCourse.attempts[selectedCourse.attempts.length - 1];\n attemptObject = await getAttempt(lastAttempt.id);\n //console.log(\"initializeSCORM 1: attemptObject=\", attemptObject);\n\n if (attemptObject.data?.attributes?.data != null) {\n //continue/resume\n //console.log(\"--------> RESUME FROM EXISTING\");\n scormAPI(attemptObject.data?.attributes?.data);\n if (\n attemptObject.data?.attributes?.data[\"cmi.core.total_time\"] != null\n ) {\n setTotalTime(\n convertCMITimespanToSeconds(\n attemptObject.data?.attributes?.data[\"cmi.core.total_time\"]\n )\n );\n } else {\n setTotalTime(0);\n }\n setActiveAttempt(attemptObject.data);\n } else {\n /* console.log(\n \"--------> ATTEMPTS MADE BUT NO DATA? -> NEW_EMPTY_ATTEMPT\"\n ); */\n attemptObject.data.attributes.data = {};\n scormAPI(JSON.parse(JSON.stringify(NEW_EMPTY_ATTEMPT)));\n setActiveAttempt(attemptObject.data);\n setTotalTime(0);\n }\n }\n }\n\n /**\n * Commit SCORM-data in-flight.\n * Note uppercase to avoid runtime errors/failed commits.\n * @todo Ideally needs a rewrite -> standardized logger.\n */\n function SCORMCommit({ detail }) {\n if (!activeAttempt) {\n return;\n }\n if (detail.data == null) {\n return;\n }\n\n // oppdater total tid, basert på opprinnelig total tid og nåværende session tid\n const session_CMITime = detail.data[\"cmi.core.session_time\"];\n const new_total_seconds =\n totalTime + convertCMITimespanToSeconds(session_CMITime);\n const new_total_CMITime = convertSecondsToCMITimespan(new_total_seconds);\n let status = \"\";\n let result = null;\n\n //console.log(\"SCORMCommit: activeAttempt=\", activeAttempt);\n\n /*if (activeAttempt?.attributes?.status) {\n status = activeAttempt.attributes.status.toUpperCase();\n }*/\n\n //update from live detail input instead of relying on activeattempt\n status = detail.data[\"cmi.core.lesson_status\"].toUpperCase();\n\n //passed or not?\n if (activeAttempt?.attributes?.result) {\n result = activeAttempt.attributes.result.toUpperCase();\n }\n\n // hvis tidligere fullført, sett lesson_status='completed' uansett\n //commented out for now, shouldn't be relying on non-course data\n /*if (\n String(activeAttempt.attributes.status).toLowerCase() ===\n CourseStatus.COMPLETED\n ) {\n detail.data[\"cmi.core.lesson_status\"] =\n CourseStatus.COMPLETED.toUpperCase();\n status = CourseStatus.COMPLETED.toUpperCase();\n result = CourseStatus.PASSED.toUpperCase();\n }*/\n\n //need to set completedDate: issue passed if completed to do so\n if (status == \"COMPLETED\") result = \"PASSED\";\n\n // oppdatert attemptet\n setActiveAttempt((activeAttempt) => {\n return {\n ...activeAttempt,\n attributes: {\n ...activeAttempt.attributes,\n data: { ...detail.data, \"cmi.core.total_time\": new_total_CMITime },\n status: status,\n result: result,\n totalTime: String(new_total_seconds)\n }\n };\n });\n }\n\n /**\n * Commits (saves/applies) user course attempt object to LMS.\n * @param currentAttempt\n */\n async function UpdateAttempt(currentAttempt: any) {\n if (currentAttempt != null) {\n if (currentAttempt.id && currentAttempt.attributes) {\n //console.log(\"useSCORM.UpdateAttempt: currentAttempt=\", currentAttempt);\n await updateAttempt(currentAttempt.id, currentAttempt.attributes);\n }\n }\n }\n\n useEffect(() => {\n document?.addEventListener(\"Commit\", callback);\n return function cleanup() {\n document?.removeEventListener(\"Commit\", callback);\n };\n }, []);\n\n /**\n * SCORM logger commit on change.\n */\n useEffect(() => {\n if (!state) {\n return;\n }\n\n SCORMCommit(state);\n }, [state]);\n\n return {\n state,\n NEW_EMPTY_ATTEMPT,\n convertCMITimespanToSeconds,\n convertSecondsToCMITimespan,\n totalTime,\n setTotalTime,\n activeAttempt,\n setActiveAttempt,\n InitializeSCORM,\n SCORMCommit,\n UpdateAttempt\n };\n};\n\nexport default useSCORM;\n","import {\n CourseStatus,\n LearningpathUserStatus,\n ScheduleEmailsObject,\n TypeCourseData,\n UnlockCourseMethod\n} from \"@utils/TypeCourseData\";\nimport LZString from \"lz-string\";\nimport { useRouter } from \"next/router\";\nimport { useEffect, useState } from \"react\";\n\nimport { LearningPathRepetition } from \"../lms\";\nimport { useAuth, useCourses, useEmailSending, useLMS, useUsers } from \"./api\";\n\n/**\n * Note: if problems importing this, put it at the bottom of the imports (import order matters).\n */\nconst useUserCourses = ({\n forwardDiplomaToMentor = false,\n scheduleEmails,\n unlockCourseMethod = UnlockCourseMethod.UNLOCK_ALL_AFTER_FIRST_COMPLETED,\n hasFeedback = false,\n hasRepetition = true,\n hasMultipleLanguages = false\n}: {\n forwardDiplomaToMentor?: boolean;\n scheduleEmails?: ScheduleEmailsObject;\n unlockCourseMethod?: UnlockCourseMethod;\n hasFeedback?: boolean;\n hasRepetition?: boolean;\n hasMultipleLanguages?: boolean;\n}) => {\n const { courses } = useCourses();\n const router = useRouter();\n const { userId } = useAuth();\n const { scheduleEmail } = useEmailSending();\n const { getUserLearningpathWithStatuses, getUserCourses, getUser } =\n useUsers();\n const {\n getCourseUserStatus,\n forwardDiploma,\n getDiplomasSent,\n getLearningpaths\n } = useLMS();\n\n const [isLoading, setIsLoading] = useState(false);\n const [parsedCourses, setParsedCourses] = useState(Array);\n const [userLearningpathStatus, setUserLearningpathStatus] =\n useState();\n const [repUserLearningpathStatus, setRepUserLearningpathStatus] =\n useState();\n\n /**\n * Parses incoming coursedata into local structure.\n */\n async function CourseParseData(\n courseData: any,\n learningPathCourses: any\n ): Promise {\n const courseList: Array = [];\n\n let correctCourses: any;\n // Sort the learning path courses by their order and find correct language\n if (hasMultipleLanguages && router.locale !== router.defaultLocale) {\n correctCourses = learningPathCourses?.map((lpCourse: any) => {\n return courses?.data?.find((course: any) => {\n if (course.attributes.locale === router.locale) {\n return course.attributes?.courseId === lpCourse.id;\n }\n });\n });\n } else {\n correctCourses = learningPathCourses?.map((lpCourse: any) => {\n return courses?.data?.find((course: any) => course.id === lpCourse.id);\n });\n }\n\n for (let i = 0; i < correctCourses?.length; i++) {\n const courseId = correctCourses[i].id;\n const learningPathCourseId = learningPathCourses[i].id;\n\n // Find the corresponding course in courseData\n const courseIndex = courseData.data.findIndex(\n (course: any) => course.id === learningPathCourseId\n );\n\n const newCourseData: TypeCourseData = new TypeCourseData();\n const foundCourse = courses.data.find(\n (course: any) => course.id === courseId\n );\n\n //parse course data into local structure\n newCourseData.courseId = String(courseData.data[courseIndex].id);\n newCourseData.type = String(courseData.data[courseIndex].type);\n newCourseData.completedDate = String(\n courseData.data[courseIndex].meta.completedDate\n );\n newCourseData.attempts = courseData.data[courseIndex].meta.attempts;\n\n newCourseData.title = String(foundCourse.attributes.title);\n newCourseData.locale = String(foundCourse.attributes.locale);\n newCourseData.launchURL = String(foundCourse.attributes.launch?.url);\n newCourseData.description = String(foundCourse.attributes.description);\n newCourseData.link = String(foundCourse.links.self);\n\n //defaults\n newCourseData.unlockTimeMilliseconds = 0;\n newCourseData.hidden = false;\n newCourseData.courseCompleted = undefined;\n newCourseData.courseTotal = undefined;\n\n //completion status of last known attempt\n if (newCourseData.attempts.length > 0) {\n const foundStatus =\n newCourseData.attempts[newCourseData.attempts.length - 1].status;\n\n //always get lastupdated, regardless of completion status\n newCourseData.lastUpdated =\n newCourseData.attempts[newCourseData.attempts.length - 1].updatedAt;\n\n //here we're assuming the last attempt is always the most recent one, regardless of date\n //even if this isn't found, this will (and should!) get updated during lms commits\n newCourseData.mostRecentAttemptID =\n newCourseData.attempts[newCourseData.attempts.length - 1].id;\n\n //decompress and parse suspend_data using same attempt if found, and parse it\n if (\n newCourseData.attempts[newCourseData.attempts.length - 1].data !=\n null &&\n newCourseData.attempts[newCourseData.attempts.length - 1].data[\n \"cmi.suspend_data\"\n ] != undefined\n ) {\n const decompressedSuspendData = JSON.parse(\n LZString.decompressFromBase64(\n newCourseData.attempts[newCourseData.attempts.length - 1].data[\n \"cmi.suspend_data\"\n ]\n )\n );\n newCourseData.mostRecentSuspendData = decompressedSuspendData;\n\n //make note of completed and total\n if (decompressedSuspendData?.i !== null) {\n newCourseData.courseTotal = decompressedSuspendData?.m.length;\n }\n if (decompressedSuspendData?.m !== null) {\n newCourseData.courseCompleted = decompressedSuspendData?.m.filter(\n (module) => module.s == CourseStatus.COMPLETED\n ).length;\n }\n }\n\n if (foundStatus.toLowerCase() === CourseStatus.COMPLETED) {\n newCourseData.status = CourseStatus.COMPLETED;\n } else {\n newCourseData.status = CourseStatus.INCOMPLETE;\n }\n } else {\n newCourseData.status = CourseStatus.NOTATTEMPTED;\n newCourseData.lastUpdated = \"\";\n }\n\n if (hasFeedback) {\n //course feedback/evaluation from server\n newCourseData.feedback = foundCourse.attributes?.meta?.feedback;\n }\n\n courseList.push(newCourseData);\n }\n\n //only first one unlocked, unlock all after first one completed\n if (courseList[0].status !== CourseStatus.COMPLETED) {\n if (courseList[0].status === CourseStatus.INCOMPLETE) {\n courseList[0].currentGoToItemId = courseList[0].courseId;\n }\n //start on the second one in array\n for (let i = 1; i < courseList.length; i++) {\n if (courseList[i].status !== CourseStatus.COMPLETED) {\n courseList[i].status = CourseStatus.LOCKED;\n courseList[i].currentGoToItemId = \"\";\n }\n } //find the last updated attempt and add currentGoToItem to that\n } else {\n let mostRecentIndex = 1;\n for (let i = 2; i < courseList.length; i++) {\n if (\n courseList[i].status !== CourseStatus.COMPLETED &&\n courseList[i]?.lastUpdated > courseList[mostRecentIndex]?.lastUpdated\n ) {\n mostRecentIndex = i;\n }\n }\n courseList.forEach((dateObj, index) => {\n if (index === mostRecentIndex) {\n dateObj.currentGoToItemId = dateObj.courseId;\n } else {\n dateObj.currentGoToItemId = \"\";\n }\n });\n }\n\n if (unlockCourseMethod === UnlockCourseMethod.UNLOCK_ONE_AT_A_TIME) {\n if (courseList[0] && courseList[0].status === CourseStatus.COMPLETED) {\n for (let i = 1; i < courseList.length - 1; i++) {\n if (courseList[i].status !== CourseStatus.COMPLETED) {\n courseList[i + 1].status = CourseStatus.LOCKED;\n }\n }\n }\n }\n\n return courseList;\n }\n\n /**\n * Detect amount of courses that, at this time, is unlocked.\n * Anything with hidden=true is not considered unlocked.\n * @param courseList List of parsed courses (parsedCourses for instance)\n * @returns 1-based count.\n */\n function DetectAmountUnlockedCourses(courseList: TypeCourseData[]): number {\n let foundUnlocked = 0;\n const currentTime = Date.now();\n\n for (let i = 0; i < courseList.length; i++) {\n if (\n courseList[i].unlockTimeMilliseconds === 0 ||\n currentTime >= courseList[i].unlockTimeMilliseconds\n ) {\n if (courseList[i].hidden === false) foundUnlocked++;\n }\n }\n return foundUnlocked;\n }\n\n /**\n * Fetches courses for user to parse into menu structure and render.\n * Cannot depend on cacheing for this to work reliably.\n * This includes repetition modules, which get defined as such to differentiate them from the primary learning path.\n * @todo In total there's at least 3 + (amount courses) calls to DB, all sync/await. That ain't ideal.\n */\n async function GetParsedUserCourses(\n newLearningPathID: string,\n repetitionTypes?: Array\n ): Promise {\n //start showing modal loading, this could take a few seconds...\n setIsLoading(true);\n\n const currentUserCourses = await getUserCourses(userId);\n const learningPathStatus = await getUserLearningpathWithStatuses({\n userId,\n learningpathId: newLearningPathID\n });\n setUserLearningpathStatus(learningPathStatus);\n\n /** List of parsed course data for user, which we can use to render the menu. */\n let courseList: Array = [];\n\n //first the primary learning path\n courseList = await CourseParseData(\n currentUserCourses,\n learningPathStatus.meta.courses\n );\n\n //apply feedback answers to each courseid in courselist\n if (hasFeedback) {\n await AddFeedbackToCourses(courseList);\n }\n if (hasRepetition && repetitionTypes) {\n courseList = await AddRepetition(\n learningPathStatus,\n courseList,\n currentUserCourses,\n repetitionTypes\n );\n }\n\n //console.log(\"GetUserCoures...courses=\", courses,\", currentUserCourses=\",currentUserCourses,\", learningpathStatus=\",learningpathStatus);\n\n //end showing modal loading\n setIsLoading(false);\n\n /*console.log(\n \"GetParsedUserCourses: courseList=\",\n courseList,\n \", repetitionTypes=\",\n repetitionTypes\n );*/\n return courseList;\n }\n\n async function AddRepetition(\n learningPathStatus: any,\n courseList: TypeCourseData[],\n currentUserCourses: any,\n repetitionTypes: LearningPathRepetition[]\n ) {\n let repetitionStartTime = new Date(\n learningPathStatus.learningpath_status.date\n ).getTime();\n //next check for/parse repetition modules and if any, append to list regardless of unlock time\n //override if nan or path not yet completed to always hide...\n if (\n isNaN(repetitionStartTime) ||\n learningPathStatus.learningpath_status.status !== \"COMPLETE\"\n )\n repetitionStartTime = -1;\n\n courseList = courseList.concat(\n await ParseRepetitionCourses(\n currentUserCourses,\n repetitionStartTime,\n repetitionTypes,\n learningPathStatus\n )\n );\n /*console.log(\n \"GetParsedUserCourses: courseList=\",\n courseList,\n \", repetitionTypes=\",\n repetitionTypes\n );*/\n return courseList;\n }\n\n async function AddFeedbackToCourses(courseList: TypeCourseData[]) {\n const courseStatusPromises = [];\n for (let i = 0; i < courseList.length; i++) {\n courseStatusPromises.push(\n getCourseUserStatus(userId, courseList[i].courseId)\n );\n }\n try {\n const newCourseStatuses = await Promise.all(courseStatusPromises);\n for (let i = 0; i < newCourseStatuses.length; i++) {\n const newCourseStatus = newCourseStatuses[i];\n if (newCourseStatus.data != null && newCourseStatus.data.meta != null) {\n for (let j = 0; j < newCourseStatus.data.meta.feedback.length; j++) {\n const foundFeedback: object = newCourseStatus.data.meta.feedback[j];\n\n //copy value to zero-based index of 1-based id\n courseList[i].feedback[foundFeedback[\"id\"] - 1].userAnswer =\n foundFeedback[\"answer\"];\n }\n }\n }\n } catch (error) {\n console.log(error);\n }\n }\n\n /**\n * Check if its time to add rep modules to courseList\n * Parses repetition modules, sets unlock timestamps, and returns new array of TypeCourseData which can be appended.\n * @param currentUserCourses getUserCourses object.\n * @param lpCompletedMilliseconds Primary learning path completed date in milliseconds. Used to set unlock time/millis for repetition modules. If this is -1, we force hidden=true.\n * @param repetitionTypes Sanity array of {repID:string, repOffsetMonths:number, repOffsetDays:number}. This should ideally be slightly relaxed values.\n * @returns Parsed repetition courses.\n * @todo Move this out.\n */\n async function ParseRepetitionCourses(\n currentUserCourses,\n lpCompletedMilliseconds,\n repetitionTypes: Array,\n learningPathStatus\n ) {\n const learningPaths = await getLearningpaths();\n const repLearningPaths = learningPaths.data.filter(\n (learningPath: any) => learningPath.attributes?.meta?.type === \"rep\"\n );\n let newParsedRepetitionStatuses = [];\n\n //get status for each repetition learningpath, parse it\n for (let i = 0; i < repLearningPaths.length; i++) {\n const newStatus = await getUserLearningpathWithStatuses({\n userId,\n learningpathId: repLearningPaths[i].id\n });\n\n setRepUserLearningpathStatus(newStatus);\n\n //parse it\n const newCourseList = await CourseParseData(\n currentUserCourses,\n newStatus.meta.courses\n );\n\n //mark as repetition by applying an unlock timestamp based off lpCompletedMilliseconds\n //if this is invalid, or 0, we assume we'll default them to hidden instead\n for (let j = 0; j < repetitionTypes.length; j++) {\n if (\n repLearningPaths[i].attributes.meta.shortname.no ===\n repetitionTypes[j].unlockID\n ) {\n //offset completed time with repetition type detected\n //note that offsetting months past its bounds increases year for instance (12 months as 0-based input is allowed, adding one year and 1 month)\n //also note that ideally (in a practical world) we'll set the unlock hour and seconds of the day to the start of the day to incresase chances of triggering event\n const newTime = new Date(lpCompletedMilliseconds);\n\n //manually force 00:00 to mark beginning of the day if months and days are set to 0\n //this way, someone might have completed 1600 and have something unlocked at the beginning of \"next unlock day\"\n if (\n repetitionTypes[j].unlockOffsetMonths !== 0 &&\n repetitionTypes[j].unlockOffsetDays !== 0\n ) {\n newTime.setHours(0, 0, 0, 0);\n }\n\n newTime.setMonth(\n newTime.getMonth() + repetitionTypes[j].unlockOffsetMonths\n );\n newTime.setDate(\n newTime.getDate() + repetitionTypes[j].unlockOffsetDays\n );\n newTime.setHours(\n newTime.getHours() + repetitionTypes[j].unlockOffsetHours\n );\n newTime.setMinutes(\n newTime.getMinutes() + repetitionTypes[j].unlockOffsetMinutes\n );\n\n newCourseList.forEach((item) => {\n if (\n learningPathStatus?.learningpath_status?.status === \"COMPLETE\" &&\n newStatus?.learningpath_status?.status === \"COMPLETE\"\n ) {\n item.hidden = false;\n }\n //fetch month value, and convert into milliseconds, then offset with input\n else if (lpCompletedMilliseconds === -1) {\n item.hidden = true;\n } else {\n item.unlockTimeMilliseconds = newTime.getTime();\n console.log(\n repetitionTypes[j].unlockID +\n \"=\" +\n new Date(item.unlockTimeMilliseconds)\n );\n }\n });\n }\n }\n\n newParsedRepetitionStatuses =\n newParsedRepetitionStatuses.concat(newCourseList);\n }\n\n return newParsedRepetitionStatuses;\n }\n\n /**\n * Trigger diploma send from server to user email.\n * Typically we'd trigger this once all courses have been completed.\n */\n async function CheckDiplomaSend(\n userObject: any,\n currentCourseList: TypeCourseData[]\n ) {\n const foundAllCompleted = currentCourseList\n .filter((item) => item.unlockTimeMilliseconds === 0)\n .every((course) => course.status === CourseStatus.COMPLETED);\n\n if (!foundAllCompleted || userObject === null) return;\n\n const diplomasSent = await getDiplomasSent({ userId });\n\n /*console.log(\n \"CheckDiplomaSend: currentCourseList=\",\n currentCourseList,\n \", diplomasSent=\",\n diplomasSent,\n \", foundAllCompleted=\",\n foundAllCompleted,\n \", diplomasSent.length=\",\n diplomasSent.length\n );*/\n\n //console.log(\"user=\", user);\n\n if (diplomasSent.data.length <= 0) {\n //first send diploma to user\n try {\n /*console.log(\n \"CheckDiplomaSend: 1/2 all detected as completed, issue senddiploma to user! userId=\" +\n userId +\n \", learningpathId=\" +\n userObject.userLearningpath.id +\n \", to (mentor)=\" +\n userObject.email\n );*/\n await forwardDiploma({\n userId,\n learningpathId: userObject.userLearningpath.id,\n to: userObject.email,\n finished: true\n });\n\n if (scheduleEmails) {\n scheduleEmails.scheduleEmailInfo.forEach((element) => {\n ScheduleEmails(userId, element.months, element.typeOfEmail);\n });\n }\n //testing purposes\n //await scheduleEmail(userId, 100, \"repetition3\");\n //await scheduleEmail(userId, 3700, \"repetition6\");\n\n if (forwardDiplomaToMentor) {\n ForwardDiplomaToMentor(userObject);\n }\n } catch (error) {\n console.warn(\"courses.CheckDiplomaSend forwardDiploma failed\");\n }\n } else if (foundAllCompleted === true) {\n //console.log(\"All completed, and already issued diploma: ignoring\");\n }\n }\n\n async function ScheduleEmails(\n userId: string,\n futureMonths: number,\n typeOfEmail: string\n ) {\n //this is the real\n await scheduleEmail(\n userId,\n calculateFutureSeconds(futureMonths),\n typeOfEmail\n );\n //testing purposes\n //await scheduleEmail(userId, 100, \"repetition3\");\n //await scheduleEmail(userId, 3700, \"repetition6\");\n }\n\n async function ForwardDiplomaToMentor(userObject: any) {\n const forwardUserId =\n userObject.meta.hasMentor !== \"MANGLER MENTOR\"\n ? userObject.meta.hasMentor\n : userObject.styrerId ?? null;\n\n if (forwardUserId !== null) {\n const userForward = await getUser(forwardUserId);\n const forwardEmail = userForward.data.attributes.email;\n //then send finished to mentor (finished: false)\n /*console.log(\n \"CheckDiplomaSend: 2/2 all detected as completed, issue senddiploma to mentor! userId=\" +\n userId +\n \", learningpathId=\" +\n userObject.userLearningpath.id +\n \", to (mentor/styrer)=\" +\n forwardEmail +\n \", userMentor=\",\n userForward\n );*/\n await forwardDiploma({\n userId,\n learningpathId: userObject.userLearningpath.id,\n to: forwardEmail,\n finished: false\n });\n\n if (scheduleEmails && scheduleEmails.mentorScheduleEmailInfo.length > 0) {\n scheduleEmails.mentorScheduleEmailInfo.forEach((element) => {\n ScheduleEmails(forwardUserId, element.months, element.typeOfEmail);\n });\n //testing purposes\n //await scheduleEmail(forwardUserId, 100, \"repetitionAdded\");\n //await scheduleEmail(forwardUserId, 3700, \"repetitionAdded\");\n }\n }\n }\n\n function calculateFutureSeconds(numberOfMonths: number): number {\n const currentDate = new Date(); // Get the current date and time\n const futureDate = new Date(\n currentDate.getFullYear(),\n currentDate.getMonth() + numberOfMonths,\n currentDate.getDate(),\n currentDate.getHours(),\n currentDate.getMinutes(),\n currentDate.getSeconds()\n );\n\n const currentTimestamp = currentDate.getTime();\n const futureTimestamp = futureDate.getTime();\n\n const secondsDifference = Math.floor(\n (futureTimestamp - currentTimestamp) / 1000\n );\n\n return secondsDifference;\n }\n\n useEffect(() => {\n //return function cleanup() {};\n }, []);\n\n return {\n TypeCourseData,\n CourseParseData,\n CourseStatus,\n DetectAmountUnlockedCourses,\n GetParsedUserCourses,\n ParseRepetitionCourses,\n isLoading,\n setIsLoading,\n parsedCourses,\n setParsedCourses,\n CheckDiplomaSend,\n userLearningpathStatus,\n repUserLearningpathStatus\n };\n};\n\nexport default useUserCourses;\n","/**\n * Valid course statuses.\n */\nexport enum CourseStatus {\n COMPLETED = \"completed\",\n INCOMPLETE = \"incomplete\",\n NOTATTEMPTED = \"notattempted\",\n LOCKED = \"locked\",\n PASSED = \"passed\"\n}\n\n/**\n * Valid unlock course methods to send in.\n */\nexport enum UnlockCourseMethod {\n UNLOCK_ALL_AFTER_FIRST_COMPLETED = \"unlock_all_after_firs_completed\",\n UNLOCK_ONE_AT_A_TIME = \"unlock_one_at_a_time\"\n}\n\n/**\n * Valid course data attempts - data we get from server response, mapped to this type.\n */\nexport interface TypeCourseDataAttempts {\n courseId: string;\n createdAt: string;\n updatedAt: string;\n id: string;\n result: string;\n status: string;\n totalTime: number;\n userId: string;\n data: any;\n}\n\nexport interface ScheduleEmailsObject {\n scheduleEmailInfo: Array;\n mentorScheduleEmailInfo?: Array;\n}\n\nexport interface EmailInfo {\n months: number;\n typeOfEmail: string;\n}\n\nexport interface LearningpathUserStatus {\n id: string;\n learningpath_status: LearningpathStatus;\n meta: {\n courses: Array;\n };\n title: string;\n type: string;\n}\n\nexport interface LearningpathStatus {\n date: string;\n displayedToUser: boolean;\n status: string;\n}\n\nexport interface Courses {\n content: object;\n course_status?: {\n status: CourseStatus;\n date: string;\n };\n description: string;\n id: string;\n launch: {\n url: string;\n };\n locale: string;\n meta: object;\n tags: Array;\n title: string;\n versions?: Array;\n}\n/**\n *\n */\nexport interface TypeCourseDataFeedback {\n /** Server/portal zero-based course index for this specific feedback. */\n id: number;\n\n /** Text/question. */\n text: string;\n\n /** Type of value (number, string). */\n type: string;\n\n /** User input for that specific feedback. Blank by default. */\n userAnswer: string;\n}\n\n/**\n * suspend_data \"m\" / module status.\n */\n/*export class TypeCourseDataStatusModule {\n id: string;\n target: string;\n status: CourseStatus;\n}*/\n\n/**\n * suspend_data \"i\" / item status.\n */\n/*export class TypeCourseDataStatusItem {\n id: string;\n status: string;\n}*/\n\n/**\n * suspend_data needs to be decompressed first, then parsed.\n * There are two objects: m[] (module status as a whole) and i[] (item status).\n */\n/*export interface TypeCourseDataSuspendData {\n \n //Module status per module. Used by course menu to reflect individual module status per \"button\".\n statusModules: Array;\n \n //Individual item statuses.\n statusItems: Array;\n}*/\n\n/**\n * Valid course data - data we get from server response, mapped to this class, and some more for cacheing.\n */\nexport class TypeCourseData {\n courseId: string;\n attempts: Array;\n /**\n * This is normally undefined until first attempt is kicked into gear and commits start comming in.\n * This can then be used to couple feedback onto that same attempt ID.\n * */\n mostRecentAttemptID: string;\n mostRecentSuspendData: object;\n completedDate: string;\n lastUpdated: string;\n type: string;\n title: string;\n launchURL: string;\n description: string;\n locale: string;\n link: string;\n status: CourseStatus;\n feedback: TypeCourseDataFeedback[];\n courseCompleted: number;\n courseTotal: number;\n currentGoToItemId: string;\n\n /**\n * For repetition modules we need to define unlock millis during parse (3 months since learning path was completed etc).\n * We can assume a pending/open repetition or \"special\" module has this set, and everything else has this 0.\n * This starts off as an offset, then gets calculated into actual time for direct testing.\n * */\n unlockTimeMilliseconds: number;\n\n /**\n * Hide from render/menu.\n * This might for instance be a repetition module for which primary learning path has no COMPLETE state yet.\n */\n hidden: boolean;\n}\n","import { useState } from \"react\";\n\nimport { AlertMessage, AlertType } from \"./alertUtils\";\n\n//move to hooks?\nexport function useAlert(): [\n AlertMessage | undefined,\n (\n newTitle: string,\n newBody: string,\n newType: AlertType,\n errorInputIds?: string[]\n ) => void,\n () => void\n] {\n const [alertMessage, setAlertMessage] = useState();\n\n /**\n * Clears alert message.\n */\n function clearAlert() {\n setAlertMessage({\n alertTitle: \"\",\n alertBody: \"\",\n alertType: AlertType.ERROR\n });\n }\n\n /**\n * Sets new alert message (error, info etc).\n * @param newTitle Optional title of error.\n * @param newBody Body/main text.\n * @param newType AlertType.* (ERROR).\n * @param errorInputIds id of the input field to mark it, optional\n */\n function setAlert(\n newTitle: string,\n newBody: string,\n newType: AlertType,\n errorInputIds?: string[]\n ) {\n setAlertMessage({\n alertTitle: newTitle,\n alertBody: newBody,\n alertType: newType,\n errorInputIds: errorInputIds\n });\n }\n\n return [alertMessage, setAlert, clearAlert];\n}\n","/**\n * Generic alert message object for warnings, info etc.\n */\nexport type AlertMessage = {\n /** Title/header of info message. */\n alertTitle: string;\n\n /** Body/text of info message. */\n alertBody: string;\n\n /** Type of info message. */\n alertType: AlertType;\n\n /** Field of the error message, optional */\n errorInputIds?: string[];\n};\n\n/**\n * Generic alert types.\n */\nexport enum AlertType {\n ERROR = \"alerterror\",\n SUCCESS = \"alertsuccess\",\n WARNING = \"alertwarning\",\n INFO = \"alertinfo\"\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"modal\":\"Modal_modal__alDyY\",\"modalOverlay\":\"Modal_modalOverlay__IG92c\",\"modalContent\":\"Modal_modalContent__3Ughs\",\"modalExitContainer\":\"Modal_modalExitContainer__FE6Yj\",\"modalExitBtn\":\"Modal_modalExitBtn__SQ9Fk\",\"modalTextContainer\":\"Modal_modalTextContainer__EYUV1\",\"heading\":\"Modal_heading__WfIC_\",\"text\":\"Modal_text__nh3QG\",\"modalStatusNumbers\":\"Modal_modalStatusNumbers__kKbB3\",\"statusNumbers\":\"Modal_statusNumbers__CxEKr\",\"modalBtnContainer\":\"Modal_modalBtnContainer__CQEko\",\"modalLinkTxt\":\"Modal_modalLinkTxt__QnmgV\",\"modalBottomContainer\":\"Modal_modalBottomContainer__FMOid\",\"noFocusVisible\":\"Modal_noFocusVisible__fD11l\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"accordion\":\"accordion_accordion__gqw6M\",\"item\":\"accordion_item__gvQR5\",\"header\":\"accordion_header__vTrZE\",\"buttonTitle\":\"accordion_buttonTitle__TYlfZ\",\"content\":\"accordion_content__8tV4I\",\"open\":\"accordion_open__K6Fu6\",\"close\":\"accordion_close__5156g\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"btn\":\"button_btn__Jgacf\",\"innerBtn\":\"button_innerBtn__cjE55\",\"nohover\":\"button_nohover__aUQ_v\",\"primary\":\"button_primary__9GBot\",\"secondary\":\"button_secondary__sEPlp\",\"ghost\":\"button_ghost__3OG_r\",\"negative\":\"button_negative__l_Wnx\",\"header\":\"button_header__a_k3x\",\"headerClose\":\"button_headerClose__f12ma\",\"accordion\":\"button_accordion__RHJn1\",\"aside\":\"button_aside__BLQkH\",\"link\":\"button_link__sAmM6\",\"xsmall\":\"button_xsmall__MctN0\",\"small\":\"button_small__6ty7E\",\"medium\":\"button_medium__DOw2e\",\"large\":\"button_large__TMxQ2\",\"full\":\"button_full__9NcAq\",\"long\":\"button_long__ecUx9\",\"correct\":\"button_correct__J7lNa\",\"incorrect\":\"button_incorrect__1o_IA\",\"open\":\"button_open__jwXLq\",\"flex\":\"button_flex__uhggm\",\"rtl\":\"button_rtl__ypF7b\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"errorMessageBox\":\"errorMessage_errorMessageBox__ujyb_\",\"icon\":\"errorMessage_icon__IO2og\",\"message\":\"errorMessage_message__EgsMG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"footer\":\"footer_footer__UuScw\",\"containerLogo\":\"footer_containerLogo__jxzAB\",\"containerText\":\"footer_containerText___Lm4_\",\"containerLinks\":\"footer_containerLinks__i6gEn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"freeTextInput_container__OB03m\",\"textInputContainer\":\"freeTextInput_textInputContainer__VRNnB\",\"innerContainer\":\"freeTextInput_innerContainer__z82Zf\",\"inputText\":\"freeTextInput_inputText__pZcnu\",\"textareaWrapper\":\"freeTextInput_textareaWrapper__XHZd_\",\"characterCounter\":\"freeTextInput_characterCounter__dKUUz\",\"characterCounterError\":\"freeTextInput_characterCounterError__851IT\",\"instruction\":\"freeTextInput_instruction__lAc1X\",\"buttonContainer\":\"freeTextInput_buttonContainer___SrQf\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"headerPublic\":\"header_headerPublic__Oh2ZH\",\"linkAndLanguage\":\"header_linkAndLanguage__VG9vt\",\"headerAuthenticated\":\"header_headerAuthenticated__0HrOI\",\"top-row\":\"header_top-row__QawIz\",\"open\":\"header_open__U6yyj\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"language_selector\":\"languageSelector_language_selector__nzns6\",\"language_icon\":\"languageSelector_language_icon__U6aGF\",\"textandicon\":\"languageSelector_textandicon__1dQbz\",\"language_options\":\"languageSelector_language_options__udwDm\",\"language_option\":\"languageSelector_language_option__22Fyd\",\"selected\":\"languageSelector_selected__QrgoH\",\"selectedNoIcon\":\"languageSelector_selectedNoIcon__M7dxy\",\"isOpen\":\"languageSelector_isOpen__DfG4q\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"notifications\":\"notifications_notifications__y67if\",\"notifications-background\":\"notifications_notifications-background__XQsLU\",\"notifications-foreground\":\"notifications_notifications-foreground__A9E2T\",\"notifications-content\":\"notifications_notifications-content__kU5HG\",\"counter\":\"notifications_counter__GBJO8\",\"title\":\"notifications_title__ty6Ul\",\"streak\":\"notifications_streak__8Q0pA\",\"hidden\":\"notifications_hidden__yfLjA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"rating_container__s__fH\",\"ratingContainer\":\"rating_ratingContainer__1ES_6\",\"ratingQuestionText\":\"rating_ratingQuestionText__6JDpP\",\"valueTextContainer\":\"rating_valueTextContainer__s6Udj\",\"valueContainer\":\"rating_valueContainer___BGKE\",\"valueSummary\":\"rating_valueSummary__xH1z9\",\"ratingValues\":\"rating_ratingValues__a_yHB\",\"inputValues\":\"rating_inputValues__PF4R6\",\"instructionContainer\":\"rating_instructionContainer__Jj3ZN\",\"buttonContainer\":\"rating_buttonContainer__Cj05_\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"loader\":\"spinner_loader__fVFjA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"txt\":\"text_txt__C0ogB\",\"xxsmall\":\"text_xxsmall__G2HhD\",\"xsmall\":\"text_xsmall__Q_6uK\",\"small\":\"text_small__1ktHs\",\"medium\":\"text_medium___fpLU\",\"large\":\"text_large__Cw6aY\",\"xlarge\":\"text_xlarge__2CvuR\",\"xxlarge\":\"text_xxlarge__4fhEt\",\"rtl\":\"text_rtl__4SmT3\"};"],"names":["_circle","_path","_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","__webpack_exports__","Z","props","react__WEBPACK_IMPORTED_MODULE_0__","createElement","xmlns","width","height","fill","cx","cy","r","stroke","strokeLinecap","strokeLinejoin","strokeWidth","d","icon_expand_path","_g","icon_exit_path","menu_close_path","exmark_path","icon_back_path","menu_open_path","icon_language_default_path","menu_close_modal_path","AccordionItemContext","createContext","AccordionItem","forwardRef","param","ref","children","open","defaultOpen","id","accordionContext","useContext","AccordionContext","internalOpen","setInternalOpen","useState","_jsx","div","className","styles","Provider","value","toggleOpen","undefined","iOpen","AccordionContent","runningTimeoutAutofocus","rest","context","console","error","contentClass","classNames","refContainer","useRef","FocusTTS","current","focus","preventScroll","useEffect","clearTimeoutID","clearTimeout","setTimeout","tabIndex","icon_collapse","react","icon_expand_extends","icon_expand","AccordionHeader","contentId","onClick","itemContext","aria-expanded","_jsxs","Button","type","variant","size","e","ariaExpanded","ariaControls","attribute","Text","as","customClassName","CollapseIcon","ExpandIcon","Accordion","openItem","setOpenItem","Header","Content","Item","icon_profile_extends","icon_profile","icon_exit_extends","icon_exit","menu_close_extends","menu_close","aside","asideData","showProfileButton","logout","useAuth","router","useRouter","asideMenu","closeMenu","classList","remove","document","onkeydown","isEscape","event","code","nav","p","style","textAlign","marginRight","IconClose","push","IconProfile","profileLabel","IconExit","logOutLabel","hr","margin","display","React","autoFocus","disabled","ariaDisabled","ariaDescribedby","name","innerVariant","innerStyle","ariaLabel","rtl","soundClickSRC","soundClickType","innerClassName","documentElement","buttons","Array","from","querySelectorAll","concat","headerBtns","forEach","button","add","aria-describedby","aria-label","aria-controls","aria-disabled","data-type","checkShy","foundDangerously","shyString","toString","indexOf","dangerouslySetInnerHTML","__html","exmark_extends","exmark","ErrorMessage","span","Exmark","Footer","footerData","footer","footerImage","url","Image","src","alt","fontWeight","footerText","footerLinks","map","footerLink","index","Link","href","blank","linkText","_key","minWidth","FreeTextInput","textareaLabel","submitLabel","instructionText","textareaRemainText","maxNumberCharacters","textareaTooMuchText","submitInput","charsInfo","setCharsInfo","replace","disableBtn","setDisableBtn","textareaRef","instructionTextRef","form","onSubmit","newValue","submitEvent","preventDefault","warn","label","htmlFor","textarea","aria-labelledby","onChange","countLeft","countTooMuch","countertext","getElementsByClassName","icon_back_extends","icon_back","menu_open_extends","menu_open","fillRule","clipRule","icon_language_default_extends","icon_language_default","languageSelector","languages","withIcon","onSelectLanguage","user","useUsers","isOpen","setIsOpen","selectedLanguage","setSelectedLanguage","locale","selectLanguage","language","split","toUpperCase","substring","f","toLowerCase","find","some","textDecoration","a","IconGlobe","mode","HeaderMode","PUBLIC","headerData","showBackButton","headerToggleProfile","notificationText","hrefLanguages","AUTHENTICATED","header","back","BackIcon","querySelector","MenuOpenIcon","Notifications","Aside","headerTitle","LanguageSelector","menu_close_modal_extends","menu_close_modal","Modal","modalHeadline","modalText","modalBtnSubmit","modalBtnClose","modalType","toggleModal","submitModal","exitBtn","contentBtn","dualBtn","bottomBtn","bottomBtnLabel","dualBtnCancel","dualBtnSubmit","submitBtnStyle","submitBtnInnerStyle","bottomBtnStyle","bottomBtnInnerStyle","sizeButton","courseNumber","courseTotal","completedText","storeValueCallback","setting","linkBottom","linkBottomLabel","refContainerText","submitCancel","SetModalByContainer","rootContainer","newState","oldTabIndex","currentNode","nodeList","getAttribute","setAttribute","removeAttribute","SetModal","body","HandleSubmit","log","role","aria-modal","_Fragment","ModalContentType","NUMBER","Rating","numbersOfRating","modalRating","defaultVariables","defaultSend","submitRate","TEXTINPUT","modalFreeTextInput","notificationClassNames","forceDangerouslySetInnerHTML","setValue","disabledSubmit","setDisabledSubmit","submittedInput","setSubmittedInput","getValue","parent","parentElement","grandParent","eventCheckedValue","checked","element","input","selectedInput","rateValues","Spinner","color","emptyColor","time","thickness","styleSheet","styleSheets","insertRule","cssRules","spinnerStyles","border","borderTop","borderRadius","animation","TextElement","groq","TEXT","FeedbackMode","CLOSED","INTRO","QUESTION","SUMMARY","modalPopUp","setModalPopUp","selectedCourse","setSelectedCourse","handleKeyDown","addEventListener","removeEventListener","openCourseModal","course","clearSelectedCourse","closeModal","scormAPI","window","LMSInitialize","str","LMSCommit","customEvent","CustomEvent","detail","data","cmiData","dispatchEvent","LMSFinish","LMSGetValue","model","LMSSetValue","LMSGetLastError","LMSGetErrorString","errorCode","LMSGetDiagnostic","hooks_useSCORM","state","setState","totalTime","setTotalTime","activeAttempt","setActiveAttempt","createAttempt","getAttempt","updateAttempt","useLMS","userId","callback","useCallback","NEW_EMPTY_ATTEMPT","convertCMITimespanToSeconds","cmiTime","seconds","Number","minutes","hours","convertSecondsToCMITimespan","remainder","String","padStart","InitializeSCORM","attemptObject","lastAttempt","attempts","courseId","JSON","parse","stringify","attributes","SCORMCommit","session_CMITime","new_total_seconds","new_total_CMITime","status","result","UpdateAttempt","currentAttempt","forwardDiplomaToMentor","scheduleEmails","unlockCourseMethod","UnlockCourseMethod","UNLOCK_ALL_AFTER_FIRST_COMPLETED","hasFeedback","hasRepetition","hasMultipleLanguages","courses","useCourses","scheduleEmail","useEmailSending","getUserLearningpathWithStatuses","getUserCourses","getUser","getCourseUserStatus","forwardDiploma","getDiplomasSent","getLearningpaths","isLoading","setIsLoading","parsedCourses","setParsedCourses","userLearningpathStatus","setUserLearningpathStatus","repUserLearningpathStatus","setRepUserLearningpathStatus","CourseParseData","courseData","learningPathCourses","foundCourse","courseList","correctCourses","defaultLocale","lpCourse","learningPathCourseId","courseIndex","findIndex","newCourseData","TypeCourseData","completedDate","meta","title","launchURL","launch","description","link","links","self","unlockTimeMilliseconds","hidden","courseCompleted","foundStatus","lastUpdated","updatedAt","mostRecentAttemptID","decompressedSuspendData","LZString","mostRecentSuspendData","m","filter","module","s","CourseStatus","COMPLETED","INCOMPLETE","NOTATTEMPTED","feedback","currentGoToItemId","LOCKED","mostRecentIndex","dateObj","UNLOCK_ONE_AT_A_TIME","GetParsedUserCourses","newLearningPathID","repetitionTypes","currentUserCourses","learningPathStatus","learningpathId","AddFeedbackToCourses","AddRepetition","repetitionStartTime","Date","learningpath_status","date","getTime","isNaN","ParseRepetitionCourses","courseStatusPromises","newCourseStatuses","Promise","all","newCourseStatus","j","foundFeedback","userAnswer","lpCompletedMilliseconds","learningPaths","repLearningPaths","learningPath","newParsedRepetitionStatuses","newStatus","newCourseList","shortname","no","unlockID","newTime","unlockOffsetMonths","unlockOffsetDays","setHours","setMonth","getMonth","setDate","getDate","getHours","unlockOffsetHours","setMinutes","getMinutes","unlockOffsetMinutes","item","CheckDiplomaSend","userObject","currentCourseList","foundAllCompleted","every","diplomasSent","userLearningpath","to","email","finished","scheduleEmailInfo","ScheduleEmails","months","typeOfEmail","ForwardDiplomaToMentor","futureMonths","calculateFutureSeconds","numberOfMonths","currentDate","futureDate","getFullYear","getSeconds","currentTimestamp","futureTimestamp","Math","floor","forwardUserId","hasMentor","styrerId","userForward","forwardEmail","mentorScheduleEmailInfo","DetectAmountUnlockedCourses","foundUnlocked","currentTime","now","PASSED","useAlert","alertMessage","setAlertMessage","newTitle","newBody","newType","errorInputIds","alertTitle","alertBody","alertType","AlertType","ERROR","SUCCESS","WARNING","INFO","exports"],"sourceRoot":""}