@clickview/curator 1.100.0-rc.2 → 1.100.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"mappings":"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","names":["createPopper","defaultModifiers","eventListeners","popperOffsets","computeStyles","applyStyles","offset","flip","preventOverflow","arrow","hide","window.jQuery","ponyfill"],"ignoreList":[0,1,2,3,58,59,60,61],"sources":["../../../../../../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../../../../../../../node_modules/@popperjs/core/lib/popper-lite.js","../../../../../../../../node_modules/@popperjs/core/lib/popper.js","../../../../../../../../node_modules/bootstrap/dist/js/bootstrap.esm.js","../../../../../src/shared/constants/Layouts.ts","../../../../../src/startup/NavMappings.ts","../../../../../src/startup/InitializeNavService.ts","../../../../../../../libs/common/src/react/core/ReactApplication.tsx","../../../../../../../libs/shared/src/constants/LayoutRegions.ts","../../../../../src/apps/assembly-line/utils/migrations/AssemblyLineLocalStorageMigrations.ts","../../../../../src/apps/assembly-line/AssemblyLineApplication.tsx","../../../../../src/apps/clips/ClipsApplication.tsx","../../../../../src/apps/companies/CompaniesApplication.tsx","../../../../../src/apps/content-partners/ContentPartnerApplication.tsx","../../../../../../../libs/shared/src/utils/LayoutHelper.ts","../../../../../src/apps/crm-studio/CrmStudioApplication.tsx","../../../../../src/apps/curriculums/CurriculumsApplication.tsx","../../../../../src/apps/customer-wizard/CustomerWizardApplication.tsx","../../../../../src/apps/cv-live/CvLiveApplication.tsx","../../../../../src/apps/cv-live-pipeline/CvLivePipelineApplication.tsx","../../../../../src/apps/dashboard-editor/DashboardEditorApplication.tsx","../../../../../src/apps/default/CuratorDefaultApplication.tsx","../../../../../src/apps/discover/DiscoverApplication.tsx","../../../../../src/apps/domain-options/DomainOptionsApplication.tsx","../../../../../src/apps/interactives/InteractivesApplication.tsx","../../../../../src/apps/marketing/MarketingApplication.tsx","../../../../../src/apps/movies-and-tv/MoviesAndTvApplication.tsx","../../../../../src/apps/organisations/OrganisationsApplication.tsx","../../../../../src/apps/people/PeopleApplication.tsx","../../../../../src/apps/playlists/PlaylistsApplication.tsx","../../../../../src/apps/release-notes/ReleaseNotesApplication.tsx","../../../../../src/apps/series/SeriesApplication.tsx","../../../../../src/apps/short-link/ShortLinkApplication.tsx","../../../../../src/apps/special-events/SpecialEventsApplication.tsx","../../../../../src/apps/subjects/SubjectsApplication.tsx","../../../../../src/apps/themes/ThemesApplication.tsx","../../../../../src/apps/users/UsersApplication.tsx","../../../../../src/apps/videos/VideosApplication.tsx","../../../../../src/apps/visualiser/VisualiserApplication.tsx","../../../../../src/apps/workbench/filters/WorkbenchFilter.ts","../../../../../src/apps/workbench/WorkbenchApplication.tsx","../../../../../src/startup/RegisterApplications.ts","../../../../../../../libs/common/src/backbone/services/caches/FifoMemoryCache.ts","../../../../../src/startup/RegisterCaches.ts","../../../../../../../libs/common/src/backbone/utils/DataServiceErrorHelper.ts","../../../../../../../libs/common/src/backbone/services/data-providers/AjaxDataProvider.ts","../../../../../src/startup/RegisterDataProviders.ts","../../../../../../../libs/shared/src/constants/DataPrefixes.ts","../../../../../../../libs/shared/src/services/LanguageDataService.ts","../../../../../src/startup/RegisterDataServices.ts","../../../../../../../libs/common/src/react/core/ReactLayoutView.tsx","../../../../../src/shared/layouts/curator-layout/CuratorLayoutView.tsx","../../../../../../../libs/shared/src/hooks/useTabbingListener.tsx","../../../../../src/shared/layouts/full-screen-layout/FullScreenLayoutComponent.tsx","../../../../../src/shared/layouts/full-screen-layout/FullScreenLayoutView.tsx","../../../../../src/shared/layouts/primitives/LayoutComponent.tsx","../../../../../src/startup/RegisterLayouts.ts","../../../../../src/startup/RegisterServices.ts","../../../../../../../../node_modules/symbol-observable/es/ponyfill.js","../../../../../../../../node_modules/symbol-observable/es/index.js","../../../../../../../../node_modules/redux/es/redux.js","../../../../../../../../node_modules/redux-devtools-extension/index.js","../../../../../../../libs/common/src/react/middleware/FlightDataServiceBridgeMiddleware.ts","../../../../../../../libs/common/src/react/constants/HttpHeaders.ts","../../../../../../../libs/common/src/react/reducers/ApplicationDataReducer.ts","../../../../../../../libs/common/src/react/reducers/ViewModelReducer.ts","../../../../../src/startup/RegisterStore.ts","../../../../../src/startup/RegisterErrorHandlers.ts","../../../../../src/startup/RegisterArticleHelper.ts","../../../../../src/startup/RegisterSettings.ts","../../../../../src/app.ts"],"sourcesContent":["import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/*!\n * Bootstrap v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\nconst Data = {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map());\n }\n const instanceMap = elementMap.get(element);\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n return;\n }\n instanceMap.set(key, instance);\n },\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null;\n }\n return null;\n },\n remove(element, key) {\n if (!elementMap.has(element)) {\n return;\n }\n const instanceMap = elementMap.get(element);\n instanceMap.delete(key);\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element);\n }\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n }\n return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`;\n }\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID);\n } while (document.getElementById(prefix));\n return prefix;\n};\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let {\n transitionDuration,\n transitionDelay\n } = window.getComputedStyle(element);\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false;\n }\n if (typeof object.jquery !== 'undefined') {\n object = object[0];\n }\n return typeof object.nodeType !== 'undefined';\n};\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object;\n }\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object));\n }\n return null;\n};\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false;\n }\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])');\n if (!closedDetails) {\n return elementIsVisible;\n }\n if (closedDetails !== element) {\n const summary = element.closest('summary');\n if (summary && summary.parentNode !== closedDetails) {\n return false;\n }\n if (summary === null) {\n return false;\n }\n }\n return elementIsVisible;\n};\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n if (element.classList.contains('disabled')) {\n return true;\n }\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null;\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n if (element instanceof ShadowRoot) {\n return element;\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null;\n }\n return findShadowRoot(element.parentNode);\n};\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery;\n }\n return null;\n};\nconst DOMContentLoadedCallbacks = [];\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback();\n }\n });\n }\n DOMContentLoadedCallbacks.push(callback);\n } else {\n callback();\n }\n};\nconst isRTL = () => document.documentElement.dir === 'rtl';\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery();\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME;\n const JQUERY_NO_CONFLICT = $.fn[name];\n $.fn[name] = plugin.jQueryInterface;\n $.fn[name].Constructor = plugin;\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT;\n return plugin.jQueryInterface;\n };\n }\n });\n};\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback);\n return;\n }\n const durationPadding = 5;\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n let called = false;\n const handler = ({\n target\n }) => {\n if (target !== transitionElement) {\n return;\n }\n called = true;\n transitionElement.removeEventListener(TRANSITION_END, handler);\n execute(callback);\n };\n transitionElement.addEventListener(TRANSITION_END, handler);\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement);\n }\n }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length;\n let index = list.indexOf(activeElement);\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n }\n index += shouldGetNext ? 1 : -1;\n if (isCycleAllowed) {\n index = (index + listLength) % listLength;\n }\n return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\nfunction getElementEvents(element) {\n const uid = makeEventUid(element);\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n return eventRegistry[uid];\n}\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, {\n delegateTarget: element\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n return fn.apply(element, [event]);\n };\n}\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n for (let {\n target\n } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue;\n }\n hydrateObj(event, {\n delegateTarget: target\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn);\n }\n return fn.apply(target, [event]);\n }\n }\n };\n}\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string';\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n let typeEvent = getTypeEvent(originalTypeEvent);\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent;\n }\n return [isDelegated, callable, typeEvent];\n}\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n return fn.call(this, event);\n }\n };\n };\n callable = wrapFunction(callable);\n }\n const events = getElementEvents(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff;\n return;\n }\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n fn.delegationSelector = isDelegated ? handler : null;\n fn.callable = callable;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n element.addEventListener(typeEvent, fn, isDelegated);\n}\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n if (!fn) {\n return;\n }\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n}\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '');\n return customEvents[event] || event;\n}\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false);\n },\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true);\n },\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n const inNamespace = typeEvent !== originalTypeEvent;\n const events = getElementEvents(element);\n const storeElementEvent = events[typeEvent] || {};\n const isNamespace = originalTypeEvent.startsWith('.');\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return;\n }\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n return;\n }\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n }\n }\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n },\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n const $ = getjQuery();\n const typeEvent = getTypeEvent(event);\n const inNamespace = event !== typeEvent;\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n const evt = hydrateObj(new Event(event, {\n bubbles,\n cancelable: true\n }), args);\n if (defaultPrevented) {\n evt.preventDefault();\n }\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault();\n }\n return evt;\n }\n};\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value;\n } catch (_unused) {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value;\n }\n });\n }\n }\n return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n if (value === Number(value).toString()) {\n return Number(value);\n }\n if (value === '' || value === 'null') {\n return null;\n }\n if (typeof value !== 'string') {\n return value;\n }\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch (_unused) {\n return value;\n }\n}\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n },\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n },\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n const attributes = {};\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '');\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n attributes[pureKey] = normalizeData(element.dataset[key]);\n }\n return attributes;\n },\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {};\n }\n static get DefaultType() {\n return {};\n }\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n return config;\n }\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n };\n }\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property];\n const valueType = isElement(value) ? 'element' : toType(value);\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n }\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.2';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super();\n element = getElement(element);\n if (!element) {\n return;\n }\n this._element = element;\n this._config = this._getConfig(config);\n Data.set(this._element, this.constructor.DATA_KEY, this);\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY);\n EventHandler.off(this._element, this.constructor.EVENT_KEY);\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null;\n }\n }\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated);\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY);\n }\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n }\n static get VERSION() {\n return VERSION;\n }\n static get DATA_KEY() {\n return `bs.${this.NAME}`;\n }\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target');\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href');\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n return null;\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n }\n selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null;\n }\n return selector;\n};\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector));\n },\n parents(element, selector) {\n const parents = [];\n let ancestor = element.parentNode.closest(selector);\n while (ancestor) {\n parents.push(ancestor);\n ancestor = ancestor.parentNode.closest(selector);\n }\n return parents;\n },\n prev(element, selector) {\n let previous = element.previousElementSibling;\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n previous = previous.previousElementSibling;\n }\n return [];\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling;\n while (next) {\n if (next.matches(selector)) {\n return [next];\n }\n next = next.nextElementSibling;\n }\n return [];\n },\n focusableChildren(element) {\n const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n },\n getSelectorFromElement(element) {\n const selector = getSelector(element);\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null;\n }\n return null;\n },\n getElementFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.findOne(selector) : null;\n },\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.find(selector) : [];\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n const name = component.NAME;\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n const instance = component.getOrCreateInstance(target);\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]();\n });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$f;\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n if (closeEvent.defaultPrevented) {\n return;\n }\n this._element.classList.remove(CLASS_NAME_SHOW$8);\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n }\n\n // Private\n _destroyElement() {\n this._element.remove();\n EventHandler.trigger(this._element, EVENT_CLOSED);\n this.dispose();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$e;\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this);\n if (config === 'toggle') {\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n event.preventDefault();\n const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n const data = Button.getOrCreateInstance(button);\n data.toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n};\nconst DefaultType$c = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super();\n this._element = element;\n if (!element || !Swipe.isSupported()) {\n return;\n }\n this._config = this._getConfig(config);\n this._deltaX = 0;\n this._supportPointerEvents = Boolean(window.PointerEvent);\n this._initEvents();\n }\n\n // Getters\n static get Default() {\n return Default$c;\n }\n static get DefaultType() {\n return DefaultType$c;\n }\n static get NAME() {\n return NAME$d;\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY$9);\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX;\n return;\n }\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX;\n }\n }\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX;\n }\n this._handleSwipe();\n execute(this._config.endCallback);\n }\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n }\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX);\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n const direction = absDeltaX / this._deltaX;\n this._deltaX = 0;\n if (!direction) {\n return;\n }\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n }\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n }\n }\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n};\nconst DefaultType$b = {\n interval: '(number|boolean)',\n // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._interval = null;\n this._activeElement = null;\n this._isSliding = false;\n this.touchTimeout = null;\n this._swipeHelper = null;\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n this._addEventListeners();\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$b;\n }\n static get DefaultType() {\n return DefaultType$b;\n }\n static get NAME() {\n return NAME$c;\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT);\n }\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next();\n }\n }\n prev() {\n this._slide(ORDER_PREV);\n }\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element);\n }\n this._clearInterval();\n }\n cycle() {\n this._clearInterval();\n this._updateInterval();\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n }\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n return;\n }\n this.cycle();\n }\n to(index) {\n const items = this._getItems();\n if (index > items.length - 1 || index < 0) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n return;\n }\n const activeIndex = this._getItemIndex(this._getActive());\n if (activeIndex === index) {\n return;\n }\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n this._slide(order, items[index]);\n }\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose();\n }\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval;\n return config;\n }\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n }\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n }\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners();\n }\n }\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n }\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return;\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause();\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout);\n }\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n };\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n };\n this._swipeHelper = new Swipe(this._element, swipeConfig);\n }\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n const direction = KEY_TO_DIRECTION[event.key];\n if (direction) {\n event.preventDefault();\n this._slide(this._directionToOrder(direction));\n }\n }\n _getItemIndex(element) {\n return this._getItems().indexOf(element);\n }\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return;\n }\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n activeIndicator.removeAttribute('aria-current');\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n newActiveIndicator.setAttribute('aria-current', 'true');\n }\n }\n _updateInterval() {\n const element = this._activeElement || this._getActive();\n if (!element) {\n return;\n }\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n this._config.interval = elementInterval || this._config.defaultInterval;\n }\n _slide(order, element = null) {\n if (this._isSliding) {\n return;\n }\n const activeElement = this._getActive();\n const isNext = order === ORDER_NEXT;\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n if (nextElement === activeElement) {\n return;\n }\n const nextElementIndex = this._getItemIndex(nextElement);\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n });\n };\n const slideEvent = triggerEvent(EVENT_SLIDE);\n if (slideEvent.defaultPrevented) {\n return;\n }\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return;\n }\n const isCycling = Boolean(this._interval);\n this.pause();\n this._isSliding = true;\n this._setActiveIndicatorElement(nextElementIndex);\n this._activeElement = nextElement;\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n nextElement.classList.add(orderClassName);\n reflow(nextElement);\n activeElement.classList.add(directionalClassName);\n nextElement.classList.add(directionalClassName);\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName);\n nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n this._isSliding = false;\n triggerEvent(EVENT_SLID);\n };\n this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n if (isCycling) {\n this.cycle();\n }\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE);\n }\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n }\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element);\n }\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n }\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n }\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config);\n if (typeof config === 'number') {\n data.to(config);\n return;\n }\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return;\n }\n event.preventDefault();\n const carousel = Carousel.getOrCreateInstance(target);\n const slideIndex = this.getAttribute('data-bs-slide-to');\n if (slideIndex) {\n carousel.to(slideIndex);\n carousel._maybeEnableCycle();\n return;\n }\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next();\n carousel._maybeEnableCycle();\n return;\n }\n carousel.prev();\n carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n parent: null,\n toggle: true\n};\nconst DefaultType$a = {\n parent: '(null|element)',\n toggle: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isTransitioning = false;\n this._triggerArray = [];\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem);\n const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem);\n }\n }\n this._initializeChildren();\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n }\n if (this._config.toggle) {\n this.toggle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$a;\n }\n static get DefaultType() {\n return DefaultType$a;\n }\n static get NAME() {\n return NAME$b;\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide();\n } else {\n this.show();\n }\n }\n show() {\n if (this._isTransitioning || this._isShown()) {\n return;\n }\n let activeChildren = [];\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n toggle: false\n }));\n }\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n for (const activeInstance of activeChildren) {\n activeInstance.hide();\n }\n const dimension = this._getDimension();\n this._element.classList.remove(CLASS_NAME_COLLAPSE);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.style[dimension] = 0;\n this._addAriaAndCollapsedClass(this._triggerArray, true);\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n this._element.style[dimension] = '';\n EventHandler.trigger(this._element, EVENT_SHOWN$6);\n };\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n const scrollSize = `scroll${capitalizedDimension}`;\n this._queueCallback(complete, this._element, true);\n this._element.style[dimension] = `${this._element[scrollSize]}px`;\n }\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n const dimension = this._getDimension();\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger);\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false);\n }\n }\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE);\n EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n };\n this._element.style[dimension] = '';\n this._queueCallback(complete, this._element, true);\n }\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW$7);\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle); // Coerce string values\n config.parent = getElement(config.parent);\n return config;\n }\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n }\n _initializeChildren() {\n if (!this._config.parent) {\n return;\n }\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element);\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected));\n }\n }\n }\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n }\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return;\n }\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n element.setAttribute('aria-expanded', isOpen);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {};\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n event.preventDefault();\n }\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, {\n toggle: false\n }).toggle();\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n};\nconst DefaultType$9 = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._popper = null;\n this._parent = this._element.parentNode; // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n this._inNavbar = this._detectNavbar();\n }\n\n // Getters\n static get Default() {\n return Default$9;\n }\n static get DefaultType() {\n return DefaultType$9;\n }\n static get NAME() {\n return NAME$a;\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show();\n }\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._createPopper();\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n this._element.focus();\n this._element.setAttribute('aria-expanded', true);\n this._menu.classList.add(CLASS_NAME_SHOW$6);\n this._element.classList.add(CLASS_NAME_SHOW$6);\n EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n }\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n this._completeHide(relatedTarget);\n }\n dispose() {\n if (this._popper) {\n this._popper.destroy();\n }\n super.dispose();\n }\n update() {\n this._inNavbar = this._detectNavbar();\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n if (this._popper) {\n this._popper.destroy();\n }\n this._menu.classList.remove(CLASS_NAME_SHOW$6);\n this._element.classList.remove(CLASS_NAME_SHOW$6);\n this._element.setAttribute('aria-expanded', 'false');\n Manipulator.removeDataAttribute(this._menu, 'popper');\n EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n }\n _getConfig(config) {\n config = super._getConfig(config);\n if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n }\n return config;\n }\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n }\n let referenceElement = this._element;\n if (this._config.reference === 'parent') {\n referenceElement = this._parent;\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference);\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference;\n }\n const popperConfig = this._getPopperConfig();\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n }\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n }\n _getPlacement() {\n const parentDropdown = this._parent;\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER;\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n }\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n }\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null;\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n };\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }];\n }\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _selectMenuItem({\n key,\n target\n }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n if (!items.length) {\n return;\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n return;\n }\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle);\n if (!context || context._config.autoClose === false) {\n continue;\n }\n const composedPath = event.composedPath();\n const isMenuTarget = composedPath.includes(context._menu);\n if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n continue;\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue;\n }\n const relatedTarget = {\n relatedTarget: context._element\n };\n if (event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n context._completeHide(relatedTarget);\n }\n }\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName);\n const isEscapeEvent = event.key === ESCAPE_KEY$2;\n const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return;\n }\n if (isInput && !isEscapeEvent) {\n return;\n }\n event.preventDefault();\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n const instance = Dropdown.getOrCreateInstance(getToggleButton);\n if (isUpOrDownEvent) {\n event.stopPropagation();\n instance.show();\n instance._selectMenuItem(event);\n return;\n }\n if (instance._isShown()) {\n // else is escape and we check if it is shown\n event.stopPropagation();\n instance.hide();\n getToggleButton.focus();\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n event.preventDefault();\n Dropdown.getOrCreateInstance(this).toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true,\n // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n};\n\nconst DefaultType$8 = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isAppended = false;\n this._element = null;\n }\n\n // Getters\n static get Default() {\n return Default$8;\n }\n static get DefaultType() {\n return DefaultType$8;\n }\n static get NAME() {\n return NAME$9;\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._append();\n const element = this._getElement();\n if (this._config.isAnimated) {\n reflow(element);\n }\n element.classList.add(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n execute(callback);\n });\n }\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n this.dispose();\n execute(callback);\n });\n }\n dispose() {\n if (!this._isAppended) {\n return;\n }\n EventHandler.off(this._element, EVENT_MOUSEDOWN);\n this._element.remove();\n this._isAppended = false;\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div');\n backdrop.className = this._config.className;\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE$4);\n }\n this._element = backdrop;\n }\n return this._element;\n }\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement);\n return config;\n }\n _append() {\n if (this._isAppended) {\n return;\n }\n const element = this._getElement();\n this._config.rootElement.append(element);\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback);\n });\n this._isAppended = true;\n }\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n};\n\nconst DefaultType$7 = {\n autofocus: 'boolean',\n trapElement: 'element'\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isActive = false;\n this._lastTabNavDirection = null;\n }\n\n // Getters\n static get Default() {\n return Default$7;\n }\n static get DefaultType() {\n return DefaultType$7;\n }\n static get NAME() {\n return NAME$8;\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return;\n }\n if (this._config.autofocus) {\n this._config.trapElement.focus();\n }\n EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n this._isActive = true;\n }\n deactivate() {\n if (!this._isActive) {\n return;\n }\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY$5);\n }\n\n // Private\n _handleFocusin(event) {\n const {\n trapElement\n } = this._config;\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return;\n }\n const elements = SelectorEngine.focusableChildren(trapElement);\n if (elements.length === 0) {\n trapElement.focus();\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus();\n } else {\n elements[0].focus();\n }\n }\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body;\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n }\n hide() {\n const width = this.getWidth();\n this._disableOverFlow();\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n }\n reset() {\n this._resetElementAttributes(this._element, 'overflow');\n this._resetElementAttributes(this._element, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n }\n isOverflowing() {\n return this.getWidth() > 0;\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow');\n this._element.style.overflow = 'hidden';\n }\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth();\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return;\n }\n this._saveInitialAttribute(element, styleProperty);\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty);\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue);\n }\n }\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty);\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty);\n return;\n }\n Manipulator.removeDataAttribute(element, styleProperty);\n element.style.setProperty(styleProperty, value);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector);\n return;\n }\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel);\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n backdrop: true,\n focus: true,\n keyboard: true\n};\nconst DefaultType$6 = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._isShown = false;\n this._isTransitioning = false;\n this._scrollBar = new ScrollBarHelper();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$6;\n }\n static get DefaultType() {\n return DefaultType$6;\n }\n static get NAME() {\n return NAME$7;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._isTransitioning = true;\n this._scrollBar.hide();\n document.body.classList.add(CLASS_NAME_OPEN);\n this._adjustDialog();\n this._backdrop.show(() => this._showElement(relatedTarget));\n }\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._isShown = false;\n this._isTransitioning = true;\n this._focustrap.deactivate();\n this._element.classList.remove(CLASS_NAME_SHOW$4);\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n }\n dispose() {\n EventHandler.off(window, EVENT_KEY$4);\n EventHandler.off(this._dialog, EVENT_KEY$4);\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n handleUpdate() {\n this._adjustDialog();\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop),\n // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element);\n }\n this._element.style.display = 'block';\n this._element.removeAttribute('aria-hidden');\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.scrollTop = 0;\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n if (modalBody) {\n modalBody.scrollTop = 0;\n }\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW$4);\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate();\n }\n this._isTransitioning = false;\n EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n relatedTarget\n });\n };\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n if (event.key !== ESCAPE_KEY$1) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n this._triggerBackdropTransition();\n });\n EventHandler.on(window, EVENT_RESIZE$1, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog();\n }\n });\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return;\n }\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition();\n return;\n }\n if (this._config.backdrop) {\n this.hide();\n }\n });\n });\n }\n _hideModal() {\n this._element.style.display = 'none';\n this._element.setAttribute('aria-hidden', true);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n this._isTransitioning = false;\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN);\n this._resetAdjustments();\n this._scrollBar.reset();\n EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n });\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE$3);\n }\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const initialOverflowY = this._element.style.overflowY;\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return;\n }\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n this._element.classList.add(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY;\n }, this._dialog);\n }, this._dialog);\n this._element.focus();\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const scrollbarWidth = this._scrollBar.getWidth();\n const isBodyOverflowing = scrollbarWidth > 0;\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n }\n _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](relatedTarget);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$4, () => {\n if (isVisible(this)) {\n this.focus();\n }\n });\n });\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide();\n }\n const data = Modal.getOrCreateInstance(target);\n data.toggle(this);\n});\nenableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n backdrop: true,\n keyboard: true,\n scroll: false\n};\nconst DefaultType$5 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isShown = false;\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$5;\n }\n static get DefaultType() {\n return DefaultType$5;\n }\n static get NAME() {\n return NAME$6;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._backdrop.show();\n if (!this._config.scroll) {\n new ScrollBarHelper().hide();\n }\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.classList.add(CLASS_NAME_SHOWING$1);\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate();\n }\n this._element.classList.add(CLASS_NAME_SHOW$3);\n this._element.classList.remove(CLASS_NAME_SHOWING$1);\n EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n relatedTarget\n });\n };\n this._queueCallback(completeCallBack, this._element, true);\n }\n hide() {\n if (!this._isShown) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._focustrap.deactivate();\n this._element.blur();\n this._isShown = false;\n this._element.classList.add(CLASS_NAME_HIDING);\n this._backdrop.hide();\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n if (!this._config.scroll) {\n new ScrollBarHelper().reset();\n }\n EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n };\n this._queueCallback(completeCallback, this._element, true);\n }\n dispose() {\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n this.hide();\n };\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop);\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n });\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$3, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus();\n }\n });\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide();\n }\n const data = Offcanvas.getOrCreateInstance(target);\n data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show();\n }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide();\n }\n }\n});\nenableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\nconst DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n }\n return true;\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n allowList: DefaultAllowlist,\n content: {},\n // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n};\nconst DefaultType$4 = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n};\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n }\n\n // Getters\n static get Default() {\n return Default$4;\n }\n static get DefaultType() {\n return DefaultType$4;\n }\n static get NAME() {\n return NAME$5;\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n }\n hasContent() {\n return this.getContent().length > 0;\n }\n changeContent(content) {\n this._checkContent(content);\n this._config.content = {\n ...this._config.content,\n ...content\n };\n return this;\n }\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n const template = templateWrapper.children[0];\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n return template;\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n this._checkContent(config.content);\n }\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({\n selector,\n entry: content\n }, DefaultContentType);\n }\n }\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n if (!templateElement) {\n return;\n }\n content = this._resolvePossibleFunction(content);\n if (!content) {\n templateElement.remove();\n return;\n }\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement);\n return;\n }\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n templateElement.textContent = content;\n }\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this]);\n }\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n templateElement.textContent = element.textContent;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n title: '',\n trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n }\n super(element, config);\n\n // Private\n this._isEnabled = true;\n this._timeout = 0;\n this._isHovered = null;\n this._activeTrigger = {};\n this._popper = null;\n this._templateFactory = null;\n this._newContent = null;\n\n // Protected\n this.tip = null;\n this._setListeners();\n if (!this._config.selector) {\n this._fixTitle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$3;\n }\n static get DefaultType() {\n return DefaultType$3;\n }\n static get NAME() {\n return NAME$4;\n }\n\n // Public\n enable() {\n this._isEnabled = true;\n }\n disable() {\n this._isEnabled = false;\n }\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n this._activeTrigger.click = !this._activeTrigger.click;\n if (this._isShown()) {\n this._leave();\n return;\n }\n this._enter();\n }\n dispose() {\n clearTimeout(this._timeout);\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n }\n this._disposePopper();\n super.dispose();\n }\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n const shadowRoot = findShadowRoot(this._element);\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper();\n const tip = this._getTipElement();\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n const {\n container\n } = this._config;\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip);\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n }\n this._popper = this._createPopper(tip);\n tip.classList.add(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n if (this._isHovered === false) {\n this._leave();\n }\n this._isHovered = false;\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n hide() {\n if (!this._isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n if (hideEvent.defaultPrevented) {\n return;\n }\n const tip = this._getTipElement();\n tip.classList.remove(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n this._isHovered = null; // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return;\n }\n if (!this._isHovered) {\n this._disposePopper();\n }\n this._element.removeAttribute('aria-describedby');\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n update() {\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle());\n }\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n return this.tip;\n }\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml();\n\n // TODO: remove this check in v6\n if (!tip) {\n return null;\n }\n tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n const tipId = getUID(this.constructor.NAME).toString();\n tip.setAttribute('id', tipId);\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE$2);\n }\n return tip;\n }\n setContent(content) {\n this._newContent = content;\n if (this._isShown()) {\n this._disposePopper();\n this.show();\n }\n }\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content);\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n });\n }\n return this._templateFactory;\n }\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n };\n }\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n }\n _isAnimated() {\n return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n }\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n }\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element]);\n const attachment = AttachmentMap[placement.toUpperCase()];\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element]);\n }\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [{\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n }, {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n }\n }]\n };\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context.toggle();\n });\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n context._enter();\n });\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n context._leave();\n });\n }\n }\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n }\n _fixTitle() {\n const title = this._element.getAttribute('title');\n if (!title) {\n return;\n }\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\n }\n this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title');\n }\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n this._isHovered = true;\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n this._isHovered = false;\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\n }\n }\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n };\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container);\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n return config;\n }\n _getDelegateConfig() {\n const config = {};\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value;\n }\n }\n config.selector = false;\n config.trigger = 'manual';\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config;\n }\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n if (this.tip) {\n this.tip.remove();\n this.tip = null;\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>',\n trigger: 'click'\n};\nconst DefaultType$2 = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default$2;\n }\n static get DefaultType() {\n return DefaultType$2;\n }\n static get NAME() {\n return NAME$3;\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent();\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n };\n }\n _getContent() {\n return this._resolvePossibleFunction(this._config.content);\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n offset: null,\n // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n offset: '(number|null)',\n // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map();\n this._observableSections = new Map();\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n this._activeTarget = null;\n this._observer = null;\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n };\n this.refresh(); // initialize\n }\n\n // Getters\n static get Default() {\n return Default$1;\n }\n static get DefaultType() {\n return DefaultType$1;\n }\n static get NAME() {\n return NAME$2;\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables();\n this._maybeEnableSmoothScroll();\n if (this._observer) {\n this._observer.disconnect();\n } else {\n this._observer = this._getNewObserver();\n }\n for (const section of this._observableSections.values()) {\n this._observer.observe(section);\n }\n }\n dispose() {\n this._observer.disconnect();\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body;\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n }\n return config;\n }\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return;\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK);\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash);\n if (observableSection) {\n event.preventDefault();\n const root = this._rootElement || window;\n const height = observableSection.offsetTop - this._element.offsetTop;\n if (root.scrollTo) {\n root.scrollTo({\n top: height,\n behavior: 'smooth'\n });\n return;\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height;\n }\n });\n }\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n };\n return new IntersectionObserver(entries => this._observerCallback(entries), options);\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n this._process(targetElement(entry));\n };\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n this._previousScrollData.parentScrollTop = parentScrollTop;\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null;\n this._clearActiveClass(targetElement(entry));\n continue;\n }\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry);\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return;\n }\n continue;\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry);\n }\n }\n }\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map();\n this._observableSections = new Map();\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue;\n }\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor);\n this._observableSections.set(anchor.hash, observableSection);\n }\n }\n }\n _process(target) {\n if (this._activeTarget === target) {\n return;\n }\n this._clearActiveClass(this._config.target);\n this._activeTarget = target;\n target.classList.add(CLASS_NAME_ACTIVE$1);\n this._activateParents(target);\n EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n relatedTarget: target\n });\n }\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n return;\n }\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE$1);\n }\n }\n }\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE$1);\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE$1);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst HOME_KEY = 'Home';\nconst END_KEY = 'End';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst CLASS_DROPDOWN = 'dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\nconst SELECTOR_OUTER = '.nav-item, .list-group-item';\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`;\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element);\n this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n if (!this._parent) {\n return;\n // TODO: should throw exception in v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren());\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n }\n\n // Getters\n static get NAME() {\n return NAME$1;\n }\n\n // Public\n show() {\n // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element;\n if (this._elemIsActive(innerElem)) {\n return;\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem();\n const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {\n relatedTarget: innerElem\n }) : null;\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {\n relatedTarget: active\n });\n if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {\n return;\n }\n this._deactivate(active, innerElem);\n this._activate(innerElem, active);\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return;\n }\n element.classList.add(CLASS_NAME_ACTIVE);\n this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW$1);\n return;\n }\n element.removeAttribute('tabindex');\n element.setAttribute('aria-selected', true);\n this._toggleDropDown(element, true);\n EventHandler.trigger(element, EVENT_SHOWN$1, {\n relatedTarget: relatedElem\n });\n };\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n }\n _deactivate(element, relatedElem) {\n if (!element) {\n return;\n }\n element.classList.remove(CLASS_NAME_ACTIVE);\n element.blur();\n this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW$1);\n return;\n }\n element.setAttribute('aria-selected', false);\n element.setAttribute('tabindex', '-1');\n this._toggleDropDown(element, false);\n EventHandler.trigger(element, EVENT_HIDDEN$1, {\n relatedTarget: relatedElem\n });\n };\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n }\n _keydown(event) {\n if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {\n return;\n }\n event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault();\n const children = this._getChildren().filter(element => !isDisabled(element));\n let nextActiveElement;\n if ([HOME_KEY, END_KEY].includes(event.key)) {\n nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n } else {\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n nextActiveElement = getNextActiveElement(children, event.target, isNext, true);\n }\n if (nextActiveElement) {\n nextActiveElement.focus({\n preventScroll: true\n });\n Tab.getOrCreateInstance(nextActiveElement).show();\n }\n }\n _getChildren() {\n // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n }\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null;\n }\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist');\n for (const child of children) {\n this._setInitialAttributesOnChild(child);\n }\n }\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child);\n const isActive = this._elemIsActive(child);\n const outerElem = this._getOuterElement(child);\n child.setAttribute('aria-selected', isActive);\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n }\n if (!isActive) {\n child.setAttribute('tabindex', '-1');\n }\n this._setAttributeIfNotExists(child, 'role', 'tab');\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child);\n }\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child);\n if (!target) {\n return;\n }\n this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);\n }\n }\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element);\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return;\n }\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem);\n if (element) {\n element.classList.toggle(className, open);\n }\n };\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);\n outerElem.setAttribute('aria-expanded', open);\n }\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value);\n }\n }\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE);\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n Tab.getOrCreateInstance(this).show();\n});\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element);\n }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n};\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n};\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._timeout = null;\n this._hasMouseInteraction = false;\n this._hasKeyboardInteraction = false;\n this._setListeners();\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n static get DefaultType() {\n return DefaultType;\n }\n static get NAME() {\n return NAME;\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._clearTimeout();\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE);\n }\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING);\n EventHandler.trigger(this._element, EVENT_SHOWN);\n this._maybeScheduleHide();\n };\n this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n this._queueCallback(complete, this._element, this._config.animation);\n }\n hide() {\n if (!this.isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n EventHandler.trigger(this._element, EVENT_HIDDEN);\n };\n this._element.classList.add(CLASS_NAME_SHOWING);\n this._queueCallback(complete, this._element, this._config.animation);\n }\n dispose() {\n this._clearTimeout();\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW);\n }\n super.dispose();\n }\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW);\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return;\n }\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return;\n }\n this._timeout = setTimeout(() => {\n this.hide();\n }, this._config.delay);\n }\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout':\n {\n this._hasMouseInteraction = isInteracting;\n break;\n }\n case 'focusin':\n case 'focusout':\n {\n this._hasKeyboardInteraction = isInteracting;\n break;\n }\n }\n if (isInteracting) {\n this._clearTimeout();\n return;\n }\n const nextElement = event.relatedTarget;\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return;\n }\n this._maybeScheduleHide();\n }\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n }\n _clearTimeout() {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n","export const Layouts = {\n CURATOR_LAYOUT: 'CuratorLayout',\n FULL_SCREEN_LAYOUT: 'FullScreenLayout'\n};\n","import { Actions, AppChannels } from 'shared/constants';\n\nexport const NavMappings = {\n customerWizard: {\n [AppChannels.CUSTOMER_WIZARD]: 'Customer Wizard'\n },\n crmStudio: {\n [AppChannels.CRM_STUDIO]: '(BETA) CRM Studio'\n },\n shortLink: {\n [AppChannels.SHORT_LINK]: 'Short Link'\n },\n organisations: {\n [AppChannels.ORGANISATIONS]: {\n actions: {\n [Actions.System.NEW_ORGANISATION]: 'Add New Organisation'\n },\n default: 'Organisations'\n }\n },\n developer: {\n [AppChannels.DOMAIN_OPTIONS]: 'Domain Options'\n },\n manageContent: {\n [AppChannels.COMPANIES]: 'Companies',\n [AppChannels.PEOPLE]: 'People',\n [AppChannels.PLAYLISTS]: 'Playlists',\n [AppChannels.SERIES]: 'Series',\n [AppChannels.SUBJECTS]: 'Topics',\n [AppChannels.CURRICULUMS]: 'Curriculums',\n [AppChannels.THEMES]: 'Themes',\n [AppChannels.VIDEOS]: 'Videos',\n [AppChannels.DISCOVER]: 'Discover',\n [AppChannels.ASSEMBLY_LINE]: 'Content Pipeline',\n [AppChannels.WORKBENCH]: 'Workbench',\n [AppChannels.INTERACTIVES]: 'Interactives',\n [AppChannels.CLIPS]: 'Clips',\n [AppChannels.MOVIES_AND_TV]: 'M + TV'\n },\n cvLive: {\n [AppChannels.DISCOVER]: 'Discover',\n [AppChannels.SUBJECTS]: 'Topics',\n [AppChannels.AUDIENCES]: 'Audiences',\n [AppChannels.COMPANIES]: 'Companies',\n [AppChannels.CV_LIVE_PIPELINE]: 'Content Pipeline'\n }\n};\n","import { Core } from 'libs/common/backbone/index';\n\nimport { CuratorAppNavService } from 'shared/services';\n\nimport { NavMappings } from './NavMappings';\n\nexport function InitializeNavService(shell: Core.Shell, next: (...args: any) => any) {\n if (!(window as any).selectedNav)\n throw new Error('Must assign window.selectedNav for CuratorAppNavService');\n\n const navItemMappings = NavMappings[(window as any).selectedNav as keyof typeof NavMappings];\n\n new CuratorAppNavService({\n navSelector: '.white-module-subnav > ul',\n currentItemClassName: 'current',\n navItemMappings\n });\n\n next(shell);\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseApplication } from 'libs/common/backbone/core/BaseApplication';\nimport { LayoutOptions } from 'libs/common/backbone/core/LayoutService';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\n\nimport { ReactLayoutView, ReactLayoutViewOptions } from './ReactLayoutView';\n\nexport class ReactApplication<TLayout extends ReactLayoutView = ReactLayoutView> extends BaseApplication {\n declare protected layout: TLayout;\n declare protected layoutOptions: LayoutOptions<ReactLayoutViewOptions>;\n\n protected onShowAlert(options: ObjectHash): void {\n if (!this.layoutOptions.options.alertRegion)\n return super.onShowAlert(options);\n\n const { ctor: AlertList, collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(\n this.layoutOptions.options.alertRegion,\n <AlertList alerts={alerts} removeAlert={removeAlert} />\n );\n }\n}\n","export const LayoutRegions = {\n TOP_NAV: 'top:nav',\n LEFT_NAV: 'left:nav',\n CONTENT: 'content',\n POPUP: 'popup',\n ALERT: 'alert',\n HIDDEN: 'hidden',\n PICTURE_IN_PICTURE: 'picture:in:picture'\n};\n","import { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { CONTENT_PIPELINE_COLUMNS } from 'apps/assembly-line/components/column-filters/ColumnFilters';\nimport { SavedAssemblyLineColumns } from 'apps/assembly-line/hooks/useAssemblyLineColumns';\nimport { AssemblyLineStage } from 'apps/assembly-line/interfaces/AssemblyLineStage';\n\nimport { AssemblyLineHelper } from '../AssemblyLineHelper';\n\ntype V1ColumnsState = Partial<Record<AssemblyLineStage, string[]>>;\n\nexport const AssemblyLineLocalStorageMigrations = [\n {\n dateCreated: '05-09-2024',\n name: 'Column visibility schema change',\n description: `\n The column visibility state saved in local storage initially for each pipeline stage would\n just contain an array of the column IDs that should be visible. This caused problems when\n new columns were introduced, as the new columns would not be included in their local storage, and thus\n would never show up unless the user opted into it, which we don't want if the new column is an important default.\n \n This migration changes the schema to simply contain 2 lists for each stage:\n 1. \"added\": A list of non-default columns that the user has opted into\n 2. \"removed\": A list of default columns that the user has opted out of\n\n This allows new defaults to show up automatically\n `,\n // Only run this migration if their local storage is in the shape of the first schema\n predicate: () => {\n const currentState = LocalStorageHelper.get<V1ColumnsState>(CONTENT_PIPELINE_COLUMNS);\n\n if (!currentState)\n return false;\n\n const modifiedStage = Object.keys(currentState)?.[0] as AssemblyLineStage;\n\n if (!modifiedStage)\n return false;\n\n return Array.isArray(currentState[modifiedStage]);\n },\n run: () => {\n const initialState = LocalStorageHelper.get<V1ColumnsState>(CONTENT_PIPELINE_COLUMNS);\n\n const updatedState = Object.entries(initialState)\n .reduce<Partial<SavedAssemblyLineColumns>>((acc, value) => {\n const stage = value[0] as AssemblyLineStage;\n const savedColumns = value[1] as string[];\n\n // Default state for unaffected stages\n if (!savedColumns?.length) {\n acc[stage] = {\n added: [],\n removed: []\n };\n\n return acc;\n }\n\n const defaultColumns = AssemblyLineHelper.getDefaultColumnFilterOptions(stage).map(o => o.id);\n\n acc[stage] = {\n // If the column was saved and it wasn't a default\n added: savedColumns.filter(col => !defaultColumns.includes(col)),\n\n removed: defaultColumns.filter(col => {\n /**\n * These columns were introduced after the initial schema was saved to everyones local storage,\n * and so these columns are incorrectly not showing up in some stages for some people. So they\n * should just never be placed in the \"removed\" array during this migration.\n */\n if (col === 'thumbnailQuality' || col === 'visibility' || col === 'assignedTo')\n return false;\n \n // If the column wasn't saved, and it was a default, then it belongs in the removed array\n return !savedColumns.includes(col);\n })\n };\n\n return acc;\n }, {});\n\n LocalStorageHelper.set(CONTENT_PIPELINE_COLUMNS, updatedState);\n }\n }\n];\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\nimport { ApplicationOptions } from 'backbone.marionette';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { FullScreenLayoutView, FullScreenLayoutViewOptions } from 'shared/layouts';\n\nimport { AssemblyLineBulkActionsQueryParams } from 'apps/assembly-line/interfaces/AssemblyLineBulkActionsQueryParams';\nimport { AssemblyLineDashboardField } from 'apps/assembly-line/interfaces/AssemblyLineDashboard';\nimport { AssemblyLineQueryParams } from 'apps/assembly-line/interfaces/AssemblyLineQueryParams';\nimport { AssemblyLineStage } from 'apps/assembly-line/interfaces/AssemblyLineStage';\nimport { AssemblyLineTopicField } from 'apps/assembly-line/interfaces/AssemblyLineTopic';\nimport { AssemblyLineVideoField } from 'apps/assembly-line/interfaces/AssemblyLineVideo';\nimport { AssemblyLineGenerateReportViewParams } from 'apps/assembly-line/views/generate-report/AssemblyLineGenerateReportView';\n\nimport { ContentPipelineId } from './interfaces/ContentPipelineId';\nimport { SharedAssemblyLinePopupQueryParams } from './interfaces/SharedAssemblyLinePopupQueryParams';\nimport { AssemblyLineLocalStorageMigrations } from './utils/migrations/AssemblyLineLocalStorageMigrations';\n\nconst PIPELINE_ID: ContentPipelineId = 'clickview';\n\nclass AssemblyLineAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.ASSEMBLY_LINE;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/content-pipeline(/)': 'index',\n 'manage/content-pipeline/metadata(/)': 'metadata',\n 'manage/content-pipeline/curriculum(/)': 'curriculum',\n 'manage/content-pipeline/curation(/)': 'curation',\n 'manage/content-pipeline/curation/presentations(/)': 'presentations',\n 'manage/content-pipeline/curation/presentations/nz-primary(/)': 'presentationsNzPrimary',\n 'manage/content-pipeline/curation/presentations/nz-secondary(/)': 'presentationsNzSecondary',\n 'manage/content-pipeline/curation/presentations/ca-elementary(/)': 'presentationsCaElementary',\n 'manage/content-pipeline/curation/presentations/ca-middle(/)': 'presentationsCaMiddle',\n 'manage/content-pipeline/curation/presentations/ca-high(/)': 'presentationsCaHigh',\n 'manage/content-pipeline/curation/unused-videos(/)': 'unusedVideos',\n 'manage/content-pipeline/curation/topics(/)': 'topics',\n 'manage/content-pipeline/curation/curated-topics(/)': 'curatedTopics',\n 'manage/content-pipeline/curation/thumbnail-text(/)': 'thumbnailText',\n 'manage/content-pipeline/assets(/)': 'assets',\n 'manage/content-pipeline/assets/curated-thumbnails(/)': 'curatedThumbnail',\n 'manage/content-pipeline/assets/thumbnail-review(/)': 'thumbnailReview',\n 'manage/content-pipeline/assets/topic-assets(/)': 'topicAssets',\n 'manage/content-pipeline/resourcing(/)': 'resourcing',\n 'manage/content-pipeline/resourcing/tags(/)': 'tags',\n 'manage/content-pipeline/resourcing/glance(/)': 'glance',\n 'manage/content-pipeline/resourcing/resources-interactives(/)': 'resourcesAndInteractives',\n 'manage/content-pipeline/resourcing/topic-seo(/)': 'topicSeo',\n 'manage/content-pipeline/review(/)': 'review',\n 'manage/content-pipeline/review/review-topics(/)': 'reviewTopics',\n 'manage/content-pipeline/review/published-topics(/)': 'publishedTopics',\n 'manage/content-pipeline/review/published-videos(/)': 'publishedVideos'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'editVideo',\n 'deleteVideo',\n 'archiveVideo',\n 'editClassification',\n 'editDashboard',\n 'wizard',\n 'saveQuickFilter',\n 'editQuickFilter',\n 'deleteQuickFilter',\n 'newInteractive',\n 'newClassificationDashboard',\n 'resolveTopicIssue',\n 'resolveVideoIssue',\n 'reviewDetails',\n 'publishTopic',\n 'globalSearch',\n 'pictureInPicture',\n 'giveFeedback',\n 'videoDashboards',\n 'generateReport',\n 'editReportTemplate',\n 'deleteReportTemplate',\n 'viewAssignees'\n ];\n }\n}\n\nexport class AssemblyLineApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n public initialize(options: ApplicationOptions): void {\n super.initialize(options);\n\n AssemblyLineLocalStorageMigrations.forEach(migration => {\n if (migration.predicate())\n migration.run();\n });\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Assembly Line Application';\n }\n\n public static get router(): any {\n return AssemblyLineAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.ASSEMBLY_LINE;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: true\n }\n };\n }\n\n public index(): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.ASSEMBLY_LINE,\n action: Actions.AssemblyLine.METADATA\n }, { replace: true });\n }\n\n public async metadata(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='metadata' subStage='metadata' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async curriculum(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='curriculum' subStage='curriculum' pipelineId={PIPELINE_ID} />\n );\n }\n\n public curation(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.ASSEMBLY_LINE,\n action: Actions.AssemblyLine.PRESENTATIONS,\n params\n }, { replace: true });\n }\n\n public async presentations(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='curation' subStage='presentation' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async presentationsNzPrimary(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView\n queryParams={params}\n stage='curation'\n subStage='presentation'\n pipelineId={PIPELINE_ID}\n view='nz-primary-presentations'\n />\n );\n }\n\n public async presentationsNzSecondary(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView\n queryParams={params}\n stage='curation'\n subStage='presentation'\n pipelineId={PIPELINE_ID}\n view='nz-secondary-presentations'\n />\n );\n }\n\n public async presentationsCaElementary(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView\n queryParams={params}\n stage='curation'\n subStage='presentation'\n pipelineId={PIPELINE_ID}\n view='ca-elementary-presentations'\n />\n );\n }\n\n public async presentationsCaMiddle(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView\n queryParams={params}\n stage='curation'\n subStage='presentation'\n pipelineId={PIPELINE_ID}\n view='ca-middle-presentations'\n />\n );\n }\n\n public async presentationsCaHigh(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView\n queryParams={params}\n stage='curation'\n subStage='presentation'\n pipelineId={PIPELINE_ID}\n view='ca-high-presentations'\n />\n );\n }\n\n public async unusedVideos(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='curation' subStage='unused_video' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async topics(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineTopicStageView } = await import('./views/tables/AssemblyLineTopicStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineTopicStageView queryParams={params} stage='curation' subStage='topic' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async newClassificationDashboard(classificationId: string, presentationId: string): Promise<void> {\n const { NewClassificationDashboardView } = await import('apps/subjects/views/classifications/new-classification-dashboard/NewClassificationDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewClassificationDashboardView\n classificationId={classificationId}\n presentationId={presentationId}\n targetType={DashboardTargetType.Classification}\n redirect={false}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async curatedTopics(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineDashboardStageView } = await import('./views/tables/AssemblyLineDashboardStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineDashboardStageView queryParams={params} stage='curation' subStage='curated_topic' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async thumbnailText(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='curation' subStage='thumbnail_text' pipelineId={PIPELINE_ID} />\n );\n }\n\n public assets(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.ASSEMBLY_LINE,\n action: Actions.AssemblyLine.CURATED_THUMBNAIL,\n params\n }, { replace: true });\n }\n\n public async curatedThumbnail(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='assets' subStage='curated_thumbnail' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async thumbnailReview(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='assets' subStage='review_thumbnail' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async topicAssets(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineTopicStageView } = await import('./views/tables/AssemblyLineTopicStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineTopicStageView queryParams={params} stage='assets' subStage='topic_asset' pipelineId={PIPELINE_ID} />\n );\n }\n\n public resourcing(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.ASSEMBLY_LINE,\n action: Actions.AssemblyLine.RESOURCES_AND_INTERACTIVES,\n params\n }, { replace: true });\n }\n\n public async tags(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='resourcing' subStage='tags' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async glance(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='resourcing' subStage='glance' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async resourcesAndInteractives(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='resourcing' subStage='resources_interactives' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async topicSeo(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineTopicStageView } = await import('./views/tables/AssemblyLineTopicStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineTopicStageView queryParams={params} stage='resourcing' subStage='topic_seo' pipelineId={PIPELINE_ID} />\n );\n }\n\n public review(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.ASSEMBLY_LINE,\n action: Actions.AssemblyLine.REVIEW_TOPICS,\n params\n }, { replace: true });\n }\n\n public async reviewTopics(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineReviewStageView } = await import('apps/assembly-line/views/tables/AssemblyLineReviewStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineReviewStageView queryParams={params} stage='reviewing' subStage='review_dashboard' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async publishedTopics(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineReviewStageView } = await import('apps/assembly-line/views/tables/AssemblyLineReviewStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineReviewStageView queryParams={params} stage='reviewing' subStage='published_dashboard' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async publishedVideos(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='reviewing' subStage='published_video' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async resolveTopicIssue(dashboardId: string): Promise<void> {\n const { ResolveTopicIssueView } = await import('apps/assembly-line/views/resolve-topic-issue/ResolveTopicIssueView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ResolveTopicIssueView\n dashboardId={dashboardId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async resolveVideoIssue(dashboardId: string, videoId: string): Promise<void> {\n const { ResolveVideoIssueView } = await import('apps/assembly-line/views/resolve-video-issue/ResolveVideoIssueView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ResolveVideoIssueView\n dashboardId={dashboardId}\n videoId={videoId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async reviewDetails(videoId: string): Promise<void> {\n const { AssemblyLineReviewDetailsView } = await import('apps/assembly-line/views/review-details/AssemblyLineReviewDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLineReviewDetailsView\n closePopup={() => this.layout.closePopup()}\n videoId={videoId}\n />\n );\n }\n\n public async publishTopic(dashboardId: string, params: { byPassValidation?: boolean }): Promise<void> {\n const { AssemblyLinePublishTopicView } = await import('apps/assembly-line/views/publish-topic/AssemblyLinePublishTopicView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLinePublishTopicView\n byPassValidation={params.byPassValidation}\n closePopup={() => this.layout.closePopup()}\n dashboardId={dashboardId}\n />\n );\n }\n\n public async globalSearch(params: SharedAssemblyLinePopupQueryParams = {}): Promise<void> {\n const { AssemblyLineGlobalSearchView } = await import('apps/assembly-line/views/global-search/AssemblyLineGlobalSearchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLineGlobalSearchView\n pipelineId={params.pipelineId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async generateReport(params: AssemblyLineGenerateReportViewParams): Promise<void> {\n const { AssemblyLineGenerateReportView } = await import('apps/assembly-line/views/generate-report/AssemblyLineGenerateReportView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLineGenerateReportView\n params={params}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editReportTemplate(id: string): Promise<void> {\n const { AssemblyLineEditReportTemplateView } = await import('apps/assembly-line/views/edit-report-template/AssemblyLineEditReportTemplateView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLineEditReportTemplateView\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteReportTemplate(id: string): Promise<void> {\n const { AssemblyLineDeleteReportTemplateView } = await import('apps/assembly-line/views/delete-report-template/AssemblyLineDeleteReportTemplateView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLineDeleteReportTemplateView\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editVideo(\n id: string,\n stage: AssemblyLineStage,\n initialField: AssemblyLineVideoField,\n params: SharedAssemblyLinePopupQueryParams = {}\n ): Promise<void> {\n const { EditVideoContainerView } = await import('apps/assembly-line/views/edit-video/EditVideoContainerView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditVideoContainerView\n id={id}\n stage={stage}\n initialField={initialField}\n closePopup={() => this.layout.closePopup()}\n pipelineId={params.pipelineId}\n view={params.view}\n />\n );\n }\n\n public async editClassification(\n id: string,\n stage: AssemblyLineStage,\n initialField: AssemblyLineTopicField,\n params: SharedAssemblyLinePopupQueryParams = {}\n ): Promise<void> {\n const { EditTopicContainerView } = await import('apps/assembly-line/views/edit-classification/EditTopicContainerView');\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditTopicContainerView\n id={id}\n stage={stage}\n initialField={initialField}\n closePopup={() => this.layout.closePopup()}\n pipelineId={params.pipelineId}\n theme={params.theme}\n />\n );\n }\n\n public async editDashboard(\n id: string,\n stage: AssemblyLineStage,\n initialField: AssemblyLineDashboardField,\n params: SharedAssemblyLinePopupQueryParams = {}\n ): Promise<void> {\n const { EditDashboardContainerView } = await import('apps/assembly-line/views/edit-dashboard/EditDashboardContainerView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditDashboardContainerView\n id={id}\n stage={stage}\n initialField={initialField}\n closePopup={() => this.layout.closePopup()}\n pipelineId={params.pipelineId}\n />\n );\n }\n\n public async deleteVideo(id: string, stage: AssemblyLineStage): Promise<void> {\n const { DeleteVideoView } = await import('apps/assembly-line/views/delete-video/DeleteVideoView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteVideoView id={id} stage={stage} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async archiveVideo(id: string, stage: AssemblyLineStage): Promise<void> {\n const { ArchiveVideoView } = await import('apps/assembly-line/views/archive-video/ArchiveVideoView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ArchiveVideoView id={id} stage={stage} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async wizard(params: AssemblyLineBulkActionsQueryParams): Promise<void> {\n const { AssemblyLineWizardView } = await import('apps/assembly-line/views/wizard/AssemblyLineWizardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLineWizardView\n stage={params.stage}\n presentationId={params.presentationId}\n closePopup={() => this.layout.closePopup()}\n queryParams={params.queryParams}\n pipelineId={params.pipelineId}\n view={params.view}\n />\n );\n }\n\n public async saveQuickFilter(params: AssemblyLineQueryParams & { stage: AssemblyLineStage }): Promise<void> {\n const { SaveQuickFilterView } = await import('apps/assembly-line/views/save-quick-filter/SaveQuickFilterView');\n \n const { stage, ...assemblyLineQueryParams } = params;\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <SaveQuickFilterView\n stage={stage}\n queryParams={assemblyLineQueryParams}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editQuickFilter(id: string, stage: AssemblyLineStage): Promise<void> {\n const { EditQuickFilterView } = await import('apps/assembly-line/views/edit-quick-filter/EditQuickFilterView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditQuickFilterView\n id={id}\n stage={stage}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteQuickFilter(id: string, stage: AssemblyLineStage): Promise<void> {\n const { DeleteQuickFilterView } = await import('apps/assembly-line/views/delete-quick-filter/DeleteQuickFilterView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteQuickFilterView\n id={id}\n stage={stage}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async newInteractive(videoId: string): Promise<void> {\n const { NewInteractiveView } = await import('apps/interactives/views/new-interactive/NewInteractiveView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewInteractiveView parentId={videoId} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async giveFeedback(videoId: string): Promise<void> {\n const { AssemblyLineGiveFeedbackView } = await import('apps/assembly-line/views/give-feedback/AssemblyLineGiveFeedback');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLineGiveFeedbackView id={videoId} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async videoDashboards(videoId: string): Promise<void> {\n const { VideoDashboardsView } = await import('apps/assembly-line/views/video-dashboards/VideoDashboardsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <VideoDashboardsView id={videoId} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async pictureInPicture(videoId: string): Promise<void> {\n const { PictureInPictureView } = await import('./views/picture-in-picture/PictureInPictureView');\n \n this.layout.showChildView(\n LayoutRegions.PICTURE_IN_PICTURE,\n <PictureInPictureView videoId={videoId} close={() => this.layout.closePictureInPicture()} />\n );\n }\n\n public async viewAssignees(id: string): Promise<void> {\n const { VideoAssigneesView } = await import('./views/view-assignees/VideoAssigneesView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <VideoAssigneesView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\nimport { RecentItemHelper } from 'libs/shared/utils/RecentItemHelper';\n\nimport { AppChannels } from 'shared/constants';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { SubjectMemberType } from 'shared/enums';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts/curator-layout';\n\nimport { RECENT_CLIPS_KEY, RECENT_CLIPS_LIMIT } from 'apps/clips/views/find-clips/FindClipsView';\n\nclass ClipsAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CLIPS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/clips(/)': 'index',\n 'manage/clips/:id(/)': 'previewClip',\n 'manage/clips/:id/edit(/)': 'editClipDetails',\n 'manage/clips/:id/classifications(/)': 'editClipClassifications',\n 'manage/clips/:id/audiences(/)': 'editClipAudiences',\n 'manage/clips/:id/curation(/)': 'editClipCuration',\n 'manage/clips/:id/interactives(/)': 'editClipInteractives',\n 'manage/clips/:id/tags(/)': 'editClipTags',\n 'manage/clips/:id/glance(/)': 'editClipGlance',\n 'manage/clips/:id/resources(/)': 'editClipResources',\n 'manage/videos/:id/clips/new(/)': 'createClip'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'uploadImage',\n 'createClipDetails',\n 'editClipDetails',\n 'removeClipClassification',\n 'deleteClip',\n 'archiveClip',\n 'publishClip'\n ];\n }\n}\n\nexport class ClipsApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Clips Application';\n }\n\n public static get router(): any {\n return ClipsAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CLIPS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async index(): Promise<void> {\n const { FindClipsView } = await import('apps/clips/views/find-clips/FindClipsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <FindClipsView />\n );\n }\n\n public async previewClip(id: string): Promise<void> {\n const { PreviewClipView } = await import('apps/clips/views/preview-clip/PreviewClipView');\n \n this.addRecentClip(id);\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <PreviewClipView id={id} />\n );\n }\n\n public async createClip(videoId: string): Promise<void> {\n const { CreateClipView } = await import('apps/clips/views/create-clip/CreateClipView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <CreateClipView videoId={videoId} />);\n }\n\n public async createClipDetails(videoId: string, params: HashObject = {}): Promise<void> {\n const { CreateClipDetailsView } = await import('apps/clips/views/create-clip/CreateClipDetailsView');\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateClipDetailsView\n videoId={videoId}\n startTime={params.startTime}\n endTime={params.endTime}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editClipDetails(clipId: string): Promise<void> {\n const { EditClipDetailsView } = await import('apps/clips/views/edit-clip-details/EditClipDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClipDetailsView clipId={clipId} />\n );\n }\n\n public async editClipClassifications(clipId: string): Promise<void> {\n const { EditClipClassificationsView } = await import('apps/clips/views/edit-clip-classifications/EditClipClassificationsView');\n \n this.addRecentClip(clipId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClipClassificationsView clipId={clipId} />);\n }\n\n public async editClipAudiences(clipId: string): Promise<void> {\n const { EditClipAudiencesView } = await import('apps/clips/views/edit-clip-audiences/EditClipAudiencesView');\n \n this.addRecentClip(clipId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClipAudiencesView clipId={clipId} />);\n }\n\n public async editClipCuration(clipId: string): Promise<void> {\n const { EditClipCurationView } = await import('apps/clips/views/edit-clip-curation/EditClipCurationView');\n \n this.addRecentClip(clipId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClipCurationView clipId={clipId} />);\n }\n\n public async editClipInteractives(clipId: string): Promise<void> {\n const { EditClipInteractivesView } = await import('apps/clips/views/edit-clip-interactives/EditClipInteractivesView');\n \n this.addRecentClip(clipId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClipInteractivesView clipId={clipId} />);\n }\n\n public async editClipTags(clipId: string): Promise<void> {\n const { EditClipTagsView } = await import('apps/clips/views/edit-clip-tags/EditClipTagsView');\n \n this.addRecentClip(clipId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClipTagsView clipId={clipId} />);\n }\n\n public async editClipGlance(clipId: string): Promise<void> {\n const { EditClipGlanceView } = await import('apps/clips/views/edit-clip-glance/EditClipGlanceView');\n \n this.addRecentClip(clipId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClipGlanceView clipId={clipId} />);\n }\n\n public async editClipResources(clipId: string): Promise<void> {\n const { EditClipResourcesView } = await import('apps/clips/views/edit-clip-resources/EditClipResourcesView');\n \n this.addRecentClip(clipId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClipResourcesView clipId={clipId} />);\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async removeClipClassification(\n classificationId: string,\n memberId: string,\n memberType: SubjectMemberType\n ): Promise<void> {\n const { RemoveClassificationMemberView } = await import('shared/views/remove-classification-member');\n \n const props = {\n classificationId,\n memberId,\n memberType,\n closePopup: () => this.layout.closePopup()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationMemberView {...props} />);\n }\n\n public async archiveClip(id: string): Promise<void> {\n const { ArchiveObjectView } = await import('shared/views/archive-object/ArchiveObjectView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ArchiveObjectView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async deleteClip(id: string): Promise<void> {\n const { DeleteClipView } = await import('apps/clips/views/delete-clip/DeleteClipView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteClipView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async publishClip(id: string): Promise<void> {\n const { PublishObjectView } = await import('shared/views/publish-object/PublishObjectView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <PublishObjectView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n private addRecentClip(id: string): void {\n RecentItemHelper.addRecentItem(RECENT_CLIPS_KEY, LocalStorageHelper, {\n id: id.toString(),\n limit: RECENT_CLIPS_LIMIT,\n expire: false\n });\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { Core } from 'libs/common/core';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\n\nimport { AppChannels, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass CompaniesAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.COMPANIES;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/companies(/)': 'companies',\n 'manage/companies/new(/)': 'newCompany',\n 'manage/companies/:id(/)': 'editCompany',\n 'manage/companies/:id/curation(/)': 'editCompanyCuration',\n 'manage/companies/:id/dashboards(/)': 'companyDashboards',\n 'manage/companies/:id/presentations/:pid/dashboards(/)': 'editDashboards'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'uploadImage',\n 'newCompanyDashboard',\n 'deleteDashboard',\n 'editCompanyDashboardDetails',\n 'publishDashboard'\n ];\n }\n}\nexport class CompaniesApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Companies Application';\n }\n\n public static get router(): any {\n return CompaniesAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.COMPANIES;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n public async companies(params: ObjectHash): Promise<void> {\n const { CompaniesView } = await import('apps/companies/views');\n \n const { cursor } = params;\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CompaniesView context='clickview' cursor={cursor} />\n );\n }\n\n public async newCompany(): Promise<void> {\n const { NewCompanyView } = await import('apps/companies/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewCompanyView context='clickview' />);\n }\n\n public async editCompany(id: string): Promise<void> {\n const { EditCompanyView } = await import('apps/companies/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditCompanyView context='clickview' companyId={id} />);\n }\n\n public async editCompanyCuration(id: string): Promise<void> {\n const { EditCompanyCurationView } = await import('apps/companies/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditCompanyCurationView companyId={id} />);\n }\n \n public async companyDashboards(id: string): Promise<void> {\n const { CompanyDashboardsView } = await import('./views/company-dashboards/CompanyDashboardsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <CompanyDashboardsView companyId={id} />);\n }\n\n public async editDashboards(companyId: string, presentationId: string): Promise<void> {\n const { EditCompanyDashboardsView } = await import('apps/companies/views/edit-dashboards/EditCompanyDashboardsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditCompanyDashboardsView\n companyId={companyId}\n presentationId={presentationId}\n context='clickview'\n />\n );\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async newCompanyDashboard(companyId: string, presentationId: string): Promise<void> {\n const { NewCompanyDashboardView } = await import('apps/companies/views/new-dashboard/NewCompanyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewCompanyDashboardView\n companyId={companyId}\n presentationId={presentationId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteDashboard(dashboardId: string): Promise<void> {\n const { RemoveCompanyDashboardView } = await import('apps/companies/views/remove-dashboard/RemoveCompanyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveCompanyDashboardView\n dashboardId={dashboardId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editCompanyDashboardDetails(dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('apps/dashboard-editor/views/edit-dashboard-details/EditDashboardDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditDashboardDetailsView\n dashboardId={dashboardId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async publishDashboard(\n dashboardId: string,\n dashboardToArchiveId: string\n ): Promise<void> {\n const { PublishDashboardView } = await import('shared/views/publish-dashboard/PublishDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <PublishDashboardView\n dashboardToPublishId={dashboardId}\n dashboardToArchiveId={\n typeof dashboardToArchiveId === 'string' ?\n dashboardToArchiveId :\n undefined}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { Core } from 'libs/common/core';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { IImageMinDimensions } from 'libs/shared/constants/ImageSizes';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\n\nimport { AppChannels, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass ContentPartnersAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CONTENT_PARTNERS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/channels': 'contentPartners',\n 'manage/channels/new': 'newContentPartner',\n 'manage/channels/manage-featured-channels': 'manageFeaturedChannels',\n 'manage/channels/:id': 'editContentPartner',\n 'manage/channels/:id/dashboards': 'contentPartnerDashboards',\n 'manage/channels/:id/reports': 'viewReports',\n 'manage/channels/:id/regions-mapping': 'regionsMapping',\n 'manage/channels/:id/videos': 'viewVideos',\n 'manage/channels/:id/series': 'viewSeries'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'uploadImage',\n 'newContentPartnerDashboard',\n 'deleteDashboard',\n 'editDashboardDetails',\n 'publishDashboard',\n 'deleteContentPartner',\n 'deleteContentPartnerVideos',\n 'deleteContentPartnerSeries',\n 'addVideos',\n 'addSeries',\n 'copyDashboard'\n ];\n }\n}\nexport class ContentPartnersApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'ContentPartner Application';\n }\n\n public static get router(): any {\n return ContentPartnersAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CONTENT_PARTNERS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n public async contentPartners(params: ObjectHash): Promise<void> {\n const { ContentPartnersView } = await import('apps/content-partners/views/content-partners/ContentPartnersView');\n \n const { cursor } = params;\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContentPartnersView cursor={cursor} />\n );\n }\n\n public async manageFeaturedChannels(): Promise<void> {\n const { ManageFeaturedChannelsView } = await import('apps/content-partners/views/manage-featured-channels/ManageFeaturedChannelsView');\n\n this.layout.showChildView(LayoutRegions.CONTENT, <ManageFeaturedChannelsView />);\n }\n\n public async newContentPartner(): Promise<void> {\n const { NewContentPartnerView } = await import('apps/content-partners/views/new-content-partner/NewContentPartnerView');\n\n this.layout.showChildView(LayoutRegions.CONTENT, <NewContentPartnerView />);\n }\n\n public async editContentPartner(id: string): Promise<void> {\n const { EditContentPartnerView } = await import('apps/content-partners/views/edit-content-partner/EditContentPartnerView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditContentPartnerView contentPartnerId={id} />);\n }\n\n public async contentPartnerDashboards(id: string): Promise<void> {\n const { ContentPartnerDashboardsView } = await import('apps/content-partners/views/content-partner-dashboards/ContentPartnerDashboardsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <ContentPartnerDashboardsView id={id} />);\n }\n\n public async uploadImage(imageType: ImageType, params: { overrideDimensions?: IImageMinDimensions }): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n overrideDimensions={params.overrideDimensions}\n />\n );\n }\n\n public async deleteContentPartner(id: string): Promise<void> {\n const { DeleteContentPartnerView } = await import('apps/content-partners/views/delete-content-partner/DeleteContentPartnerView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteContentPartnerView\n contentPartnerId={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async newContentPartnerDashboard(companyId: string, slug: string): Promise<void> {\n const { NewDashboardView } = await import('apps/content-partners/views/new-dashboard/NewDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewDashboardView\n id={companyId}\n slug={slug}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteDashboard(dashboardId: string): Promise<void> {\n const { RemoveCompanyDashboardView } = await import('apps/companies/views/remove-dashboard/RemoveCompanyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveCompanyDashboardView\n dashboardId={dashboardId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editDashboardDetails(dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('apps/dashboard-editor/views/edit-dashboard-details/EditDashboardDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditDashboardDetailsView\n dashboardId={dashboardId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async publishDashboard(\n dashboardId: string,\n dashboardToArchiveId: string\n ): Promise<void> {\n const { PublishDashboardView } = await import('shared/views/publish-dashboard/PublishDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <PublishDashboardView\n dashboardToPublishId={dashboardId}\n dashboardToArchiveId={\n typeof dashboardToArchiveId === 'string' ?\n dashboardToArchiveId :\n undefined}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async viewReports(id: string): Promise<void> {\n const { ContentPartnerReportsView } = await import('apps/content-partners/views/content-partner-reports/ContentPartnerReportsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContentPartnerReportsView\n contentPartnerId={id}\n />\n );\n }\n\n public async regionsMapping(id: string): Promise<void> {\n const { RegionsMappingView } = await import('apps/content-partners/views/regions-mapping/RegionsMappingView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <RegionsMappingView\n contentPartnerId={id}\n />\n );\n }\n\n public async viewVideos(id: string): Promise<void> {\n const { ContentPartnerVideosView } = await import('apps/content-partners/views/content-partner-videos/ContentPartnerVideosView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContentPartnerVideosView\n id={id}\n />\n );\n }\n\n public async viewSeries(id: string): Promise<void> {\n const { ContentPartnerSeriesView } = await import('apps/content-partners/views/content-partner-series/ContentPartnerSeriesView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContentPartnerSeriesView\n id={id}\n />\n );\n }\n\n public async deleteContentPartnerVideos(id: string, params: { videoIds: string[] }): Promise<void> {\n const { ContentPartnerDeleteObjectsView } = await import('apps/content-partners/views/content-partner-delete-objects/ContentPartnerDeleteObjectsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ContentPartnerDeleteObjectsView\n contentPartnerId={id}\n objectIds={params.videoIds}\n type='videos'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteContentPartnerSeries(id: string, params: { seriesIds: string[] }): Promise<void> {\n const { ContentPartnerDeleteObjectsView } = await import('apps/content-partners/views/content-partner-delete-objects/ContentPartnerDeleteObjectsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ContentPartnerDeleteObjectsView\n contentPartnerId={id}\n objectIds={params.seriesIds}\n type='series'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addVideos(id: string): Promise<void> {\n const { ContentPartnerAddObjectsView } = await import('apps/content-partners/views/content-partner-add-objects/ContentPartnerAddObjectsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ContentPartnerAddObjectsView\n contentPartnerId={id}\n type='videos'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async copyDashboard(dashboardId: string): Promise<void> {\n const { CopyDashboardView } = await import('apps/discover/views/copy-dashboard/CopyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyDashboardView\n dashboardId={dashboardId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addSeries(id: string): Promise<void> {\n const { ContentPartnerAddObjectsView } = await import('apps/content-partners/views/content-partner-add-objects/ContentPartnerAddObjectsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ContentPartnerAddObjectsView\n contentPartnerId={id}\n type='series'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n}\n","import { Core } from 'libs/common/backbone/index';\n\nlet shouldHideNav = false;\nlet shouldHideHeader = false;\nlet lockContentWidth = false;\nlet logoClick = true;\nlet showSearch = true;\n\nclass LayoutHelperSingleton extends Core.Service {\n // @ts-ignore\n public get name(): string {\n return 'LayoutHelper';\n }\n \n public shouldHideNav() {\n return shouldHideNav;\n }\n\n public disableNav() {\n shouldHideNav = true;\n }\n\n public enableNav() {\n shouldHideNav = false;\n }\n\n public shouldHideHeader() {\n return shouldHideHeader;\n }\n\n public disableHeader() {\n shouldHideHeader = true;\n }\n \n public enableHeader() {\n shouldHideHeader = false;\n }\n\n public lockContentWidth() {\n lockContentWidth = true;\n this.trigger('change:lockContentWidth');\n }\n\n public unlockContentWidth() {\n lockContentWidth = false;\n this.trigger('change:lockContentWidth');\n }\n\n public shouldLockContentWidth() {\n return !!lockContentWidth;\n }\n\n public shouldShowSearch() {\n return showSearch;\n }\n\n public enableSearch() {\n showSearch = true;\n }\n\n public disableSearch() {\n showSearch = false;\n }\n\n public enableLogoClick() {\n logoClick = true;\n }\n\n public disableLogoClick() {\n logoClick = false;\n }\n\n /**\n * If clicking on the logo in the top nav goes to the home page, we want to disable this\n * when students are attempting a open classroom share. - Sha\n */\n public shouldAllowLogoClick() {\n return logoClick;\n }\n}\n\nexport const LayoutHelper = new LayoutHelperSingleton();\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\nimport { ApplicationOptions } from 'backbone.marionette';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { EntityType, LocationContext, OperationDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { UserAuditLogQueryParams } from 'libs/shared/apps/user-manager/components/audit-log/components/audit-log-filters/UserAuditLogFilters';\nimport { UserWizardParams, UserWizardStatusParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserWizardParams';\nimport { BulkJobsQueryParams } from 'libs/shared/components/bulk-jobs-filters/BulkJobsFilters';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { MasterCustomerStatus } from 'libs/shared/interfaces/models/Customer';\nimport { LayoutHelper } from 'libs/shared/utils/LayoutHelper';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { FullScreenLayoutView, FullScreenLayoutViewOptions } from 'shared/layouts';\n\nimport { ConvertingWizardQueryParams } from 'apps/crm-studio/views/customers/customer-converting-wizard/interfaces/ConvertingWizardQueryParams';\nimport { SsoWizardQueryParams } from 'apps/crm-studio/views/customers/customer-sso-wizard/interfaces/SsoWizardQueryParams';\nimport { DomainVerificationStatus } from 'apps/crm-studio/views/domains/types';\nimport { NewOrganisationWizardQueryParams } from 'apps/crm-studio/views/organisations/new-organisation-wizard/interfaces/NewOrganisationWizardQueryParams';\nimport { RosteringWizardQueryParams } from 'apps/crm-studio/views/organisations/organisation-rostering-wizard/interface/RosteringWizardQueryParams';\nimport { OrganisationSsoWizardQueryParams } from 'apps/crm-studio/views/organisations/organisation-sso-wizard/interfaces/OrganisationSsoWizardQueryParams';\n\nclass CrmStudioAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CRM_STUDIO;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n // Customers\n 'crm-studio(/)': 'index',\n 'crm-studio/customers': 'customers',\n 'crm-studio/customers/:id/overview': 'customerOverview',\n 'crm-studio/customers/:id': 'customerOverview',\n 'crm-studio/customers/:id/pilot': 'customerPilot',\n 'crm-studio/customers/:id/options': 'customerOptions',\n 'crm-studio/customers/:id/cft': 'customerCft',\n 'crm-studio/customers/:id/content': 'customerContent',\n 'crm-studio/customers/:id/products': 'customerProducts',\n 'crm-studio/customers/:id/sso': 'customerSso',\n 'crm-studio/customers/:id/access-settings': 'customerAccessSettings',\n 'crm-studio/customers/:id/access-settings/domains': 'customerAccessSettingsDomain',\n 'crm-studio/customers/:id/access-settings/year-groups': 'customerAccessSettingsYearGroups',\n 'crm-studio/customers/:id/ip-auth': 'customerIpAuth',\n 'crm-studio/customers/:id/domains': 'customerDomains',\n 'crm-studio/customers/:id/customer-library/:libId': 'customerLibrary',\n 'crm-studio/customers/:id/shared-library/:libId': 'sharedLibrary',\n 'crm-studio/customers/:id/users': 'customerUsers',\n 'crm-studio/customers/:id/users/students(/)': 'manageStudents',\n 'crm-studio/customers/:id/users/staff(/)': 'manageStaff',\n\n // converting wizard\n 'crm-studio/customers/:id/converting(/)': 'customerConvertingWizard',\n 'crm-studio/customers/:id/converting/salesforce': 'customerConvertingWizardSalesforce',\n 'crm-studio/customers/:id/converting/cft': 'customerConvertingWizardCft',\n 'crm-studio/customers/:id/converting/customisations': 'customerConvertingWizardCustomisations',\n 'crm-studio/customers/:id/converting/overview': 'customerConvertingWizardOverview',\n\n // sso wizard\n 'crm-studio/customers/:id/sso-wizard': 'customerSsoWizard',\n 'crm-studio/customers/:id/sso-wizard/provider': 'customerSsoWizardProvider',\n 'crm-studio/customers/:id/sso-wizard/mapping': 'customerSsoWizardMapping',\n 'crm-studio/customers/:id/sso-wizard/year-group': 'customerSsoWizardYearGroup',\n 'crm-studio/customers/:id/sso-wizard/review': 'customerSsoWizardReview',\n 'crm-studio/customers/:id/sso-wizard/create-bindings': 'customerSsoWizardCreateBindings',\n\n // Organisations\n 'crm-studio/organisations': 'organisations',\n 'crm-studio/organisations/:id': 'organisationOverview',\n 'crm-studio/organisations/:id/overview': 'organisationOverview',\n 'crm-studio/organisations/:id/sso': 'organisationSso',\n 'crm-studio/organisations/:id/domains': 'organisationDomains',\n 'crm-studio/organisations/:id/feature-flags': 'organisationFeatureFlags',\n 'crm-studio/organisations/:id/rostering': 'organisationRostering',\n 'crm-studio/organisations/:id/rostering/settings': 'organisationRosteringSettings',\n\n 'crm-studio/organisations/new': 'newOrganisationWizard',\n 'crm-studio/organisations/new/details': 'newOrganisationWizardDetails',\n 'crm-studio/organisations/new/confirm': 'newOrganisationWizardConfirm',\n\n // org sso wizard\n 'crm-studio/organisations/:id/sso-wizard': 'organisationSsoWizard',\n 'crm-studio/organisations/:id/sso-wizard/provider': 'organisationSsoWizardProvider',\n 'crm-studio/organisations/:id/sso-wizard/mapping': 'organisationSsoWizardMapping',\n 'crm-studio/organisations/:id/sso-wizard/review': 'organisationSsoWizardReview',\n\n // rostering wizard\n 'crm-studio/organisations/:id/rostering-wizard': 'organisationRosteringWizard',\n 'crm-studio/organisations/:id/rostering-wizard/select-provider': 'organisationRosteringWizardSelectProvider',\n 'crm-studio/organisations/:id/rostering-wizard/set-up-rostering': 'organisationRosteringWizardSetUpRostering',\n 'crm-studio/organisations/:id/rostering-wizard/select-external': 'organisationRosteringWizardSelectExternal',\n 'crm-studio/organisations/:id/rostering-wizard/mapping': 'organisationRosteringWizardMapping',\n 'crm-studio/organisations/:id/rostering-wizard/confirmation': 'organisationRosteringWizardConfirmation',\n\n // tv status\n 'crm-studio/tv-status': 'tvStatus',\n\n // users\n 'crm-studio/users': 'users',\n 'crm-studio/users/:id': 'userOverview',\n 'crm-studio/users/:id/usage': 'userWorkspaceUsage',\n 'crm-studio/users/:id/settings': 'userSettings',\n 'crm-studio/users/:id/feature-flags': 'userFeatureFlags',\n 'crm-studio/users/:id/curator-groups': 'userManageCuratorGroups',\n 'crm-studio/users/:id/schools': 'userCustomerSchools',\n 'crm-studio/customers/:id/users/wizard/review-accounts(/)': 'wizardReviewAccounts',\n 'crm-studio/customers/:id/users/wizard/select-action(/)': 'wizardSelectAction',\n 'crm-studio/customers/:id/users/wizard/action-details/year-group-rollover(/)': 'wizardYearGroupRolloverActionDetails',\n 'crm-studio/customers/:id/users/wizard/action-details/change-year-group(/)': 'wizardChangeYearGroupActionDetails',\n 'crm-studio/customers/:id/users/wizard/action-details/delete(/)': 'wizardDeleteActionDetails',\n 'crm-studio/customers/:id/users/wizard/action-details/activation(/)': 'wizardActivationActionDetails',\n 'crm-studio/customers/:id/users/wizard/action-details/add-to-classroom(/)': 'wizardAddToClassroomActionDetails',\n 'crm-studio/customers/:id/users/wizard/action-details/reset-password(/)': 'wizardResetPasswordActionDetails',\n 'crm-studio/customers/:id/users/wizard/action-details/remove-users(/)': 'wizardRemoveFromSchoolActionDetails',\n 'crm-studio/customers/:id/users/wizard/confirmation/year-group-rollover(/)': 'wizardYearGroupRolloverConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/change-year-group(/)': 'wizardChangeYearGroupConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/delete(/)': 'wizardDeleteConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/deactivate(/)': 'wizardDeactivateConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/reactivate(/)': 'wizardReactivateConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/reset-email(/)': 'wizardResetEmailConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/add-to-classroom(/)': 'wizardAddToClassroomConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/reset-password(/)': 'wizardResetPasswordConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/activation-email(/)': 'wizardActivationEmailConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/remove-users(/)': 'wizardRemoveFromSchoolConfirmation',\n 'crm-studio/customers/:id/users/wizard/status/polling(/)': 'wizardStatusPolling',\n 'crm-studio/customers/:id/users/wizard/status/complete(/)': 'wizardStatusComplete',\n\n // user upload wizard\n 'crm-studio/customers/:id/users/upload/review-accounts(/)': 'userUploadReviewAccounts',\n 'crm-studio/customers/:id/users/upload/fix-duplicates(/)': 'userUploadFixDuplicates',\n 'crm-studio/customers/:id/users/upload/review-existing-accounts(/)': 'userUploadReviewExistingAccounts',\n 'crm-studio/customers/:id/users/upload/confirmation(/)': 'userUploadConfirmation',\n 'crm-studio/customers/:id/users/upload/status/polling(/)': 'userUploadStatusPolling',\n 'crm-studio/customers/:id/users/upload/status/complete(/)': 'userUploadStatusComplete',\n \n 'crm-studio/customers/:id/users/bulk-action-history(/)': 'auditLog',\n\n 'crm-studio/domains': 'domains',\n 'crm-studio/domains/review': 'domainsReview',\n 'crm-studio/domains/final-review': 'domainsFinalReview',\n\n 'crm-studio/orgId-manager(/)': 'manageOrgId'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'customerOverview',\n 'updateCustomerMasterStatus',\n 'editPilot',\n 'removePilot',\n 'editCustomerName',\n 'editCustomerStatus',\n 'updateOrganisationName',\n 'addCustomersToOrganisation',\n 'removeCustomerFromOrganisation',\n 'removeOrganisationSsoMapping',\n 'editUserCredit',\n 'editCustomerType',\n 'changePassword',\n 'removeUserFromCustomer',\n 'toggleUserStatus',\n 'addUserToCustomer',\n 'manageYearGroup',\n 'bulkRemoveUsers',\n 'crmIdSelect',\n 'removeCustomerSsoMapping',\n 'removeLibrarySubscriber',\n 'addLibrarySubscriber',\n 'customerUsers',\n 'createUser',\n 'addNewUsers',\n 'editUser',\n 'bulkRemoveUsers',\n 'toggleUserStatus',\n 'exportUserList',\n 'bulkUserUploadPopup',\n 'bulkUserUploadSuccess',\n 'manageUserCuratorGroups',\n 'deleteUserEmail',\n 'removeUserFromCustomer',\n 'addUserToCustomer',\n 'changePassword',\n 'bulkActionSummary',\n 'editPilot',\n 'removePilot',\n 'editUserCredit',\n 'addCustomerIpAuthRange',\n 'removeCustomerIpAuthRange',\n 'disableCustomerIpAuth',\n 'generateLicenseKey',\n 'customerSsoWizardCreateIdpPopup',\n 'customerSsoWizardEditIdpPopup',\n 'customerSsoWizardDeleteIdpPopup',\n 'domainAddPopup',\n 'domainChangeStatusPopup',\n 'tvStatusSet',\n 'customiseCft'\n ];\n }\n\n // @ts-ignore\n protected get externalRoutes(): ObjectHash {\n return {\n '/': 'exit',\n 'customers/:id(/)': 'manageCustomer',\n 'customers/:id/users/:id/options(/)': 'editUserOptions'\n };\n }\n}\n\nexport class CrmStudioApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n public initialize(options: ApplicationOptions): void {\n super.initialize(options);\n const footer = document.getElementById('footer');\n if (footer) {\n footer.style.display = 'block';\n }\n }\n\n public onBeforeAction(): void {\n LayoutHelper.unlockContentWidth();\n }\n\n public onDestroy(): void {\n LayoutHelper.unlockContentWidth();\n }\n\n // @ts-ignore\n public get name(): string {\n return 'CRM Studio Application';\n }\n\n public static get router(): any {\n return CrmStudioAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CRM_STUDIO;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: true\n }\n };\n }\n\n public index(): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.CUSTOMERS\n }, { replace: true });\n }\n\n public async customers(params: HashObject): Promise<void> {\n const { CustomersView } = await import('apps/crm-studio/views/customers/CustomersView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomersView\n query={params.query}\n page={params.page}\n customerStatus={params.customerStatus}\n customerType={params.customerType}\n status={params.status}\n cursor={params.cursor}\n crmId={params.crmId}\n />\n );\n }\n\n public async customerOverview(id: string): Promise<void> {\n const { CustomerOverviewView } = await import('apps/crm-studio/views/customers/CustomerOverviewView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerOverviewView id={id} />\n );\n }\n\n public async customerPilot(id: string): Promise<void> {\n const { CustomerPilotView } = await import('apps/crm-studio/views/customers/CustomerPilotView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerPilotView customerId={id} />\n );\n }\n\n public customerConvertingWizard(id: string): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.CUSTOMER_CONVERTING_WIZARD_SALESFORCE,\n args: [id]\n }, { replace: true });\n }\n\n public async customerConvertingWizardSalesforce(id: string, queryParams: ConvertingWizardQueryParams): Promise<void> {\n const { CustomerConvertingWizardSalesforceView } = await import('apps/crm-studio/views/customers/customer-converting-wizard/CustomerConvertingWizardSalesforceView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerConvertingWizardSalesforceView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerConvertingWizardCft(id: string, queryParams: ConvertingWizardQueryParams): Promise<void> {\n const { CustomerConvertingWizardCftView } = await import('apps/crm-studio/views/customers/customer-converting-wizard/CustomerConvertingWizardCftView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerConvertingWizardCftView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerConvertingWizardCustomisations(\n id: string,\n queryParams: ConvertingWizardQueryParams\n ): Promise<void> {\n const { CustomerConvertingWizardCustomisationsView } = await import('apps/crm-studio/views/customers/customer-converting-wizard/CustomerConvertingWizardCustomisationsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerConvertingWizardCustomisationsView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerConvertingWizardOverview(\n id: string,\n queryParams: ConvertingWizardQueryParams\n ): Promise<void> {\n const { CustomerConvertingWizardOverviewView } = await import('apps/crm-studio/views/customers/customer-converting-wizard/CustomerConvertingWizardOverviewView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerConvertingWizardOverviewView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerCft(id: string): Promise<void> {\n const { CustomerCftView } = await import('apps/crm-studio/views/customers/CustomerCftView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerCftView id={id} />\n );\n }\n\n public async customiseCft(customerId: string, cft: string): Promise<void> {\n const { CustomiseCftView } = await import('apps/crm-studio/views/customers/CustomiseCftView');\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CustomiseCftView\n customerId={customerId}\n cft={cft}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async customerOptions(id: string): Promise<void> {\n const { CustomerOptionsView } = await import('apps/crm-studio/views/customers/CustomerOptionsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerOptionsView id={id} />\n );\n }\n\n public async customerSso(id: string): Promise<void> {\n const { CustomerSsoView } = await import('apps/crm-studio/views/customers/CustomerSsoView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerSsoView id={id} />\n );\n }\n\n public customerSsoWizard(id: string): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.CUSTOMER_SSO_WIZARD_PROVIDER,\n args: [id]\n }, { replace: true });\n }\n\n public async customerSsoWizardProvider(id: string, queryParams: SsoWizardQueryParams): Promise<void> {\n const { CustomerSsoWizardProviderView } = await import('apps/crm-studio/views/customers/customer-sso-wizard/CustomerSsoWizardProvider');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerSsoWizardProviderView id={id} queryParams={queryParams} />\n );\n }\n\n public async generateLicenseKey(id: string): Promise<void> {\n const { CustomerSsoWizardGenerateLicenseKeyView } = await import('apps/crm-studio/views/customers/customer-sso-wizard/generate-license-key/CustomerSsoWizardGenerateLicenseKeyView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CustomerSsoWizardGenerateLicenseKeyView\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async customerSsoWizardMapping(id: string, queryParams: SsoWizardQueryParams): Promise<void> {\n const { CustomerSsoWizardMappingView } = await import('apps/crm-studio/views/customers/customer-sso-wizard/CustomerSsoWizardMapping');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerSsoWizardMappingView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerSsoWizardYearGroup(id: string, queryParams: SsoWizardQueryParams): Promise<void> {\n const { CustomerSsoWizardYearGroupContainerView } = await import('apps/crm-studio/views/customers/customer-sso-wizard/CustomerSsoWizardYearGroupContainerView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerSsoWizardYearGroupContainerView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerSsoWizardReview(id: string, queryParams: SsoWizardQueryParams): Promise<void> {\n const { CustomerSsoWizardReviewView } = await import('apps/crm-studio/views/customers/customer-sso-wizard/CustomerSsoWizardReview');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerSsoWizardReviewView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerSsoWizardCreateBindings(id: string, queryParams: SsoWizardQueryParams): Promise<void> {\n const { CustomerSsoWizardCreateBindingsView } = await import('apps/crm-studio/views/customers/customer-sso-wizard/CustomerSsoWizardCreateBindingsView');\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerSsoWizardCreateBindingsView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerSsoWizardCreateIdpPopup(customerId: string, params: { isOrg?: boolean }): Promise<void> {\n const { CreateIdpPopupView } = await import('apps/crm-studio/views/shared/CreateIdpPopupView');\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateIdpPopupView\n entityId={customerId}\n isOrg={params.isOrg}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async customerSsoWizardEditIdpPopup(customerId: string, params: HashObject): Promise<void> {\n const { EditIdpPopupView } = await import('apps/crm-studio/views/shared/EditIdpPopupView');\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditIdpPopupView\n entityId={customerId}\n idpId={params.idpId}\n isOrg={params.isOrg}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async customerSsoWizardDeleteIdpPopup(idpId: string, params: HashObject): Promise<void> {\n const { DeleteIdpPopupView } = await import('apps/crm-studio/views/shared/DeleteIdpPopupView');\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteIdpPopupView\n idpId={idpId}\n isOrg={params.isOrg}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async customerLibrary(id: string, libId: string): Promise<void> {\n const { CustomerLibraryView } = await import('apps/crm-studio/views/customers/CustomerLibraryView');\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerLibraryView id={id} libId={libId} type='customer' />\n );\n }\n\n public async sharedLibrary(id: string, libId: string): Promise<void> {\n const { CustomerLibraryView } = await import('apps/crm-studio/views/customers/CustomerLibraryView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerLibraryView id={id} libId={libId} type='shared' />\n );\n }\n\n public async removeLibrarySubscriber(customerId: string, libraryId: string): Promise<void> {\n const { RemoveLibrarySubscriberView } = await import('apps/crm-studio/views/customers/RemoveLibrarySubscriberView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveLibrarySubscriberView\n libraryId={libraryId}\n customerId={customerId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addLibrarySubscriber(libraryId: string): Promise<void> {\n const { AddLibrarySubscriberView } = await import('apps/crm-studio/views/customers/AddLibrarySubscriber');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddLibrarySubscriberView\n libraryId={libraryId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async organisations(params: HashObject): Promise<void> {\n const { OrganisationsView } = await import('apps/crm-studio/views/organisations/OrganisationsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationsView query={params.query} cursor={params.cursor} />\n );\n }\n\n public async organisationOverview(id: string): Promise<void> {\n const { OrganisationOverviewView } = await import('apps/crm-studio/views/organisations/OrganisationOverviewView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationOverviewView id={id} />\n );\n }\n\n public async organisationSso(id: string): Promise<void> {\n const { OrganisationSsoView } = await import('apps/crm-studio/views/organisations/OrganisationSsoView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationSsoView id={id} />\n );\n }\n\n public async organisationDomains(id: string): Promise<void> {\n const { OrganisationDomainsView } = await import('apps/crm-studio/views/organisations/OrganisationDomainsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationDomainsView id={id} />\n );\n }\n\n public organisationSsoWizard(id: string): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.ORGANISATION_SSO_WIZARD_PROVIDER,\n args: [id]\n });\n }\n\n public async removeOrganisationSsoMapping(id: string, idpId: string): Promise<void> {\n const { RemoveOrganisationSsoMappingView } = await import('apps/crm-studio/views/organisations/RemoveOrganisationSsoMappingView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveOrganisationSsoMappingView\n id={id}\n idpId={idpId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async organisationSsoWizardProvider(id: string, queryParams: OrganisationSsoWizardQueryParams): Promise<void> {\n const { OrgnisationSsoWizardProviderView } = await import('apps/crm-studio/views/organisations/organisation-sso-wizard/organisation-sso-wizard-provider/OrganisationSsoWizardProvider');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrgnisationSsoWizardProviderView id={id} queryParams={queryParams}/>\n );\n }\n\n public async organisationSsoWizardMapping(id: string, queryParams: OrganisationSsoWizardQueryParams): Promise<void> {\n const { OrganisationSsoWizardMappingView } = await import('apps/crm-studio/views/organisations/organisation-sso-wizard/organisation-sso-wizard-mapping/OrganisationSsoWizardMapping');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationSsoWizardMappingView id={id} queryParams={queryParams}/>\n );\n }\n\n public async organisationSsoWizardReview(id: string, queryParams: OrganisationSsoWizardQueryParams): Promise<void> {\n const { OrganisationSsoWizardReviewView } = await import('apps/crm-studio/views/organisations/organisation-sso-wizard/organisation-sso-wizard-review/OrganisationSsoWizardReview');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationSsoWizardReviewView id={id} queryParams={queryParams}/>\n );\n }\n\n public async organisationRostering(id: string, queryParams: BulkJobsQueryParams): Promise<void> {\n const { OrganisationRosteringView } = await import('apps/crm-studio/views/organisations/organisation-rostering-view/OrganisationRosteringView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationRosteringView id={id} queryParams={queryParams}/>\n );\n }\n\n public async organisationRosteringSettings(id: string): Promise<void> {\n const { OrganisationRosteringSettingsView } = await import('apps/crm-studio/views/organisations/organisation-rostering-setting-view/OrganisationRosteringSettingView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationRosteringSettingsView id={id} />\n );\n }\n\n public organisationRosteringWizard(id: string): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.ORGANISATION_ROSTERING_WIZARD_SELECT_PROVIDER,\n args: [id]\n }, { replace: true });\n }\n\n public async organisationRosteringWizardSelectProvider(\n id: string,\n queryParams: RosteringWizardQueryParams\n ): Promise<void> {\n const { RosteringWizardSelectProviderView } = await import('apps/crm-studio/views/organisations/organisation-rostering-wizard/organisation-rostering-wizard-select-provider/OrganisationRosteringWizardSelectProvider');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <RosteringWizardSelectProviderView id={id} queryParams={queryParams} />\n );\n }\n\n public async organisationRosteringWizardSetUpRostering(\n id: string,\n queryParams: RosteringWizardQueryParams\n ): Promise<void> {\n const { RosteringWizardSetUpRosteringView } = await import('apps/crm-studio/views/organisations/organisation-rostering-wizard/organisation-rostering-wizard-set-up-rostering/OrganisationRosteringWizardSetUpRostering');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <RosteringWizardSetUpRosteringView id={id} queryParams={queryParams} />\n );\n }\n\n public async organisationRosteringWizardSelectExternal(\n id: string,\n queryParams: RosteringWizardQueryParams\n ): Promise<void> {\n const { RosteringWizardSelectExternalView } = await import('apps/crm-studio/views/organisations/organisation-rostering-wizard/organisation-rostering-wizard-select-external/OrganisationRosteringWizardSelectExternal');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <RosteringWizardSelectExternalView id={id} queryParams={queryParams}/>\n );\n }\n\n public async organisationRosteringWizardMapping(\n id: string,\n queryParams: RosteringWizardQueryParams\n ): Promise<void> {\n const { RosteringWizardMappingView } = await import('apps/crm-studio/views/organisations/organisation-rostering-wizard/organisation-rostering-wizard-mapping/OrganisationRosteringWizardMapping');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <RosteringWizardMappingView id={id} queryParams={queryParams}/>\n );\n }\n\n public async organisationRosteringWizardConfirmation(\n id: string,\n queryParams: RosteringWizardQueryParams\n ): Promise<void> {\n const { RosteringWizardConfirmationView } = await import('apps/crm-studio/views/organisations/organisation-rostering-wizard/organisation-rostering-wizard-confirmation/OrganisationRosteringWizardConfirmation');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <RosteringWizardConfirmationView id={id} queryParams={queryParams}/>\n );\n }\n\n public async organisationFeatureFlags(id: string): Promise<void> {\n const { OrganisationFeatureFlagsView } = await import('apps/crm-studio/views/organisations/OrganisationFeatureFlagsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationFeatureFlagsView id={id} />\n );\n }\n\n public newOrganisationWizard(): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.NEW_ORGANISATION_WIZARD_DETAILS\n }, { replace: true });\n }\n\n public async newOrganisationWizardDetails(queryParams: NewOrganisationWizardQueryParams): Promise<void> {\n const { NewOrganisationWizardDetailsView } = await import('apps/crm-studio/views/organisations/new-organisation-wizard/NewOrganisationWizardDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <NewOrganisationWizardDetailsView queryParams={queryParams} />\n );\n }\n\n public async newOrganisationWizardConfirm(queryParams: NewOrganisationWizardQueryParams): Promise<void> {\n const { NewOrganisationWizardConfirmView } = await import('apps/crm-studio/views/organisations/new-organisation-wizard/NewOrganisationWizardConfirmView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <NewOrganisationWizardConfirmView queryParams={queryParams} />\n );\n }\n\n public async updateCustomerMasterStatus(id: string, currentStatus: MasterCustomerStatus): Promise<void> {\n const { UpdateCustomerMasterStatusView } = await import('apps/crm-studio/views/customers/UpdateCustomerMasterStatus');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <UpdateCustomerMasterStatusView\n id={id}\n currentStatus={currentStatus}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async customerContent(id: string): Promise<void> {\n const { CustomerContentView } = await import('apps/crm-studio/views/customers/CustomerContentView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerContentView id={id} />\n );\n }\n \n public async removePilot(customerId: string): Promise<void> {\n const { RemovePilotView } = await import('apps/crm-studio/views/customers/RemovePilotView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemovePilotView\n customerId={customerId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editPilot(customerId: string): Promise<void> {\n const { EditPilotView } = await import('apps/crm-studio/views/customers/EditPilotView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditPilotView\n customerId={customerId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async customerProducts(id: string): Promise<void> {\n const { CustomerProductsView } = await import('apps/crm-studio/views/customers/CustomerProductsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerProductsView id={id} />\n );\n }\n\n public async updateOrganisationName(id: string): Promise<void> {\n const { UpdateOrganisationNameView } = await import('apps/crm-studio/views/organisations/UpdateOrganisationNameView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <UpdateOrganisationNameView\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addCustomersToOrganisation(id: string): Promise<void> {\n const { AddCustomersToOrganisationView } = await import('apps/crm-studio/views/organisations/AddCustomersToOrganisationView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddCustomersToOrganisationView\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async removeCustomerFromOrganisation(id: string, customerId: string): Promise<void> {\n const { RemoveCustomerFromOrganisationView } = await import('apps/crm-studio/views/organisations/RemoveCustomerFromOrganisationView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveCustomerFromOrganisationView\n id={id}\n customerId={customerId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async updateOrganisationType(id: string): Promise<void> {\n const { UpdateOrganisationTypeView } = await import('apps/crm-studio/views/organisations/UpdateOrganisationType');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <UpdateOrganisationTypeView\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editCustomerName(id: string, currentValue: string): Promise<void> {\n const { EditCustomerNameView } = await import('apps/crm-studio/views/customers/EditCustomerNameView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditCustomerNameView\n id={id}\n currentValue={currentValue}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editCustomerType(id: string, currentValue: string): Promise<void> {\n const { EditCustomerTypeView } = await import('apps/crm-studio/views/customers/EditCustomerTypeView');\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditCustomerTypeView\n id={id}\n currentValue={currentValue}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editCustomerStatus(id: string, currentValue: string): Promise<void> {\n const { EditCustomerStatusView } = await import('apps/crm-studio/views/customers/EditCustomerStatusView');\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditCustomerStatusView\n id={id}\n currentValue={currentValue}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async users(params: HashObject): Promise<void> {\n const { UsersView } = await import('apps/crm-studio/views/users/UsersView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UsersView query={params?.query} cursor={params?.cursor} />\n );\n }\n\n public async userOverview(id: string): Promise<void> {\n const { UserOverviewView } = await import('apps/crm-studio/views/users/UserOverviewView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UserOverviewView id={id} />\n );\n }\n\n public async userWorkspaceUsage(id: string): Promise<void> {\n const { UserWorkspaceUsageView } = await import('apps/crm-studio/views/users/UserWorkspaceUsageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UserWorkspaceUsageView id={id} />\n );\n }\n\n public async userSettings(id: string): Promise<void> {\n const { UserSettingsView } = await import('apps/crm-studio/views/users/UserSettingsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UserSettingsView id={id} />\n );\n }\n\n public async userFeatureFlags(id: string): Promise<void> {\n const { UserFeatureFlagsView } = await import('apps/crm-studio/views/users/UsersFeatureFlagView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UserFeatureFlagsView id={id} />\n );\n }\n\n public async userManageCuratorGroups(id: string): Promise<void> {\n const { UsersManageCuratorGroupsView } = await import('apps/crm-studio/views/users/UsersManageCuratorGroupsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UsersManageCuratorGroupsView id={id}/>\n );\n }\n\n public async userCustomerSchools(id: string): Promise<void> {\n const { UsersCustomerSchoolsView } = await import('apps/crm-studio/views/users/UsersCustomerSchoolsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UsersCustomerSchoolsView id={id} />\n );\n }\n\n public customerAccessSettings(id: string): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.CUSTOMER_ACCESS_SETTINGS_DOMAIN,\n args: [id]\n }, { replace: true });\n }\n \n public async customerAccessSettingsDomain(id: string): Promise<void> {\n const { CustomerAccessSettingsDomainView } = await import('apps/crm-studio/views/customers/CustomerAccessSettingsDomainView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerAccessSettingsDomainView id={id} />\n );\n }\n\n public async customerAccessSettingsYearGroups(id: string): Promise<void> {\n const { CustomerAccessSettingsYearGroupsView } = await import('apps/crm-studio/views/customers/CustomerAccessSettingsYearGroupsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerAccessSettingsYearGroupsView id={id} />\n );\n }\n\n public async customerIpAuth(id: string): Promise<void> {\n const { CustomerIpAuthView } = await import('apps/crm-studio/views/customers/CustomerIpAuthView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerIpAuthView id={id} />\n );\n }\n\n public async customerDomains(id: string): Promise<void> {\n const { CustomerDomainsView } = await import('apps/crm-studio/views/customers/CustomerDomainsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerDomainsView id={id} />\n );\n }\n\n public async addCustomerIpAuthRange(id: string): Promise<void> {\n const { AddCustomerIpAuthRangeView } = await import('apps/crm-studio/views/customers/AddCustoemrIpAuthRange');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddCustomerIpAuthRangeView\n closePopup={() => this.layout.closePopup()}\n id={id}\n />\n );\n }\n\n public async removeCustomerIpAuthRange(customerId: string, ipAuthRangeId: string): Promise<void> {\n const { RemoveCustomerIpAuthRangeView } = await import('apps/crm-studio/views/customers/RemoveCustomerIpAuthRange');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveCustomerIpAuthRangeView\n closePopup={() => this.layout.closePopup()}\n customerId={customerId}\n ipAuthRangeId={ipAuthRangeId}\n />\n );\n }\n\n public async disableCustomerIpAuth(customerId: string, ipAuthId: string): Promise<void> {\n const { DisableCustomerIpAuthView } = await import('apps/crm-studio/views/customers/DisableCustomerIpAuth');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DisableCustomerIpAuthView\n customerId={customerId}\n ipAuthId={ipAuthId}\n closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async crmIdSelect(queryParams: ObjectHash): Promise<void> {\n const { CrmIdSelectView } = await import('apps/crm-studio/views/crm-id-select/CrmIdSelectView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CrmIdSelectView\n searchAction={queryParams.searchAction}\n closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async removeCustomerSsoMapping(id: string, idpId: string): Promise<void> {\n const { RemoveCustomerSsoMappingView } = await import('apps/crm-studio/views/customers/RemoveCustomerSsoMappingView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveCustomerSsoMappingView\n id={id}\n idpId={idpId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addNewUsers(customerId: string, params: { userType: UserGroup }): Promise<void> {\n const { AddNewUsersView } = await import('apps/crm-studio/views/users/add-new-users/AddNewUsersView');\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddNewUsersView\n customerId={customerId}\n userType={params.userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async createUser(customerId: string, params: { userType: UserGroup }): Promise<void> {\n const { CreateUserView } = await import('apps/crm-studio/views/users/create-user/CreateUserView');\n \n const analyticsOptions = {\n actionType: UserAction.Create,\n entity: EntityType.User,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: OperationDescriptor.Single,\n location: LocationContext.Popup\n };\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateUserView\n customerId={customerId}\n userType={params.userType}\n analyticsOptions={analyticsOptions}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async editUser(customerId: string, id: string, params: { cursor?: string }): Promise<void> {\n const { EditUserView } = await import('apps/crm-studio/views/users/edit-user/EditUserView');\n \n const analyticsOptions = {\n actionType: UserAction.Edit,\n entity: EntityType.User,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.EditUser\n };\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditUserView\n customerId={customerId}\n id={id}\n analyticsOptions={analyticsOptions}\n returnAppLinkCursor={params.cursor}\n />\n );\n }\n \n public async bulkRemoveUsers(customerId: string, params: { userType: UserGroup }): Promise<void> {\n const { BulkRemoveUsersView } = await import('apps/crm-studio/views/users/bulk-remove-users/BulkRemoveUsersView');\n \n const { userType } = params;\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <BulkRemoveUsersView\n customerId={customerId}\n userType={userType}\n closePopup={() => this.layout.closePopup()}\n redirectApplink={customerId ? {\n application: AppChannels.CRM_STUDIO,\n action: userType === UserGroup.Learner ?\n Actions.CrmStudio.MANAGE_STUDENTS :\n Actions.CrmStudio.MANAGE_STAFF,\n args: [customerId]\n } : {\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.USERS\n }}\n />\n );\n }\n \n public async toggleUserStatus(customerId: string, id: string, params: HashObject = {}): Promise<void> {\n const { ToggleUserStatusView } = await import('apps/crm-studio/views/users/toggle-user-status/ToggleUserStatusView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ToggleUserStatusView\n customerId={customerId}\n id={id}\n userType={params.userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async exportUserList(customerId: string, params: HashObject = {}): Promise<void> {\n const { ExportUserListView } = await import('apps/crm-studio/views/users/export-user-list/ExportUserListView');\n \n const { userType } = params;\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ExportUserListView\n customerId={customerId}\n userType={userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async bulkUserUploadPopup(customerId: string, params: { userType: UserGroup }): Promise<void> {\n const { BulkUserUploadPopupView } = await import('apps/crm-studio/views/bulk-user-upload/popup/BulkUserUploadPopupView');\n \n const { userType } = params;\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <BulkUserUploadPopupView\n customerId={customerId}\n userType={userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async userUploadReviewAccounts(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserUploadReviewAccountsView } = await import('apps/crm-studio/views/bulk-user-upload/review-accounts/BulkUserUploadReviewAccountsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserUploadReviewAccountsView\n customerId={customerId}\n userType={params.userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async userUploadFixDuplicates(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserUploadFixDuplicatesView } = await import('apps/crm-studio/views/bulk-user-upload/fix-duplicates/BulkUserUploadFixDuplicatesView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserUploadFixDuplicatesView\n customerId={customerId}\n userType={params.userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async userUploadReviewExistingAccounts(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserUploadReviewExistingAccountsView } = await import('apps/crm-studio/views/bulk-user-upload/review-existing-accounts/BulkUserUploadReviewExistingAccountsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserUploadReviewExistingAccountsView\n customerId={customerId}\n userType={params.userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async userUploadConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserUploadConfirmationView } = await import('apps/crm-studio/views/bulk-user-upload/confirmation/BulkUserUploadConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserUploadConfirmationView\n customerId={customerId}\n userType={params.userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async userUploadStatusPolling(customerId: string, params: UserWizardStatusParams): Promise<void> {\n const { BulkUserUploadStatusPollingView } = await import('apps/crm-studio/views/bulk-user-upload/status/polling/BulkUserUploadStatusPollingView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserUploadStatusPollingView\n userType={params.userType}\n jobId={params.jobId}\n customerId={customerId}\n />\n );\n }\n \n public async userUploadStatusComplete(customerId: string, params: UserWizardStatusParams): Promise<void> {\n const { BulkUserUploadStatusCompleteView } = await import('apps/crm-studio/views/bulk-user-upload/status/complete/BulkUserUploadStatusCompleteView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserUploadStatusCompleteView\n userType={params.userType}\n jobId={params.jobId}\n customerId={customerId}\n />\n );\n }\n \n public async manageUserCuratorGroups(userId: string): Promise<void> {\n const { ManageUserCuratorGroupsView } = await import('apps/crm-studio/views/users/manage-user-curator-groups/ManageUserCuratorGroupsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ManageUserCuratorGroupsView id={userId} closePopup={() => this.layout.closePopup()} />\n );\n }\n \n public async deleteUserEmail(customerId: string, userId: string): Promise<void> {\n const { DeleteUserEmailView } = await import('apps/crm-studio/views/users/delete-user-email/DeleteUserEmailView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteUserEmailView\n userId={userId}\n customerId={customerId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async removeUserFromCustomer(customerId: string, userId: string): Promise<void> {\n const { RemoveUserFromCustomerView } = await import('apps/crm-studio/views/users/remove-user-from-customer/RemoveUserFromCustomerView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveUserFromCustomerView\n customerId={customerId}\n userId={userId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addUserToCustomer(customerId: string, userId: string): Promise<void> {\n const { AddUserToCustomerView } = await import('apps/crm-studio/views/users/add-user-to-customer/AddUserToCustomerView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddUserToCustomerView\n customerId={customerId}\n userId={userId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async changePassword(customerId: string, userId: string): Promise<void> {\n const { ChangePasswordView } = await import('apps/crm-studio/views/users/change-password/ChangePasswordView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ChangePasswordView\n customerId={customerId}\n userId={userId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async editUserCredit(customerId: string, userId: string): Promise<void> {\n const { EditUserCreditView } = await import('apps/crm-studio/views/users/edit-user-credit/EditUserCreditView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditUserCreditView\n customerId={customerId}\n userId={userId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async manageYearGroup(customerId: string, userId: string): Promise<void> {\n const { ManageYearGroup } = await import('apps/crm-studio/components/manage-year-group/ManageYearGroup');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ManageYearGroup\n customerId={customerId}\n userId={userId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async wizardReviewAccounts(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsReviewAccountsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/review-account/BulkUserActionsReviewAccountsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsReviewAccountsView\n customerId={customerId}\n userType={params?.userType}\n />\n );\n }\n \n public async wizardSelectAction(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsSelectActionView } = await import('apps/crm-studio/views/customers/user-manager/wizard/select-action/BulkUserActionsSelectActionView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsSelectActionView\n customerId={customerId}\n userType={params?.userType}\n />\n );\n }\n \n public async wizardChangeYearGroupActionDetails(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsChangeYearGroupActionDetailsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/action-details/change-year-group/BulkUserActionsChangeYearGroupActionDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsChangeYearGroupActionDetailsView\n customerId={customerId}\n userType={params?.userType}\n />\n );\n }\n \n public async wizardYearGroupRolloverActionDetails(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsYearGroupRolloverActionDetailsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/action-details/year-group-rollover/BulkUserActionsYearGroupRolloverActionDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsYearGroupRolloverActionDetailsView\n customerId={customerId}\n userType={params?.userType}\n />\n );\n }\n \n public async wizardDeleteActionDetails(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsDeleteActionDetailsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/action-details/delete/BulkUserActionsDeleteActionDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsDeleteActionDetailsView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardActivationActionDetails(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsActivationActionDetailsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/action-details/activation/BulkUserActionsActivationActionDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsActivationActionDetailsView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardAddToClassroomActionDetails(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsAddToClassroomActionDetailsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/action-details/add-to-classroom/BulkUserActionsAddToClassroomActionDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsAddToClassroomActionDetailsView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardResetPasswordActionDetails(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsResetPasswordActionDetailsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/action-details/reset-password/BulkUserActionsResetPasswordActionDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsResetPasswordActionDetailsView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardRemoveFromSchoolActionDetails (customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsRemoveFromSchoolActionDetailsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/action-details/remove-from-school/BulkUserActionsRemoveFromSchoolActionDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsRemoveFromSchoolActionDetailsView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardYearGroupRolloverConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsYearGroupRolloverConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/year-group-rollover/BulkUserActionsYearGroupRolloverConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsYearGroupRolloverConfirmationView\n customerId={customerId}\n userType={params?.userType}\n />\n );\n }\n \n public async wizardChangeYearGroupConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsChangeYearGroupConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/change-year-group/BulkUserActionsChangeYearGroupConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsChangeYearGroupConfirmationView\n customerId={customerId}\n userType={params?.userType}\n />\n );\n }\n \n public async wizardDeleteConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsDeleteConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/delete/BulkUserActionsDeleteConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsDeleteConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardDeactivateConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsDeactivateConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/deactivate/BulkUserActionsDeactivateConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsDeactivateConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardReactivateConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsReactivateConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/reactivate/BulkUserActionsReactivateConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsReactivateConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardResetEmailConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsResetEmailConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/reset-email/BulkUserActionsResetEmailConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsResetEmailConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardActivationEmailConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsActivationEmailConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/activation-email/BulkUserActionsActivationEmailConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsActivationEmailConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardRemoveFromSchoolConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsRemoveFromSchoolConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/remove-from-school/BulkUserActionsRemoveFromSchoolConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsRemoveFromSchoolConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardAddToClassroomConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsAddToClassroomConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/add-to-classroom/BulkUserActionsAddToClassroomConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsAddToClassroomConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardResetPasswordConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsResetPasswordConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/reset-password/BulkUserActionsResetPasswordConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsResetPasswordConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardStatusPolling(customerId: string, params: UserWizardStatusParams): Promise<void> {\n const { BulkUserActionsStatusPollingView } = await import('apps/crm-studio/views/customers/user-manager/wizard/status/polling/BulkUserActionsStatusPollingView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsStatusPollingView\n customerId={customerId}\n jobId={params?.jobId}\n userType={params?.userType}\n />\n );\n }\n \n public async wizardStatusComplete(customerId: string, params: UserWizardStatusParams): Promise<void> {\n const { BulkUserActionsStatusCompleteView } = await import('apps/crm-studio/views/customers/user-manager/wizard/status/complete/BulkUserActionsStatusCompleteView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsStatusCompleteView\n customerId={customerId}\n jobId={params?.jobId}\n userType={params?.userType}\n />\n );\n }\n \n public async auditLog(customerId: string, params: UserAuditLogQueryParams): Promise<void> {\n const { UserAuditLogView } = await import('apps/crm-studio/views/customers/user-manager/user-audit-log/UserAuditLogView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UserAuditLogView customerId={customerId} queryParams={params} />\n );\n }\n \n public async bulkActionSummary(customerId: string, id: string): Promise<void> {\n const { BulkActionSummaryView } = await import('apps/crm-studio/views/users/bulk-action-summary/BulkActionSummaryView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <BulkActionSummaryView customerId={customerId} id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public customerUsers(customerId: string): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.MANAGE_STUDENTS,\n args: [customerId]\n }, { replace: true });\n }\n \n public async manageStudents(customerId: string, queryParams?: HashObject): Promise<void> {\n // so we don't shrink the user tables\n LayoutHelper.lockContentWidth();\n const { CustomerStudentsView } = await import('apps/crm-studio/views/customers/CustomerStudentsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerStudentsView customerId={customerId} queryParams={queryParams} />\n );\n }\n\n public async manageStaff(customerId: string, queryParams?: HashObject): Promise<void> {\n // so we don't shrink the user tables\n LayoutHelper.lockContentWidth();\n const { CustomerStaffView } = await import('apps/crm-studio/views/customers/CustomerStaffView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerStaffView customerId={customerId} queryParams={queryParams} />\n );\n }\n\n public async tvStatus(): Promise<void> {\n const { TvStatusView } = await import('apps/crm-studio/views/tv-status/TvStatusView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <TvStatusView/>\n );\n }\n\n public async tvStatusSet(data: string): Promise<void> {\n const { SetTvStatusView } = await import('apps/crm-studio/views/tv-status/SetTvStatusView');\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <SetTvStatusView regionCode={data} closePopup={() => this.layout.closePopup()}/>\n );\n }\n\n public async domains(params: HashObject): Promise<void> {\n const { DomainsView } = await import('apps/crm-studio/views/domains/DomainsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <DomainsView\n query={params.query}\n />\n );\n }\n\n public async domainsReview(): Promise<void> {\n const { DomainChangesReviewView } = await import('apps/crm-studio/views/domains/DomainChangesReviewView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <DomainChangesReviewView />\n );\n }\n\n public async domainsFinalReview(): Promise<void> {\n const { DomainFinalReviewView } = await import('apps/crm-studio/views/domains/DomainFinalReviewView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <DomainFinalReviewView />\n );\n }\n\n public async domainAddPopup(): Promise<void> {\n const { AddDomainPopupView } = await import('apps/crm-studio/views/domains/AddDomainPopupView');\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddDomainPopupView\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async domainChangeStatusPopup({ domainId, domainName, currentStatus, newStatus }: {\n domainId: string,\n domainName: string,\n currentStatus: DomainVerificationStatus,\n newStatus: DomainVerificationStatus\n }): Promise<void> {\n const { ChangeDomainStatusPopupView } = await import('apps/crm-studio/views/domains/ChangeDomainStatusPopupView');\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ChangeDomainStatusPopupView\n closePopup={() => this.layout.closePopup()}\n domainId={domainId}\n domainName={domainName}\n currentStatus={currentStatus}\n newStatus={newStatus}\n />\n );\n }\n\n public async manageOrgId(): Promise<void> {\n const { OrgIdManagerView } = await import('apps/crm-studio/views/org-id-manager/OrgIdManagerView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrgIdManagerView />\n );\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { Core } from 'libs/common/core';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\nimport { PopupViewProps, Presentation } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels, DataServices, Layouts } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { ClassificationTree, SubjectTree } from 'shared/interfaces/models';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\nimport { SubjectDataService } from 'shared/services';\n\nimport { TopNavView } from 'apps/curriculums/views';\n\nclass CurriculumAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CURRICULUMS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/curriculums(/)': 'subjects',\n 'manage/curriculums/add-objects(/)': 'addSubjectMembers',\n 'manage/curriculums/new(/)': 'newSubject',\n 'manage/curriculums/:id/edit(/)': 'editSubject',\n 'manage/curriculums/:id/edit/videos(/)': 'editSubjectVideos',\n 'manage/curriculums/:id/classifications(/)': 'subjectClassifications',\n\n 'manage/curriculums/classifications(/)': 'classifications',\n 'manage/curriculums/presentations/:id/classifications(/)': 'presentationClassifications',\n 'manage/curriculums/presentations/:id/classifications/new(/)': 'newClassification',\n 'manage/curriculums/presentations/:id/classifications/:id/edit(/)': 'editClassification',\n 'manage/curriculums/presentations/:id/classifications/:id/edit/videos(/)': 'editClassificationVideos',\n\n 'manage/curriculums/presentations(/)': 'presentations',\n 'manage/curriculums/presentations/new': 'newPresentation',\n 'manage/curriculums/presentations/:id(/)': 'editPresentation'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'deleteClassification',\n 'removeClassificationMember',\n 'deleteSubject',\n 'removeSubjectMember',\n\n 'deleteAudience',\n 'removeLevelMember',\n 'removeAudienceMember',\n\n 'uploadImage',\n 'addToWorkbench'\n ];\n }\n}\n\nexport class CurriculumsApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n private subjectDataService: SubjectDataService;\n\n private currentLeftNavId: string;\n\n public initialize(): void {\n this.subjectDataService = InstanceManager.getInstance(DataServices.SUBJECT, this);\n\n /**\n * Obtain an instance of all data services used in the application\n * to prevent any instances being destroyed between renders.\n * \n * This is caused by the InstanceManager not being suited\n * to the way React renders function components - Matt.\n */\n ObjectHelper.values(DataServices).forEach(d => InstanceManager.getInstance(d, this));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Curriculums Application';\n }\n\n public static get router(): any {\n return CurriculumAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CURRICULUMS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n getTopNavView: this.getTopNav\n }\n };\n }\n\n public subjects(): void {\n this.subjectDataService.getSubjectTree(PresentationType.Curriculum, (subjectTree: SubjectTree) => {\n const firstSubject = !!subjectTree.children && subjectTree.children[0];\n\n if (!firstSubject) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CURRICULUMS,\n action: Actions.Subjects.NEW_SUBJECT\n }, { replace: true });\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CURRICULUMS,\n action: Actions.Subjects.EDIT_SUBJECT,\n args: [firstSubject.id]\n }, { replace: true });\n });\n }\n\n public async addToWorkbench(objectId: string): Promise<void> {\n const { AddToWorkbenchView } = await import('apps/workbench/views/add-to-workbench/AddToWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddToWorkbenchView\n objectId={objectId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async newSubject(params: ObjectHash): Promise<void> {\n const { NewSubjectView } = await import('apps/curriculums/views');\n \n const props = {\n parentId: params.parentId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <NewSubjectView key={params.parentId} {...props} />);\n\n this.renderSubjectsLeftNav();\n }\n\n public async editSubject(subjectId: string): Promise<void> {\n const { EditSubjectView } = await import('apps/curriculums/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditSubjectView key={subjectId} subjectId={subjectId} />);\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async editSubjectVideos(subjectId: string, params?: { presentationId: string }): Promise<void> {\n const { EditSubjectMembersView } = await import('apps/curriculums/views');\n \n const props = {\n subjectId,\n memberType: SubjectMemberType.Videos,\n action: Actions.Subjects.EDIT_SUBJECT_VIDEOS,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditSubjectMembersView key={`${subjectId}:videos`} {...props} />);\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async subjectClassifications(subjectId: string): Promise<void> {\n const { SubjectClassificationsView } = await import('apps/curriculums/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <SubjectClassificationsView key={subjectId} subjectId={subjectId} />\n );\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async addSubjectMembers(params: ObjectHash): Promise<void> {\n const { AddSubjectMembersView } = await import('apps/curriculums/views');\n \n const { memberType, objectIds } = params;\n\n if (!memberType || !objectIds)\n return;\n\n const props = {\n memberType,\n objectIds: Array.isArray(objectIds) ? objectIds : [objectIds]\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <AddSubjectMembersView {...props} />);\n\n this.hideLeftNav();\n }\n\n public async removeSubjectMember(subjectId: string, memberId: string, memberType: SubjectMemberType): Promise<void> {\n const { RemoveSubjectMemberView } = await import('apps/curriculums/views');\n \n const props = {\n subjectId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveSubjectMemberView {...props} />);\n }\n\n public async deleteSubject(subjectId: string): Promise<void> {\n const { DeleteSubjectView } = await import('apps/curriculums/views');\n \n /**\n * If the subject being deleted is currently displayed the in the CONTENT region,\n * we want to route away from it on delete.\n */\n const routeToOnDelete = subjectId.toString() === this.currentLeftNavId.toString() ?\n { application: AppChannels.CURRICULUMS, action: Actions.Subjects.NEW_SUBJECT } :\n null;\n\n const props = {\n subjectId,\n routeToOnDelete: routeToOnDelete || null,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteSubjectView {...props} />);\n }\n\n public async classifications(): Promise<void> {\n const { SelectPresentationView } = await import('shared/views/select-presentation/SelectPresentationView');\n \n const getAppLink = (presentation: Presentation) => ({\n application: AppChannels.CURRICULUMS,\n action: Actions.Subjects.PRESENTATION_CLASSIFICATIONS,\n args: [presentation.id]\n });\n\n const props = { objectType: 'topics', presentationType: PresentationType.Curriculum, getAppLink };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <SelectPresentationView {...props} />);\n\n this.hideLeftNav();\n }\n\n public presentationClassifications(presentationId: string): void {\n this.subjectDataService.getClassificationTree(presentationId, (classificationTree: ClassificationTree) => {\n const firstClassification = !!classificationTree.children && classificationTree.children[0];\n\n if (!firstClassification) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CURRICULUMS,\n action: Actions.Subjects.NEW_CLASSIFICATION,\n args: [presentationId]\n }, { replace: true });\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CURRICULUMS,\n action: Actions.Subjects.EDIT_CLASSIFICATION,\n args: [ presentationId, firstClassification.id ]\n }, { replace: true });\n });\n }\n\n public async newClassification(presentationId: string, params: ObjectHash): Promise<void> {\n const { NewClassificationView } = await import('apps/curriculums/views');\n \n const props = {\n presentationId,\n parentId: params.parentId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <NewClassificationView key={params.parentId} {...props} />);\n\n this.renderClassificationLeftNav(presentationId);\n }\n\n public async editClassification(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationView } = await import('apps/curriculums/views');\n \n const props = { presentationId, classificationId };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClassificationView key={classificationId} {...props} />);\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationVideos(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationMembersView } = await import('apps/curriculums/views');\n \n const props = { presentationId, classificationId, memberType: SubjectMemberType.Videos };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationMembersView key={`${classificationId}:videos`} {...props} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async removeClassificationMember(\n classificationId: string,\n memberId: string,\n memberType: SubjectMemberType\n ): Promise<void> {\n const { RemoveClassificationMemberView } = await import('apps/curriculums/views');\n \n const props = {\n classificationId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationMemberView {...props} />);\n }\n\n public async deleteClassification(presentationId: string, classificationId: string): Promise<void> {\n const { DeleteClassificationView } = await import('apps/curriculums/views');\n \n /**\n * If the classification being deleted is currently displayed the in the CONTENT region,\n * we want to route away from it (and back to the presentation) on delete.\n */\n const routeToOnDelete = classificationId === this.currentLeftNavId ?\n {\n application: AppChannels.CURRICULUMS,\n action: Actions.Subjects.NEW_CLASSIFICATION,\n args: [presentationId]\n } :\n null;\n\n const props = {\n classificationId,\n routeToOnDelete: routeToOnDelete || null,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteClassificationView {...props} />);\n }\n\n public async presentations(): Promise<void> {\n const { EditPresentationsListView } = await import('apps/curriculums/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditPresentationsListView />);\n\n this.hideLeftNav();\n }\n\n public async newPresentation(): Promise<void> {\n const { NewPresentationView } = await import('apps/curriculums/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewPresentationView />);\n }\n\n public async editPresentation(id: string): Promise<void> {\n const { EditPresentationView } = await import('apps/curriculums/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditPresentationView key={id} id={id} />);\n\n this.hideLeftNav();\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n private async renderClassificationLeftNav(presentationId: string, selectedClassificationId?: string): Promise<void> {\n const { ClassificationNavView } = await import('apps/curriculums/views');\n \n this.setCurrentLeftNavItem(selectedClassificationId);\n\n const props = { presentationId, selectedClassificationId };\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <ClassificationNavView {...props} />);\n }\n\n private async renderSubjectsLeftNav(subjectId?: string): Promise<void> {\n const { SubjectNavView } = await import('apps/curriculums/views');\n \n this.setCurrentLeftNavItem(subjectId);\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <SubjectNavView selectedSubjectId={subjectId} />);\n }\n\n private setCurrentLeftNavItem(id?: string): void {\n if (id)\n this.currentLeftNavId = id;\n else\n this.currentLeftNavId = null;\n }\n\n private hideLeftNav(): void {\n this.setCurrentLeftNavItem();\n\n this.layout.hideLeftNav();\n }\n\n private getTopNav(currentAppLink: Core.AppLink): React.ReactElement {\n return <TopNavView currentAppLink={currentAppLink} />;\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\nimport { ApplicationOptions } from 'backbone.marionette';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { Actions } from 'shared/constants';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { FullScreenLayoutView } from 'shared/layouts';\n\nimport { CustomerWizardQueryParams } from 'apps/customer-wizard/interfaces/CustomerWizardQueryParams';\n\nclass CustomerWizardAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CUSTOMER_WIZARD;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'crm-studio/customers/customer-wizard/new': 'index',\n 'crm-studio/customers/customer-wizard/name': 'customerName',\n 'crm-studio/customers/customer-wizard/organisation': 'customerOrganisation',\n 'crm-studio/customers/customer-wizard/region': 'customerRegion',\n 'crm-studio/customers/customer-wizard/cft': 'customerCft',\n 'crm-studio/customers/customer-wizard/trial': 'customerTrial',\n 'crm-studio/customers/customer-wizard/customisations': 'customerCustomisations',\n 'crm-studio/customers/customer-wizard/confirm': 'customerConfirmation'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [];\n }\n\n // @ts-ignore\n protected get externalRoutes(): ObjectHash {\n return {};\n }\n}\n\nexport class CustomerWizardApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n public initialize(options: ApplicationOptions): void {\n super.initialize(options);\n // hide footer for Customer Wizard\n const footer = document.getElementById('footer');\n if (footer) {\n footer.style.display = 'none';\n }\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Customer Wizard';\n }\n\n public static get router(): any {\n return CustomerWizardAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CUSTOMER_WIZARD;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: true\n }\n };\n }\n\n public index(queryParams: CustomerWizardQueryParams): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CUSTOMER_WIZARD,\n action: Actions.CustomerWizard.CUSTOMER_NAME,\n params: queryParams\n }, { replace: true });\n }\n\n public async customerName(queryParams: CustomerWizardQueryParams): Promise<void> {\n const { CustomerWizardNameView } = await import('apps/customer-wizard/views/customer-wizard-name/CustomerWizardNameView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerWizardNameView queryParams={queryParams} />\n );\n }\n\n public async customerOrganisation(queryParams: CustomerWizardQueryParams): Promise<void> {\n const { CustomerWizardOrganisationView } = await import('apps/customer-wizard/views/customer-wizard-organisation/CustomerWizardOrganisation');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerWizardOrganisationView queryParams={queryParams} />\n );\n }\n\n public async customerRegion(queryParams: CustomerWizardQueryParams): Promise<void> {\n const { CustomerWizardRegionView } = await import('apps/customer-wizard/views/customer-wizard-region/CustomerWizardRegion');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerWizardRegionView queryParams={queryParams} />\n );\n }\n\n public async customerCft(queryParams: CustomerWizardQueryParams): Promise<void> {\n const { CustomerWizardCftView } = await import('apps/customer-wizard/views/customer-wizard-cft.tsx/CurstomerWizardCft');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerWizardCftView queryParams={queryParams} />\n );\n }\n\n public async customerTrial(queryParams: CustomerWizardQueryParams): Promise<void> {\n const { CustomerWizardTrialView } = await import('apps/customer-wizard/views/customer-wizard-trial/CustomerWizardTrial');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerWizardTrialView queryParams={queryParams} />\n );\n }\n\n public async customerCustomisations(queryParams: CustomerWizardQueryParams): Promise<void> {\n const { CustomerWizardCustomisationsView } = await import('apps/customer-wizard/views/customer-wizard-customisations/CustomerWizardCustomisationsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerWizardCustomisationsView queryParams={queryParams} />\n );\n }\n\n public async customerConfirmation(queryParams: CustomerWizardQueryParams): Promise<void> {\n const { CustomerWizardConfirmationView } = await import('apps/customer-wizard/views/customer-wizard-confirm/CustomerWizardConfirmation');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerWizardConfirmationView queryParams={queryParams} />\n );\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { CurationStatusString } from 'libs/shared/enums/CurationStatus';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\nimport { DashboardTargetType, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { PopupViewProps } from 'libs/shared/interfaces/props/ViewProps';\n\nimport { Actions, AppChannels, DataServices, Layouts } from 'shared/constants';\nimport { LevelMemberType, SubjectMemberType } from 'shared/enums';\nimport { DashboardActionType } from 'shared/enums/DashboardActionType';\nimport { ClassificationTree } from 'shared/interfaces';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\nimport { SubjectDataService } from 'shared/services';\n\nimport { UploadVideoViewParams } from 'apps/cv-live/views/upload-video/UploadVideoView';\n\nconst presentationType = PresentationType.StreamableLearning;\n\nclass CvLiveAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CV_LIVE;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n // Calendar\n 'cv-live/calendar(/)': 'calendarLivestreams',\n\n // Discover\n 'cv-live/discover(/)': 'discover',\n\n // Subjects\n 'cv-live/classifications(/)': 'classifications',\n 'cv-live/:id/classifications(/)': 'presentationClassifications',\n 'cv-live/:id/classifications/new(/)': 'newClassification',\n 'cv-live/:id/classifications/:id/edit(/)': 'editClassification',\n 'cv-live/:id/classifications/:id/edit/videos(/)': 'editClassificationVideos',\n 'cv-live/:id/classifications/:id/edit/clips(/)': 'editClassificationClips',\n 'cv-live/:id/classifications/:id/edit/dashboards(/)': 'editClassificationDashboards',\n\n // Audiences\n 'cv-live/audiences(/)': 'audiences',\n 'cv-live/:id/audiences(/)': 'presentationAudiences',\n 'cv-live/:id/audiences/new(/)': 'newAudience',\n 'cv-live/:id/audiences/:id/edit(/)': 'editAudience',\n 'cv-live/:id/audiences/:id/edit/videos(/)': 'editAudienceVideos',\n\n // Presentation\n 'cv-live/presentation(/)': 'editPresentation',\n\n // Videos\n 'cv-live/videos(/)': 'videos',\n 'cv-live/videos/new(/)': 'uploadVideo',\n 'cv-live/videos/:id(/)': 'editVideo',\n 'cv-live/videos/:id/classifications(/)': 'editVideoClassifications',\n 'cv-live/videos/:id/audiences(/)': 'editVideoAudiences',\n 'cv-live/videos/:id/tags(/)': 'editVideoTags',\n 'cv-live/videos/:id/glance(/)': 'editVideoGlance',\n 'cv-live/videos/:id/resources(/)': 'editVideoResources',\n\n // Companies\n 'cv-live/companies(/)': 'companies',\n 'cv-live/companies/new(/)': 'newCompany',\n 'cv-live/companies/:id(/)': 'editCompany',\n 'cv-live/companies/:id/dashboards(/)': 'editCompanyDashboards'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n // Discover\n 'newDashboard',\n 'deleteDashboard',\n 'publishDashboard',\n 'archiveDraftDashboard',\n 'editDashboardDetails',\n 'copyDashboard',\n\n // Topics\n 'deleteClassification',\n 'removeClassificationMember',\n 'newClassificationDashboard',\n 'editClassificationDashboard',\n 'archiveDraftClassificationDashboard',\n 'publishClassificationDashboard',\n 'removeClassificationDashboard',\n 'copyClassificationDashboard',\n\n // Audiences\n 'deleteAudience',\n 'removeAudienceMember',\n\n // Other\n 'uploadImage',\n 'exportLibrary',\n\n // Calendar\n 'addLivestream',\n 'editLivestream',\n 'draftLivestream',\n 'archiveLivestream',\n 'publishLivestream',\n 'deleteLivestream',\n 'livestreamLinks'\n ];\n }\n}\n\nexport class CvLiveApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n private subjectDataService: SubjectDataService;\n\n private currentLeftNavId: string;\n\n public initialize(): void {\n this.subjectDataService = InstanceManager.getInstance(DataServices.SUBJECT, this);\n\n /**\n * Obtain an instance of all data services used in the application\n * to prevent any instances being destroyed between renders.\n * \n * This is caused by the InstanceManager not being suited\n * to the way React renders function components - Matt.\n */\n ObjectHelper.values(DataServices).forEach(d => InstanceManager.getInstance(d, this));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'ClickView Live Application';\n }\n\n public static get router(): any {\n return CvLiveAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CV_LIVE;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n // #region calendar\n\n public async calendarLivestreams(params: HashObject): Promise<void> {\n const { CvLiveCalendarLivestreamsView } = await import('apps/cv-live/views/calendar-events/CvLiveCalendarEventsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CvLiveCalendarLivestreamsView\n queryParams={params}\n />\n );\n }\n\n public async addLivestream(): Promise<void> {\n const { CvLiveAddLivestreamView } = await import('apps/cv-live/views/add-livestream/CvLiveAddLivestreamView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLiveAddLivestreamView\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteLivestream(id: string): Promise<void> {\n const { CvLiveDeleteLivestream } = await import('apps/cv-live/views/delete-livestream/CvLiveDeleteLivestream');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLiveDeleteLivestream\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editLivestream(id: string, name: string): Promise<void> {\n const { CvLiveEditLivestreamView } = await import('apps/cv-live/views/edit-livestream/CvLiveEditLivestreamView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLiveEditLivestreamView id={id} name={name} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async draftLivestream(livestreamId: string): Promise<void> {\n const { CvLiveLivestreamStatusUpdateView: CvLivestreamStatusUpdateView } = await import('apps/cv-live/views/livestream-status-update/CvLiveLivestreamStatusUpdateView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLivestreamStatusUpdateView\n livestreamId={livestreamId}\n status={CurationStatusString.Draft}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async archiveLivestream(livestreamId: string): Promise<void> {\n const { CvLiveLivestreamStatusUpdateView: CvLivestreamStatusUpdateView } = await import('apps/cv-live/views/livestream-status-update/CvLiveLivestreamStatusUpdateView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLivestreamStatusUpdateView\n livestreamId={livestreamId}\n status={CurationStatusString.Archived}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async publishLivestream(livestreamId: string): Promise<void> {\n const { CvLiveLivestreamStatusUpdateView: CvLivestreamStatusUpdateView } = await import('apps/cv-live/views/livestream-status-update/CvLiveLivestreamStatusUpdateView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLivestreamStatusUpdateView\n livestreamId={livestreamId}\n status={CurationStatusString.Published}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async livestreamLinks(params: HashObject): Promise<void> {\n const { CvLiveLivestreamLinks: CvLivestreamLinks } = await import('apps/cv-live/views/livestream-links/CvLiveLivestreamLinks');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLivestreamLinks\n pastRecordingMasterId={params.pastRecordingMasterId}\n recordingMasterId={params.recordingMasterId}\n registrationUrl={params.registrationUrl}\n livestreamUrl={params.livestreamUrl}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n // #endregion\n\n // #region discover\n\n public async discover(): Promise<void> {\n const { EditCvLiveDashboardListView } = await import('apps/cv-live/views/edit-dashboard/EditCvLiveDashboardListView');\n \n this.subjectDataService.getPresentations(presentationType, (presentations: Presentation[]) => {\n const presentation = ArrayHelper.first(presentations);\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditCvLiveDashboardListView presentationId={presentation.id} />\n );\n });\n }\n\n public async newDashboard(): Promise<void> {\n const { NewCvLiveDashboardView } = await import('apps/cv-live/views/new-dashboard/NewCvLiveDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewCvLiveDashboardView {...this.getPopupProps()}\n />\n );\n }\n\n public async deleteDashboard(id: string): Promise<void> {\n const { RemoveCvLiveDashboardView } = await import('apps/cv-live/views/remove-dashboard/RemoveCvLiveDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveCvLiveDashboardView\n dashboardId={id}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async publishDashboard(\n dashboardId: string,\n dashboardToArchiveId: string\n ): Promise<void> {\n const { PublishDashboardView } = await import('shared/views/publish-dashboard/PublishDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <PublishDashboardView\n dashboardToPublishId={dashboardId}\n dashboardToArchiveId={\n typeof dashboardToArchiveId === 'string' ?\n dashboardToArchiveId :\n undefined}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async archiveDraftDashboard(\n actionType: DashboardActionType,\n dashboardId: string\n ): Promise<void> {\n const { ArchiveDraftDashboardView } = await import('shared/views/archive-draft-dashboard/ArchiveDraftDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ArchiveDraftDashboardView\n dashboardId={dashboardId}\n actionType={actionType}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async editDashboardDetails(dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('apps/dashboard-editor/views/edit-dashboard-details/EditDashboardDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditDashboardDetailsView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async copyDashboard(dashboardId: string): Promise<void> {\n const { CopyDashboardView } = await import('apps/discover/views/copy-dashboard/CopyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyDashboardView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n // #endregion\n\n // #region Classifications\n\n public classifications(): void {\n this.subjectDataService.getPresentations(presentationType, (presentations: Presentation[]) => {\n const presentation = ArrayHelper.first(presentations);\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.PRESENTATION_CLASSIFICATIONS,\n args: [presentation.id]\n });\n });\n }\n\n public presentationClassifications(presentationId: string): void {\n this.subjectDataService.getClassificationTree(\n presentationId,\n (classificationTree: ClassificationTree) => {\n const firstClassification = !!classificationTree.children && classificationTree.children[0];\n\n if (!firstClassification) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.NEW_CLASSIFICATION,\n args: [presentationId]\n }, { replace: true });\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.EDIT_CLASSIFICATION,\n args: [ presentationId, firstClassification.id ]\n }, { replace: true });\n }\n );\n }\n\n public async newClassification(presentationId: string, params: ObjectHash): Promise<void> {\n const { NewClassificationView } = await import('apps/subjects/views');\n \n const props = {\n presentationId: presentationId,\n parentId: params?.parentId,\n presentationType: PresentationType.StreamableLearning\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <NewClassificationView key={params?.parentId} {...props} />);\n\n this.renderClassificationLeftNav(presentationId);\n }\n\n public async newClassificationDashboard(classificationId: string, presentationId: string): Promise<void> {\n const { NewClassificationDashboardView } = await import('apps/subjects/views/classifications/new-classification-dashboard/NewClassificationDashboardView');\n \n const props = {\n classificationId,\n redirect: true,\n presentationId,\n targetType: DashboardTargetType.Classification as const,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <NewClassificationDashboardView {...props} />);\n }\n\n public async editClassificationDashboard(classificationId: string, dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('apps/dashboard-editor/views/edit-dashboard-details/EditDashboardDetailsView');\n \n const props = { dashboardId, classificationId, ...this.getPopupProps() };\n\n this.layout.showChildView(LayoutRegions.POPUP, <EditDashboardDetailsView {...props} />);\n }\n\n public async copyClassificationDashboard(dashboardId: string): Promise<void> {\n const { CopyDashboardView } = await import('apps/discover/views/copy-dashboard/CopyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyDashboardView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async editClassification(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationView } = await import('apps/cv-live/views/edit-classification/EditClassificationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationView\n key={classificationId}\n classificationId={classificationId}\n presentationId={presentationId}\n />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationVideos(presentationId: string, classificationId: string): Promise<void> {\n const { EditCvLiveClassificationVideosView } = await import('apps/cv-live/views/edit-classification-videos/EditCvLiveClassificationVideosView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditCvLiveClassificationVideosView key={`${classificationId}:videos`} presentationId={presentationId} classificationId={classificationId} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationDashboards(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationDashboardListView } = await import('apps/cv-live/views/edit-classification-dashboard-list/EditClassificationDashboardListView');\n \n const props = {\n classificationId,\n memberType: SubjectMemberType.Dashboard,\n presentationId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClassificationDashboardListView {...props} />);\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async removeClassificationMember(\n classificationId: string,\n memberId: string,\n memberType: SubjectMemberType\n ): Promise<void> {\n const { RemoveClassificationMemberView } = await import('shared/views/remove-classification-member');\n \n const props = {\n classificationId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationMemberView {...props} />);\n }\n\n public async removeClassificationDashboard(targetId: string, dashboardId: string): Promise<void> {\n const { RemoveClassificationDashboardView } = await import('apps/subjects/views/classifications/remove-classification-dashboard/RemoveClassificationDashboardView');\n \n const props = {\n classificationId: targetId,\n dashboardId,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationDashboardView {...props} />);\n }\n\n public async archiveDraftClassificationDashboard(\n actionType: DashboardActionType,\n dashboardId: string\n ): Promise<void> {\n const { ArchiveDraftDashboardView } = await import('shared/views/archive-draft-dashboard/ArchiveDraftDashboardView');\n \n const props = {\n dashboardId,\n actionType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <ArchiveDraftDashboardView {...props} />);\n }\n\n public async publishClassificationDashboard(\n dashboardId: string,\n dashboardToArchiveId: string\n ): Promise<void> {\n const { PublishDashboardView } = await import('shared/views/publish-dashboard/PublishDashboardView');\n \n const props = {\n dashboardToPublishId: dashboardId,\n dashboardToArchiveId: typeof dashboardToArchiveId === 'string' ?\n dashboardToArchiveId :\n undefined,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <PublishDashboardView {...props} />);\n }\n\n public async deleteClassification(presentationId: string, classificationId: string): Promise<void> {\n const { DeleteClassificationView } = await import('apps/subjects/views');\n \n /**\n * If the classification being deleted is currently displayed the in the CONTENT region,\n * we want to route away from it (and back to the presentation) on delete.\n */\n const routeToOnDelete = classificationId === this.currentLeftNavId ?\n {\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.NEW_CLASSIFICATION,\n args: [presentationId]\n } :\n null;\n\n const props = {\n classificationId,\n routeToOnDelete,\n ...this.getPopupProps(),\n presentationType: PresentationType.StreamableLearning\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteClassificationView {...props} />);\n }\n\n // #endregion\n\n // #region Audiences\n\n public async removeAudienceMember(audienceId: string, memberId: string, memberType: LevelMemberType): Promise<void> {\n const { RemoveAudienceMemberView } = await import('apps/subjects/views/audiences/remove-audience-member/RemoveAudienceMemberView');\n \n const props = {\n audienceId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveAudienceMemberView {...props} />);\n }\n\n public audiences(): void {\n this.subjectDataService.getPresentations(presentationType, (presentations: Presentation[]) => {\n const presentation = ArrayHelper.first(presentations);\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.PRESENTATION_AUDIENCES,\n args: [presentation.id]\n });\n });\n }\n \n public presentationAudiences(presentationId: string): void {\n this.subjectDataService.getAudiences(presentationId, (audiences: PresentationAudience[]) => {\n const firstAudience = ArrayHelper.first(audiences);\n\n if (!firstAudience) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.NEW_AUDIENCE,\n args: [presentationId]\n }, { replace: true });\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.EDIT_AUDIENCE,\n args: [ presentationId, firstAudience.masterId ]\n }, { replace: true });\n });\n }\n\n public async newAudience(presentationId: string): Promise<void> {\n const { NewAudienceView } = await import('apps/subjects/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <NewAudienceView presentationId={presentationId} presentationType={presentationType} />\n );\n\n this.hideLeftNav();\n }\n\n public async editAudience(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceView } = await import('apps/subjects/views');\n \n const props = { audienceId, presentationId, presentationType };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditAudienceView key={audienceId} {...props} />);\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async editAudienceVideos(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceMembersView } = await import('apps/subjects/views');\n \n const props = { audienceId, presentationType, memberType: LevelMemberType.Videos, presentationId };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditAudienceMembersView key={`${audienceId}:videos`} {...props} />\n );\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async deleteAudience(presentationId: string, audienceId: string): Promise<void> {\n const { DeleteAudienceView } = await import('apps/subjects/views');\n \n const routeToOnDelete = {\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.PRESENTATION_AUDIENCES,\n args: [presentationId]\n };\n\n const props = { id: audienceId, routeToOnDelete, ...this.getPopupProps() };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteAudienceView {...props} />);\n }\n\n // #endregion\n\n // #region Presentation\n\n public async editPresentation(): Promise<void> {\n const { EditPresentationView } = await import('apps/subjects/views');\n \n this.subjectDataService.getPresentations(presentationType, (presentations: Presentation[]) => {\n const presentation = ArrayHelper.first(presentations);\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditPresentationView id={presentation.id} />);\n });\n\n this.hideLeftNav();\n }\n\n // #endregion\n\n // #region Videos\n\n public async videos(params: { query?: string, cursor?: string } = {}): Promise<void> {\n const { CvLiveVideosView } = await import('apps/cv-live/views/videos/CvLiveVideosView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CvLiveVideosView query={params.query} cursor={params.cursor} />\n );\n\n this.hideLeftNav();\n }\n\n public async editVideo(id: string): Promise<void> {\n const { EditVideoView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoView videoId={id} context='live' />);\n }\n\n public async editVideoClassifications(id: string): Promise<void> {\n const { CvLiveVideoClassificationsView } = await import('apps/cv-live/views/edit-video-classifications/CvLiveVideoClassificationsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <CvLiveVideoClassificationsView videoId={id} />);\n }\n\n public async editVideoAudiences(id: string): Promise<void> {\n const { CvLiveVideoAudiencesView } = await import('apps/cv-live/views/edit-video-audiences/CvLiveVideoAudiencesView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <CvLiveVideoAudiencesView videoId={id} />);\n }\n\n public async editVideoTags(id: string): Promise<void> {\n const { EditVideoTagsView } = await import('apps/videos/views/edit-video-tags/EditVideoTagsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoTagsView videoId={id} context='live' />);\n }\n\n public async editVideoGlance(id: string): Promise<void> {\n const { ManagePointsOfInterestView } = await import('apps/videos/views/manage-points-of-interest/ManagePointsOfInterestView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <ManagePointsOfInterestView videoId={id} context='live' />);\n }\n\n public async editVideoResources(videoId: string): Promise<void> {\n const { EditVideoResourcesTabView } = await import('apps/videos/views/edit-video-resources/EditVideoResourcesTabView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditVideoResourcesTabView videoId={videoId} context='live' />\n );\n }\n\n public async uploadVideo(params: UploadVideoViewParams = {}): Promise<void> {\n const { UploadVideoView } = await import('apps/cv-live/views/upload-video/UploadVideoView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <UploadVideoView {...params} />);\n }\n\n // #endregion\n\n // #region Companies\n\n public async companies(params: ObjectHash): Promise<void> {\n const { CompaniesView } = await import('apps/companies/views');\n \n const { cursor } = params;\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CompaniesView context='live' cursor={cursor} />\n );\n }\n\n public async newCompany(): Promise<void> {\n const { NewCompanyView } = await import('apps/companies/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <NewCompanyView context='live' />\n );\n }\n\n public async editCompany(id: string): Promise<void> {\n const { EditCompanyView } = await import('apps/companies/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditCompanyView context='live' companyId={id} />\n );\n }\n\n public async editCompanyDashboards(companyId: string): Promise<void> {\n const { EditCompanyDashboardsView } = await import('apps/companies/views/edit-dashboards/EditCompanyDashboardsView');\n \n this.subjectDataService.getPresentations(presentationType, (presentations: Presentation[]) => {\n const presentation = ArrayHelper.first(presentations);\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditCompanyDashboardsView\n companyId={companyId}\n presentationId={presentation.id}\n context='live'\n />\n );\n });\n }\n\n // #endregion\n\n // #region Other\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async exportLibrary(): Promise<void> {\n const { ExportLibraryView } = await import('apps/cv-live/views/export-library/ExportLibraryView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ExportLibraryView closePopup={() => this.layout.closePopup()} />\n );\n }\n\n protected onShowAlert(options: ObjectHash = {}): void {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n private async renderClassificationLeftNav(presentationId: string, selectedClassificationId?: string): Promise<void> {\n const { ClassificationNavView } = await import('apps/subjects/views');\n \n this.setCurrentLeftNavItem(selectedClassificationId);\n\n const props = {\n selectedClassificationId,\n presentationId,\n presentationType: PresentationType.StreamableLearning\n };\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <ClassificationNavView {...props} />);\n }\n\n private async renderAudienceLeftNav(presentationId: string, selectedAudienceId?: string): Promise<void> {\n const { AudienceNavView } = await import('apps/subjects/views');\n \n this.setCurrentLeftNavItem(selectedAudienceId);\n\n const props = { selectedAudienceId, presentationId, presentationType };\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <AudienceNavView {...props} />);\n }\n\n private setCurrentLeftNavItem(id?: string): void {\n if (id)\n this.currentLeftNavId = id;\n else\n this.currentLeftNavId = null;\n }\n\n private hideLeftNav(): void {\n this.setCurrentLeftNavItem();\n\n this.layout.hideLeftNav();\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n\n // #endregion\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { CurationStatusString } from 'libs/shared/enums/CurationStatus';\n\nimport { Actions } from 'shared/constants';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { FullScreenLayoutView, FullScreenLayoutViewOptions } from 'shared/layouts';\n\nimport { AssemblyLineQueryParams } from 'apps/assembly-line/interfaces/AssemblyLineQueryParams';\nimport { ContentPipelineId } from 'apps/assembly-line/interfaces/ContentPipelineId';\n\nconst PIPELINE_ID: ContentPipelineId = 'cv-live';\n\nclass CvLivePipelineAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CV_LIVE_PIPELINE;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'cv-live/content-pipeline(/)': 'index',\n 'cv-live/content-pipeline/livestreams(/)': 'livestreams',\n 'cv-live/content-pipeline/livestreams/drafts(/)': 'draftLivestreams',\n 'cv-live/content-pipeline/livestreams/upcoming(/)': 'upcomingLivestreams',\n 'cv-live/content-pipeline/livestreams/past(/)': 'pastLivestreams',\n 'cv-live/content-pipeline/curation(/)': 'curation',\n 'cv-live/content-pipeline/curation/unused-videos(/)': 'unusedVideos',\n 'cv-live/content-pipeline/curation/topics(/)': 'topics',\n 'cv-live/content-pipeline/curation/curated-topics(/)': 'curatedTopics',\n 'cv-live/content-pipeline/curation/thumbnail-text(/)': 'thumbnailText',\n 'cv-live/content-pipeline/assets(/)': 'assets',\n 'cv-live/content-pipeline/assets/curated-thumbnails(/)': 'curatedThumbnail',\n 'cv-live/content-pipeline/assets/thumbnail-review(/)': 'thumbnailReview',\n 'cv-live/content-pipeline/assets/topic-assets(/)': 'topicAssets',\n 'cv-live/content-pipeline/resourcing(/)': 'resourcing',\n 'cv-live/content-pipeline/resourcing/tags(/)': 'tags',\n 'cv-live/content-pipeline/resourcing/glance(/)': 'glance',\n 'cv-live/content-pipeline/resourcing/resources-interactives(/)': 'resourcesAndInteractives',\n 'cv-live/content-pipeline/resourcing/topic-seo(/)': 'topicSeo',\n 'cv-live/content-pipeline/review(/)': 'review',\n 'cv-live/content-pipeline/review/review-videos(/)': 'reviewVideos',\n 'cv-live/content-pipeline/review/published-videos(/)': 'publishedVideos',\n 'cv-live/content-pipeline/review/completed-livestreams(/)': 'completedLivestreams'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'addLivestream',\n 'uploadRecording',\n 'editLivestream',\n 'publishLivestream',\n 'editVideo',\n 'deleteVideo',\n 'archiveVideo',\n 'editClassification',\n 'editDashboard',\n 'wizard',\n 'saveQuickFilter',\n 'editQuickFilter',\n 'deleteQuickFilter',\n 'newInteractive',\n 'newClassificationDashboard',\n 'resolveTopicIssue',\n 'resolveVideoIssue',\n 'reviewDetails',\n 'publishTopic',\n 'globalSearch',\n 'pictureInPicture',\n 'deleteLivestream'\n ];\n }\n}\n\nexport class CvLivePipelineApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'CV Live Pipeline Application';\n }\n\n public static get router(): any {\n return CvLivePipelineAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CV_LIVE_PIPELINE;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: true\n }\n };\n }\n\n public index(): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE_PIPELINE,\n action: Actions.CvLivePipeline.LIVESTREAMS\n }, { replace: true });\n }\n\n public livestreams(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE_PIPELINE,\n action: Actions.CvLivePipeline.DRAFT_LIVESTREAMS,\n params\n }, { replace: true });\n }\n\n public async publishLivestream(livestreamId: string): Promise<void> {\n const { CvLiveLivestreamStatusUpdateView: CvLivestreamStatusUpdateView } = await import('apps/cv-live/views/livestream-status-update/CvLiveLivestreamStatusUpdateView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLivestreamStatusUpdateView\n livestreamId={livestreamId}\n status={CurationStatusString.Published}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addLivestream(): Promise<void> {\n const { CvLiveAddLivestreamView } = await import('apps/cv-live/views/add-livestream/CvLiveAddLivestreamView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLiveAddLivestreamView\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async uploadRecording(livestreamId: string): Promise<void> {\n const { CvLiveUploadRecordingView } = await import('apps/cv-live/views/upload-recording/CvLiveUploadRecordingView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLiveUploadRecordingView\n closePopup={() => this.layout.closePopup()}\n livestreamId={livestreamId}\n />\n );\n }\n\n public async editLivestream(id: string): Promise<void> {\n const { CvLiveEditLivestreamView } = await import('apps/cv-live/views/edit-livestream/CvLiveEditLivestreamView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLiveEditLivestreamView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async deleteLivestream(id: string): Promise<void> {\n const { CvLiveDeleteLivestream } = await import('apps/cv-live/views/delete-livestream/CvLiveDeleteLivestream');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLiveDeleteLivestream\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async draftLivestreams(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineLivestreamStageView } = await import('./views/AssemblyLineLivestreamStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineLivestreamStageView queryParams={params} stage='livestreams' subStage='draft_livestreams' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async pastLivestreams(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineLivestreamStageView } = await import('./views/AssemblyLineLivestreamStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineLivestreamStageView queryParams={params} stage='livestreams' subStage='past_livestreams' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async upcomingLivestreams(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineLivestreamStageView } = await import('./views/AssemblyLineLivestreamStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineLivestreamStageView queryParams={params} stage='livestreams' subStage='upcoming_livestreams' pipelineId={PIPELINE_ID} />\n );\n }\n\n public curation(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE_PIPELINE,\n action: Actions.CvLivePipeline.UNUSED_VIDEOS,\n params\n }, { replace: true });\n }\n\n public async unusedVideos(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='curation' subStage='unused_video' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async topics(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineTopicStageView } = await import('apps/assembly-line/views/tables/AssemblyLineTopicStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineTopicStageView queryParams={params} stage='curation' subStage='topic' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async curatedTopics(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineDashboardStageView } = await import('apps/assembly-line/views/tables/AssemblyLineDashboardStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineDashboardStageView queryParams={params} stage='curation' subStage='curated_topic' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async thumbnailText(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='curation' subStage='thumbnail_text' pipelineId={PIPELINE_ID} />\n );\n }\n\n public assets(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE_PIPELINE,\n action: Actions.CvLivePipeline.CURATED_THUMBNAIL,\n params\n }, { replace: true });\n }\n\n public async curatedThumbnail(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='assets' subStage='curated_thumbnail' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async thumbnailReview(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='assets' subStage='review_thumbnail' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async topicAssets(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineTopicStageView } = await import('apps/assembly-line/views/tables/AssemblyLineTopicStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineTopicStageView queryParams={params} stage='assets' subStage='topic_asset' pipelineId={PIPELINE_ID} />\n );\n }\n\n public resourcing(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE_PIPELINE,\n action: Actions.CvLivePipeline.RESOURCES_AND_INTERACTIVES,\n params\n }, { replace: true });\n }\n\n public async resourcesAndInteractives(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='resourcing' subStage='resources_interactives' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async tags(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='resourcing' subStage='tags' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async glance(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='resourcing' subStage='glance' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async topicSeo(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineTopicStageView } = await import('apps/assembly-line/views/tables/AssemblyLineTopicStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineTopicStageView queryParams={params} stage='resourcing' subStage='topic_seo' pipelineId={PIPELINE_ID} />\n );\n }\n\n public review(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE_PIPELINE,\n action: Actions.CvLivePipeline.REVIEW_VIDEOS,\n params\n }, { replace: true });\n }\n\n public async reviewVideos(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='reviewing' subStage='review_video' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async publishedVideos(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='reviewing' subStage='published_video' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async completedLivestreams(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineLivestreamStageView } = await import('./views/AssemblyLineLivestreamStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineLivestreamStageView queryParams={params} stage='reviewing' subStage='completed_livestreams' pipelineId={PIPELINE_ID} />\n );\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { FullScreenLayoutView, FullScreenLayoutViewOptions } from 'shared/layouts/full-screen-layout/FullScreenLayoutView';\n\nclass DashboardEditorAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DASHBOARD_EDITOR;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/dashboards/:id/edit(/)': 'editDashboard',\n 'manage/dashboards/:id/edit/wizard/select-widget(/)': 'wizardSelectWidget',\n 'manage/dashboards/:id/edit/wizard/widget/:widget/select-template(/)': 'wizardSelectTemplate',\n 'manage/dashboards/:id/edit/wizard/widget/:widget/template/:template/add-content(/)': 'wizardAddContent',\n 'manage/dashboards/:id/edit/wizard/widget/:widget/template/:template/edit-content/:id(/)': 'wizardEditContent'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'deleteWidget',\n 'searchWidgetContent',\n 'widgetContentGuideline',\n 'editDashboardDetails',\n 'addContentImageUpload',\n 'classroomGuide',\n 'interactiveGuidance',\n 'resourceGuidance'\n ];\n }\n}\n\nexport class DashboardEditorApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Dashboard Editor Application';\n }\n\n public static get router(): any {\n return DashboardEditorAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DASHBOARD_EDITOR;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: false\n }\n };\n }\n\n public async editDashboard(id: string): Promise<void> {\n const { EditDashboardContainerView } = await import('apps/dashboard-editor/views/edit-dashboard/EditDashboardContainerView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditDashboardContainerView id={id}/>);\n }\n\n public async deleteWidget(widgetId: string): Promise<void> {\n const { DeleteWidgetView } = await import('apps/dashboard-editor/views/delete-widget/DeleteWidgetView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteWidgetView\n widgetId={widgetId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async wizardSelectWidget(dashboardId: string): Promise<void> {\n const { DashboardWizardSelectWidgetView } = await import('apps/dashboard-editor/views/wizard/dashboard-wizard-select-widget/DashboardWizardSelectWidgetView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <DashboardWizardSelectWidgetView dashboardId={dashboardId} />\n );\n }\n\n public async wizardSelectTemplate(dashboardId: string, widgetTypeId: WidgetTypeId): Promise<void> {\n const { DashboardWizardSelectTemplateView } = await import('apps/dashboard-editor/views/wizard/dashboard-wizard-select-template/DashboardWizardSelectTemplateView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <DashboardWizardSelectTemplateView dashboardId={dashboardId} widgetTypeId={widgetTypeId} />\n );\n }\n\n public async wizardAddContent(\n dashboardId: string,\n widgetTypeId: WidgetTypeId,\n templateId: WidgetTemplate\n ): Promise<void> {\n const { DashboardWizardAddContentContainerView } = await import('apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/DashboardWizardAddContentContainerView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <DashboardWizardAddContentContainerView\n dashboardId={dashboardId}\n templateId={templateId}\n widgetTypeId={widgetTypeId}\n />\n );\n }\n\n // TODO: Replace these params w/ just widget ID\n public async wizardEditContent(\n dashboardId: string,\n widgetId: string,\n widgetTypeId: WidgetTypeId,\n templateId: WidgetTemplate\n ): Promise<void> {\n const { DashboardWizardAddContentContainerView } = await import('apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/DashboardWizardAddContentContainerView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <DashboardWizardAddContentContainerView\n dashboardId={dashboardId}\n widgetId={widgetId}\n templateId={templateId}\n widgetTypeId={widgetTypeId}\n />\n );\n }\n\n public async editDashboardDetails(dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('./views/edit-dashboard-details/EditDashboardDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditDashboardDetailsView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async widgetContentGuideline(widgetTypeId: WidgetTypeId, widgetTemplate: WidgetTemplate): Promise<void> {\n const { DashboardWidgetContentGuidelineView } = await import('apps/dashboard-editor/views/wizard/widget-content-guideline/DashboardWidgetContentGuidelineView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DashboardWidgetContentGuidelineView\n widgetTypeId={widgetTypeId}\n widgetTemplate={widgetTemplate}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async addContentImageUpload(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n {...this.getPopupProps()}\n />\n );\n }\n\n public async classroomGuide(id: string, type: MasterType): Promise<void> {\n const { VideoGuidanceClassroomGuideView } = await import('./views/video-guidance-classroom-guide/VideoGuidanceClassroomGuideView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <VideoGuidanceClassroomGuideView id={id} type={type} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async interactiveGuidance(id: string, type: MasterType): Promise<void> {\n const { VideoGuidanceInteractivesView } = await import('./views/video-guidance-interactives/VideoGuidanceInteractivesView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <VideoGuidanceInteractivesView id={id} type={type} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async resourceGuidance(id: string, type: MasterType): Promise<void> {\n const { VideoGuidanceResourcesView } = await import('./views/video-guidance-resources/VideoGuidanceResourcesView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <VideoGuidanceResourcesView id={id} type={type} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts/curator-layout';\n\nclass DefaultAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DEFAULT;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {};\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'devError',\n 'dialogError'\n ];\n }\n}\n\nexport class DefaultApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Default Application';\n }\n\n public static get router(): any {\n return DefaultAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DEFAULT;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async dialogError(): Promise<void> {\n const { DialogView } = await import('libs/shared/views/dialog/DialogView');\n \n const error = Radio.channel('error:view').request('current:error');\n\n if (!error)\n return;\n\n const { dialogOptions } = error;\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DialogView\n title={dialogOptions.title}\n text={dialogOptions.text}\n buttons={dialogOptions.buttons}\n onDone={error.onDone}\n onFail={error.onFail}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async devError(): Promise<void> {\n const { DevErrorView } = await import('libs/shared/views/dev-error/DevErrorView');\n \n const error = Radio.channel('error:view').request('current:error');\n\n this.layout.showChildView(LayoutRegions.CONTENT, <DevErrorView error={error} />);\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { Presentation } from 'libs/shared/interfaces/models/Presentation';\nimport { PopupViewProps } from 'libs/shared/interfaces/props/ViewProps';\n\nimport { Actions, AppChannels } from 'shared/constants';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { DashboardActionType } from 'shared/enums/DashboardActionType';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts/curator-layout';\n\nclass DiscoverAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DISCOVER;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/discover(/)': 'discover',\n 'manage/discover/presentations/:id/edit/dashboards(/)': 'presentationDashboards'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'newDashboard',\n 'deleteDashboard',\n 'publishDashboard',\n 'archiveDraftDashboard',\n 'editDiscoverDashboardDetails',\n 'copyDashboard'\n ];\n }\n}\n\nexport class DiscoverApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Discover Application';\n }\n\n public static get router(): any {\n return DiscoverAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DISCOVER;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async discover(): Promise<void> {\n const { SelectPresentationView } = await import('shared/views/select-presentation/SelectPresentationView');\n \n const getAppLink = (presentation: Presentation) => ({\n application: AppChannels.DISCOVER,\n action: Actions.Discover.PRESENTATION_DASHBOARDS,\n args: [presentation.id]\n });\n\n const props = { objectType: 'dashboards', getAppLink, showLastUpdated: true };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <SelectPresentationView {...props} />);\n }\n\n public async presentationDashboards(presentationId: string): Promise<void> {\n const { EditDiscoverDashboardListView } = await import('apps/discover/views/edit-dashboard-list/EditDiscoverDashboardListView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditDiscoverDashboardListView presentationId={presentationId} />);\n }\n\n public async newDashboard(presentationId: string): Promise<void> {\n const { NewDiscoverDashboardView } = await import('apps/discover/views/new-dashboard/NewDiscoverDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewDiscoverDashboardView\n presentationId={presentationId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async deleteDashboard(id: string): Promise<void> {\n const { RemoveDiscoverDashboardView } = await import('apps/discover/views/remove-dashboard/RemoveDiscoverDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveDiscoverDashboardView\n dashboardId={id}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async publishDashboard(\n dashboardId: string,\n dashboardToArchiveId: string\n ): Promise<void> {\n const { PublishDashboardView } = await import('shared/views/publish-dashboard/PublishDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <PublishDashboardView\n dashboardToPublishId={dashboardId}\n dashboardToArchiveId={\n typeof dashboardToArchiveId === 'string' ?\n dashboardToArchiveId :\n undefined}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async archiveDraftDashboard(\n actionType: DashboardActionType,\n dashboardId: string\n ): Promise<void> {\n const { ArchiveDraftDashboardView } = await import('shared/views/archive-draft-dashboard/ArchiveDraftDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ArchiveDraftDashboardView\n dashboardId={dashboardId}\n actionType={actionType}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async editDiscoverDashboardDetails(dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('apps/dashboard-editor/views/edit-dashboard-details/EditDashboardDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditDashboardDetailsView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async copyDashboard(dashboardId: string): Promise<void> {\n const { CopyDashboardView } = await import('apps/discover/views/copy-dashboard/CopyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyDashboardView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { Core } from 'libs/common/core';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AppChannels, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass DomainOptionsAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DOMAIN_OPTIONS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'developer/options(/)': 'domainOptions',\n 'developer/options/new(/)': 'newDomainOption',\n 'developer/options/:id(/)': 'editDomainOption'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'deleteDomainOption'\n ];\n }\n}\n\nexport class DomainOptionsApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Domain Options Application';\n }\n\n public static get router(): any {\n return DomainOptionsAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DOMAIN_OPTIONS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return { name: Layouts.CURATOR_LAYOUT };\n }\n\n public async domainOptions(): Promise<void> {\n const { DomainOptionsView } = await import('apps/domain-options/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <DomainOptionsView />);\n }\n\n public async newDomainOption(): Promise<void> {\n const { NewDomainOptionView } = await import('apps/domain-options/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewDomainOptionView />);\n }\n\n public async editDomainOption(optionId: string): Promise<void> {\n const { EditDomainOptionView } = await import('apps/domain-options/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditDomainOptionView optionId={optionId} />);\n }\n\n public async deleteDomainOption(optionId: string): Promise<void> {\n const { DeleteDomainOptionView } = await import('apps/domain-options/views');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteDomainOptionView optionId={optionId} {...this.getPopupProps()} />\n );\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { RecentItemHelper } from 'libs/shared/utils/RecentItemHelper';\n\nimport { AppChannels } from 'shared/constants';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { SubjectMemberType } from 'shared/enums';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts/curator-layout';\n\nimport { RECENT_INTERACTIVES_KEY, RECENT_INTERACTIVES_LIMIT } from 'apps/interactives/views/find-interactives/FindInteractivesView';\n\nclass InteractivesAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.INTERACTIVES;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/interactives(/)': 'index',\n 'manage/interactives/:id(/)': 'previewInteractive',\n 'manage/interactives/:id/edit(/)': 'editInteractive',\n 'manage/interactives/:id/classifications(/)': 'editInteractiveClassifications',\n 'manage/interactives/:id/audiences(/)': 'editInteractiveAudiences',\n 'manage/interactives/:id/curation(/)': 'editInteractiveCuration'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'newInteractive',\n 'editInteractiveDetails',\n 'publishInteractive',\n 'archiveInteractive',\n 'deleteInteractive',\n 'removeInteractiveClassification',\n 'copyInteractive'\n ];\n }\n}\n\nexport class InteractivesApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Interactives Application';\n }\n\n public static get router(): any {\n return InteractivesAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.INTERACTIVES;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async index(): Promise<void> {\n const { FindInteractivesView } = await import('apps/interactives/views/find-interactives/FindInteractivesView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <FindInteractivesView />\n );\n }\n\n public async newInteractive(parentId: string): Promise<void> {\n const { NewInteractiveView } = await import('apps/interactives/views/new-interactive/NewInteractiveView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewInteractiveView parentId={parentId} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async previewInteractive(id: string): Promise<void> {\n const { PreviewInteractiveView } = await import('apps/interactives/views/preview-interactive/PreviewInteractiveView');\n \n this.addRecentInteractive(id);\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <PreviewInteractiveView id={id} />\n );\n }\n\n public async editInteractive(id: string): Promise<void> {\n const { EditInteractiveView } = await import('apps/interactives/views/edit-interactive/EditInteractiveView');\n \n this.addRecentInteractive(id);\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditInteractiveView id={id} />\n );\n }\n\n public async editInteractiveDetails(id: string, params: HashObject): Promise<void> {\n const { EditInteractiveDetailsView } = await import('apps/interactives/views/edit-interactive-details/EditInteractiveDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditInteractiveDetailsView\n interactiveMetadataId={id}\n publish={!!params.publish}\n closePopup={() => this.layout.closePopup()} />\n );\n }\n \n public async editInteractiveClassifications(interactiveId: string): Promise<void> {\n const { EditInteractiveClassificationsView } = await import('apps/interactives/views/edit-interactive-classifications/EditInteractiveClassificationsView');\n \n this.addRecentInteractive(interactiveId);\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditInteractiveClassificationsView interactiveId={interactiveId} />\n );\n }\n\n public async editInteractiveAudiences(interactiveId: string): Promise<void> {\n const { EditInteractiveAudiencesView } = await import('apps/interactives/views/edit-interactive-audiences/EditInteractiveAudiencesView');\n \n this.addRecentInteractive(interactiveId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditInteractiveAudiencesView interactiveId={interactiveId} />);\n }\n\n public async editInteractiveCuration(interactiveId: string): Promise<void> {\n const { EditInteractiveCurationView } = await import('apps/interactives/views/edit-interactive-curation/EditInteractiveCurationView');\n \n this.addRecentInteractive(interactiveId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditInteractiveCurationView interactiveId={interactiveId} />);\n }\n\n public async removeInteractiveClassification(\n classificationId: string,\n memberId: string,\n memberType: SubjectMemberType\n ): Promise<void> {\n const { RemoveClassificationMemberView } = await import('shared/views/remove-classification-member');\n \n const props = {\n classificationId,\n memberId,\n memberType,\n closePopup: () => this.layout.closePopup()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationMemberView {...props} />);\n }\n\n public async publishInteractive(id: string): Promise<void> {\n const { PublishObjectView } = await import('shared/views/publish-object/PublishObjectView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <PublishObjectView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async archiveInteractive(id: string): Promise<void> {\n const { ArchiveObjectView } = await import('shared/views/archive-object/ArchiveObjectView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ArchiveObjectView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async deleteInteractive(id: string): Promise<void> {\n const { DeleteInteractiveView } = await import('apps/interactives/views/delete-interactive/DeleteInteractiveView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteInteractiveView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async copyInteractive(id: string): Promise<void> {\n const { CopyInteractiveView } = await import('apps/videos/views/copy-video-interactive/CopyInteractiveView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyInteractiveView interactiveId={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n private addRecentInteractive(id: string): void {\n RecentItemHelper.addRecentItem(RECENT_INTERACTIVES_KEY, LocalStorageHelper, {\n id,\n limit: RECENT_INTERACTIVES_LIMIT,\n expire: false\n });\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\nimport { ApplicationOptions } from 'backbone.marionette';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { FullScreenLayoutView, FullScreenLayoutViewOptions } from 'shared/layouts';\n\nimport { FieldType } from 'apps/marketing/interfaces/BrazeField';\nimport { ContactImportQueryParams } from 'apps/marketing/interfaces/ContactImportQueryParams';\n\nclass MarketingAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.MARKETING_APP;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'marketing': 'index',\n 'marketing/catalog/:region/:id': 'viewCatalog',\n 'marketing/contacts': 'contactUpload',\n 'marketing/contact-import/upload': 'contactImportUpload',\n 'marketing/contact-import/origin-type': 'contactImportOriginType',\n 'marketing/contact-import/destination': 'contactImportDestination',\n 'marketing/contact-import/import-options': 'contactImportImportOptions',\n 'marketing/contact-import/advanced-options': 'contactImportAdvancedOptions',\n 'marketing/contact-import/review': 'contactImportReview',\n 'marketing/contact-import': 'contactImport'\n };\n }\n\n // @ts-ignore\n protected get externalRoutes(): ObjectHash {\n return {\n '/': 'exit'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'deleteCatalog',\n 'createCatalog',\n 'editCatalog',\n 'createFields',\n 'createItems',\n 'deleteItem',\n 'deleteField'\n ];\n }\n}\n\nexport class MarketingApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n public initialize(options: ApplicationOptions): void {\n super.initialize(options);\n const footer = document.getElementById('footer');\n if (footer) {\n footer.style.display = 'none';\n }\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Marketing Application';\n }\n\n public static get router(): any {\n return MarketingAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.MARKETING_APP;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: true\n }\n };\n }\n\n public async index(): Promise<void> {\n const { AllCatalogsView } = await import('apps/marketing/views/catalogs/all-catalogs/AllCatalogsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AllCatalogsView />\n );\n }\n\n // AppLinks for Catalogs\n\n public async deleteCatalog(catalogName: string, region: string): Promise<void> {\n const { DeleteCatalogView } = await import('apps/marketing/views/catalogs/delete-catalog/DeleteCatalogView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteCatalogView\n catalogName={catalogName}\n region={region}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async viewCatalog(region: string, catalogName: string): Promise<void> {\n const { ViewCatalogView } = await import('apps/marketing/views/catalogs/view-catalog/ViewCatalogView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ViewCatalogView\n catalogName={catalogName}\n region={region}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async createCatalog(): Promise<void> {\n const { CreateCatalogView } = await import('apps/marketing/views/catalogs/create-catalog/CreateCatalogView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateCatalogView\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editCatalog(\n catalogName: string,\n currentValue: FieldType,\n id: string,\n fieldName: string,\n fieldType: FieldType,\n region: string\n ): Promise<void> {\n const { EditCatalogView } = await import('apps/marketing/views/catalogs/edit-catalog/EditCatalogView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditCatalogView\n catalogName={catalogName}\n currentValue={currentValue}\n id={id}\n fieldName={fieldName}\n fieldType={fieldType}\n region={region}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async createFields(catalogName: string, region: string): Promise<void> {\n const { CreateFieldView } = await import('apps/marketing/views/catalogs/create-field/CreateFieldView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateFieldView\n region={region}\n catalogName={catalogName}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async createItems(catalogName: string, region: string): Promise<void> {\n const { CreateItemView } = await import('apps/marketing/views/catalogs/create-item/CreateItemView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateItemView\n region={region}\n catalogName={catalogName}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteItem(catalogName: string, itemId: string, region: string): Promise<void> {\n const { DeleteItemView } = await import('apps/marketing/views/catalogs/delete-item/DeleteItemView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteItemView\n region={region}\n catalogName={catalogName}\n itemId={itemId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteField(catalogName: string, fieldName: string, region: string): Promise<void> {\n const { DeleteFieldView } = await import('apps/marketing/views/catalogs/delete-field/DeleteFieldView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteFieldView\n catalogName={catalogName}\n fieldName={fieldName}\n region={region}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n // AppLinks for Contact Upload\n \n public async contactUpload(): Promise<void> {\n const { ContactUploadView } = await import('apps/marketing/views/contact-upload/contact-upload-wizard/ContactUploadView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactUploadView />\n );\n }\n\n public async contactImport(params?: ObjectHash): Promise<void> {\n const { ContactImportHomeView } = await import('apps/marketing/views/contact-import/home/ContactImportHomeView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactImportHomeView {...params} />\n );\n }\n\n public async contactImportUpload(queryParams?: ContactImportQueryParams): Promise<void> {\n const { ContactImportUploadView } = await import('apps/marketing/views/contact-import/upload/ContactImportUploadView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactImportUploadView queryParams={queryParams} />\n );\n }\n\n public async contactImportOriginType(queryParams?: ContactImportQueryParams): Promise<void> {\n const { ContactImportOriginTypeView } = await import('apps/marketing/views/contact-import/origin-type/ContactImportOriginTypeView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactImportOriginTypeView queryParams={queryParams} />\n );\n }\n\n public async contactImportDestination(queryParams?: ContactImportQueryParams): Promise<void> {\n const { ContactImportDestinationsView } = await import('apps/marketing/views/contact-import/destinations/ContactImportDestinationsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactImportDestinationsView queryParams={queryParams} />\n );\n }\n\n public async contactImportImportOptions(queryParams?: ContactImportQueryParams): Promise<void> {\n const { ContactImportOptionsView } = await import('apps/marketing/views/contact-import/import-options/ContactImportOptionsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactImportOptionsView queryParams={queryParams} />\n );\n }\n\n public async contactImportAdvancedOptions(queryParams?: ContactImportQueryParams): Promise<void> {\n const { ContactImportAdvancedOptionsView } = await import('apps/marketing/views/contact-import/advanced-options/ContactImportAdvancedOptionsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactImportAdvancedOptionsView queryParams={queryParams} />\n );\n }\n\n public async contactImportReview(queryParams?: ContactImportQueryParams): Promise<void> {\n const { ContactImportReviewView } = await import('apps/marketing/views/contact-import/review/ContactImportReviewView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactImportReviewView queryParams={queryParams} />\n );\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { Presentation } from 'libs/shared/interfaces/models/Presentation';\nimport { PopupViewProps } from 'libs/shared/interfaces/props/ViewProps';\n\nimport { Actions, AppChannels } from 'shared/constants';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { DashboardActionType } from 'shared/enums/DashboardActionType';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts/curator-layout';\n\nclass MoviesAndTvAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.MOVIES_AND_TV;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/movies-and-tv(/)': 'moviesAndTv',\n 'manage/movies-and-tv/presentations/:id/edit/dashboards(/)': 'presentationMoviesAndTvDashboards'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'newMoviesAndTvDashboard',\n 'deleteDashboard',\n 'publishDashboard',\n 'archiveDraftDashboard',\n 'editMoviesAndTvDashboardDetails',\n 'copyDashboard'\n ];\n }\n}\n\nexport class MoviesAndTvApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Movies and Tv Application';\n }\n\n public static get router(): any {\n return MoviesAndTvAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.MOVIES_AND_TV;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async moviesAndTv(): Promise<void> {\n const { SelectPresentationView } = await import('shared/views/select-presentation/SelectPresentationView');\n \n const getAppLink = (presentation: Presentation) => ({\n application: AppChannels.MOVIES_AND_TV,\n action: Actions.MoviesAndTv.MOVIES_AND_TV_DASHBOARD,\n args: [presentation.id]\n });\n\n const props = { objectType: 'dashboards', getAppLink };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <SelectPresentationView {...props} />);\n }\n\n public async presentationMoviesAndTvDashboards(presentationId: string): Promise<void> {\n const { EditMoviesAndTvDashboardListView } = await import('apps/movies-and-tv/views/edit-dashboard-list/EditMoviesAndTvDashboardListView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditMoviesAndTvDashboardListView presentationId={presentationId} />\n );\n }\n\n public async newMoviesAndTvDashboard(presentationId: string): Promise<void> {\n const { NewMoviesAndTvDashboardView } = await import('apps/movies-and-tv/views/new-dashboard/NewMoviesAndTvDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewMoviesAndTvDashboardView\n presentationId={presentationId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async editMoviesAndTvDashboardDetails(dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('apps/dashboard-editor/views/edit-dashboard-details/EditDashboardDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditDashboardDetailsView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async copyDashboard(dashboardId: string): Promise<void> {\n const { CopyDashboardView } = await import('apps/discover/views/copy-dashboard/CopyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyDashboardView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async deleteDashboard(id: string): Promise<void> {\n const { RemoveMoviesAndTvDashboardView } = await import('apps/movies-and-tv/views/remove-dashboard/RemoveMoviesAndTvDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveMoviesAndTvDashboardView\n dashboardId={id}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async publishDashboard(\n dashboardId: string,\n dashboardToArchiveId: string\n ): Promise<void> {\n const { PublishDashboardView } = await import('shared/views/publish-dashboard/PublishDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <PublishDashboardView\n dashboardToPublishId={dashboardId}\n dashboardToArchiveId={\n typeof dashboardToArchiveId === 'string' ?\n dashboardToArchiveId :\n undefined}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async archiveDraftDashboard(\n actionType: DashboardActionType,\n dashboardId: string\n ): Promise<void> {\n const { ArchiveDraftDashboardView } = await import('shared/views/archive-draft-dashboard/ArchiveDraftDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ArchiveDraftDashboardView\n dashboardId={dashboardId}\n actionType={actionType}\n {...this.getPopupProps()}\n />\n );\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts/curator-layout';\n\nimport { NewOrganisationQueryParams } from 'apps/organisations/views/new-organisation/NewOrganisationView';\n\nclass OrganisationsAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.ORGANISATIONS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'system/organisations/new': 'newOrganisation',\n 'organisations/:id/sso': 'sso'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [];\n }\n\n // @ts-ignore\n protected get externalRoutes(): ObjectHash {\n return {\n 'system/organisations/:id': 'organisation:manage'\n };\n }\n}\n\nexport class OrganisationsApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Organisations Application';\n }\n\n public static get router(): any {\n return OrganisationsAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.ORGANISATIONS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async newOrganisation(params: NewOrganisationQueryParams): Promise<void> {\n const { NewOrganisationView } = await import('apps/organisations/views/new-organisation/NewOrganisationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <NewOrganisationView accountId={params.accountId} />\n );\n }\n\n public async sso(organisationId: string): Promise<void> {\n const { OrganisationSsoManagementView } = await import('apps/organisations/views/sso-management/OrganisationSsoManagementView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationSsoManagementView organisationId={organisationId} />\n );\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { AppChannels, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass PeopleAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.PEOPLE;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/people(/)': 'people',\n 'manage/people/new(/)': 'newPerson',\n 'manage/people/:id(/)': 'editPerson'\n };\n }\n}\n\nexport class PeopleApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'People Application';\n }\n\n public static get router(): any {\n return PeopleAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.PEOPLE;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return { name: Layouts.CURATOR_LAYOUT };\n }\n\n public async people(params: ObjectHash): Promise<void> {\n const { PeopleView } = await import('apps/people/views');\n \n const { cursor } = params;\n\n this.layout.showChildView(LayoutRegions.CONTENT, <PeopleView cursor={cursor} />);\n }\n\n public async newPerson(): Promise<void> {\n const { NewPersonView } = await import('apps/people/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewPersonView />);\n }\n\n public async editPerson(id: string): Promise<void> {\n const { EditPersonView } = await import('apps/people/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditPersonView id={id} />);\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AppChannels, DataServices, Layouts } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass PlaylistsAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.PLAYLISTS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/playlists(/)': 'index',\n 'manage/playlists/new(/)': 'newPlaylist',\n 'manage/playlists/search(/)': 'searchPlaylists',\n 'manage/playlists/:id(/)': 'editPlaylist',\n 'manage/playlists/:id/videos(/)': 'editPlaylistVideos',\n 'manage/playlists/:id/dashboards(/)': 'editPlaylistDashboards',\n 'manage/playlists/:id/classifications(/)': 'editPlaylistSubjects',\n 'manage/playlists/:id/audiences(/)': 'editPlaylistAudiences',\n 'manage/playlists/:id/aliases(/)': 'editPlaylistAliases',\n 'manage/playlists/:id/curation(/)': 'editPlaylistCuration'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'deletePlaylist',\n 'removeVideo',\n 'uploadImage',\n 'removeFromSubject',\n 'deleteDashboardWidget',\n 'addToWorkbench'\n ];\n }\n\n // @ts-ignore\n protected get externalRoutes(): HashObject {\n return {\n 'dashboards/:id(/)': 'dashboard'\n };\n }\n}\n\nexport class PlaylistsApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n\n public initialize(): void {\n /**\n * Obtain an instance of all data services used in the application\n * to prevent any instances being destroyed between renders.\n * \n * This is caused by the InstanceManager not being suited\n * to the way React renders function components - Matt.\n */\n ObjectHelper.values(DataServices).forEach(d => InstanceManager.getInstance(d, this));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Playlists Application';\n }\n\n public static get router(): any {\n return PlaylistsAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.PLAYLISTS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {}\n };\n }\n\n public async index(params?: HashObject): Promise<void> {\n const { PlaylistsView } = await import('apps/playlists/views/playlists');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <PlaylistsView cursor={params?.cursor} />);\n }\n\n public async searchPlaylists(params?: HashObject): Promise<void> {\n const { PlaylistSearchResultsView } = await import('apps/playlists/views/playlist-search-results');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <PlaylistSearchResultsView query={params?.query} cursor={params?.cursor} />\n );\n }\n\n public async addToWorkbench(objectId: string): Promise<void> {\n const { AddToWorkbenchView } = await import('apps/workbench/views/add-to-workbench/AddToWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddToWorkbenchView\n objectId={objectId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async newPlaylist(): Promise<void> {\n const { NewPlaylistView } = await import('apps/playlists/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewPlaylistView />);\n }\n\n public async editPlaylist(playlistId: string): Promise<void> {\n const { EditPlaylistView } = await import('apps/playlists/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditPlaylistView key={playlistId} playlistId={playlistId} />);\n }\n\n public async editPlaylistVideos(playlistId: string): Promise<void> {\n const { EditPlaylistVideosView } = await import('apps/playlists/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditPlaylistVideosView key={playlistId} playlistId={playlistId} />\n );\n }\n\n public async editPlaylistDashboards(playlistId: string): Promise<void> {\n const { EditPlaylistDashboardsView } = await import('apps/playlists/views/edit-playlist-dashboards/EditPlaylistDashboardsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditPlaylistDashboardsView key={playlistId} playlistId={playlistId} />\n );\n }\n\n public async editPlaylistSubjects(playlistId: string): Promise<void> {\n const { EditPlaylistSubjectsView } = await import('apps/playlists/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditPlaylistSubjectsView key={playlistId} playlistId={playlistId} />\n );\n }\n\n public async editPlaylistAudiences(playlistId: string): Promise<void> {\n const { EditPlaylistAudiencesView } = await import('apps/playlists/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditPlaylistAudiencesView key={playlistId} playlistId={playlistId} />\n );\n }\n\n public async editPlaylistAliases(playlistId: string): Promise<void> {\n const { EditPlaylistAliasesView } = await import('apps/playlists/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditPlaylistAliasesView key={playlistId} playlistId={playlistId} />\n );\n }\n\n public async editPlaylistCuration(playlistId: string): Promise<void> {\n const { EditPlaylistCurationView } = await import('apps/playlists/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditPlaylistCurationView key={playlistId} playlistId={playlistId} />\n );\n }\n\n public async deletePlaylist(playlistId: string): Promise<void> {\n const { DeletePlaylistView } = await import('apps/playlists/views');\n \n const props = {\n playlistId,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeletePlaylistView {...props} />);\n }\n\n public async removeVideo(playlistId: string, videoId: string): Promise<void> {\n const { RemoveVideoView } = await import('apps/playlists/views');\n \n const props = {\n playlistId,\n videoId,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveVideoView {...props} />);\n }\n\n public async removeFromSubject(playlistId: string, subjectId: string): Promise<void> {\n const { RemoveSubjectMemberView } = await import('apps/subjects/views');\n \n const props = {\n subjectId,\n memberId: playlistId,\n memberType: SubjectMemberType.Playlists,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveSubjectMemberView {...props} />);\n }\n\n public async deleteDashboardWidget(dashboardId: string, widgetId: string): Promise<void> {\n const { DeleteDashboardWidgetView } = await import('apps/playlists/views/delete-dashboard-widget/DeleteDashboardWidgetView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteDashboardWidgetView\n dashboardId={dashboardId}\n widgetId={widgetId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { Core } from 'libs/common/core';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass ReleaseNotesAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.RELEASE_NOTES;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'developer/release-notes(/)': 'index',\n 'developer/release-notes/generate(/)': 'form',\n 'developer/release-notes/generator(/)': 'generator'\n };\n }\n}\n\nexport class ReleaseNotesApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Release Notes Application';\n }\n\n public static get router(): any {\n return ReleaseNotesAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.RELEASE_NOTES;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return { name: Layouts.CURATOR_LAYOUT };\n }\n\n public index(): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.RELEASE_NOTES,\n action: Actions.ReleaseNotes.GENERATOR\n }, { replace: true });\n }\n\n public async form(): Promise<void> {\n const { ReleaseNotesFormView } = await import('apps/release-notes/views/ReleaseNotesFormView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <ReleaseNotesFormView />);\n }\n\n public async generator(): Promise<void> {\n const { ReleaseNotesGeneratorView } = await import('apps/release-notes/views/ReleaseNotesGeneratorView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <ReleaseNotesGeneratorView />);\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { Core } from 'libs/common/core';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AppChannels, DataServices, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass SeriesAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SERIES;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/series/new(/)': 'newSeries',\n 'manage/series/:id(/)': 'editSeries',\n 'manage/series/:id/videos(/)': 'editSeriesVideos',\n 'manage/series/:id/classifications(/)': 'editSeriesSubjects',\n 'manage/series/:id/audiences(/)': 'editSeriesAudiences',\n 'manage/series/:id/aliases(/)': 'editSeriesAliases',\n 'manage/series/:id/curation(/)': 'editSeriesCuration',\n\n 'manage/legacy/series/:id(/)': 'legacyEditSeries'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'uploadImage'\n ];\n }\n}\n\nexport class SeriesApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n\n public initialize(): void {\n /**\n * Obtain an instance of all data services used in the application\n * to prevent any instances being destroyed between renders.\n * \n * This is caused by the InstanceManager not being suited\n * to the way React renders function components - Matt.\n */\n ObjectHelper.values(DataServices).forEach(d => InstanceManager.getInstance(d, this));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Series Application';\n }\n\n public static get router(): any {\n return SeriesAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SERIES;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {}\n };\n }\n\n public async newSeries(): Promise<void> {\n const { NewSeriesView } = await import('apps/series/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewSeriesView />);\n }\n\n public async editSeries(seriesId: string): Promise<void> {\n const { EditSeriesView } = await import('apps/series/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditSeriesView seriesId={seriesId} />);\n }\n\n public editSeriesVideos(seriesId: string): void {\n this.legacyEditSeries(seriesId);\n }\n\n public async editSeriesSubjects(seriesId: string): Promise<void> {\n const { EditSeriesSubjectsView } = await import('apps/series/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditSeriesSubjectsView seriesId={seriesId} />);\n }\n\n public async editSeriesAudiences(seriesId: string): Promise<void> {\n const { EditSeriesAudiencesView } = await import('apps/series/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditSeriesAudiencesView seriesId={seriesId} />);\n }\n\n public async editSeriesAliases(seriesId: string): Promise<void> {\n const { EditSeriesAliasesView } = await import('apps/series/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditSeriesAliasesView seriesId={seriesId} />);\n }\n\n public async editSeriesCuration(seriesId: string): Promise<void> {\n const { EditSeriesCurationView } = await import('apps/series/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditSeriesCurationView seriesId={seriesId} />);\n }\n\n public legacyEditSeries(seriesId: string): void {\n Core.LocationUtils.Redirect(`/manage/legacy/series/${seriesId}`, true);\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { FullScreenLayoutView, FullScreenLayoutViewOptions } from 'shared/layouts';\n\nclass ShortLinkAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SHORT_LINK;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'shorten-link(/)': 'index'\n };\n }\n}\n\nexport class ShortLinkApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Short Link Application';\n }\n\n public static get router(): any {\n return ShortLinkAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SHORT_LINK;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: true\n }\n };\n }\n\n public async index(): Promise<void> {\n const { ShortLinkView } = await import('apps/short-link/views/ShortLinkView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ShortLinkView />\n );\n }\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { CalendarEventStatus } from 'libs/shared/interfaces';\n\nimport { AppChannels, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nimport { SpecialEventsViewQueryParams } from './interfaces/SpecialEventsViewQueryParams';\n\nclass SpecialEventsAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SPECIAL_EVENTS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/special-events': 'index'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'createSpecialEvent',\n 'editSpecialEvent',\n 'addToCalendar',\n 'editSpecialEventPolicy',\n 'deleteSpecialEventPolicy',\n 'updatePolicyStatus'\n ];\n }\n}\n\nexport class SpecialEventsApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Special Events Application';\n }\n\n public static get router(): any {\n return SpecialEventsAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SPECIAL_EVENTS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async index(params: SpecialEventsViewQueryParams = {}): Promise<void> {\n const { SpecialEventsView } = await import('./views/special-events/SpecialEventsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <SpecialEventsView queryParams={params} />);\n }\n\n public async addToCalendar(id: string): Promise<void> {\n const { AddToCalendarView } = await import('./views/add-to-calendar/AddToCalendarContainerView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddToCalendarView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async createSpecialEvent(): Promise<void> {\n const { CreateSpecialEventView } = await import('./views/create-special-event/CreateSpecialEventView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateSpecialEventView closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async editSpecialEvent(id: string): Promise<void> {\n const { EditSpecialEventView } = await import('./views/edit-special-event/EditSpecialEventView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditSpecialEventView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async editSpecialEventPolicy(specialEventId: string, specialEventPolicyId: string): Promise<void> {\n const { EditSpecialEventPolicyView } = await import('./views/edit-special-event-policy/EditSpecialEventPolicyView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditSpecialEventPolicyView\n specialEventId={specialEventId}\n specialEventPolicyId={specialEventPolicyId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteSpecialEventPolicy(specialEventId: string, specialEventPolicyId: string): Promise<void> {\n const { DeleteSpecialEventPolicyView } = await import('./views/delete-special-event-policy/DeleteSpecialEventPolicyView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteSpecialEventPolicyView\n specialEventId={specialEventId}\n specialEventPolicyId={specialEventPolicyId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async updatePolicyStatus(\n specialEventId: string,\n specialEventPolicyId: string,\n status: CalendarEventStatus\n ): Promise<void> {\n const { UpdatePolicyStatusView } = await import('./views/update-policy-status/UpdatePolicyStatusView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <UpdatePolicyStatusView\n specialEventId={specialEventId}\n specialEventPolicyId={specialEventPolicyId}\n status={status}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { Core } from 'libs/common/core';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\nimport { DashboardTargetType, PopupViewProps, Presentation, PresentationAudience } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels, DataServices, Layouts } from 'shared/constants';\nimport { LevelMemberType, SubjectMemberType } from 'shared/enums';\nimport { DashboardActionType } from 'shared/enums/DashboardActionType';\nimport { ClassificationTree, SubjectTree } from 'shared/interfaces/models';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\nimport { SubjectDataService } from 'shared/services';\n\nimport { TopNavView } from 'apps/subjects/views';\n\nconst presentationType = PresentationType.Subject;\n\nclass SubjectsAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SUBJECTS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/subjects(/)': 'subjects',\n 'manage/subjects/add-objects(/)': 'addSubjectMembers',\n 'manage/subjects/new(/)': 'newSubject',\n 'manage/subjects/:id/edit(/)': 'editSubject',\n 'manage/subjects/:id/edit/playlists(/)': 'editSubjectPlaylists',\n 'manage/subjects/:id/edit/series(/)': 'editSubjectSeries',\n 'manage/subjects/:id/edit/videos(/)': 'editSubjectVideos',\n 'manage/subjects/:id/edit/clips(/)': 'editSubjectClips',\n 'manage/subjects/:id/edit/interactives(/)': 'editSubjectInteractives',\n 'manage/subjects/:id/classifications(/)': 'subjectClassifications',\n\n 'manage/subjects/classifications(/)': 'classifications',\n 'manage/subjects/presentations/:id/classifications(/)': 'presentationClassifications',\n 'manage/subjects/presentations/:id/classifications/new(/)': 'newClassification',\n 'manage/subjects/presentations/:id/classifications/:id/edit(/)': 'editClassification',\n 'manage/subjects/presentations/:id/classifications/:id/edit/curation(/)': 'editClassificationCuration',\n 'manage/subjects/presentations/:id/classifications/:id/edit/playlists(/)': 'editClassificationPlaylists',\n 'manage/subjects/presentations/:id/classifications/:id/edit/series(/)': 'editClassificationSeries',\n 'manage/subjects/presentations/:id/classifications/:id/edit/videos(/)': 'editClassificationVideos',\n 'manage/subjects/presentations/:id/classifications/:id/edit/clips(/)': 'editClassificationClips',\n 'manage/subjects/presentations/:id/classifications/:id/edit/interactives(/)': 'editClassificationInteractives',\n 'manage/subjects/presentations/:id/classifications/:id/edit/aliases(/)': 'editClassificationAliases',\n 'manage/subjects/presentations/:id/classifications/:id/edit/dashboards(/)': 'editClassificationDashboards',\n 'manage/subjects/presentations/:id/classifications/:id/edit/directories(/)': 'editClassificationDirectories',\n\n 'manage/subjects/levels(/)': 'levels',\n 'manage/subjects/levels/new(/)': 'newLevel',\n 'manage/subjects/levels/:id(/)': 'level',\n 'manage/subjects/levels/:id/edit(/)': 'editLevel',\n 'manage/subjects/levels/:id/edit/playlists(/)': 'editLevelPlaylists',\n 'manage/subjects/levels/:id/edit/series(/)': 'editLevelSeries',\n 'manage/subjects/levels/:id/edit/videos(/)': 'editLevelVideos',\n 'manage/subjects/levels/:id/edit/clips(/)': 'editLevelClips',\n 'manage/subjects/levels/:id/edit/interactives(/)': 'editLevelInteractives',\n 'manage/subjects/levels/:id/audiences(/)': 'levelAudiences',\n\n 'manage/subjects/audiences(/)': 'audiences',\n 'manage/subjects/presentations/:id/audiences(/)': 'presentationAudiences',\n 'manage/subjects/presentations/:id/audiences/new(/)': 'newAudience',\n 'manage/subjects/presentations/:id/audiences/:id/edit(/)': 'editAudience',\n 'manage/subjects/presentations/:id/audiences/:id/edit/playlists(/)': 'editAudiencePlaylists',\n 'manage/subjects/presentations/:id/audiences/:id/edit/series(/)': 'editAudienceSeries',\n 'manage/subjects/presentations/:id/audiences/:id/edit/videos(/)': 'editAudienceVideos',\n 'manage/subjects/presentations/:id/audiences/:id/edit/clips(/)': 'editAudienceClips',\n 'manage/subjects/presentations/:id/audiences/:id/edit/interactives(/)': 'editAudienceInteractives',\n\n 'manage/subjects/presentations(/)': 'presentations',\n 'manage/subjects/presentations/new': 'newPresentation',\n 'manage/subjects/presentations/:id(/)': 'editPresentation'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'deleteClassification',\n 'removeClassificationMember',\n 'bulkRemoveClassificationMembers',\n 'deleteSubject',\n 'removeSubjectMember',\n\n 'deleteAudience',\n 'removeLevelMember',\n 'removeAudienceMember',\n 'newClassificationDashboard',\n 'editClassificationDashboard',\n 'archiveDraftClassificationDashboard',\n 'publishClassificationDashboard',\n 'removeClassificationDashboard',\n 'copyClassificationDashboard',\n\n 'uploadImage',\n 'addToWorkbench',\n 'addUnusedVideos'\n ];\n }\n\n // @ts-ignore\n protected get externalRoutes(): ObjectHash {\n return {\n 'hostedlibraries/:id(/)': 'hostedLibraries',\n 'exchange/programs': 'exchange'\n };\n }\n}\n\nexport class SubjectsApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n private subjectDataService: SubjectDataService;\n\n private currentLeftNavId: string;\n\n public initialize(): void {\n this.subjectDataService = InstanceManager.getInstance(DataServices.SUBJECT, this);\n\n /**\n * Obtain an instance of all data services used in the application\n * to prevent any instances being destroyed between renders.\n * \n * This is caused by the InstanceManager not being suited\n * to the way React renders function components - Matt.\n */\n ObjectHelper.values(DataServices).forEach(d => InstanceManager.getInstance(d, this));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Subjects Application';\n }\n\n public static get router(): any {\n return SubjectsAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SUBJECTS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n getTopNavView: this.getTopNav\n }\n };\n }\n\n public subjects(): void {\n this.subjectDataService.getSubjectTree(PresentationType.Subject, (subjectTree: SubjectTree) => {\n const firstSubject = !!subjectTree.children && subjectTree.children[0];\n\n if (!firstSubject) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.NEW_SUBJECT\n }, { replace: true });\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_SUBJECT,\n args: [firstSubject.id]\n }, { replace: true });\n });\n }\n\n public async addToWorkbench(objectId: string): Promise<void> {\n const { AddToWorkbenchView } = await import('apps/workbench/views/add-to-workbench/AddToWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddToWorkbenchView\n objectId={objectId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async newSubject(params: ObjectHash): Promise<void> {\n const { NewSubjectView } = await import('apps/subjects/views');\n \n const props = {\n parentId: params.parentId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <NewSubjectView key={params.parentId} {...props} />);\n\n this.renderSubjectsLeftNav();\n }\n\n public async editSubject(subjectId: string): Promise<void> {\n const { EditSubjectView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditSubjectView key={subjectId} subjectId={subjectId} />);\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async editSubjectPlaylists(subjectId: string, params?: { presentationId: string }): Promise<void> {\n const { EditSubjectMembersView } = await import('apps/subjects/views');\n \n const props = {\n subjectId,\n memberType: SubjectMemberType.Playlists,\n action: Actions.Subjects.EDIT_SUBJECT_PLAYLISTS,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditSubjectMembersView key={`${subjectId}:playlists`} {...props} />\n );\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async editSubjectSeries(subjectId: string, params?: { presentationId: string }): Promise<void> {\n const { EditSubjectMembersView } = await import('apps/subjects/views');\n \n const props = {\n subjectId,\n memberType: SubjectMemberType.Series,\n action: Actions.Subjects.EDIT_SUBJECT_SERIES,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditSubjectMembersView key={`${subjectId}:series`} {...props} />\n );\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async editSubjectVideos(subjectId: string, params?: { presentationId: string }): Promise<void> {\n const { EditSubjectMembersView } = await import('apps/subjects/views');\n \n const props = {\n subjectId,\n memberType: SubjectMemberType.Videos,\n action: Actions.Subjects.EDIT_SUBJECT_VIDEOS,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditSubjectMembersView key={`${subjectId}:videos`} {...props} />);\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async editSubjectClips(subjectId: string, params?: { presentationId: string }): Promise<void> {\n const { EditSubjectMembersView } = await import('apps/subjects/views');\n \n const props = {\n subjectId,\n memberType: SubjectMemberType.Clips,\n action: Actions.Subjects.EDIT_SUBJECT_CLIPS,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditSubjectMembersView key={`${subjectId}:clips`} {...props} />);\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async editSubjectInteractives(subjectId: string, params?: { presentationId: string }): Promise<void> {\n const { EditSubjectMembersView } = await import('apps/subjects/views');\n \n const props = {\n subjectId,\n memberType: SubjectMemberType.Interactives,\n action: Actions.Subjects.EDIT_SUBJECT_INTERACTIVES,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditSubjectMembersView key={`${subjectId}:interactives`} {...props} />);\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async subjectClassifications(subjectId: string): Promise<void> {\n const { SubjectClassificationsView } = await import('apps/subjects/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <SubjectClassificationsView key={subjectId} subjectId={subjectId} />\n );\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async addSubjectMembers(params: ObjectHash): Promise<void> {\n const { AddSubjectMembersView } = await import('apps/subjects/views');\n \n const { memberType, objectIds } = params;\n\n if (!memberType || !objectIds)\n return;\n\n const props = {\n memberType,\n objectIds: Array.isArray(objectIds) ? objectIds : [objectIds]\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <AddSubjectMembersView {...props} />);\n\n this.hideLeftNav();\n }\n\n public async removeSubjectMember(subjectId: string, memberId: string, memberType: SubjectMemberType): Promise<void> {\n const { RemoveSubjectMemberView } = await import('apps/subjects/views');\n \n const props = {\n subjectId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveSubjectMemberView {...props} />);\n }\n\n public async deleteSubject(subjectId: string): Promise<void> {\n const { DeleteSubjectView } = await import('apps/subjects/views');\n \n /**\n * If the subject being deleted is currently displayed the in the CONTENT region,\n * we want to route away from it on delete.\n */\n const routeToOnDelete = subjectId.toString() === this.currentLeftNavId.toString() ?\n { application: AppChannels.SUBJECTS, action: Actions.Subjects.NEW_SUBJECT } :\n null;\n\n const props = {\n subjectId,\n routeToOnDelete: routeToOnDelete || null,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteSubjectView {...props} />);\n }\n\n public async classifications(): Promise<void> {\n const { SelectPresentationView } = await import('shared/views/select-presentation/SelectPresentationView');\n \n const getAppLink = (presentation: Presentation) => ({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.PRESENTATION_CLASSIFICATIONS,\n args: [presentation.id]\n });\n\n const props = { objectType: 'topics', getAppLink };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <SelectPresentationView {...props} />);\n\n this.hideLeftNav();\n }\n\n public presentationClassifications(presentationId: string): void {\n this.subjectDataService.getClassificationTree(presentationId, (classificationTree: ClassificationTree) => {\n const firstClassification = !!classificationTree.children && classificationTree.children[0];\n\n if (!firstClassification) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.NEW_CLASSIFICATION,\n args: [presentationId]\n }, { replace: true });\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_CLASSIFICATION,\n args: [ presentationId, firstClassification.id ]\n }, { replace: true });\n });\n }\n\n public async newClassification(presentationId: string, params: ObjectHash): Promise<void> {\n const { NewClassificationView } = await import('apps/subjects/views');\n \n const props = {\n presentationId,\n parentId: params.parentId,\n presentationType: PresentationType.Subject\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <NewClassificationView key={params.parentId} {...props} />);\n\n this.renderClassificationLeftNav(presentationId);\n }\n\n public async newClassificationDashboard(\n classificationId: string,\n presentationId: string,\n targetType: DashboardTargetType.Classification | DashboardTargetType.ClassificationDirectory,\n params: { isAi: boolean }\n ): Promise<void> {\n const { NewClassificationDashboardView } = await import('apps/subjects/views/classifications/new-classification-dashboard/NewClassificationDashboardView');\n \n const props = {\n classificationId, presentationId, targetType, redirect: true, isAi: params.isAi, ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <NewClassificationDashboardView {...props} />);\n }\n\n public async editClassificationDashboard(classificationId: string, dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('apps/dashboard-editor/views/edit-dashboard-details/EditDashboardDetailsView');\n \n const props = { dashboardId, classificationId, ...this.getPopupProps() };\n\n this.layout.showChildView(LayoutRegions.POPUP, <EditDashboardDetailsView {...props} />);\n }\n\n public async copyClassificationDashboard(dashboardId: string): Promise<void> {\n const { CopyDashboardView } = await import('apps/discover/views/copy-dashboard/CopyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyDashboardView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async addUnusedVideos(dashboardId: string): Promise<void> {\n const { AddUnusedVideosView } = await import('apps/discover/views/add-unused-videos/AddUnusedVideos');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddUnusedVideosView dashboardId={dashboardId} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async editClassification(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationView } = await import('apps/subjects/views');\n \n const props = { presentationId, classificationId };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClassificationView key={classificationId} {...props} />);\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationCuration(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationCurationView } = await import('apps/subjects/views/classifications/edit-classification-curation/EditClassificationCurationView');\n \n const props = { presentationId, classificationId, memberType: SubjectMemberType.Tags };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationCurationView key={`${classificationId}:curation`} {...props} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationPlaylists(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationMembersView } = await import('apps/subjects/views/classifications/edit-classification-members/EditClassificationMembersView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationMembersView key={`${classificationId}:playlists`} memberType={SubjectMemberType.Playlists} presentationId={presentationId} classificationId={classificationId} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationSeries(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationMembersView } = await import('apps/subjects/views/classifications/edit-classification-members/EditClassificationMembersView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationMembersView key={`${classificationId}:series`} memberType={SubjectMemberType.Series} presentationId={presentationId} classificationId={classificationId} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationVideos(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationVideosView } = await import('apps/subjects/views/classifications/edit-classification-members/EditClassificationVideosView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationVideosView key={`${classificationId}:videos`} presentationId={presentationId} classificationId={classificationId} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationClips(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationMembersView } = await import('apps/subjects/views/classifications/edit-classification-members/EditClassificationMembersView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationMembersView key={`${classificationId}:clips`} memberType={SubjectMemberType.Clips} presentationId={presentationId} classificationId={classificationId} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationInteractives(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationMembersView } = await import('apps/subjects/views/classifications/edit-classification-members/EditClassificationMembersView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationMembersView key={`${classificationId}:interactives`} memberType={SubjectMemberType.Interactives} presentationId={presentationId} classificationId={classificationId} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationAliases(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationAliasesView } = await import('apps/subjects/views/classifications/edit-classification-aliases/EditClassificationAliasesView');\n \n const props = { presentationId, classificationId, memberType: SubjectMemberType.Aliases };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClassificationAliasesView {...props} />);\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationDashboards(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationDashboardListView } = await import('apps/subjects/views/classifications/edit-classification-dashboard-list/EditClassificationDashboardListView');\n \n const props = { presentationId, classificationId, memberType: SubjectMemberType.Dashboard };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClassificationDashboardListView {...props} />);\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationDirectories(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationDirectoriesListView } = await import('./views/classifications/edit-classification-directories-list/EditClassificationDirectoriesListView');\n \n const props = { presentationId, classificationId, memberType: SubjectMemberType.Dashboard };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClassificationDirectoriesListView {...props} />);\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async removeClassificationMember(\n classificationId: string,\n memberId: string,\n memberType: SubjectMemberType\n ): Promise<void> {\n const { RemoveClassificationMemberView } = await import('shared/views/remove-classification-member');\n \n const props = {\n classificationId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationMemberView {...props} />);\n }\n\n public async bulkRemoveClassificationMembers(\n classificationId: string,\n memberType: SubjectMemberType,\n params: { memberIds: string[] }\n ): Promise<void> {\n const { RemoveClassificationMemberView } = await import('shared/views/remove-classification-member');\n \n const memberId = params.memberIds;\n const props = {\n classificationId,\n memberType,\n memberId,\n ...this.getPopupProps()\n };\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationMemberView {...props} />);\n }\n\n public async removeClassificationDashboard(targetId: string, dashboardId: string): Promise<void> {\n const { RemoveClassificationDashboardView } = await import('apps/subjects/views/classifications/remove-classification-dashboard/RemoveClassificationDashboardView');\n \n const props = {\n classificationId: targetId,\n dashboardId,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationDashboardView {...props} />);\n }\n\n public async archiveDraftClassificationDashboard(\n actionType: DashboardActionType,\n dashboardId: string\n ): Promise<void> {\n const { ArchiveDraftDashboardView } = await import('shared/views/archive-draft-dashboard/ArchiveDraftDashboardView');\n \n const props = {\n dashboardId,\n actionType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <ArchiveDraftDashboardView {...props} />);\n }\n\n public async publishClassificationDashboard(\n dashboardId: string,\n dashboardToArchiveId: string\n ): Promise<void> {\n const { PublishDashboardView } = await import('shared/views/publish-dashboard/PublishDashboardView');\n \n const props = {\n dashboardToPublishId: dashboardId,\n dashboardToArchiveId: typeof dashboardToArchiveId === 'string' ?\n dashboardToArchiveId :\n undefined,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <PublishDashboardView {...props} />);\n }\n\n public async deleteClassification(presentationId: string, classificationId: string): Promise<void> {\n const { DeleteClassificationView } = await import('apps/subjects/views');\n \n /**\n * If the classification being deleted is currently displayed the in the CONTENT region,\n * we want to route away from it (and back to the presentation) on delete.\n */\n const routeToOnDelete = classificationId === this.currentLeftNavId ?\n {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.NEW_CLASSIFICATION,\n args: [presentationId]\n } :\n null;\n\n const props = {\n classificationId,\n routeToOnDelete: routeToOnDelete || null,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteClassificationView {...props} />);\n }\n\n public async levels(): Promise<void> {\n const { LevelsRedirectView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <LevelsRedirectView />);\n\n this.renderLevelsLeftNav();\n }\n\n public async newLevel(): Promise<void> {\n const { NewLevelView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewLevelView />);\n\n this.renderLevelsLeftNav();\n }\n\n public level(id: string): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_LEVEL,\n args: [id]\n }, { replace: true });\n }\n\n public async editLevel(id: string): Promise<void> {\n const { EditLevelView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditLevelView key={id} id={id} />);\n\n this.renderLevelsLeftNav(id);\n }\n\n public async levelAudiences(levelId: string): Promise<void> {\n const { LevelAudiencesView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <LevelAudiencesView key={levelId} levelId={levelId} />);\n this.renderLevelsLeftNav(levelId);\n }\n\n public async editLevelPlaylists(levelId: string, params?: { presentationId: string }): Promise<void> {\n const { EditLevelMembersView } = await import('apps/subjects/views');\n \n const props = {\n levelId,\n memberType: LevelMemberType.Playlists,\n action: Actions.Subjects.EDIT_LEVEL_PLAYLISTS,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditLevelMembersView key={`${levelId}:playlists`} {...props} />\n );\n\n this.renderLevelsLeftNav(levelId);\n }\n\n public async editLevelSeries(levelId: string, params?: { presentationId: string }): Promise<void> {\n const { EditLevelMembersView } = await import('apps/subjects/views');\n \n const props = {\n levelId,\n memberType: LevelMemberType.Series,\n action: Actions.Subjects.EDIT_LEVEL_SERIES,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditLevelMembersView key={`${levelId}:series`} {...props} />\n );\n\n this.renderLevelsLeftNav(levelId);\n }\n\n public async editLevelVideos(levelId: string, params?: { presentationId: string }): Promise<void> {\n const { EditLevelMembersView } = await import('apps/subjects/views');\n \n const props = {\n levelId,\n memberType: LevelMemberType.Videos,\n action: Actions.Subjects.EDIT_LEVEL_VIDEOS,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditLevelMembersView key={`${levelId}:videos`} {...props} />\n );\n\n this.renderLevelsLeftNav(levelId);\n }\n\n public async editLevelClips(levelId: string, params?: { presentationId: string }): Promise<void> {\n const { EditLevelMembersView } = await import('apps/subjects/views');\n \n const props = {\n levelId,\n memberType: LevelMemberType.Clips,\n action: Actions.Subjects.EDIT_LEVEL_CLIPS,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditLevelMembersView key={`${levelId}:clips`} {...props} />\n );\n\n this.renderLevelsLeftNav(levelId);\n }\n\n public async editLevelInteractives(levelId: string, params?: { presentationId: string }): Promise<void> {\n const { EditLevelMembersView } = await import('apps/subjects/views');\n \n const props = {\n levelId,\n memberType: LevelMemberType.Interactives,\n action: Actions.Subjects.EDIT_LEVEL_INTERACTIVES,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditLevelMembersView key={`${levelId}:interactives`} {...props} />\n );\n\n this.renderLevelsLeftNav(levelId);\n }\n\n public async removeLevelMember(levelId: string, memberId: string, memberType: LevelMemberType): Promise<void> {\n const { RemoveLevelMemberView } = await import('apps/subjects/views');\n \n const props = {\n levelId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveLevelMemberView {...props} />);\n }\n\n public async audiences(): Promise<void> {\n const { SelectPresentationView } = await import('shared/views/select-presentation/SelectPresentationView');\n \n const getAppLink = (presentation: Presentation) => ({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.PRESENTATION_AUDIENCES,\n args: [presentation.id]\n });\n\n const props = { objectType: 'audiences', getAppLink };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <SelectPresentationView {...props} />);\n\n this.hideLeftNav();\n }\n\n public async removeAudienceMember(audienceId: string, memberId: string, memberType: LevelMemberType): Promise<void> {\n const { RemoveAudienceMemberView } = await import('apps/subjects/views/audiences/remove-audience-member/RemoveAudienceMemberView');\n \n const props = {\n audienceId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveAudienceMemberView {...props} />);\n }\n\n public presentationAudiences(presentationId: string): void {\n this.subjectDataService.getAudiences(presentationId, (audiences: PresentationAudience[]) => {\n const firstAudience = !!audiences && audiences[0];\n\n if (!firstAudience) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.NEW_AUDIENCE,\n args: [presentationId]\n }, { replace: true });\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_AUDIENCE,\n args: [ presentationId, firstAudience.masterId ]\n }, { replace: true });\n });\n }\n\n public async newAudience(presentationId: string): Promise<void> {\n const { NewAudienceView } = await import('apps/subjects/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <NewAudienceView presentationId={presentationId} presentationType={presentationType} />\n );\n\n this.hideLeftNav();\n }\n\n public async editAudience(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceView } = await import('apps/subjects/views');\n \n const props = { presentationId, audienceId, presentationType };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditAudienceView key={audienceId} {...props} />);\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async editAudiencePlaylists(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceMembersView } = await import('apps/subjects/views');\n \n const props = { presentationId, audienceId, presentationType, memberType: LevelMemberType.Playlists };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditAudienceMembersView key={`${audienceId}:playlists`} {...props} />\n );\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async editAudienceSeries(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceMembersView } = await import('apps/subjects/views');\n \n const props = { presentationId, audienceId, presentationType, memberType: LevelMemberType.Series };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditAudienceMembersView key={`${audienceId}:series`} {...props} />\n );\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async editAudienceVideos(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceMembersView } = await import('apps/subjects/views');\n \n const props = { presentationId, audienceId, presentationType, memberType: LevelMemberType.Videos };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditAudienceMembersView key={`${audienceId}:videos`} {...props} />\n );\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async editAudienceClips(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceMembersView } = await import('apps/subjects/views');\n \n const props = { presentationId, audienceId, presentationType, memberType: LevelMemberType.Clips };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditAudienceMembersView key={`${audienceId}:videos`} {...props} />\n );\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async editAudienceInteractives(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceMembersView } = await import('apps/subjects/views');\n \n const props = { presentationId, audienceId, presentationType, memberType: LevelMemberType.Interactives };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditAudienceMembersView key={`${audienceId}:videos`} {...props} />\n );\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async deleteAudience(presentationId: string, audienceId: string): Promise<void> {\n const { DeleteAudienceView } = await import('apps/subjects/views');\n \n const routeToOnDelete = {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.PRESENTATION_AUDIENCES,\n args: [presentationId]\n };\n\n const props = { id: audienceId, routeToOnDelete, ...this.getPopupProps() };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteAudienceView {...props} />);\n }\n\n public async presentations(): Promise<void> {\n const { EditPresentationsListView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditPresentationsListView />);\n\n this.hideLeftNav();\n }\n\n public async newPresentation(): Promise<void> {\n const { NewPresentationView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewPresentationView />);\n }\n\n public async editPresentation(id: string): Promise<void> {\n const { EditPresentationView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditPresentationView key={id} id={id} />);\n\n this.hideLeftNav();\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { AlertList } = await import('libs/shared/components/alert/AlertList');\n \n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n private async renderClassificationLeftNav(presentationId: string, selectedClassificationId?: string): Promise<void> {\n const { ClassificationNavView } = await import('apps/subjects/views');\n \n this.setCurrentLeftNavItem(selectedClassificationId);\n\n const props = { presentationId, selectedClassificationId, presentationType: PresentationType.Subject };\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <ClassificationNavView {...props} />);\n }\n\n private async renderSubjectsLeftNav(subjectId?: string): Promise<void> {\n const { SubjectNavView } = await import('apps/subjects/views');\n \n this.setCurrentLeftNavItem(subjectId);\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <SubjectNavView selectedSubjectId={subjectId} />);\n }\n\n private async renderAudienceLeftNav(presentationId: string, selectedAudienceId?: string): Promise<void> {\n const { AudienceNavView } = await import('apps/subjects/views');\n \n this.setCurrentLeftNavItem(selectedAudienceId);\n\n const props = { presentationId, selectedAudienceId, presentationType };\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <AudienceNavView {...props} />);\n }\n\n private async renderLevelsLeftNav(levelId?: string): Promise<void> {\n const { LevelNavView } = await import('apps/subjects/views');\n \n this.setCurrentLeftNavItem(levelId);\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <LevelNavView selectedLevelId={levelId} />);\n }\n\n private setCurrentLeftNavItem(id?: string): void {\n if (id)\n this.currentLeftNavId = id;\n else\n this.currentLeftNavId = null;\n }\n\n private hideLeftNav(): void {\n this.setCurrentLeftNavItem();\n\n this.layout.hideLeftNav();\n }\n\n private getTopNav(currentAppLink: Core.AppLink): React.ReactElement {\n return <TopNavView currentAppLink={currentAppLink} />;\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\n\nimport { AppChannels, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass ThemesAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.THEMES;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/themes(/)': 'themes',\n 'manage/themes/new(/)': 'newTheme',\n 'manage/themes/:id(/)': 'editTheme'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'deleteTheme',\n 'uploadImage'\n ];\n }\n}\n\nexport class ThemesApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Themes Application';\n }\n\n public static get router(): any {\n return ThemesAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.THEMES;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async themes(): Promise<void> {\n const { ThemesView } = await import('apps/themes/views/themes');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <ThemesView />);\n }\n\n public async newTheme(): Promise<void> {\n const { NewThemeView } = await import('apps/themes/views/new-theme');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewThemeView />);\n }\n\n public async editTheme(id: string): Promise<void> {\n const { EditThemeView } = await import('apps/themes/views/edit-theme');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditThemeView id={id} />);\n }\n\n public async deleteTheme(id: string): Promise<void> {\n const { DeleteThemeView } = await import('apps/themes/views/delete-theme');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteThemeView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts/curator-layout';\n\nclass UsersAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.USERS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'users(/)': 'index',\n 'users/:id(/)': 'editUser'\n };\n }\n}\n\nexport class UsersApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Users Application';\n }\n\n public static get router(): any {\n return UsersAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.USERS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async index(params: HashObject): Promise<void> {\n const { UserSearchView } = await import('apps/users/views/user-search/UserSearchView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <UserSearchView query={params.query} cursor={params.cursor} />);\n }\n\n public async editUser(id: string, params: { cursor?: string } = {}): Promise<void> {\n const { CustomerlessUserView } = await import('apps/users/views/customerless-user/CustomerlessUserView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerlessUserView\n id={id}\n analyticsOptions={{}}\n returnAppLinkCursor={params.cursor}\n />\n );\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\n\nimport { AppChannels, DataServices, Layouts } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass VideosAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.VIDEOS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/videos/:id(/)': 'editVideo',\n 'manage/videos/:id/preview(/)': 'previewVideo',\n 'manage/videos/:id/audiences(/)': 'editVideoAudiences',\n 'manage/videos/:id/topics(/)': 'editVideoSubjects',\n 'manage/videos/:id/curriculums(/)': 'editVideoCurriculums',\n 'manage/videos/:id/curated-topics(/)': 'editVideoCuratedTopics',\n 'manage/videos/:id/aliases(/)': 'editVideoAliases',\n 'manage/videos/:id/playlists(/)': 'editVideoPlaylists',\n 'manage/videos/:id/points-of-interest(/)': 'managePointsOfInterest',\n 'manage/videos/:id/tags(/)': 'editVideoTags',\n 'manage/videos/:id/curation(/)': 'editVideoCuration',\n 'manage/videos/:id/clips(/)': 'editVideoClips',\n 'manage/videos/:id/interactives(/)': 'editVideoInteractives',\n 'manage/videos/:id/resources(/)': 'editVideoResources',\n\n 'tools/programlookup/:id': 'legacyEditVideo'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'uploadImage',\n 'addToWorkbench',\n 'removeVideoClassification',\n 'removeVideoPlaylist',\n 'updateStatus',\n 'deleteVideo'\n ];\n }\n\n // @ts-ignore\n protected get externalRoutes(): ObjectHash {\n return {\n 'hostedlibraries/:id(/)': 'hostedLibrary',\n 'manage/videos': 'videosHome'\n };\n }\n}\n\nexport class VideosApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n public initialize(): void {\n /**\n * Obtain an instance of all data services used in the application\n * to prevent any instances being destroyed between renders.\n * \n * This is caused by the InstanceManager not being suited\n * to the way React renders function components - Matt.\n */\n ObjectHelper.values(DataServices).forEach(d => InstanceManager.getInstance(d, this));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Videos Application';\n }\n\n public static get router(): any {\n return VideosAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.VIDEOS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async editVideo(videoId: string): Promise<void> {\n const { EditVideoView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoView videoId={videoId} context='clickview' />);\n }\n\n public async addToWorkbench(objectId: string): Promise<void> {\n const { AddToWorkbenchView } = await import('apps/workbench/views/add-to-workbench/AddToWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddToWorkbenchView\n objectId={objectId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async updateStatus(objectId: string): Promise<void> {\n const { UpdateObjectStatusView } = await import('shared/views/update-object-status/UpdateObjectStatusView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <UpdateObjectStatusView\n objectId={objectId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async managePointsOfInterest(videoId: string): Promise<void> {\n const { ManagePointsOfInterestView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <ManagePointsOfInterestView videoId={videoId} context='clickview' />);\n }\n\n public async editVideoAudiences(videoId: string): Promise<void> {\n const { EditVideoAudiencesView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoAudiencesView videoId={videoId} />);\n }\n\n public async editVideoSubjects(videoId: string): Promise<void> {\n const { EditVideoSubjectsView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoSubjectsView videoId={videoId} />);\n }\n\n public async editVideoCuratedTopics(videoId: string): Promise<void> {\n const { EditVideoCuratedTopicsView } = await import('apps/videos/views/edit-video-curated-topics/EditVideoCuratedTopicsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoCuratedTopicsView videoId={videoId} />);\n }\n\n public async editVideoCurriculums(videoId: string): Promise<void> {\n const { EditVideoCurriculumsView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoCurriculumsView videoId={videoId} />);\n }\n\n public async editVideoAliases(videoId: string): Promise<void> {\n const { EditVideoAliasesView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoAliasesView videoId={videoId} />);\n }\n\n public async editVideoCuration(videoId: string): Promise<void> {\n const { EditVideoCurationView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoCurationView videoId={videoId} />);\n }\n\n public async editVideoPlaylists(videoId: string): Promise<void> {\n const { EditVideoPlaylistsView } = await import('apps/videos/views/edit-video-playlists/EditVideoPlaylistsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoPlaylistsView videoId={videoId} />);\n }\n\n public async editVideoTags(videoId: string): Promise<void> {\n const { EditVideoTagsView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoTagsView videoId={videoId} context='clickview' />);\n }\n\n public async editVideoClips(videoId: string): Promise<void> {\n const { EditVideoClipsView } = await import('apps/videos/views/edit-video-clips/EditVideoClipsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoClipsView videoId={videoId} />);\n }\n\n public async editVideoInteractives(videoId: string): Promise<void> {\n const { EditVideoInteractivesView } = await import('apps/videos/views/edit-video-interactives/EditVideoInteractivesView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoInteractivesView videoId={videoId} />);\n }\n\n public async editVideoResources(videoId: string): Promise<void> {\n const { EditVideoResourcesTabView } = await import('./views/edit-video-resources/EditVideoResourcesTabView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditVideoResourcesTabView videoId={videoId} context='clickview' />\n );\n }\n\n public legacyEditVideo(videoId: string): void {\n Core.LocationUtils.Redirect(`/tools/programlookup/${videoId}`);\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async removeVideoClassification(\n classificationId: string,\n memberId: string,\n memberType: SubjectMemberType\n ): Promise<void> {\n const { RemoveClassificationMemberView } = await import('shared/views/remove-classification-member');\n \n const props = {\n classificationId,\n memberId,\n memberType,\n closePopup: () => this.layout.closePopup()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationMemberView {...props} />);\n }\n\n public async removeVideoPlaylist(videoId: string, playlistId: string): Promise<void> {\n const { RemoveVideoView } = await import('apps/playlists/views');\n \n const props = {\n playlistId,\n videoId,\n closePopup: () => this.layout.closePopup()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveVideoView {...props} />);\n }\n\n public async previewVideo(id: string): Promise<void> {\n const { PreviewVideoView } = await import('apps/videos/views/preview-video/PreviewVideoView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <PreviewVideoView id={id} />);\n }\n\n public async deleteVideo(videoId: string): Promise<void> {\n const { DeleteVideoView } = await import('apps/videos/views/delete-video/DeleteVideoView');\n const props = {\n videoId,\n closePopup: () => this.layout.closePopup()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteVideoView {...props} />);\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { AppChannels, Layouts } from 'shared/constants';\nimport { FullScreenLayoutView, FullScreenLayoutViewOptions } from 'shared/layouts';\n\nimport { PresentationVisualiserQueryParams } from 'apps/visualiser/views/presentation-visualiser/PresentationVisualiserView';\n\nclass VisualiserAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.VISUALISER;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/visualiser/presentations/:id': 'presentation'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [];\n }\n\n // @ts-ignore\n protected get externalRoutes(): ObjectHash {\n return {};\n }\n}\n\nexport class VisualiserApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Visualiser Application';\n }\n\n public static get router(): any {\n return VisualiserAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.VISUALISER;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: true\n }\n };\n }\n\n public async presentation(id: string, queryParams: PresentationVisualiserQueryParams = {}): Promise<void> {\n const { PresentationVisualiserView } = await import('apps/visualiser/views/presentation-visualiser/PresentationVisualiserView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <PresentationVisualiserView id={id} queryParams={queryParams} />\n );\n }\n}\n","import { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\n\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\n\nconst WHITELIST = {\n [Actions.Workbench.ADD_TO_WORKBENCH]: true,\n [Actions.Workbench.HOME]: true\n};\n\nexport function WorkbenchFilter(options: Core.FilterOptions, next: Core.MiddlewareNext<Core.FilterOptions>): void {\n const { appLink } = options;\n\n if (WHITELIST[appLink.action])\n return next(options);\n\n const id = appLink.args?.[0];\n\n if (!id)\n return next(options);\n\n const workingLists = LocalStorageHelper.get(SharedViewModelKeys.CURATOR_WORKING_LISTS);\n\n if (!workingLists?.[id]) {\n next(options);\n Core.AppLinkHelper.trigger({\n application: AppChannels.WORKBENCH,\n action: Actions.Workbench.HOME\n }, { replace: true });\n return;\n }\n\n next(options);\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\n\nimport { Actions, AppChannels, DataServices, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nimport { WorkbenchFilter } from './filters/WorkbenchFilter';\nimport { WorkingListViewModel } from './hooks/useWorkingList';\n\nclass WorkbenchAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.WORKBENCH;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/workbench(/)': 'index',\n 'manage/workbench/:id(/)': 'workbench',\n\n /**\n * Route convention\n * manage/workbench/wizard/{valid_type}/{step_name}\n */\n 'manage/workbench/:id/wizard/videos/review-videos(/)': 'wizardReviewVideos',\n 'manage/workbench/:id/wizard/videos/select-action(/)': 'wizardSelectActionVideos',\n\n 'manage/workbench/:id/wizard/videos/action-details/add-to-backbone-classifications(/)': 'wizardAddToBackboneClassificationsActionDetailsVideos',\n 'manage/workbench/:id/wizard/videos/confirmation/add-to-backbone-classifications(/)': 'wizardAddToBackboneClassificationsConfirmationVideos',\n\n 'manage/workbench/:id/wizard/videos/action-details/add-to-classification(/)': 'wizardAddToClassificationsActionDetailsVideos',\n 'manage/workbench/:id/wizard/videos/confirmation/add-to-classification(/)': 'wizardAddToClassificationsConfirmationVideos',\n\n 'manage/workbench/:id/wizard/videos/action-details/add-to-backbone-audiences(/)': 'wizardAddToBackboneAudiencesActionDetailsVideos',\n 'manage/workbench/:id/wizard/videos/confirmation/add-to-backbone-audiences(/)': 'wizardAddToBackboneAudiencesConfirmationVideos',\n\n 'manage/workbench/:id/wizard/videos/action-details/add-to-audiences(/)': 'wizardAddToAudiencesActionDetailsVideos',\n 'manage/workbench/:id/wizard/videos/confirmation/add-to-audiences(/)': 'wizardAddToAudiencesConfirmationVideos',\n\n 'manage/workbench/:id/wizard/videos/status/polling(/)': 'wizardStatusPollingVideos',\n 'manage/workbench/:id/wizard/videos/status/complete(/)': 'wizardStatusCompleteVideos'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'addToWorkbench',\n 'copyWorkbench',\n 'deleteWorkbench',\n 'createWorkbench',\n 'renameWorkbench'\n ];\n }\n\n // @ts-ignore\n public get filters(): Core.MiddlewareFunctionAsync<Core.FilterOptions>[] {\n return [WorkbenchFilter];\n }\n}\n\nexport class WorkbenchApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n public initialize(): void {\n /**\n * Obtain an instance of all data services used in the application\n * to prevent any instances being destroyed between renders.\n * \n * This is caused by the InstanceManager not being suited\n * to the way React renders function components - Matt.\n */\n ObjectHelper.values(DataServices).forEach(d => InstanceManager.getInstance(d, this));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Workbench Application';\n }\n\n public static get router(): any {\n return WorkbenchAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.WORKBENCH;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public index(): void {\n let workingLists: WorkingListViewModel = LocalStorageHelper.get(SharedViewModelKeys.CURATOR_WORKING_LISTS);\n\n if (!workingLists) {\n // If they don't have any working lists, create 1\n workingLists = {\n 1: {\n id: '1',\n name: 'My workbench',\n objects: {}\n }\n };\n\n LocalStorageHelper.set(SharedViewModelKeys.CURATOR_WORKING_LISTS, workingLists);\n }\n\n // Redirect to the first working list they have\n Core.AppLinkHelper.trigger({\n application: AppChannels.WORKBENCH,\n action: Actions.Workbench.WORKBENCH,\n args: [Object.keys(workingLists)[0]]\n }, { replace: true });\n }\n\n public async workbench(listId: string): Promise<void> {\n const { VideoWorkingSetView } = await import('apps/workbench/views/video-working-set/VideoWorkingSetView');\n \n this.layout.setFullWidthContent(true);\n this.renderLeftNav(listId);\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <VideoWorkingSetView\n listId={listId}\n renderPopup={(popup: JSX.Element) => this.layout.showChildView(LayoutRegions.POPUP, popup)}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addToWorkbench(objectId: string): Promise<void> {\n const { AddToWorkbenchView } = await import('./views/add-to-workbench/AddToWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddToWorkbenchView\n objectId={objectId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async copyWorkbench(listId: string): Promise<void> {\n const { CopyWorkbenchView } = await import('./views/copy-workbench/CopyWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyWorkbenchView\n listId={listId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteWorkbench(listId: string): Promise<void> {\n const { DeleteWorkbenchView } = await import('./views/delete-workbench/DeleteWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteWorkbenchView\n listId={listId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async createWorkbench(): Promise<void> {\n const { CreateWorkbenchView } = await import('./views/create-workbench/CreateWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateWorkbenchView closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async renameWorkbench(listId: string): Promise<void> {\n const { RenameWorkbenchView } = await import('./views/rename-workbench/RenameWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RenameWorkbenchView\n listId={listId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async wizardReviewVideos(listId: string): Promise<void> {\n const { WorkbenchVideoReviewView } = await import('apps/workbench/views/videos/WorkbenchVideoReviewView');\n \n this.layout.setFullWidthContent(false);\n this.layout.hideLeftNav();\n this.layout.showChildView(LayoutRegions.CONTENT, <WorkbenchVideoReviewView listId={listId} />);\n }\n\n public async wizardSelectActionVideos(listId: string): Promise<void> {\n const { WorkbenchVideoSelectActionView } = await import('apps/workbench/views/videos/WorkbenchVideoSelectActionView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <WorkbenchVideoSelectActionView listId={listId} />);\n }\n\n public async wizardAddToBackboneClassificationsActionDetailsVideos(listId: string): Promise<void> {\n const { WorkbenchVideoActionsAddToBackboneClassificationsDetailsView } = await import('apps/workbench/views/videos/action-details/add-to-backbone-classifications/WorkbenchVideoActionsAddToBackboneClassificationsDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchVideoActionsAddToBackboneClassificationsDetailsView listId={listId} />\n );\n }\n\n public async wizardAddToBackboneClassificationsConfirmationVideos(listId: string): Promise<void> {\n const { WorkbenchVideoAddToBackboneClassificationsConfirmationView } = await import('apps/workbench/views/videos/confirmation/add-to-backbone-classifications/WorkbenchVideoAddToBackboneClassificationsConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchVideoAddToBackboneClassificationsConfirmationView listId={listId} />\n );\n }\n\n public async wizardAddToClassificationsActionDetailsVideos(listId: string): Promise<void> {\n const { WorkbenchVideoActionsAddToClassificationDetailsView } = await import('apps/workbench/views/videos/action-details/add-to-classification/WorkbenchVideoActionsAddToClassificationDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchVideoActionsAddToClassificationDetailsView listId={listId} />\n );\n }\n\n public async wizardAddToClassificationsConfirmationVideos(listId: string): Promise<void> {\n const { WorkbenchVideoAddToClassificationConfirmationView } = await import('apps/workbench/views/videos/confirmation/add-to-classification/WorkbenchVideoAddToClassificationConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchVideoAddToClassificationConfirmationView listId={listId} />\n );\n }\n\n public async wizardAddToBackboneAudiencesActionDetailsVideos(listId: string): Promise<void> {\n const { WorkbenchVideoActionsAddToBackboneAudiencesDetailsView } = await import('apps/workbench/views/videos/action-details/add-to-backbone-audiences/WorkbenchVideoActionsAddToBackboneAudiencesDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchVideoActionsAddToBackboneAudiencesDetailsView listId={listId} />\n );\n }\n\n public async wizardAddToBackboneAudiencesConfirmationVideos(listId: string): Promise<void> {\n const { WorkbenchVideoAddToBackboneAudiencesConfirmationView } = await import('apps/workbench/views/videos/confirmation/add-to-backbone-audiences/WorkbenchVideoAddToBackboneAudiencesConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchVideoAddToBackboneAudiencesConfirmationView listId={listId} />\n );\n }\n\n public async wizardAddToAudiencesActionDetailsVideos(listId: string): Promise<void> {\n const { WorkbenchVideoActionsAddToAudiencesDetailsView } = await import('apps/workbench/views/videos/action-details/add-to-audiences/WorkbenchVideoActionsAddToAudiencesDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchVideoActionsAddToAudiencesDetailsView listId={listId} />\n );\n }\n\n public async wizardAddToAudiencesConfirmationVideos(listId: string): Promise<void> {\n const { WorkbenchVideoAddToAudiencesConfirmationView } = await import('apps/workbench/views/videos/confirmation/add-to-audiences/WorkbenchVideoAddToAudiencesConfirmationView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <WorkbenchVideoAddToAudiencesConfirmationView listId={listId} />);\n }\n\n public async wizardStatusPollingVideos(listId: string, params: { jobId: string }): Promise<void> {\n const { WorkbenchActionStatusPollingView } = await import('apps/workbench/views/videos/status/polling/WorkbenchActionStatusPollingView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchActionStatusPollingView listId={listId} jobId={params?.jobId}/>\n );\n }\n\n public async wizardStatusCompleteVideos(listId: string, params: { jobId: string }): Promise<void> {\n const { WorkbenchActionStatusCompleteView } = await import('apps/workbench/views/videos/status/complete/WorkbenchActionStatusCompleteView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchActionStatusCompleteView listId={listId} jobId={params?.jobId} />\n );\n }\n\n private async renderLeftNav(listId: string): Promise<void> {\n const { WorkbenchNav } = await import('apps/workbench/components/workbench-nav/WorkbenchNav');\n \n this.layout.showChildView(LayoutRegions.LEFT_NAV, <WorkbenchNav activeListId={listId} />);\n }\n}\n","import { Core } from 'libs/common/backbone/index';\n\nimport { AssemblyLineApplication } from 'apps/assembly-line/AssemblyLineApplication';\nimport { ClipsApplication } from 'apps/clips/ClipsApplication';\nimport { CompaniesApplication } from 'apps/companies/CompaniesApplication';\nimport { ContentPartnersApplication } from 'apps/content-partners/ContentPartnerApplication';\nimport { CrmStudioApplication } from 'apps/crm-studio/CrmStudioApplication';\nimport { CurriculumsApplication } from 'apps/curriculums/CurriculumsApplication';\nimport { CustomerWizardApplication } from 'apps/customer-wizard/CustomerWizardApplication';\nimport { CvLiveApplication } from 'apps/cv-live/CvLiveApplication';\nimport { CvLivePipelineApplication } from 'apps/cv-live-pipeline/CvLivePipelineApplication';\nimport { DashboardEditorApplication } from 'apps/dashboard-editor/DashboardEditorApplication';\nimport { DefaultApplication } from 'apps/default/CuratorDefaultApplication';\nimport { DiscoverApplication } from 'apps/discover/DiscoverApplication';\nimport { DomainOptionsApplication } from 'apps/domain-options/DomainOptionsApplication';\nimport { InteractivesApplication } from 'apps/interactives/InteractivesApplication';\nimport { MarketingApplication } from 'apps/marketing/MarketingApplication';\nimport { MoviesAndTvApplication } from 'apps/movies-and-tv/MoviesAndTvApplication';\nimport { OrganisationsApplication } from 'apps/organisations/OrganisationsApplication';\nimport { PeopleApplication } from 'apps/people/PeopleApplication';\nimport { PlaylistsApplication } from 'apps/playlists/PlaylistsApplication';\nimport { ReleaseNotesApplication } from 'apps/release-notes/ReleaseNotesApplication';\nimport { SeriesApplication } from 'apps/series/SeriesApplication';\nimport { ShortLinkApplication } from 'apps/short-link/ShortLinkApplication';\nimport { SpecialEventsApplication } from 'apps/special-events/SpecialEventsApplication';\nimport { SubjectsApplication } from 'apps/subjects/SubjectsApplication';\nimport { ThemesApplication } from 'apps/themes/ThemesApplication';\nimport { UsersApplication } from 'apps/users/UsersApplication';\nimport { VideosApplication } from 'apps/videos/VideosApplication';\nimport { VisualiserApplication } from 'apps/visualiser/VisualiserApplication';\nimport { WorkbenchApplication } from 'apps/workbench/WorkbenchApplication';\n\nexport function RegisterApplications(shell: Core.Shell, next: (...args: any) => any) {\n shell\n .registerApplication(UsersApplication)\n .registerApplication(DefaultApplication)\n .registerApplication(CompaniesApplication)\n .registerApplication(ContentPartnersApplication)\n .registerApplication(PeopleApplication)\n .registerApplication(PlaylistsApplication)\n .registerApplication(SeriesApplication)\n .registerApplication(SubjectsApplication)\n .registerApplication(ThemesApplication)\n .registerApplication(VideosApplication)\n .registerApplication(DomainOptionsApplication)\n .registerApplication(ReleaseNotesApplication)\n .registerApplication(CurriculumsApplication)\n .registerApplication(WorkbenchApplication)\n .registerApplication(DashboardEditorApplication)\n .registerApplication(DiscoverApplication)\n .registerApplication(ClipsApplication)\n .registerApplication(InteractivesApplication)\n .registerApplication(AssemblyLineApplication)\n .registerApplication(MoviesAndTvApplication)\n .registerApplication(CvLiveApplication)\n .registerApplication(CvLivePipelineApplication)\n .registerApplication(VisualiserApplication)\n .registerApplication(OrganisationsApplication)\n .registerApplication(CustomerWizardApplication)\n .registerApplication(SpecialEventsApplication)\n .registerApplication(MarketingApplication)\n .registerApplication(CrmStudioApplication)\n .registerApplication(ShortLinkApplication);\n\n next(shell);\n}\n","import { ObjectHash } from 'backbone';\nimport { Store } from 'redux';\nimport * as _ from 'underscore';\n\nimport { Caches } from 'libs/common/backbone/constants/Caches';\nimport { ErrorHelper } from 'libs/common/backbone/core/BaseError';\nimport { BaseService } from 'libs/common/backbone/core/BaseService';\nimport { DevError } from 'libs/common/backbone/errors/DevError';\nimport { DataCache } from 'libs/common/backbone/interfaces/DataCache';\nimport { Actions } from 'libs/common/react/flight';\n\ninterface FifoMemoryCacheOptions {\n size: number;\n\n /**\n * Optional store, which is taken here so that our marionette data services can invalidate flight.\n */\n store?: Store;\n}\n\nexport class FifoMemoryCache extends BaseService implements DataCache {\n private size: number;\n private cache: ObjectHash;\n private cachedkeys: string[];\n private store: Store;\n\n constructor(options: FifoMemoryCacheOptions) {\n super();\n\n this.size = options.size;\n this.cache = {};\n this.cachedkeys = [];\n\n this.store = options.store;\n }\n\n // @ts-ignore\n public get name(): string {\n return Caches.Fifo;\n }\n\n private removeCacheKey(cacheKey: string): void {\n this.cachedkeys = _.without(this.cachedkeys, cacheKey);\n }\n\n public has(cacheKey: string): boolean {\n return !!this.cache[cacheKey];\n }\n\n public get(cacheKey: string): any {\n return this.cache[cacheKey];\n }\n\n public set(cacheKey: string, value: any): void {\n if (!cacheKey || !value) {\n ErrorHelper.throw(new DevError('Must provide a cache key and a value to cache in FifoMemoryCache.'));\n }\n\n /**\n * Calling set on an existing key should move it to the front\n * of the buffer again.\n */\n if (this.has(cacheKey))\n this.removeCacheKey(cacheKey);\n\n this.cachedkeys.push(cacheKey);\n\n this.cache[cacheKey] = value;\n\n if (this.cachedkeys.length > this.size)\n delete this.cache[this.cachedkeys.shift()];\n }\n\n public getOrSet(cacheKey: string, getter: () => any): any {\n if (this.has(cacheKey))\n return this.get(cacheKey);\n\n const value = getter();\n this.set(cacheKey, value);\n return value;\n }\n\n public remove(cacheKey: string): boolean {\n if (!this.has(cacheKey))\n return false;\n\n delete this.cache[cacheKey];\n this.removeCacheKey(cacheKey);\n return true;\n }\n\n public invalidate(\n cacheKeys: string[],\n callback?: (cacheKey: string) => void,\n invalidateFlight: boolean = false\n ): void {\n // Create a an object hash of all the cached keys\n const keyHash: ObjectHash = _.object(this.cachedkeys, this.cachedkeys);\n let invalidationSet: string[] = [];\n\n _.each(cacheKeys, (ck: string) => {\n // Direct match on the key\n if (keyHash[ck])\n invalidationSet.push(ck);\n\n // Find all matches against the given cache key regex\n const regex = new RegExp(ck, 'i');\n const keysToInvalidate = _.filter(keyHash, (k: string) => regex.test(k));\n\n // Merge regex matches with direct matches\n invalidationSet.push(...keysToInvalidate);\n });\n\n if (invalidationSet.length) {\n invalidationSet = _.uniq(invalidationSet);\n\n // Delete all matches and remove cache keys\n _.each(invalidationSet, ik => {\n delete this.cache[ik];\n\n if (_.isFunction(callback))\n callback(ik);\n });\n\n this.cachedkeys = _.without(this.cachedkeys, ...invalidationSet);\n }\n\n if (!this.store || !invalidateFlight)\n return;\n\n this.store.dispatch({\n type: Actions.INVALIDATE,\n keys: cacheKeys\n });\n }\n}\n","import { Core } from 'libs/common/backbone/index';\nimport { FifoMemoryCache } from 'libs/common/backbone/services/caches/FifoMemoryCache';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\n\nexport function RegisterCaches(shell: Core.Shell, next: (...args: any) => any) {\n InstanceManager.registerInstance(FifoMemoryCache, { size: 100, store: shell.store });\n\n next(shell);\n}\n","import { ObjectHash } from 'backbone';\n\ninterface ApiErrorResponse {\n errorCode: string;\n errorSubCode: string;\n requestUrl: string;\n detailedMessage: string;\n requestId: string;\n data: ObjectHash;\n}\n\nexport const DataServiceErrorHelper: ObjectHash = {\n parseErrorMessage(errorMessageMappings: ObjectHash, defaultErrorCode: string, error: ApiErrorResponse): string {\n if (!error || !error.errorCode)\n return errorMessageMappings[defaultErrorCode];\n\n let errorMessageKey = `${error.errorCode}`;\n\n if (error.errorSubCode)\n errorMessageKey += `.${error.errorSubCode}`;\n\n return errorMessageMappings[errorMessageKey] || errorMessageMappings[defaultErrorCode];\n }\n};\n","import { ObjectHash } from 'backbone';\nimport { MnObject } from 'backbone.marionette';\nimport _ from 'underscore';\n\nimport { DataProviders } from 'libs/common/backbone/constants/DataProviders';\nimport { DataServiceErrorType } from 'libs/common/backbone/enums/DataServiceErrorType';\nimport { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { DataProvider, DataProviderResponseOptions } from 'libs/common/backbone/interfaces/DataProvider';\nimport { DataServiceError, DefaultDataServiceError } from 'libs/common/backbone/interfaces/DataServiceError';\nimport { DataServiceErrorHelper } from 'libs/common/backbone/utils/DataServiceErrorHelper';\n\ninterface MiddlewareCallback {\n (data: any, textStatus: any, jqXHR: any): any;\n}\n\ninterface MiddlewareHash {\n [name: string]: MiddlewareCallback;\n}\n\ninterface AjaxDataProviderOptions {\n dataServiceErrorMessageMappings: ObjectHash;\n defaultErrorMessageKey: string;\n cacheRequests?: boolean;\n}\n\nexport class AjaxDataProvider extends MnObject implements DataProvider {\n private successMiddleware: MiddlewareHash;\n private errorMiddleware: MiddlewareHash;\n private dataServiceErrorMessageMappings: ObjectHash;\n private defaultErrorMessageKey: string;\n\n constructor(options?: AjaxDataProviderOptions) {\n super(options);\n\n $.ajaxSetup({\n cache: options.cacheRequests ?? false,\n contentType: 'application/json; charset=utf-8'\n });\n\n this.successMiddleware = {};\n this.errorMiddleware = {};\n this.dataServiceErrorMessageMappings = options.dataServiceErrorMessageMappings;\n this.defaultErrorMessageKey = options.defaultErrorMessageKey;\n }\n\n // @ts-ignore\n public get name(): string {\n return DataProviders.Ajax;\n }\n\n private parseUrl(url: string): HTMLAnchorElement {\n const a = document.createElement('a');\n a.href = url;\n\n if (a.host === '') a.href = a.href;\n\n return a;\n }\n\n private makeHttps(url: string): string {\n const fullUrl = this.parseUrl(url);\n\n if (fullUrl.protocol === 'http:') fullUrl.protocol = 'https:';\n\n return fullUrl.href;\n }\n\n private base<T>(\n resource: string,\n data: T,\n method: string,\n opts: ObjectHash = {}\n ): JQuery.Promise<T> {\n method || (method = HttpVerbs.GET);\n\n const o = _.defaults(opts, { forceHttps: false });\n\n const options: ObjectHash = {\n url: resource,\n method: method,\n type: method\n };\n\n if (data) {\n options.data =\n method === HttpVerbs.POST || method === HttpVerbs.PUT ?\n JSON.stringify(data) :\n data;\n }\n\n if (o.forceHttps) options.url = this.makeHttps(options.url);\n\n if (o.traditional) options.traditional = o.traditional;\n\n /** \n * jQuery.jqXHR does inherit from JQuery.Promise, but the typings in \n * definitelytyped's jQuery are so messed up that casting to any \n * is just easier. \n * \n * I mean there is a JQuery.Promise, JQuery.Promise1, JQuery.Promise2 & JQuery.Promise. Jesus... 🙏\n */\n const promise = $.ajax(options);\n\n if (_.keys(this.successMiddleware).length)\n promise.done(_.values(this.successMiddleware));\n\n if (_.keys(this.errorMiddleware).length)\n promise.fail(_.values(this.errorMiddleware));\n\n return promise as any;\n }\n\n public create<T>(resource: string, obj: T, options: DataProviderResponseOptions): void {\n const { channel, successEvent, errorEvent } = options;\n\n this.base<T>(resource, obj, HttpVerbs.POST)\n .done((data: any, textStatus: any, jqXHR: any) =>\n channel.trigger(successEvent, data, textStatus, jqXHR))\n .fail((jqXHR: any, textStatus: any, errorThrown: any) =>\n channel.trigger(errorEvent, jqXHR, textStatus, errorThrown));\n }\n\n public read<T>(resource: string, options: DataProviderResponseOptions): void {\n const { channel, successEvent, errorEvent } = options;\n\n this.base<T>(resource, null, HttpVerbs.GET)\n .done((data: any, textStatus: any, jqXHR: any) => {\n channel.trigger(successEvent, data, textStatus, jqXHR);\n })\n .fail((jqXHR: any, textStatus: any, errorThrown: any) => {\n channel.trigger(errorEvent, jqXHR, textStatus, errorThrown);\n });\n }\n\n public update<T>(resource: string, obj: T, options: DataProviderResponseOptions): void {\n const { channel, successEvent, errorEvent } = options;\n\n this.base<T>(resource, obj, HttpVerbs.PUT)\n .done((data: any, textStatus: any, jqXHR: any) =>\n channel.trigger(successEvent, data, textStatus, jqXHR))\n .fail((jqXHR: any, textStatus: any, errorThrown: any) =>\n channel.trigger(errorEvent, jqXHR, textStatus, errorThrown));\n }\n\n public delete(resource: string, options: DataProviderResponseOptions): void {\n const { channel, successEvent, errorEvent } = options;\n\n this.base(resource, null, HttpVerbs.DELETE)\n .done((data: any, textStatus: any, jqXHR: any) =>\n channel.trigger(successEvent, data, textStatus, jqXHR))\n .fail((jqXHR: any, textStatus: any, errorThrown: any) =>\n channel.trigger(errorEvent, jqXHR, textStatus, errorThrown));\n }\n\n public useMiddleware(name: string, callback: MiddlewareCallback): void {\n if (this.successMiddleware[name])\n return;\n\n this.successMiddleware[name] = callback;\n }\n\n public useErrorMiddleware(name: string, callback: MiddlewareCallback): void {\n if (this.errorMiddleware[name])\n return;\n\n this.errorMiddleware[name] = callback;\n }\n\n public parseError(jqXHR: JQuery.jqXHR): DataServiceError {\n const response = jqXHR.responseJSON;\n\n const error = DefaultDataServiceError;\n\n error.code = jqXHR.status;\n\n error.message = DataServiceErrorHelper.parseErrorMessage(\n this.dataServiceErrorMessageMappings,\n this.defaultErrorMessageKey,\n response\n );\n\n switch (jqXHR.status) {\n case 400:\n error.type = DataServiceErrorType.BadRequest;\n break;\n case 401:\n error.type = DataServiceErrorType.Unauthorized;\n break;\n case 403:\n error.type = DataServiceErrorType.Forbidden;\n break;\n case 404:\n error.type = DataServiceErrorType.NotFound;\n break;\n case 500:\n error.type = DataServiceErrorType.InternalServer;\n break;\n }\n\n return error;\n }\n}\n","import { Core } from 'libs/common/backbone/index';\nimport { AjaxDataProvider } from 'libs/common/backbone/services/data-providers/AjaxDataProvider';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\n\nconst DefaultDataServiceErrorCode = 'generic';\n\nconst DataServiceErrorMessageMappings = {\n generic: 'Something went wrong'\n};\n\nexport function RegisterDataProviders(shell: Core.Shell, next: (...args: any) => any) {\n InstanceManager.registerInstance(AjaxDataProvider, {\n dataServiceErrorMessageMappings: DataServiceErrorMessageMappings,\n defaultErrorMessageKey: DefaultDataServiceErrorCode\n });\n\n next(shell);\n}\n","export const SharedDataPrefixes = {\n SUBJECT_PLAYLISTS: 'subject:playlists',\n CURRENT_USER: 'current:user',\n WORKSPACE: 'workspace',\n CONFIG: 'config',\n LOCALE: 'locale',\n PHRASES: 'phrases',\n SEARCH_FILTERS: 'search:filters',\n SERIES: 'series',\n NOTIFICATIONS: 'notifications',\n SUGGEST_EDIT: 'suggest:edit'\n};\n","import { ObjectHash } from 'backbone';\nimport * as _ from 'underscore';\n\nimport { BaseDataService } from 'libs/common/backbone/services/BaseDataService';\n\nimport { BootstrapKeys } from 'libs/shared/constants/BootstrapKeys';\nimport { CacheDurations } from 'libs/shared/constants/CacheDurations';\nimport { SharedDataPrefixes } from 'libs/shared/constants/DataPrefixes';\nimport { SharedDataChannels } from 'libs/shared/constants/RadioChannels';\nimport { SharedDataServices } from 'libs/shared/constants/SharedServices';\nimport { LanguageConfig } from 'libs/shared/interfaces';\n\nexport class LanguageDataService extends BaseDataService {\n // @ts-ignore\n public get name(): string {\n return SharedDataServices.Language;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return SharedDataChannels.LANGUAGE;\n }\n\n public getLanguageConfig(callback?: (languageConfig: LanguageConfig) => void): void {\n const languageConfig: LanguageConfig = { locale: '', phrases: null };\n\n this.get<string>({\n resource: '/api/locale',\n eventPrefix: SharedDataPrefixes.LOCALE,\n expiryTime: CacheDurations.STANDARD,\n bootstrapName: BootstrapKeys.LOCALE,\n callback: (locale: string) => {\n languageConfig.locale = locale;\n\n if (languageConfig.phrases && _.isFunction(callback))\n callback(languageConfig);\n }\n });\n\n this.get<ObjectHash>({\n resource: '/api/phrases',\n eventPrefix: SharedDataPrefixes.PHRASES,\n expiryTime: CacheDurations.STANDARD,\n bootstrapName: BootstrapKeys.PHRASES,\n callback: (phrases: any) => {\n languageConfig.phrases = phrases;\n\n if (languageConfig.locale && _.isFunction(callback))\n callback(languageConfig);\n }\n });\n }\n}\n","import { Core } from 'libs/common/backbone/index';\nimport { AlertType, BaseAlertService } from 'libs/common/backbone/services/BaseAlertService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LanguageDataService } from 'libs/shared/services/LanguageDataService';\n\nimport { SubjectDataService } from 'shared/services';\n\nconst DefaultAlertHeading = {\n Success: 'Success!',\n Warning: 'Whoops...',\n Fail: 'Oops...',\n Info: 'FYI'\n};\nexport function RegisterDataServices(shell: Core.Shell, next: (...args: any) => any) {\n const alertService = new BaseAlertService({\n maxAlerts: 3,\n defaultSuccessAlert: { heading: DefaultAlertHeading.Success, type: AlertType.Success },\n defaultErrorAlert: { heading: DefaultAlertHeading.Fail, type: AlertType.Fail },\n alertViewCtor: AlertList\n });\n\n InstanceManager\n .registerSingleton(alertService);\n\n const basicDataServiceConfig = {\n cache: 'FifoMemoryCache',\n dataProvider: 'AjaxDataProvider',\n defaultErrorHandler: alertService.error({ useXHR: true }),\n alertService\n };\n\n InstanceManager\n .registerDataService(LanguageDataService, basicDataServiceConfig)\n .registerDataService(SubjectDataService, basicDataServiceConfig);\n\n next(shell);\n}\n","import React from 'react';\nimport { createRoot, Root } from 'react-dom/client';\nimport { Provider } from 'react-redux';\nimport { RegionViewOptions } from 'backbone.marionette';\n\nimport { BaseCollectionView } from 'libs/common/backbone/core/BaseCollectionView';\nimport { BaseLayoutView, BaseLayoutViewOptions } from 'libs/common/backbone/core/BaseLayoutView';\nimport { BaseComponent, BaseView } from 'libs/common/backbone/core/BaseView';\n\ninterface RegionRoots {\n [regionName: string]: Root;\n}\n\ntype Component = JSX.Element | BaseComponent | BaseView | BaseCollectionView;\n\nexport interface ReactLayoutViewOptions extends BaseLayoutViewOptions {\n alertRegion?: string;\n}\n\nexport class ReactLayoutView extends BaseLayoutView {\n declare protected options: ReactLayoutViewOptions;\n private regionRoots: RegionRoots = {};\n\n protected isReactComponent(component: Component): component is JSX.Element {\n return React && React.isValidElement(component);\n }\n\n private isReactComponentRendered: Record<string, boolean> = {};\n public showChildView(\n regionName: string,\n component: Component,\n options?: RegionViewOptions\n ): void {\n if (this.isReactComponent(component)) {\n this.showChildReactComponent(regionName, component);\n this.isReactComponentRendered[regionName] = true;\n return;\n }\n\n /**\n * If we use the same layout to render both react and marionette views.\n * We must unmount the react root before rendering in a backbone view.\n */\n if (this.isReactComponentRendered[regionName])\n this.unmountRoot(regionName);\n\n super.showChildView(regionName, component, options);\n this.isReactComponentRendered[regionName] = false;\n }\n\n private showChildReactComponent(regionName: string, component: JSX.Element): void {\n if (this.isAttached()) {\n this.renderChildReactComponent(regionName, component);\n return;\n }\n\n this.listenToOnce(this, 'attach', () => this.renderChildReactComponent(regionName, component));\n }\n\n private renderChildReactComponent(regionName: string, component: JSX.Element): void {\n const region = this.getRegion(regionName);\n\n const el = this.$el.find(region.el);\n\n if (!el || !el.length)\n return;\n\n /**\n * Trigger 'before:show' on region.\n */\n region.trigger('before:show');\n\n if (!this.regionRoots[regionName])\n this.regionRoots[regionName] = createRoot(el[0]);\n\n this.regionRoots[regionName].render(component);\n\n // React 18 removed the callback from the `render` function, so this need to be done this way now\n // https://github.com/reactwg/react-18/discussions/5#discussioncomment-798304\n window.setTimeout(() => region.trigger('show'), 0);\n\n this.listenToOnce(this, `unmount:${regionName}`, () => this.unmountRoot(regionName));\n this.listenToOnce(this, 'before:destroy', () => this.unmountRoot(regionName));\n }\n\n private unmountRoot(regionName: string): void {\n if (!this.regionRoots[regionName])\n return;\n\n this.regionRoots[regionName].unmount();\n delete this.regionRoots[regionName];\n }\n\n protected wrapWithStore(child: React.ReactElement): React.ReactElement {\n return (\n <Provider store={this.options.store}>\n {child}\n </Provider>\n );\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { ReactLayoutView, ReactLayoutViewOptions } from 'libs/common/react/core/ReactLayoutView';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { LayoutComponent, LayoutComponentProps } from 'shared/layouts';\n\nimport styles from './curator-layout.module.scss';\n\nexport interface CuratorLayoutViewOptions extends ReactLayoutViewOptions {\n getTopNavView?: (currentAppLink: Core.AppLink) => React.ReactElement;\n fullWidthContent?: boolean;\n}\n\nexport class CuratorLayoutView extends ReactLayoutView {\n protected options: CuratorLayoutViewOptions;\n protected childComponents: {[index: string]: React.ReactNode } = {};\n\n constructor(options?: CuratorLayoutViewOptions) {\n super(options);\n }\n\n // @ts-ignore\n public get title(): boolean {\n return false;\n }\n\n // @ts-ignore\n public get name(): string {\n return 'CuratorLayoutView';\n }\n\n // @ts-ignore\n public get template(): any {\n return () => '<div id=\"dialog-region\"></div><div class=\"layout-region\"></div>';\n }\n\n // @ts-ignore\n public get className(): string {\n return `container-fluid ${styles.curatorLayout}`;\n }\n\n public regions(): ObjectHash {\n return {\n layout: '.layout-region'\n };\n }\n\n public static getCacheKey(options: CuratorLayoutViewOptions): string {\n let ck = `${this.name}`;\n\n const optionKeys: string[] = [];\n\n Object.keys(options).forEach((key: keyof CuratorLayoutViewOptions) => {\n optionKeys.push(`${key}:${options[key]}`);\n });\n\n if (optionKeys.length) {\n optionKeys.sort();\n ck += `:${optionKeys.join(':')}`;\n }\n\n return ck;\n }\n\n private getChildComponents(): LayoutComponentProps {\n return {\n topNav: {\n component: this.childComponents[LayoutRegions.TOP_NAV],\n className: styles.topNavRegion\n },\n leftNav: {\n component: this.childComponents[LayoutRegions.LEFT_NAV],\n className: `py-3 ${styles.leftNavRegion}`\n },\n content: {\n component: this.childComponents[LayoutRegions.CONTENT],\n className: `position-relative container p-3 ${this.options.fullWidthContent ? 'mw-100' : ''}`\n },\n popup: {\n component: this.childComponents[LayoutRegions.POPUP]\n },\n alert: {\n component: this.childComponents[LayoutRegions.ALERT]\n },\n hidden: {\n component: this.childComponents[LayoutRegions.HIDDEN]\n }\n };\n }\n\n public unsetRegion(region: string): void {\n delete this.childComponents[region];\n\n this.renderLayout();\n }\n\n public renderTopNav(): void {\n if (!FunctionHelper.isFunction(this.options.getTopNavView))\n return;\n\n this.childComponents[LayoutRegions.TOP_NAV] = this.options.getTopNavView(Core.AppLinkHelper.getCurrentAppLink());\n }\n\n public hideLeftNav(): void {\n this.unsetRegion(LayoutRegions.LEFT_NAV);\n }\n\n public closePopup(): void {\n this.unsetRegion(LayoutRegions.POPUP);\n }\n\n public showChildView(region: string, component: React.ReactElement): void {\n this.childComponents[region] = component;\n\n this.renderTopNav();\n this.renderLayout();\n }\n\n public renderLayout(): void {\n super.showChildView('layout', this.wrapWithStore(<LayoutComponent {...this.getChildComponents()} />));\n }\n\n public setFullWidthContent(value: boolean) {\n this.options.fullWidthContent = value;\n }\n}\n","import { useEffect } from 'react';\n\n// This means the a11y outline styles will only be applied to elements when focused by tabbing. Not by clicking.\n// This is so we can preserve a11y when it matters (when users are tabbing) but preserve aesthetics.\n\nexport function useTabbingListener(): void {\n function handleFirstTab(e: KeyboardEvent): void {\n if (e.key === 'Tab') {\n // This class is implemented in `_outline.scss`\n document.body.classList.add('user-is-tabbing');\n\n window.removeEventListener('keydown', handleFirstTab);\n window.addEventListener('mousedown', handleMouseDownOnce);\n }\n }\n\n function handleMouseDownOnce() {\n document.body.classList.remove('user-is-tabbing');\n\n window.removeEventListener('mousedown', handleMouseDownOnce);\n window.addEventListener('keydown', handleFirstTab);\n }\n\n useEffect(() => {\n window.addEventListener('keydown', handleFirstTab);\n return () => window.removeEventListener('keydown', handleFirstTab);\n }, []);\n}\n","import React from 'react';\nimport { Provider } from 'react-redux';\nimport { Store } from 'redux';\n\nimport { PageMetadataContextProvider } from 'libs/common/react/context/PageMetadataContext';\n\nimport { BreakpointsContextProvider } from 'libs/shared/context/BreakpointsContext';\nimport { ImageStorageContextProvider } from 'libs/shared/context/ImageStorageContext';\nimport { VideoPreviewContextProvider } from 'libs/shared/context/VideoPreviewContext';\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { useListenOn } from 'libs/shared/hooks/UseListenOn';\nimport { useTabbingListener } from 'libs/shared/hooks/useTabbingListener';\nimport { LayoutHelper } from 'libs/shared/utils/LayoutHelper';\n\nimport { RegionFlag } from 'shared/components/region-flag/RegionFlag';\nimport { CuratorPlayerProvider } from 'shared/context/CuratorPlayerContext';\n\nimport styles from './full-screen-layout.module.scss';\n\nexport interface FullScreenLayoutComponentProps {\n store: Store;\n contentChild?: React.ReactNode;\n popupChild?: React.ReactNode;\n alertChild?: React.ReactNode;\n pictureInPictureChild?: React.ReactNode;\n showCustomHeader: boolean;\n}\n\nfunction FullScreenLayoutComponent(props: FullScreenLayoutComponentProps): JSX.Element {\n const { contentChild, popupChild, alertChild, pictureInPictureChild } = props;\n\n useTabbingListener();\n\n const forceUpdate = useForceUpdate();\n useListenOn(LayoutHelper, 'change:lockContentWidth', forceUpdate);\n const lockContentWidth = LayoutHelper.shouldLockContentWidth();\n\n /**\n * Because we set the overflowY to scroll in `TeacherLayoutComponent.tsx`\n * we need to make sure we set it back to auto here, in case we ever decide\n * to link between the two layouts. - Sha\n */\n React.useEffect(() => {\n document.body.style.overflowX = lockContentWidth ? 'auto' : 'hidden';\n\n return () => {\n document.body.style.overflowX = 'auto';\n };\n }, [lockContentWidth]);\n\n return (\n <div className={lockContentWidth ? styles.lockedWidth : ''}>\n {!props.showCustomHeader && (\n <div id='top-black-bar'>\n <div className='top-container h-100 d-flex justify-content-end w-100 align-items-center px-2'>\n <div className='name-sign-out me-5'>\n <div className='dropdown'>\n <div className='sign-out-dropdown-toggle' id='dropDownMenu' data-toggle='dropdown' data-bs-toggle='dropdown' aria-haspopup='true' aria-expanded='true'>\n <span className='top-nav-prompt'>Hello, {ClickView.User.name}</span>\n </div>\n <ul className='dropdown-menu dropdown-menu-right' aria-labelledby='dropdownMenu'>\n <li><a href='/signout'>Logout</a></li>\n </ul>\n </div>\n </div>\n <RegionFlag countryCode={ClickView.User.countryCode} tooltip={`You are signed in to ${ClickView.User.countryCode}`} />\n </div>\n </div>\n )}\n {contentChild}\n {popupChild}\n {alertChild && <div className={styles.alertContainer}>{alertChild}</div>}\n {pictureInPictureChild}\n </div>\n );\n}\n\nfunction WrapLayoutWithProviders(props: FullScreenLayoutComponentProps): JSX.Element {\n const { store } = props;\n\n return (\n <Provider store={store}>\n <ImageStorageContextProvider>\n <PageMetadataContextProvider>\n <BreakpointsContextProvider>\n <VideoPreviewContextProvider>\n <CuratorPlayerProvider>\n <FullScreenLayoutComponent {...props} />\n </CuratorPlayerProvider>\n </VideoPreviewContextProvider>\n </BreakpointsContextProvider>\n </PageMetadataContextProvider>\n </ImageStorageContextProvider>\n </Provider>\n );\n}\n\nexport { WrapLayoutWithProviders as FullScreenLayoutComponent };\n","import React from 'react';\n\nimport { ReactLayoutView, ReactLayoutViewOptions } from 'libs/common/react/core/ReactLayoutView';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { Layouts } from 'shared/constants';\nimport { FullScreenLayoutComponent, FullScreenLayoutComponentProps } from 'shared/layouts/full-screen-layout/FullScreenLayoutComponent';\n\nexport interface FullScreenLayoutViewOptions extends ReactLayoutViewOptions {\n showCustomHeader?: boolean;\n}\n\nexport class FullScreenLayoutView extends ReactLayoutView {\n protected options: FullScreenLayoutViewOptions;\n protected childComponents: {[index: string]: React.ReactNode } = {};\n\n private topBar: HTMLElement | null;\n private nav: HTMLElement | null;\n private subnav: HTMLElement | null;\n\n public initialize(): void {\n this.topBar = document.getElementById('top-black-bar');\n this.nav = document.getElementById('white-bar-nav');\n this.subnav = document.getElementById('white-bar-subnav');\n\n this.updateNavVisibility(true);\n }\n\n // @ts-ignore\n public get title(): boolean {\n return false;\n }\n\n // @ts-ignore\n public get name(): string {\n return 'FullScreenLayoutView';\n }\n\n // @ts-ignore\n public get template(): any {\n return () => '<div id=\"dialog-region\"></div><div class=\"layout-region\"></div>';\n }\n\n public static getCacheKey(): string {\n return Layouts.FULL_SCREEN_LAYOUT;\n }\n\n public regions(): HashObject {\n return {\n layout: {\n el: '.layout-region',\n replaceEl: true\n }\n };\n }\n\n protected getChildComponents(): FullScreenLayoutComponentProps {\n return {\n contentChild: this.childComponents[LayoutRegions.CONTENT],\n popupChild: this.childComponents[LayoutRegions.POPUP],\n alertChild: this.childComponents[LayoutRegions.ALERT],\n pictureInPictureChild: this.childComponents[LayoutRegions.PICTURE_IN_PICTURE],\n store: this.options.store,\n showCustomHeader: this.options.showCustomHeader\n };\n }\n\n private updateNavVisibility(hide: boolean): void {\n if (hide) {\n this.topBar?.classList?.add('d-none');\n this.nav?.classList?.add('d-none');\n this.subnav?.classList?.add('d-none');\n\n return;\n }\n\n this.topBar?.classList?.remove('d-none');\n this.nav?.classList?.remove('d-none');\n this.subnav?.classList?.remove('d-none');\n }\n\n protected unsetRegion(region: string): void {\n delete this.childComponents[region];\n\n this.renderLayout();\n }\n\n public closePopup(): void {\n this.unsetRegion(LayoutRegions.POPUP);\n }\n\n public closePictureInPicture(): void {\n this.unsetRegion(LayoutRegions.PICTURE_IN_PICTURE);\n }\n\n public showChildView(region: string, component: React.ReactElement): void {\n this.childComponents[region] = component;\n\n this.renderLayout();\n }\n\n public renderLayout(): void {\n super.showChildView('layout', <FullScreenLayoutComponent {...this.getChildComponents()} />);\n }\n\n public onDestroy(): void {\n this.updateNavVisibility(false);\n }\n}\n","import * as React from 'react';\n\nimport { PageMetadataContextProvider } from 'libs/common/react/context/PageMetadataContext';\n\nimport { BreakpointsContextProvider } from 'libs/shared/context/BreakpointsContext';\nimport { ImageStorageContextProvider } from 'libs/shared/context/ImageStorageContext';\nimport { useTabbingListener } from 'libs/shared/hooks/useTabbingListener';\n\ninterface LayoutRegionComponentProps {\n className?: string;\n}\n\nconst LayoutRegionComponent = (props: React.PropsWithChildren<LayoutRegionComponentProps>): React.ReactElement => {\n const { className, children } = props;\n\n return (\n <div className={className}>\n {children}\n </div>\n );\n};\n\nconst getClassName = (baseClassName: string, additionalClassNames?: string) =>\n `${baseClassName}${additionalClassNames ? ` ${additionalClassNames}` : ''}`;\n\ninterface LayoutItem {\n component: React.ReactNode;\n className?: string;\n}\n\nexport interface LayoutComponentProps {\n topNav?: LayoutItem;\n leftNav?: LayoutItem;\n content?: LayoutItem;\n popup?: LayoutItem;\n alert?: LayoutItem;\n hidden?: LayoutItem;\n}\n\nconst LayoutComponent = (props: LayoutComponentProps): React.ReactElement => {\n const { topNav, leftNav, content, popup, alert, hidden } = props;\n \n useTabbingListener();\n\n return (\n <>\n <div className='position-relative'>\n {!!topNav.component &&\n <LayoutRegionComponent className={getClassName('top-nav-region', topNav.className)}>\n {topNav.component}\n </LayoutRegionComponent>\n }\n {!!leftNav.component &&\n <LayoutRegionComponent className={getClassName('left-nav-region', leftNav.className)}>\n {leftNav.component}\n </LayoutRegionComponent>\n }\n {!!content.component &&\n <div className='content-container'>\n <LayoutRegionComponent className={getClassName('content-region', content.className)}>\n {content.component}\n </LayoutRegionComponent>\n </div>\n }\n </div>\n {!!popup.component &&\n <LayoutRegionComponent className={getClassName('popup-region', popup.className)}>\n {popup.component}\n </LayoutRegionComponent>\n }\n {!!alert.component &&\n <LayoutRegionComponent className={getClassName('alert-region', alert.className)}>\n {alert.component}\n </LayoutRegionComponent>\n }\n {!!hidden.component &&\n <LayoutRegionComponent className={getClassName('hidden-region', 'd-none')}>\n {hidden.component}\n </LayoutRegionComponent>\n }\n </>\n );\n};\n\nconst LayoutComponentWithProvider = (props: LayoutComponentProps): React.ReactElement => {\n return (\n <PageMetadataContextProvider>\n <BreakpointsContextProvider>\n <ImageStorageContextProvider>\n <LayoutComponent {...props} />\n </ImageStorageContextProvider>\n </BreakpointsContextProvider>\n </PageMetadataContextProvider>\n );\n};\n\nexport { LayoutComponentWithProvider as LayoutComponent };\n","import { Core } from 'libs/common/backbone/index';\n\nimport { Layouts } from 'shared/constants';\nimport { CuratorLayoutView, FullScreenLayoutView } from 'shared/layouts';\n\nexport function RegisterLayouts(shell: Core.Shell, next: (...args: any) => any) {\n shell.registerLayout(Layouts.CURATOR_LAYOUT, CuratorLayoutView);\n shell.registerLayout(Layouts.FULL_SCREEN_LAYOUT, FullScreenLayoutView);\n\n next(shell);\n}\n","import { Core } from 'libs/common/backbone/index';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { BaseVideoUploadService, LearningResourceUploadService, SubtitleUploadService } from 'libs/shared/apps/upload/services/UploadService';\nimport { LanguageDataService } from 'libs/shared/services/LanguageDataService';\n\nimport { DataServices } from 'shared/constants';\n\nexport async function RegisterServices(shell: Core.Shell, next: (...args: any) => any) {\n InstanceManager.registerInstance(SubtitleUploadService, { store: shell.store });\n InstanceManager.registerInstance(LearningResourceUploadService, { store: shell.store });\n InstanceManager.registerInstance(BaseVideoUploadService, { store: shell.store });\n\n if (__ENVIRONMENT__ === 'development') {\n const phrases = (await import('virtual:i18n-data')).default;\n\n LanguageService.setConfig({\n locale: 'en',\n phrases\n });\n next(shell);\n } else {\n const languageDataService = InstanceManager.getInstance<LanguageDataService>(DataServices.LANGUAGE);\n\n languageDataService.getLanguageConfig(config => {\n LanguageService.setConfig(config);\n InstanceManager.releaseInstance(DataServices.LANGUAGE);\n\n next(shell);\n });\n }\n}\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (typeof module !== 'undefined') {\n root = module;\n} else {\n root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","import $$observable from 'symbol-observable';\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error('It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function.');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error('Expected the enhancer to be a function.');\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error('Expected the reducer to be a function.');\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error('You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Expected the listener to be a function.');\n }\n\n if (isDispatching) {\n throw new Error('You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error('You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n }\n\n if (isDispatching) {\n throw new Error('Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error('Expected the nextReducer to be a function.');\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new TypeError('Expected the observer to be an object.');\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUndefinedStateErrorMessage(key, action) {\n var actionType = action && action.type;\n var actionDescription = actionType && \"action \\\"\" + String(actionType) + \"\\\"\" || 'an action';\n return \"Given \" + actionDescription + \", reducer \\\"\" + key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\";\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle \" + ActionTypes.INIT + \" or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var errorMessage = getUndefinedStateErrorMessage(_key, action);\n throw new Error(errorMessage);\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(\"bindActionCreators expected an object or a function, instead received \" + (actionCreators === null ? 'null' : typeof actionCreators) + \". \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n keys.push.apply(keys, Object.getOwnPropertySymbols(object));\n }\n\n if (enumerableOnly) keys = keys.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error('Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread2({}, store, {\n dispatch: _dispatch\n });\n };\n };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n warning('You are currently using minified code outside of NODE_ENV === \"production\". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore };\n","\"use strict\";\n\nvar compose = require('redux').compose;\n\nexports.__esModule = true;\nexports.composeWithDevTools = (\n typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?\n window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ :\n function() {\n if (arguments.length === 0) return undefined;\n if (typeof arguments[0] === 'object') return compose;\n return compose.apply(null, arguments);\n }\n);\n\nexports.devToolsEnhancer = (\n typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ ?\n window.__REDUX_DEVTOOLS_EXTENSION__ :\n function() { return function(noop) { return noop; } }\n);\n","import { AnyAction, Dispatch } from 'redux';\n\nimport { BaseDataService } from 'libs/common/backbone/services/BaseDataService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { Flight } from 'libs/common/flight';\n\nimport { Action, Actions } from '../flight';\n\ntype ApplicationMiddlewareResponse = (next: Dispatch<AnyAction>) => (action: Action) => void;\n\n/**\n * This middleware is used to bridge invalidation of requests between old marionette data services\n * and new flight requests. This bridge can be utilised by setting the invalidation keys required and then:\n * - Setting invalidateFlight to true in a dataservice request\n * - Or update the type of your Flight request to Flight.FlightDataServiceBridgeRequest\n * and then passing the name of our dataservices in the dataServices property in a flight request\n */\nexport function flightDataServiceBridgeMiddleware(): ApplicationMiddlewareResponse {\n return (next: Dispatch<AnyAction>) => (action: Action) => {\n if (action.type !== Actions.INVALIDATE) {\n next(action);\n return;\n }\n \n const request = action.request as Flight.FlightDataServiceBridgeRequest;\n\n if (!request?.dataServices?.length || !request?.invalidationKeys) {\n next(action);\n return;\n }\n\n const invalidationKeys = Array.isArray(request.invalidationKeys) ?\n request.invalidationKeys :\n [request.invalidationKeys];\n\n request.dataServices.forEach(name => {\n const dataService = InstanceManager.getInstance<BaseDataService>(name);\n\n if (!dataService)\n return;\n\n dataService.invalidateCache(invalidationKeys);\n InstanceManager.releaseInstance(name);\n });\n\n next(action);\n };\n}\n","export const HttpHeaders = {\n X_APP_VERSION: 'X-App-Version'\n};\n","import { HttpHeaders } from 'libs/common/react/constants/HttpHeaders';\nimport { Actions } from 'libs/common/react/flight/constants/Actions';\nimport { Action, ResponseAction } from 'libs/common/react/flight/interfaces';\nimport { ApplicationData } from 'libs/common/react/interfaces/ApplicationData';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nfunction ApiResponseReducer(state: ApplicationData, action: ResponseAction): ApplicationData {\n if (!ObjectHelper.isObject(action.xhr))\n return state;\n\n const version = action.xhr.getResponseHeader(HttpHeaders.X_APP_VERSION);\n\n if (version)\n return { ...state, version };\n\n // OLD:VERSION:TESTING Uncomment below and comment above\n // search for 'OLD:VERSION:TESTING' to find the code that needs to be uncommented\n // if (version)\n // return { ...state, version: version + Math.random() };\n\n return state;\n}\n\nconst defaultState: ApplicationData = {\n version: null\n};\n\nexport function ApplicationDataReducer(state: ApplicationData = defaultState, action: Action): ApplicationData {\n switch (action.type) {\n case Actions.API_RESPONSE:\n return ApiResponseReducer(state, action as ResponseAction);\n }\n\n return state;\n}\n","import { ViewModelActions } from 'libs/common/react/constants/ViewModelActions';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { ViewModelAction } from 'libs/common/react/interfaces/ViewModelAction';\n\nfunction UpdateViewModel(state: HashObject, action: ViewModelAction): HashObject {\n // If setState has been called with key-value arguments\n if (typeof action.payload.dataOrKey === 'string' && action.payload.keyData !== undefined) {\n return {\n ...state,\n [action.payload.viewModelKey]: {\n ...state[action.payload.viewModelKey],\n [action.payload.dataOrKey]: action.payload.keyData\n }\n };\n }\n\n if (typeof action.payload.dataOrKey === 'object' && Array.isArray(action.payload.dataOrKey)) {\n return {\n ...state,\n [action.payload.viewModelKey]: action.payload.dataOrKey\n };\n }\n\n return {\n ...state,\n [action.payload.viewModelKey]: action.payload.dataOrKey\n };\n}\n\nexport function ViewModelReducer(state: HashObject = {}, action: ViewModelAction): HashObject {\n switch (action.type) {\n case ViewModelActions.UPDATE:\n return UpdateViewModel(state, action);\n }\n\n return state;\n}\n","import { applyMiddleware, combineReducers, createStore, Store } from 'redux';\nimport { composeWithDevTools } from 'redux-devtools-extension';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { HttpRequestOptions } from 'libs/common/react/flight';\nimport { Flight } from 'libs/common/react/index';\nimport { flightDataServiceBridgeMiddleware } from 'libs/common/react/middleware/FlightDataServiceBridgeMiddleware';\nimport { ApplicationDataReducer } from 'libs/common/react/reducers/ApplicationDataReducer';\nimport { ViewModelReducer } from 'libs/common/react/reducers/ViewModelReducer';\n\nimport { CacheDurations } from 'libs/shared/constants/CacheDurations';\n\nexport async function RegisterStore(shell: Core.Shell, next: (...args: any) => any) {\n const reducer = combineReducers({\n flightData: Flight.FlightReducer,\n viewModelData: ViewModelReducer,\n applicationData: ApplicationDataReducer\n });\n\n function fetchData(options: HttpRequestOptions): void {\n const middleware = new Core.Middleware<HttpRequestOptions>();\n\n middleware.useAsync((options, next) => {\n if (!options.resource.startsWith('{gateway}')) {\n next(options);\n return;\n }\n\n next({\n ...options,\n resource: UrlHelper.safeUrlConcat('/api/gateway', options.resource.split('{gateway}/')[1])\n });\n });\n\n middleware.goAsync(options, (options: HttpRequestOptions) => {\n Flight.ajaxRequest(options);\n });\n }\n\n const flightMiddleware = Flight.createMiddleware({\n fetchData,\n defaultCacheDuration: CacheDurations.STANDARD\n });\n\n async function registerStore(store: Store): Promise<void> {\n try {\n shell.registerStore(store);\n } finally {\n /**\n * Only move to the next initialisation step once we've\n * fetched and stored the current user and permissions.\n */\n next(shell);\n }\n }\n\n // In development, we want to add the redux devtools middleware so that we can use the browser extension for debugging\n if (__ENVIRONMENT__ === 'development') {\n const devStore = createStore(\n reducer,\n composeWithDevTools(\n applyMiddleware(\n flightMiddleware,\n flightDataServiceBridgeMiddleware\n )\n )\n );\n\n await registerStore(devStore);\n return;\n }\n\n // Production only\n const prodStore = createStore(\n reducer,\n applyMiddleware(\n flightMiddleware,\n flightDataServiceBridgeMiddleware\n )\n );\n await registerStore(prodStore);\n}\n","import Backbone from 'backbone';\n\nimport { CommonServices } from 'libs/common/backbone/constants/CommonServices';\nimport { DevError } from 'libs/common/backbone/errors/DevError';\nimport { Core } from 'libs/common/backbone/index';\nimport { AlertType, BaseAlertService } from 'libs/common/backbone/services/BaseAlertService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\n\nimport { AlertError } from 'libs/shared/errors/primitives/AlertError';\nimport { DialogError } from 'libs/shared/errors/primitives/DialogError';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\nfunction handleDialogError(error: DialogError) {\n const channel = Backbone.Radio.channel('error:view');\n channel.reply('current:error', () => error);\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.DEFAULT,\n action: Actions.Default.DIALOG_ERROR\n });\n}\n\nfunction handleAlertError(error: DialogError) {\n const alertService = InstanceManager.getInstance<BaseAlertService>(CommonServices.ALERT);\n\n alertService.createAlert({ heading: 'Oops', type: AlertType.Fail, message: error.message });\n}\n\nfunction handleDevError(error: DevError) {\n const channel = Backbone.Radio.channel('error:view');\n channel.reply('current:error', () => error);\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.DEFAULT,\n action: Actions.Default.DEV_ERROR\n });\n}\n\nexport function RegisterErrorHandlers(shell: Core.Shell, next: (...args: any) => any) {\n shell\n .registerErrorHandler(DialogError, handleDialogError)\n .registerErrorHandler(AlertError, handleAlertError);\n\n if (__ENVIRONMENT__ === 'development') {\n shell\n .registerErrorHandler(Core.Error, handleDevError)\n .registerErrorHandler(DevError, handleDevError);\n }\n\n next(shell);\n}\n\n","import { Core } from 'libs/common/backbone/index';\n\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nexport async function RegisterArticleHelper(shell: Core.Shell, next: (...args: any) => any) {\n try {\n ArticleHelper.initialize({\n product: ProductId.Primary,\n liteSupportSiteUrl: ClickView.Config.Urls.LiteSupportSiteUrl,\n instanceRegion: InstanceRegion.AU\n });\n } finally {\n next(shell);\n }\n}\n","import { Core } from 'libs/common/backbone/index';\n\nimport { SettingRequests } from 'libs/shared/flight-requests/SettingRequests';\nimport { SettingsHelper } from 'libs/shared/utils/SettingsHelper';\n\nexport function RegisterSettings(shell: Core.Shell, next: (...args: any) => any) {\n SettingRequests.setPublicFormatSettings(SettingsHelper.formatSettings);\n\n next(shell);\n}\n","/* eslint simple-import-sort/imports: 0 */\n\nimport './styles/index.scss';\n\nimport 'bootstrap';\nimport 'backbone.radio';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport {\n InitializeNavService,\n RegisterApplications,\n RegisterArticleHelper,\n RegisterCaches,\n RegisterDataProviders,\n RegisterDataServices,\n RegisterErrorHandlers,\n RegisterLayouts,\n RegisterServices,\n RegisterSettings,\n RegisterStore\n} from './startup';\n\n/**\n * Curator has other JS that uses jQuery 💩\n */\n(window as any).$ = $;\n\nconst shell = new Core.Shell({\n region: '#app',\n layoutService: new Core.LayoutService({})\n});\n\nshell\n .addInitializationStep(RegisterSettings)\n .addInitializationStep(RegisterLayouts)\n .addInitializationStep(RegisterStore)\n .addInitializationStep(RegisterCaches)\n .addInitializationStep(RegisterDataProviders)\n .addInitializationStep(RegisterDataServices)\n .addInitializationStep(InitializeNavService)\n .addInitializationStep(RegisterServices)\n .addInitializationStep(RegisterErrorHandlers)\n .addInitializationStep(RegisterApplications)\n .addInitializationStep(RegisterArticleHelper);\n\n/**\n * In curator we load our bundle at the top of the page because parts\n * of curator rely on the libraries we are importing, such as jQuery.\n * However we don't want to start our app until the entire page has laoded,\n * because of snippets like\n * \n * // window.selectedNav = 'system';\n * \n * which run in the actions view *.cshtml files.\n */\nwindow.addEventListener('load', () => {\n shell.start();\n});\n"],"file":"app-DfBVQxB2.js"}
1
+ {"version":3,"mappings":"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","names":["createPopper","defaultModifiers","eventListeners","popperOffsets","computeStyles","applyStyles","offset","flip","preventOverflow","arrow","hide","window.jQuery","ponyfill"],"ignoreList":[0,1,2,3,58,59,60,61],"sources":["../../../../../../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../../../../../../../node_modules/@popperjs/core/lib/popper-lite.js","../../../../../../../../node_modules/@popperjs/core/lib/popper.js","../../../../../../../../node_modules/bootstrap/dist/js/bootstrap.esm.js","../../../../../src/shared/constants/Layouts.ts","../../../../../src/startup/NavMappings.ts","../../../../../src/startup/InitializeNavService.ts","../../../../../../../libs/common/src/react/core/ReactApplication.tsx","../../../../../../../libs/shared/src/constants/LayoutRegions.ts","../../../../../src/apps/assembly-line/utils/migrations/AssemblyLineLocalStorageMigrations.ts","../../../../../src/apps/assembly-line/AssemblyLineApplication.tsx","../../../../../src/apps/clips/ClipsApplication.tsx","../../../../../src/apps/companies/CompaniesApplication.tsx","../../../../../src/apps/content-partners/ContentPartnerApplication.tsx","../../../../../../../libs/shared/src/utils/LayoutHelper.ts","../../../../../src/apps/crm-studio/CrmStudioApplication.tsx","../../../../../src/apps/curriculums/CurriculumsApplication.tsx","../../../../../src/apps/customer-wizard/CustomerWizardApplication.tsx","../../../../../src/apps/cv-live/CvLiveApplication.tsx","../../../../../src/apps/cv-live-pipeline/CvLivePipelineApplication.tsx","../../../../../src/apps/dashboard-editor/DashboardEditorApplication.tsx","../../../../../src/apps/default/CuratorDefaultApplication.tsx","../../../../../src/apps/discover/DiscoverApplication.tsx","../../../../../src/apps/domain-options/DomainOptionsApplication.tsx","../../../../../src/apps/interactives/InteractivesApplication.tsx","../../../../../src/apps/marketing/MarketingApplication.tsx","../../../../../src/apps/movies-and-tv/MoviesAndTvApplication.tsx","../../../../../src/apps/organisations/OrganisationsApplication.tsx","../../../../../src/apps/people/PeopleApplication.tsx","../../../../../src/apps/playlists/PlaylistsApplication.tsx","../../../../../src/apps/release-notes/ReleaseNotesApplication.tsx","../../../../../src/apps/series/SeriesApplication.tsx","../../../../../src/apps/short-link/ShortLinkApplication.tsx","../../../../../src/apps/special-events/SpecialEventsApplication.tsx","../../../../../src/apps/subjects/SubjectsApplication.tsx","../../../../../src/apps/themes/ThemesApplication.tsx","../../../../../src/apps/users/UsersApplication.tsx","../../../../../src/apps/videos/VideosApplication.tsx","../../../../../src/apps/visualiser/VisualiserApplication.tsx","../../../../../src/apps/workbench/filters/WorkbenchFilter.ts","../../../../../src/apps/workbench/WorkbenchApplication.tsx","../../../../../src/startup/RegisterApplications.ts","../../../../../../../libs/common/src/backbone/services/caches/FifoMemoryCache.ts","../../../../../src/startup/RegisterCaches.ts","../../../../../../../libs/common/src/backbone/utils/DataServiceErrorHelper.ts","../../../../../../../libs/common/src/backbone/services/data-providers/AjaxDataProvider.ts","../../../../../src/startup/RegisterDataProviders.ts","../../../../../../../libs/shared/src/constants/DataPrefixes.ts","../../../../../../../libs/shared/src/services/LanguageDataService.ts","../../../../../src/startup/RegisterDataServices.ts","../../../../../../../libs/common/src/react/core/ReactLayoutView.tsx","../../../../../src/shared/layouts/curator-layout/CuratorLayoutView.tsx","../../../../../../../libs/shared/src/hooks/useTabbingListener.tsx","../../../../../src/shared/layouts/full-screen-layout/FullScreenLayoutComponent.tsx","../../../../../src/shared/layouts/full-screen-layout/FullScreenLayoutView.tsx","../../../../../src/shared/layouts/primitives/LayoutComponent.tsx","../../../../../src/startup/RegisterLayouts.ts","../../../../../src/startup/RegisterServices.ts","../../../../../../../../node_modules/symbol-observable/es/ponyfill.js","../../../../../../../../node_modules/symbol-observable/es/index.js","../../../../../../../../node_modules/redux/es/redux.js","../../../../../../../../node_modules/redux-devtools-extension/index.js","../../../../../../../libs/common/src/react/middleware/FlightDataServiceBridgeMiddleware.ts","../../../../../../../libs/common/src/react/constants/HttpHeaders.ts","../../../../../../../libs/common/src/react/reducers/ApplicationDataReducer.ts","../../../../../../../libs/common/src/react/reducers/ViewModelReducer.ts","../../../../../src/startup/RegisterStore.ts","../../../../../src/startup/RegisterErrorHandlers.ts","../../../../../src/startup/RegisterArticleHelper.ts","../../../../../src/startup/RegisterSettings.ts","../../../../../src/app.ts"],"sourcesContent":["import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/*!\n * Bootstrap v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\nconst Data = {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map());\n }\n const instanceMap = elementMap.get(element);\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n return;\n }\n instanceMap.set(key, instance);\n },\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null;\n }\n return null;\n },\n remove(element, key) {\n if (!elementMap.has(element)) {\n return;\n }\n const instanceMap = elementMap.get(element);\n instanceMap.delete(key);\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element);\n }\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n }\n return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`;\n }\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID);\n } while (document.getElementById(prefix));\n return prefix;\n};\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let {\n transitionDuration,\n transitionDelay\n } = window.getComputedStyle(element);\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false;\n }\n if (typeof object.jquery !== 'undefined') {\n object = object[0];\n }\n return typeof object.nodeType !== 'undefined';\n};\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object;\n }\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object));\n }\n return null;\n};\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false;\n }\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])');\n if (!closedDetails) {\n return elementIsVisible;\n }\n if (closedDetails !== element) {\n const summary = element.closest('summary');\n if (summary && summary.parentNode !== closedDetails) {\n return false;\n }\n if (summary === null) {\n return false;\n }\n }\n return elementIsVisible;\n};\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n if (element.classList.contains('disabled')) {\n return true;\n }\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null;\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n if (element instanceof ShadowRoot) {\n return element;\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null;\n }\n return findShadowRoot(element.parentNode);\n};\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery;\n }\n return null;\n};\nconst DOMContentLoadedCallbacks = [];\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback();\n }\n });\n }\n DOMContentLoadedCallbacks.push(callback);\n } else {\n callback();\n }\n};\nconst isRTL = () => document.documentElement.dir === 'rtl';\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery();\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME;\n const JQUERY_NO_CONFLICT = $.fn[name];\n $.fn[name] = plugin.jQueryInterface;\n $.fn[name].Constructor = plugin;\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT;\n return plugin.jQueryInterface;\n };\n }\n });\n};\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback);\n return;\n }\n const durationPadding = 5;\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n let called = false;\n const handler = ({\n target\n }) => {\n if (target !== transitionElement) {\n return;\n }\n called = true;\n transitionElement.removeEventListener(TRANSITION_END, handler);\n execute(callback);\n };\n transitionElement.addEventListener(TRANSITION_END, handler);\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement);\n }\n }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length;\n let index = list.indexOf(activeElement);\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n }\n index += shouldGetNext ? 1 : -1;\n if (isCycleAllowed) {\n index = (index + listLength) % listLength;\n }\n return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\nfunction getElementEvents(element) {\n const uid = makeEventUid(element);\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n return eventRegistry[uid];\n}\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, {\n delegateTarget: element\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n return fn.apply(element, [event]);\n };\n}\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n for (let {\n target\n } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue;\n }\n hydrateObj(event, {\n delegateTarget: target\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn);\n }\n return fn.apply(target, [event]);\n }\n }\n };\n}\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string';\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n let typeEvent = getTypeEvent(originalTypeEvent);\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent;\n }\n return [isDelegated, callable, typeEvent];\n}\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n return fn.call(this, event);\n }\n };\n };\n callable = wrapFunction(callable);\n }\n const events = getElementEvents(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff;\n return;\n }\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n fn.delegationSelector = isDelegated ? handler : null;\n fn.callable = callable;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n element.addEventListener(typeEvent, fn, isDelegated);\n}\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n if (!fn) {\n return;\n }\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n}\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '');\n return customEvents[event] || event;\n}\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false);\n },\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true);\n },\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n const inNamespace = typeEvent !== originalTypeEvent;\n const events = getElementEvents(element);\n const storeElementEvent = events[typeEvent] || {};\n const isNamespace = originalTypeEvent.startsWith('.');\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return;\n }\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n return;\n }\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n }\n }\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n },\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n const $ = getjQuery();\n const typeEvent = getTypeEvent(event);\n const inNamespace = event !== typeEvent;\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n const evt = hydrateObj(new Event(event, {\n bubbles,\n cancelable: true\n }), args);\n if (defaultPrevented) {\n evt.preventDefault();\n }\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault();\n }\n return evt;\n }\n};\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value;\n } catch (_unused) {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value;\n }\n });\n }\n }\n return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n if (value === Number(value).toString()) {\n return Number(value);\n }\n if (value === '' || value === 'null') {\n return null;\n }\n if (typeof value !== 'string') {\n return value;\n }\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch (_unused) {\n return value;\n }\n}\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n },\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n },\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n const attributes = {};\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '');\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n attributes[pureKey] = normalizeData(element.dataset[key]);\n }\n return attributes;\n },\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {};\n }\n static get DefaultType() {\n return {};\n }\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n return config;\n }\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n };\n }\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property];\n const valueType = isElement(value) ? 'element' : toType(value);\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n }\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.2';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super();\n element = getElement(element);\n if (!element) {\n return;\n }\n this._element = element;\n this._config = this._getConfig(config);\n Data.set(this._element, this.constructor.DATA_KEY, this);\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY);\n EventHandler.off(this._element, this.constructor.EVENT_KEY);\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null;\n }\n }\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated);\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY);\n }\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n }\n static get VERSION() {\n return VERSION;\n }\n static get DATA_KEY() {\n return `bs.${this.NAME}`;\n }\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target');\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href');\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n return null;\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n }\n selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null;\n }\n return selector;\n};\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector));\n },\n parents(element, selector) {\n const parents = [];\n let ancestor = element.parentNode.closest(selector);\n while (ancestor) {\n parents.push(ancestor);\n ancestor = ancestor.parentNode.closest(selector);\n }\n return parents;\n },\n prev(element, selector) {\n let previous = element.previousElementSibling;\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n previous = previous.previousElementSibling;\n }\n return [];\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling;\n while (next) {\n if (next.matches(selector)) {\n return [next];\n }\n next = next.nextElementSibling;\n }\n return [];\n },\n focusableChildren(element) {\n const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n },\n getSelectorFromElement(element) {\n const selector = getSelector(element);\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null;\n }\n return null;\n },\n getElementFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.findOne(selector) : null;\n },\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.find(selector) : [];\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n const name = component.NAME;\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n const instance = component.getOrCreateInstance(target);\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]();\n });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$f;\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n if (closeEvent.defaultPrevented) {\n return;\n }\n this._element.classList.remove(CLASS_NAME_SHOW$8);\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n }\n\n // Private\n _destroyElement() {\n this._element.remove();\n EventHandler.trigger(this._element, EVENT_CLOSED);\n this.dispose();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$e;\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this);\n if (config === 'toggle') {\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n event.preventDefault();\n const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n const data = Button.getOrCreateInstance(button);\n data.toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n};\nconst DefaultType$c = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super();\n this._element = element;\n if (!element || !Swipe.isSupported()) {\n return;\n }\n this._config = this._getConfig(config);\n this._deltaX = 0;\n this._supportPointerEvents = Boolean(window.PointerEvent);\n this._initEvents();\n }\n\n // Getters\n static get Default() {\n return Default$c;\n }\n static get DefaultType() {\n return DefaultType$c;\n }\n static get NAME() {\n return NAME$d;\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY$9);\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX;\n return;\n }\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX;\n }\n }\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX;\n }\n this._handleSwipe();\n execute(this._config.endCallback);\n }\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n }\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX);\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n const direction = absDeltaX / this._deltaX;\n this._deltaX = 0;\n if (!direction) {\n return;\n }\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n }\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n }\n }\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n};\nconst DefaultType$b = {\n interval: '(number|boolean)',\n // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._interval = null;\n this._activeElement = null;\n this._isSliding = false;\n this.touchTimeout = null;\n this._swipeHelper = null;\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n this._addEventListeners();\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$b;\n }\n static get DefaultType() {\n return DefaultType$b;\n }\n static get NAME() {\n return NAME$c;\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT);\n }\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next();\n }\n }\n prev() {\n this._slide(ORDER_PREV);\n }\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element);\n }\n this._clearInterval();\n }\n cycle() {\n this._clearInterval();\n this._updateInterval();\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n }\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n return;\n }\n this.cycle();\n }\n to(index) {\n const items = this._getItems();\n if (index > items.length - 1 || index < 0) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n return;\n }\n const activeIndex = this._getItemIndex(this._getActive());\n if (activeIndex === index) {\n return;\n }\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n this._slide(order, items[index]);\n }\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose();\n }\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval;\n return config;\n }\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n }\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n }\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners();\n }\n }\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n }\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return;\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause();\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout);\n }\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n };\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n };\n this._swipeHelper = new Swipe(this._element, swipeConfig);\n }\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n const direction = KEY_TO_DIRECTION[event.key];\n if (direction) {\n event.preventDefault();\n this._slide(this._directionToOrder(direction));\n }\n }\n _getItemIndex(element) {\n return this._getItems().indexOf(element);\n }\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return;\n }\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n activeIndicator.removeAttribute('aria-current');\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n newActiveIndicator.setAttribute('aria-current', 'true');\n }\n }\n _updateInterval() {\n const element = this._activeElement || this._getActive();\n if (!element) {\n return;\n }\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n this._config.interval = elementInterval || this._config.defaultInterval;\n }\n _slide(order, element = null) {\n if (this._isSliding) {\n return;\n }\n const activeElement = this._getActive();\n const isNext = order === ORDER_NEXT;\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n if (nextElement === activeElement) {\n return;\n }\n const nextElementIndex = this._getItemIndex(nextElement);\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n });\n };\n const slideEvent = triggerEvent(EVENT_SLIDE);\n if (slideEvent.defaultPrevented) {\n return;\n }\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return;\n }\n const isCycling = Boolean(this._interval);\n this.pause();\n this._isSliding = true;\n this._setActiveIndicatorElement(nextElementIndex);\n this._activeElement = nextElement;\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n nextElement.classList.add(orderClassName);\n reflow(nextElement);\n activeElement.classList.add(directionalClassName);\n nextElement.classList.add(directionalClassName);\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName);\n nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n this._isSliding = false;\n triggerEvent(EVENT_SLID);\n };\n this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n if (isCycling) {\n this.cycle();\n }\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE);\n }\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n }\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element);\n }\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n }\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n }\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config);\n if (typeof config === 'number') {\n data.to(config);\n return;\n }\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return;\n }\n event.preventDefault();\n const carousel = Carousel.getOrCreateInstance(target);\n const slideIndex = this.getAttribute('data-bs-slide-to');\n if (slideIndex) {\n carousel.to(slideIndex);\n carousel._maybeEnableCycle();\n return;\n }\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next();\n carousel._maybeEnableCycle();\n return;\n }\n carousel.prev();\n carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n parent: null,\n toggle: true\n};\nconst DefaultType$a = {\n parent: '(null|element)',\n toggle: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isTransitioning = false;\n this._triggerArray = [];\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem);\n const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem);\n }\n }\n this._initializeChildren();\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n }\n if (this._config.toggle) {\n this.toggle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$a;\n }\n static get DefaultType() {\n return DefaultType$a;\n }\n static get NAME() {\n return NAME$b;\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide();\n } else {\n this.show();\n }\n }\n show() {\n if (this._isTransitioning || this._isShown()) {\n return;\n }\n let activeChildren = [];\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n toggle: false\n }));\n }\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n for (const activeInstance of activeChildren) {\n activeInstance.hide();\n }\n const dimension = this._getDimension();\n this._element.classList.remove(CLASS_NAME_COLLAPSE);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.style[dimension] = 0;\n this._addAriaAndCollapsedClass(this._triggerArray, true);\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n this._element.style[dimension] = '';\n EventHandler.trigger(this._element, EVENT_SHOWN$6);\n };\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n const scrollSize = `scroll${capitalizedDimension}`;\n this._queueCallback(complete, this._element, true);\n this._element.style[dimension] = `${this._element[scrollSize]}px`;\n }\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n const dimension = this._getDimension();\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger);\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false);\n }\n }\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE);\n EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n };\n this._element.style[dimension] = '';\n this._queueCallback(complete, this._element, true);\n }\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW$7);\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle); // Coerce string values\n config.parent = getElement(config.parent);\n return config;\n }\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n }\n _initializeChildren() {\n if (!this._config.parent) {\n return;\n }\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element);\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected));\n }\n }\n }\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n }\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return;\n }\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n element.setAttribute('aria-expanded', isOpen);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {};\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n event.preventDefault();\n }\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, {\n toggle: false\n }).toggle();\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n};\nconst DefaultType$9 = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._popper = null;\n this._parent = this._element.parentNode; // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n this._inNavbar = this._detectNavbar();\n }\n\n // Getters\n static get Default() {\n return Default$9;\n }\n static get DefaultType() {\n return DefaultType$9;\n }\n static get NAME() {\n return NAME$a;\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show();\n }\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._createPopper();\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n this._element.focus();\n this._element.setAttribute('aria-expanded', true);\n this._menu.classList.add(CLASS_NAME_SHOW$6);\n this._element.classList.add(CLASS_NAME_SHOW$6);\n EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n }\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n this._completeHide(relatedTarget);\n }\n dispose() {\n if (this._popper) {\n this._popper.destroy();\n }\n super.dispose();\n }\n update() {\n this._inNavbar = this._detectNavbar();\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n if (this._popper) {\n this._popper.destroy();\n }\n this._menu.classList.remove(CLASS_NAME_SHOW$6);\n this._element.classList.remove(CLASS_NAME_SHOW$6);\n this._element.setAttribute('aria-expanded', 'false');\n Manipulator.removeDataAttribute(this._menu, 'popper');\n EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n }\n _getConfig(config) {\n config = super._getConfig(config);\n if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n }\n return config;\n }\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n }\n let referenceElement = this._element;\n if (this._config.reference === 'parent') {\n referenceElement = this._parent;\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference);\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference;\n }\n const popperConfig = this._getPopperConfig();\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n }\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n }\n _getPlacement() {\n const parentDropdown = this._parent;\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER;\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n }\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n }\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null;\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n };\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }];\n }\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _selectMenuItem({\n key,\n target\n }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n if (!items.length) {\n return;\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n return;\n }\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle);\n if (!context || context._config.autoClose === false) {\n continue;\n }\n const composedPath = event.composedPath();\n const isMenuTarget = composedPath.includes(context._menu);\n if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n continue;\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue;\n }\n const relatedTarget = {\n relatedTarget: context._element\n };\n if (event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n context._completeHide(relatedTarget);\n }\n }\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName);\n const isEscapeEvent = event.key === ESCAPE_KEY$2;\n const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return;\n }\n if (isInput && !isEscapeEvent) {\n return;\n }\n event.preventDefault();\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n const instance = Dropdown.getOrCreateInstance(getToggleButton);\n if (isUpOrDownEvent) {\n event.stopPropagation();\n instance.show();\n instance._selectMenuItem(event);\n return;\n }\n if (instance._isShown()) {\n // else is escape and we check if it is shown\n event.stopPropagation();\n instance.hide();\n getToggleButton.focus();\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n event.preventDefault();\n Dropdown.getOrCreateInstance(this).toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true,\n // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n};\n\nconst DefaultType$8 = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isAppended = false;\n this._element = null;\n }\n\n // Getters\n static get Default() {\n return Default$8;\n }\n static get DefaultType() {\n return DefaultType$8;\n }\n static get NAME() {\n return NAME$9;\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._append();\n const element = this._getElement();\n if (this._config.isAnimated) {\n reflow(element);\n }\n element.classList.add(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n execute(callback);\n });\n }\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n this.dispose();\n execute(callback);\n });\n }\n dispose() {\n if (!this._isAppended) {\n return;\n }\n EventHandler.off(this._element, EVENT_MOUSEDOWN);\n this._element.remove();\n this._isAppended = false;\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div');\n backdrop.className = this._config.className;\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE$4);\n }\n this._element = backdrop;\n }\n return this._element;\n }\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement);\n return config;\n }\n _append() {\n if (this._isAppended) {\n return;\n }\n const element = this._getElement();\n this._config.rootElement.append(element);\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback);\n });\n this._isAppended = true;\n }\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n};\n\nconst DefaultType$7 = {\n autofocus: 'boolean',\n trapElement: 'element'\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isActive = false;\n this._lastTabNavDirection = null;\n }\n\n // Getters\n static get Default() {\n return Default$7;\n }\n static get DefaultType() {\n return DefaultType$7;\n }\n static get NAME() {\n return NAME$8;\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return;\n }\n if (this._config.autofocus) {\n this._config.trapElement.focus();\n }\n EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n this._isActive = true;\n }\n deactivate() {\n if (!this._isActive) {\n return;\n }\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY$5);\n }\n\n // Private\n _handleFocusin(event) {\n const {\n trapElement\n } = this._config;\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return;\n }\n const elements = SelectorEngine.focusableChildren(trapElement);\n if (elements.length === 0) {\n trapElement.focus();\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus();\n } else {\n elements[0].focus();\n }\n }\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body;\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n }\n hide() {\n const width = this.getWidth();\n this._disableOverFlow();\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n }\n reset() {\n this._resetElementAttributes(this._element, 'overflow');\n this._resetElementAttributes(this._element, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n }\n isOverflowing() {\n return this.getWidth() > 0;\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow');\n this._element.style.overflow = 'hidden';\n }\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth();\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return;\n }\n this._saveInitialAttribute(element, styleProperty);\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty);\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue);\n }\n }\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty);\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty);\n return;\n }\n Manipulator.removeDataAttribute(element, styleProperty);\n element.style.setProperty(styleProperty, value);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector);\n return;\n }\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel);\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n backdrop: true,\n focus: true,\n keyboard: true\n};\nconst DefaultType$6 = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._isShown = false;\n this._isTransitioning = false;\n this._scrollBar = new ScrollBarHelper();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$6;\n }\n static get DefaultType() {\n return DefaultType$6;\n }\n static get NAME() {\n return NAME$7;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._isTransitioning = true;\n this._scrollBar.hide();\n document.body.classList.add(CLASS_NAME_OPEN);\n this._adjustDialog();\n this._backdrop.show(() => this._showElement(relatedTarget));\n }\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._isShown = false;\n this._isTransitioning = true;\n this._focustrap.deactivate();\n this._element.classList.remove(CLASS_NAME_SHOW$4);\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n }\n dispose() {\n EventHandler.off(window, EVENT_KEY$4);\n EventHandler.off(this._dialog, EVENT_KEY$4);\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n handleUpdate() {\n this._adjustDialog();\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop),\n // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element);\n }\n this._element.style.display = 'block';\n this._element.removeAttribute('aria-hidden');\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.scrollTop = 0;\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n if (modalBody) {\n modalBody.scrollTop = 0;\n }\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW$4);\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate();\n }\n this._isTransitioning = false;\n EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n relatedTarget\n });\n };\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n if (event.key !== ESCAPE_KEY$1) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n this._triggerBackdropTransition();\n });\n EventHandler.on(window, EVENT_RESIZE$1, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog();\n }\n });\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return;\n }\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition();\n return;\n }\n if (this._config.backdrop) {\n this.hide();\n }\n });\n });\n }\n _hideModal() {\n this._element.style.display = 'none';\n this._element.setAttribute('aria-hidden', true);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n this._isTransitioning = false;\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN);\n this._resetAdjustments();\n this._scrollBar.reset();\n EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n });\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE$3);\n }\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const initialOverflowY = this._element.style.overflowY;\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return;\n }\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n this._element.classList.add(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY;\n }, this._dialog);\n }, this._dialog);\n this._element.focus();\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const scrollbarWidth = this._scrollBar.getWidth();\n const isBodyOverflowing = scrollbarWidth > 0;\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n }\n _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](relatedTarget);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$4, () => {\n if (isVisible(this)) {\n this.focus();\n }\n });\n });\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide();\n }\n const data = Modal.getOrCreateInstance(target);\n data.toggle(this);\n});\nenableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n backdrop: true,\n keyboard: true,\n scroll: false\n};\nconst DefaultType$5 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isShown = false;\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$5;\n }\n static get DefaultType() {\n return DefaultType$5;\n }\n static get NAME() {\n return NAME$6;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._backdrop.show();\n if (!this._config.scroll) {\n new ScrollBarHelper().hide();\n }\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.classList.add(CLASS_NAME_SHOWING$1);\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate();\n }\n this._element.classList.add(CLASS_NAME_SHOW$3);\n this._element.classList.remove(CLASS_NAME_SHOWING$1);\n EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n relatedTarget\n });\n };\n this._queueCallback(completeCallBack, this._element, true);\n }\n hide() {\n if (!this._isShown) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._focustrap.deactivate();\n this._element.blur();\n this._isShown = false;\n this._element.classList.add(CLASS_NAME_HIDING);\n this._backdrop.hide();\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n if (!this._config.scroll) {\n new ScrollBarHelper().reset();\n }\n EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n };\n this._queueCallback(completeCallback, this._element, true);\n }\n dispose() {\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n this.hide();\n };\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop);\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n });\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$3, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus();\n }\n });\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide();\n }\n const data = Offcanvas.getOrCreateInstance(target);\n data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show();\n }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide();\n }\n }\n});\nenableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\nconst DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n }\n return true;\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n allowList: DefaultAllowlist,\n content: {},\n // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n};\nconst DefaultType$4 = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n};\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n }\n\n // Getters\n static get Default() {\n return Default$4;\n }\n static get DefaultType() {\n return DefaultType$4;\n }\n static get NAME() {\n return NAME$5;\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n }\n hasContent() {\n return this.getContent().length > 0;\n }\n changeContent(content) {\n this._checkContent(content);\n this._config.content = {\n ...this._config.content,\n ...content\n };\n return this;\n }\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n const template = templateWrapper.children[0];\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n return template;\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n this._checkContent(config.content);\n }\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({\n selector,\n entry: content\n }, DefaultContentType);\n }\n }\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n if (!templateElement) {\n return;\n }\n content = this._resolvePossibleFunction(content);\n if (!content) {\n templateElement.remove();\n return;\n }\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement);\n return;\n }\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n templateElement.textContent = content;\n }\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this]);\n }\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n templateElement.textContent = element.textContent;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n title: '',\n trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n }\n super(element, config);\n\n // Private\n this._isEnabled = true;\n this._timeout = 0;\n this._isHovered = null;\n this._activeTrigger = {};\n this._popper = null;\n this._templateFactory = null;\n this._newContent = null;\n\n // Protected\n this.tip = null;\n this._setListeners();\n if (!this._config.selector) {\n this._fixTitle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$3;\n }\n static get DefaultType() {\n return DefaultType$3;\n }\n static get NAME() {\n return NAME$4;\n }\n\n // Public\n enable() {\n this._isEnabled = true;\n }\n disable() {\n this._isEnabled = false;\n }\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n this._activeTrigger.click = !this._activeTrigger.click;\n if (this._isShown()) {\n this._leave();\n return;\n }\n this._enter();\n }\n dispose() {\n clearTimeout(this._timeout);\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n }\n this._disposePopper();\n super.dispose();\n }\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n const shadowRoot = findShadowRoot(this._element);\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper();\n const tip = this._getTipElement();\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n const {\n container\n } = this._config;\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip);\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n }\n this._popper = this._createPopper(tip);\n tip.classList.add(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n if (this._isHovered === false) {\n this._leave();\n }\n this._isHovered = false;\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n hide() {\n if (!this._isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n if (hideEvent.defaultPrevented) {\n return;\n }\n const tip = this._getTipElement();\n tip.classList.remove(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n this._isHovered = null; // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return;\n }\n if (!this._isHovered) {\n this._disposePopper();\n }\n this._element.removeAttribute('aria-describedby');\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n update() {\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle());\n }\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n return this.tip;\n }\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml();\n\n // TODO: remove this check in v6\n if (!tip) {\n return null;\n }\n tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n const tipId = getUID(this.constructor.NAME).toString();\n tip.setAttribute('id', tipId);\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE$2);\n }\n return tip;\n }\n setContent(content) {\n this._newContent = content;\n if (this._isShown()) {\n this._disposePopper();\n this.show();\n }\n }\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content);\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n });\n }\n return this._templateFactory;\n }\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n };\n }\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n }\n _isAnimated() {\n return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n }\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n }\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element]);\n const attachment = AttachmentMap[placement.toUpperCase()];\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element]);\n }\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [{\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n }, {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n }\n }]\n };\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context.toggle();\n });\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n context._enter();\n });\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n context._leave();\n });\n }\n }\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n }\n _fixTitle() {\n const title = this._element.getAttribute('title');\n if (!title) {\n return;\n }\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\n }\n this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title');\n }\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n this._isHovered = true;\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n this._isHovered = false;\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\n }\n }\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n };\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container);\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n return config;\n }\n _getDelegateConfig() {\n const config = {};\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value;\n }\n }\n config.selector = false;\n config.trigger = 'manual';\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config;\n }\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n if (this.tip) {\n this.tip.remove();\n this.tip = null;\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>',\n trigger: 'click'\n};\nconst DefaultType$2 = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default$2;\n }\n static get DefaultType() {\n return DefaultType$2;\n }\n static get NAME() {\n return NAME$3;\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent();\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n };\n }\n _getContent() {\n return this._resolvePossibleFunction(this._config.content);\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n offset: null,\n // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n offset: '(number|null)',\n // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map();\n this._observableSections = new Map();\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n this._activeTarget = null;\n this._observer = null;\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n };\n this.refresh(); // initialize\n }\n\n // Getters\n static get Default() {\n return Default$1;\n }\n static get DefaultType() {\n return DefaultType$1;\n }\n static get NAME() {\n return NAME$2;\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables();\n this._maybeEnableSmoothScroll();\n if (this._observer) {\n this._observer.disconnect();\n } else {\n this._observer = this._getNewObserver();\n }\n for (const section of this._observableSections.values()) {\n this._observer.observe(section);\n }\n }\n dispose() {\n this._observer.disconnect();\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body;\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n }\n return config;\n }\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return;\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK);\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash);\n if (observableSection) {\n event.preventDefault();\n const root = this._rootElement || window;\n const height = observableSection.offsetTop - this._element.offsetTop;\n if (root.scrollTo) {\n root.scrollTo({\n top: height,\n behavior: 'smooth'\n });\n return;\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height;\n }\n });\n }\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n };\n return new IntersectionObserver(entries => this._observerCallback(entries), options);\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n this._process(targetElement(entry));\n };\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n this._previousScrollData.parentScrollTop = parentScrollTop;\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null;\n this._clearActiveClass(targetElement(entry));\n continue;\n }\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry);\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return;\n }\n continue;\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry);\n }\n }\n }\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map();\n this._observableSections = new Map();\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue;\n }\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor);\n this._observableSections.set(anchor.hash, observableSection);\n }\n }\n }\n _process(target) {\n if (this._activeTarget === target) {\n return;\n }\n this._clearActiveClass(this._config.target);\n this._activeTarget = target;\n target.classList.add(CLASS_NAME_ACTIVE$1);\n this._activateParents(target);\n EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n relatedTarget: target\n });\n }\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n return;\n }\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE$1);\n }\n }\n }\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE$1);\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE$1);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst HOME_KEY = 'Home';\nconst END_KEY = 'End';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst CLASS_DROPDOWN = 'dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu';\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]';\nconst SELECTOR_OUTER = '.nav-item, .list-group-item';\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]'; // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`;\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element);\n this._parent = this._element.closest(SELECTOR_TAB_PANEL);\n if (!this._parent) {\n return;\n // TODO: should throw exception in v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren());\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n }\n\n // Getters\n static get NAME() {\n return NAME$1;\n }\n\n // Public\n show() {\n // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element;\n if (this._elemIsActive(innerElem)) {\n return;\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem();\n const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {\n relatedTarget: innerElem\n }) : null;\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {\n relatedTarget: active\n });\n if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {\n return;\n }\n this._deactivate(active, innerElem);\n this._activate(innerElem, active);\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return;\n }\n element.classList.add(CLASS_NAME_ACTIVE);\n this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW$1);\n return;\n }\n element.removeAttribute('tabindex');\n element.setAttribute('aria-selected', true);\n this._toggleDropDown(element, true);\n EventHandler.trigger(element, EVENT_SHOWN$1, {\n relatedTarget: relatedElem\n });\n };\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n }\n _deactivate(element, relatedElem) {\n if (!element) {\n return;\n }\n element.classList.remove(CLASS_NAME_ACTIVE);\n element.blur();\n this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW$1);\n return;\n }\n element.setAttribute('aria-selected', false);\n element.setAttribute('tabindex', '-1');\n this._toggleDropDown(element, false);\n EventHandler.trigger(element, EVENT_HIDDEN$1, {\n relatedTarget: relatedElem\n });\n };\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));\n }\n _keydown(event) {\n if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {\n return;\n }\n event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault();\n const children = this._getChildren().filter(element => !isDisabled(element));\n let nextActiveElement;\n if ([HOME_KEY, END_KEY].includes(event.key)) {\n nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];\n } else {\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);\n nextActiveElement = getNextActiveElement(children, event.target, isNext, true);\n }\n if (nextActiveElement) {\n nextActiveElement.focus({\n preventScroll: true\n });\n Tab.getOrCreateInstance(nextActiveElement).show();\n }\n }\n _getChildren() {\n // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);\n }\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null;\n }\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist');\n for (const child of children) {\n this._setInitialAttributesOnChild(child);\n }\n }\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child);\n const isActive = this._elemIsActive(child);\n const outerElem = this._getOuterElement(child);\n child.setAttribute('aria-selected', isActive);\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation');\n }\n if (!isActive) {\n child.setAttribute('tabindex', '-1');\n }\n this._setAttributeIfNotExists(child, 'role', 'tab');\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child);\n }\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child);\n if (!target) {\n return;\n }\n this._setAttributeIfNotExists(target, 'role', 'tabpanel');\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`);\n }\n }\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element);\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return;\n }\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem);\n if (element) {\n element.classList.toggle(className, open);\n }\n };\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);\n outerElem.setAttribute('aria-expanded', open);\n }\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value);\n }\n }\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE);\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n Tab.getOrCreateInstance(this).show();\n});\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element);\n }\n});\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n};\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n};\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._timeout = null;\n this._hasMouseInteraction = false;\n this._hasKeyboardInteraction = false;\n this._setListeners();\n }\n\n // Getters\n static get Default() {\n return Default;\n }\n static get DefaultType() {\n return DefaultType;\n }\n static get NAME() {\n return NAME;\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._clearTimeout();\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE);\n }\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING);\n EventHandler.trigger(this._element, EVENT_SHOWN);\n this._maybeScheduleHide();\n };\n this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);\n this._queueCallback(complete, this._element, this._config.animation);\n }\n hide() {\n if (!this.isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);\n EventHandler.trigger(this._element, EVENT_HIDDEN);\n };\n this._element.classList.add(CLASS_NAME_SHOWING);\n this._queueCallback(complete, this._element, this._config.animation);\n }\n dispose() {\n this._clearTimeout();\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW);\n }\n super.dispose();\n }\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW);\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return;\n }\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return;\n }\n this._timeout = setTimeout(() => {\n this.hide();\n }, this._config.delay);\n }\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout':\n {\n this._hasMouseInteraction = isInteracting;\n break;\n }\n case 'focusin':\n case 'focusout':\n {\n this._hasKeyboardInteraction = isInteracting;\n break;\n }\n }\n if (isInteracting) {\n this._clearTimeout();\n return;\n }\n const nextElement = event.relatedTarget;\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return;\n }\n this._maybeScheduleHide();\n }\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n }\n _clearTimeout() {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n","export const Layouts = {\n CURATOR_LAYOUT: 'CuratorLayout',\n FULL_SCREEN_LAYOUT: 'FullScreenLayout'\n};\n","import { Actions, AppChannels } from 'shared/constants';\n\nexport const NavMappings = {\n customerWizard: {\n [AppChannels.CUSTOMER_WIZARD]: 'Customer Wizard'\n },\n crmStudio: {\n [AppChannels.CRM_STUDIO]: '(BETA) CRM Studio'\n },\n shortLink: {\n [AppChannels.SHORT_LINK]: 'Short Link'\n },\n organisations: {\n [AppChannels.ORGANISATIONS]: {\n actions: {\n [Actions.System.NEW_ORGANISATION]: 'Add New Organisation'\n },\n default: 'Organisations'\n }\n },\n developer: {\n [AppChannels.DOMAIN_OPTIONS]: 'Domain Options'\n },\n manageContent: {\n [AppChannels.COMPANIES]: 'Companies',\n [AppChannels.PEOPLE]: 'People',\n [AppChannels.PLAYLISTS]: 'Playlists',\n [AppChannels.SERIES]: 'Series',\n [AppChannels.SUBJECTS]: 'Topics',\n [AppChannels.CURRICULUMS]: 'Curriculums',\n [AppChannels.THEMES]: 'Themes',\n [AppChannels.VIDEOS]: 'Videos',\n [AppChannels.DISCOVER]: 'Discover',\n [AppChannels.ASSEMBLY_LINE]: 'Content Pipeline',\n [AppChannels.WORKBENCH]: 'Workbench',\n [AppChannels.INTERACTIVES]: 'Interactives',\n [AppChannels.CLIPS]: 'Clips',\n [AppChannels.MOVIES_AND_TV]: 'M + TV'\n },\n cvLive: {\n [AppChannels.DISCOVER]: 'Discover',\n [AppChannels.SUBJECTS]: 'Topics',\n [AppChannels.AUDIENCES]: 'Audiences',\n [AppChannels.COMPANIES]: 'Companies',\n [AppChannels.CV_LIVE_PIPELINE]: 'Content Pipeline'\n }\n};\n","import { Core } from 'libs/common/backbone/index';\n\nimport { CuratorAppNavService } from 'shared/services';\n\nimport { NavMappings } from './NavMappings';\n\nexport function InitializeNavService(shell: Core.Shell, next: (...args: any) => any) {\n if (!(window as any).selectedNav)\n throw new Error('Must assign window.selectedNav for CuratorAppNavService');\n\n const navItemMappings = NavMappings[(window as any).selectedNav as keyof typeof NavMappings];\n\n new CuratorAppNavService({\n navSelector: '.white-module-subnav > ul',\n currentItemClassName: 'current',\n navItemMappings\n });\n\n next(shell);\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseApplication } from 'libs/common/backbone/core/BaseApplication';\nimport { LayoutOptions } from 'libs/common/backbone/core/LayoutService';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\n\nimport { ReactLayoutView, ReactLayoutViewOptions } from './ReactLayoutView';\n\nexport class ReactApplication<TLayout extends ReactLayoutView = ReactLayoutView> extends BaseApplication {\n declare protected layout: TLayout;\n declare protected layoutOptions: LayoutOptions<ReactLayoutViewOptions>;\n\n protected onShowAlert(options: ObjectHash): void {\n if (!this.layoutOptions.options.alertRegion)\n return super.onShowAlert(options);\n\n const { ctor: AlertList, collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(\n this.layoutOptions.options.alertRegion,\n <AlertList alerts={alerts} removeAlert={removeAlert} />\n );\n }\n}\n","export const LayoutRegions = {\n TOP_NAV: 'top:nav',\n LEFT_NAV: 'left:nav',\n CONTENT: 'content',\n POPUP: 'popup',\n ALERT: 'alert',\n HIDDEN: 'hidden',\n PICTURE_IN_PICTURE: 'picture:in:picture'\n};\n","import { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { CONTENT_PIPELINE_COLUMNS } from 'apps/assembly-line/components/column-filters/ColumnFilters';\nimport { SavedAssemblyLineColumns } from 'apps/assembly-line/hooks/useAssemblyLineColumns';\nimport { AssemblyLineStage } from 'apps/assembly-line/interfaces/AssemblyLineStage';\n\nimport { AssemblyLineHelper } from '../AssemblyLineHelper';\n\ntype V1ColumnsState = Partial<Record<AssemblyLineStage, string[]>>;\n\nexport const AssemblyLineLocalStorageMigrations = [\n {\n dateCreated: '05-09-2024',\n name: 'Column visibility schema change',\n description: `\n The column visibility state saved in local storage initially for each pipeline stage would\n just contain an array of the column IDs that should be visible. This caused problems when\n new columns were introduced, as the new columns would not be included in their local storage, and thus\n would never show up unless the user opted into it, which we don't want if the new column is an important default.\n \n This migration changes the schema to simply contain 2 lists for each stage:\n 1. \"added\": A list of non-default columns that the user has opted into\n 2. \"removed\": A list of default columns that the user has opted out of\n\n This allows new defaults to show up automatically\n `,\n // Only run this migration if their local storage is in the shape of the first schema\n predicate: () => {\n const currentState = LocalStorageHelper.get<V1ColumnsState>(CONTENT_PIPELINE_COLUMNS);\n\n if (!currentState)\n return false;\n\n const modifiedStage = Object.keys(currentState)?.[0] as AssemblyLineStage;\n\n if (!modifiedStage)\n return false;\n\n return Array.isArray(currentState[modifiedStage]);\n },\n run: () => {\n const initialState = LocalStorageHelper.get<V1ColumnsState>(CONTENT_PIPELINE_COLUMNS);\n\n const updatedState = Object.entries(initialState)\n .reduce<Partial<SavedAssemblyLineColumns>>((acc, value) => {\n const stage = value[0] as AssemblyLineStage;\n const savedColumns = value[1] as string[];\n\n // Default state for unaffected stages\n if (!savedColumns?.length) {\n acc[stage] = {\n added: [],\n removed: []\n };\n\n return acc;\n }\n\n const defaultColumns = AssemblyLineHelper.getDefaultColumnFilterOptions(stage).map(o => o.id);\n\n acc[stage] = {\n // If the column was saved and it wasn't a default\n added: savedColumns.filter(col => !defaultColumns.includes(col)),\n\n removed: defaultColumns.filter(col => {\n /**\n * These columns were introduced after the initial schema was saved to everyones local storage,\n * and so these columns are incorrectly not showing up in some stages for some people. So they\n * should just never be placed in the \"removed\" array during this migration.\n */\n if (col === 'thumbnailQuality' || col === 'visibility' || col === 'assignedTo')\n return false;\n \n // If the column wasn't saved, and it was a default, then it belongs in the removed array\n return !savedColumns.includes(col);\n })\n };\n\n return acc;\n }, {});\n\n LocalStorageHelper.set(CONTENT_PIPELINE_COLUMNS, updatedState);\n }\n }\n];\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\nimport { ApplicationOptions } from 'backbone.marionette';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { FullScreenLayoutView, FullScreenLayoutViewOptions } from 'shared/layouts';\n\nimport { AssemblyLineBulkActionsQueryParams } from 'apps/assembly-line/interfaces/AssemblyLineBulkActionsQueryParams';\nimport { AssemblyLineDashboardField } from 'apps/assembly-line/interfaces/AssemblyLineDashboard';\nimport { AssemblyLineQueryParams } from 'apps/assembly-line/interfaces/AssemblyLineQueryParams';\nimport { AssemblyLineStage } from 'apps/assembly-line/interfaces/AssemblyLineStage';\nimport { AssemblyLineTopicField } from 'apps/assembly-line/interfaces/AssemblyLineTopic';\nimport { AssemblyLineVideoField } from 'apps/assembly-line/interfaces/AssemblyLineVideo';\nimport { AssemblyLineGenerateReportViewParams } from 'apps/assembly-line/views/generate-report/AssemblyLineGenerateReportView';\n\nimport { ContentPipelineId } from './interfaces/ContentPipelineId';\nimport { SharedAssemblyLinePopupQueryParams } from './interfaces/SharedAssemblyLinePopupQueryParams';\nimport { AssemblyLineLocalStorageMigrations } from './utils/migrations/AssemblyLineLocalStorageMigrations';\n\nconst PIPELINE_ID: ContentPipelineId = 'clickview';\n\nclass AssemblyLineAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.ASSEMBLY_LINE;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/content-pipeline(/)': 'index',\n 'manage/content-pipeline/metadata(/)': 'metadata',\n 'manage/content-pipeline/curriculum(/)': 'curriculum',\n 'manage/content-pipeline/curation(/)': 'curation',\n 'manage/content-pipeline/curation/presentations(/)': 'presentations',\n 'manage/content-pipeline/curation/presentations/nz-primary(/)': 'presentationsNzPrimary',\n 'manage/content-pipeline/curation/presentations/nz-secondary(/)': 'presentationsNzSecondary',\n 'manage/content-pipeline/curation/presentations/ca-elementary(/)': 'presentationsCaElementary',\n 'manage/content-pipeline/curation/presentations/ca-middle(/)': 'presentationsCaMiddle',\n 'manage/content-pipeline/curation/presentations/ca-high(/)': 'presentationsCaHigh',\n 'manage/content-pipeline/curation/unused-videos(/)': 'unusedVideos',\n 'manage/content-pipeline/curation/topics(/)': 'topics',\n 'manage/content-pipeline/curation/curated-topics(/)': 'curatedTopics',\n 'manage/content-pipeline/curation/thumbnail-text(/)': 'thumbnailText',\n 'manage/content-pipeline/assets(/)': 'assets',\n 'manage/content-pipeline/assets/curated-thumbnails(/)': 'curatedThumbnail',\n 'manage/content-pipeline/assets/thumbnail-review(/)': 'thumbnailReview',\n 'manage/content-pipeline/assets/topic-assets(/)': 'topicAssets',\n 'manage/content-pipeline/resourcing(/)': 'resourcing',\n 'manage/content-pipeline/resourcing/tags(/)': 'tags',\n 'manage/content-pipeline/resourcing/glance(/)': 'glance',\n 'manage/content-pipeline/resourcing/resources-interactives(/)': 'resourcesAndInteractives',\n 'manage/content-pipeline/resourcing/topic-seo(/)': 'topicSeo',\n 'manage/content-pipeline/review(/)': 'review',\n 'manage/content-pipeline/review/review-topics(/)': 'reviewTopics',\n 'manage/content-pipeline/review/published-topics(/)': 'publishedTopics',\n 'manage/content-pipeline/review/published-videos(/)': 'publishedVideos'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'editVideo',\n 'deleteVideo',\n 'archiveVideo',\n 'editClassification',\n 'editDashboard',\n 'wizard',\n 'saveQuickFilter',\n 'editQuickFilter',\n 'deleteQuickFilter',\n 'newInteractive',\n 'newClassificationDashboard',\n 'resolveTopicIssue',\n 'resolveVideoIssue',\n 'reviewDetails',\n 'publishTopic',\n 'globalSearch',\n 'pictureInPicture',\n 'giveFeedback',\n 'videoDashboards',\n 'generateReport',\n 'editReportTemplate',\n 'deleteReportTemplate',\n 'viewAssignees'\n ];\n }\n}\n\nexport class AssemblyLineApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n public initialize(options: ApplicationOptions): void {\n super.initialize(options);\n\n AssemblyLineLocalStorageMigrations.forEach(migration => {\n if (migration.predicate())\n migration.run();\n });\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Assembly Line Application';\n }\n\n public static get router(): any {\n return AssemblyLineAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.ASSEMBLY_LINE;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: true\n }\n };\n }\n\n public index(): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.ASSEMBLY_LINE,\n action: Actions.AssemblyLine.METADATA\n }, { replace: true });\n }\n\n public async metadata(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='metadata' subStage='metadata' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async curriculum(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='curriculum' subStage='curriculum' pipelineId={PIPELINE_ID} />\n );\n }\n\n public curation(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.ASSEMBLY_LINE,\n action: Actions.AssemblyLine.PRESENTATIONS,\n params\n }, { replace: true });\n }\n\n public async presentations(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='curation' subStage='presentation' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async presentationsNzPrimary(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView\n queryParams={params}\n stage='curation'\n subStage='presentation'\n pipelineId={PIPELINE_ID}\n view='nz-primary-presentations'\n />\n );\n }\n\n public async presentationsNzSecondary(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView\n queryParams={params}\n stage='curation'\n subStage='presentation'\n pipelineId={PIPELINE_ID}\n view='nz-secondary-presentations'\n />\n );\n }\n\n public async presentationsCaElementary(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView\n queryParams={params}\n stage='curation'\n subStage='presentation'\n pipelineId={PIPELINE_ID}\n view='ca-elementary-presentations'\n />\n );\n }\n\n public async presentationsCaMiddle(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView\n queryParams={params}\n stage='curation'\n subStage='presentation'\n pipelineId={PIPELINE_ID}\n view='ca-middle-presentations'\n />\n );\n }\n\n public async presentationsCaHigh(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView\n queryParams={params}\n stage='curation'\n subStage='presentation'\n pipelineId={PIPELINE_ID}\n view='ca-high-presentations'\n />\n );\n }\n\n public async unusedVideos(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='curation' subStage='unused_video' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async topics(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineTopicStageView } = await import('./views/tables/AssemblyLineTopicStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineTopicStageView queryParams={params} stage='curation' subStage='topic' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async newClassificationDashboard(classificationId: string, presentationId: string): Promise<void> {\n const { NewClassificationDashboardView } = await import('apps/subjects/views/classifications/new-classification-dashboard/NewClassificationDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewClassificationDashboardView\n classificationId={classificationId}\n presentationId={presentationId}\n targetType={DashboardTargetType.Classification}\n redirect={false}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async curatedTopics(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineDashboardStageView } = await import('./views/tables/AssemblyLineDashboardStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineDashboardStageView queryParams={params} stage='curation' subStage='curated_topic' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async thumbnailText(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='curation' subStage='thumbnail_text' pipelineId={PIPELINE_ID} />\n );\n }\n\n public assets(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.ASSEMBLY_LINE,\n action: Actions.AssemblyLine.CURATED_THUMBNAIL,\n params\n }, { replace: true });\n }\n\n public async curatedThumbnail(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='assets' subStage='curated_thumbnail' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async thumbnailReview(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='assets' subStage='review_thumbnail' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async topicAssets(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineTopicStageView } = await import('./views/tables/AssemblyLineTopicStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineTopicStageView queryParams={params} stage='assets' subStage='topic_asset' pipelineId={PIPELINE_ID} />\n );\n }\n\n public resourcing(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.ASSEMBLY_LINE,\n action: Actions.AssemblyLine.RESOURCES_AND_INTERACTIVES,\n params\n }, { replace: true });\n }\n\n public async tags(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='resourcing' subStage='tags' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async glance(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='resourcing' subStage='glance' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async resourcesAndInteractives(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='resourcing' subStage='resources_interactives' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async topicSeo(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineTopicStageView } = await import('./views/tables/AssemblyLineTopicStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineTopicStageView queryParams={params} stage='resourcing' subStage='topic_seo' pipelineId={PIPELINE_ID} />\n );\n }\n\n public review(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.ASSEMBLY_LINE,\n action: Actions.AssemblyLine.REVIEW_TOPICS,\n params\n }, { replace: true });\n }\n\n public async reviewTopics(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineReviewStageView } = await import('apps/assembly-line/views/tables/AssemblyLineReviewStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineReviewStageView queryParams={params} stage='reviewing' subStage='review_dashboard' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async publishedTopics(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineReviewStageView } = await import('apps/assembly-line/views/tables/AssemblyLineReviewStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineReviewStageView queryParams={params} stage='reviewing' subStage='published_dashboard' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async publishedVideos(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('./views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='reviewing' subStage='published_video' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async resolveTopicIssue(dashboardId: string): Promise<void> {\n const { ResolveTopicIssueView } = await import('apps/assembly-line/views/resolve-topic-issue/ResolveTopicIssueView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ResolveTopicIssueView\n dashboardId={dashboardId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async resolveVideoIssue(dashboardId: string, videoId: string): Promise<void> {\n const { ResolveVideoIssueView } = await import('apps/assembly-line/views/resolve-video-issue/ResolveVideoIssueView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ResolveVideoIssueView\n dashboardId={dashboardId}\n videoId={videoId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async reviewDetails(videoId: string): Promise<void> {\n const { AssemblyLineReviewDetailsView } = await import('apps/assembly-line/views/review-details/AssemblyLineReviewDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLineReviewDetailsView\n closePopup={() => this.layout.closePopup()}\n videoId={videoId}\n />\n );\n }\n\n public async publishTopic(dashboardId: string, params: { byPassValidation?: boolean }): Promise<void> {\n const { AssemblyLinePublishTopicView } = await import('apps/assembly-line/views/publish-topic/AssemblyLinePublishTopicView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLinePublishTopicView\n byPassValidation={params.byPassValidation}\n closePopup={() => this.layout.closePopup()}\n dashboardId={dashboardId}\n />\n );\n }\n\n public async globalSearch(params: SharedAssemblyLinePopupQueryParams = {}): Promise<void> {\n const { AssemblyLineGlobalSearchView } = await import('apps/assembly-line/views/global-search/AssemblyLineGlobalSearchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLineGlobalSearchView\n pipelineId={params.pipelineId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async generateReport(params: AssemblyLineGenerateReportViewParams): Promise<void> {\n const { AssemblyLineGenerateReportView } = await import('apps/assembly-line/views/generate-report/AssemblyLineGenerateReportView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLineGenerateReportView\n params={params}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editReportTemplate(id: string): Promise<void> {\n const { AssemblyLineEditReportTemplateView } = await import('apps/assembly-line/views/edit-report-template/AssemblyLineEditReportTemplateView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLineEditReportTemplateView\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteReportTemplate(id: string): Promise<void> {\n const { AssemblyLineDeleteReportTemplateView } = await import('apps/assembly-line/views/delete-report-template/AssemblyLineDeleteReportTemplateView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLineDeleteReportTemplateView\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editVideo(\n id: string,\n stage: AssemblyLineStage,\n initialField: AssemblyLineVideoField,\n params: SharedAssemblyLinePopupQueryParams = {}\n ): Promise<void> {\n const { EditVideoContainerView } = await import('apps/assembly-line/views/edit-video/EditVideoContainerView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditVideoContainerView\n id={id}\n stage={stage}\n initialField={initialField}\n closePopup={() => this.layout.closePopup()}\n pipelineId={params.pipelineId}\n view={params.view}\n />\n );\n }\n\n public async editClassification(\n id: string,\n stage: AssemblyLineStage,\n initialField: AssemblyLineTopicField,\n params: SharedAssemblyLinePopupQueryParams = {}\n ): Promise<void> {\n const { EditTopicContainerView } = await import('apps/assembly-line/views/edit-classification/EditTopicContainerView');\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditTopicContainerView\n id={id}\n stage={stage}\n initialField={initialField}\n closePopup={() => this.layout.closePopup()}\n pipelineId={params.pipelineId}\n theme={params.theme}\n />\n );\n }\n\n public async editDashboard(\n id: string,\n stage: AssemblyLineStage,\n initialField: AssemblyLineDashboardField,\n params: SharedAssemblyLinePopupQueryParams = {}\n ): Promise<void> {\n const { EditDashboardContainerView } = await import('apps/assembly-line/views/edit-dashboard/EditDashboardContainerView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditDashboardContainerView\n id={id}\n stage={stage}\n initialField={initialField}\n closePopup={() => this.layout.closePopup()}\n pipelineId={params.pipelineId}\n />\n );\n }\n\n public async deleteVideo(id: string, stage: AssemblyLineStage): Promise<void> {\n const { DeleteVideoView } = await import('apps/assembly-line/views/delete-video/DeleteVideoView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteVideoView id={id} stage={stage} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async archiveVideo(id: string, stage: AssemblyLineStage): Promise<void> {\n const { ArchiveVideoView } = await import('apps/assembly-line/views/archive-video/ArchiveVideoView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ArchiveVideoView id={id} stage={stage} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async wizard(params: AssemblyLineBulkActionsQueryParams): Promise<void> {\n const { AssemblyLineWizardView } = await import('apps/assembly-line/views/wizard/AssemblyLineWizardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLineWizardView\n stage={params.stage}\n presentationId={params.presentationId}\n closePopup={() => this.layout.closePopup()}\n queryParams={params.queryParams}\n pipelineId={params.pipelineId}\n view={params.view}\n />\n );\n }\n\n public async saveQuickFilter(params: AssemblyLineQueryParams & { stage: AssemblyLineStage }): Promise<void> {\n const { SaveQuickFilterView } = await import('apps/assembly-line/views/save-quick-filter/SaveQuickFilterView');\n \n const { stage, ...assemblyLineQueryParams } = params;\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <SaveQuickFilterView\n stage={stage}\n queryParams={assemblyLineQueryParams}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editQuickFilter(id: string, stage: AssemblyLineStage): Promise<void> {\n const { EditQuickFilterView } = await import('apps/assembly-line/views/edit-quick-filter/EditQuickFilterView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditQuickFilterView\n id={id}\n stage={stage}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteQuickFilter(id: string, stage: AssemblyLineStage): Promise<void> {\n const { DeleteQuickFilterView } = await import('apps/assembly-line/views/delete-quick-filter/DeleteQuickFilterView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteQuickFilterView\n id={id}\n stage={stage}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async newInteractive(videoId: string): Promise<void> {\n const { NewInteractiveView } = await import('apps/interactives/views/new-interactive/NewInteractiveView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewInteractiveView parentId={videoId} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async giveFeedback(videoId: string): Promise<void> {\n const { AssemblyLineGiveFeedbackView } = await import('apps/assembly-line/views/give-feedback/AssemblyLineGiveFeedback');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AssemblyLineGiveFeedbackView id={videoId} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async videoDashboards(videoId: string): Promise<void> {\n const { VideoDashboardsView } = await import('apps/assembly-line/views/video-dashboards/VideoDashboardsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <VideoDashboardsView id={videoId} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async pictureInPicture(videoId: string): Promise<void> {\n const { PictureInPictureView } = await import('./views/picture-in-picture/PictureInPictureView');\n \n this.layout.showChildView(\n LayoutRegions.PICTURE_IN_PICTURE,\n <PictureInPictureView videoId={videoId} close={() => this.layout.closePictureInPicture()} />\n );\n }\n\n public async viewAssignees(id: string): Promise<void> {\n const { VideoAssigneesView } = await import('./views/view-assignees/VideoAssigneesView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <VideoAssigneesView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\nimport { RecentItemHelper } from 'libs/shared/utils/RecentItemHelper';\n\nimport { AppChannels } from 'shared/constants';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { SubjectMemberType } from 'shared/enums';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts/curator-layout';\n\nimport { RECENT_CLIPS_KEY, RECENT_CLIPS_LIMIT } from 'apps/clips/views/find-clips/FindClipsView';\n\nclass ClipsAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CLIPS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/clips(/)': 'index',\n 'manage/clips/:id(/)': 'previewClip',\n 'manage/clips/:id/edit(/)': 'editClipDetails',\n 'manage/clips/:id/classifications(/)': 'editClipClassifications',\n 'manage/clips/:id/audiences(/)': 'editClipAudiences',\n 'manage/clips/:id/curation(/)': 'editClipCuration',\n 'manage/clips/:id/interactives(/)': 'editClipInteractives',\n 'manage/clips/:id/tags(/)': 'editClipTags',\n 'manage/clips/:id/glance(/)': 'editClipGlance',\n 'manage/clips/:id/resources(/)': 'editClipResources',\n 'manage/videos/:id/clips/new(/)': 'createClip'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'uploadImage',\n 'createClipDetails',\n 'editClipDetails',\n 'removeClipClassification',\n 'deleteClip',\n 'archiveClip',\n 'publishClip'\n ];\n }\n}\n\nexport class ClipsApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Clips Application';\n }\n\n public static get router(): any {\n return ClipsAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CLIPS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async index(): Promise<void> {\n const { FindClipsView } = await import('apps/clips/views/find-clips/FindClipsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <FindClipsView />\n );\n }\n\n public async previewClip(id: string): Promise<void> {\n const { PreviewClipView } = await import('apps/clips/views/preview-clip/PreviewClipView');\n \n this.addRecentClip(id);\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <PreviewClipView id={id} />\n );\n }\n\n public async createClip(videoId: string): Promise<void> {\n const { CreateClipView } = await import('apps/clips/views/create-clip/CreateClipView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <CreateClipView videoId={videoId} />);\n }\n\n public async createClipDetails(videoId: string, params: HashObject = {}): Promise<void> {\n const { CreateClipDetailsView } = await import('apps/clips/views/create-clip/CreateClipDetailsView');\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateClipDetailsView\n videoId={videoId}\n startTime={params.startTime}\n endTime={params.endTime}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editClipDetails(clipId: string): Promise<void> {\n const { EditClipDetailsView } = await import('apps/clips/views/edit-clip-details/EditClipDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClipDetailsView clipId={clipId} />\n );\n }\n\n public async editClipClassifications(clipId: string): Promise<void> {\n const { EditClipClassificationsView } = await import('apps/clips/views/edit-clip-classifications/EditClipClassificationsView');\n \n this.addRecentClip(clipId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClipClassificationsView clipId={clipId} />);\n }\n\n public async editClipAudiences(clipId: string): Promise<void> {\n const { EditClipAudiencesView } = await import('apps/clips/views/edit-clip-audiences/EditClipAudiencesView');\n \n this.addRecentClip(clipId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClipAudiencesView clipId={clipId} />);\n }\n\n public async editClipCuration(clipId: string): Promise<void> {\n const { EditClipCurationView } = await import('apps/clips/views/edit-clip-curation/EditClipCurationView');\n \n this.addRecentClip(clipId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClipCurationView clipId={clipId} />);\n }\n\n public async editClipInteractives(clipId: string): Promise<void> {\n const { EditClipInteractivesView } = await import('apps/clips/views/edit-clip-interactives/EditClipInteractivesView');\n \n this.addRecentClip(clipId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClipInteractivesView clipId={clipId} />);\n }\n\n public async editClipTags(clipId: string): Promise<void> {\n const { EditClipTagsView } = await import('apps/clips/views/edit-clip-tags/EditClipTagsView');\n \n this.addRecentClip(clipId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClipTagsView clipId={clipId} />);\n }\n\n public async editClipGlance(clipId: string): Promise<void> {\n const { EditClipGlanceView } = await import('apps/clips/views/edit-clip-glance/EditClipGlanceView');\n \n this.addRecentClip(clipId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClipGlanceView clipId={clipId} />);\n }\n\n public async editClipResources(clipId: string): Promise<void> {\n const { EditClipResourcesView } = await import('apps/clips/views/edit-clip-resources/EditClipResourcesView');\n \n this.addRecentClip(clipId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClipResourcesView clipId={clipId} />);\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async removeClipClassification(\n classificationId: string,\n memberId: string,\n memberType: SubjectMemberType\n ): Promise<void> {\n const { RemoveClassificationMemberView } = await import('shared/views/remove-classification-member');\n \n const props = {\n classificationId,\n memberId,\n memberType,\n closePopup: () => this.layout.closePopup()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationMemberView {...props} />);\n }\n\n public async archiveClip(id: string): Promise<void> {\n const { ArchiveObjectView } = await import('shared/views/archive-object/ArchiveObjectView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ArchiveObjectView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async deleteClip(id: string): Promise<void> {\n const { DeleteClipView } = await import('apps/clips/views/delete-clip/DeleteClipView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteClipView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async publishClip(id: string): Promise<void> {\n const { PublishObjectView } = await import('shared/views/publish-object/PublishObjectView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <PublishObjectView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n private addRecentClip(id: string): void {\n RecentItemHelper.addRecentItem(RECENT_CLIPS_KEY, LocalStorageHelper, {\n id: id.toString(),\n limit: RECENT_CLIPS_LIMIT,\n expire: false\n });\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { Core } from 'libs/common/core';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\n\nimport { AppChannels, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass CompaniesAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.COMPANIES;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/companies(/)': 'companies',\n 'manage/companies/new(/)': 'newCompany',\n 'manage/companies/:id(/)': 'editCompany',\n 'manage/companies/:id/curation(/)': 'editCompanyCuration',\n 'manage/companies/:id/dashboards(/)': 'companyDashboards',\n 'manage/companies/:id/presentations/:pid/dashboards(/)': 'editDashboards'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'uploadImage',\n 'newCompanyDashboard',\n 'deleteDashboard',\n 'editCompanyDashboardDetails',\n 'publishDashboard'\n ];\n }\n}\nexport class CompaniesApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Companies Application';\n }\n\n public static get router(): any {\n return CompaniesAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.COMPANIES;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n public async companies(params: ObjectHash): Promise<void> {\n const { CompaniesView } = await import('apps/companies/views');\n \n const { cursor } = params;\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CompaniesView context='clickview' cursor={cursor} />\n );\n }\n\n public async newCompany(): Promise<void> {\n const { NewCompanyView } = await import('apps/companies/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewCompanyView context='clickview' />);\n }\n\n public async editCompany(id: string): Promise<void> {\n const { EditCompanyView } = await import('apps/companies/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditCompanyView context='clickview' companyId={id} />);\n }\n\n public async editCompanyCuration(id: string): Promise<void> {\n const { EditCompanyCurationView } = await import('apps/companies/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditCompanyCurationView companyId={id} />);\n }\n \n public async companyDashboards(id: string): Promise<void> {\n const { CompanyDashboardsView } = await import('./views/company-dashboards/CompanyDashboardsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <CompanyDashboardsView companyId={id} />);\n }\n\n public async editDashboards(companyId: string, presentationId: string): Promise<void> {\n const { EditCompanyDashboardsView } = await import('apps/companies/views/edit-dashboards/EditCompanyDashboardsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditCompanyDashboardsView\n companyId={companyId}\n presentationId={presentationId}\n context='clickview'\n />\n );\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async newCompanyDashboard(companyId: string, presentationId: string): Promise<void> {\n const { NewCompanyDashboardView } = await import('apps/companies/views/new-dashboard/NewCompanyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewCompanyDashboardView\n companyId={companyId}\n presentationId={presentationId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteDashboard(dashboardId: string): Promise<void> {\n const { RemoveCompanyDashboardView } = await import('apps/companies/views/remove-dashboard/RemoveCompanyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveCompanyDashboardView\n dashboardId={dashboardId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editCompanyDashboardDetails(dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('apps/dashboard-editor/views/edit-dashboard-details/EditDashboardDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditDashboardDetailsView\n dashboardId={dashboardId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async publishDashboard(\n dashboardId: string,\n dashboardToArchiveId: string\n ): Promise<void> {\n const { PublishDashboardView } = await import('shared/views/publish-dashboard/PublishDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <PublishDashboardView\n dashboardToPublishId={dashboardId}\n dashboardToArchiveId={\n typeof dashboardToArchiveId === 'string' ?\n dashboardToArchiveId :\n undefined}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { Core } from 'libs/common/core';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { IImageMinDimensions } from 'libs/shared/constants/ImageSizes';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\n\nimport { AppChannels, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass ContentPartnersAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CONTENT_PARTNERS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/channels': 'contentPartners',\n 'manage/channels/new': 'newContentPartner',\n 'manage/channels/manage-featured-channels': 'manageFeaturedChannels',\n 'manage/channels/:id': 'editContentPartner',\n 'manage/channels/:id/dashboards': 'contentPartnerDashboards',\n 'manage/channels/:id/reports': 'viewReports',\n 'manage/channels/:id/regions-mapping': 'regionsMapping',\n 'manage/channels/:id/videos': 'viewVideos',\n 'manage/channels/:id/series': 'viewSeries'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'uploadImage',\n 'newContentPartnerDashboard',\n 'deleteDashboard',\n 'editDashboardDetails',\n 'publishDashboard',\n 'deleteContentPartner',\n 'deleteContentPartnerVideos',\n 'deleteContentPartnerSeries',\n 'addVideos',\n 'addSeries',\n 'copyDashboard'\n ];\n }\n}\nexport class ContentPartnersApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'ContentPartner Application';\n }\n\n public static get router(): any {\n return ContentPartnersAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CONTENT_PARTNERS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n public async contentPartners(params: ObjectHash): Promise<void> {\n const { ContentPartnersView } = await import('apps/content-partners/views/content-partners/ContentPartnersView');\n \n const { cursor } = params;\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContentPartnersView cursor={cursor} />\n );\n }\n\n public async manageFeaturedChannels(): Promise<void> {\n const { ManageFeaturedChannelsView } = await import('apps/content-partners/views/manage-featured-channels/ManageFeaturedChannelsView');\n\n this.layout.showChildView(LayoutRegions.CONTENT, <ManageFeaturedChannelsView />);\n }\n\n public async newContentPartner(): Promise<void> {\n const { NewContentPartnerView } = await import('apps/content-partners/views/new-content-partner/NewContentPartnerView');\n\n this.layout.showChildView(LayoutRegions.CONTENT, <NewContentPartnerView />);\n }\n\n public async editContentPartner(id: string): Promise<void> {\n const { EditContentPartnerView } = await import('apps/content-partners/views/edit-content-partner/EditContentPartnerView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditContentPartnerView contentPartnerId={id} />);\n }\n\n public async contentPartnerDashboards(id: string): Promise<void> {\n const { ContentPartnerDashboardsView } = await import('apps/content-partners/views/content-partner-dashboards/ContentPartnerDashboardsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <ContentPartnerDashboardsView id={id} />);\n }\n\n public async uploadImage(imageType: ImageType, params: { overrideDimensions?: IImageMinDimensions }): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n overrideDimensions={params.overrideDimensions}\n />\n );\n }\n\n public async deleteContentPartner(id: string): Promise<void> {\n const { DeleteContentPartnerView } = await import('apps/content-partners/views/delete-content-partner/DeleteContentPartnerView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteContentPartnerView\n contentPartnerId={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async newContentPartnerDashboard(companyId: string, slug: string): Promise<void> {\n const { NewDashboardView } = await import('apps/content-partners/views/new-dashboard/NewDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewDashboardView\n id={companyId}\n slug={slug}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteDashboard(dashboardId: string): Promise<void> {\n const { RemoveCompanyDashboardView } = await import('apps/companies/views/remove-dashboard/RemoveCompanyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveCompanyDashboardView\n dashboardId={dashboardId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editDashboardDetails(dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('apps/dashboard-editor/views/edit-dashboard-details/EditDashboardDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditDashboardDetailsView\n dashboardId={dashboardId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async publishDashboard(\n dashboardId: string,\n dashboardToArchiveId: string\n ): Promise<void> {\n const { PublishDashboardView } = await import('shared/views/publish-dashboard/PublishDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <PublishDashboardView\n dashboardToPublishId={dashboardId}\n dashboardToArchiveId={\n typeof dashboardToArchiveId === 'string' ?\n dashboardToArchiveId :\n undefined}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async viewReports(id: string): Promise<void> {\n const { ContentPartnerReportsView } = await import('apps/content-partners/views/content-partner-reports/ContentPartnerReportsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContentPartnerReportsView\n contentPartnerId={id}\n />\n );\n }\n\n public async regionsMapping(id: string): Promise<void> {\n const { RegionsMappingView } = await import('apps/content-partners/views/regions-mapping/RegionsMappingView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <RegionsMappingView\n contentPartnerId={id}\n />\n );\n }\n\n public async viewVideos(id: string): Promise<void> {\n const { ContentPartnerVideosView } = await import('apps/content-partners/views/content-partner-videos/ContentPartnerVideosView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContentPartnerVideosView\n id={id}\n />\n );\n }\n\n public async viewSeries(id: string): Promise<void> {\n const { ContentPartnerSeriesView } = await import('apps/content-partners/views/content-partner-series/ContentPartnerSeriesView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContentPartnerSeriesView\n id={id}\n />\n );\n }\n\n public async deleteContentPartnerVideos(id: string, params: { videoIds: string[] }): Promise<void> {\n const { ContentPartnerDeleteObjectsView } = await import('apps/content-partners/views/content-partner-delete-objects/ContentPartnerDeleteObjectsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ContentPartnerDeleteObjectsView\n contentPartnerId={id}\n objectIds={params.videoIds}\n type='videos'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteContentPartnerSeries(id: string, params: { seriesIds: string[] }): Promise<void> {\n const { ContentPartnerDeleteObjectsView } = await import('apps/content-partners/views/content-partner-delete-objects/ContentPartnerDeleteObjectsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ContentPartnerDeleteObjectsView\n contentPartnerId={id}\n objectIds={params.seriesIds}\n type='series'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addVideos(id: string): Promise<void> {\n const { ContentPartnerAddObjectsView } = await import('apps/content-partners/views/content-partner-add-objects/ContentPartnerAddObjectsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ContentPartnerAddObjectsView\n contentPartnerId={id}\n type='videos'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async copyDashboard(dashboardId: string): Promise<void> {\n const { CopyDashboardView } = await import('apps/discover/views/copy-dashboard/CopyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyDashboardView\n dashboardId={dashboardId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addSeries(id: string): Promise<void> {\n const { ContentPartnerAddObjectsView } = await import('apps/content-partners/views/content-partner-add-objects/ContentPartnerAddObjectsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ContentPartnerAddObjectsView\n contentPartnerId={id}\n type='series'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n}\n","import { Core } from 'libs/common/backbone/index';\n\nlet shouldHideNav = false;\nlet shouldHideHeader = false;\nlet lockContentWidth = false;\nlet logoClick = true;\nlet showSearch = true;\n\nclass LayoutHelperSingleton extends Core.Service {\n // @ts-ignore\n public get name(): string {\n return 'LayoutHelper';\n }\n \n public shouldHideNav() {\n return shouldHideNav;\n }\n\n public disableNav() {\n shouldHideNav = true;\n }\n\n public enableNav() {\n shouldHideNav = false;\n }\n\n public shouldHideHeader() {\n return shouldHideHeader;\n }\n\n public disableHeader() {\n shouldHideHeader = true;\n }\n \n public enableHeader() {\n shouldHideHeader = false;\n }\n\n public lockContentWidth() {\n lockContentWidth = true;\n this.trigger('change:lockContentWidth');\n }\n\n public unlockContentWidth() {\n lockContentWidth = false;\n this.trigger('change:lockContentWidth');\n }\n\n public shouldLockContentWidth() {\n return !!lockContentWidth;\n }\n\n public shouldShowSearch() {\n return showSearch;\n }\n\n public enableSearch() {\n showSearch = true;\n }\n\n public disableSearch() {\n showSearch = false;\n }\n\n public enableLogoClick() {\n logoClick = true;\n }\n\n public disableLogoClick() {\n logoClick = false;\n }\n\n /**\n * If clicking on the logo in the top nav goes to the home page, we want to disable this\n * when students are attempting a open classroom share. - Sha\n */\n public shouldAllowLogoClick() {\n return logoClick;\n }\n}\n\nexport const LayoutHelper = new LayoutHelperSingleton();\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\nimport { ApplicationOptions } from 'backbone.marionette';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { EntityType, LocationContext, OperationDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { UserAuditLogQueryParams } from 'libs/shared/apps/user-manager/components/audit-log/components/audit-log-filters/UserAuditLogFilters';\nimport { UserWizardParams, UserWizardStatusParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserWizardParams';\nimport { BulkJobsQueryParams } from 'libs/shared/components/bulk-jobs-filters/BulkJobsFilters';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { MasterCustomerStatus } from 'libs/shared/interfaces/models/Customer';\nimport { LayoutHelper } from 'libs/shared/utils/LayoutHelper';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { FullScreenLayoutView, FullScreenLayoutViewOptions } from 'shared/layouts';\n\nimport { ConvertingWizardQueryParams } from 'apps/crm-studio/views/customers/customer-converting-wizard/interfaces/ConvertingWizardQueryParams';\nimport { SsoWizardQueryParams } from 'apps/crm-studio/views/customers/customer-sso-wizard/interfaces/SsoWizardQueryParams';\nimport { DomainVerificationStatus } from 'apps/crm-studio/views/domains/types';\nimport { NewOrganisationWizardQueryParams } from 'apps/crm-studio/views/organisations/new-organisation-wizard/interfaces/NewOrganisationWizardQueryParams';\nimport { RosteringWizardQueryParams } from 'apps/crm-studio/views/organisations/organisation-rostering-wizard/interface/RosteringWizardQueryParams';\nimport { OrganisationSsoWizardQueryParams } from 'apps/crm-studio/views/organisations/organisation-sso-wizard/interfaces/OrganisationSsoWizardQueryParams';\n\nclass CrmStudioAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CRM_STUDIO;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n // Customers\n 'crm-studio(/)': 'index',\n 'crm-studio/customers': 'customers',\n 'crm-studio/customers/:id/overview': 'customerOverview',\n 'crm-studio/customers/:id': 'customerOverview',\n 'crm-studio/customers/:id/pilot': 'customerPilot',\n 'crm-studio/customers/:id/options': 'customerOptions',\n 'crm-studio/customers/:id/cft': 'customerCft',\n 'crm-studio/customers/:id/content': 'customerContent',\n 'crm-studio/customers/:id/products': 'customerProducts',\n 'crm-studio/customers/:id/sso': 'customerSso',\n 'crm-studio/customers/:id/access-settings': 'customerAccessSettings',\n 'crm-studio/customers/:id/access-settings/domains': 'customerAccessSettingsDomain',\n 'crm-studio/customers/:id/access-settings/year-groups': 'customerAccessSettingsYearGroups',\n 'crm-studio/customers/:id/ip-auth': 'customerIpAuth',\n 'crm-studio/customers/:id/domains': 'customerDomains',\n 'crm-studio/customers/:id/customer-library/:libId': 'customerLibrary',\n 'crm-studio/customers/:id/shared-library/:libId': 'sharedLibrary',\n 'crm-studio/customers/:id/users': 'customerUsers',\n 'crm-studio/customers/:id/users/students(/)': 'manageStudents',\n 'crm-studio/customers/:id/users/staff(/)': 'manageStaff',\n\n // converting wizard\n 'crm-studio/customers/:id/converting(/)': 'customerConvertingWizard',\n 'crm-studio/customers/:id/converting/salesforce': 'customerConvertingWizardSalesforce',\n 'crm-studio/customers/:id/converting/cft': 'customerConvertingWizardCft',\n 'crm-studio/customers/:id/converting/customisations': 'customerConvertingWizardCustomisations',\n 'crm-studio/customers/:id/converting/overview': 'customerConvertingWizardOverview',\n\n // sso wizard\n 'crm-studio/customers/:id/sso-wizard': 'customerSsoWizard',\n 'crm-studio/customers/:id/sso-wizard/provider': 'customerSsoWizardProvider',\n 'crm-studio/customers/:id/sso-wizard/mapping': 'customerSsoWizardMapping',\n 'crm-studio/customers/:id/sso-wizard/year-group': 'customerSsoWizardYearGroup',\n 'crm-studio/customers/:id/sso-wizard/review': 'customerSsoWizardReview',\n 'crm-studio/customers/:id/sso-wizard/create-bindings': 'customerSsoWizardCreateBindings',\n\n // Organisations\n 'crm-studio/organisations': 'organisations',\n 'crm-studio/organisations/:id': 'organisationOverview',\n 'crm-studio/organisations/:id/overview': 'organisationOverview',\n 'crm-studio/organisations/:id/sso': 'organisationSso',\n 'crm-studio/organisations/:id/domains': 'organisationDomains',\n 'crm-studio/organisations/:id/feature-flags': 'organisationFeatureFlags',\n 'crm-studio/organisations/:id/rostering': 'organisationRostering',\n 'crm-studio/organisations/:id/rostering/settings': 'organisationRosteringSettings',\n\n 'crm-studio/organisations/new': 'newOrganisationWizard',\n 'crm-studio/organisations/new/details': 'newOrganisationWizardDetails',\n 'crm-studio/organisations/new/confirm': 'newOrganisationWizardConfirm',\n\n // org sso wizard\n 'crm-studio/organisations/:id/sso-wizard': 'organisationSsoWizard',\n 'crm-studio/organisations/:id/sso-wizard/provider': 'organisationSsoWizardProvider',\n 'crm-studio/organisations/:id/sso-wizard/mapping': 'organisationSsoWizardMapping',\n 'crm-studio/organisations/:id/sso-wizard/review': 'organisationSsoWizardReview',\n\n // rostering wizard\n 'crm-studio/organisations/:id/rostering-wizard': 'organisationRosteringWizard',\n 'crm-studio/organisations/:id/rostering-wizard/select-provider': 'organisationRosteringWizardSelectProvider',\n 'crm-studio/organisations/:id/rostering-wizard/set-up-rostering': 'organisationRosteringWizardSetUpRostering',\n 'crm-studio/organisations/:id/rostering-wizard/select-external': 'organisationRosteringWizardSelectExternal',\n 'crm-studio/organisations/:id/rostering-wizard/mapping': 'organisationRosteringWizardMapping',\n 'crm-studio/organisations/:id/rostering-wizard/confirmation': 'organisationRosteringWizardConfirmation',\n\n // tv status\n 'crm-studio/tv-status': 'tvStatus',\n\n // users\n 'crm-studio/users': 'users',\n 'crm-studio/users/:id': 'userOverview',\n 'crm-studio/users/:id/usage': 'userWorkspaceUsage',\n 'crm-studio/users/:id/settings': 'userSettings',\n 'crm-studio/users/:id/feature-flags': 'userFeatureFlags',\n 'crm-studio/users/:id/curator-groups': 'userManageCuratorGroups',\n 'crm-studio/users/:id/schools': 'userCustomerSchools',\n 'crm-studio/customers/:id/users/wizard/review-accounts(/)': 'wizardReviewAccounts',\n 'crm-studio/customers/:id/users/wizard/select-action(/)': 'wizardSelectAction',\n 'crm-studio/customers/:id/users/wizard/action-details/year-group-rollover(/)': 'wizardYearGroupRolloverActionDetails',\n 'crm-studio/customers/:id/users/wizard/action-details/change-year-group(/)': 'wizardChangeYearGroupActionDetails',\n 'crm-studio/customers/:id/users/wizard/action-details/delete(/)': 'wizardDeleteActionDetails',\n 'crm-studio/customers/:id/users/wizard/action-details/activation(/)': 'wizardActivationActionDetails',\n 'crm-studio/customers/:id/users/wizard/action-details/add-to-classroom(/)': 'wizardAddToClassroomActionDetails',\n 'crm-studio/customers/:id/users/wizard/action-details/reset-password(/)': 'wizardResetPasswordActionDetails',\n 'crm-studio/customers/:id/users/wizard/action-details/remove-users(/)': 'wizardRemoveFromSchoolActionDetails',\n 'crm-studio/customers/:id/users/wizard/confirmation/year-group-rollover(/)': 'wizardYearGroupRolloverConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/change-year-group(/)': 'wizardChangeYearGroupConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/delete(/)': 'wizardDeleteConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/deactivate(/)': 'wizardDeactivateConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/reactivate(/)': 'wizardReactivateConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/reset-email(/)': 'wizardResetEmailConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/add-to-classroom(/)': 'wizardAddToClassroomConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/reset-password(/)': 'wizardResetPasswordConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/activation-email(/)': 'wizardActivationEmailConfirmation',\n 'crm-studio/customers/:id/users/wizard/confirmation/remove-users(/)': 'wizardRemoveFromSchoolConfirmation',\n 'crm-studio/customers/:id/users/wizard/status/polling(/)': 'wizardStatusPolling',\n 'crm-studio/customers/:id/users/wizard/status/complete(/)': 'wizardStatusComplete',\n\n // user upload wizard\n 'crm-studio/customers/:id/users/upload/review-accounts(/)': 'userUploadReviewAccounts',\n 'crm-studio/customers/:id/users/upload/fix-duplicates(/)': 'userUploadFixDuplicates',\n 'crm-studio/customers/:id/users/upload/review-existing-accounts(/)': 'userUploadReviewExistingAccounts',\n 'crm-studio/customers/:id/users/upload/confirmation(/)': 'userUploadConfirmation',\n 'crm-studio/customers/:id/users/upload/status/polling(/)': 'userUploadStatusPolling',\n 'crm-studio/customers/:id/users/upload/status/complete(/)': 'userUploadStatusComplete',\n \n 'crm-studio/customers/:id/users/bulk-action-history(/)': 'auditLog',\n\n 'crm-studio/domains': 'domains',\n 'crm-studio/domains/review': 'domainsReview',\n 'crm-studio/domains/final-review': 'domainsFinalReview',\n\n 'crm-studio/orgId-manager(/)': 'manageOrgId'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'customerOverview',\n 'updateCustomerMasterStatus',\n 'editPilot',\n 'removePilot',\n 'editCustomerName',\n 'editCustomerStatus',\n 'updateOrganisationName',\n 'addCustomersToOrganisation',\n 'removeCustomerFromOrganisation',\n 'removeOrganisationSsoMapping',\n 'editUserCredit',\n 'editCustomerType',\n 'changePassword',\n 'removeUserFromCustomer',\n 'toggleUserStatus',\n 'addUserToCustomer',\n 'manageYearGroup',\n 'bulkRemoveUsers',\n 'crmIdSelect',\n 'removeCustomerSsoMapping',\n 'removeLibrarySubscriber',\n 'addLibrarySubscriber',\n 'customerUsers',\n 'createUser',\n 'addNewUsers',\n 'editUser',\n 'bulkRemoveUsers',\n 'toggleUserStatus',\n 'exportUserList',\n 'bulkUserUploadPopup',\n 'bulkUserUploadSuccess',\n 'manageUserCuratorGroups',\n 'deleteUserEmail',\n 'removeUserFromCustomer',\n 'addUserToCustomer',\n 'changePassword',\n 'bulkActionSummary',\n 'editPilot',\n 'removePilot',\n 'editUserCredit',\n 'addCustomerIpAuthRange',\n 'removeCustomerIpAuthRange',\n 'disableCustomerIpAuth',\n 'generateLicenseKey',\n 'customerSsoWizardCreateIdpPopup',\n 'customerSsoWizardEditIdpPopup',\n 'customerSsoWizardDeleteIdpPopup',\n 'domainAddPopup',\n 'domainChangeStatusPopup',\n 'tvStatusSet',\n 'customiseCft'\n ];\n }\n\n // @ts-ignore\n protected get externalRoutes(): ObjectHash {\n return {\n '/': 'exit',\n 'customers/:id(/)': 'manageCustomer',\n 'customers/:id/users/:id/options(/)': 'editUserOptions'\n };\n }\n}\n\nexport class CrmStudioApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n public initialize(options: ApplicationOptions): void {\n super.initialize(options);\n const footer = document.getElementById('footer');\n if (footer) {\n footer.style.display = 'block';\n }\n }\n\n public onBeforeAction(): void {\n LayoutHelper.unlockContentWidth();\n }\n\n public onDestroy(): void {\n LayoutHelper.unlockContentWidth();\n }\n\n // @ts-ignore\n public get name(): string {\n return 'CRM Studio Application';\n }\n\n public static get router(): any {\n return CrmStudioAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CRM_STUDIO;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: true\n }\n };\n }\n\n public index(): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.CUSTOMERS\n }, { replace: true });\n }\n\n public async customers(params: HashObject): Promise<void> {\n const { CustomersView } = await import('apps/crm-studio/views/customers/CustomersView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomersView\n query={params.query}\n page={params.page}\n customerStatus={params.customerStatus}\n customerType={params.customerType}\n status={params.status}\n cursor={params.cursor}\n crmId={params.crmId}\n />\n );\n }\n\n public async customerOverview(id: string): Promise<void> {\n const { CustomerOverviewView } = await import('apps/crm-studio/views/customers/CustomerOverviewView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerOverviewView id={id} />\n );\n }\n\n public async customerPilot(id: string): Promise<void> {\n const { CustomerPilotView } = await import('apps/crm-studio/views/customers/CustomerPilotView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerPilotView customerId={id} />\n );\n }\n\n public customerConvertingWizard(id: string): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.CUSTOMER_CONVERTING_WIZARD_SALESFORCE,\n args: [id]\n }, { replace: true });\n }\n\n public async customerConvertingWizardSalesforce(id: string, queryParams: ConvertingWizardQueryParams): Promise<void> {\n const { CustomerConvertingWizardSalesforceView } = await import('apps/crm-studio/views/customers/customer-converting-wizard/CustomerConvertingWizardSalesforceView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerConvertingWizardSalesforceView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerConvertingWizardCft(id: string, queryParams: ConvertingWizardQueryParams): Promise<void> {\n const { CustomerConvertingWizardCftView } = await import('apps/crm-studio/views/customers/customer-converting-wizard/CustomerConvertingWizardCftView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerConvertingWizardCftView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerConvertingWizardCustomisations(\n id: string,\n queryParams: ConvertingWizardQueryParams\n ): Promise<void> {\n const { CustomerConvertingWizardCustomisationsView } = await import('apps/crm-studio/views/customers/customer-converting-wizard/CustomerConvertingWizardCustomisationsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerConvertingWizardCustomisationsView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerConvertingWizardOverview(\n id: string,\n queryParams: ConvertingWizardQueryParams\n ): Promise<void> {\n const { CustomerConvertingWizardOverviewView } = await import('apps/crm-studio/views/customers/customer-converting-wizard/CustomerConvertingWizardOverviewView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerConvertingWizardOverviewView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerCft(id: string): Promise<void> {\n const { CustomerCftView } = await import('apps/crm-studio/views/customers/CustomerCftView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerCftView id={id} />\n );\n }\n\n public async customiseCft(customerId: string, cft: string): Promise<void> {\n const { CustomiseCftView } = await import('apps/crm-studio/views/customers/CustomiseCftView');\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CustomiseCftView\n customerId={customerId}\n cft={cft}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async customerOptions(id: string): Promise<void> {\n const { CustomerOptionsView } = await import('apps/crm-studio/views/customers/CustomerOptionsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerOptionsView id={id} />\n );\n }\n\n public async customerSso(id: string): Promise<void> {\n const { CustomerSsoView } = await import('apps/crm-studio/views/customers/CustomerSsoView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerSsoView id={id} />\n );\n }\n\n public customerSsoWizard(id: string): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.CUSTOMER_SSO_WIZARD_PROVIDER,\n args: [id]\n }, { replace: true });\n }\n\n public async customerSsoWizardProvider(id: string, queryParams: SsoWizardQueryParams): Promise<void> {\n const { CustomerSsoWizardProviderView } = await import('apps/crm-studio/views/customers/customer-sso-wizard/CustomerSsoWizardProvider');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerSsoWizardProviderView id={id} queryParams={queryParams} />\n );\n }\n\n public async generateLicenseKey(id: string): Promise<void> {\n const { CustomerSsoWizardGenerateLicenseKeyView } = await import('apps/crm-studio/views/customers/customer-sso-wizard/generate-license-key/CustomerSsoWizardGenerateLicenseKeyView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CustomerSsoWizardGenerateLicenseKeyView\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async customerSsoWizardMapping(id: string, queryParams: SsoWizardQueryParams): Promise<void> {\n const { CustomerSsoWizardMappingView } = await import('apps/crm-studio/views/customers/customer-sso-wizard/CustomerSsoWizardMapping');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerSsoWizardMappingView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerSsoWizardYearGroup(id: string, queryParams: SsoWizardQueryParams): Promise<void> {\n const { CustomerSsoWizardYearGroupContainerView } = await import('apps/crm-studio/views/customers/customer-sso-wizard/CustomerSsoWizardYearGroupContainerView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerSsoWizardYearGroupContainerView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerSsoWizardReview(id: string, queryParams: SsoWizardQueryParams): Promise<void> {\n const { CustomerSsoWizardReviewView } = await import('apps/crm-studio/views/customers/customer-sso-wizard/CustomerSsoWizardReview');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerSsoWizardReviewView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerSsoWizardCreateBindings(id: string, queryParams: SsoWizardQueryParams): Promise<void> {\n const { CustomerSsoWizardCreateBindingsView } = await import('apps/crm-studio/views/customers/customer-sso-wizard/CustomerSsoWizardCreateBindingsView');\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerSsoWizardCreateBindingsView id={id} queryParams={queryParams} />\n );\n }\n\n public async customerSsoWizardCreateIdpPopup(customerId: string, params: { isOrg?: boolean }): Promise<void> {\n const { CreateIdpPopupView } = await import('apps/crm-studio/views/shared/CreateIdpPopupView');\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateIdpPopupView\n entityId={customerId}\n isOrg={params.isOrg}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async customerSsoWizardEditIdpPopup(customerId: string, params: HashObject): Promise<void> {\n const { EditIdpPopupView } = await import('apps/crm-studio/views/shared/EditIdpPopupView');\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditIdpPopupView\n entityId={customerId}\n idpId={params.idpId}\n isOrg={params.isOrg}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async customerSsoWizardDeleteIdpPopup(idpId: string, params: HashObject): Promise<void> {\n const { DeleteIdpPopupView } = await import('apps/crm-studio/views/shared/DeleteIdpPopupView');\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteIdpPopupView\n idpId={idpId}\n isOrg={params.isOrg}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async customerLibrary(id: string, libId: string): Promise<void> {\n const { CustomerLibraryView } = await import('apps/crm-studio/views/customers/CustomerLibraryView');\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerLibraryView id={id} libId={libId} type='customer' />\n );\n }\n\n public async sharedLibrary(id: string, libId: string): Promise<void> {\n const { CustomerLibraryView } = await import('apps/crm-studio/views/customers/CustomerLibraryView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerLibraryView id={id} libId={libId} type='shared' />\n );\n }\n\n public async removeLibrarySubscriber(customerId: string, libraryId: string): Promise<void> {\n const { RemoveLibrarySubscriberView } = await import('apps/crm-studio/views/customers/RemoveLibrarySubscriberView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveLibrarySubscriberView\n libraryId={libraryId}\n customerId={customerId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addLibrarySubscriber(libraryId: string): Promise<void> {\n const { AddLibrarySubscriberView } = await import('apps/crm-studio/views/customers/AddLibrarySubscriber');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddLibrarySubscriberView\n libraryId={libraryId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async organisations(params: HashObject): Promise<void> {\n const { OrganisationsView } = await import('apps/crm-studio/views/organisations/OrganisationsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationsView query={params.query} cursor={params.cursor} />\n );\n }\n\n public async organisationOverview(id: string): Promise<void> {\n const { OrganisationOverviewView } = await import('apps/crm-studio/views/organisations/OrganisationOverviewView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationOverviewView id={id} />\n );\n }\n\n public async organisationSso(id: string): Promise<void> {\n const { OrganisationSsoView } = await import('apps/crm-studio/views/organisations/OrganisationSsoView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationSsoView id={id} />\n );\n }\n\n public async organisationDomains(id: string): Promise<void> {\n const { OrganisationDomainsView } = await import('apps/crm-studio/views/organisations/OrganisationDomainsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationDomainsView id={id} />\n );\n }\n\n public organisationSsoWizard(id: string): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.ORGANISATION_SSO_WIZARD_PROVIDER,\n args: [id]\n });\n }\n\n public async removeOrganisationSsoMapping(id: string, idpId: string): Promise<void> {\n const { RemoveOrganisationSsoMappingView } = await import('apps/crm-studio/views/organisations/RemoveOrganisationSsoMappingView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveOrganisationSsoMappingView\n id={id}\n idpId={idpId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async organisationSsoWizardProvider(id: string, queryParams: OrganisationSsoWizardQueryParams): Promise<void> {\n const { OrgnisationSsoWizardProviderView } = await import('apps/crm-studio/views/organisations/organisation-sso-wizard/organisation-sso-wizard-provider/OrganisationSsoWizardProvider');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrgnisationSsoWizardProviderView id={id} queryParams={queryParams}/>\n );\n }\n\n public async organisationSsoWizardMapping(id: string, queryParams: OrganisationSsoWizardQueryParams): Promise<void> {\n const { OrganisationSsoWizardMappingView } = await import('apps/crm-studio/views/organisations/organisation-sso-wizard/organisation-sso-wizard-mapping/OrganisationSsoWizardMapping');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationSsoWizardMappingView id={id} queryParams={queryParams}/>\n );\n }\n\n public async organisationSsoWizardReview(id: string, queryParams: OrganisationSsoWizardQueryParams): Promise<void> {\n const { OrganisationSsoWizardReviewView } = await import('apps/crm-studio/views/organisations/organisation-sso-wizard/organisation-sso-wizard-review/OrganisationSsoWizardReview');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationSsoWizardReviewView id={id} queryParams={queryParams}/>\n );\n }\n\n public async organisationRostering(id: string, queryParams: BulkJobsQueryParams): Promise<void> {\n const { OrganisationRosteringView } = await import('apps/crm-studio/views/organisations/organisation-rostering-view/OrganisationRosteringView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationRosteringView id={id} queryParams={queryParams}/>\n );\n }\n\n public async organisationRosteringSettings(id: string): Promise<void> {\n const { OrganisationRosteringSettingsView } = await import('apps/crm-studio/views/organisations/organisation-rostering-setting-view/OrganisationRosteringSettingView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationRosteringSettingsView id={id} />\n );\n }\n\n public organisationRosteringWizard(id: string): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.ORGANISATION_ROSTERING_WIZARD_SELECT_PROVIDER,\n args: [id]\n }, { replace: true });\n }\n\n public async organisationRosteringWizardSelectProvider(\n id: string,\n queryParams: RosteringWizardQueryParams\n ): Promise<void> {\n const { RosteringWizardSelectProviderView } = await import('apps/crm-studio/views/organisations/organisation-rostering-wizard/organisation-rostering-wizard-select-provider/OrganisationRosteringWizardSelectProvider');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <RosteringWizardSelectProviderView id={id} queryParams={queryParams} />\n );\n }\n\n public async organisationRosteringWizardSetUpRostering(\n id: string,\n queryParams: RosteringWizardQueryParams\n ): Promise<void> {\n const { RosteringWizardSetUpRosteringView } = await import('apps/crm-studio/views/organisations/organisation-rostering-wizard/organisation-rostering-wizard-set-up-rostering/OrganisationRosteringWizardSetUpRostering');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <RosteringWizardSetUpRosteringView id={id} queryParams={queryParams} />\n );\n }\n\n public async organisationRosteringWizardSelectExternal(\n id: string,\n queryParams: RosteringWizardQueryParams\n ): Promise<void> {\n const { RosteringWizardSelectExternalView } = await import('apps/crm-studio/views/organisations/organisation-rostering-wizard/organisation-rostering-wizard-select-external/OrganisationRosteringWizardSelectExternal');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <RosteringWizardSelectExternalView id={id} queryParams={queryParams}/>\n );\n }\n\n public async organisationRosteringWizardMapping(\n id: string,\n queryParams: RosteringWizardQueryParams\n ): Promise<void> {\n const { RosteringWizardMappingView } = await import('apps/crm-studio/views/organisations/organisation-rostering-wizard/organisation-rostering-wizard-mapping/OrganisationRosteringWizardMapping');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <RosteringWizardMappingView id={id} queryParams={queryParams}/>\n );\n }\n\n public async organisationRosteringWizardConfirmation(\n id: string,\n queryParams: RosteringWizardQueryParams\n ): Promise<void> {\n const { RosteringWizardConfirmationView } = await import('apps/crm-studio/views/organisations/organisation-rostering-wizard/organisation-rostering-wizard-confirmation/OrganisationRosteringWizardConfirmation');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <RosteringWizardConfirmationView id={id} queryParams={queryParams}/>\n );\n }\n\n public async organisationFeatureFlags(id: string): Promise<void> {\n const { OrganisationFeatureFlagsView } = await import('apps/crm-studio/views/organisations/OrganisationFeatureFlagsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationFeatureFlagsView id={id} />\n );\n }\n\n public newOrganisationWizard(): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.NEW_ORGANISATION_WIZARD_DETAILS\n }, { replace: true });\n }\n\n public async newOrganisationWizardDetails(queryParams: NewOrganisationWizardQueryParams): Promise<void> {\n const { NewOrganisationWizardDetailsView } = await import('apps/crm-studio/views/organisations/new-organisation-wizard/NewOrganisationWizardDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <NewOrganisationWizardDetailsView queryParams={queryParams} />\n );\n }\n\n public async newOrganisationWizardConfirm(queryParams: NewOrganisationWizardQueryParams): Promise<void> {\n const { NewOrganisationWizardConfirmView } = await import('apps/crm-studio/views/organisations/new-organisation-wizard/NewOrganisationWizardConfirmView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <NewOrganisationWizardConfirmView queryParams={queryParams} />\n );\n }\n\n public async updateCustomerMasterStatus(id: string, currentStatus: MasterCustomerStatus): Promise<void> {\n const { UpdateCustomerMasterStatusView } = await import('apps/crm-studio/views/customers/UpdateCustomerMasterStatus');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <UpdateCustomerMasterStatusView\n id={id}\n currentStatus={currentStatus}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async customerContent(id: string): Promise<void> {\n const { CustomerContentView } = await import('apps/crm-studio/views/customers/CustomerContentView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerContentView id={id} />\n );\n }\n \n public async removePilot(customerId: string): Promise<void> {\n const { RemovePilotView } = await import('apps/crm-studio/views/customers/RemovePilotView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemovePilotView\n customerId={customerId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editPilot(customerId: string): Promise<void> {\n const { EditPilotView } = await import('apps/crm-studio/views/customers/EditPilotView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditPilotView\n customerId={customerId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async customerProducts(id: string): Promise<void> {\n const { CustomerProductsView } = await import('apps/crm-studio/views/customers/CustomerProductsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerProductsView id={id} />\n );\n }\n\n public async updateOrganisationName(id: string): Promise<void> {\n const { UpdateOrganisationNameView } = await import('apps/crm-studio/views/organisations/UpdateOrganisationNameView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <UpdateOrganisationNameView\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addCustomersToOrganisation(id: string): Promise<void> {\n const { AddCustomersToOrganisationView } = await import('apps/crm-studio/views/organisations/AddCustomersToOrganisationView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddCustomersToOrganisationView\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async removeCustomerFromOrganisation(id: string, customerId: string): Promise<void> {\n const { RemoveCustomerFromOrganisationView } = await import('apps/crm-studio/views/organisations/RemoveCustomerFromOrganisationView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveCustomerFromOrganisationView\n id={id}\n customerId={customerId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async updateOrganisationType(id: string): Promise<void> {\n const { UpdateOrganisationTypeView } = await import('apps/crm-studio/views/organisations/UpdateOrganisationType');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <UpdateOrganisationTypeView\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editCustomerName(id: string, currentValue: string): Promise<void> {\n const { EditCustomerNameView } = await import('apps/crm-studio/views/customers/EditCustomerNameView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditCustomerNameView\n id={id}\n currentValue={currentValue}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editCustomerType(id: string, currentValue: string): Promise<void> {\n const { EditCustomerTypeView } = await import('apps/crm-studio/views/customers/EditCustomerTypeView');\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditCustomerTypeView\n id={id}\n currentValue={currentValue}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editCustomerStatus(id: string, currentValue: string): Promise<void> {\n const { EditCustomerStatusView } = await import('apps/crm-studio/views/customers/EditCustomerStatusView');\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditCustomerStatusView\n id={id}\n currentValue={currentValue}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async users(params: HashObject): Promise<void> {\n const { UsersView } = await import('apps/crm-studio/views/users/UsersView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UsersView query={params?.query} cursor={params?.cursor} />\n );\n }\n\n public async userOverview(id: string): Promise<void> {\n const { UserOverviewView } = await import('apps/crm-studio/views/users/UserOverviewView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UserOverviewView id={id} />\n );\n }\n\n public async userWorkspaceUsage(id: string): Promise<void> {\n const { UserWorkspaceUsageView } = await import('apps/crm-studio/views/users/UserWorkspaceUsageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UserWorkspaceUsageView id={id} />\n );\n }\n\n public async userSettings(id: string): Promise<void> {\n const { UserSettingsView } = await import('apps/crm-studio/views/users/UserSettingsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UserSettingsView id={id} />\n );\n }\n\n public async userFeatureFlags(id: string): Promise<void> {\n const { UserFeatureFlagsView } = await import('apps/crm-studio/views/users/UsersFeatureFlagView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UserFeatureFlagsView id={id} />\n );\n }\n\n public async userManageCuratorGroups(id: string): Promise<void> {\n const { UsersManageCuratorGroupsView } = await import('apps/crm-studio/views/users/UsersManageCuratorGroupsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UsersManageCuratorGroupsView id={id}/>\n );\n }\n\n public async userCustomerSchools(id: string): Promise<void> {\n const { UsersCustomerSchoolsView } = await import('apps/crm-studio/views/users/UsersCustomerSchoolsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UsersCustomerSchoolsView id={id} />\n );\n }\n\n public customerAccessSettings(id: string): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.CUSTOMER_ACCESS_SETTINGS_DOMAIN,\n args: [id]\n }, { replace: true });\n }\n \n public async customerAccessSettingsDomain(id: string): Promise<void> {\n const { CustomerAccessSettingsDomainView } = await import('apps/crm-studio/views/customers/CustomerAccessSettingsDomainView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerAccessSettingsDomainView id={id} />\n );\n }\n\n public async customerAccessSettingsYearGroups(id: string): Promise<void> {\n const { CustomerAccessSettingsYearGroupsView } = await import('apps/crm-studio/views/customers/CustomerAccessSettingsYearGroupsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerAccessSettingsYearGroupsView id={id} />\n );\n }\n\n public async customerIpAuth(id: string): Promise<void> {\n const { CustomerIpAuthView } = await import('apps/crm-studio/views/customers/CustomerIpAuthView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerIpAuthView id={id} />\n );\n }\n\n public async customerDomains(id: string): Promise<void> {\n const { CustomerDomainsView } = await import('apps/crm-studio/views/customers/CustomerDomainsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerDomainsView id={id} />\n );\n }\n\n public async addCustomerIpAuthRange(id: string): Promise<void> {\n const { AddCustomerIpAuthRangeView } = await import('apps/crm-studio/views/customers/AddCustoemrIpAuthRange');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddCustomerIpAuthRangeView\n closePopup={() => this.layout.closePopup()}\n id={id}\n />\n );\n }\n\n public async removeCustomerIpAuthRange(customerId: string, ipAuthRangeId: string): Promise<void> {\n const { RemoveCustomerIpAuthRangeView } = await import('apps/crm-studio/views/customers/RemoveCustomerIpAuthRange');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveCustomerIpAuthRangeView\n closePopup={() => this.layout.closePopup()}\n customerId={customerId}\n ipAuthRangeId={ipAuthRangeId}\n />\n );\n }\n\n public async disableCustomerIpAuth(customerId: string, ipAuthId: string): Promise<void> {\n const { DisableCustomerIpAuthView } = await import('apps/crm-studio/views/customers/DisableCustomerIpAuth');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DisableCustomerIpAuthView\n customerId={customerId}\n ipAuthId={ipAuthId}\n closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async crmIdSelect(queryParams: ObjectHash): Promise<void> {\n const { CrmIdSelectView } = await import('apps/crm-studio/views/crm-id-select/CrmIdSelectView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CrmIdSelectView\n searchAction={queryParams.searchAction}\n closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async removeCustomerSsoMapping(id: string, idpId: string): Promise<void> {\n const { RemoveCustomerSsoMappingView } = await import('apps/crm-studio/views/customers/RemoveCustomerSsoMappingView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveCustomerSsoMappingView\n id={id}\n idpId={idpId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addNewUsers(customerId: string, params: { userType: UserGroup }): Promise<void> {\n const { AddNewUsersView } = await import('apps/crm-studio/views/users/add-new-users/AddNewUsersView');\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddNewUsersView\n customerId={customerId}\n userType={params.userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async createUser(customerId: string, params: { userType: UserGroup }): Promise<void> {\n const { CreateUserView } = await import('apps/crm-studio/views/users/create-user/CreateUserView');\n \n const analyticsOptions = {\n actionType: UserAction.Create,\n entity: EntityType.User,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: OperationDescriptor.Single,\n location: LocationContext.Popup\n };\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateUserView\n customerId={customerId}\n userType={params.userType}\n analyticsOptions={analyticsOptions}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async editUser(customerId: string, id: string, params: { cursor?: string }): Promise<void> {\n const { EditUserView } = await import('apps/crm-studio/views/users/edit-user/EditUserView');\n \n const analyticsOptions = {\n actionType: UserAction.Edit,\n entity: EntityType.User,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.EditUser\n };\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditUserView\n customerId={customerId}\n id={id}\n analyticsOptions={analyticsOptions}\n returnAppLinkCursor={params.cursor}\n />\n );\n }\n \n public async bulkRemoveUsers(customerId: string, params: { userType: UserGroup }): Promise<void> {\n const { BulkRemoveUsersView } = await import('apps/crm-studio/views/users/bulk-remove-users/BulkRemoveUsersView');\n \n const { userType } = params;\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <BulkRemoveUsersView\n customerId={customerId}\n userType={userType}\n closePopup={() => this.layout.closePopup()}\n redirectApplink={customerId ? {\n application: AppChannels.CRM_STUDIO,\n action: userType === UserGroup.Learner ?\n Actions.CrmStudio.MANAGE_STUDENTS :\n Actions.CrmStudio.MANAGE_STAFF,\n args: [customerId]\n } : {\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.USERS\n }}\n />\n );\n }\n \n public async toggleUserStatus(customerId: string, id: string, params: HashObject = {}): Promise<void> {\n const { ToggleUserStatusView } = await import('apps/crm-studio/views/users/toggle-user-status/ToggleUserStatusView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ToggleUserStatusView\n customerId={customerId}\n id={id}\n userType={params.userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async exportUserList(customerId: string, params: HashObject = {}): Promise<void> {\n const { ExportUserListView } = await import('apps/crm-studio/views/users/export-user-list/ExportUserListView');\n \n const { userType } = params;\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ExportUserListView\n customerId={customerId}\n userType={userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async bulkUserUploadPopup(customerId: string, params: { userType: UserGroup }): Promise<void> {\n const { BulkUserUploadPopupView } = await import('apps/crm-studio/views/bulk-user-upload/popup/BulkUserUploadPopupView');\n \n const { userType } = params;\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <BulkUserUploadPopupView\n customerId={customerId}\n userType={userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async userUploadReviewAccounts(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserUploadReviewAccountsView } = await import('apps/crm-studio/views/bulk-user-upload/review-accounts/BulkUserUploadReviewAccountsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserUploadReviewAccountsView\n customerId={customerId}\n userType={params.userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async userUploadFixDuplicates(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserUploadFixDuplicatesView } = await import('apps/crm-studio/views/bulk-user-upload/fix-duplicates/BulkUserUploadFixDuplicatesView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserUploadFixDuplicatesView\n customerId={customerId}\n userType={params.userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async userUploadReviewExistingAccounts(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserUploadReviewExistingAccountsView } = await import('apps/crm-studio/views/bulk-user-upload/review-existing-accounts/BulkUserUploadReviewExistingAccountsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserUploadReviewExistingAccountsView\n customerId={customerId}\n userType={params.userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async userUploadConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserUploadConfirmationView } = await import('apps/crm-studio/views/bulk-user-upload/confirmation/BulkUserUploadConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserUploadConfirmationView\n customerId={customerId}\n userType={params.userType}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async userUploadStatusPolling(customerId: string, params: UserWizardStatusParams): Promise<void> {\n const { BulkUserUploadStatusPollingView } = await import('apps/crm-studio/views/bulk-user-upload/status/polling/BulkUserUploadStatusPollingView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserUploadStatusPollingView\n userType={params.userType}\n jobId={params.jobId}\n customerId={customerId}\n />\n );\n }\n \n public async userUploadStatusComplete(customerId: string, params: UserWizardStatusParams): Promise<void> {\n const { BulkUserUploadStatusCompleteView } = await import('apps/crm-studio/views/bulk-user-upload/status/complete/BulkUserUploadStatusCompleteView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserUploadStatusCompleteView\n userType={params.userType}\n jobId={params.jobId}\n customerId={customerId}\n />\n );\n }\n \n public async manageUserCuratorGroups(userId: string): Promise<void> {\n const { ManageUserCuratorGroupsView } = await import('apps/crm-studio/views/users/manage-user-curator-groups/ManageUserCuratorGroupsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ManageUserCuratorGroupsView id={userId} closePopup={() => this.layout.closePopup()} />\n );\n }\n \n public async deleteUserEmail(customerId: string, userId: string): Promise<void> {\n const { DeleteUserEmailView } = await import('apps/crm-studio/views/users/delete-user-email/DeleteUserEmailView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteUserEmailView\n userId={userId}\n customerId={customerId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async removeUserFromCustomer(customerId: string, userId: string): Promise<void> {\n const { RemoveUserFromCustomerView } = await import('apps/crm-studio/views/users/remove-user-from-customer/RemoveUserFromCustomerView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveUserFromCustomerView\n customerId={customerId}\n userId={userId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addUserToCustomer(customerId: string, userId: string): Promise<void> {\n const { AddUserToCustomerView } = await import('apps/crm-studio/views/users/add-user-to-customer/AddUserToCustomerView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddUserToCustomerView\n customerId={customerId}\n userId={userId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async changePassword(customerId: string, userId: string): Promise<void> {\n const { ChangePasswordView } = await import('apps/crm-studio/views/users/change-password/ChangePasswordView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ChangePasswordView\n customerId={customerId}\n userId={userId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async editUserCredit(customerId: string, userId: string): Promise<void> {\n const { EditUserCreditView } = await import('apps/crm-studio/views/users/edit-user-credit/EditUserCreditView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditUserCreditView\n customerId={customerId}\n userId={userId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async manageYearGroup(customerId: string, userId: string): Promise<void> {\n const { ManageYearGroup } = await import('apps/crm-studio/components/manage-year-group/ManageYearGroup');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ManageYearGroup\n customerId={customerId}\n userId={userId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n \n public async wizardReviewAccounts(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsReviewAccountsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/review-account/BulkUserActionsReviewAccountsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsReviewAccountsView\n customerId={customerId}\n userType={params?.userType}\n />\n );\n }\n \n public async wizardSelectAction(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsSelectActionView } = await import('apps/crm-studio/views/customers/user-manager/wizard/select-action/BulkUserActionsSelectActionView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsSelectActionView\n customerId={customerId}\n userType={params?.userType}\n />\n );\n }\n \n public async wizardChangeYearGroupActionDetails(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsChangeYearGroupActionDetailsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/action-details/change-year-group/BulkUserActionsChangeYearGroupActionDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsChangeYearGroupActionDetailsView\n customerId={customerId}\n userType={params?.userType}\n />\n );\n }\n \n public async wizardYearGroupRolloverActionDetails(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsYearGroupRolloverActionDetailsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/action-details/year-group-rollover/BulkUserActionsYearGroupRolloverActionDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsYearGroupRolloverActionDetailsView\n customerId={customerId}\n userType={params?.userType}\n />\n );\n }\n \n public async wizardDeleteActionDetails(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsDeleteActionDetailsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/action-details/delete/BulkUserActionsDeleteActionDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsDeleteActionDetailsView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardActivationActionDetails(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsActivationActionDetailsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/action-details/activation/BulkUserActionsActivationActionDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsActivationActionDetailsView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardAddToClassroomActionDetails(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsAddToClassroomActionDetailsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/action-details/add-to-classroom/BulkUserActionsAddToClassroomActionDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsAddToClassroomActionDetailsView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardResetPasswordActionDetails(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsResetPasswordActionDetailsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/action-details/reset-password/BulkUserActionsResetPasswordActionDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsResetPasswordActionDetailsView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardRemoveFromSchoolActionDetails (customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsRemoveFromSchoolActionDetailsView } = await import('apps/crm-studio/views/customers/user-manager/wizard/action-details/remove-from-school/BulkUserActionsRemoveFromSchoolActionDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsRemoveFromSchoolActionDetailsView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardYearGroupRolloverConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsYearGroupRolloverConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/year-group-rollover/BulkUserActionsYearGroupRolloverConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsYearGroupRolloverConfirmationView\n customerId={customerId}\n userType={params?.userType}\n />\n );\n }\n \n public async wizardChangeYearGroupConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsChangeYearGroupConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/change-year-group/BulkUserActionsChangeYearGroupConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsChangeYearGroupConfirmationView\n customerId={customerId}\n userType={params?.userType}\n />\n );\n }\n \n public async wizardDeleteConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsDeleteConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/delete/BulkUserActionsDeleteConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsDeleteConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardDeactivateConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsDeactivateConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/deactivate/BulkUserActionsDeactivateConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsDeactivateConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardReactivateConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsReactivateConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/reactivate/BulkUserActionsReactivateConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsReactivateConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardResetEmailConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsResetEmailConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/reset-email/BulkUserActionsResetEmailConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsResetEmailConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardActivationEmailConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsActivationEmailConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/activation-email/BulkUserActionsActivationEmailConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsActivationEmailConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardRemoveFromSchoolConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsRemoveFromSchoolConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/remove-from-school/BulkUserActionsRemoveFromSchoolConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsRemoveFromSchoolConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardAddToClassroomConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsAddToClassroomConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/add-to-classroom/BulkUserActionsAddToClassroomConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsAddToClassroomConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardResetPasswordConfirmation(customerId: string, params: UserWizardParams): Promise<void> {\n const { BulkUserActionsResetPasswordConfirmationView } = await import('apps/crm-studio/views/customers/user-manager/wizard/confirmation/reset-password/BulkUserActionsResetPasswordConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsResetPasswordConfirmationView customerId={customerId} userType={params.userType} />\n );\n }\n \n public async wizardStatusPolling(customerId: string, params: UserWizardStatusParams): Promise<void> {\n const { BulkUserActionsStatusPollingView } = await import('apps/crm-studio/views/customers/user-manager/wizard/status/polling/BulkUserActionsStatusPollingView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsStatusPollingView\n customerId={customerId}\n jobId={params?.jobId}\n userType={params?.userType}\n />\n );\n }\n \n public async wizardStatusComplete(customerId: string, params: UserWizardStatusParams): Promise<void> {\n const { BulkUserActionsStatusCompleteView } = await import('apps/crm-studio/views/customers/user-manager/wizard/status/complete/BulkUserActionsStatusCompleteView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <BulkUserActionsStatusCompleteView\n customerId={customerId}\n jobId={params?.jobId}\n userType={params?.userType}\n />\n );\n }\n \n public async auditLog(customerId: string, params: UserAuditLogQueryParams): Promise<void> {\n const { UserAuditLogView } = await import('apps/crm-studio/views/customers/user-manager/user-audit-log/UserAuditLogView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <UserAuditLogView customerId={customerId} queryParams={params} />\n );\n }\n \n public async bulkActionSummary(customerId: string, id: string): Promise<void> {\n const { BulkActionSummaryView } = await import('apps/crm-studio/views/users/bulk-action-summary/BulkActionSummaryView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <BulkActionSummaryView customerId={customerId} id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public customerUsers(customerId: string): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CRM_STUDIO,\n action: Actions.CrmStudio.MANAGE_STUDENTS,\n args: [customerId]\n }, { replace: true });\n }\n \n public async manageStudents(customerId: string, queryParams?: HashObject): Promise<void> {\n // so we don't shrink the user tables\n LayoutHelper.lockContentWidth();\n const { CustomerStudentsView } = await import('apps/crm-studio/views/customers/CustomerStudentsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerStudentsView customerId={customerId} queryParams={queryParams} />\n );\n }\n\n public async manageStaff(customerId: string, queryParams?: HashObject): Promise<void> {\n // so we don't shrink the user tables\n LayoutHelper.lockContentWidth();\n const { CustomerStaffView } = await import('apps/crm-studio/views/customers/CustomerStaffView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerStaffView customerId={customerId} queryParams={queryParams} />\n );\n }\n\n public async tvStatus(): Promise<void> {\n const { TvStatusView } = await import('apps/crm-studio/views/tv-status/TvStatusView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <TvStatusView/>\n );\n }\n\n public async tvStatusSet(data: string): Promise<void> {\n const { SetTvStatusView } = await import('apps/crm-studio/views/tv-status/SetTvStatusView');\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <SetTvStatusView regionCode={data} closePopup={() => this.layout.closePopup()}/>\n );\n }\n\n public async domains(params: HashObject): Promise<void> {\n const { DomainsView } = await import('apps/crm-studio/views/domains/DomainsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <DomainsView\n query={params.query}\n />\n );\n }\n\n public async domainsReview(): Promise<void> {\n const { DomainChangesReviewView } = await import('apps/crm-studio/views/domains/DomainChangesReviewView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <DomainChangesReviewView />\n );\n }\n\n public async domainsFinalReview(): Promise<void> {\n const { DomainFinalReviewView } = await import('apps/crm-studio/views/domains/DomainFinalReviewView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <DomainFinalReviewView />\n );\n }\n\n public async domainAddPopup(): Promise<void> {\n const { AddDomainPopupView } = await import('apps/crm-studio/views/domains/AddDomainPopupView');\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddDomainPopupView\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async domainChangeStatusPopup({ domainId, domainName, currentStatus, newStatus }: {\n domainId: string,\n domainName: string,\n currentStatus: DomainVerificationStatus,\n newStatus: DomainVerificationStatus\n }): Promise<void> {\n const { ChangeDomainStatusPopupView } = await import('apps/crm-studio/views/domains/ChangeDomainStatusPopupView');\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ChangeDomainStatusPopupView\n closePopup={() => this.layout.closePopup()}\n domainId={domainId}\n domainName={domainName}\n currentStatus={currentStatus}\n newStatus={newStatus}\n />\n );\n }\n\n public async manageOrgId(): Promise<void> {\n const { OrgIdManagerView } = await import('apps/crm-studio/views/org-id-manager/OrgIdManagerView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrgIdManagerView />\n );\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { Core } from 'libs/common/core';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\nimport { PopupViewProps, Presentation } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels, DataServices, Layouts } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { ClassificationTree, SubjectTree } from 'shared/interfaces/models';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\nimport { SubjectDataService } from 'shared/services';\n\nimport { TopNavView } from 'apps/curriculums/views';\n\nclass CurriculumAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CURRICULUMS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/curriculums(/)': 'subjects',\n 'manage/curriculums/add-objects(/)': 'addSubjectMembers',\n 'manage/curriculums/new(/)': 'newSubject',\n 'manage/curriculums/:id/edit(/)': 'editSubject',\n 'manage/curriculums/:id/edit/videos(/)': 'editSubjectVideos',\n 'manage/curriculums/:id/classifications(/)': 'subjectClassifications',\n\n 'manage/curriculums/classifications(/)': 'classifications',\n 'manage/curriculums/presentations/:id/classifications(/)': 'presentationClassifications',\n 'manage/curriculums/presentations/:id/classifications/new(/)': 'newClassification',\n 'manage/curriculums/presentations/:id/classifications/:id/edit(/)': 'editClassification',\n 'manage/curriculums/presentations/:id/classifications/:id/edit/videos(/)': 'editClassificationVideos',\n\n 'manage/curriculums/presentations(/)': 'presentations',\n 'manage/curriculums/presentations/new': 'newPresentation',\n 'manage/curriculums/presentations/:id(/)': 'editPresentation'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'deleteClassification',\n 'removeClassificationMember',\n 'deleteSubject',\n 'removeSubjectMember',\n\n 'deleteAudience',\n 'removeLevelMember',\n 'removeAudienceMember',\n\n 'uploadImage',\n 'addToWorkbench'\n ];\n }\n}\n\nexport class CurriculumsApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n private subjectDataService: SubjectDataService;\n\n private currentLeftNavId: string;\n\n public initialize(): void {\n this.subjectDataService = InstanceManager.getInstance(DataServices.SUBJECT, this);\n\n /**\n * Obtain an instance of all data services used in the application\n * to prevent any instances being destroyed between renders.\n * \n * This is caused by the InstanceManager not being suited\n * to the way React renders function components - Matt.\n */\n ObjectHelper.values(DataServices).forEach(d => InstanceManager.getInstance(d, this));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Curriculums Application';\n }\n\n public static get router(): any {\n return CurriculumAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CURRICULUMS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n getTopNavView: this.getTopNav\n }\n };\n }\n\n public subjects(): void {\n this.subjectDataService.getSubjectTree(PresentationType.Curriculum, (subjectTree: SubjectTree) => {\n const firstSubject = !!subjectTree.children && subjectTree.children[0];\n\n if (!firstSubject) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CURRICULUMS,\n action: Actions.Subjects.NEW_SUBJECT\n }, { replace: true });\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CURRICULUMS,\n action: Actions.Subjects.EDIT_SUBJECT,\n args: [firstSubject.id]\n }, { replace: true });\n });\n }\n\n public async addToWorkbench(objectId: string): Promise<void> {\n const { AddToWorkbenchView } = await import('apps/workbench/views/add-to-workbench/AddToWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddToWorkbenchView\n objectId={objectId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async newSubject(params: ObjectHash): Promise<void> {\n const { NewSubjectView } = await import('apps/curriculums/views');\n \n const props = {\n parentId: params.parentId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <NewSubjectView key={params.parentId} {...props} />);\n\n this.renderSubjectsLeftNav();\n }\n\n public async editSubject(subjectId: string): Promise<void> {\n const { EditSubjectView } = await import('apps/curriculums/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditSubjectView key={subjectId} subjectId={subjectId} />);\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async editSubjectVideos(subjectId: string, params?: { presentationId: string }): Promise<void> {\n const { EditSubjectMembersView } = await import('apps/curriculums/views');\n \n const props = {\n subjectId,\n memberType: SubjectMemberType.Videos,\n action: Actions.Subjects.EDIT_SUBJECT_VIDEOS,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditSubjectMembersView key={`${subjectId}:videos`} {...props} />);\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async subjectClassifications(subjectId: string): Promise<void> {\n const { SubjectClassificationsView } = await import('apps/curriculums/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <SubjectClassificationsView key={subjectId} subjectId={subjectId} />\n );\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async addSubjectMembers(params: ObjectHash): Promise<void> {\n const { AddSubjectMembersView } = await import('apps/curriculums/views');\n \n const { memberType, objectIds } = params;\n\n if (!memberType || !objectIds)\n return;\n\n const props = {\n memberType,\n objectIds: Array.isArray(objectIds) ? objectIds : [objectIds]\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <AddSubjectMembersView {...props} />);\n\n this.hideLeftNav();\n }\n\n public async removeSubjectMember(subjectId: string, memberId: string, memberType: SubjectMemberType): Promise<void> {\n const { RemoveSubjectMemberView } = await import('apps/curriculums/views');\n \n const props = {\n subjectId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveSubjectMemberView {...props} />);\n }\n\n public async deleteSubject(subjectId: string): Promise<void> {\n const { DeleteSubjectView } = await import('apps/curriculums/views');\n \n /**\n * If the subject being deleted is currently displayed the in the CONTENT region,\n * we want to route away from it on delete.\n */\n const routeToOnDelete = subjectId.toString() === this.currentLeftNavId.toString() ?\n { application: AppChannels.CURRICULUMS, action: Actions.Subjects.NEW_SUBJECT } :\n null;\n\n const props = {\n subjectId,\n routeToOnDelete: routeToOnDelete || null,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteSubjectView {...props} />);\n }\n\n public async classifications(): Promise<void> {\n const { SelectPresentationView } = await import('shared/views/select-presentation/SelectPresentationView');\n \n const getAppLink = (presentation: Presentation) => ({\n application: AppChannels.CURRICULUMS,\n action: Actions.Subjects.PRESENTATION_CLASSIFICATIONS,\n args: [presentation.id]\n });\n\n const props = { objectType: 'topics', presentationType: PresentationType.Curriculum, getAppLink };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <SelectPresentationView {...props} />);\n\n this.hideLeftNav();\n }\n\n public presentationClassifications(presentationId: string): void {\n this.subjectDataService.getClassificationTree(presentationId, (classificationTree: ClassificationTree) => {\n const firstClassification = !!classificationTree.children && classificationTree.children[0];\n\n if (!firstClassification) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CURRICULUMS,\n action: Actions.Subjects.NEW_CLASSIFICATION,\n args: [presentationId]\n }, { replace: true });\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CURRICULUMS,\n action: Actions.Subjects.EDIT_CLASSIFICATION,\n args: [ presentationId, firstClassification.id ]\n }, { replace: true });\n });\n }\n\n public async newClassification(presentationId: string, params: ObjectHash): Promise<void> {\n const { NewClassificationView } = await import('apps/curriculums/views');\n \n const props = {\n presentationId,\n parentId: params.parentId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <NewClassificationView key={params.parentId} {...props} />);\n\n this.renderClassificationLeftNav(presentationId);\n }\n\n public async editClassification(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationView } = await import('apps/curriculums/views');\n \n const props = { presentationId, classificationId };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClassificationView key={classificationId} {...props} />);\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationVideos(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationMembersView } = await import('apps/curriculums/views');\n \n const props = { presentationId, classificationId, memberType: SubjectMemberType.Videos };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationMembersView key={`${classificationId}:videos`} {...props} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async removeClassificationMember(\n classificationId: string,\n memberId: string,\n memberType: SubjectMemberType\n ): Promise<void> {\n const { RemoveClassificationMemberView } = await import('apps/curriculums/views');\n \n const props = {\n classificationId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationMemberView {...props} />);\n }\n\n public async deleteClassification(presentationId: string, classificationId: string): Promise<void> {\n const { DeleteClassificationView } = await import('apps/curriculums/views');\n \n /**\n * If the classification being deleted is currently displayed the in the CONTENT region,\n * we want to route away from it (and back to the presentation) on delete.\n */\n const routeToOnDelete = classificationId === this.currentLeftNavId ?\n {\n application: AppChannels.CURRICULUMS,\n action: Actions.Subjects.NEW_CLASSIFICATION,\n args: [presentationId]\n } :\n null;\n\n const props = {\n classificationId,\n routeToOnDelete: routeToOnDelete || null,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteClassificationView {...props} />);\n }\n\n public async presentations(): Promise<void> {\n const { EditPresentationsListView } = await import('apps/curriculums/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditPresentationsListView />);\n\n this.hideLeftNav();\n }\n\n public async newPresentation(): Promise<void> {\n const { NewPresentationView } = await import('apps/curriculums/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewPresentationView />);\n }\n\n public async editPresentation(id: string): Promise<void> {\n const { EditPresentationView } = await import('apps/curriculums/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditPresentationView key={id} id={id} />);\n\n this.hideLeftNav();\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n private async renderClassificationLeftNav(presentationId: string, selectedClassificationId?: string): Promise<void> {\n const { ClassificationNavView } = await import('apps/curriculums/views');\n \n this.setCurrentLeftNavItem(selectedClassificationId);\n\n const props = { presentationId, selectedClassificationId };\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <ClassificationNavView {...props} />);\n }\n\n private async renderSubjectsLeftNav(subjectId?: string): Promise<void> {\n const { SubjectNavView } = await import('apps/curriculums/views');\n \n this.setCurrentLeftNavItem(subjectId);\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <SubjectNavView selectedSubjectId={subjectId} />);\n }\n\n private setCurrentLeftNavItem(id?: string): void {\n if (id)\n this.currentLeftNavId = id;\n else\n this.currentLeftNavId = null;\n }\n\n private hideLeftNav(): void {\n this.setCurrentLeftNavItem();\n\n this.layout.hideLeftNav();\n }\n\n private getTopNav(currentAppLink: Core.AppLink): React.ReactElement {\n return <TopNavView currentAppLink={currentAppLink} />;\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\nimport { ApplicationOptions } from 'backbone.marionette';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { Actions } from 'shared/constants';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { FullScreenLayoutView } from 'shared/layouts';\n\nimport { CustomerWizardQueryParams } from 'apps/customer-wizard/interfaces/CustomerWizardQueryParams';\n\nclass CustomerWizardAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CUSTOMER_WIZARD;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'crm-studio/customers/customer-wizard/new': 'index',\n 'crm-studio/customers/customer-wizard/name': 'customerName',\n 'crm-studio/customers/customer-wizard/organisation': 'customerOrganisation',\n 'crm-studio/customers/customer-wizard/region': 'customerRegion',\n 'crm-studio/customers/customer-wizard/cft': 'customerCft',\n 'crm-studio/customers/customer-wizard/trial': 'customerTrial',\n 'crm-studio/customers/customer-wizard/customisations': 'customerCustomisations',\n 'crm-studio/customers/customer-wizard/confirm': 'customerConfirmation'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [];\n }\n\n // @ts-ignore\n protected get externalRoutes(): ObjectHash {\n return {};\n }\n}\n\nexport class CustomerWizardApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n public initialize(options: ApplicationOptions): void {\n super.initialize(options);\n // hide footer for Customer Wizard\n const footer = document.getElementById('footer');\n if (footer) {\n footer.style.display = 'none';\n }\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Customer Wizard';\n }\n\n public static get router(): any {\n return CustomerWizardAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CUSTOMER_WIZARD;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: true\n }\n };\n }\n\n public index(queryParams: CustomerWizardQueryParams): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CUSTOMER_WIZARD,\n action: Actions.CustomerWizard.CUSTOMER_NAME,\n params: queryParams\n }, { replace: true });\n }\n\n public async customerName(queryParams: CustomerWizardQueryParams): Promise<void> {\n const { CustomerWizardNameView } = await import('apps/customer-wizard/views/customer-wizard-name/CustomerWizardNameView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerWizardNameView queryParams={queryParams} />\n );\n }\n\n public async customerOrganisation(queryParams: CustomerWizardQueryParams): Promise<void> {\n const { CustomerWizardOrganisationView } = await import('apps/customer-wizard/views/customer-wizard-organisation/CustomerWizardOrganisation');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerWizardOrganisationView queryParams={queryParams} />\n );\n }\n\n public async customerRegion(queryParams: CustomerWizardQueryParams): Promise<void> {\n const { CustomerWizardRegionView } = await import('apps/customer-wizard/views/customer-wizard-region/CustomerWizardRegion');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerWizardRegionView queryParams={queryParams} />\n );\n }\n\n public async customerCft(queryParams: CustomerWizardQueryParams): Promise<void> {\n const { CustomerWizardCftView } = await import('apps/customer-wizard/views/customer-wizard-cft.tsx/CurstomerWizardCft');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerWizardCftView queryParams={queryParams} />\n );\n }\n\n public async customerTrial(queryParams: CustomerWizardQueryParams): Promise<void> {\n const { CustomerWizardTrialView } = await import('apps/customer-wizard/views/customer-wizard-trial/CustomerWizardTrial');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerWizardTrialView queryParams={queryParams} />\n );\n }\n\n public async customerCustomisations(queryParams: CustomerWizardQueryParams): Promise<void> {\n const { CustomerWizardCustomisationsView } = await import('apps/customer-wizard/views/customer-wizard-customisations/CustomerWizardCustomisationsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerWizardCustomisationsView queryParams={queryParams} />\n );\n }\n\n public async customerConfirmation(queryParams: CustomerWizardQueryParams): Promise<void> {\n const { CustomerWizardConfirmationView } = await import('apps/customer-wizard/views/customer-wizard-confirm/CustomerWizardConfirmation');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerWizardConfirmationView queryParams={queryParams} />\n );\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { CurationStatusString } from 'libs/shared/enums/CurationStatus';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\nimport { DashboardTargetType, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { PopupViewProps } from 'libs/shared/interfaces/props/ViewProps';\n\nimport { Actions, AppChannels, DataServices, Layouts } from 'shared/constants';\nimport { LevelMemberType, SubjectMemberType } from 'shared/enums';\nimport { DashboardActionType } from 'shared/enums/DashboardActionType';\nimport { ClassificationTree } from 'shared/interfaces';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\nimport { SubjectDataService } from 'shared/services';\n\nimport { UploadVideoViewParams } from 'apps/cv-live/views/upload-video/UploadVideoView';\n\nconst presentationType = PresentationType.StreamableLearning;\n\nclass CvLiveAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CV_LIVE;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n // Calendar\n 'cv-live/calendar(/)': 'calendarLivestreams',\n\n // Discover\n 'cv-live/discover(/)': 'discover',\n\n // Subjects\n 'cv-live/classifications(/)': 'classifications',\n 'cv-live/:id/classifications(/)': 'presentationClassifications',\n 'cv-live/:id/classifications/new(/)': 'newClassification',\n 'cv-live/:id/classifications/:id/edit(/)': 'editClassification',\n 'cv-live/:id/classifications/:id/edit/videos(/)': 'editClassificationVideos',\n 'cv-live/:id/classifications/:id/edit/clips(/)': 'editClassificationClips',\n 'cv-live/:id/classifications/:id/edit/dashboards(/)': 'editClassificationDashboards',\n\n // Audiences\n 'cv-live/audiences(/)': 'audiences',\n 'cv-live/:id/audiences(/)': 'presentationAudiences',\n 'cv-live/:id/audiences/new(/)': 'newAudience',\n 'cv-live/:id/audiences/:id/edit(/)': 'editAudience',\n 'cv-live/:id/audiences/:id/edit/videos(/)': 'editAudienceVideos',\n\n // Presentation\n 'cv-live/presentation(/)': 'editPresentation',\n\n // Videos\n 'cv-live/videos(/)': 'videos',\n 'cv-live/videos/new(/)': 'uploadVideo',\n 'cv-live/videos/:id(/)': 'editVideo',\n 'cv-live/videos/:id/classifications(/)': 'editVideoClassifications',\n 'cv-live/videos/:id/audiences(/)': 'editVideoAudiences',\n 'cv-live/videos/:id/tags(/)': 'editVideoTags',\n 'cv-live/videos/:id/glance(/)': 'editVideoGlance',\n 'cv-live/videos/:id/resources(/)': 'editVideoResources',\n\n // Companies\n 'cv-live/companies(/)': 'companies',\n 'cv-live/companies/new(/)': 'newCompany',\n 'cv-live/companies/:id(/)': 'editCompany',\n 'cv-live/companies/:id/dashboards(/)': 'editCompanyDashboards'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n // Discover\n 'newDashboard',\n 'deleteDashboard',\n 'publishDashboard',\n 'archiveDraftDashboard',\n 'editDashboardDetails',\n 'copyDashboard',\n\n // Topics\n 'deleteClassification',\n 'removeClassificationMember',\n 'newClassificationDashboard',\n 'editClassificationDashboard',\n 'archiveDraftClassificationDashboard',\n 'publishClassificationDashboard',\n 'removeClassificationDashboard',\n 'copyClassificationDashboard',\n\n // Audiences\n 'deleteAudience',\n 'removeAudienceMember',\n\n // Other\n 'uploadImage',\n 'exportLibrary',\n\n // Calendar\n 'addLivestream',\n 'editLivestream',\n 'draftLivestream',\n 'archiveLivestream',\n 'publishLivestream',\n 'deleteLivestream',\n 'livestreamLinks'\n ];\n }\n}\n\nexport class CvLiveApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n private subjectDataService: SubjectDataService;\n\n private currentLeftNavId: string;\n\n public initialize(): void {\n this.subjectDataService = InstanceManager.getInstance(DataServices.SUBJECT, this);\n\n /**\n * Obtain an instance of all data services used in the application\n * to prevent any instances being destroyed between renders.\n * \n * This is caused by the InstanceManager not being suited\n * to the way React renders function components - Matt.\n */\n ObjectHelper.values(DataServices).forEach(d => InstanceManager.getInstance(d, this));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'ClickView Live Application';\n }\n\n public static get router(): any {\n return CvLiveAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CV_LIVE;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n // #region calendar\n\n public async calendarLivestreams(params: HashObject): Promise<void> {\n const { CvLiveCalendarLivestreamsView } = await import('apps/cv-live/views/calendar-events/CvLiveCalendarEventsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CvLiveCalendarLivestreamsView\n queryParams={params}\n />\n );\n }\n\n public async addLivestream(): Promise<void> {\n const { CvLiveAddLivestreamView } = await import('apps/cv-live/views/add-livestream/CvLiveAddLivestreamView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLiveAddLivestreamView\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteLivestream(id: string): Promise<void> {\n const { CvLiveDeleteLivestream } = await import('apps/cv-live/views/delete-livestream/CvLiveDeleteLivestream');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLiveDeleteLivestream\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editLivestream(id: string, name: string): Promise<void> {\n const { CvLiveEditLivestreamView } = await import('apps/cv-live/views/edit-livestream/CvLiveEditLivestreamView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLiveEditLivestreamView id={id} name={name} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async draftLivestream(livestreamId: string): Promise<void> {\n const { CvLiveLivestreamStatusUpdateView: CvLivestreamStatusUpdateView } = await import('apps/cv-live/views/livestream-status-update/CvLiveLivestreamStatusUpdateView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLivestreamStatusUpdateView\n livestreamId={livestreamId}\n status={CurationStatusString.Draft}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async archiveLivestream(livestreamId: string): Promise<void> {\n const { CvLiveLivestreamStatusUpdateView: CvLivestreamStatusUpdateView } = await import('apps/cv-live/views/livestream-status-update/CvLiveLivestreamStatusUpdateView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLivestreamStatusUpdateView\n livestreamId={livestreamId}\n status={CurationStatusString.Archived}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async publishLivestream(livestreamId: string): Promise<void> {\n const { CvLiveLivestreamStatusUpdateView: CvLivestreamStatusUpdateView } = await import('apps/cv-live/views/livestream-status-update/CvLiveLivestreamStatusUpdateView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLivestreamStatusUpdateView\n livestreamId={livestreamId}\n status={CurationStatusString.Published}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async livestreamLinks(params: HashObject): Promise<void> {\n const { CvLiveLivestreamLinks: CvLivestreamLinks } = await import('apps/cv-live/views/livestream-links/CvLiveLivestreamLinks');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLivestreamLinks\n pastRecordingMasterId={params.pastRecordingMasterId}\n recordingMasterId={params.recordingMasterId}\n registrationUrl={params.registrationUrl}\n livestreamUrl={params.livestreamUrl}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n // #endregion\n\n // #region discover\n\n public async discover(): Promise<void> {\n const { EditCvLiveDashboardListView } = await import('apps/cv-live/views/edit-dashboard/EditCvLiveDashboardListView');\n \n this.subjectDataService.getPresentations(presentationType, (presentations: Presentation[]) => {\n const presentation = ArrayHelper.first(presentations);\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditCvLiveDashboardListView presentationId={presentation.id} />\n );\n });\n }\n\n public async newDashboard(): Promise<void> {\n const { NewCvLiveDashboardView } = await import('apps/cv-live/views/new-dashboard/NewCvLiveDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewCvLiveDashboardView {...this.getPopupProps()}\n />\n );\n }\n\n public async deleteDashboard(id: string): Promise<void> {\n const { RemoveCvLiveDashboardView } = await import('apps/cv-live/views/remove-dashboard/RemoveCvLiveDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveCvLiveDashboardView\n dashboardId={id}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async publishDashboard(\n dashboardId: string,\n dashboardToArchiveId: string\n ): Promise<void> {\n const { PublishDashboardView } = await import('shared/views/publish-dashboard/PublishDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <PublishDashboardView\n dashboardToPublishId={dashboardId}\n dashboardToArchiveId={\n typeof dashboardToArchiveId === 'string' ?\n dashboardToArchiveId :\n undefined}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async archiveDraftDashboard(\n actionType: DashboardActionType,\n dashboardId: string\n ): Promise<void> {\n const { ArchiveDraftDashboardView } = await import('shared/views/archive-draft-dashboard/ArchiveDraftDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ArchiveDraftDashboardView\n dashboardId={dashboardId}\n actionType={actionType}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async editDashboardDetails(dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('apps/dashboard-editor/views/edit-dashboard-details/EditDashboardDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditDashboardDetailsView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async copyDashboard(dashboardId: string): Promise<void> {\n const { CopyDashboardView } = await import('apps/discover/views/copy-dashboard/CopyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyDashboardView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n // #endregion\n\n // #region Classifications\n\n public classifications(): void {\n this.subjectDataService.getPresentations(presentationType, (presentations: Presentation[]) => {\n const presentation = ArrayHelper.first(presentations);\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.PRESENTATION_CLASSIFICATIONS,\n args: [presentation.id]\n });\n });\n }\n\n public presentationClassifications(presentationId: string): void {\n this.subjectDataService.getClassificationTree(\n presentationId,\n (classificationTree: ClassificationTree) => {\n const firstClassification = !!classificationTree.children && classificationTree.children[0];\n\n if (!firstClassification) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.NEW_CLASSIFICATION,\n args: [presentationId]\n }, { replace: true });\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.EDIT_CLASSIFICATION,\n args: [ presentationId, firstClassification.id ]\n }, { replace: true });\n }\n );\n }\n\n public async newClassification(presentationId: string, params: ObjectHash): Promise<void> {\n const { NewClassificationView } = await import('apps/subjects/views');\n \n const props = {\n presentationId: presentationId,\n parentId: params?.parentId,\n presentationType: PresentationType.StreamableLearning\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <NewClassificationView key={params?.parentId} {...props} />);\n\n this.renderClassificationLeftNav(presentationId);\n }\n\n public async newClassificationDashboard(classificationId: string, presentationId: string): Promise<void> {\n const { NewClassificationDashboardView } = await import('apps/subjects/views/classifications/new-classification-dashboard/NewClassificationDashboardView');\n \n const props = {\n classificationId,\n redirect: true,\n presentationId,\n targetType: DashboardTargetType.Classification as const,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <NewClassificationDashboardView {...props} />);\n }\n\n public async editClassificationDashboard(classificationId: string, dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('apps/dashboard-editor/views/edit-dashboard-details/EditDashboardDetailsView');\n \n const props = { dashboardId, classificationId, ...this.getPopupProps() };\n\n this.layout.showChildView(LayoutRegions.POPUP, <EditDashboardDetailsView {...props} />);\n }\n\n public async copyClassificationDashboard(dashboardId: string): Promise<void> {\n const { CopyDashboardView } = await import('apps/discover/views/copy-dashboard/CopyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyDashboardView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async editClassification(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationView } = await import('apps/cv-live/views/edit-classification/EditClassificationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationView\n key={classificationId}\n classificationId={classificationId}\n presentationId={presentationId}\n />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationVideos(presentationId: string, classificationId: string): Promise<void> {\n const { EditCvLiveClassificationVideosView } = await import('apps/cv-live/views/edit-classification-videos/EditCvLiveClassificationVideosView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditCvLiveClassificationVideosView key={`${classificationId}:videos`} presentationId={presentationId} classificationId={classificationId} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationDashboards(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationDashboardListView } = await import('apps/cv-live/views/edit-classification-dashboard-list/EditClassificationDashboardListView');\n \n const props = {\n classificationId,\n memberType: SubjectMemberType.Dashboard,\n presentationId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClassificationDashboardListView {...props} />);\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async removeClassificationMember(\n classificationId: string,\n memberId: string,\n memberType: SubjectMemberType\n ): Promise<void> {\n const { RemoveClassificationMemberView } = await import('shared/views/remove-classification-member');\n \n const props = {\n classificationId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationMemberView {...props} />);\n }\n\n public async removeClassificationDashboard(targetId: string, dashboardId: string): Promise<void> {\n const { RemoveClassificationDashboardView } = await import('apps/subjects/views/classifications/remove-classification-dashboard/RemoveClassificationDashboardView');\n \n const props = {\n classificationId: targetId,\n dashboardId,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationDashboardView {...props} />);\n }\n\n public async archiveDraftClassificationDashboard(\n actionType: DashboardActionType,\n dashboardId: string\n ): Promise<void> {\n const { ArchiveDraftDashboardView } = await import('shared/views/archive-draft-dashboard/ArchiveDraftDashboardView');\n \n const props = {\n dashboardId,\n actionType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <ArchiveDraftDashboardView {...props} />);\n }\n\n public async publishClassificationDashboard(\n dashboardId: string,\n dashboardToArchiveId: string\n ): Promise<void> {\n const { PublishDashboardView } = await import('shared/views/publish-dashboard/PublishDashboardView');\n \n const props = {\n dashboardToPublishId: dashboardId,\n dashboardToArchiveId: typeof dashboardToArchiveId === 'string' ?\n dashboardToArchiveId :\n undefined,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <PublishDashboardView {...props} />);\n }\n\n public async deleteClassification(presentationId: string, classificationId: string): Promise<void> {\n const { DeleteClassificationView } = await import('apps/subjects/views');\n \n /**\n * If the classification being deleted is currently displayed the in the CONTENT region,\n * we want to route away from it (and back to the presentation) on delete.\n */\n const routeToOnDelete = classificationId === this.currentLeftNavId ?\n {\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.NEW_CLASSIFICATION,\n args: [presentationId]\n } :\n null;\n\n const props = {\n classificationId,\n routeToOnDelete,\n ...this.getPopupProps(),\n presentationType: PresentationType.StreamableLearning\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteClassificationView {...props} />);\n }\n\n // #endregion\n\n // #region Audiences\n\n public async removeAudienceMember(audienceId: string, memberId: string, memberType: LevelMemberType): Promise<void> {\n const { RemoveAudienceMemberView } = await import('apps/subjects/views/audiences/remove-audience-member/RemoveAudienceMemberView');\n \n const props = {\n audienceId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveAudienceMemberView {...props} />);\n }\n\n public audiences(): void {\n this.subjectDataService.getPresentations(presentationType, (presentations: Presentation[]) => {\n const presentation = ArrayHelper.first(presentations);\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.PRESENTATION_AUDIENCES,\n args: [presentation.id]\n });\n });\n }\n \n public presentationAudiences(presentationId: string): void {\n this.subjectDataService.getAudiences(presentationId, (audiences: PresentationAudience[]) => {\n const firstAudience = ArrayHelper.first(audiences);\n\n if (!firstAudience) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.NEW_AUDIENCE,\n args: [presentationId]\n }, { replace: true });\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.EDIT_AUDIENCE,\n args: [ presentationId, firstAudience.masterId ]\n }, { replace: true });\n });\n }\n\n public async newAudience(presentationId: string): Promise<void> {\n const { NewAudienceView } = await import('apps/subjects/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <NewAudienceView presentationId={presentationId} presentationType={presentationType} />\n );\n\n this.hideLeftNav();\n }\n\n public async editAudience(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceView } = await import('apps/subjects/views');\n \n const props = { audienceId, presentationId, presentationType };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditAudienceView key={audienceId} {...props} />);\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async editAudienceVideos(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceMembersView } = await import('apps/subjects/views');\n \n const props = { audienceId, presentationType, memberType: LevelMemberType.Videos, presentationId };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditAudienceMembersView key={`${audienceId}:videos`} {...props} />\n );\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async deleteAudience(presentationId: string, audienceId: string): Promise<void> {\n const { DeleteAudienceView } = await import('apps/subjects/views');\n \n const routeToOnDelete = {\n application: AppChannels.CV_LIVE,\n action: Actions.CvLive.PRESENTATION_AUDIENCES,\n args: [presentationId]\n };\n\n const props = { id: audienceId, routeToOnDelete, ...this.getPopupProps() };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteAudienceView {...props} />);\n }\n\n // #endregion\n\n // #region Presentation\n\n public async editPresentation(): Promise<void> {\n const { EditPresentationView } = await import('apps/subjects/views');\n \n this.subjectDataService.getPresentations(presentationType, (presentations: Presentation[]) => {\n const presentation = ArrayHelper.first(presentations);\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditPresentationView id={presentation.id} />);\n });\n\n this.hideLeftNav();\n }\n\n // #endregion\n\n // #region Videos\n\n public async videos(params: { query?: string, cursor?: string } = {}): Promise<void> {\n const { CvLiveVideosView } = await import('apps/cv-live/views/videos/CvLiveVideosView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CvLiveVideosView query={params.query} cursor={params.cursor} />\n );\n\n this.hideLeftNav();\n }\n\n public async editVideo(id: string): Promise<void> {\n const { EditVideoView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoView videoId={id} context='live' />);\n }\n\n public async editVideoClassifications(id: string): Promise<void> {\n const { CvLiveVideoClassificationsView } = await import('apps/cv-live/views/edit-video-classifications/CvLiveVideoClassificationsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <CvLiveVideoClassificationsView videoId={id} />);\n }\n\n public async editVideoAudiences(id: string): Promise<void> {\n const { CvLiveVideoAudiencesView } = await import('apps/cv-live/views/edit-video-audiences/CvLiveVideoAudiencesView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <CvLiveVideoAudiencesView videoId={id} />);\n }\n\n public async editVideoTags(id: string): Promise<void> {\n const { EditVideoTagsView } = await import('apps/videos/views/edit-video-tags/EditVideoTagsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoTagsView videoId={id} context='live' />);\n }\n\n public async editVideoGlance(id: string): Promise<void> {\n const { ManagePointsOfInterestView } = await import('apps/videos/views/manage-points-of-interest/ManagePointsOfInterestView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <ManagePointsOfInterestView videoId={id} context='live' />);\n }\n\n public async editVideoResources(videoId: string): Promise<void> {\n const { EditVideoResourcesTabView } = await import('apps/videos/views/edit-video-resources/EditVideoResourcesTabView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditVideoResourcesTabView videoId={videoId} context='live' />\n );\n }\n\n public async uploadVideo(params: UploadVideoViewParams = {}): Promise<void> {\n const { UploadVideoView } = await import('apps/cv-live/views/upload-video/UploadVideoView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <UploadVideoView {...params} />);\n }\n\n // #endregion\n\n // #region Companies\n\n public async companies(params: ObjectHash): Promise<void> {\n const { CompaniesView } = await import('apps/companies/views');\n \n const { cursor } = params;\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CompaniesView context='live' cursor={cursor} />\n );\n }\n\n public async newCompany(): Promise<void> {\n const { NewCompanyView } = await import('apps/companies/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <NewCompanyView context='live' />\n );\n }\n\n public async editCompany(id: string): Promise<void> {\n const { EditCompanyView } = await import('apps/companies/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditCompanyView context='live' companyId={id} />\n );\n }\n\n public async editCompanyDashboards(companyId: string): Promise<void> {\n const { EditCompanyDashboardsView } = await import('apps/companies/views/edit-dashboards/EditCompanyDashboardsView');\n \n this.subjectDataService.getPresentations(presentationType, (presentations: Presentation[]) => {\n const presentation = ArrayHelper.first(presentations);\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditCompanyDashboardsView\n companyId={companyId}\n presentationId={presentation.id}\n context='live'\n />\n );\n });\n }\n\n // #endregion\n\n // #region Other\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async exportLibrary(): Promise<void> {\n const { ExportLibraryView } = await import('apps/cv-live/views/export-library/ExportLibraryView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ExportLibraryView closePopup={() => this.layout.closePopup()} />\n );\n }\n\n protected onShowAlert(options: ObjectHash = {}): void {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n private async renderClassificationLeftNav(presentationId: string, selectedClassificationId?: string): Promise<void> {\n const { ClassificationNavView } = await import('apps/subjects/views');\n \n this.setCurrentLeftNavItem(selectedClassificationId);\n\n const props = {\n selectedClassificationId,\n presentationId,\n presentationType: PresentationType.StreamableLearning\n };\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <ClassificationNavView {...props} />);\n }\n\n private async renderAudienceLeftNav(presentationId: string, selectedAudienceId?: string): Promise<void> {\n const { AudienceNavView } = await import('apps/subjects/views');\n \n this.setCurrentLeftNavItem(selectedAudienceId);\n\n const props = { selectedAudienceId, presentationId, presentationType };\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <AudienceNavView {...props} />);\n }\n\n private setCurrentLeftNavItem(id?: string): void {\n if (id)\n this.currentLeftNavId = id;\n else\n this.currentLeftNavId = null;\n }\n\n private hideLeftNav(): void {\n this.setCurrentLeftNavItem();\n\n this.layout.hideLeftNav();\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n\n // #endregion\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { CurationStatusString } from 'libs/shared/enums/CurationStatus';\n\nimport { Actions } from 'shared/constants';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { FullScreenLayoutView, FullScreenLayoutViewOptions } from 'shared/layouts';\n\nimport { AssemblyLineQueryParams } from 'apps/assembly-line/interfaces/AssemblyLineQueryParams';\nimport { ContentPipelineId } from 'apps/assembly-line/interfaces/ContentPipelineId';\n\nconst PIPELINE_ID: ContentPipelineId = 'cv-live';\n\nclass CvLivePipelineAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CV_LIVE_PIPELINE;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'cv-live/content-pipeline(/)': 'index',\n 'cv-live/content-pipeline/livestreams(/)': 'livestreams',\n 'cv-live/content-pipeline/livestreams/drafts(/)': 'draftLivestreams',\n 'cv-live/content-pipeline/livestreams/upcoming(/)': 'upcomingLivestreams',\n 'cv-live/content-pipeline/livestreams/past(/)': 'pastLivestreams',\n 'cv-live/content-pipeline/curation(/)': 'curation',\n 'cv-live/content-pipeline/curation/unused-videos(/)': 'unusedVideos',\n 'cv-live/content-pipeline/curation/topics(/)': 'topics',\n 'cv-live/content-pipeline/curation/curated-topics(/)': 'curatedTopics',\n 'cv-live/content-pipeline/curation/thumbnail-text(/)': 'thumbnailText',\n 'cv-live/content-pipeline/assets(/)': 'assets',\n 'cv-live/content-pipeline/assets/curated-thumbnails(/)': 'curatedThumbnail',\n 'cv-live/content-pipeline/assets/thumbnail-review(/)': 'thumbnailReview',\n 'cv-live/content-pipeline/assets/topic-assets(/)': 'topicAssets',\n 'cv-live/content-pipeline/resourcing(/)': 'resourcing',\n 'cv-live/content-pipeline/resourcing/tags(/)': 'tags',\n 'cv-live/content-pipeline/resourcing/glance(/)': 'glance',\n 'cv-live/content-pipeline/resourcing/resources-interactives(/)': 'resourcesAndInteractives',\n 'cv-live/content-pipeline/resourcing/topic-seo(/)': 'topicSeo',\n 'cv-live/content-pipeline/review(/)': 'review',\n 'cv-live/content-pipeline/review/review-videos(/)': 'reviewVideos',\n 'cv-live/content-pipeline/review/published-videos(/)': 'publishedVideos',\n 'cv-live/content-pipeline/review/completed-livestreams(/)': 'completedLivestreams'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'addLivestream',\n 'uploadRecording',\n 'editLivestream',\n 'publishLivestream',\n 'editVideo',\n 'deleteVideo',\n 'archiveVideo',\n 'editClassification',\n 'editDashboard',\n 'wizard',\n 'saveQuickFilter',\n 'editQuickFilter',\n 'deleteQuickFilter',\n 'newInteractive',\n 'newClassificationDashboard',\n 'resolveTopicIssue',\n 'resolveVideoIssue',\n 'reviewDetails',\n 'publishTopic',\n 'globalSearch',\n 'pictureInPicture',\n 'deleteLivestream'\n ];\n }\n}\n\nexport class CvLivePipelineApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'CV Live Pipeline Application';\n }\n\n public static get router(): any {\n return CvLivePipelineAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.CV_LIVE_PIPELINE;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: true\n }\n };\n }\n\n public index(): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE_PIPELINE,\n action: Actions.CvLivePipeline.LIVESTREAMS\n }, { replace: true });\n }\n\n public livestreams(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE_PIPELINE,\n action: Actions.CvLivePipeline.DRAFT_LIVESTREAMS,\n params\n }, { replace: true });\n }\n\n public async publishLivestream(livestreamId: string): Promise<void> {\n const { CvLiveLivestreamStatusUpdateView: CvLivestreamStatusUpdateView } = await import('apps/cv-live/views/livestream-status-update/CvLiveLivestreamStatusUpdateView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLivestreamStatusUpdateView\n livestreamId={livestreamId}\n status={CurationStatusString.Published}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addLivestream(): Promise<void> {\n const { CvLiveAddLivestreamView } = await import('apps/cv-live/views/add-livestream/CvLiveAddLivestreamView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLiveAddLivestreamView\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async uploadRecording(livestreamId: string): Promise<void> {\n const { CvLiveUploadRecordingView } = await import('apps/cv-live/views/upload-recording/CvLiveUploadRecordingView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLiveUploadRecordingView\n closePopup={() => this.layout.closePopup()}\n livestreamId={livestreamId}\n />\n );\n }\n\n public async editLivestream(id: string): Promise<void> {\n const { CvLiveEditLivestreamView } = await import('apps/cv-live/views/edit-livestream/CvLiveEditLivestreamView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLiveEditLivestreamView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async deleteLivestream(id: string): Promise<void> {\n const { CvLiveDeleteLivestream } = await import('apps/cv-live/views/delete-livestream/CvLiveDeleteLivestream');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CvLiveDeleteLivestream\n id={id}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async draftLivestreams(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineLivestreamStageView } = await import('./views/AssemblyLineLivestreamStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineLivestreamStageView queryParams={params} stage='livestreams' subStage='draft_livestreams' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async pastLivestreams(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineLivestreamStageView } = await import('./views/AssemblyLineLivestreamStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineLivestreamStageView queryParams={params} stage='livestreams' subStage='past_livestreams' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async upcomingLivestreams(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineLivestreamStageView } = await import('./views/AssemblyLineLivestreamStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineLivestreamStageView queryParams={params} stage='livestreams' subStage='upcoming_livestreams' pipelineId={PIPELINE_ID} />\n );\n }\n\n public curation(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE_PIPELINE,\n action: Actions.CvLivePipeline.UNUSED_VIDEOS,\n params\n }, { replace: true });\n }\n\n public async unusedVideos(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='curation' subStage='unused_video' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async topics(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineTopicStageView } = await import('apps/assembly-line/views/tables/AssemblyLineTopicStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineTopicStageView queryParams={params} stage='curation' subStage='topic' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async curatedTopics(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineDashboardStageView } = await import('apps/assembly-line/views/tables/AssemblyLineDashboardStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineDashboardStageView queryParams={params} stage='curation' subStage='curated_topic' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async thumbnailText(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='curation' subStage='thumbnail_text' pipelineId={PIPELINE_ID} />\n );\n }\n\n public assets(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE_PIPELINE,\n action: Actions.CvLivePipeline.CURATED_THUMBNAIL,\n params\n }, { replace: true });\n }\n\n public async curatedThumbnail(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='assets' subStage='curated_thumbnail' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async thumbnailReview(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='assets' subStage='review_thumbnail' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async topicAssets(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineTopicStageView } = await import('apps/assembly-line/views/tables/AssemblyLineTopicStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineTopicStageView queryParams={params} stage='assets' subStage='topic_asset' pipelineId={PIPELINE_ID} />\n );\n }\n\n public resourcing(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE_PIPELINE,\n action: Actions.CvLivePipeline.RESOURCES_AND_INTERACTIVES,\n params\n }, { replace: true });\n }\n\n public async resourcesAndInteractives(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='resourcing' subStage='resources_interactives' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async tags(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='resourcing' subStage='tags' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async glance(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='resourcing' subStage='glance' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async topicSeo(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineTopicStageView } = await import('apps/assembly-line/views/tables/AssemblyLineTopicStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineTopicStageView queryParams={params} stage='resourcing' subStage='topic_seo' pipelineId={PIPELINE_ID} />\n );\n }\n\n public review(params: AssemblyLineQueryParams = {}): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CV_LIVE_PIPELINE,\n action: Actions.CvLivePipeline.REVIEW_VIDEOS,\n params\n }, { replace: true });\n }\n\n public async reviewVideos(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='reviewing' subStage='review_video' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async publishedVideos(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineVideoStageView } = await import('apps/assembly-line/views/tables/AssemblyLineVideoStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineVideoStageView queryParams={params} stage='reviewing' subStage='published_video' pipelineId={PIPELINE_ID} />\n );\n }\n\n public async completedLivestreams(params: AssemblyLineQueryParams = {}): Promise<void> {\n const { AssemblyLineLivestreamStageView } = await import('./views/AssemblyLineLivestreamStageView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AssemblyLineLivestreamStageView queryParams={params} stage='reviewing' subStage='completed_livestreams' pipelineId={PIPELINE_ID} />\n );\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { FullScreenLayoutView, FullScreenLayoutViewOptions } from 'shared/layouts/full-screen-layout/FullScreenLayoutView';\n\nclass DashboardEditorAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DASHBOARD_EDITOR;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/dashboards/:id/edit(/)': 'editDashboard',\n 'manage/dashboards/:id/edit/wizard/select-widget(/)': 'wizardSelectWidget',\n 'manage/dashboards/:id/edit/wizard/widget/:widget/select-template(/)': 'wizardSelectTemplate',\n 'manage/dashboards/:id/edit/wizard/widget/:widget/template/:template/add-content(/)': 'wizardAddContent',\n 'manage/dashboards/:id/edit/wizard/widget/:widget/template/:template/edit-content/:id(/)': 'wizardEditContent'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'deleteWidget',\n 'searchWidgetContent',\n 'widgetContentGuideline',\n 'editDashboardDetails',\n 'addContentImageUpload',\n 'classroomGuide',\n 'interactiveGuidance',\n 'resourceGuidance'\n ];\n }\n}\n\nexport class DashboardEditorApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Dashboard Editor Application';\n }\n\n public static get router(): any {\n return DashboardEditorAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DASHBOARD_EDITOR;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: false\n }\n };\n }\n\n public async editDashboard(id: string): Promise<void> {\n const { EditDashboardContainerView } = await import('apps/dashboard-editor/views/edit-dashboard/EditDashboardContainerView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditDashboardContainerView id={id}/>);\n }\n\n public async deleteWidget(widgetId: string): Promise<void> {\n const { DeleteWidgetView } = await import('apps/dashboard-editor/views/delete-widget/DeleteWidgetView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteWidgetView\n widgetId={widgetId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async wizardSelectWidget(dashboardId: string): Promise<void> {\n const { DashboardWizardSelectWidgetView } = await import('apps/dashboard-editor/views/wizard/dashboard-wizard-select-widget/DashboardWizardSelectWidgetView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <DashboardWizardSelectWidgetView dashboardId={dashboardId} />\n );\n }\n\n public async wizardSelectTemplate(dashboardId: string, widgetTypeId: WidgetTypeId): Promise<void> {\n const { DashboardWizardSelectTemplateView } = await import('apps/dashboard-editor/views/wizard/dashboard-wizard-select-template/DashboardWizardSelectTemplateView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <DashboardWizardSelectTemplateView dashboardId={dashboardId} widgetTypeId={widgetTypeId} />\n );\n }\n\n public async wizardAddContent(\n dashboardId: string,\n widgetTypeId: WidgetTypeId,\n templateId: WidgetTemplate\n ): Promise<void> {\n const { DashboardWizardAddContentContainerView } = await import('apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/DashboardWizardAddContentContainerView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <DashboardWizardAddContentContainerView\n dashboardId={dashboardId}\n templateId={templateId}\n widgetTypeId={widgetTypeId}\n />\n );\n }\n\n // TODO: Replace these params w/ just widget ID\n public async wizardEditContent(\n dashboardId: string,\n widgetId: string,\n widgetTypeId: WidgetTypeId,\n templateId: WidgetTemplate\n ): Promise<void> {\n const { DashboardWizardAddContentContainerView } = await import('apps/dashboard-editor/views/wizard/dashboard-wizard-add-content/DashboardWizardAddContentContainerView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <DashboardWizardAddContentContainerView\n dashboardId={dashboardId}\n widgetId={widgetId}\n templateId={templateId}\n widgetTypeId={widgetTypeId}\n />\n );\n }\n\n public async editDashboardDetails(dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('./views/edit-dashboard-details/EditDashboardDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditDashboardDetailsView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async widgetContentGuideline(widgetTypeId: WidgetTypeId, widgetTemplate: WidgetTemplate): Promise<void> {\n const { DashboardWidgetContentGuidelineView } = await import('apps/dashboard-editor/views/wizard/widget-content-guideline/DashboardWidgetContentGuidelineView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DashboardWidgetContentGuidelineView\n widgetTypeId={widgetTypeId}\n widgetTemplate={widgetTemplate}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async addContentImageUpload(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n {...this.getPopupProps()}\n />\n );\n }\n\n public async classroomGuide(id: string, type: MasterType): Promise<void> {\n const { VideoGuidanceClassroomGuideView } = await import('./views/video-guidance-classroom-guide/VideoGuidanceClassroomGuideView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <VideoGuidanceClassroomGuideView id={id} type={type} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async interactiveGuidance(id: string, type: MasterType): Promise<void> {\n const { VideoGuidanceInteractivesView } = await import('./views/video-guidance-interactives/VideoGuidanceInteractivesView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <VideoGuidanceInteractivesView id={id} type={type} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async resourceGuidance(id: string, type: MasterType): Promise<void> {\n const { VideoGuidanceResourcesView } = await import('./views/video-guidance-resources/VideoGuidanceResourcesView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <VideoGuidanceResourcesView id={id} type={type} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts/curator-layout';\n\nclass DefaultAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DEFAULT;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {};\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'devError',\n 'dialogError'\n ];\n }\n}\n\nexport class DefaultApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Default Application';\n }\n\n public static get router(): any {\n return DefaultAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DEFAULT;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async dialogError(): Promise<void> {\n const { DialogView } = await import('libs/shared/views/dialog/DialogView');\n \n const error = Radio.channel('error:view').request('current:error');\n\n if (!error)\n return;\n\n const { dialogOptions } = error;\n\n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DialogView\n title={dialogOptions.title}\n text={dialogOptions.text}\n buttons={dialogOptions.buttons}\n onDone={error.onDone}\n onFail={error.onFail}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async devError(): Promise<void> {\n const { DevErrorView } = await import('libs/shared/views/dev-error/DevErrorView');\n \n const error = Radio.channel('error:view').request('current:error');\n\n this.layout.showChildView(LayoutRegions.CONTENT, <DevErrorView error={error} />);\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { Presentation } from 'libs/shared/interfaces/models/Presentation';\nimport { PopupViewProps } from 'libs/shared/interfaces/props/ViewProps';\n\nimport { Actions, AppChannels } from 'shared/constants';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { DashboardActionType } from 'shared/enums/DashboardActionType';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts/curator-layout';\n\nclass DiscoverAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DISCOVER;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/discover(/)': 'discover',\n 'manage/discover/presentations/:id/edit/dashboards(/)': 'presentationDashboards'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'newDashboard',\n 'deleteDashboard',\n 'publishDashboard',\n 'archiveDraftDashboard',\n 'editDiscoverDashboardDetails',\n 'copyDashboard'\n ];\n }\n}\n\nexport class DiscoverApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Discover Application';\n }\n\n public static get router(): any {\n return DiscoverAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DISCOVER;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async discover(): Promise<void> {\n const { SelectPresentationView } = await import('shared/views/select-presentation/SelectPresentationView');\n \n const getAppLink = (presentation: Presentation) => ({\n application: AppChannels.DISCOVER,\n action: Actions.Discover.PRESENTATION_DASHBOARDS,\n args: [presentation.id]\n });\n\n const props = { objectType: 'dashboards', getAppLink, showLastUpdated: true };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <SelectPresentationView {...props} />);\n }\n\n public async presentationDashboards(presentationId: string): Promise<void> {\n const { EditDiscoverDashboardListView } = await import('apps/discover/views/edit-dashboard-list/EditDiscoverDashboardListView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditDiscoverDashboardListView presentationId={presentationId} />);\n }\n\n public async newDashboard(presentationId: string): Promise<void> {\n const { NewDiscoverDashboardView } = await import('apps/discover/views/new-dashboard/NewDiscoverDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewDiscoverDashboardView\n presentationId={presentationId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async deleteDashboard(id: string): Promise<void> {\n const { RemoveDiscoverDashboardView } = await import('apps/discover/views/remove-dashboard/RemoveDiscoverDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveDiscoverDashboardView\n dashboardId={id}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async publishDashboard(\n dashboardId: string,\n dashboardToArchiveId: string\n ): Promise<void> {\n const { PublishDashboardView } = await import('shared/views/publish-dashboard/PublishDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <PublishDashboardView\n dashboardToPublishId={dashboardId}\n dashboardToArchiveId={\n typeof dashboardToArchiveId === 'string' ?\n dashboardToArchiveId :\n undefined}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async archiveDraftDashboard(\n actionType: DashboardActionType,\n dashboardId: string\n ): Promise<void> {\n const { ArchiveDraftDashboardView } = await import('shared/views/archive-draft-dashboard/ArchiveDraftDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ArchiveDraftDashboardView\n dashboardId={dashboardId}\n actionType={actionType}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async editDiscoverDashboardDetails(dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('apps/dashboard-editor/views/edit-dashboard-details/EditDashboardDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditDashboardDetailsView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async copyDashboard(dashboardId: string): Promise<void> {\n const { CopyDashboardView } = await import('apps/discover/views/copy-dashboard/CopyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyDashboardView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { Core } from 'libs/common/core';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AppChannels, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass DomainOptionsAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DOMAIN_OPTIONS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'developer/options(/)': 'domainOptions',\n 'developer/options/new(/)': 'newDomainOption',\n 'developer/options/:id(/)': 'editDomainOption'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'deleteDomainOption'\n ];\n }\n}\n\nexport class DomainOptionsApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Domain Options Application';\n }\n\n public static get router(): any {\n return DomainOptionsAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.DOMAIN_OPTIONS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return { name: Layouts.CURATOR_LAYOUT };\n }\n\n public async domainOptions(): Promise<void> {\n const { DomainOptionsView } = await import('apps/domain-options/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <DomainOptionsView />);\n }\n\n public async newDomainOption(): Promise<void> {\n const { NewDomainOptionView } = await import('apps/domain-options/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewDomainOptionView />);\n }\n\n public async editDomainOption(optionId: string): Promise<void> {\n const { EditDomainOptionView } = await import('apps/domain-options/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditDomainOptionView optionId={optionId} />);\n }\n\n public async deleteDomainOption(optionId: string): Promise<void> {\n const { DeleteDomainOptionView } = await import('apps/domain-options/views');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteDomainOptionView optionId={optionId} {...this.getPopupProps()} />\n );\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { RecentItemHelper } from 'libs/shared/utils/RecentItemHelper';\n\nimport { AppChannels } from 'shared/constants';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { SubjectMemberType } from 'shared/enums';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts/curator-layout';\n\nimport { RECENT_INTERACTIVES_KEY, RECENT_INTERACTIVES_LIMIT } from 'apps/interactives/views/find-interactives/FindInteractivesView';\n\nclass InteractivesAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.INTERACTIVES;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/interactives(/)': 'index',\n 'manage/interactives/:id(/)': 'previewInteractive',\n 'manage/interactives/:id/edit(/)': 'editInteractive',\n 'manage/interactives/:id/classifications(/)': 'editInteractiveClassifications',\n 'manage/interactives/:id/audiences(/)': 'editInteractiveAudiences',\n 'manage/interactives/:id/curation(/)': 'editInteractiveCuration'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'newInteractive',\n 'editInteractiveDetails',\n 'publishInteractive',\n 'archiveInteractive',\n 'deleteInteractive',\n 'removeInteractiveClassification',\n 'copyInteractive'\n ];\n }\n}\n\nexport class InteractivesApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Interactives Application';\n }\n\n public static get router(): any {\n return InteractivesAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.INTERACTIVES;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async index(): Promise<void> {\n const { FindInteractivesView } = await import('apps/interactives/views/find-interactives/FindInteractivesView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <FindInteractivesView />\n );\n }\n\n public async newInteractive(parentId: string): Promise<void> {\n const { NewInteractiveView } = await import('apps/interactives/views/new-interactive/NewInteractiveView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewInteractiveView parentId={parentId} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async previewInteractive(id: string): Promise<void> {\n const { PreviewInteractiveView } = await import('apps/interactives/views/preview-interactive/PreviewInteractiveView');\n \n this.addRecentInteractive(id);\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <PreviewInteractiveView id={id} />\n );\n }\n\n public async editInteractive(id: string): Promise<void> {\n const { EditInteractiveView } = await import('apps/interactives/views/edit-interactive/EditInteractiveView');\n \n this.addRecentInteractive(id);\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditInteractiveView id={id} />\n );\n }\n\n public async editInteractiveDetails(id: string, params: HashObject): Promise<void> {\n const { EditInteractiveDetailsView } = await import('apps/interactives/views/edit-interactive-details/EditInteractiveDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditInteractiveDetailsView\n interactiveMetadataId={id}\n publish={!!params.publish}\n closePopup={() => this.layout.closePopup()} />\n );\n }\n \n public async editInteractiveClassifications(interactiveId: string): Promise<void> {\n const { EditInteractiveClassificationsView } = await import('apps/interactives/views/edit-interactive-classifications/EditInteractiveClassificationsView');\n \n this.addRecentInteractive(interactiveId);\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditInteractiveClassificationsView interactiveId={interactiveId} />\n );\n }\n\n public async editInteractiveAudiences(interactiveId: string): Promise<void> {\n const { EditInteractiveAudiencesView } = await import('apps/interactives/views/edit-interactive-audiences/EditInteractiveAudiencesView');\n \n this.addRecentInteractive(interactiveId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditInteractiveAudiencesView interactiveId={interactiveId} />);\n }\n\n public async editInteractiveCuration(interactiveId: string): Promise<void> {\n const { EditInteractiveCurationView } = await import('apps/interactives/views/edit-interactive-curation/EditInteractiveCurationView');\n \n this.addRecentInteractive(interactiveId);\n this.layout.showChildView(LayoutRegions.CONTENT, <EditInteractiveCurationView interactiveId={interactiveId} />);\n }\n\n public async removeInteractiveClassification(\n classificationId: string,\n memberId: string,\n memberType: SubjectMemberType\n ): Promise<void> {\n const { RemoveClassificationMemberView } = await import('shared/views/remove-classification-member');\n \n const props = {\n classificationId,\n memberId,\n memberType,\n closePopup: () => this.layout.closePopup()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationMemberView {...props} />);\n }\n\n public async publishInteractive(id: string): Promise<void> {\n const { PublishObjectView } = await import('shared/views/publish-object/PublishObjectView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <PublishObjectView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async archiveInteractive(id: string): Promise<void> {\n const { ArchiveObjectView } = await import('shared/views/archive-object/ArchiveObjectView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ArchiveObjectView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async deleteInteractive(id: string): Promise<void> {\n const { DeleteInteractiveView } = await import('apps/interactives/views/delete-interactive/DeleteInteractiveView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteInteractiveView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async copyInteractive(id: string): Promise<void> {\n const { CopyInteractiveView } = await import('apps/videos/views/copy-video-interactive/CopyInteractiveView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyInteractiveView interactiveId={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n private addRecentInteractive(id: string): void {\n RecentItemHelper.addRecentItem(RECENT_INTERACTIVES_KEY, LocalStorageHelper, {\n id,\n limit: RECENT_INTERACTIVES_LIMIT,\n expire: false\n });\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\nimport { ApplicationOptions } from 'backbone.marionette';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { FullScreenLayoutView, FullScreenLayoutViewOptions } from 'shared/layouts';\n\nimport { FieldType } from 'apps/marketing/interfaces/BrazeField';\nimport { ContactImportQueryParams } from 'apps/marketing/interfaces/ContactImportQueryParams';\n\nclass MarketingAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.MARKETING_APP;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'marketing': 'index',\n 'marketing/catalog/:region/:id': 'viewCatalog',\n 'marketing/contacts': 'contactUpload',\n 'marketing/contact-import/upload': 'contactImportUpload',\n 'marketing/contact-import/origin-type': 'contactImportOriginType',\n 'marketing/contact-import/destination': 'contactImportDestination',\n 'marketing/contact-import/import-options': 'contactImportImportOptions',\n 'marketing/contact-import/advanced-options': 'contactImportAdvancedOptions',\n 'marketing/contact-import/review': 'contactImportReview',\n 'marketing/contact-import': 'contactImport'\n };\n }\n\n // @ts-ignore\n protected get externalRoutes(): ObjectHash {\n return {\n '/': 'exit'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'deleteCatalog',\n 'createCatalog',\n 'editCatalog',\n 'createFields',\n 'createItems',\n 'deleteItem',\n 'deleteField'\n ];\n }\n}\n\nexport class MarketingApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n public initialize(options: ApplicationOptions): void {\n super.initialize(options);\n const footer = document.getElementById('footer');\n if (footer) {\n footer.style.display = 'none';\n }\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Marketing Application';\n }\n\n public static get router(): any {\n return MarketingAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.MARKETING_APP;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: true\n }\n };\n }\n\n public async index(): Promise<void> {\n const { AllCatalogsView } = await import('apps/marketing/views/catalogs/all-catalogs/AllCatalogsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <AllCatalogsView />\n );\n }\n\n // AppLinks for Catalogs\n\n public async deleteCatalog(catalogName: string, region: string): Promise<void> {\n const { DeleteCatalogView } = await import('apps/marketing/views/catalogs/delete-catalog/DeleteCatalogView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteCatalogView\n catalogName={catalogName}\n region={region}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async viewCatalog(region: string, catalogName: string): Promise<void> {\n const { ViewCatalogView } = await import('apps/marketing/views/catalogs/view-catalog/ViewCatalogView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ViewCatalogView\n catalogName={catalogName}\n region={region}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async createCatalog(): Promise<void> {\n const { CreateCatalogView } = await import('apps/marketing/views/catalogs/create-catalog/CreateCatalogView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateCatalogView\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async editCatalog(\n catalogName: string,\n currentValue: FieldType,\n id: string,\n fieldName: string,\n fieldType: FieldType,\n region: string\n ): Promise<void> {\n const { EditCatalogView } = await import('apps/marketing/views/catalogs/edit-catalog/EditCatalogView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditCatalogView\n catalogName={catalogName}\n currentValue={currentValue}\n id={id}\n fieldName={fieldName}\n fieldType={fieldType}\n region={region}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async createFields(catalogName: string, region: string): Promise<void> {\n const { CreateFieldView } = await import('apps/marketing/views/catalogs/create-field/CreateFieldView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateFieldView\n region={region}\n catalogName={catalogName}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async createItems(catalogName: string, region: string): Promise<void> {\n const { CreateItemView } = await import('apps/marketing/views/catalogs/create-item/CreateItemView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateItemView\n region={region}\n catalogName={catalogName}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteItem(catalogName: string, itemId: string, region: string): Promise<void> {\n const { DeleteItemView } = await import('apps/marketing/views/catalogs/delete-item/DeleteItemView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteItemView\n region={region}\n catalogName={catalogName}\n itemId={itemId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteField(catalogName: string, fieldName: string, region: string): Promise<void> {\n const { DeleteFieldView } = await import('apps/marketing/views/catalogs/delete-field/DeleteFieldView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteFieldView\n catalogName={catalogName}\n fieldName={fieldName}\n region={region}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n // AppLinks for Contact Upload\n \n public async contactUpload(): Promise<void> {\n const { ContactUploadView } = await import('apps/marketing/views/contact-upload/contact-upload-wizard/ContactUploadView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactUploadView />\n );\n }\n\n public async contactImport(params?: ObjectHash): Promise<void> {\n const { ContactImportHomeView } = await import('apps/marketing/views/contact-import/home/ContactImportHomeView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactImportHomeView {...params} />\n );\n }\n\n public async contactImportUpload(queryParams?: ContactImportQueryParams): Promise<void> {\n const { ContactImportUploadView } = await import('apps/marketing/views/contact-import/upload/ContactImportUploadView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactImportUploadView queryParams={queryParams} />\n );\n }\n\n public async contactImportOriginType(queryParams?: ContactImportQueryParams): Promise<void> {\n const { ContactImportOriginTypeView } = await import('apps/marketing/views/contact-import/origin-type/ContactImportOriginTypeView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactImportOriginTypeView queryParams={queryParams} />\n );\n }\n\n public async contactImportDestination(queryParams?: ContactImportQueryParams): Promise<void> {\n const { ContactImportDestinationsView } = await import('apps/marketing/views/contact-import/destinations/ContactImportDestinationsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactImportDestinationsView queryParams={queryParams} />\n );\n }\n\n public async contactImportImportOptions(queryParams?: ContactImportQueryParams): Promise<void> {\n const { ContactImportOptionsView } = await import('apps/marketing/views/contact-import/import-options/ContactImportOptionsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactImportOptionsView queryParams={queryParams} />\n );\n }\n\n public async contactImportAdvancedOptions(queryParams?: ContactImportQueryParams): Promise<void> {\n const { ContactImportAdvancedOptionsView } = await import('apps/marketing/views/contact-import/advanced-options/ContactImportAdvancedOptionsView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactImportAdvancedOptionsView queryParams={queryParams} />\n );\n }\n\n public async contactImportReview(queryParams?: ContactImportQueryParams): Promise<void> {\n const { ContactImportReviewView } = await import('apps/marketing/views/contact-import/review/ContactImportReviewView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ContactImportReviewView queryParams={queryParams} />\n );\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { Presentation } from 'libs/shared/interfaces/models/Presentation';\nimport { PopupViewProps } from 'libs/shared/interfaces/props/ViewProps';\n\nimport { Actions, AppChannels } from 'shared/constants';\nimport { Layouts } from 'shared/constants/Layouts';\nimport { DashboardActionType } from 'shared/enums/DashboardActionType';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts/curator-layout';\n\nclass MoviesAndTvAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.MOVIES_AND_TV;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/movies-and-tv(/)': 'moviesAndTv',\n 'manage/movies-and-tv/presentations/:id/edit/dashboards(/)': 'presentationMoviesAndTvDashboards'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'newMoviesAndTvDashboard',\n 'deleteDashboard',\n 'publishDashboard',\n 'archiveDraftDashboard',\n 'editMoviesAndTvDashboardDetails',\n 'copyDashboard'\n ];\n }\n}\n\nexport class MoviesAndTvApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Movies and Tv Application';\n }\n\n public static get router(): any {\n return MoviesAndTvAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.MOVIES_AND_TV;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async moviesAndTv(): Promise<void> {\n const { SelectPresentationView } = await import('shared/views/select-presentation/SelectPresentationView');\n \n const getAppLink = (presentation: Presentation) => ({\n application: AppChannels.MOVIES_AND_TV,\n action: Actions.MoviesAndTv.MOVIES_AND_TV_DASHBOARD,\n args: [presentation.id]\n });\n\n const props = { objectType: 'dashboards', getAppLink };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <SelectPresentationView {...props} />);\n }\n\n public async presentationMoviesAndTvDashboards(presentationId: string): Promise<void> {\n const { EditMoviesAndTvDashboardListView } = await import('apps/movies-and-tv/views/edit-dashboard-list/EditMoviesAndTvDashboardListView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditMoviesAndTvDashboardListView presentationId={presentationId} />\n );\n }\n\n public async newMoviesAndTvDashboard(presentationId: string): Promise<void> {\n const { NewMoviesAndTvDashboardView } = await import('apps/movies-and-tv/views/new-dashboard/NewMoviesAndTvDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <NewMoviesAndTvDashboardView\n presentationId={presentationId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async editMoviesAndTvDashboardDetails(dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('apps/dashboard-editor/views/edit-dashboard-details/EditDashboardDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditDashboardDetailsView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async copyDashboard(dashboardId: string): Promise<void> {\n const { CopyDashboardView } = await import('apps/discover/views/copy-dashboard/CopyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyDashboardView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async deleteDashboard(id: string): Promise<void> {\n const { RemoveMoviesAndTvDashboardView } = await import('apps/movies-and-tv/views/remove-dashboard/RemoveMoviesAndTvDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RemoveMoviesAndTvDashboardView\n dashboardId={id}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async publishDashboard(\n dashboardId: string,\n dashboardToArchiveId: string\n ): Promise<void> {\n const { PublishDashboardView } = await import('shared/views/publish-dashboard/PublishDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <PublishDashboardView\n dashboardToPublishId={dashboardId}\n dashboardToArchiveId={\n typeof dashboardToArchiveId === 'string' ?\n dashboardToArchiveId :\n undefined}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async archiveDraftDashboard(\n actionType: DashboardActionType,\n dashboardId: string\n ): Promise<void> {\n const { ArchiveDraftDashboardView } = await import('shared/views/archive-draft-dashboard/ArchiveDraftDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ArchiveDraftDashboardView\n dashboardId={dashboardId}\n actionType={actionType}\n {...this.getPopupProps()}\n />\n );\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts/curator-layout';\n\nimport { NewOrganisationQueryParams } from 'apps/organisations/views/new-organisation/NewOrganisationView';\n\nclass OrganisationsAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.ORGANISATIONS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'system/organisations/new': 'newOrganisation',\n 'organisations/:id/sso': 'sso'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [];\n }\n\n // @ts-ignore\n protected get externalRoutes(): ObjectHash {\n return {\n 'system/organisations/:id': 'organisation:manage'\n };\n }\n}\n\nexport class OrganisationsApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Organisations Application';\n }\n\n public static get router(): any {\n return OrganisationsAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.ORGANISATIONS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async newOrganisation(params: NewOrganisationQueryParams): Promise<void> {\n const { NewOrganisationView } = await import('apps/organisations/views/new-organisation/NewOrganisationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <NewOrganisationView accountId={params.accountId} />\n );\n }\n\n public async sso(organisationId: string): Promise<void> {\n const { OrganisationSsoManagementView } = await import('apps/organisations/views/sso-management/OrganisationSsoManagementView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <OrganisationSsoManagementView organisationId={organisationId} />\n );\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { AppChannels, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass PeopleAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.PEOPLE;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/people(/)': 'people',\n 'manage/people/new(/)': 'newPerson',\n 'manage/people/:id(/)': 'editPerson'\n };\n }\n}\n\nexport class PeopleApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'People Application';\n }\n\n public static get router(): any {\n return PeopleAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.PEOPLE;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return { name: Layouts.CURATOR_LAYOUT };\n }\n\n public async people(params: ObjectHash): Promise<void> {\n const { PeopleView } = await import('apps/people/views');\n \n const { cursor } = params;\n\n this.layout.showChildView(LayoutRegions.CONTENT, <PeopleView cursor={cursor} />);\n }\n\n public async newPerson(): Promise<void> {\n const { NewPersonView } = await import('apps/people/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewPersonView />);\n }\n\n public async editPerson(id: string): Promise<void> {\n const { EditPersonView } = await import('apps/people/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditPersonView id={id} />);\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AppChannels, DataServices, Layouts } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass PlaylistsAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.PLAYLISTS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/playlists(/)': 'index',\n 'manage/playlists/new(/)': 'newPlaylist',\n 'manage/playlists/search(/)': 'searchPlaylists',\n 'manage/playlists/:id(/)': 'editPlaylist',\n 'manage/playlists/:id/videos(/)': 'editPlaylistVideos',\n 'manage/playlists/:id/dashboards(/)': 'editPlaylistDashboards',\n 'manage/playlists/:id/classifications(/)': 'editPlaylistSubjects',\n 'manage/playlists/:id/audiences(/)': 'editPlaylistAudiences',\n 'manage/playlists/:id/aliases(/)': 'editPlaylistAliases',\n 'manage/playlists/:id/curation(/)': 'editPlaylistCuration'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'deletePlaylist',\n 'removeVideo',\n 'uploadImage',\n 'removeFromSubject',\n 'deleteDashboardWidget',\n 'addToWorkbench'\n ];\n }\n\n // @ts-ignore\n protected get externalRoutes(): HashObject {\n return {\n 'dashboards/:id(/)': 'dashboard'\n };\n }\n}\n\nexport class PlaylistsApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n\n public initialize(): void {\n /**\n * Obtain an instance of all data services used in the application\n * to prevent any instances being destroyed between renders.\n * \n * This is caused by the InstanceManager not being suited\n * to the way React renders function components - Matt.\n */\n ObjectHelper.values(DataServices).forEach(d => InstanceManager.getInstance(d, this));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Playlists Application';\n }\n\n public static get router(): any {\n return PlaylistsAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.PLAYLISTS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {}\n };\n }\n\n public async index(params?: HashObject): Promise<void> {\n const { PlaylistsView } = await import('apps/playlists/views/playlists');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <PlaylistsView cursor={params?.cursor} />);\n }\n\n public async searchPlaylists(params?: HashObject): Promise<void> {\n const { PlaylistSearchResultsView } = await import('apps/playlists/views/playlist-search-results');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <PlaylistSearchResultsView query={params?.query} cursor={params?.cursor} />\n );\n }\n\n public async addToWorkbench(objectId: string): Promise<void> {\n const { AddToWorkbenchView } = await import('apps/workbench/views/add-to-workbench/AddToWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddToWorkbenchView\n objectId={objectId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async newPlaylist(): Promise<void> {\n const { NewPlaylistView } = await import('apps/playlists/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewPlaylistView />);\n }\n\n public async editPlaylist(playlistId: string): Promise<void> {\n const { EditPlaylistView } = await import('apps/playlists/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditPlaylistView key={playlistId} playlistId={playlistId} />);\n }\n\n public async editPlaylistVideos(playlistId: string): Promise<void> {\n const { EditPlaylistVideosView } = await import('apps/playlists/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditPlaylistVideosView key={playlistId} playlistId={playlistId} />\n );\n }\n\n public async editPlaylistDashboards(playlistId: string): Promise<void> {\n const { EditPlaylistDashboardsView } = await import('apps/playlists/views/edit-playlist-dashboards/EditPlaylistDashboardsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditPlaylistDashboardsView key={playlistId} playlistId={playlistId} />\n );\n }\n\n public async editPlaylistSubjects(playlistId: string): Promise<void> {\n const { EditPlaylistSubjectsView } = await import('apps/playlists/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditPlaylistSubjectsView key={playlistId} playlistId={playlistId} />\n );\n }\n\n public async editPlaylistAudiences(playlistId: string): Promise<void> {\n const { EditPlaylistAudiencesView } = await import('apps/playlists/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditPlaylistAudiencesView key={playlistId} playlistId={playlistId} />\n );\n }\n\n public async editPlaylistAliases(playlistId: string): Promise<void> {\n const { EditPlaylistAliasesView } = await import('apps/playlists/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditPlaylistAliasesView key={playlistId} playlistId={playlistId} />\n );\n }\n\n public async editPlaylistCuration(playlistId: string): Promise<void> {\n const { EditPlaylistCurationView } = await import('apps/playlists/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditPlaylistCurationView key={playlistId} playlistId={playlistId} />\n );\n }\n\n public async deletePlaylist(playlistId: string): Promise<void> {\n const { DeletePlaylistView } = await import('apps/playlists/views');\n \n const props = {\n playlistId,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeletePlaylistView {...props} />);\n }\n\n public async removeVideo(playlistId: string, videoId: string): Promise<void> {\n const { RemoveVideoView } = await import('apps/playlists/views');\n \n const props = {\n playlistId,\n videoId,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveVideoView {...props} />);\n }\n\n public async removeFromSubject(playlistId: string, subjectId: string): Promise<void> {\n const { RemoveSubjectMemberView } = await import('apps/subjects/views');\n \n const props = {\n subjectId,\n memberId: playlistId,\n memberType: SubjectMemberType.Playlists,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveSubjectMemberView {...props} />);\n }\n\n public async deleteDashboardWidget(dashboardId: string, widgetId: string): Promise<void> {\n const { DeleteDashboardWidgetView } = await import('apps/playlists/views/delete-dashboard-widget/DeleteDashboardWidgetView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteDashboardWidgetView\n dashboardId={dashboardId}\n widgetId={widgetId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { Core } from 'libs/common/core';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass ReleaseNotesAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.RELEASE_NOTES;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'developer/release-notes(/)': 'index',\n 'developer/release-notes/generate(/)': 'form',\n 'developer/release-notes/generator(/)': 'generator'\n };\n }\n}\n\nexport class ReleaseNotesApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Release Notes Application';\n }\n\n public static get router(): any {\n return ReleaseNotesAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.RELEASE_NOTES;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return { name: Layouts.CURATOR_LAYOUT };\n }\n\n public index(): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.RELEASE_NOTES,\n action: Actions.ReleaseNotes.GENERATOR\n }, { replace: true });\n }\n\n public async form(): Promise<void> {\n const { ReleaseNotesFormView } = await import('apps/release-notes/views/ReleaseNotesFormView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <ReleaseNotesFormView />);\n }\n\n public async generator(): Promise<void> {\n const { ReleaseNotesGeneratorView } = await import('apps/release-notes/views/ReleaseNotesGeneratorView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <ReleaseNotesGeneratorView />);\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { Core } from 'libs/common/core';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { AppChannels, DataServices, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass SeriesAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SERIES;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/series/new(/)': 'newSeries',\n 'manage/series/:id(/)': 'editSeries',\n 'manage/series/:id/videos(/)': 'editSeriesVideos',\n 'manage/series/:id/classifications(/)': 'editSeriesSubjects',\n 'manage/series/:id/audiences(/)': 'editSeriesAudiences',\n 'manage/series/:id/aliases(/)': 'editSeriesAliases',\n 'manage/series/:id/curation(/)': 'editSeriesCuration',\n\n 'manage/legacy/series/:id(/)': 'legacyEditSeries'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'uploadImage'\n ];\n }\n}\n\nexport class SeriesApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n\n public initialize(): void {\n /**\n * Obtain an instance of all data services used in the application\n * to prevent any instances being destroyed between renders.\n * \n * This is caused by the InstanceManager not being suited\n * to the way React renders function components - Matt.\n */\n ObjectHelper.values(DataServices).forEach(d => InstanceManager.getInstance(d, this));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Series Application';\n }\n\n public static get router(): any {\n return SeriesAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SERIES;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {}\n };\n }\n\n public async newSeries(): Promise<void> {\n const { NewSeriesView } = await import('apps/series/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewSeriesView />);\n }\n\n public async editSeries(seriesId: string): Promise<void> {\n const { EditSeriesView } = await import('apps/series/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditSeriesView seriesId={seriesId} />);\n }\n\n public editSeriesVideos(seriesId: string): void {\n this.legacyEditSeries(seriesId);\n }\n\n public async editSeriesSubjects(seriesId: string): Promise<void> {\n const { EditSeriesSubjectsView } = await import('apps/series/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditSeriesSubjectsView seriesId={seriesId} />);\n }\n\n public async editSeriesAudiences(seriesId: string): Promise<void> {\n const { EditSeriesAudiencesView } = await import('apps/series/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditSeriesAudiencesView seriesId={seriesId} />);\n }\n\n public async editSeriesAliases(seriesId: string): Promise<void> {\n const { EditSeriesAliasesView } = await import('apps/series/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditSeriesAliasesView seriesId={seriesId} />);\n }\n\n public async editSeriesCuration(seriesId: string): Promise<void> {\n const { EditSeriesCurationView } = await import('apps/series/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditSeriesCurationView seriesId={seriesId} />);\n }\n\n public legacyEditSeries(seriesId: string): void {\n Core.LocationUtils.Redirect(`/manage/legacy/series/${seriesId}`, true);\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { FullScreenLayoutView, FullScreenLayoutViewOptions } from 'shared/layouts';\n\nclass ShortLinkAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SHORT_LINK;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'shorten-link(/)': 'index'\n };\n }\n}\n\nexport class ShortLinkApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Short Link Application';\n }\n\n public static get router(): any {\n return ShortLinkAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SHORT_LINK;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: true\n }\n };\n }\n\n public async index(): Promise<void> {\n const { ShortLinkView } = await import('apps/short-link/views/ShortLinkView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <ShortLinkView />\n );\n }\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { CalendarEventStatus } from 'libs/shared/interfaces';\n\nimport { AppChannels, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nimport { SpecialEventsViewQueryParams } from './interfaces/SpecialEventsViewQueryParams';\n\nclass SpecialEventsAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SPECIAL_EVENTS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/special-events': 'index'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'createSpecialEvent',\n 'editSpecialEvent',\n 'addToCalendar',\n 'editSpecialEventPolicy',\n 'deleteSpecialEventPolicy',\n 'updatePolicyStatus'\n ];\n }\n}\n\nexport class SpecialEventsApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Special Events Application';\n }\n\n public static get router(): any {\n return SpecialEventsAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SPECIAL_EVENTS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async index(params: SpecialEventsViewQueryParams = {}): Promise<void> {\n const { SpecialEventsView } = await import('./views/special-events/SpecialEventsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <SpecialEventsView queryParams={params} />);\n }\n\n public async addToCalendar(id: string): Promise<void> {\n const { AddToCalendarView } = await import('./views/add-to-calendar/AddToCalendarContainerView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddToCalendarView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async createSpecialEvent(): Promise<void> {\n const { CreateSpecialEventView } = await import('./views/create-special-event/CreateSpecialEventView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateSpecialEventView closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async editSpecialEvent(id: string): Promise<void> {\n const { EditSpecialEventView } = await import('./views/edit-special-event/EditSpecialEventView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditSpecialEventView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async editSpecialEventPolicy(specialEventId: string, specialEventPolicyId: string): Promise<void> {\n const { EditSpecialEventPolicyView } = await import('./views/edit-special-event-policy/EditSpecialEventPolicyView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <EditSpecialEventPolicyView\n specialEventId={specialEventId}\n specialEventPolicyId={specialEventPolicyId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteSpecialEventPolicy(specialEventId: string, specialEventPolicyId: string): Promise<void> {\n const { DeleteSpecialEventPolicyView } = await import('./views/delete-special-event-policy/DeleteSpecialEventPolicyView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteSpecialEventPolicyView\n specialEventId={specialEventId}\n specialEventPolicyId={specialEventPolicyId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async updatePolicyStatus(\n specialEventId: string,\n specialEventPolicyId: string,\n status: CalendarEventStatus\n ): Promise<void> {\n const { UpdatePolicyStatusView } = await import('./views/update-policy-status/UpdatePolicyStatusView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <UpdatePolicyStatusView\n specialEventId={specialEventId}\n specialEventPolicyId={specialEventPolicyId}\n status={status}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { BaseAlert } from 'libs/common/backbone/services/BaseAlertService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { Core } from 'libs/common/core';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\nimport { DashboardTargetType, PopupViewProps, Presentation, PresentationAudience } from 'libs/shared/interfaces';\n\nimport { Actions, AppChannels, DataServices, Layouts } from 'shared/constants';\nimport { LevelMemberType, SubjectMemberType } from 'shared/enums';\nimport { DashboardActionType } from 'shared/enums/DashboardActionType';\nimport { ClassificationTree, SubjectTree } from 'shared/interfaces/models';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\nimport { SubjectDataService } from 'shared/services';\n\nimport { TopNavView } from 'apps/subjects/views';\n\nconst presentationType = PresentationType.Subject;\n\nclass SubjectsAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SUBJECTS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/subjects(/)': 'subjects',\n 'manage/subjects/add-objects(/)': 'addSubjectMembers',\n 'manage/subjects/new(/)': 'newSubject',\n 'manage/subjects/:id/edit(/)': 'editSubject',\n 'manage/subjects/:id/edit/playlists(/)': 'editSubjectPlaylists',\n 'manage/subjects/:id/edit/series(/)': 'editSubjectSeries',\n 'manage/subjects/:id/edit/videos(/)': 'editSubjectVideos',\n 'manage/subjects/:id/edit/clips(/)': 'editSubjectClips',\n 'manage/subjects/:id/edit/interactives(/)': 'editSubjectInteractives',\n 'manage/subjects/:id/classifications(/)': 'subjectClassifications',\n\n 'manage/subjects/classifications(/)': 'classifications',\n 'manage/subjects/presentations/:id/classifications(/)': 'presentationClassifications',\n 'manage/subjects/presentations/:id/classifications/new(/)': 'newClassification',\n 'manage/subjects/presentations/:id/classifications/:id/edit(/)': 'editClassification',\n 'manage/subjects/presentations/:id/classifications/:id/edit/curation(/)': 'editClassificationCuration',\n 'manage/subjects/presentations/:id/classifications/:id/edit/playlists(/)': 'editClassificationPlaylists',\n 'manage/subjects/presentations/:id/classifications/:id/edit/series(/)': 'editClassificationSeries',\n 'manage/subjects/presentations/:id/classifications/:id/edit/videos(/)': 'editClassificationVideos',\n 'manage/subjects/presentations/:id/classifications/:id/edit/clips(/)': 'editClassificationClips',\n 'manage/subjects/presentations/:id/classifications/:id/edit/interactives(/)': 'editClassificationInteractives',\n 'manage/subjects/presentations/:id/classifications/:id/edit/aliases(/)': 'editClassificationAliases',\n 'manage/subjects/presentations/:id/classifications/:id/edit/dashboards(/)': 'editClassificationDashboards',\n 'manage/subjects/presentations/:id/classifications/:id/edit/directories(/)': 'editClassificationDirectories',\n\n 'manage/subjects/levels(/)': 'levels',\n 'manage/subjects/levels/new(/)': 'newLevel',\n 'manage/subjects/levels/:id(/)': 'level',\n 'manage/subjects/levels/:id/edit(/)': 'editLevel',\n 'manage/subjects/levels/:id/edit/playlists(/)': 'editLevelPlaylists',\n 'manage/subjects/levels/:id/edit/series(/)': 'editLevelSeries',\n 'manage/subjects/levels/:id/edit/videos(/)': 'editLevelVideos',\n 'manage/subjects/levels/:id/edit/clips(/)': 'editLevelClips',\n 'manage/subjects/levels/:id/edit/interactives(/)': 'editLevelInteractives',\n 'manage/subjects/levels/:id/audiences(/)': 'levelAudiences',\n\n 'manage/subjects/audiences(/)': 'audiences',\n 'manage/subjects/presentations/:id/audiences(/)': 'presentationAudiences',\n 'manage/subjects/presentations/:id/audiences/new(/)': 'newAudience',\n 'manage/subjects/presentations/:id/audiences/:id/edit(/)': 'editAudience',\n 'manage/subjects/presentations/:id/audiences/:id/edit/playlists(/)': 'editAudiencePlaylists',\n 'manage/subjects/presentations/:id/audiences/:id/edit/series(/)': 'editAudienceSeries',\n 'manage/subjects/presentations/:id/audiences/:id/edit/videos(/)': 'editAudienceVideos',\n 'manage/subjects/presentations/:id/audiences/:id/edit/clips(/)': 'editAudienceClips',\n 'manage/subjects/presentations/:id/audiences/:id/edit/interactives(/)': 'editAudienceInteractives',\n\n 'manage/subjects/presentations(/)': 'presentations',\n 'manage/subjects/presentations/new': 'newPresentation',\n 'manage/subjects/presentations/:id(/)': 'editPresentation'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'deleteClassification',\n 'removeClassificationMember',\n 'bulkRemoveClassificationMembers',\n 'deleteSubject',\n 'removeSubjectMember',\n\n 'deleteAudience',\n 'removeLevelMember',\n 'removeAudienceMember',\n 'newClassificationDashboard',\n 'editClassificationDashboard',\n 'archiveDraftClassificationDashboard',\n 'publishClassificationDashboard',\n 'removeClassificationDashboard',\n 'copyClassificationDashboard',\n\n 'uploadImage',\n 'addToWorkbench',\n 'addUnusedVideos'\n ];\n }\n\n // @ts-ignore\n protected get externalRoutes(): ObjectHash {\n return {\n 'hostedlibraries/:id(/)': 'hostedLibraries',\n 'exchange/programs': 'exchange'\n };\n }\n}\n\nexport class SubjectsApplication extends Core.Application {\n protected layout: CuratorLayoutView;\n private subjectDataService: SubjectDataService;\n\n private currentLeftNavId: string;\n\n public initialize(): void {\n this.subjectDataService = InstanceManager.getInstance(DataServices.SUBJECT, this);\n\n /**\n * Obtain an instance of all data services used in the application\n * to prevent any instances being destroyed between renders.\n * \n * This is caused by the InstanceManager not being suited\n * to the way React renders function components - Matt.\n */\n ObjectHelper.values(DataServices).forEach(d => InstanceManager.getInstance(d, this));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Subjects Application';\n }\n\n public static get router(): any {\n return SubjectsAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.SUBJECTS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n getTopNavView: this.getTopNav\n }\n };\n }\n\n public subjects(): void {\n this.subjectDataService.getSubjectTree(PresentationType.Subject, (subjectTree: SubjectTree) => {\n const firstSubject = !!subjectTree.children && subjectTree.children[0];\n\n if (!firstSubject) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.NEW_SUBJECT\n }, { replace: true });\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_SUBJECT,\n args: [firstSubject.id]\n }, { replace: true });\n });\n }\n\n public async addToWorkbench(objectId: string): Promise<void> {\n const { AddToWorkbenchView } = await import('apps/workbench/views/add-to-workbench/AddToWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddToWorkbenchView\n objectId={objectId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async newSubject(params: ObjectHash): Promise<void> {\n const { NewSubjectView } = await import('apps/subjects/views');\n \n const props = {\n parentId: params.parentId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <NewSubjectView key={params.parentId} {...props} />);\n\n this.renderSubjectsLeftNav();\n }\n\n public async editSubject(subjectId: string): Promise<void> {\n const { EditSubjectView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditSubjectView key={subjectId} subjectId={subjectId} />);\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async editSubjectPlaylists(subjectId: string, params?: { presentationId: string }): Promise<void> {\n const { EditSubjectMembersView } = await import('apps/subjects/views');\n \n const props = {\n subjectId,\n memberType: SubjectMemberType.Playlists,\n action: Actions.Subjects.EDIT_SUBJECT_PLAYLISTS,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditSubjectMembersView key={`${subjectId}:playlists`} {...props} />\n );\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async editSubjectSeries(subjectId: string, params?: { presentationId: string }): Promise<void> {\n const { EditSubjectMembersView } = await import('apps/subjects/views');\n \n const props = {\n subjectId,\n memberType: SubjectMemberType.Series,\n action: Actions.Subjects.EDIT_SUBJECT_SERIES,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditSubjectMembersView key={`${subjectId}:series`} {...props} />\n );\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async editSubjectVideos(subjectId: string, params?: { presentationId: string }): Promise<void> {\n const { EditSubjectMembersView } = await import('apps/subjects/views');\n \n const props = {\n subjectId,\n memberType: SubjectMemberType.Videos,\n action: Actions.Subjects.EDIT_SUBJECT_VIDEOS,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditSubjectMembersView key={`${subjectId}:videos`} {...props} />);\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async editSubjectClips(subjectId: string, params?: { presentationId: string }): Promise<void> {\n const { EditSubjectMembersView } = await import('apps/subjects/views');\n \n const props = {\n subjectId,\n memberType: SubjectMemberType.Clips,\n action: Actions.Subjects.EDIT_SUBJECT_CLIPS,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditSubjectMembersView key={`${subjectId}:clips`} {...props} />);\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async editSubjectInteractives(subjectId: string, params?: { presentationId: string }): Promise<void> {\n const { EditSubjectMembersView } = await import('apps/subjects/views');\n \n const props = {\n subjectId,\n memberType: SubjectMemberType.Interactives,\n action: Actions.Subjects.EDIT_SUBJECT_INTERACTIVES,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditSubjectMembersView key={`${subjectId}:interactives`} {...props} />);\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async subjectClassifications(subjectId: string): Promise<void> {\n const { SubjectClassificationsView } = await import('apps/subjects/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <SubjectClassificationsView key={subjectId} subjectId={subjectId} />\n );\n\n this.renderSubjectsLeftNav(subjectId);\n }\n\n public async addSubjectMembers(params: ObjectHash): Promise<void> {\n const { AddSubjectMembersView } = await import('apps/subjects/views');\n \n const { memberType, objectIds } = params;\n\n if (!memberType || !objectIds)\n return;\n\n const props = {\n memberType,\n objectIds: Array.isArray(objectIds) ? objectIds : [objectIds]\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <AddSubjectMembersView {...props} />);\n\n this.hideLeftNav();\n }\n\n public async removeSubjectMember(subjectId: string, memberId: string, memberType: SubjectMemberType): Promise<void> {\n const { RemoveSubjectMemberView } = await import('apps/subjects/views');\n \n const props = {\n subjectId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveSubjectMemberView {...props} />);\n }\n\n public async deleteSubject(subjectId: string): Promise<void> {\n const { DeleteSubjectView } = await import('apps/subjects/views');\n \n /**\n * If the subject being deleted is currently displayed the in the CONTENT region,\n * we want to route away from it on delete.\n */\n const routeToOnDelete = subjectId.toString() === this.currentLeftNavId.toString() ?\n { application: AppChannels.SUBJECTS, action: Actions.Subjects.NEW_SUBJECT } :\n null;\n\n const props = {\n subjectId,\n routeToOnDelete: routeToOnDelete || null,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteSubjectView {...props} />);\n }\n\n public async classifications(): Promise<void> {\n const { SelectPresentationView } = await import('shared/views/select-presentation/SelectPresentationView');\n \n const getAppLink = (presentation: Presentation) => ({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.PRESENTATION_CLASSIFICATIONS,\n args: [presentation.id]\n });\n\n const props = { objectType: 'topics', getAppLink };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <SelectPresentationView {...props} />);\n\n this.hideLeftNav();\n }\n\n public presentationClassifications(presentationId: string): void {\n this.subjectDataService.getClassificationTree(presentationId, (classificationTree: ClassificationTree) => {\n const firstClassification = !!classificationTree.children && classificationTree.children[0];\n\n if (!firstClassification) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.NEW_CLASSIFICATION,\n args: [presentationId]\n }, { replace: true });\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_CLASSIFICATION,\n args: [ presentationId, firstClassification.id ]\n }, { replace: true });\n });\n }\n\n public async newClassification(presentationId: string, params: ObjectHash): Promise<void> {\n const { NewClassificationView } = await import('apps/subjects/views');\n \n const props = {\n presentationId,\n parentId: params.parentId,\n presentationType: PresentationType.Subject\n };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <NewClassificationView key={params.parentId} {...props} />);\n\n this.renderClassificationLeftNav(presentationId);\n }\n\n public async newClassificationDashboard(\n classificationId: string,\n presentationId: string,\n targetType: DashboardTargetType.Classification | DashboardTargetType.ClassificationDirectory,\n params: { isAi: boolean }\n ): Promise<void> {\n const { NewClassificationDashboardView } = await import('apps/subjects/views/classifications/new-classification-dashboard/NewClassificationDashboardView');\n \n const props = {\n classificationId, presentationId, targetType, redirect: true, isAi: params.isAi, ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <NewClassificationDashboardView {...props} />);\n }\n\n public async editClassificationDashboard(classificationId: string, dashboardId: string): Promise<void> {\n const { EditDashboardDetailsView } = await import('apps/dashboard-editor/views/edit-dashboard-details/EditDashboardDetailsView');\n \n const props = { dashboardId, classificationId, ...this.getPopupProps() };\n\n this.layout.showChildView(LayoutRegions.POPUP, <EditDashboardDetailsView {...props} />);\n }\n\n public async copyClassificationDashboard(dashboardId: string): Promise<void> {\n const { CopyDashboardView } = await import('apps/discover/views/copy-dashboard/CopyDashboardView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyDashboardView\n dashboardId={dashboardId}\n {...this.getPopupProps()}\n />\n );\n }\n\n public async addUnusedVideos(dashboardId: string): Promise<void> {\n const { AddUnusedVideosView } = await import('apps/discover/views/add-unused-videos/AddUnusedVideos');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddUnusedVideosView dashboardId={dashboardId} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async editClassification(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationView } = await import('apps/subjects/views');\n \n const props = { presentationId, classificationId };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClassificationView key={classificationId} {...props} />);\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationCuration(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationCurationView } = await import('apps/subjects/views/classifications/edit-classification-curation/EditClassificationCurationView');\n \n const props = { presentationId, classificationId, memberType: SubjectMemberType.Tags };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationCurationView key={`${classificationId}:curation`} {...props} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationPlaylists(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationMembersView } = await import('apps/subjects/views/classifications/edit-classification-members/EditClassificationMembersView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationMembersView key={`${classificationId}:playlists`} memberType={SubjectMemberType.Playlists} presentationId={presentationId} classificationId={classificationId} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationSeries(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationMembersView } = await import('apps/subjects/views/classifications/edit-classification-members/EditClassificationMembersView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationMembersView key={`${classificationId}:series`} memberType={SubjectMemberType.Series} presentationId={presentationId} classificationId={classificationId} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationVideos(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationVideosView } = await import('apps/subjects/views/classifications/edit-classification-members/EditClassificationVideosView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationVideosView key={`${classificationId}:videos`} presentationId={presentationId} classificationId={classificationId} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationClips(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationMembersView } = await import('apps/subjects/views/classifications/edit-classification-members/EditClassificationMembersView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationMembersView key={`${classificationId}:clips`} memberType={SubjectMemberType.Clips} presentationId={presentationId} classificationId={classificationId} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationInteractives(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationMembersView } = await import('apps/subjects/views/classifications/edit-classification-members/EditClassificationMembersView');\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditClassificationMembersView key={`${classificationId}:interactives`} memberType={SubjectMemberType.Interactives} presentationId={presentationId} classificationId={classificationId} />\n );\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationAliases(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationAliasesView } = await import('apps/subjects/views/classifications/edit-classification-aliases/EditClassificationAliasesView');\n \n const props = { presentationId, classificationId, memberType: SubjectMemberType.Aliases };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClassificationAliasesView {...props} />);\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationDashboards(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationDashboardListView } = await import('apps/subjects/views/classifications/edit-classification-dashboard-list/EditClassificationDashboardListView');\n \n const props = { presentationId, classificationId, memberType: SubjectMemberType.Dashboard };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClassificationDashboardListView {...props} />);\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async editClassificationDirectories(presentationId: string, classificationId: string): Promise<void> {\n const { EditClassificationDirectoriesListView } = await import('./views/classifications/edit-classification-directories-list/EditClassificationDirectoriesListView');\n \n const props = { presentationId, classificationId, memberType: SubjectMemberType.Dashboard };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditClassificationDirectoriesListView {...props} />);\n\n this.renderClassificationLeftNav(presentationId, classificationId);\n }\n\n public async removeClassificationMember(\n classificationId: string,\n memberId: string,\n memberType: SubjectMemberType\n ): Promise<void> {\n const { RemoveClassificationMemberView } = await import('shared/views/remove-classification-member');\n \n const props = {\n classificationId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationMemberView {...props} />);\n }\n\n public async bulkRemoveClassificationMembers(\n classificationId: string,\n memberType: SubjectMemberType,\n params: { memberIds: string[] }\n ): Promise<void> {\n const { RemoveClassificationMemberView } = await import('shared/views/remove-classification-member');\n \n const memberId = params.memberIds;\n const props = {\n classificationId,\n memberType,\n memberId,\n ...this.getPopupProps()\n };\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationMemberView {...props} />);\n }\n\n public async removeClassificationDashboard(targetId: string, dashboardId: string): Promise<void> {\n const { RemoveClassificationDashboardView } = await import('apps/subjects/views/classifications/remove-classification-dashboard/RemoveClassificationDashboardView');\n \n const props = {\n classificationId: targetId,\n dashboardId,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationDashboardView {...props} />);\n }\n\n public async archiveDraftClassificationDashboard(\n actionType: DashboardActionType,\n dashboardId: string\n ): Promise<void> {\n const { ArchiveDraftDashboardView } = await import('shared/views/archive-draft-dashboard/ArchiveDraftDashboardView');\n \n const props = {\n dashboardId,\n actionType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <ArchiveDraftDashboardView {...props} />);\n }\n\n public async publishClassificationDashboard(\n dashboardId: string,\n dashboardToArchiveId: string\n ): Promise<void> {\n const { PublishDashboardView } = await import('shared/views/publish-dashboard/PublishDashboardView');\n \n const props = {\n dashboardToPublishId: dashboardId,\n dashboardToArchiveId: typeof dashboardToArchiveId === 'string' ?\n dashboardToArchiveId :\n undefined,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <PublishDashboardView {...props} />);\n }\n\n public async deleteClassification(presentationId: string, classificationId: string): Promise<void> {\n const { DeleteClassificationView } = await import('apps/subjects/views');\n \n /**\n * If the classification being deleted is currently displayed the in the CONTENT region,\n * we want to route away from it (and back to the presentation) on delete.\n */\n const routeToOnDelete = classificationId === this.currentLeftNavId ?\n {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.NEW_CLASSIFICATION,\n args: [presentationId]\n } :\n null;\n\n const props = {\n classificationId,\n routeToOnDelete: routeToOnDelete || null,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteClassificationView {...props} />);\n }\n\n public async levels(): Promise<void> {\n const { LevelsRedirectView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <LevelsRedirectView />);\n\n this.renderLevelsLeftNav();\n }\n\n public async newLevel(): Promise<void> {\n const { NewLevelView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewLevelView />);\n\n this.renderLevelsLeftNav();\n }\n\n public level(id: string): void {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_LEVEL,\n args: [id]\n }, { replace: true });\n }\n\n public async editLevel(id: string): Promise<void> {\n const { EditLevelView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditLevelView key={id} id={id} />);\n\n this.renderLevelsLeftNav(id);\n }\n\n public async levelAudiences(levelId: string): Promise<void> {\n const { LevelAudiencesView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <LevelAudiencesView key={levelId} levelId={levelId} />);\n this.renderLevelsLeftNav(levelId);\n }\n\n public async editLevelPlaylists(levelId: string, params?: { presentationId: string }): Promise<void> {\n const { EditLevelMembersView } = await import('apps/subjects/views');\n \n const props = {\n levelId,\n memberType: LevelMemberType.Playlists,\n action: Actions.Subjects.EDIT_LEVEL_PLAYLISTS,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditLevelMembersView key={`${levelId}:playlists`} {...props} />\n );\n\n this.renderLevelsLeftNav(levelId);\n }\n\n public async editLevelSeries(levelId: string, params?: { presentationId: string }): Promise<void> {\n const { EditLevelMembersView } = await import('apps/subjects/views');\n \n const props = {\n levelId,\n memberType: LevelMemberType.Series,\n action: Actions.Subjects.EDIT_LEVEL_SERIES,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditLevelMembersView key={`${levelId}:series`} {...props} />\n );\n\n this.renderLevelsLeftNav(levelId);\n }\n\n public async editLevelVideos(levelId: string, params?: { presentationId: string }): Promise<void> {\n const { EditLevelMembersView } = await import('apps/subjects/views');\n \n const props = {\n levelId,\n memberType: LevelMemberType.Videos,\n action: Actions.Subjects.EDIT_LEVEL_VIDEOS,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditLevelMembersView key={`${levelId}:videos`} {...props} />\n );\n\n this.renderLevelsLeftNav(levelId);\n }\n\n public async editLevelClips(levelId: string, params?: { presentationId: string }): Promise<void> {\n const { EditLevelMembersView } = await import('apps/subjects/views');\n \n const props = {\n levelId,\n memberType: LevelMemberType.Clips,\n action: Actions.Subjects.EDIT_LEVEL_CLIPS,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditLevelMembersView key={`${levelId}:clips`} {...props} />\n );\n\n this.renderLevelsLeftNav(levelId);\n }\n\n public async editLevelInteractives(levelId: string, params?: { presentationId: string }): Promise<void> {\n const { EditLevelMembersView } = await import('apps/subjects/views');\n \n const props = {\n levelId,\n memberType: LevelMemberType.Interactives,\n action: Actions.Subjects.EDIT_LEVEL_INTERACTIVES,\n presentationId: params?.presentationId\n };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditLevelMembersView key={`${levelId}:interactives`} {...props} />\n );\n\n this.renderLevelsLeftNav(levelId);\n }\n\n public async removeLevelMember(levelId: string, memberId: string, memberType: LevelMemberType): Promise<void> {\n const { RemoveLevelMemberView } = await import('apps/subjects/views');\n \n const props = {\n levelId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveLevelMemberView {...props} />);\n }\n\n public async audiences(): Promise<void> {\n const { SelectPresentationView } = await import('shared/views/select-presentation/SelectPresentationView');\n \n const getAppLink = (presentation: Presentation) => ({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.PRESENTATION_AUDIENCES,\n args: [presentation.id]\n });\n\n const props = { objectType: 'audiences', getAppLink };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <SelectPresentationView {...props} />);\n\n this.hideLeftNav();\n }\n\n public async removeAudienceMember(audienceId: string, memberId: string, memberType: LevelMemberType): Promise<void> {\n const { RemoveAudienceMemberView } = await import('apps/subjects/views/audiences/remove-audience-member/RemoveAudienceMemberView');\n \n const props = {\n audienceId,\n memberId,\n memberType,\n ...this.getPopupProps()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveAudienceMemberView {...props} />);\n }\n\n public presentationAudiences(presentationId: string): void {\n this.subjectDataService.getAudiences(presentationId, (audiences: PresentationAudience[]) => {\n const firstAudience = !!audiences && audiences[0];\n\n if (!firstAudience) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.NEW_AUDIENCE,\n args: [presentationId]\n }, { replace: true });\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.EDIT_AUDIENCE,\n args: [ presentationId, firstAudience.masterId ]\n }, { replace: true });\n });\n }\n\n public async newAudience(presentationId: string): Promise<void> {\n const { NewAudienceView } = await import('apps/subjects/views');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <NewAudienceView presentationId={presentationId} presentationType={presentationType} />\n );\n\n this.hideLeftNav();\n }\n\n public async editAudience(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceView } = await import('apps/subjects/views');\n \n const props = { presentationId, audienceId, presentationType };\n\n this.layout.showChildView(LayoutRegions.CONTENT, <EditAudienceView key={audienceId} {...props} />);\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async editAudiencePlaylists(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceMembersView } = await import('apps/subjects/views');\n \n const props = { presentationId, audienceId, presentationType, memberType: LevelMemberType.Playlists };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditAudienceMembersView key={`${audienceId}:playlists`} {...props} />\n );\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async editAudienceSeries(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceMembersView } = await import('apps/subjects/views');\n \n const props = { presentationId, audienceId, presentationType, memberType: LevelMemberType.Series };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditAudienceMembersView key={`${audienceId}:series`} {...props} />\n );\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async editAudienceVideos(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceMembersView } = await import('apps/subjects/views');\n \n const props = { presentationId, audienceId, presentationType, memberType: LevelMemberType.Videos };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditAudienceMembersView key={`${audienceId}:videos`} {...props} />\n );\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async editAudienceClips(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceMembersView } = await import('apps/subjects/views');\n \n const props = { presentationId, audienceId, presentationType, memberType: LevelMemberType.Clips };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditAudienceMembersView key={`${audienceId}:videos`} {...props} />\n );\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async editAudienceInteractives(presentationId: string, audienceId: string): Promise<void> {\n const { EditAudienceMembersView } = await import('apps/subjects/views');\n \n const props = { presentationId, audienceId, presentationType, memberType: LevelMemberType.Interactives };\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditAudienceMembersView key={`${audienceId}:videos`} {...props} />\n );\n\n this.renderAudienceLeftNav(presentationId, audienceId);\n }\n\n public async deleteAudience(presentationId: string, audienceId: string): Promise<void> {\n const { DeleteAudienceView } = await import('apps/subjects/views');\n \n const routeToOnDelete = {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.PRESENTATION_AUDIENCES,\n args: [presentationId]\n };\n\n const props = { id: audienceId, routeToOnDelete, ...this.getPopupProps() };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteAudienceView {...props} />);\n }\n\n public async presentations(): Promise<void> {\n const { EditPresentationsListView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditPresentationsListView />);\n\n this.hideLeftNav();\n }\n\n public async newPresentation(): Promise<void> {\n const { NewPresentationView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewPresentationView />);\n }\n\n public async editPresentation(id: string): Promise<void> {\n const { EditPresentationView } = await import('apps/subjects/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditPresentationView key={id} id={id} />);\n\n this.hideLeftNav();\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n protected async onShowAlert(options: ObjectHash = {}): Promise<void> {\n const { AlertList } = await import('libs/shared/components/alert/AlertList');\n \n const { collection } = options;\n\n const alerts: BaseAlert[] = collection ? collection.toJSON() : [];\n\n const removeAlert = (id: string) => Radio.channel(CommonChannels.ALERT).trigger('remove:alert', id);\n\n this.layout.showChildView(LayoutRegions.ALERT, <AlertList alerts={alerts} removeAlert={removeAlert} />);\n }\n\n private async renderClassificationLeftNav(presentationId: string, selectedClassificationId?: string): Promise<void> {\n const { ClassificationNavView } = await import('apps/subjects/views');\n \n this.setCurrentLeftNavItem(selectedClassificationId);\n\n const props = { presentationId, selectedClassificationId, presentationType: PresentationType.Subject };\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <ClassificationNavView {...props} />);\n }\n\n private async renderSubjectsLeftNav(subjectId?: string): Promise<void> {\n const { SubjectNavView } = await import('apps/subjects/views');\n \n this.setCurrentLeftNavItem(subjectId);\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <SubjectNavView selectedSubjectId={subjectId} />);\n }\n\n private async renderAudienceLeftNav(presentationId: string, selectedAudienceId?: string): Promise<void> {\n const { AudienceNavView } = await import('apps/subjects/views');\n \n this.setCurrentLeftNavItem(selectedAudienceId);\n\n const props = { presentationId, selectedAudienceId, presentationType };\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <AudienceNavView {...props} />);\n }\n\n private async renderLevelsLeftNav(levelId?: string): Promise<void> {\n const { LevelNavView } = await import('apps/subjects/views');\n \n this.setCurrentLeftNavItem(levelId);\n\n this.layout.showChildView(LayoutRegions.LEFT_NAV, <LevelNavView selectedLevelId={levelId} />);\n }\n\n private setCurrentLeftNavItem(id?: string): void {\n if (id)\n this.currentLeftNavId = id;\n else\n this.currentLeftNavId = null;\n }\n\n private hideLeftNav(): void {\n this.setCurrentLeftNavItem();\n\n this.layout.hideLeftNav();\n }\n\n private getTopNav(currentAppLink: Core.AppLink): React.ReactElement {\n return <TopNavView currentAppLink={currentAppLink} />;\n }\n\n private getPopupProps(): PopupViewProps {\n return {\n closePopup: () => this.layout.closePopup()\n };\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\n\nimport { AppChannels, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass ThemesAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.THEMES;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/themes(/)': 'themes',\n 'manage/themes/new(/)': 'newTheme',\n 'manage/themes/:id(/)': 'editTheme'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'deleteTheme',\n 'uploadImage'\n ];\n }\n}\n\nexport class ThemesApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Themes Application';\n }\n\n public static get router(): any {\n return ThemesAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.THEMES;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async themes(): Promise<void> {\n const { ThemesView } = await import('apps/themes/views/themes');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <ThemesView />);\n }\n\n public async newTheme(): Promise<void> {\n const { NewThemeView } = await import('apps/themes/views/new-theme');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <NewThemeView />);\n }\n\n public async editTheme(id: string): Promise<void> {\n const { EditThemeView } = await import('apps/themes/views/edit-theme');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditThemeView id={id} />);\n }\n\n public async deleteTheme(id: string): Promise<void> {\n const { DeleteThemeView } = await import('apps/themes/views/delete-theme');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteThemeView id={id} closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { Layouts } from 'shared/constants/Layouts';\nimport { AppChannels } from 'shared/constants/RadioChannels';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts/curator-layout';\n\nclass UsersAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.USERS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'users(/)': 'index',\n 'users/:id(/)': 'editUser'\n };\n }\n}\n\nexport class UsersApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Users Application';\n }\n\n public static get router(): any {\n return UsersAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.USERS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async index(params: HashObject): Promise<void> {\n const { UserSearchView } = await import('apps/users/views/user-search/UserSearchView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <UserSearchView query={params.query} cursor={params.cursor} />);\n }\n\n public async editUser(id: string, params: { cursor?: string } = {}): Promise<void> {\n const { CustomerlessUserView } = await import('apps/users/views/customerless-user/CustomerlessUserView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <CustomerlessUserView\n id={id}\n analyticsOptions={{}}\n returnAppLinkCursor={params.cursor}\n />\n );\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { ImageRequests } from 'libs/shared/flight-requests/ImageRequests';\n\nimport { AppChannels, DataServices, Layouts } from 'shared/constants';\nimport { SubjectMemberType } from 'shared/enums';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nclass VideosAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.VIDEOS;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/videos/:id(/)': 'editVideo',\n 'manage/videos/:id/preview(/)': 'previewVideo',\n 'manage/videos/:id/audiences(/)': 'editVideoAudiences',\n 'manage/videos/:id/topics(/)': 'editVideoSubjects',\n 'manage/videos/:id/curriculums(/)': 'editVideoCurriculums',\n 'manage/videos/:id/curated-topics(/)': 'editVideoCuratedTopics',\n 'manage/videos/:id/aliases(/)': 'editVideoAliases',\n 'manage/videos/:id/playlists(/)': 'editVideoPlaylists',\n 'manage/videos/:id/points-of-interest(/)': 'managePointsOfInterest',\n 'manage/videos/:id/tags(/)': 'editVideoTags',\n 'manage/videos/:id/curation(/)': 'editVideoCuration',\n 'manage/videos/:id/clips(/)': 'editVideoClips',\n 'manage/videos/:id/interactives(/)': 'editVideoInteractives',\n 'manage/videos/:id/resources(/)': 'editVideoResources',\n\n 'tools/programlookup/:id': 'legacyEditVideo'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'uploadImage',\n 'addToWorkbench',\n 'removeVideoClassification',\n 'removeVideoPlaylist',\n 'updateStatus',\n 'deleteVideo'\n ];\n }\n\n // @ts-ignore\n protected get externalRoutes(): ObjectHash {\n return {\n 'hostedlibraries/:id(/)': 'hostedLibrary',\n 'manage/videos': 'videosHome'\n };\n }\n}\n\nexport class VideosApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n public initialize(): void {\n /**\n * Obtain an instance of all data services used in the application\n * to prevent any instances being destroyed between renders.\n * \n * This is caused by the InstanceManager not being suited\n * to the way React renders function components - Matt.\n */\n ObjectHelper.values(DataServices).forEach(d => InstanceManager.getInstance(d, this));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Videos Application';\n }\n\n public static get router(): any {\n return VideosAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.VIDEOS;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public async editVideo(videoId: string): Promise<void> {\n const { EditVideoView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoView videoId={videoId} context='clickview' />);\n }\n\n public async addToWorkbench(objectId: string): Promise<void> {\n const { AddToWorkbenchView } = await import('apps/workbench/views/add-to-workbench/AddToWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddToWorkbenchView\n objectId={objectId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async updateStatus(objectId: string): Promise<void> {\n const { UpdateObjectStatusView } = await import('shared/views/update-object-status/UpdateObjectStatusView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <UpdateObjectStatusView\n objectId={objectId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async managePointsOfInterest(videoId: string): Promise<void> {\n const { ManagePointsOfInterestView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <ManagePointsOfInterestView videoId={videoId} context='clickview' />);\n }\n\n public async editVideoAudiences(videoId: string): Promise<void> {\n const { EditVideoAudiencesView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoAudiencesView videoId={videoId} />);\n }\n\n public async editVideoSubjects(videoId: string): Promise<void> {\n const { EditVideoSubjectsView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoSubjectsView videoId={videoId} />);\n }\n\n public async editVideoCuratedTopics(videoId: string): Promise<void> {\n const { EditVideoCuratedTopicsView } = await import('apps/videos/views/edit-video-curated-topics/EditVideoCuratedTopicsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoCuratedTopicsView videoId={videoId} />);\n }\n\n public async editVideoCurriculums(videoId: string): Promise<void> {\n const { EditVideoCurriculumsView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoCurriculumsView videoId={videoId} />);\n }\n\n public async editVideoAliases(videoId: string): Promise<void> {\n const { EditVideoAliasesView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoAliasesView videoId={videoId} />);\n }\n\n public async editVideoCuration(videoId: string): Promise<void> {\n const { EditVideoCurationView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoCurationView videoId={videoId} />);\n }\n\n public async editVideoPlaylists(videoId: string): Promise<void> {\n const { EditVideoPlaylistsView } = await import('apps/videos/views/edit-video-playlists/EditVideoPlaylistsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoPlaylistsView videoId={videoId} />);\n }\n\n public async editVideoTags(videoId: string): Promise<void> {\n const { EditVideoTagsView } = await import('apps/videos/views');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoTagsView videoId={videoId} context='clickview' />);\n }\n\n public async editVideoClips(videoId: string): Promise<void> {\n const { EditVideoClipsView } = await import('apps/videos/views/edit-video-clips/EditVideoClipsView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoClipsView videoId={videoId} />);\n }\n\n public async editVideoInteractives(videoId: string): Promise<void> {\n const { EditVideoInteractivesView } = await import('apps/videos/views/edit-video-interactives/EditVideoInteractivesView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <EditVideoInteractivesView videoId={videoId} />);\n }\n\n public async editVideoResources(videoId: string): Promise<void> {\n const { EditVideoResourcesTabView } = await import('./views/edit-video-resources/EditVideoResourcesTabView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <EditVideoResourcesTabView videoId={videoId} context='clickview' />\n );\n }\n\n public legacyEditVideo(videoId: string): void {\n Core.LocationUtils.Redirect(`/tools/programlookup/${videoId}`);\n }\n\n public async uploadImage(imageType: ImageType): Promise<void> {\n const { ImageUploadView } = await import('libs/shared/views/image-upload/ImageUploadView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <ImageUploadView\n getRequest={ImageRequests.uploadBase64Image}\n imageType={imageType}\n popupSize='lg'\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async removeVideoClassification(\n classificationId: string,\n memberId: string,\n memberType: SubjectMemberType\n ): Promise<void> {\n const { RemoveClassificationMemberView } = await import('shared/views/remove-classification-member');\n \n const props = {\n classificationId,\n memberId,\n memberType,\n closePopup: () => this.layout.closePopup()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveClassificationMemberView {...props} />);\n }\n\n public async removeVideoPlaylist(videoId: string, playlistId: string): Promise<void> {\n const { RemoveVideoView } = await import('apps/playlists/views');\n \n const props = {\n playlistId,\n videoId,\n closePopup: () => this.layout.closePopup()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <RemoveVideoView {...props} />);\n }\n\n public async previewVideo(id: string): Promise<void> {\n const { PreviewVideoView } = await import('apps/videos/views/preview-video/PreviewVideoView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <PreviewVideoView id={id} />);\n }\n\n public async deleteVideo(videoId: string): Promise<void> {\n const { DeleteVideoView } = await import('apps/videos/views/delete-video/DeleteVideoView');\n const props = {\n videoId,\n closePopup: () => this.layout.closePopup()\n };\n\n this.layout.showChildView(LayoutRegions.POPUP, <DeleteVideoView {...props} />);\n }\n}\n","import React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { AppChannels, Layouts } from 'shared/constants';\nimport { FullScreenLayoutView, FullScreenLayoutViewOptions } from 'shared/layouts';\n\nimport { PresentationVisualiserQueryParams } from 'apps/visualiser/views/presentation-visualiser/PresentationVisualiserView';\n\nclass VisualiserAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.VISUALISER;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/visualiser/presentations/:id': 'presentation'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [];\n }\n\n // @ts-ignore\n protected get externalRoutes(): ObjectHash {\n return {};\n }\n}\n\nexport class VisualiserApplication extends ReactApplication {\n protected layout: FullScreenLayoutView;\n\n // @ts-ignore\n public get name(): string {\n return 'Visualiser Application';\n }\n\n public static get router(): any {\n return VisualiserAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.VISUALISER;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<FullScreenLayoutViewOptions> {\n return {\n name: Layouts.FULL_SCREEN_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT,\n showCustomHeader: true\n }\n };\n }\n\n public async presentation(id: string, queryParams: PresentationVisualiserQueryParams = {}): Promise<void> {\n const { PresentationVisualiserView } = await import('apps/visualiser/views/presentation-visualiser/PresentationVisualiserView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <PresentationVisualiserView id={id} queryParams={queryParams} />\n );\n }\n}\n","import { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\n\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\n\nimport { Actions } from 'shared/constants/CuratorActions';\nimport { AppChannels } from 'shared/constants/RadioChannels';\n\nconst WHITELIST = {\n [Actions.Workbench.ADD_TO_WORKBENCH]: true,\n [Actions.Workbench.HOME]: true\n};\n\nexport function WorkbenchFilter(options: Core.FilterOptions, next: Core.MiddlewareNext<Core.FilterOptions>): void {\n const { appLink } = options;\n\n if (WHITELIST[appLink.action])\n return next(options);\n\n const id = appLink.args?.[0];\n\n if (!id)\n return next(options);\n\n const workingLists = LocalStorageHelper.get(SharedViewModelKeys.CURATOR_WORKING_LISTS);\n\n if (!workingLists?.[id]) {\n next(options);\n Core.AppLinkHelper.trigger({\n application: AppChannels.WORKBENCH,\n action: Actions.Workbench.HOME\n }, { replace: true });\n return;\n }\n\n next(options);\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\nimport { ReactApplication } from 'libs/common/react/core/ReactApplication';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\n\nimport { Actions, AppChannels, DataServices, Layouts } from 'shared/constants';\nimport { CuratorLayoutView, CuratorLayoutViewOptions } from 'shared/layouts';\n\nimport { WorkbenchFilter } from './filters/WorkbenchFilter';\nimport { WorkingListViewModel } from './hooks/useWorkingList';\n\nclass WorkbenchAppRouter extends Core.AppRouter {\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.WORKBENCH;\n }\n\n // @ts-ignore\n protected get appRoutes(): ObjectHash {\n return {\n 'manage/workbench(/)': 'index',\n 'manage/workbench/:id(/)': 'workbench',\n\n /**\n * Route convention\n * manage/workbench/wizard/{valid_type}/{step_name}\n */\n 'manage/workbench/:id/wizard/videos/review-videos(/)': 'wizardReviewVideos',\n 'manage/workbench/:id/wizard/videos/select-action(/)': 'wizardSelectActionVideos',\n\n 'manage/workbench/:id/wizard/videos/action-details/add-to-backbone-classifications(/)': 'wizardAddToBackboneClassificationsActionDetailsVideos',\n 'manage/workbench/:id/wizard/videos/confirmation/add-to-backbone-classifications(/)': 'wizardAddToBackboneClassificationsConfirmationVideos',\n\n 'manage/workbench/:id/wizard/videos/action-details/add-to-classification(/)': 'wizardAddToClassificationsActionDetailsVideos',\n 'manage/workbench/:id/wizard/videos/confirmation/add-to-classification(/)': 'wizardAddToClassificationsConfirmationVideos',\n\n 'manage/workbench/:id/wizard/videos/action-details/add-to-backbone-audiences(/)': 'wizardAddToBackboneAudiencesActionDetailsVideos',\n 'manage/workbench/:id/wizard/videos/confirmation/add-to-backbone-audiences(/)': 'wizardAddToBackboneAudiencesConfirmationVideos',\n\n 'manage/workbench/:id/wizard/videos/action-details/add-to-audiences(/)': 'wizardAddToAudiencesActionDetailsVideos',\n 'manage/workbench/:id/wizard/videos/confirmation/add-to-audiences(/)': 'wizardAddToAudiencesConfirmationVideos',\n\n 'manage/workbench/:id/wizard/videos/status/polling(/)': 'wizardStatusPollingVideos',\n 'manage/workbench/:id/wizard/videos/status/complete(/)': 'wizardStatusCompleteVideos'\n };\n }\n\n // @ts-ignore\n protected get appLinks(): string[] {\n return [\n 'addToWorkbench',\n 'copyWorkbench',\n 'deleteWorkbench',\n 'createWorkbench',\n 'renameWorkbench'\n ];\n }\n\n // @ts-ignore\n public get filters(): Core.MiddlewareFunctionAsync<Core.FilterOptions>[] {\n return [WorkbenchFilter];\n }\n}\n\nexport class WorkbenchApplication extends ReactApplication {\n protected layout: CuratorLayoutView;\n\n public initialize(): void {\n /**\n * Obtain an instance of all data services used in the application\n * to prevent any instances being destroyed between renders.\n * \n * This is caused by the InstanceManager not being suited\n * to the way React renders function components - Matt.\n */\n ObjectHelper.values(DataServices).forEach(d => InstanceManager.getInstance(d, this));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'Workbench Application';\n }\n\n public static get router(): any {\n return WorkbenchAppRouter;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return AppChannels.WORKBENCH;\n }\n\n // @ts-ignore\n public get layoutOptions(): Core.LayoutOptions<CuratorLayoutViewOptions> {\n return {\n name: Layouts.CURATOR_LAYOUT,\n options: {\n alertRegion: LayoutRegions.ALERT\n }\n };\n }\n\n public index(): void {\n let workingLists: WorkingListViewModel = LocalStorageHelper.get(SharedViewModelKeys.CURATOR_WORKING_LISTS);\n\n if (!workingLists) {\n // If they don't have any working lists, create 1\n workingLists = {\n 1: {\n id: '1',\n name: 'My workbench',\n objects: {}\n }\n };\n\n LocalStorageHelper.set(SharedViewModelKeys.CURATOR_WORKING_LISTS, workingLists);\n }\n\n // Redirect to the first working list they have\n Core.AppLinkHelper.trigger({\n application: AppChannels.WORKBENCH,\n action: Actions.Workbench.WORKBENCH,\n args: [Object.keys(workingLists)[0]]\n }, { replace: true });\n }\n\n public async workbench(listId: string): Promise<void> {\n const { VideoWorkingSetView } = await import('apps/workbench/views/video-working-set/VideoWorkingSetView');\n \n this.layout.setFullWidthContent(true);\n this.renderLeftNav(listId);\n\n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <VideoWorkingSetView\n listId={listId}\n renderPopup={(popup: JSX.Element) => this.layout.showChildView(LayoutRegions.POPUP, popup)}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async addToWorkbench(objectId: string): Promise<void> {\n const { AddToWorkbenchView } = await import('./views/add-to-workbench/AddToWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <AddToWorkbenchView\n objectId={objectId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async copyWorkbench(listId: string): Promise<void> {\n const { CopyWorkbenchView } = await import('./views/copy-workbench/CopyWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CopyWorkbenchView\n listId={listId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async deleteWorkbench(listId: string): Promise<void> {\n const { DeleteWorkbenchView } = await import('./views/delete-workbench/DeleteWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <DeleteWorkbenchView\n listId={listId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async createWorkbench(): Promise<void> {\n const { CreateWorkbenchView } = await import('./views/create-workbench/CreateWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <CreateWorkbenchView closePopup={() => this.layout.closePopup()} />\n );\n }\n\n public async renameWorkbench(listId: string): Promise<void> {\n const { RenameWorkbenchView } = await import('./views/rename-workbench/RenameWorkbenchView');\n \n this.layout.showChildView(\n LayoutRegions.POPUP,\n <RenameWorkbenchView\n listId={listId}\n closePopup={() => this.layout.closePopup()}\n />\n );\n }\n\n public async wizardReviewVideos(listId: string): Promise<void> {\n const { WorkbenchVideoReviewView } = await import('apps/workbench/views/videos/WorkbenchVideoReviewView');\n \n this.layout.setFullWidthContent(false);\n this.layout.hideLeftNav();\n this.layout.showChildView(LayoutRegions.CONTENT, <WorkbenchVideoReviewView listId={listId} />);\n }\n\n public async wizardSelectActionVideos(listId: string): Promise<void> {\n const { WorkbenchVideoSelectActionView } = await import('apps/workbench/views/videos/WorkbenchVideoSelectActionView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <WorkbenchVideoSelectActionView listId={listId} />);\n }\n\n public async wizardAddToBackboneClassificationsActionDetailsVideos(listId: string): Promise<void> {\n const { WorkbenchVideoActionsAddToBackboneClassificationsDetailsView } = await import('apps/workbench/views/videos/action-details/add-to-backbone-classifications/WorkbenchVideoActionsAddToBackboneClassificationsDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchVideoActionsAddToBackboneClassificationsDetailsView listId={listId} />\n );\n }\n\n public async wizardAddToBackboneClassificationsConfirmationVideos(listId: string): Promise<void> {\n const { WorkbenchVideoAddToBackboneClassificationsConfirmationView } = await import('apps/workbench/views/videos/confirmation/add-to-backbone-classifications/WorkbenchVideoAddToBackboneClassificationsConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchVideoAddToBackboneClassificationsConfirmationView listId={listId} />\n );\n }\n\n public async wizardAddToClassificationsActionDetailsVideos(listId: string): Promise<void> {\n const { WorkbenchVideoActionsAddToClassificationDetailsView } = await import('apps/workbench/views/videos/action-details/add-to-classification/WorkbenchVideoActionsAddToClassificationDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchVideoActionsAddToClassificationDetailsView listId={listId} />\n );\n }\n\n public async wizardAddToClassificationsConfirmationVideos(listId: string): Promise<void> {\n const { WorkbenchVideoAddToClassificationConfirmationView } = await import('apps/workbench/views/videos/confirmation/add-to-classification/WorkbenchVideoAddToClassificationConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchVideoAddToClassificationConfirmationView listId={listId} />\n );\n }\n\n public async wizardAddToBackboneAudiencesActionDetailsVideos(listId: string): Promise<void> {\n const { WorkbenchVideoActionsAddToBackboneAudiencesDetailsView } = await import('apps/workbench/views/videos/action-details/add-to-backbone-audiences/WorkbenchVideoActionsAddToBackboneAudiencesDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchVideoActionsAddToBackboneAudiencesDetailsView listId={listId} />\n );\n }\n\n public async wizardAddToBackboneAudiencesConfirmationVideos(listId: string): Promise<void> {\n const { WorkbenchVideoAddToBackboneAudiencesConfirmationView } = await import('apps/workbench/views/videos/confirmation/add-to-backbone-audiences/WorkbenchVideoAddToBackboneAudiencesConfirmationView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchVideoAddToBackboneAudiencesConfirmationView listId={listId} />\n );\n }\n\n public async wizardAddToAudiencesActionDetailsVideos(listId: string): Promise<void> {\n const { WorkbenchVideoActionsAddToAudiencesDetailsView } = await import('apps/workbench/views/videos/action-details/add-to-audiences/WorkbenchVideoActionsAddToAudiencesDetailsView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchVideoActionsAddToAudiencesDetailsView listId={listId} />\n );\n }\n\n public async wizardAddToAudiencesConfirmationVideos(listId: string): Promise<void> {\n const { WorkbenchVideoAddToAudiencesConfirmationView } = await import('apps/workbench/views/videos/confirmation/add-to-audiences/WorkbenchVideoAddToAudiencesConfirmationView');\n \n this.layout.showChildView(LayoutRegions.CONTENT, <WorkbenchVideoAddToAudiencesConfirmationView listId={listId} />);\n }\n\n public async wizardStatusPollingVideos(listId: string, params: { jobId: string }): Promise<void> {\n const { WorkbenchActionStatusPollingView } = await import('apps/workbench/views/videos/status/polling/WorkbenchActionStatusPollingView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchActionStatusPollingView listId={listId} jobId={params?.jobId}/>\n );\n }\n\n public async wizardStatusCompleteVideos(listId: string, params: { jobId: string }): Promise<void> {\n const { WorkbenchActionStatusCompleteView } = await import('apps/workbench/views/videos/status/complete/WorkbenchActionStatusCompleteView');\n \n this.layout.showChildView(\n LayoutRegions.CONTENT,\n <WorkbenchActionStatusCompleteView listId={listId} jobId={params?.jobId} />\n );\n }\n\n private async renderLeftNav(listId: string): Promise<void> {\n const { WorkbenchNav } = await import('apps/workbench/components/workbench-nav/WorkbenchNav');\n \n this.layout.showChildView(LayoutRegions.LEFT_NAV, <WorkbenchNav activeListId={listId} />);\n }\n}\n","import { Core } from 'libs/common/backbone/index';\n\nimport { AssemblyLineApplication } from 'apps/assembly-line/AssemblyLineApplication';\nimport { ClipsApplication } from 'apps/clips/ClipsApplication';\nimport { CompaniesApplication } from 'apps/companies/CompaniesApplication';\nimport { ContentPartnersApplication } from 'apps/content-partners/ContentPartnerApplication';\nimport { CrmStudioApplication } from 'apps/crm-studio/CrmStudioApplication';\nimport { CurriculumsApplication } from 'apps/curriculums/CurriculumsApplication';\nimport { CustomerWizardApplication } from 'apps/customer-wizard/CustomerWizardApplication';\nimport { CvLiveApplication } from 'apps/cv-live/CvLiveApplication';\nimport { CvLivePipelineApplication } from 'apps/cv-live-pipeline/CvLivePipelineApplication';\nimport { DashboardEditorApplication } from 'apps/dashboard-editor/DashboardEditorApplication';\nimport { DefaultApplication } from 'apps/default/CuratorDefaultApplication';\nimport { DiscoverApplication } from 'apps/discover/DiscoverApplication';\nimport { DomainOptionsApplication } from 'apps/domain-options/DomainOptionsApplication';\nimport { InteractivesApplication } from 'apps/interactives/InteractivesApplication';\nimport { MarketingApplication } from 'apps/marketing/MarketingApplication';\nimport { MoviesAndTvApplication } from 'apps/movies-and-tv/MoviesAndTvApplication';\nimport { OrganisationsApplication } from 'apps/organisations/OrganisationsApplication';\nimport { PeopleApplication } from 'apps/people/PeopleApplication';\nimport { PlaylistsApplication } from 'apps/playlists/PlaylistsApplication';\nimport { ReleaseNotesApplication } from 'apps/release-notes/ReleaseNotesApplication';\nimport { SeriesApplication } from 'apps/series/SeriesApplication';\nimport { ShortLinkApplication } from 'apps/short-link/ShortLinkApplication';\nimport { SpecialEventsApplication } from 'apps/special-events/SpecialEventsApplication';\nimport { SubjectsApplication } from 'apps/subjects/SubjectsApplication';\nimport { ThemesApplication } from 'apps/themes/ThemesApplication';\nimport { UsersApplication } from 'apps/users/UsersApplication';\nimport { VideosApplication } from 'apps/videos/VideosApplication';\nimport { VisualiserApplication } from 'apps/visualiser/VisualiserApplication';\nimport { WorkbenchApplication } from 'apps/workbench/WorkbenchApplication';\n\nexport function RegisterApplications(shell: Core.Shell, next: (...args: any) => any) {\n shell\n .registerApplication(UsersApplication)\n .registerApplication(DefaultApplication)\n .registerApplication(CompaniesApplication)\n .registerApplication(ContentPartnersApplication)\n .registerApplication(PeopleApplication)\n .registerApplication(PlaylistsApplication)\n .registerApplication(SeriesApplication)\n .registerApplication(SubjectsApplication)\n .registerApplication(ThemesApplication)\n .registerApplication(VideosApplication)\n .registerApplication(DomainOptionsApplication)\n .registerApplication(ReleaseNotesApplication)\n .registerApplication(CurriculumsApplication)\n .registerApplication(WorkbenchApplication)\n .registerApplication(DashboardEditorApplication)\n .registerApplication(DiscoverApplication)\n .registerApplication(ClipsApplication)\n .registerApplication(InteractivesApplication)\n .registerApplication(AssemblyLineApplication)\n .registerApplication(MoviesAndTvApplication)\n .registerApplication(CvLiveApplication)\n .registerApplication(CvLivePipelineApplication)\n .registerApplication(VisualiserApplication)\n .registerApplication(OrganisationsApplication)\n .registerApplication(CustomerWizardApplication)\n .registerApplication(SpecialEventsApplication)\n .registerApplication(MarketingApplication)\n .registerApplication(CrmStudioApplication)\n .registerApplication(ShortLinkApplication);\n\n next(shell);\n}\n","import { ObjectHash } from 'backbone';\nimport { Store } from 'redux';\nimport * as _ from 'underscore';\n\nimport { Caches } from 'libs/common/backbone/constants/Caches';\nimport { ErrorHelper } from 'libs/common/backbone/core/BaseError';\nimport { BaseService } from 'libs/common/backbone/core/BaseService';\nimport { DevError } from 'libs/common/backbone/errors/DevError';\nimport { DataCache } from 'libs/common/backbone/interfaces/DataCache';\nimport { Actions } from 'libs/common/react/flight';\n\ninterface FifoMemoryCacheOptions {\n size: number;\n\n /**\n * Optional store, which is taken here so that our marionette data services can invalidate flight.\n */\n store?: Store;\n}\n\nexport class FifoMemoryCache extends BaseService implements DataCache {\n private size: number;\n private cache: ObjectHash;\n private cachedkeys: string[];\n private store: Store;\n\n constructor(options: FifoMemoryCacheOptions) {\n super();\n\n this.size = options.size;\n this.cache = {};\n this.cachedkeys = [];\n\n this.store = options.store;\n }\n\n // @ts-ignore\n public get name(): string {\n return Caches.Fifo;\n }\n\n private removeCacheKey(cacheKey: string): void {\n this.cachedkeys = _.without(this.cachedkeys, cacheKey);\n }\n\n public has(cacheKey: string): boolean {\n return !!this.cache[cacheKey];\n }\n\n public get(cacheKey: string): any {\n return this.cache[cacheKey];\n }\n\n public set(cacheKey: string, value: any): void {\n if (!cacheKey || !value) {\n ErrorHelper.throw(new DevError('Must provide a cache key and a value to cache in FifoMemoryCache.'));\n }\n\n /**\n * Calling set on an existing key should move it to the front\n * of the buffer again.\n */\n if (this.has(cacheKey))\n this.removeCacheKey(cacheKey);\n\n this.cachedkeys.push(cacheKey);\n\n this.cache[cacheKey] = value;\n\n if (this.cachedkeys.length > this.size)\n delete this.cache[this.cachedkeys.shift()];\n }\n\n public getOrSet(cacheKey: string, getter: () => any): any {\n if (this.has(cacheKey))\n return this.get(cacheKey);\n\n const value = getter();\n this.set(cacheKey, value);\n return value;\n }\n\n public remove(cacheKey: string): boolean {\n if (!this.has(cacheKey))\n return false;\n\n delete this.cache[cacheKey];\n this.removeCacheKey(cacheKey);\n return true;\n }\n\n public invalidate(\n cacheKeys: string[],\n callback?: (cacheKey: string) => void,\n invalidateFlight: boolean = false\n ): void {\n // Create a an object hash of all the cached keys\n const keyHash: ObjectHash = _.object(this.cachedkeys, this.cachedkeys);\n let invalidationSet: string[] = [];\n\n _.each(cacheKeys, (ck: string) => {\n // Direct match on the key\n if (keyHash[ck])\n invalidationSet.push(ck);\n\n // Find all matches against the given cache key regex\n const regex = new RegExp(ck, 'i');\n const keysToInvalidate = _.filter(keyHash, (k: string) => regex.test(k));\n\n // Merge regex matches with direct matches\n invalidationSet.push(...keysToInvalidate);\n });\n\n if (invalidationSet.length) {\n invalidationSet = _.uniq(invalidationSet);\n\n // Delete all matches and remove cache keys\n _.each(invalidationSet, ik => {\n delete this.cache[ik];\n\n if (_.isFunction(callback))\n callback(ik);\n });\n\n this.cachedkeys = _.without(this.cachedkeys, ...invalidationSet);\n }\n\n if (!this.store || !invalidateFlight)\n return;\n\n this.store.dispatch({\n type: Actions.INVALIDATE,\n keys: cacheKeys\n });\n }\n}\n","import { Core } from 'libs/common/backbone/index';\nimport { FifoMemoryCache } from 'libs/common/backbone/services/caches/FifoMemoryCache';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\n\nexport function RegisterCaches(shell: Core.Shell, next: (...args: any) => any) {\n InstanceManager.registerInstance(FifoMemoryCache, { size: 100, store: shell.store });\n\n next(shell);\n}\n","import { ObjectHash } from 'backbone';\n\ninterface ApiErrorResponse {\n errorCode: string;\n errorSubCode: string;\n requestUrl: string;\n detailedMessage: string;\n requestId: string;\n data: ObjectHash;\n}\n\nexport const DataServiceErrorHelper: ObjectHash = {\n parseErrorMessage(errorMessageMappings: ObjectHash, defaultErrorCode: string, error: ApiErrorResponse): string {\n if (!error || !error.errorCode)\n return errorMessageMappings[defaultErrorCode];\n\n let errorMessageKey = `${error.errorCode}`;\n\n if (error.errorSubCode)\n errorMessageKey += `.${error.errorSubCode}`;\n\n return errorMessageMappings[errorMessageKey] || errorMessageMappings[defaultErrorCode];\n }\n};\n","import { ObjectHash } from 'backbone';\nimport { MnObject } from 'backbone.marionette';\nimport _ from 'underscore';\n\nimport { DataProviders } from 'libs/common/backbone/constants/DataProviders';\nimport { DataServiceErrorType } from 'libs/common/backbone/enums/DataServiceErrorType';\nimport { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { DataProvider, DataProviderResponseOptions } from 'libs/common/backbone/interfaces/DataProvider';\nimport { DataServiceError, DefaultDataServiceError } from 'libs/common/backbone/interfaces/DataServiceError';\nimport { DataServiceErrorHelper } from 'libs/common/backbone/utils/DataServiceErrorHelper';\n\ninterface MiddlewareCallback {\n (data: any, textStatus: any, jqXHR: any): any;\n}\n\ninterface MiddlewareHash {\n [name: string]: MiddlewareCallback;\n}\n\ninterface AjaxDataProviderOptions {\n dataServiceErrorMessageMappings: ObjectHash;\n defaultErrorMessageKey: string;\n cacheRequests?: boolean;\n}\n\nexport class AjaxDataProvider extends MnObject implements DataProvider {\n private successMiddleware: MiddlewareHash;\n private errorMiddleware: MiddlewareHash;\n private dataServiceErrorMessageMappings: ObjectHash;\n private defaultErrorMessageKey: string;\n\n constructor(options?: AjaxDataProviderOptions) {\n super(options);\n\n $.ajaxSetup({\n cache: options.cacheRequests ?? false,\n contentType: 'application/json; charset=utf-8'\n });\n\n this.successMiddleware = {};\n this.errorMiddleware = {};\n this.dataServiceErrorMessageMappings = options.dataServiceErrorMessageMappings;\n this.defaultErrorMessageKey = options.defaultErrorMessageKey;\n }\n\n // @ts-ignore\n public get name(): string {\n return DataProviders.Ajax;\n }\n\n private parseUrl(url: string): HTMLAnchorElement {\n const a = document.createElement('a');\n a.href = url;\n\n if (a.host === '') a.href = a.href;\n\n return a;\n }\n\n private makeHttps(url: string): string {\n const fullUrl = this.parseUrl(url);\n\n if (fullUrl.protocol === 'http:') fullUrl.protocol = 'https:';\n\n return fullUrl.href;\n }\n\n private base<T>(\n resource: string,\n data: T,\n method: string,\n opts: ObjectHash = {}\n ): JQuery.Promise<T> {\n method || (method = HttpVerbs.GET);\n\n const o = _.defaults(opts, { forceHttps: false });\n\n const options: ObjectHash = {\n url: resource,\n method: method,\n type: method\n };\n\n if (data) {\n options.data =\n method === HttpVerbs.POST || method === HttpVerbs.PUT ?\n JSON.stringify(data) :\n data;\n }\n\n if (o.forceHttps) options.url = this.makeHttps(options.url);\n\n if (o.traditional) options.traditional = o.traditional;\n\n /** \n * jQuery.jqXHR does inherit from JQuery.Promise, but the typings in \n * definitelytyped's jQuery are so messed up that casting to any \n * is just easier. \n * \n * I mean there is a JQuery.Promise, JQuery.Promise1, JQuery.Promise2 & JQuery.Promise. Jesus... 🙏\n */\n const promise = $.ajax(options);\n\n if (_.keys(this.successMiddleware).length)\n promise.done(_.values(this.successMiddleware));\n\n if (_.keys(this.errorMiddleware).length)\n promise.fail(_.values(this.errorMiddleware));\n\n return promise as any;\n }\n\n public create<T>(resource: string, obj: T, options: DataProviderResponseOptions): void {\n const { channel, successEvent, errorEvent } = options;\n\n this.base<T>(resource, obj, HttpVerbs.POST)\n .done((data: any, textStatus: any, jqXHR: any) =>\n channel.trigger(successEvent, data, textStatus, jqXHR))\n .fail((jqXHR: any, textStatus: any, errorThrown: any) =>\n channel.trigger(errorEvent, jqXHR, textStatus, errorThrown));\n }\n\n public read<T>(resource: string, options: DataProviderResponseOptions): void {\n const { channel, successEvent, errorEvent } = options;\n\n this.base<T>(resource, null, HttpVerbs.GET)\n .done((data: any, textStatus: any, jqXHR: any) => {\n channel.trigger(successEvent, data, textStatus, jqXHR);\n })\n .fail((jqXHR: any, textStatus: any, errorThrown: any) => {\n channel.trigger(errorEvent, jqXHR, textStatus, errorThrown);\n });\n }\n\n public update<T>(resource: string, obj: T, options: DataProviderResponseOptions): void {\n const { channel, successEvent, errorEvent } = options;\n\n this.base<T>(resource, obj, HttpVerbs.PUT)\n .done((data: any, textStatus: any, jqXHR: any) =>\n channel.trigger(successEvent, data, textStatus, jqXHR))\n .fail((jqXHR: any, textStatus: any, errorThrown: any) =>\n channel.trigger(errorEvent, jqXHR, textStatus, errorThrown));\n }\n\n public delete(resource: string, options: DataProviderResponseOptions): void {\n const { channel, successEvent, errorEvent } = options;\n\n this.base(resource, null, HttpVerbs.DELETE)\n .done((data: any, textStatus: any, jqXHR: any) =>\n channel.trigger(successEvent, data, textStatus, jqXHR))\n .fail((jqXHR: any, textStatus: any, errorThrown: any) =>\n channel.trigger(errorEvent, jqXHR, textStatus, errorThrown));\n }\n\n public useMiddleware(name: string, callback: MiddlewareCallback): void {\n if (this.successMiddleware[name])\n return;\n\n this.successMiddleware[name] = callback;\n }\n\n public useErrorMiddleware(name: string, callback: MiddlewareCallback): void {\n if (this.errorMiddleware[name])\n return;\n\n this.errorMiddleware[name] = callback;\n }\n\n public parseError(jqXHR: JQuery.jqXHR): DataServiceError {\n const response = jqXHR.responseJSON;\n\n const error = DefaultDataServiceError;\n\n error.code = jqXHR.status;\n\n error.message = DataServiceErrorHelper.parseErrorMessage(\n this.dataServiceErrorMessageMappings,\n this.defaultErrorMessageKey,\n response\n );\n\n switch (jqXHR.status) {\n case 400:\n error.type = DataServiceErrorType.BadRequest;\n break;\n case 401:\n error.type = DataServiceErrorType.Unauthorized;\n break;\n case 403:\n error.type = DataServiceErrorType.Forbidden;\n break;\n case 404:\n error.type = DataServiceErrorType.NotFound;\n break;\n case 500:\n error.type = DataServiceErrorType.InternalServer;\n break;\n }\n\n return error;\n }\n}\n","import { Core } from 'libs/common/backbone/index';\nimport { AjaxDataProvider } from 'libs/common/backbone/services/data-providers/AjaxDataProvider';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\n\nconst DefaultDataServiceErrorCode = 'generic';\n\nconst DataServiceErrorMessageMappings = {\n generic: 'Something went wrong'\n};\n\nexport function RegisterDataProviders(shell: Core.Shell, next: (...args: any) => any) {\n InstanceManager.registerInstance(AjaxDataProvider, {\n dataServiceErrorMessageMappings: DataServiceErrorMessageMappings,\n defaultErrorMessageKey: DefaultDataServiceErrorCode\n });\n\n next(shell);\n}\n","export const SharedDataPrefixes = {\n SUBJECT_PLAYLISTS: 'subject:playlists',\n CURRENT_USER: 'current:user',\n WORKSPACE: 'workspace',\n CONFIG: 'config',\n LOCALE: 'locale',\n PHRASES: 'phrases',\n SEARCH_FILTERS: 'search:filters',\n SERIES: 'series',\n NOTIFICATIONS: 'notifications',\n SUGGEST_EDIT: 'suggest:edit'\n};\n","import { ObjectHash } from 'backbone';\nimport * as _ from 'underscore';\n\nimport { BaseDataService } from 'libs/common/backbone/services/BaseDataService';\n\nimport { BootstrapKeys } from 'libs/shared/constants/BootstrapKeys';\nimport { CacheDurations } from 'libs/shared/constants/CacheDurations';\nimport { SharedDataPrefixes } from 'libs/shared/constants/DataPrefixes';\nimport { SharedDataChannels } from 'libs/shared/constants/RadioChannels';\nimport { SharedDataServices } from 'libs/shared/constants/SharedServices';\nimport { LanguageConfig } from 'libs/shared/interfaces';\n\nexport class LanguageDataService extends BaseDataService {\n // @ts-ignore\n public get name(): string {\n return SharedDataServices.Language;\n }\n\n // @ts-ignore\n public get channelName(): string {\n return SharedDataChannels.LANGUAGE;\n }\n\n public getLanguageConfig(callback?: (languageConfig: LanguageConfig) => void): void {\n const languageConfig: LanguageConfig = { locale: '', phrases: null };\n\n this.get<string>({\n resource: '/api/locale',\n eventPrefix: SharedDataPrefixes.LOCALE,\n expiryTime: CacheDurations.STANDARD,\n bootstrapName: BootstrapKeys.LOCALE,\n callback: (locale: string) => {\n languageConfig.locale = locale;\n\n if (languageConfig.phrases && _.isFunction(callback))\n callback(languageConfig);\n }\n });\n\n this.get<ObjectHash>({\n resource: '/api/phrases',\n eventPrefix: SharedDataPrefixes.PHRASES,\n expiryTime: CacheDurations.STANDARD,\n bootstrapName: BootstrapKeys.PHRASES,\n callback: (phrases: any) => {\n languageConfig.phrases = phrases;\n\n if (languageConfig.locale && _.isFunction(callback))\n callback(languageConfig);\n }\n });\n }\n}\n","import { Core } from 'libs/common/backbone/index';\nimport { AlertType, BaseAlertService } from 'libs/common/backbone/services/BaseAlertService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\n\nimport { AlertList } from 'libs/shared/components/alert/AlertList';\nimport { LanguageDataService } from 'libs/shared/services/LanguageDataService';\n\nimport { SubjectDataService } from 'shared/services';\n\nconst DefaultAlertHeading = {\n Success: 'Success!',\n Warning: 'Whoops...',\n Fail: 'Oops...',\n Info: 'FYI'\n};\nexport function RegisterDataServices(shell: Core.Shell, next: (...args: any) => any) {\n const alertService = new BaseAlertService({\n maxAlerts: 3,\n defaultSuccessAlert: { heading: DefaultAlertHeading.Success, type: AlertType.Success },\n defaultErrorAlert: { heading: DefaultAlertHeading.Fail, type: AlertType.Fail },\n alertViewCtor: AlertList\n });\n\n InstanceManager\n .registerSingleton(alertService);\n\n const basicDataServiceConfig = {\n cache: 'FifoMemoryCache',\n dataProvider: 'AjaxDataProvider',\n defaultErrorHandler: alertService.error({ useXHR: true }),\n alertService\n };\n\n InstanceManager\n .registerDataService(LanguageDataService, basicDataServiceConfig)\n .registerDataService(SubjectDataService, basicDataServiceConfig);\n\n next(shell);\n}\n","import React from 'react';\nimport { createRoot, Root } from 'react-dom/client';\nimport { Provider } from 'react-redux';\nimport { RegionViewOptions } from 'backbone.marionette';\n\nimport { BaseCollectionView } from 'libs/common/backbone/core/BaseCollectionView';\nimport { BaseLayoutView, BaseLayoutViewOptions } from 'libs/common/backbone/core/BaseLayoutView';\nimport { BaseComponent, BaseView } from 'libs/common/backbone/core/BaseView';\n\ninterface RegionRoots {\n [regionName: string]: Root;\n}\n\ntype Component = JSX.Element | BaseComponent | BaseView | BaseCollectionView;\n\nexport interface ReactLayoutViewOptions extends BaseLayoutViewOptions {\n alertRegion?: string;\n}\n\nexport class ReactLayoutView extends BaseLayoutView {\n declare protected options: ReactLayoutViewOptions;\n private regionRoots: RegionRoots = {};\n\n protected isReactComponent(component: Component): component is JSX.Element {\n return React && React.isValidElement(component);\n }\n\n private isReactComponentRendered: Record<string, boolean> = {};\n public showChildView(\n regionName: string,\n component: Component,\n options?: RegionViewOptions\n ): void {\n if (this.isReactComponent(component)) {\n this.showChildReactComponent(regionName, component);\n this.isReactComponentRendered[regionName] = true;\n return;\n }\n\n /**\n * If we use the same layout to render both react and marionette views.\n * We must unmount the react root before rendering in a backbone view.\n */\n if (this.isReactComponentRendered[regionName])\n this.unmountRoot(regionName);\n\n super.showChildView(regionName, component, options);\n this.isReactComponentRendered[regionName] = false;\n }\n\n private showChildReactComponent(regionName: string, component: JSX.Element): void {\n if (this.isAttached()) {\n this.renderChildReactComponent(regionName, component);\n return;\n }\n\n this.listenToOnce(this, 'attach', () => this.renderChildReactComponent(regionName, component));\n }\n\n private renderChildReactComponent(regionName: string, component: JSX.Element): void {\n const region = this.getRegion(regionName);\n\n const el = this.$el.find(region.el);\n\n if (!el || !el.length)\n return;\n\n /**\n * Trigger 'before:show' on region.\n */\n region.trigger('before:show');\n\n if (!this.regionRoots[regionName])\n this.regionRoots[regionName] = createRoot(el[0]);\n\n this.regionRoots[regionName].render(component);\n\n // React 18 removed the callback from the `render` function, so this need to be done this way now\n // https://github.com/reactwg/react-18/discussions/5#discussioncomment-798304\n window.setTimeout(() => region.trigger('show'), 0);\n\n this.listenToOnce(this, `unmount:${regionName}`, () => this.unmountRoot(regionName));\n this.listenToOnce(this, 'before:destroy', () => this.unmountRoot(regionName));\n }\n\n private unmountRoot(regionName: string): void {\n if (!this.regionRoots[regionName])\n return;\n\n this.regionRoots[regionName].unmount();\n delete this.regionRoots[regionName];\n }\n\n protected wrapWithStore(child: React.ReactElement): React.ReactElement {\n return (\n <Provider store={this.options.store}>\n {child}\n </Provider>\n );\n }\n}\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { ReactLayoutView, ReactLayoutViewOptions } from 'libs/common/react/core/ReactLayoutView';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { LayoutComponent, LayoutComponentProps } from 'shared/layouts';\n\nimport styles from './curator-layout.module.scss';\n\nexport interface CuratorLayoutViewOptions extends ReactLayoutViewOptions {\n getTopNavView?: (currentAppLink: Core.AppLink) => React.ReactElement;\n fullWidthContent?: boolean;\n}\n\nexport class CuratorLayoutView extends ReactLayoutView {\n protected options: CuratorLayoutViewOptions;\n protected childComponents: {[index: string]: React.ReactNode } = {};\n\n constructor(options?: CuratorLayoutViewOptions) {\n super(options);\n }\n\n // @ts-ignore\n public get title(): boolean {\n return false;\n }\n\n // @ts-ignore\n public get name(): string {\n return 'CuratorLayoutView';\n }\n\n // @ts-ignore\n public get template(): any {\n return () => '<div id=\"dialog-region\"></div><div class=\"layout-region\"></div>';\n }\n\n // @ts-ignore\n public get className(): string {\n return `container-fluid ${styles.curatorLayout}`;\n }\n\n public regions(): ObjectHash {\n return {\n layout: '.layout-region'\n };\n }\n\n public static getCacheKey(options: CuratorLayoutViewOptions): string {\n let ck = `${this.name}`;\n\n const optionKeys: string[] = [];\n\n Object.keys(options).forEach((key: keyof CuratorLayoutViewOptions) => {\n optionKeys.push(`${key}:${options[key]}`);\n });\n\n if (optionKeys.length) {\n optionKeys.sort();\n ck += `:${optionKeys.join(':')}`;\n }\n\n return ck;\n }\n\n private getChildComponents(): LayoutComponentProps {\n return {\n topNav: {\n component: this.childComponents[LayoutRegions.TOP_NAV],\n className: styles.topNavRegion\n },\n leftNav: {\n component: this.childComponents[LayoutRegions.LEFT_NAV],\n className: `py-3 ${styles.leftNavRegion}`\n },\n content: {\n component: this.childComponents[LayoutRegions.CONTENT],\n className: `position-relative container p-3 ${this.options.fullWidthContent ? 'mw-100' : ''}`\n },\n popup: {\n component: this.childComponents[LayoutRegions.POPUP]\n },\n alert: {\n component: this.childComponents[LayoutRegions.ALERT]\n },\n hidden: {\n component: this.childComponents[LayoutRegions.HIDDEN]\n }\n };\n }\n\n public unsetRegion(region: string): void {\n delete this.childComponents[region];\n\n this.renderLayout();\n }\n\n public renderTopNav(): void {\n if (!FunctionHelper.isFunction(this.options.getTopNavView))\n return;\n\n this.childComponents[LayoutRegions.TOP_NAV] = this.options.getTopNavView(Core.AppLinkHelper.getCurrentAppLink());\n }\n\n public hideLeftNav(): void {\n this.unsetRegion(LayoutRegions.LEFT_NAV);\n }\n\n public closePopup(): void {\n this.unsetRegion(LayoutRegions.POPUP);\n }\n\n public showChildView(region: string, component: React.ReactElement): void {\n this.childComponents[region] = component;\n\n this.renderTopNav();\n this.renderLayout();\n }\n\n public renderLayout(): void {\n super.showChildView('layout', this.wrapWithStore(<LayoutComponent {...this.getChildComponents()} />));\n }\n\n public setFullWidthContent(value: boolean) {\n this.options.fullWidthContent = value;\n }\n}\n","import { useEffect } from 'react';\n\n// This means the a11y outline styles will only be applied to elements when focused by tabbing. Not by clicking.\n// This is so we can preserve a11y when it matters (when users are tabbing) but preserve aesthetics.\n\nexport function useTabbingListener(): void {\n function handleFirstTab(e: KeyboardEvent): void {\n if (e.key === 'Tab') {\n // This class is implemented in `_outline.scss`\n document.body.classList.add('user-is-tabbing');\n\n window.removeEventListener('keydown', handleFirstTab);\n window.addEventListener('mousedown', handleMouseDownOnce);\n }\n }\n\n function handleMouseDownOnce() {\n document.body.classList.remove('user-is-tabbing');\n\n window.removeEventListener('mousedown', handleMouseDownOnce);\n window.addEventListener('keydown', handleFirstTab);\n }\n\n useEffect(() => {\n window.addEventListener('keydown', handleFirstTab);\n return () => window.removeEventListener('keydown', handleFirstTab);\n }, []);\n}\n","import React from 'react';\nimport { Provider } from 'react-redux';\nimport { Store } from 'redux';\n\nimport { PageMetadataContextProvider } from 'libs/common/react/context/PageMetadataContext';\n\nimport { BreakpointsContextProvider } from 'libs/shared/context/BreakpointsContext';\nimport { ImageStorageContextProvider } from 'libs/shared/context/ImageStorageContext';\nimport { VideoPreviewContextProvider } from 'libs/shared/context/VideoPreviewContext';\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { useListenOn } from 'libs/shared/hooks/UseListenOn';\nimport { useTabbingListener } from 'libs/shared/hooks/useTabbingListener';\nimport { LayoutHelper } from 'libs/shared/utils/LayoutHelper';\n\nimport { RegionFlag } from 'shared/components/region-flag/RegionFlag';\nimport { CuratorPlayerProvider } from 'shared/context/CuratorPlayerContext';\n\nimport styles from './full-screen-layout.module.scss';\n\nexport interface FullScreenLayoutComponentProps {\n store: Store;\n contentChild?: React.ReactNode;\n popupChild?: React.ReactNode;\n alertChild?: React.ReactNode;\n pictureInPictureChild?: React.ReactNode;\n showCustomHeader: boolean;\n}\n\nfunction FullScreenLayoutComponent(props: FullScreenLayoutComponentProps): JSX.Element {\n const { contentChild, popupChild, alertChild, pictureInPictureChild } = props;\n\n useTabbingListener();\n\n const forceUpdate = useForceUpdate();\n useListenOn(LayoutHelper, 'change:lockContentWidth', forceUpdate);\n const lockContentWidth = LayoutHelper.shouldLockContentWidth();\n\n /**\n * Because we set the overflowY to scroll in `TeacherLayoutComponent.tsx`\n * we need to make sure we set it back to auto here, in case we ever decide\n * to link between the two layouts. - Sha\n */\n React.useEffect(() => {\n document.body.style.overflowX = lockContentWidth ? 'auto' : 'hidden';\n\n return () => {\n document.body.style.overflowX = 'auto';\n };\n }, [lockContentWidth]);\n\n return (\n <div className={lockContentWidth ? styles.lockedWidth : ''}>\n {!props.showCustomHeader && (\n <div id='top-black-bar'>\n <div className='top-container h-100 d-flex justify-content-end w-100 align-items-center px-2'>\n <div className='name-sign-out me-5'>\n <div className='dropdown'>\n <div className='sign-out-dropdown-toggle' id='dropDownMenu' data-toggle='dropdown' data-bs-toggle='dropdown' aria-haspopup='true' aria-expanded='true'>\n <span className='top-nav-prompt'>Hello, {ClickView.User.name}</span>\n </div>\n <ul className='dropdown-menu dropdown-menu-right' aria-labelledby='dropdownMenu'>\n <li><a href='/signout'>Logout</a></li>\n </ul>\n </div>\n </div>\n <RegionFlag countryCode={ClickView.User.countryCode} tooltip={`You are signed in to ${ClickView.User.countryCode}`} />\n </div>\n </div>\n )}\n {contentChild}\n {popupChild}\n {alertChild && <div className={styles.alertContainer}>{alertChild}</div>}\n {pictureInPictureChild}\n </div>\n );\n}\n\nfunction WrapLayoutWithProviders(props: FullScreenLayoutComponentProps): JSX.Element {\n const { store } = props;\n\n return (\n <Provider store={store}>\n <ImageStorageContextProvider>\n <PageMetadataContextProvider>\n <BreakpointsContextProvider>\n <VideoPreviewContextProvider>\n <CuratorPlayerProvider>\n <FullScreenLayoutComponent {...props} />\n </CuratorPlayerProvider>\n </VideoPreviewContextProvider>\n </BreakpointsContextProvider>\n </PageMetadataContextProvider>\n </ImageStorageContextProvider>\n </Provider>\n );\n}\n\nexport { WrapLayoutWithProviders as FullScreenLayoutComponent };\n","import React from 'react';\n\nimport { ReactLayoutView, ReactLayoutViewOptions } from 'libs/common/react/core/ReactLayoutView';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { LayoutRegions } from 'libs/shared/constants/LayoutRegions';\n\nimport { Layouts } from 'shared/constants';\nimport { FullScreenLayoutComponent, FullScreenLayoutComponentProps } from 'shared/layouts/full-screen-layout/FullScreenLayoutComponent';\n\nexport interface FullScreenLayoutViewOptions extends ReactLayoutViewOptions {\n showCustomHeader?: boolean;\n}\n\nexport class FullScreenLayoutView extends ReactLayoutView {\n protected options: FullScreenLayoutViewOptions;\n protected childComponents: {[index: string]: React.ReactNode } = {};\n\n private topBar: HTMLElement | null;\n private nav: HTMLElement | null;\n private subnav: HTMLElement | null;\n\n public initialize(): void {\n this.topBar = document.getElementById('top-black-bar');\n this.nav = document.getElementById('white-bar-nav');\n this.subnav = document.getElementById('white-bar-subnav');\n\n this.updateNavVisibility(true);\n }\n\n // @ts-ignore\n public get title(): boolean {\n return false;\n }\n\n // @ts-ignore\n public get name(): string {\n return 'FullScreenLayoutView';\n }\n\n // @ts-ignore\n public get template(): any {\n return () => '<div id=\"dialog-region\"></div><div class=\"layout-region\"></div>';\n }\n\n public static getCacheKey(): string {\n return Layouts.FULL_SCREEN_LAYOUT;\n }\n\n public regions(): HashObject {\n return {\n layout: {\n el: '.layout-region',\n replaceEl: true\n }\n };\n }\n\n protected getChildComponents(): FullScreenLayoutComponentProps {\n return {\n contentChild: this.childComponents[LayoutRegions.CONTENT],\n popupChild: this.childComponents[LayoutRegions.POPUP],\n alertChild: this.childComponents[LayoutRegions.ALERT],\n pictureInPictureChild: this.childComponents[LayoutRegions.PICTURE_IN_PICTURE],\n store: this.options.store,\n showCustomHeader: this.options.showCustomHeader\n };\n }\n\n private updateNavVisibility(hide: boolean): void {\n if (hide) {\n this.topBar?.classList?.add('d-none');\n this.nav?.classList?.add('d-none');\n this.subnav?.classList?.add('d-none');\n\n return;\n }\n\n this.topBar?.classList?.remove('d-none');\n this.nav?.classList?.remove('d-none');\n this.subnav?.classList?.remove('d-none');\n }\n\n protected unsetRegion(region: string): void {\n delete this.childComponents[region];\n\n this.renderLayout();\n }\n\n public closePopup(): void {\n this.unsetRegion(LayoutRegions.POPUP);\n }\n\n public closePictureInPicture(): void {\n this.unsetRegion(LayoutRegions.PICTURE_IN_PICTURE);\n }\n\n public showChildView(region: string, component: React.ReactElement): void {\n this.childComponents[region] = component;\n\n this.renderLayout();\n }\n\n public renderLayout(): void {\n super.showChildView('layout', <FullScreenLayoutComponent {...this.getChildComponents()} />);\n }\n\n public onDestroy(): void {\n this.updateNavVisibility(false);\n }\n}\n","import * as React from 'react';\n\nimport { PageMetadataContextProvider } from 'libs/common/react/context/PageMetadataContext';\n\nimport { BreakpointsContextProvider } from 'libs/shared/context/BreakpointsContext';\nimport { ImageStorageContextProvider } from 'libs/shared/context/ImageStorageContext';\nimport { useTabbingListener } from 'libs/shared/hooks/useTabbingListener';\n\ninterface LayoutRegionComponentProps {\n className?: string;\n}\n\nconst LayoutRegionComponent = (props: React.PropsWithChildren<LayoutRegionComponentProps>): React.ReactElement => {\n const { className, children } = props;\n\n return (\n <div className={className}>\n {children}\n </div>\n );\n};\n\nconst getClassName = (baseClassName: string, additionalClassNames?: string) =>\n `${baseClassName}${additionalClassNames ? ` ${additionalClassNames}` : ''}`;\n\ninterface LayoutItem {\n component: React.ReactNode;\n className?: string;\n}\n\nexport interface LayoutComponentProps {\n topNav?: LayoutItem;\n leftNav?: LayoutItem;\n content?: LayoutItem;\n popup?: LayoutItem;\n alert?: LayoutItem;\n hidden?: LayoutItem;\n}\n\nconst LayoutComponent = (props: LayoutComponentProps): React.ReactElement => {\n const { topNav, leftNav, content, popup, alert, hidden } = props;\n \n useTabbingListener();\n\n return (\n <>\n <div className='position-relative'>\n {!!topNav.component &&\n <LayoutRegionComponent className={getClassName('top-nav-region', topNav.className)}>\n {topNav.component}\n </LayoutRegionComponent>\n }\n {!!leftNav.component &&\n <LayoutRegionComponent className={getClassName('left-nav-region', leftNav.className)}>\n {leftNav.component}\n </LayoutRegionComponent>\n }\n {!!content.component &&\n <div className='content-container'>\n <LayoutRegionComponent className={getClassName('content-region', content.className)}>\n {content.component}\n </LayoutRegionComponent>\n </div>\n }\n </div>\n {!!popup.component &&\n <LayoutRegionComponent className={getClassName('popup-region', popup.className)}>\n {popup.component}\n </LayoutRegionComponent>\n }\n {!!alert.component &&\n <LayoutRegionComponent className={getClassName('alert-region', alert.className)}>\n {alert.component}\n </LayoutRegionComponent>\n }\n {!!hidden.component &&\n <LayoutRegionComponent className={getClassName('hidden-region', 'd-none')}>\n {hidden.component}\n </LayoutRegionComponent>\n }\n </>\n );\n};\n\nconst LayoutComponentWithProvider = (props: LayoutComponentProps): React.ReactElement => {\n return (\n <PageMetadataContextProvider>\n <BreakpointsContextProvider>\n <ImageStorageContextProvider>\n <LayoutComponent {...props} />\n </ImageStorageContextProvider>\n </BreakpointsContextProvider>\n </PageMetadataContextProvider>\n );\n};\n\nexport { LayoutComponentWithProvider as LayoutComponent };\n","import { Core } from 'libs/common/backbone/index';\n\nimport { Layouts } from 'shared/constants';\nimport { CuratorLayoutView, FullScreenLayoutView } from 'shared/layouts';\n\nexport function RegisterLayouts(shell: Core.Shell, next: (...args: any) => any) {\n shell.registerLayout(Layouts.CURATOR_LAYOUT, CuratorLayoutView);\n shell.registerLayout(Layouts.FULL_SCREEN_LAYOUT, FullScreenLayoutView);\n\n next(shell);\n}\n","import { Core } from 'libs/common/backbone/index';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { BaseVideoUploadService, LearningResourceUploadService, SubtitleUploadService } from 'libs/shared/apps/upload/services/UploadService';\nimport { LanguageDataService } from 'libs/shared/services/LanguageDataService';\n\nimport { DataServices } from 'shared/constants';\n\nexport async function RegisterServices(shell: Core.Shell, next: (...args: any) => any) {\n InstanceManager.registerInstance(SubtitleUploadService, { store: shell.store });\n InstanceManager.registerInstance(LearningResourceUploadService, { store: shell.store });\n InstanceManager.registerInstance(BaseVideoUploadService, { store: shell.store });\n\n if (__ENVIRONMENT__ === 'development') {\n const phrases = (await import('virtual:i18n-data')).default;\n\n LanguageService.setConfig({\n locale: 'en',\n phrases\n });\n next(shell);\n } else {\n const languageDataService = InstanceManager.getInstance<LanguageDataService>(DataServices.LANGUAGE);\n\n languageDataService.getLanguageConfig(config => {\n LanguageService.setConfig(config);\n InstanceManager.releaseInstance(DataServices.LANGUAGE);\n\n next(shell);\n });\n }\n}\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (typeof module !== 'undefined') {\n root = module;\n} else {\n root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","import $$observable from 'symbol-observable';\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error('It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function.');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error('Expected the enhancer to be a function.');\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error('Expected the reducer to be a function.');\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error('You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Expected the listener to be a function.');\n }\n\n if (isDispatching) {\n throw new Error('You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error('You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n }\n\n if (isDispatching) {\n throw new Error('Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error('Expected the nextReducer to be a function.');\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new TypeError('Expected the observer to be an object.');\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUndefinedStateErrorMessage(key, action) {\n var actionType = action && action.type;\n var actionDescription = actionType && \"action \\\"\" + String(actionType) + \"\\\"\" || 'an action';\n return \"Given \" + actionDescription + \", reducer \\\"\" + key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\";\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle \" + ActionTypes.INIT + \" or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var errorMessage = getUndefinedStateErrorMessage(_key, action);\n throw new Error(errorMessage);\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(\"bindActionCreators expected an object or a function, instead received \" + (actionCreators === null ? 'null' : typeof actionCreators) + \". \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n keys.push.apply(keys, Object.getOwnPropertySymbols(object));\n }\n\n if (enumerableOnly) keys = keys.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error('Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread2({}, store, {\n dispatch: _dispatch\n });\n };\n };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n warning('You are currently using minified code outside of NODE_ENV === \"production\". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore };\n","\"use strict\";\n\nvar compose = require('redux').compose;\n\nexports.__esModule = true;\nexports.composeWithDevTools = (\n typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?\n window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ :\n function() {\n if (arguments.length === 0) return undefined;\n if (typeof arguments[0] === 'object') return compose;\n return compose.apply(null, arguments);\n }\n);\n\nexports.devToolsEnhancer = (\n typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ ?\n window.__REDUX_DEVTOOLS_EXTENSION__ :\n function() { return function(noop) { return noop; } }\n);\n","import { AnyAction, Dispatch } from 'redux';\n\nimport { BaseDataService } from 'libs/common/backbone/services/BaseDataService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { Flight } from 'libs/common/flight';\n\nimport { Action, Actions } from '../flight';\n\ntype ApplicationMiddlewareResponse = (next: Dispatch<AnyAction>) => (action: Action) => void;\n\n/**\n * This middleware is used to bridge invalidation of requests between old marionette data services\n * and new flight requests. This bridge can be utilised by setting the invalidation keys required and then:\n * - Setting invalidateFlight to true in a dataservice request\n * - Or update the type of your Flight request to Flight.FlightDataServiceBridgeRequest\n * and then passing the name of our dataservices in the dataServices property in a flight request\n */\nexport function flightDataServiceBridgeMiddleware(): ApplicationMiddlewareResponse {\n return (next: Dispatch<AnyAction>) => (action: Action) => {\n if (action.type !== Actions.INVALIDATE) {\n next(action);\n return;\n }\n \n const request = action.request as Flight.FlightDataServiceBridgeRequest;\n\n if (!request?.dataServices?.length || !request?.invalidationKeys) {\n next(action);\n return;\n }\n\n const invalidationKeys = Array.isArray(request.invalidationKeys) ?\n request.invalidationKeys :\n [request.invalidationKeys];\n\n request.dataServices.forEach(name => {\n const dataService = InstanceManager.getInstance<BaseDataService>(name);\n\n if (!dataService)\n return;\n\n dataService.invalidateCache(invalidationKeys);\n InstanceManager.releaseInstance(name);\n });\n\n next(action);\n };\n}\n","export const HttpHeaders = {\n X_APP_VERSION: 'X-App-Version'\n};\n","import { HttpHeaders } from 'libs/common/react/constants/HttpHeaders';\nimport { Actions } from 'libs/common/react/flight/constants/Actions';\nimport { Action, ResponseAction } from 'libs/common/react/flight/interfaces';\nimport { ApplicationData } from 'libs/common/react/interfaces/ApplicationData';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nfunction ApiResponseReducer(state: ApplicationData, action: ResponseAction): ApplicationData {\n if (!ObjectHelper.isObject(action.xhr))\n return state;\n\n const version = action.xhr.getResponseHeader(HttpHeaders.X_APP_VERSION);\n\n if (version)\n return { ...state, version };\n\n // OLD:VERSION:TESTING Uncomment below and comment above\n // search for 'OLD:VERSION:TESTING' to find the code that needs to be uncommented\n // if (version)\n // return { ...state, version: version + Math.random() };\n\n return state;\n}\n\nconst defaultState: ApplicationData = {\n version: null\n};\n\nexport function ApplicationDataReducer(state: ApplicationData = defaultState, action: Action): ApplicationData {\n switch (action.type) {\n case Actions.API_RESPONSE:\n return ApiResponseReducer(state, action as ResponseAction);\n }\n\n return state;\n}\n","import { ViewModelActions } from 'libs/common/react/constants/ViewModelActions';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\nimport { ViewModelAction } from 'libs/common/react/interfaces/ViewModelAction';\n\nfunction UpdateViewModel(state: HashObject, action: ViewModelAction): HashObject {\n // If setState has been called with key-value arguments\n if (typeof action.payload.dataOrKey === 'string' && action.payload.keyData !== undefined) {\n return {\n ...state,\n [action.payload.viewModelKey]: {\n ...state[action.payload.viewModelKey],\n [action.payload.dataOrKey]: action.payload.keyData\n }\n };\n }\n\n if (typeof action.payload.dataOrKey === 'object' && Array.isArray(action.payload.dataOrKey)) {\n return {\n ...state,\n [action.payload.viewModelKey]: action.payload.dataOrKey\n };\n }\n\n return {\n ...state,\n [action.payload.viewModelKey]: action.payload.dataOrKey\n };\n}\n\nexport function ViewModelReducer(state: HashObject = {}, action: ViewModelAction): HashObject {\n switch (action.type) {\n case ViewModelActions.UPDATE:\n return UpdateViewModel(state, action);\n }\n\n return state;\n}\n","import { applyMiddleware, combineReducers, createStore, Store } from 'redux';\nimport { composeWithDevTools } from 'redux-devtools-extension';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { HttpRequestOptions } from 'libs/common/react/flight';\nimport { Flight } from 'libs/common/react/index';\nimport { flightDataServiceBridgeMiddleware } from 'libs/common/react/middleware/FlightDataServiceBridgeMiddleware';\nimport { ApplicationDataReducer } from 'libs/common/react/reducers/ApplicationDataReducer';\nimport { ViewModelReducer } from 'libs/common/react/reducers/ViewModelReducer';\n\nimport { CacheDurations } from 'libs/shared/constants/CacheDurations';\n\nexport async function RegisterStore(shell: Core.Shell, next: (...args: any) => any) {\n const reducer = combineReducers({\n flightData: Flight.FlightReducer,\n viewModelData: ViewModelReducer,\n applicationData: ApplicationDataReducer\n });\n\n function fetchData(options: HttpRequestOptions): void {\n const middleware = new Core.Middleware<HttpRequestOptions>();\n\n middleware.useAsync((options, next) => {\n if (!options.resource.startsWith('{gateway}')) {\n next(options);\n return;\n }\n\n next({\n ...options,\n resource: UrlHelper.safeUrlConcat('/api/gateway', options.resource.split('{gateway}/')[1])\n });\n });\n\n middleware.goAsync(options, (options: HttpRequestOptions) => {\n Flight.ajaxRequest(options);\n });\n }\n\n const flightMiddleware = Flight.createMiddleware({\n fetchData,\n defaultCacheDuration: CacheDurations.STANDARD\n });\n\n async function registerStore(store: Store): Promise<void> {\n try {\n shell.registerStore(store);\n } finally {\n /**\n * Only move to the next initialisation step once we've\n * fetched and stored the current user and permissions.\n */\n next(shell);\n }\n }\n\n // In development, we want to add the redux devtools middleware so that we can use the browser extension for debugging\n if (__ENVIRONMENT__ === 'development') {\n const devStore = createStore(\n reducer,\n composeWithDevTools(\n applyMiddleware(\n flightMiddleware,\n flightDataServiceBridgeMiddleware\n )\n )\n );\n\n await registerStore(devStore);\n return;\n }\n\n // Production only\n const prodStore = createStore(\n reducer,\n applyMiddleware(\n flightMiddleware,\n flightDataServiceBridgeMiddleware\n )\n );\n await registerStore(prodStore);\n}\n","import Backbone from 'backbone';\n\nimport { CommonServices } from 'libs/common/backbone/constants/CommonServices';\nimport { DevError } from 'libs/common/backbone/errors/DevError';\nimport { Core } from 'libs/common/backbone/index';\nimport { AlertType, BaseAlertService } from 'libs/common/backbone/services/BaseAlertService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\n\nimport { AlertError } from 'libs/shared/errors/primitives/AlertError';\nimport { DialogError } from 'libs/shared/errors/primitives/DialogError';\n\nimport { Actions, AppChannels } from 'shared/constants';\n\nfunction handleDialogError(error: DialogError) {\n const channel = Backbone.Radio.channel('error:view');\n channel.reply('current:error', () => error);\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.DEFAULT,\n action: Actions.Default.DIALOG_ERROR\n });\n}\n\nfunction handleAlertError(error: DialogError) {\n const alertService = InstanceManager.getInstance<BaseAlertService>(CommonServices.ALERT);\n\n alertService.createAlert({ heading: 'Oops', type: AlertType.Fail, message: error.message });\n}\n\nfunction handleDevError(error: DevError) {\n const channel = Backbone.Radio.channel('error:view');\n channel.reply('current:error', () => error);\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.DEFAULT,\n action: Actions.Default.DEV_ERROR\n });\n}\n\nexport function RegisterErrorHandlers(shell: Core.Shell, next: (...args: any) => any) {\n shell\n .registerErrorHandler(DialogError, handleDialogError)\n .registerErrorHandler(AlertError, handleAlertError);\n\n if (__ENVIRONMENT__ === 'development') {\n shell\n .registerErrorHandler(Core.Error, handleDevError)\n .registerErrorHandler(DevError, handleDevError);\n }\n\n next(shell);\n}\n\n","import { Core } from 'libs/common/backbone/index';\n\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nexport async function RegisterArticleHelper(shell: Core.Shell, next: (...args: any) => any) {\n try {\n ArticleHelper.initialize({\n product: ProductId.Primary,\n liteSupportSiteUrl: ClickView.Config.Urls.LiteSupportSiteUrl,\n instanceRegion: InstanceRegion.AU\n });\n } finally {\n next(shell);\n }\n}\n","import { Core } from 'libs/common/backbone/index';\n\nimport { SettingRequests } from 'libs/shared/flight-requests/SettingRequests';\nimport { SettingsHelper } from 'libs/shared/utils/SettingsHelper';\n\nexport function RegisterSettings(shell: Core.Shell, next: (...args: any) => any) {\n SettingRequests.setPublicFormatSettings(SettingsHelper.formatSettings);\n\n next(shell);\n}\n","/* eslint simple-import-sort/imports: 0 */\n\nimport './styles/index.scss';\n\nimport 'bootstrap';\nimport 'backbone.radio';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport {\n InitializeNavService,\n RegisterApplications,\n RegisterArticleHelper,\n RegisterCaches,\n RegisterDataProviders,\n RegisterDataServices,\n RegisterErrorHandlers,\n RegisterLayouts,\n RegisterServices,\n RegisterSettings,\n RegisterStore\n} from './startup';\n\n/**\n * Curator has other JS that uses jQuery 💩\n */\n(window as any).$ = $;\n\nconst shell = new Core.Shell({\n region: '#app',\n layoutService: new Core.LayoutService({})\n});\n\nshell\n .addInitializationStep(RegisterSettings)\n .addInitializationStep(RegisterLayouts)\n .addInitializationStep(RegisterStore)\n .addInitializationStep(RegisterCaches)\n .addInitializationStep(RegisterDataProviders)\n .addInitializationStep(RegisterDataServices)\n .addInitializationStep(InitializeNavService)\n .addInitializationStep(RegisterServices)\n .addInitializationStep(RegisterErrorHandlers)\n .addInitializationStep(RegisterApplications)\n .addInitializationStep(RegisterArticleHelper);\n\n/**\n * In curator we load our bundle at the top of the page because parts\n * of curator rely on the libraries we are importing, such as jQuery.\n * However we don't want to start our app until the entire page has laoded,\n * because of snippets like\n * \n * // window.selectedNav = 'system';\n * \n * which run in the actions view *.cshtml files.\n */\nwindow.addEventListener('load', () => {\n shell.start();\n});\n"],"file":"app-snxXiZp3.js"}