).';\n\n\t\tinitialized = true;\n\n\t\t// Cache references to key DOM elements\n\t\tdom.wrapper = revealElement;\n\t\tdom.slides = revealElement.querySelector( '.slides' );\n\n\t\tif( !dom.slides ) throw 'Unable to find slides container (
).';\n\n\t\t// Compose our config object in order of increasing precedence:\n\t\t// 1. Default reveal.js options\n\t\t// 2. Options provided via Reveal.configure() prior to\n\t\t// initialization\n\t\t// 3. Options passed to the Reveal constructor\n\t\t// 4. Options passed to Reveal.initialize\n\t\t// 5. Query params\n\t\tconfig = { ...defaultConfig, ...config, ...options, ...initOptions, ...Util.getQueryHash() };\n\n\t\t// Legacy support for the ?print-pdf query\n\t\tif( /print-pdf/gi.test( window.location.search ) ) {\n\t\t\tconfig.view = 'print';\n\t\t}\n\n\t\tsetViewport();\n\n\t\t// Force a layout when the whole page, incl fonts, has loaded\n\t\twindow.addEventListener( 'load', layout, false );\n\n\t\t// Register plugins and load dependencies, then move on to #start()\n\t\tplugins.load( config.plugins, config.dependencies ).then( start );\n\n\t\treturn new Promise( resolve => Reveal.on( 'ready', resolve ) );\n\n\t}\n\n\t/**\n\t * Encase the presentation in a reveal.js viewport. The\n\t * extent of the viewport differs based on configuration.\n\t */\n\tfunction setViewport() {\n\n\t\t// Embedded decks use the reveal element as their viewport\n\t\tif( config.embedded === true ) {\n\t\t\tdom.viewport = Util.closest( revealElement, '.reveal-viewport' ) || revealElement;\n\t\t}\n\t\t// Full-page decks use the body as their viewport\n\t\telse {\n\t\t\tdom.viewport = document.body;\n\t\t\tdocument.documentElement.classList.add( 'reveal-full-page' );\n\t\t}\n\n\t\tdom.viewport.classList.add( 'reveal-viewport' );\n\n\t}\n\n\t/**\n\t * Starts up reveal.js by binding input events and navigating\n\t * to the current URL deeplink if there is one.\n\t */\n\tfunction start() {\n\n\t\tready = true;\n\n\t\t// Remove slides hidden with data-visibility\n\t\tremoveHiddenSlides();\n\n\t\t// Make sure we've got all the DOM elements we need\n\t\tsetupDOM();\n\n\t\t// Listen to messages posted to this window\n\t\tsetupPostMessage();\n\n\t\t// Prevent the slides from being scrolled out of view\n\t\tsetupScrollPrevention();\n\n\t\t// Adds bindings for fullscreen mode\n\t\tsetupFullscreen();\n\n\t\t// Resets all vertical slides so that only the first is visible\n\t\tresetVerticalSlides();\n\n\t\t// Updates the presentation to match the current configuration values\n\t\tconfigure();\n\n\t\t// Create slide backgrounds\n\t\tbackgrounds.update( true );\n\n\t\t// Activate the print/scroll view if configured\n\t\tactivateInitialView();\n\n\t\t// Read the initial hash\n\t\tlocation.readURL();\n\n\t\t// Notify listeners that the presentation is ready but use a 1ms\n\t\t// timeout to ensure it's not fired synchronously after #initialize()\n\t\tsetTimeout( () => {\n\t\t\t// Enable transitions now that we're loaded\n\t\t\tdom.slides.classList.remove( 'no-transition' );\n\n\t\t\tdom.wrapper.classList.add( 'ready' );\n\n\t\t\tdispatchEvent({\n\t\t\t\ttype: 'ready',\n\t\t\t\tdata: {\n\t\t\t\t\tindexh,\n\t\t\t\t\tindexv,\n\t\t\t\t\tcurrentSlide\n\t\t\t\t}\n\t\t\t});\n\t\t}, 1 );\n\n\t}\n\n\t/**\n\t * Activates the correct reveal.js view based on our config.\n\t * This is only invoked once during initialization.\n\t */\n\tfunction activateInitialView() {\n\n\t\tconst activatePrintView = config.view === 'print';\n\t\tconst activateScrollView = config.view === 'scroll' || config.view === 'reader';\n\n\t\tif( activatePrintView || activateScrollView ) {\n\n\t\t\tif( activatePrintView ) {\n\t\t\t\tremoveEventListeners();\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttouch.unbind();\n\t\t\t}\n\n\t\t\t// Avoid content flickering during layout\n\t\t\tdom.viewport.classList.add( 'loading-scroll-mode' );\n\n\t\t\tif( activatePrintView ) {\n\t\t\t\t// The document needs to have loaded for the PDF layout\n\t\t\t\t// measurements to be accurate\n\t\t\t\tif( document.readyState === 'complete' ) {\n\t\t\t\t\tprintView.activate();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\twindow.addEventListener( 'load', () => printView.activate() );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tscrollView.activate();\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Removes all slides with data-visibility=\"hidden\". This\n\t * is done right before the rest of the presentation is\n\t * initialized.\n\t *\n\t * If you want to show all hidden slides, initialize\n\t * reveal.js with showHiddenSlides set to true.\n\t */\n\tfunction removeHiddenSlides() {\n\n\t\tif( !config.showHiddenSlides ) {\n\t\t\tUtil.queryAll( dom.wrapper, 'section[data-visibility=\"hidden\"]' ).forEach( slide => {\n\t\t\t\tconst parent = slide.parentNode;\n\n\t\t\t\t// If this slide is part of a stack and that stack will be\n\t\t\t\t// empty after removing the hidden slide, remove the entire\n\t\t\t\t// stack\n\t\t\t\tif( parent.childElementCount === 1 && /section/i.test( parent.nodeName ) ) {\n\t\t\t\t\tparent.remove();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tslide.remove();\n\t\t\t\t}\n\n\t\t\t} );\n\t\t}\n\n\t}\n\n\t/**\n\t * Finds and stores references to DOM elements which are\n\t * required by the presentation. If a required element is\n\t * not found, it is created.\n\t */\n\tfunction setupDOM() {\n\n\t\t// Prevent transitions while we're loading\n\t\tdom.slides.classList.add( 'no-transition' );\n\n\t\tif( Device.isMobile ) {\n\t\t\tdom.wrapper.classList.add( 'no-hover' );\n\t\t}\n\t\telse {\n\t\t\tdom.wrapper.classList.remove( 'no-hover' );\n\t\t}\n\n\t\tbackgrounds.render();\n\t\tslideNumber.render();\n\t\tjumpToSlide.render();\n\t\tcontrols.render();\n\t\tprogress.render();\n\t\tnotes.render();\n\n\t\t// Overlay graphic which is displayed during the paused mode\n\t\tdom.pauseOverlay = Util.createSingletonNode( dom.wrapper, 'div', 'pause-overlay', config.controls ? '
Resume presentation ' : null );\n\n\t\tdom.statusElement = createStatusElement();\n\n\t\tdom.wrapper.setAttribute( 'role', 'application' );\n\t}\n\n\t/**\n\t * Creates a hidden div with role aria-live to announce the\n\t * current slide content. Hide the div off-screen to make it\n\t * available only to Assistive Technologies.\n\t *\n\t * @return {HTMLElement}\n\t */\n\tfunction createStatusElement() {\n\n\t\tlet statusElement = dom.wrapper.querySelector( '.aria-status' );\n\t\tif( !statusElement ) {\n\t\t\tstatusElement = document.createElement( 'div' );\n\t\t\tstatusElement.style.position = 'absolute';\n\t\t\tstatusElement.style.height = '1px';\n\t\t\tstatusElement.style.width = '1px';\n\t\t\tstatusElement.style.overflow = 'hidden';\n\t\t\tstatusElement.style.clip = 'rect( 1px, 1px, 1px, 1px )';\n\t\t\tstatusElement.classList.add( 'aria-status' );\n\t\t\tstatusElement.setAttribute( 'aria-live', 'polite' );\n\t\t\tstatusElement.setAttribute( 'aria-atomic','true' );\n\t\t\tdom.wrapper.appendChild( statusElement );\n\t\t}\n\t\treturn statusElement;\n\n\t}\n\n\t/**\n\t * Announces the given text to screen readers.\n\t */\n\tfunction announceStatus( value ) {\n\n\t\tdom.statusElement.textContent = value;\n\n\t}\n\n\t/**\n\t * Converts the given HTML element into a string of text\n\t * that can be announced to a screen reader. Hidden\n\t * elements are excluded.\n\t */\n\tfunction getStatusText( node ) {\n\n\t\tlet text = '';\n\n\t\t// Text node\n\t\tif( node.nodeType === 3 ) {\n\t\t\ttext += node.textContent;\n\t\t}\n\t\t// Element node\n\t\telse if( node.nodeType === 1 ) {\n\n\t\t\tlet isAriaHidden = node.getAttribute( 'aria-hidden' );\n\t\t\tlet isDisplayHidden = window.getComputedStyle( node )['display'] === 'none';\n\t\t\tif( isAriaHidden !== 'true' && !isDisplayHidden ) {\n\n\t\t\t\tArray.from( node.childNodes ).forEach( child => {\n\t\t\t\t\ttext += getStatusText( child );\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t\ttext = text.trim();\n\n\t\treturn text === '' ? '' : text + ' ';\n\n\t}\n\n\t/**\n\t * This is an unfortunate necessity. Some actions – such as\n\t * an input field being focused in an iframe or using the\n\t * keyboard to expand text selection beyond the bounds of\n\t * a slide – can trigger our content to be pushed out of view.\n\t * This scrolling can not be prevented by hiding overflow in\n\t * CSS (we already do) so we have to resort to repeatedly\n\t * checking if the slides have been offset :(\n\t */\n\tfunction setupScrollPrevention() {\n\n\t\tsetInterval( () => {\n\t\t\tif( !scrollView.isActive() && dom.wrapper.scrollTop !== 0 || dom.wrapper.scrollLeft !== 0 ) {\n\t\t\t\tdom.wrapper.scrollTop = 0;\n\t\t\t\tdom.wrapper.scrollLeft = 0;\n\t\t\t}\n\t\t}, 1000 );\n\n\t}\n\n\t/**\n\t * After entering fullscreen we need to force a layout to\n\t * get our presentations to scale correctly. This behavior\n\t * is inconsistent across browsers but a force layout seems\n\t * to normalize it.\n\t */\n\tfunction setupFullscreen() {\n\n\t\tdocument.addEventListener( 'fullscreenchange', onFullscreenChange );\n\t\tdocument.addEventListener( 'webkitfullscreenchange', onFullscreenChange );\n\n\t}\n\n\t/**\n\t * Registers a listener to postMessage events, this makes it\n\t * possible to call all reveal.js API methods from another\n\t * window. For example:\n\t *\n\t * revealWindow.postMessage( JSON.stringify({\n\t * method: 'slide',\n\t * args: [ 2 ]\n\t * }), '*' );\n\t */\n\tfunction setupPostMessage() {\n\n\t\tif( config.postMessage ) {\n\t\t\twindow.addEventListener( 'message', onPostMessage, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Applies the configuration settings from the config\n\t * object. May be called multiple times.\n\t *\n\t * @param {object} options\n\t */\n\tfunction configure( options ) {\n\n\t\tconst oldConfig = { ...config }\n\n\t\t// New config options may be passed when this method\n\t\t// is invoked through the API after initialization\n\t\tif( typeof options === 'object' ) Util.extend( config, options );\n\n\t\t// Abort if reveal.js hasn't finished loading, config\n\t\t// changes will be applied automatically once ready\n\t\tif( Reveal.isReady() === false ) return;\n\n\t\tconst numberOfSlides = dom.wrapper.querySelectorAll( SLIDES_SELECTOR ).length;\n\n\t\t// The transition is added as a class on the .reveal element\n\t\tdom.wrapper.classList.remove( oldConfig.transition );\n\t\tdom.wrapper.classList.add( config.transition );\n\n\t\tdom.wrapper.setAttribute( 'data-transition-speed', config.transitionSpeed );\n\t\tdom.wrapper.setAttribute( 'data-background-transition', config.backgroundTransition );\n\n\t\t// Expose our configured slide dimensions as custom props\n\t\tdom.viewport.style.setProperty( '--slide-width', typeof config.width === 'string' ? config.width : config.width + 'px' );\n\t\tdom.viewport.style.setProperty( '--slide-height', typeof config.height === 'string' ? config.height : config.height + 'px' );\n\n\t\tif( config.shuffle ) {\n\t\t\tshuffle();\n\t\t}\n\n\t\tUtil.toggleClass( dom.wrapper, 'embedded', config.embedded );\n\t\tUtil.toggleClass( dom.wrapper, 'rtl', config.rtl );\n\t\tUtil.toggleClass( dom.wrapper, 'center', config.center );\n\n\t\t// Exit the paused mode if it was configured off\n\t\tif( config.pause === false ) {\n\t\t\tresume();\n\t\t}\n\n\t\t// Iframe link previews\n\t\tif( config.previewLinks ) {\n\t\t\tenablePreviewLinks();\n\t\t\tdisablePreviewLinks( '[data-preview-link=false]' );\n\t\t}\n\t\telse {\n\t\t\tdisablePreviewLinks();\n\t\t\tenablePreviewLinks( '[data-preview-link]:not([data-preview-link=false])' );\n\t\t}\n\n\t\t// Reset all changes made by auto-animations\n\t\tautoAnimate.reset();\n\n\t\t// Remove existing auto-slide controls\n\t\tif( autoSlidePlayer ) {\n\t\t\tautoSlidePlayer.destroy();\n\t\t\tautoSlidePlayer = null;\n\t\t}\n\n\t\t// Generate auto-slide controls if needed\n\t\tif( numberOfSlides > 1 && config.autoSlide && config.autoSlideStoppable ) {\n\t\t\tautoSlidePlayer = new Playback( dom.wrapper, () => {\n\t\t\t\treturn Math.min( Math.max( ( Date.now() - autoSlideStartTime ) / autoSlide, 0 ), 1 );\n\t\t\t} );\n\n\t\t\tautoSlidePlayer.on( 'click', onAutoSlidePlayerClick );\n\t\t\tautoSlidePaused = false;\n\t\t}\n\n\t\t// Add the navigation mode to the DOM so we can adjust styling\n\t\tif( config.navigationMode !== 'default' ) {\n\t\t\tdom.wrapper.setAttribute( 'data-navigation-mode', config.navigationMode );\n\t\t}\n\t\telse {\n\t\t\tdom.wrapper.removeAttribute( 'data-navigation-mode' );\n\t\t}\n\n\t\tnotes.configure( config, oldConfig );\n\t\tfocus.configure( config, oldConfig );\n\t\tpointer.configure( config, oldConfig );\n\t\tcontrols.configure( config, oldConfig );\n\t\tprogress.configure( config, oldConfig );\n\t\tkeyboard.configure( config, oldConfig );\n\t\tfragments.configure( config, oldConfig );\n\t\tslideNumber.configure( config, oldConfig );\n\n\t\tsync();\n\n\t}\n\n\t/**\n\t * Binds all event listeners.\n\t */\n\tfunction addEventListeners() {\n\n\t\teventsAreBound = true;\n\n\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\n\t\tif( config.touch ) touch.bind();\n\t\tif( config.keyboard ) keyboard.bind();\n\t\tif( config.progress ) progress.bind();\n\t\tif( config.respondToHashChanges ) location.bind();\n\t\tcontrols.bind();\n\t\tfocus.bind();\n\n\t\tdom.slides.addEventListener( 'click', onSlidesClicked, false );\n\t\tdom.slides.addEventListener( 'transitionend', onTransitionEnd, false );\n\t\tdom.pauseOverlay.addEventListener( 'click', resume, false );\n\n\t\tif( config.focusBodyOnPageVisibilityChange ) {\n\t\t\tdocument.addEventListener( 'visibilitychange', onPageVisibilityChange, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Unbinds all event listeners.\n\t */\n\tfunction removeEventListeners() {\n\n\t\teventsAreBound = false;\n\n\t\ttouch.unbind();\n\t\tfocus.unbind();\n\t\tkeyboard.unbind();\n\t\tcontrols.unbind();\n\t\tprogress.unbind();\n\t\tlocation.unbind();\n\n\t\twindow.removeEventListener( 'resize', onWindowResize, false );\n\n\t\tdom.slides.removeEventListener( 'click', onSlidesClicked, false );\n\t\tdom.slides.removeEventListener( 'transitionend', onTransitionEnd, false );\n\t\tdom.pauseOverlay.removeEventListener( 'click', resume, false );\n\n\t}\n\n\t/**\n\t * Uninitializes reveal.js by undoing changes made to the\n\t * DOM and removing all event listeners.\n\t */\n\tfunction destroy() {\n\n\t\t// There's nothing to destroy if this instance hasn't been\n\t\t// initialized yet\n\t\tif( initialized === false ) return;\n\n\t\tremoveEventListeners();\n\t\tcancelAutoSlide();\n\t\tdisablePreviewLinks();\n\n\t\t// Destroy controllers\n\t\tnotes.destroy();\n\t\tfocus.destroy();\n\t\tplugins.destroy();\n\t\tpointer.destroy();\n\t\tcontrols.destroy();\n\t\tprogress.destroy();\n\t\tbackgrounds.destroy();\n\t\tslideNumber.destroy();\n\t\tjumpToSlide.destroy();\n\n\t\t// Remove event listeners\n\t\tdocument.removeEventListener( 'fullscreenchange', onFullscreenChange );\n\t\tdocument.removeEventListener( 'webkitfullscreenchange', onFullscreenChange );\n\t\tdocument.removeEventListener( 'visibilitychange', onPageVisibilityChange, false );\n\t\twindow.removeEventListener( 'message', onPostMessage, false );\n\t\twindow.removeEventListener( 'load', layout, false );\n\n\t\t// Undo DOM changes\n\t\tif( dom.pauseOverlay ) dom.pauseOverlay.remove();\n\t\tif( dom.statusElement ) dom.statusElement.remove();\n\n\t\tdocument.documentElement.classList.remove( 'reveal-full-page' );\n\n\t\tdom.wrapper.classList.remove( 'ready', 'center', 'has-horizontal-slides', 'has-vertical-slides' );\n\t\tdom.wrapper.removeAttribute( 'data-transition-speed' );\n\t\tdom.wrapper.removeAttribute( 'data-background-transition' );\n\n\t\tdom.viewport.classList.remove( 'reveal-viewport' );\n\t\tdom.viewport.style.removeProperty( '--slide-width' );\n\t\tdom.viewport.style.removeProperty( '--slide-height' );\n\n\t\tdom.slides.style.removeProperty( 'width' );\n\t\tdom.slides.style.removeProperty( 'height' );\n\t\tdom.slides.style.removeProperty( 'zoom' );\n\t\tdom.slides.style.removeProperty( 'left' );\n\t\tdom.slides.style.removeProperty( 'top' );\n\t\tdom.slides.style.removeProperty( 'bottom' );\n\t\tdom.slides.style.removeProperty( 'right' );\n\t\tdom.slides.style.removeProperty( 'transform' );\n\n\t\tArray.from( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) ).forEach( slide => {\n\t\t\tslide.style.removeProperty( 'display' );\n\t\t\tslide.style.removeProperty( 'top' );\n\t\t\tslide.removeAttribute( 'hidden' );\n\t\t\tslide.removeAttribute( 'aria-hidden' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Adds a listener to one of our custom reveal.js events,\n\t * like slidechanged.\n\t */\n\tfunction on( type, listener, useCapture ) {\n\n\t\trevealElement.addEventListener( type, listener, useCapture );\n\n\t}\n\n\t/**\n\t * Unsubscribes from a reveal.js event.\n\t */\n\tfunction off( type, listener, useCapture ) {\n\n\t\trevealElement.removeEventListener( type, listener, useCapture );\n\n\t}\n\n\t/**\n\t * Applies CSS transforms to the slides container. The container\n\t * is transformed from two separate sources: layout and the overview\n\t * mode.\n\t *\n\t * @param {object} transforms\n\t */\n\tfunction transformSlides( transforms ) {\n\n\t\t// Pick up new transforms from arguments\n\t\tif( typeof transforms.layout === 'string' ) slidesTransform.layout = transforms.layout;\n\t\tif( typeof transforms.overview === 'string' ) slidesTransform.overview = transforms.overview;\n\n\t\t// Apply the transforms to the slides container\n\t\tif( slidesTransform.layout ) {\n\t\t\tUtil.transformElement( dom.slides, slidesTransform.layout + ' ' + slidesTransform.overview );\n\t\t}\n\t\telse {\n\t\t\tUtil.transformElement( dom.slides, slidesTransform.overview );\n\t\t}\n\n\t}\n\n\t/**\n\t * Dispatches an event of the specified type from the\n\t * reveal DOM element.\n\t */\n\tfunction dispatchEvent({ target=dom.wrapper, type, data, bubbles=true }) {\n\n\t\tlet event = document.createEvent( 'HTMLEvents', 1, 2 );\n\t\tevent.initEvent( type, bubbles, true );\n\t\tUtil.extend( event, data );\n\t\ttarget.dispatchEvent( event );\n\n\t\tif( target === dom.wrapper ) {\n\t\t\t// If we're in an iframe, post each reveal.js event to the\n\t\t\t// parent window. Used by the notes plugin\n\t\t\tdispatchPostMessage( type );\n\t\t}\n\n\t\treturn event;\n\n\t}\n\n\t/**\n\t * Dispatches a slidechanged event.\n\t *\n\t * @param {string} origin Used to identify multiplex clients\n\t */\n\tfunction dispatchSlideChanged( origin ) {\n\n\t\tdispatchEvent({\n\t\t\ttype: 'slidechanged',\n\t\t\tdata: {\n\t\t\t\tindexh,\n\t\t\t\tindexv,\n\t\t\t\tpreviousSlide,\n\t\t\t\tcurrentSlide,\n\t\t\t\torigin\n\t\t\t}\n\t\t});\n\n\t}\n\n\t/**\n\t * Dispatched a postMessage of the given type from our window.\n\t */\n\tfunction dispatchPostMessage( type, data ) {\n\n\t\tif( config.postMessageEvents && window.parent !== window.self ) {\n\t\t\tlet message = {\n\t\t\t\tnamespace: 'reveal',\n\t\t\t\teventName: type,\n\t\t\t\tstate: getState()\n\t\t\t};\n\n\t\t\tUtil.extend( message, data );\n\n\t\t\twindow.parent.postMessage( JSON.stringify( message ), '*' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Bind preview frame links.\n\t *\n\t * @param {string} [selector=a] - selector for anchors\n\t */\n\tfunction enablePreviewLinks( selector = 'a' ) {\n\n\t\tArray.from( dom.wrapper.querySelectorAll( selector ) ).forEach( element => {\n\t\t\tif( /^(http|www)/gi.test( element.getAttribute( 'href' ) ) ) {\n\t\t\t\telement.addEventListener( 'click', onPreviewLinkClicked, false );\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Unbind preview frame links.\n\t */\n\tfunction disablePreviewLinks( selector = 'a' ) {\n\n\t\tArray.from( dom.wrapper.querySelectorAll( selector ) ).forEach( element => {\n\t\t\tif( /^(http|www)/gi.test( element.getAttribute( 'href' ) ) ) {\n\t\t\t\telement.removeEventListener( 'click', onPreviewLinkClicked, false );\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Opens a preview window for the target URL.\n\t *\n\t * @param {string} url - url for preview iframe src\n\t */\n\tfunction showPreview( url ) {\n\n\t\tcloseOverlay();\n\n\t\tdom.overlay = document.createElement( 'div' );\n\t\tdom.overlay.classList.add( 'overlay' );\n\t\tdom.overlay.classList.add( 'overlay-preview' );\n\t\tdom.wrapper.appendChild( dom.overlay );\n\n\t\tdom.overlay.innerHTML =\n\t\t\t`
\n\t\t\t\t \n\t\t\t\t \n\t\t\t \n\t\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tUnable to load iframe. This is likely due to the site's policy (x-frame-options). \n\t\t\t\t \n\t\t\t
`;\n\n\t\tdom.overlay.querySelector( 'iframe' ).addEventListener( 'load', event => {\n\t\t\tdom.overlay.classList.add( 'loaded' );\n\t\t}, false );\n\n\t\tdom.overlay.querySelector( '.close' ).addEventListener( 'click', event => {\n\t\t\tcloseOverlay();\n\t\t\tevent.preventDefault();\n\t\t}, false );\n\n\t\tdom.overlay.querySelector( '.external' ).addEventListener( 'click', event => {\n\t\t\tcloseOverlay();\n\t\t}, false );\n\n\t}\n\n\t/**\n\t * Open or close help overlay window.\n\t *\n\t * @param {Boolean} [override] Flag which overrides the\n\t * toggle logic and forcibly sets the desired state. True means\n\t * help is open, false means it's closed.\n\t */\n\tfunction toggleHelp( override ){\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? showHelp() : closeOverlay();\n\t\t}\n\t\telse {\n\t\t\tif( dom.overlay ) {\n\t\t\t\tcloseOverlay();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tshowHelp();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Opens an overlay window with help material.\n\t */\n\tfunction showHelp() {\n\n\t\tif( config.help ) {\n\n\t\t\tcloseOverlay();\n\n\t\t\tdom.overlay = document.createElement( 'div' );\n\t\t\tdom.overlay.classList.add( 'overlay' );\n\t\t\tdom.overlay.classList.add( 'overlay-help' );\n\t\t\tdom.wrapper.appendChild( dom.overlay );\n\n\t\t\tlet html = '
Keyboard Shortcuts
';\n\n\t\t\tlet shortcuts = keyboard.getShortcuts(),\n\t\t\t\tbindings = keyboard.getBindings();\n\n\t\t\thtml += '
KEY ACTION ';\n\t\t\tfor( let key in shortcuts ) {\n\t\t\t\thtml += `${key} ${shortcuts[ key ]} `;\n\t\t\t}\n\n\t\t\t// Add custom key bindings that have associated descriptions\n\t\t\tfor( let binding in bindings ) {\n\t\t\t\tif( bindings[binding].key && bindings[binding].description ) {\n\t\t\t\t\thtml += `${bindings[binding].key} ${bindings[binding].description} `;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\thtml += '
';\n\n\t\t\tdom.overlay.innerHTML = `\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
${html}
\n\t\t\t\t
\n\t\t\t`;\n\n\t\t\tdom.overlay.querySelector( '.close' ).addEventListener( 'click', event => {\n\t\t\t\tcloseOverlay();\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Closes any currently open overlay.\n\t */\n\tfunction closeOverlay() {\n\n\t\tif( dom.overlay ) {\n\t\t\tdom.overlay.parentNode.removeChild( dom.overlay );\n\t\t\tdom.overlay = null;\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Applies JavaScript-controlled layout rules to the\n\t * presentation.\n\t */\n\tfunction layout() {\n\n\t\tif( dom.wrapper && !printView.isActive() ) {\n\n\t\t\tconst viewportWidth = dom.viewport.offsetWidth;\n\t\t\tconst viewportHeight = dom.viewport.offsetHeight;\n\n\t\t\tif( !config.disableLayout ) {\n\n\t\t\t\t// On some mobile devices '100vh' is taller than the visible\n\t\t\t\t// viewport which leads to part of the presentation being\n\t\t\t\t// cut off. To work around this we define our own '--vh' custom\n\t\t\t\t// property where 100x adds up to the correct height.\n\t\t\t\t//\n\t\t\t\t// https://css-tricks.com/the-trick-to-viewport-units-on-mobile/\n\t\t\t\tif( Device.isMobile && !config.embedded ) {\n\t\t\t\t\tdocument.documentElement.style.setProperty( '--vh', ( window.innerHeight * 0.01 ) + 'px' );\n\t\t\t\t}\n\n\t\t\t\tconst size = scrollView.isActive() ?\n\t\t\t\t\t\t\t getComputedSlideSize( viewportWidth, viewportHeight ) :\n\t\t\t\t\t\t\t getComputedSlideSize();\n\n\t\t\t\tconst oldScale = scale;\n\n\t\t\t\t// Layout the contents of the slides\n\t\t\t\tlayoutSlideContents( config.width, config.height );\n\n\t\t\t\tdom.slides.style.width = size.width + 'px';\n\t\t\t\tdom.slides.style.height = size.height + 'px';\n\n\t\t\t\t// Determine scale of content to fit within available space\n\t\t\t\tscale = Math.min( size.presentationWidth / size.width, size.presentationHeight / size.height );\n\n\t\t\t\t// Respect max/min scale settings\n\t\t\t\tscale = Math.max( scale, config.minScale );\n\t\t\t\tscale = Math.min( scale, config.maxScale );\n\n\t\t\t\t// Don't apply any scaling styles if scale is 1 or we're\n\t\t\t\t// in the scroll view\n\t\t\t\tif( scale === 1 || scrollView.isActive() ) {\n\t\t\t\t\tdom.slides.style.zoom = '';\n\t\t\t\t\tdom.slides.style.left = '';\n\t\t\t\t\tdom.slides.style.top = '';\n\t\t\t\t\tdom.slides.style.bottom = '';\n\t\t\t\t\tdom.slides.style.right = '';\n\t\t\t\t\ttransformSlides( { layout: '' } );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdom.slides.style.zoom = '';\n\t\t\t\t\tdom.slides.style.left = '50%';\n\t\t\t\t\tdom.slides.style.top = '50%';\n\t\t\t\t\tdom.slides.style.bottom = 'auto';\n\t\t\t\t\tdom.slides.style.right = 'auto';\n\t\t\t\t\ttransformSlides( { layout: 'translate(-50%, -50%) scale('+ scale +')' } );\n\t\t\t\t}\n\n\t\t\t\t// Select all slides, vertical and horizontal\n\t\t\t\tconst slides = Array.from( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) );\n\n\t\t\t\tfor( let i = 0, len = slides.length; i < len; i++ ) {\n\t\t\t\t\tconst slide = slides[ i ];\n\n\t\t\t\t\t// Don't bother updating invisible slides\n\t\t\t\t\tif( slide.style.display === 'none' ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif( ( config.center || slide.classList.contains( 'center' ) ) ) {\n\t\t\t\t\t\t// Vertical stacks are not centred since their section\n\t\t\t\t\t\t// children will be\n\t\t\t\t\t\tif( slide.classList.contains( 'stack' ) ) {\n\t\t\t\t\t\t\tslide.style.top = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tslide.style.top = Math.max( ( size.height - slide.scrollHeight ) / 2, 0 ) + 'px';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tslide.style.top = '';\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif( oldScale !== scale ) {\n\t\t\t\t\tdispatchEvent({\n\t\t\t\t\t\ttype: 'resize',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\toldScale,\n\t\t\t\t\t\t\tscale,\n\t\t\t\t\t\t\tsize\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcheckResponsiveScrollView();\n\n\t\t\tdom.viewport.style.setProperty( '--slide-scale', scale );\n\t\t\tdom.viewport.style.setProperty( '--viewport-width', viewportWidth + 'px' );\n\t\t\tdom.viewport.style.setProperty( '--viewport-height', viewportHeight + 'px' );\n\n\t\t\tscrollView.layout();\n\n\t\t\tprogress.update();\n\t\t\tbackgrounds.updateParallax();\n\n\t\t\tif( overview.isActive() ) {\n\t\t\t\toverview.update();\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Applies layout logic to the contents of all slides in\n\t * the presentation.\n\t *\n\t * @param {string|number} width\n\t * @param {string|number} height\n\t */\n\tfunction layoutSlideContents( width, height ) {\n\t\t// Handle sizing of elements with the 'r-stretch' class\n\t\tUtil.queryAll( dom.slides, 'section > .stretch, section > .r-stretch' ).forEach( element => {\n\n\t\t\t// Determine how much vertical space we can use\n\t\t\tlet remainingHeight = Util.getRemainingHeight( element, height );\n\n\t\t\t// Consider the aspect ratio of media elements\n\t\t\tif( /(img|video)/gi.test( element.nodeName ) ) {\n\t\t\t\tconst nw = element.naturalWidth || element.videoWidth,\n\t\t\t\t\t nh = element.naturalHeight || element.videoHeight;\n\n\t\t\t\tconst es = Math.min( width / nw, remainingHeight / nh );\n\n\t\t\t\telement.style.width = ( nw * es ) + 'px';\n\t\t\t\telement.style.height = ( nh * es ) + 'px';\n\n\t\t\t}\n\t\t\telse {\n\t\t\t\telement.style.width = width + 'px';\n\t\t\t\telement.style.height = remainingHeight + 'px';\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Responsively activates the scroll mode when we reach the configured\n\t * activation width.\n\t */\n\tfunction checkResponsiveScrollView() {\n\n\t\t// Only proceed if...\n\t\t// 1. The DOM is ready\n\t\t// 2. Layouts aren't disabled via config\n\t\t// 3. We're not currently printing\n\t\t// 4. There is a scrollActivationWidth set\n\t\t// 5. The deck isn't configured to always use the scroll view\n\t\tif(\n\t\t\tdom.wrapper &&\n\t\t\t!config.disableLayout &&\n\t\t\t!printView.isActive() &&\n\t\t\ttypeof config.scrollActivationWidth === 'number' &&\n\t\t\tconfig.view !== 'scroll'\n\t\t) {\n\t\t\tconst size = getComputedSlideSize();\n\n\t\t\tif( size.presentationWidth > 0 && size.presentationWidth <= config.scrollActivationWidth ) {\n\t\t\t\tif( !scrollView.isActive() ) {\n\t\t\t\t\tbackgrounds.create();\n\t\t\t\t\tscrollView.activate()\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif( scrollView.isActive() ) scrollView.deactivate();\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Calculates the computed pixel size of our slides. These\n\t * values are based on the width and height configuration\n\t * options.\n\t *\n\t * @param {number} [presentationWidth=dom.wrapper.offsetWidth]\n\t * @param {number} [presentationHeight=dom.wrapper.offsetHeight]\n\t */\n\tfunction getComputedSlideSize( presentationWidth, presentationHeight ) {\n\n\t\tlet width = config.width;\n\t\tlet height = config.height;\n\n\t\tif( config.disableLayout ) {\n\t\t\twidth = dom.slides.offsetWidth;\n\t\t\theight = dom.slides.offsetHeight;\n\t\t}\n\n\t\tconst size = {\n\t\t\t// Slide size\n\t\t\twidth: width,\n\t\t\theight: height,\n\n\t\t\t// Presentation size\n\t\t\tpresentationWidth: presentationWidth || dom.wrapper.offsetWidth,\n\t\t\tpresentationHeight: presentationHeight || dom.wrapper.offsetHeight\n\t\t};\n\n\t\t// Reduce available space by margin\n\t\tsize.presentationWidth -= ( size.presentationWidth * config.margin );\n\t\tsize.presentationHeight -= ( size.presentationHeight * config.margin );\n\n\t\t// Slide width may be a percentage of available width\n\t\tif( typeof size.width === 'string' && /%$/.test( size.width ) ) {\n\t\t\tsize.width = parseInt( size.width, 10 ) / 100 * size.presentationWidth;\n\t\t}\n\n\t\t// Slide height may be a percentage of available height\n\t\tif( typeof size.height === 'string' && /%$/.test( size.height ) ) {\n\t\t\tsize.height = parseInt( size.height, 10 ) / 100 * size.presentationHeight;\n\t\t}\n\n\t\treturn size;\n\n\t}\n\n\t/**\n\t * Stores the vertical index of a stack so that the same\n\t * vertical slide can be selected when navigating to and\n\t * from the stack.\n\t *\n\t * @param {HTMLElement} stack The vertical stack element\n\t * @param {string|number} [v=0] Index to memorize\n\t */\n\tfunction setPreviousVerticalIndex( stack, v ) {\n\n\t\tif( typeof stack === 'object' && typeof stack.setAttribute === 'function' ) {\n\t\t\tstack.setAttribute( 'data-previous-indexv', v || 0 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Retrieves the vertical index which was stored using\n\t * #setPreviousVerticalIndex() or 0 if no previous index\n\t * exists.\n\t *\n\t * @param {HTMLElement} stack The vertical stack element\n\t */\n\tfunction getPreviousVerticalIndex( stack ) {\n\n\t\tif( typeof stack === 'object' && typeof stack.setAttribute === 'function' && stack.classList.contains( 'stack' ) ) {\n\t\t\t// Prefer manually defined start-indexv\n\t\t\tconst attributeName = stack.hasAttribute( 'data-start-indexv' ) ? 'data-start-indexv' : 'data-previous-indexv';\n\n\t\t\treturn parseInt( stack.getAttribute( attributeName ) || 0, 10 );\n\t\t}\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Checks if the current or specified slide is vertical\n\t * (nested within another slide).\n\t *\n\t * @param {HTMLElement} [slide=currentSlide] The slide to check\n\t * orientation of\n\t * @return {Boolean}\n\t */\n\tfunction isVerticalSlide( slide = currentSlide ) {\n\n\t\treturn slide && slide.parentNode && !!slide.parentNode.nodeName.match( /section/i );\n\n\t}\n\n\t/**\n\t * Checks if the current or specified slide is a stack containing\n\t * vertical slides.\n\t *\n\t * @param {HTMLElement} [slide=currentSlide]\n\t * @return {Boolean}\n\t */\n\tfunction isVerticalStack( slide = currentSlide ) {\n\n\t\treturn slide.classList.contains( '.stack' ) || slide.querySelector( 'section' ) !== null;\n\n\t}\n\n\t/**\n\t * Returns true if we're on the last slide in the current\n\t * vertical stack.\n\t */\n\tfunction isLastVerticalSlide() {\n\n\t\tif( currentSlide && isVerticalSlide( currentSlide ) ) {\n\t\t\t// Does this slide have a next sibling?\n\t\t\tif( currentSlide.nextElementSibling ) return false;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Returns true if we're currently on the first slide in\n\t * the presentation.\n\t */\n\tfunction isFirstSlide() {\n\n\t\treturn indexh === 0 && indexv === 0;\n\n\t}\n\n\t/**\n\t * Returns true if we're currently on the last slide in\n\t * the presenation. If the last slide is a stack, we only\n\t * consider this the last slide if it's at the end of the\n\t * stack.\n\t */\n\tfunction isLastSlide() {\n\n\t\tif( currentSlide ) {\n\t\t\t// Does this slide have a next sibling?\n\t\t\tif( currentSlide.nextElementSibling ) return false;\n\n\t\t\t// If it's vertical, does its parent have a next sibling?\n\t\t\tif( isVerticalSlide( currentSlide ) && currentSlide.parentNode.nextElementSibling ) return false;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Enters the paused mode which fades everything on screen to\n\t * black.\n\t */\n\tfunction pause() {\n\n\t\tif( config.pause ) {\n\t\t\tconst wasPaused = dom.wrapper.classList.contains( 'paused' );\n\n\t\t\tcancelAutoSlide();\n\t\t\tdom.wrapper.classList.add( 'paused' );\n\n\t\t\tif( wasPaused === false ) {\n\t\t\t\tdispatchEvent({ type: 'paused' });\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Exits from the paused mode.\n\t */\n\tfunction resume() {\n\n\t\tconst wasPaused = dom.wrapper.classList.contains( 'paused' );\n\t\tdom.wrapper.classList.remove( 'paused' );\n\n\t\tcueAutoSlide();\n\n\t\tif( wasPaused ) {\n\t\t\tdispatchEvent({ type: 'resumed' });\n\t\t}\n\n\t}\n\n\t/**\n\t * Toggles the paused mode on and off.\n\t */\n\tfunction togglePause( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? pause() : resume();\n\t\t}\n\t\telse {\n\t\t\tisPaused() ? resume() : pause();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if we are currently in the paused mode.\n\t *\n\t * @return {Boolean}\n\t */\n\tfunction isPaused() {\n\n\t\treturn dom.wrapper.classList.contains( 'paused' );\n\n\t}\n\n\t/**\n\t * Toggles visibility of the jump-to-slide UI.\n\t */\n\tfunction toggleJumpToSlide( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? jumpToSlide.show() : jumpToSlide.hide();\n\t\t}\n\t\telse {\n\t\t\tjumpToSlide.isVisible() ? jumpToSlide.hide() : jumpToSlide.show();\n\t\t}\n\n\t}\n\n\t/**\n\t * Toggles the auto slide mode on and off.\n\t *\n\t * @param {Boolean} [override] Flag which sets the desired state.\n\t * True means autoplay starts, false means it stops.\n\t */\n\n\tfunction toggleAutoSlide( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? resumeAutoSlide() : pauseAutoSlide();\n\t\t}\n\n\t\telse {\n\t\t\tautoSlidePaused ? resumeAutoSlide() : pauseAutoSlide();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if the auto slide mode is currently on.\n\t *\n\t * @return {Boolean}\n\t */\n\tfunction isAutoSliding() {\n\n\t\treturn !!( autoSlide && !autoSlidePaused );\n\n\t}\n\n\t/**\n\t * Steps from the current point in the presentation to the\n\t * slide which matches the specified horizontal and vertical\n\t * indices.\n\t *\n\t * @param {number} [h=indexh] Horizontal index of the target slide\n\t * @param {number} [v=indexv] Vertical index of the target slide\n\t * @param {number} [f] Index of a fragment within the\n\t * target slide to activate\n\t * @param {number} [origin] Origin for use in multimaster environments\n\t */\n\tfunction slide( h, v, f, origin ) {\n\n\t\t// Dispatch an event before the slide\n\t\tconst slidechange = dispatchEvent({\n\t\t\ttype: 'beforeslidechange',\n\t\t\tdata: {\n\t\t\t\tindexh: h === undefined ? indexh : h,\n\t\t\t\tindexv: v === undefined ? indexv : v,\n\t\t\t\torigin\n\t\t\t}\n\t\t});\n\n\t\t// Abort if this slide change was prevented by an event listener\n\t\tif( slidechange.defaultPrevented ) return;\n\n\t\t// Remember where we were at before\n\t\tpreviousSlide = currentSlide;\n\n\t\t// Query all horizontal slides in the deck\n\t\tconst horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR );\n\n\t\t// If we're in scroll mode, we scroll the target slide into view\n\t\t// instead of running our standard slide transition\n\t\tif( scrollView.isActive() ) {\n\t\t\tconst scrollToSlide = scrollView.getSlideByIndices( h, v );\n\t\t\tif( scrollToSlide ) scrollView.scrollToSlide( scrollToSlide );\n\t\t\treturn;\n\t\t}\n\n\t\t// Abort if there are no slides\n\t\tif( horizontalSlides.length === 0 ) return;\n\n\t\t// If no vertical index is specified and the upcoming slide is a\n\t\t// stack, resume at its previous vertical index\n\t\tif( v === undefined && !overview.isActive() ) {\n\t\t\tv = getPreviousVerticalIndex( horizontalSlides[ h ] );\n\t\t}\n\n\t\t// If we were on a vertical stack, remember what vertical index\n\t\t// it was on so we can resume at the same position when returning\n\t\tif( previousSlide && previousSlide.parentNode && previousSlide.parentNode.classList.contains( 'stack' ) ) {\n\t\t\tsetPreviousVerticalIndex( previousSlide.parentNode, indexv );\n\t\t}\n\n\t\t// Remember the state before this slide\n\t\tconst stateBefore = state.concat();\n\n\t\t// Reset the state array\n\t\tstate.length = 0;\n\n\t\tlet indexhBefore = indexh || 0,\n\t\t\tindexvBefore = indexv || 0;\n\n\t\t// Activate and transition to the new slide\n\t\tindexh = updateSlides( HORIZONTAL_SLIDES_SELECTOR, h === undefined ? indexh : h );\n\t\tindexv = updateSlides( VERTICAL_SLIDES_SELECTOR, v === undefined ? indexv : v );\n\n\t\t// Dispatch an event if the slide changed\n\t\tlet slideChanged = ( indexh !== indexhBefore || indexv !== indexvBefore );\n\n\t\t// Ensure that the previous slide is never the same as the current\n\t\tif( !slideChanged ) previousSlide = null;\n\n\t\t// Find the current horizontal slide and any possible vertical slides\n\t\t// within it\n\t\tlet currentHorizontalSlide = horizontalSlides[ indexh ],\n\t\t\tcurrentVerticalSlides = currentHorizontalSlide.querySelectorAll( 'section' );\n\n\t\t// Indicate when we're on a vertical slide\n\t\trevealElement.classList.toggle( 'is-vertical-slide', currentVerticalSlides.length > 1 );\n\n\t\t// Store references to the previous and current slides\n\t\tcurrentSlide = currentVerticalSlides[ indexv ] || currentHorizontalSlide;\n\n\t\tlet autoAnimateTransition = false;\n\n\t\t// Detect if we're moving between two auto-animated slides\n\t\tif( slideChanged && previousSlide && currentSlide && !overview.isActive() ) {\n\t\t\ttransition = 'running';\n\n\t\t\tautoAnimateTransition = shouldAutoAnimateBetween( previousSlide, currentSlide, indexhBefore, indexvBefore );\n\n\t\t\t// If this is an auto-animated transition, we disable the\n\t\t\t// regular slide transition\n\t\t\t//\n\t\t\t// Note 20-03-2020:\n\t\t\t// This needs to happen before we update slide visibility,\n\t\t\t// otherwise transitions will still run in Safari.\n\t\t\tif( autoAnimateTransition ) {\n\t\t\t\tdom.slides.classList.add( 'disable-slide-transitions' )\n\t\t\t}\n\t\t}\n\n\t\t// Update the visibility of slides now that the indices have changed\n\t\tupdateSlidesVisibility();\n\n\t\tlayout();\n\n\t\t// Update the overview if it's currently active\n\t\tif( overview.isActive() ) {\n\t\t\toverview.update();\n\t\t}\n\n\t\t// Show fragment, if specified\n\t\tif( typeof f !== 'undefined' ) {\n\t\t\tfragments.goto( f );\n\t\t}\n\n\t\t// Solves an edge case where the previous slide maintains the\n\t\t// 'present' class when navigating between adjacent vertical\n\t\t// stacks\n\t\tif( previousSlide && previousSlide !== currentSlide ) {\n\t\t\tpreviousSlide.classList.remove( 'present' );\n\t\t\tpreviousSlide.setAttribute( 'aria-hidden', 'true' );\n\n\t\t\t// Reset all slides upon navigate to home\n\t\t\tif( isFirstSlide() ) {\n\t\t\t\t// Launch async task\n\t\t\t\tsetTimeout( () => {\n\t\t\t\t\tgetVerticalStacks().forEach( slide => {\n\t\t\t\t\t\tsetPreviousVerticalIndex( slide, 0 );\n\t\t\t\t\t} );\n\t\t\t\t}, 0 );\n\t\t\t}\n\t\t}\n\n\t\t// Apply the new state\n\t\tstateLoop: for( let i = 0, len = state.length; i < len; i++ ) {\n\t\t\t// Check if this state existed on the previous slide. If it\n\t\t\t// did, we will avoid adding it repeatedly\n\t\t\tfor( let j = 0; j < stateBefore.length; j++ ) {\n\t\t\t\tif( stateBefore[j] === state[i] ) {\n\t\t\t\t\tstateBefore.splice( j, 1 );\n\t\t\t\t\tcontinue stateLoop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdom.viewport.classList.add( state[i] );\n\n\t\t\t// Dispatch custom event matching the state's name\n\t\t\tdispatchEvent({ type: state[i] });\n\t\t}\n\n\t\t// Clean up the remains of the previous state\n\t\twhile( stateBefore.length ) {\n\t\t\tdom.viewport.classList.remove( stateBefore.pop() );\n\t\t}\n\n\t\tif( slideChanged ) {\n\t\t\tdispatchSlideChanged( origin );\n\t\t}\n\n\t\t// Handle embedded content\n\t\tif( slideChanged || !previousSlide ) {\n\t\t\tslideContent.stopEmbeddedContent( previousSlide );\n\t\t\tslideContent.startEmbeddedContent( currentSlide );\n\t\t}\n\n\t\t// Announce the current slide contents to screen readers\n\t\t// Use animation frame to prevent getComputedStyle in getStatusText\n\t\t// from triggering layout mid-frame\n\t\trequestAnimationFrame( () => {\n\t\t\tannounceStatus( getStatusText( currentSlide ) );\n\t\t});\n\n\t\tprogress.update();\n\t\tcontrols.update();\n\t\tnotes.update();\n\t\tbackgrounds.update();\n\t\tbackgrounds.updateParallax();\n\t\tslideNumber.update();\n\t\tfragments.update();\n\n\t\t// Update the URL hash\n\t\tlocation.writeURL();\n\n\t\tcueAutoSlide();\n\n\t\t// Auto-animation\n\t\tif( autoAnimateTransition ) {\n\n\t\t\tsetTimeout( () => {\n\t\t\t\tdom.slides.classList.remove( 'disable-slide-transitions' );\n\t\t\t}, 0 );\n\n\t\t\tif( config.autoAnimate ) {\n\t\t\t\t// Run the auto-animation between our slides\n\t\t\t\tautoAnimate.run( previousSlide, currentSlide );\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks whether or not an auto-animation should take place between\n\t * the two given slides.\n\t *\n\t * @param {HTMLElement} fromSlide\n\t * @param {HTMLElement} toSlide\n\t * @param {number} indexhBefore\n\t * @param {number} indexvBefore\n\t *\n\t * @returns {boolean}\n\t */\n\tfunction shouldAutoAnimateBetween( fromSlide, toSlide, indexhBefore, indexvBefore ) {\n\n\t\treturn \tfromSlide.hasAttribute( 'data-auto-animate' ) && toSlide.hasAttribute( 'data-auto-animate' ) &&\n\t\t\t\tfromSlide.getAttribute( 'data-auto-animate-id' ) === toSlide.getAttribute( 'data-auto-animate-id' ) &&\n\t\t\t\t!( ( indexh > indexhBefore || indexv > indexvBefore ) ? toSlide : fromSlide ).hasAttribute( 'data-auto-animate-restart' );\n\n\t}\n\n\t/**\n\t * Called anytime a new slide should be activated while in the scroll\n\t * view. The active slide is the page that occupies the most space in\n\t * the scrollable viewport.\n\t *\n\t * @param {number} pageIndex\n\t * @param {HTMLElement} slideElement\n\t */\n\tfunction setCurrentScrollPage( slideElement, h, v ) {\n\n\t\tlet indexhBefore = indexh || 0;\n\n\t\tindexh = h;\n\t\tindexv = v;\n\n\t\tconst slideChanged = currentSlide !== slideElement;\n\n\t\tpreviousSlide = currentSlide;\n\t\tcurrentSlide = slideElement;\n\n\t\tif( currentSlide && previousSlide ) {\n\t\t\tif( config.autoAnimate && shouldAutoAnimateBetween( previousSlide, currentSlide, indexhBefore, indexv ) ) {\n\t\t\t\t// Run the auto-animation between our slides\n\t\t\t\tautoAnimate.run( previousSlide, currentSlide );\n\t\t\t}\n\t\t}\n\n\t\t// Start or stop embedded content like videos and iframes\n\t\tif( slideChanged ) {\n\t\t\tif( previousSlide ) {\n\t\t\t\tslideContent.stopEmbeddedContent( previousSlide );\n\t\t\t\tslideContent.stopEmbeddedContent( previousSlide.slideBackgroundElement );\n\t\t\t}\n\n\t\t\tslideContent.startEmbeddedContent( currentSlide );\n\t\t\tslideContent.startEmbeddedContent( currentSlide.slideBackgroundElement );\n\t\t}\n\n\t\trequestAnimationFrame( () => {\n\t\t\tannounceStatus( getStatusText( currentSlide ) );\n\t\t});\n\n\t\tdispatchSlideChanged();\n\n\t}\n\n\t/**\n\t * Syncs the presentation with the current DOM. Useful\n\t * when new slides or control elements are added or when\n\t * the configuration has changed.\n\t */\n\tfunction sync() {\n\n\t\t// Subscribe to input\n\t\tremoveEventListeners();\n\t\taddEventListeners();\n\n\t\t// Force a layout to make sure the current config is accounted for\n\t\tlayout();\n\n\t\t// Reflect the current autoSlide value\n\t\tautoSlide = config.autoSlide;\n\n\t\t// Start auto-sliding if it's enabled\n\t\tcueAutoSlide();\n\n\t\t// Re-create all slide backgrounds\n\t\tbackgrounds.create();\n\n\t\t// Write the current hash to the URL\n\t\tlocation.writeURL();\n\n\t\tif( config.sortFragmentsOnSync === true ) {\n\t\t\tfragments.sortAll();\n\t\t}\n\n\t\tcontrols.update();\n\t\tprogress.update();\n\n\t\tupdateSlidesVisibility();\n\n\t\tnotes.update();\n\t\tnotes.updateVisibility();\n\t\tbackgrounds.update( true );\n\t\tslideNumber.update();\n\t\tslideContent.formatEmbeddedContent();\n\n\t\t// Start or stop embedded content depending on global config\n\t\tif( config.autoPlayMedia === false ) {\n\t\t\tslideContent.stopEmbeddedContent( currentSlide, { unloadIframes: false } );\n\t\t}\n\t\telse {\n\t\t\tslideContent.startEmbeddedContent( currentSlide );\n\t\t}\n\n\t\tif( overview.isActive() ) {\n\t\t\toverview.layout();\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates reveal.js to keep in sync with new slide attributes. For\n\t * example, if you add a new `data-background-image` you can call\n\t * this to have reveal.js render the new background image.\n\t *\n\t * Similar to #sync() but more efficient when you only need to\n\t * refresh a specific slide.\n\t *\n\t * @param {HTMLElement} slide\n\t */\n\tfunction syncSlide( slide = currentSlide ) {\n\n\t\tbackgrounds.sync( slide );\n\t\tfragments.sync( slide );\n\n\t\tslideContent.load( slide );\n\n\t\tbackgrounds.update();\n\t\tnotes.update();\n\n\t}\n\n\t/**\n\t * Resets all vertical slides so that only the first\n\t * is visible.\n\t */\n\tfunction resetVerticalSlides() {\n\n\t\tgetHorizontalSlides().forEach( horizontalSlide => {\n\n\t\t\tUtil.queryAll( horizontalSlide, 'section' ).forEach( ( verticalSlide, y ) => {\n\n\t\t\t\tif( y > 0 ) {\n\t\t\t\t\tverticalSlide.classList.remove( 'present' );\n\t\t\t\t\tverticalSlide.classList.remove( 'past' );\n\t\t\t\t\tverticalSlide.classList.add( 'future' );\n\t\t\t\t\tverticalSlide.setAttribute( 'aria-hidden', 'true' );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Randomly shuffles all slides in the deck.\n\t */\n\tfunction shuffle( slides = getHorizontalSlides() ) {\n\n\t\tslides.forEach( ( slide, i ) => {\n\n\t\t\t// Insert the slide next to a randomly picked sibling slide\n\t\t\t// slide. This may cause the slide to insert before itself,\n\t\t\t// but that's not an issue.\n\t\t\tlet beforeSlide = slides[ Math.floor( Math.random() * slides.length ) ];\n\t\t\tif( beforeSlide.parentNode === slide.parentNode ) {\n\t\t\t\tslide.parentNode.insertBefore( slide, beforeSlide );\n\t\t\t}\n\n\t\t\t// Randomize the order of vertical slides (if there are any)\n\t\t\tlet verticalSlides = slide.querySelectorAll( 'section' );\n\t\t\tif( verticalSlides.length ) {\n\t\t\t\tshuffle( verticalSlides );\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Updates one dimension of slides by showing the slide\n\t * with the specified index.\n\t *\n\t * @param {string} selector A CSS selector that will fetch\n\t * the group of slides we are working with\n\t * @param {number} index The index of the slide that should be\n\t * shown\n\t *\n\t * @return {number} The index of the slide that is now shown,\n\t * might differ from the passed in index if it was out of\n\t * bounds.\n\t */\n\tfunction updateSlides( selector, index ) {\n\n\t\t// Select all slides and convert the NodeList result to\n\t\t// an array\n\t\tlet slides = Util.queryAll( dom.wrapper, selector ),\n\t\t\tslidesLength = slides.length;\n\n\t\tlet printMode = scrollView.isActive() || printView.isActive();\n\t\tlet loopedForwards = false;\n\t\tlet loopedBackwards = false;\n\n\t\tif( slidesLength ) {\n\n\t\t\t// Should the index loop?\n\t\t\tif( config.loop ) {\n\t\t\t\tif( index >= slidesLength ) loopedForwards = true;\n\n\t\t\t\tindex %= slidesLength;\n\n\t\t\t\tif( index < 0 ) {\n\t\t\t\t\tindex = slidesLength + index;\n\t\t\t\t\tloopedBackwards = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Enforce max and minimum index bounds\n\t\t\tindex = Math.max( Math.min( index, slidesLength - 1 ), 0 );\n\n\t\t\tfor( let i = 0; i < slidesLength; i++ ) {\n\t\t\t\tlet element = slides[i];\n\n\t\t\t\tlet reverse = config.rtl && !isVerticalSlide( element );\n\n\t\t\t\t// Avoid .remove() with multiple args for IE11 support\n\t\t\t\telement.classList.remove( 'past' );\n\t\t\t\telement.classList.remove( 'present' );\n\t\t\t\telement.classList.remove( 'future' );\n\n\t\t\t\t// http://www.w3.org/html/wg/drafts/html/master/editing.html#the-hidden-attribute\n\t\t\t\telement.setAttribute( 'hidden', '' );\n\t\t\t\telement.setAttribute( 'aria-hidden', 'true' );\n\n\t\t\t\t// If this element contains vertical slides\n\t\t\t\tif( element.querySelector( 'section' ) ) {\n\t\t\t\t\telement.classList.add( 'stack' );\n\t\t\t\t}\n\n\t\t\t\t// If we're printing static slides, all slides are \"present\"\n\t\t\t\tif( printMode ) {\n\t\t\t\t\telement.classList.add( 'present' );\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif( i < index ) {\n\t\t\t\t\t// Any element previous to index is given the 'past' class\n\t\t\t\t\telement.classList.add( reverse ? 'future' : 'past' );\n\n\t\t\t\t\tif( config.fragments ) {\n\t\t\t\t\t\t// Show all fragments in prior slides\n\t\t\t\t\t\tshowFragmentsIn( element );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( i > index ) {\n\t\t\t\t\t// Any element subsequent to index is given the 'future' class\n\t\t\t\t\telement.classList.add( reverse ? 'past' : 'future' );\n\n\t\t\t\t\tif( config.fragments ) {\n\t\t\t\t\t\t// Hide all fragments in future slides\n\t\t\t\t\t\thideFragmentsIn( element );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Update the visibility of fragments when a presentation loops\n\t\t\t\t// in either direction\n\t\t\t\telse if( i === index && config.fragments ) {\n\t\t\t\t\tif( loopedForwards ) {\n\t\t\t\t\t\thideFragmentsIn( element );\n\t\t\t\t\t}\n\t\t\t\t\telse if( loopedBackwards ) {\n\t\t\t\t\t\tshowFragmentsIn( element );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet slide = slides[index];\n\t\t\tlet wasPresent = slide.classList.contains( 'present' );\n\n\t\t\t// Mark the current slide as present\n\t\t\tslide.classList.add( 'present' );\n\t\t\tslide.removeAttribute( 'hidden' );\n\t\t\tslide.removeAttribute( 'aria-hidden' );\n\n\t\t\tif( !wasPresent ) {\n\t\t\t\t// Dispatch an event indicating the slide is now visible\n\t\t\t\tdispatchEvent({\n\t\t\t\t\ttarget: slide,\n\t\t\t\t\ttype: 'visible',\n\t\t\t\t\tbubbles: false\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// If this slide has a state associated with it, add it\n\t\t\t// onto the current state of the deck\n\t\t\tlet slideState = slide.getAttribute( 'data-state' );\n\t\t\tif( slideState ) {\n\t\t\t\tstate = state.concat( slideState.split( ' ' ) );\n\t\t\t}\n\n\t\t}\n\t\telse {\n\t\t\t// Since there are no slides we can't be anywhere beyond the\n\t\t\t// zeroth index\n\t\t\tindex = 0;\n\t\t}\n\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Shows all fragment elements within the given container.\n\t */\n\tfunction showFragmentsIn( container ) {\n\n\t\tUtil.queryAll( container, '.fragment' ).forEach( fragment => {\n\t\t\tfragment.classList.add( 'visible' );\n\t\t\tfragment.classList.remove( 'current-fragment' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Hides all fragment elements within the given container.\n\t */\n\tfunction hideFragmentsIn( container ) {\n\n\t\tUtil.queryAll( container, '.fragment.visible' ).forEach( fragment => {\n\t\t\tfragment.classList.remove( 'visible', 'current-fragment' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Optimization method; hide all slides that are far away\n\t * from the present slide.\n\t */\n\tfunction updateSlidesVisibility() {\n\n\t\t// Select all slides and convert the NodeList result to\n\t\t// an array\n\t\tlet horizontalSlides = getHorizontalSlides(),\n\t\t\thorizontalSlidesLength = horizontalSlides.length,\n\t\t\tdistanceX,\n\t\t\tdistanceY;\n\n\t\tif( horizontalSlidesLength && typeof indexh !== 'undefined' ) {\n\n\t\t\t// The number of steps away from the present slide that will\n\t\t\t// be visible\n\t\t\tlet viewDistance = overview.isActive() ? 10 : config.viewDistance;\n\n\t\t\t// Shorten the view distance on devices that typically have\n\t\t\t// less resources\n\t\t\tif( Device.isMobile ) {\n\t\t\t\tviewDistance = overview.isActive() ? 6 : config.mobileViewDistance;\n\t\t\t}\n\n\t\t\t// All slides need to be visible when exporting to PDF\n\t\t\tif( printView.isActive() ) {\n\t\t\t\tviewDistance = Number.MAX_VALUE;\n\t\t\t}\n\n\t\t\tfor( let x = 0; x < horizontalSlidesLength; x++ ) {\n\t\t\t\tlet horizontalSlide = horizontalSlides[x];\n\n\t\t\t\tlet verticalSlides = Util.queryAll( horizontalSlide, 'section' ),\n\t\t\t\t\tverticalSlidesLength = verticalSlides.length;\n\n\t\t\t\t// Determine how far away this slide is from the present\n\t\t\t\tdistanceX = Math.abs( ( indexh || 0 ) - x ) || 0;\n\n\t\t\t\t// If the presentation is looped, distance should measure\n\t\t\t\t// 1 between the first and last slides\n\t\t\t\tif( config.loop ) {\n\t\t\t\t\tdistanceX = Math.abs( ( ( indexh || 0 ) - x ) % ( horizontalSlidesLength - viewDistance ) ) || 0;\n\t\t\t\t}\n\n\t\t\t\t// Show the horizontal slide if it's within the view distance\n\t\t\t\tif( distanceX < viewDistance ) {\n\t\t\t\t\tslideContent.load( horizontalSlide );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tslideContent.unload( horizontalSlide );\n\t\t\t\t}\n\n\t\t\t\tif( verticalSlidesLength ) {\n\n\t\t\t\t\tlet oy = getPreviousVerticalIndex( horizontalSlide );\n\n\t\t\t\t\tfor( let y = 0; y < verticalSlidesLength; y++ ) {\n\t\t\t\t\t\tlet verticalSlide = verticalSlides[y];\n\n\t\t\t\t\t\tdistanceY = x === ( indexh || 0 ) ? Math.abs( ( indexv || 0 ) - y ) : Math.abs( y - oy );\n\n\t\t\t\t\t\tif( distanceX + distanceY < viewDistance ) {\n\t\t\t\t\t\t\tslideContent.load( verticalSlide );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tslideContent.unload( verticalSlide );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flag if there are ANY vertical slides, anywhere in the deck\n\t\t\tif( hasVerticalSlides() ) {\n\t\t\t\tdom.wrapper.classList.add( 'has-vertical-slides' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdom.wrapper.classList.remove( 'has-vertical-slides' );\n\t\t\t}\n\n\t\t\t// Flag if there are ANY horizontal slides, anywhere in the deck\n\t\t\tif( hasHorizontalSlides() ) {\n\t\t\t\tdom.wrapper.classList.add( 'has-horizontal-slides' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdom.wrapper.classList.remove( 'has-horizontal-slides' );\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Determine what available routes there are for navigation.\n\t *\n\t * @return {{left: boolean, right: boolean, up: boolean, down: boolean}}\n\t */\n\tfunction availableRoutes({ includeFragments = false } = {}) {\n\n\t\tlet horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ),\n\t\t\tverticalSlides = dom.wrapper.querySelectorAll( VERTICAL_SLIDES_SELECTOR );\n\n\t\tlet routes = {\n\t\t\tleft: indexh > 0,\n\t\t\tright: indexh < horizontalSlides.length - 1,\n\t\t\tup: indexv > 0,\n\t\t\tdown: indexv < verticalSlides.length - 1\n\t\t};\n\n\t\t// Looped presentations can always be navigated as long as\n\t\t// there are slides available\n\t\tif( config.loop ) {\n\t\t\tif( horizontalSlides.length > 1 ) {\n\t\t\t\troutes.left = true;\n\t\t\t\troutes.right = true;\n\t\t\t}\n\n\t\t\tif( verticalSlides.length > 1 ) {\n\t\t\t\troutes.up = true;\n\t\t\t\troutes.down = true;\n\t\t\t}\n\t\t}\n\n\t\tif ( horizontalSlides.length > 1 && config.navigationMode === 'linear' ) {\n\t\t\troutes.right = routes.right || routes.down;\n\t\t\troutes.left = routes.left || routes.up;\n\t\t}\n\n\t\t// If includeFragments is set, a route will be considered\n\t\t// available if either a slid OR fragment is available in\n\t\t// the given direction\n\t\tif( includeFragments === true ) {\n\t\t\tlet fragmentRoutes = fragments.availableRoutes();\n\t\t\troutes.left = routes.left || fragmentRoutes.prev;\n\t\t\troutes.up = routes.up || fragmentRoutes.prev;\n\t\t\troutes.down = routes.down || fragmentRoutes.next;\n\t\t\troutes.right = routes.right || fragmentRoutes.next;\n\t\t}\n\n\t\t// Reverse horizontal controls for rtl\n\t\tif( config.rtl ) {\n\t\t\tlet left = routes.left;\n\t\t\troutes.left = routes.right;\n\t\t\troutes.right = left;\n\t\t}\n\n\t\treturn routes;\n\n\t}\n\n\t/**\n\t * Returns the number of past slides. This can be used as a global\n\t * flattened index for slides.\n\t *\n\t * @param {HTMLElement} [slide=currentSlide] The slide we're counting before\n\t *\n\t * @return {number} Past slide count\n\t */\n\tfunction getSlidePastCount( slide = currentSlide ) {\n\n\t\tlet horizontalSlides = getHorizontalSlides();\n\n\t\t// The number of past slides\n\t\tlet pastCount = 0;\n\n\t\t// Step through all slides and count the past ones\n\t\tmainLoop: for( let i = 0; i < horizontalSlides.length; i++ ) {\n\n\t\t\tlet horizontalSlide = horizontalSlides[i];\n\t\t\tlet verticalSlides = horizontalSlide.querySelectorAll( 'section' );\n\n\t\t\tfor( let j = 0; j < verticalSlides.length; j++ ) {\n\n\t\t\t\t// Stop as soon as we arrive at the present\n\t\t\t\tif( verticalSlides[j] === slide ) {\n\t\t\t\t\tbreak mainLoop;\n\t\t\t\t}\n\n\t\t\t\t// Don't count slides with the \"uncounted\" class\n\t\t\t\tif( verticalSlides[j].dataset.visibility !== 'uncounted' ) {\n\t\t\t\t\tpastCount++;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Stop as soon as we arrive at the present\n\t\t\tif( horizontalSlide === slide ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Don't count the wrapping section for vertical slides and\n\t\t\t// slides marked as uncounted\n\t\t\tif( horizontalSlide.classList.contains( 'stack' ) === false && horizontalSlide.dataset.visibility !== 'uncounted' ) {\n\t\t\t\tpastCount++;\n\t\t\t}\n\n\t\t}\n\n\t\treturn pastCount;\n\n\t}\n\n\t/**\n\t * Returns a value ranging from 0-1 that represents\n\t * how far into the presentation we have navigated.\n\t *\n\t * @return {number}\n\t */\n\tfunction getProgress() {\n\n\t\t// The number of past and total slides\n\t\tlet totalCount = getTotalSlides();\n\t\tlet pastCount = getSlidePastCount();\n\n\t\tif( currentSlide ) {\n\n\t\t\tlet allFragments = currentSlide.querySelectorAll( '.fragment' );\n\n\t\t\t// If there are fragments in the current slide those should be\n\t\t\t// accounted for in the progress.\n\t\t\tif( allFragments.length > 0 ) {\n\t\t\t\tlet visibleFragments = currentSlide.querySelectorAll( '.fragment.visible' );\n\n\t\t\t\t// This value represents how big a portion of the slide progress\n\t\t\t\t// that is made up by its fragments (0-1)\n\t\t\t\tlet fragmentWeight = 0.9;\n\n\t\t\t\t// Add fragment progress to the past slide count\n\t\t\t\tpastCount += ( visibleFragments.length / allFragments.length ) * fragmentWeight;\n\t\t\t}\n\n\t\t}\n\n\t\treturn Math.min( pastCount / ( totalCount - 1 ), 1 );\n\n\t}\n\n\t/**\n\t * Retrieves the h/v location and fragment of the current,\n\t * or specified, slide.\n\t *\n\t * @param {HTMLElement} [slide] If specified, the returned\n\t * index will be for this slide rather than the currently\n\t * active one\n\t *\n\t * @return {{h: number, v: number, f: number}}\n\t */\n\tfunction getIndices( slide ) {\n\n\t\t// By default, return the current indices\n\t\tlet h = indexh,\n\t\t\tv = indexv,\n\t\t\tf;\n\n\t\t// If a slide is specified, return the indices of that slide\n\t\tif( slide ) {\n\t\t\t// In scroll mode the original h/x index is stored on the slide\n\t\t\tif( scrollView.isActive() ) {\n\t\t\t\th = parseInt( slide.getAttribute( 'data-index-h' ), 10 );\n\n\t\t\t\tif( slide.getAttribute( 'data-index-v' ) ) {\n\t\t\t\t\tv = parseInt( slide.getAttribute( 'data-index-v' ), 10 );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet isVertical = isVerticalSlide( slide );\n\t\t\t\tlet slideh = isVertical ? slide.parentNode : slide;\n\n\t\t\t\t// Select all horizontal slides\n\t\t\t\tlet horizontalSlides = getHorizontalSlides();\n\n\t\t\t\t// Now that we know which the horizontal slide is, get its index\n\t\t\t\th = Math.max( horizontalSlides.indexOf( slideh ), 0 );\n\n\t\t\t\t// Assume we're not vertical\n\t\t\t\tv = undefined;\n\n\t\t\t\t// If this is a vertical slide, grab the vertical index\n\t\t\t\tif( isVertical ) {\n\t\t\t\t\tv = Math.max( Util.queryAll( slide.parentNode, 'section' ).indexOf( slide ), 0 );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif( !slide && currentSlide ) {\n\t\t\tlet hasFragments = currentSlide.querySelectorAll( '.fragment' ).length > 0;\n\t\t\tif( hasFragments ) {\n\t\t\t\tlet currentFragment = currentSlide.querySelector( '.current-fragment' );\n\t\t\t\tif( currentFragment && currentFragment.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\t\tf = parseInt( currentFragment.getAttribute( 'data-fragment-index' ), 10 );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tf = currentSlide.querySelectorAll( '.fragment.visible' ).length - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { h, v, f };\n\n\t}\n\n\t/**\n\t * Retrieves all slides in this presentation.\n\t */\n\tfunction getSlides() {\n\n\t\treturn Util.queryAll( dom.wrapper, SLIDES_SELECTOR + ':not(.stack):not([data-visibility=\"uncounted\"])' );\n\n\t}\n\n\t/**\n\t * Returns a list of all horizontal slides in the deck. Each\n\t * vertical stack is included as one horizontal slide in the\n\t * resulting array.\n\t */\n\tfunction getHorizontalSlides() {\n\n\t\treturn Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR );\n\n\t}\n\n\t/**\n\t * Returns all vertical slides that exist within this deck.\n\t */\n\tfunction getVerticalSlides() {\n\n\t\treturn Util.queryAll( dom.wrapper, '.slides>section>section' );\n\n\t}\n\n\t/**\n\t * Returns all vertical stacks (each stack can contain multiple slides).\n\t */\n\tfunction getVerticalStacks() {\n\n\t\treturn Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR + '.stack');\n\n\t}\n\n\t/**\n\t * Returns true if there are at least two horizontal slides.\n\t */\n\tfunction hasHorizontalSlides() {\n\n\t\treturn getHorizontalSlides().length > 1;\n\t}\n\n\t/**\n\t * Returns true if there are at least two vertical slides.\n\t */\n\tfunction hasVerticalSlides() {\n\n\t\treturn getVerticalSlides().length > 1;\n\n\t}\n\n\t/**\n\t * Returns an array of objects where each object represents the\n\t * attributes on its respective slide.\n\t */\n\tfunction getSlidesAttributes() {\n\n\t\treturn getSlides().map( slide => {\n\n\t\t\tlet attributes = {};\n\t\t\tfor( let i = 0; i < slide.attributes.length; i++ ) {\n\t\t\t\tlet attribute = slide.attributes[ i ];\n\t\t\t\tattributes[ attribute.name ] = attribute.value;\n\t\t\t}\n\t\t\treturn attributes;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Retrieves the total number of slides in this presentation.\n\t *\n\t * @return {number}\n\t */\n\tfunction getTotalSlides() {\n\n\t\treturn getSlides().length;\n\n\t}\n\n\t/**\n\t * Returns the slide element matching the specified index.\n\t *\n\t * @return {HTMLElement}\n\t */\n\tfunction getSlide( x, y ) {\n\n\t\tlet horizontalSlide = getHorizontalSlides()[ x ];\n\t\tlet verticalSlides = horizontalSlide && horizontalSlide.querySelectorAll( 'section' );\n\n\t\tif( verticalSlides && verticalSlides.length && typeof y === 'number' ) {\n\t\t\treturn verticalSlides ? verticalSlides[ y ] : undefined;\n\t\t}\n\n\t\treturn horizontalSlide;\n\n\t}\n\n\t/**\n\t * Returns the background element for the given slide.\n\t * All slides, even the ones with no background properties\n\t * defined, have a background element so as long as the\n\t * index is valid an element will be returned.\n\t *\n\t * @param {mixed} x Horizontal background index OR a slide\n\t * HTML element\n\t * @param {number} y Vertical background index\n\t * @return {(HTMLElement[]|*)}\n\t */\n\tfunction getSlideBackground( x, y ) {\n\n\t\tlet slide = typeof x === 'number' ? getSlide( x, y ) : x;\n\t\tif( slide ) {\n\t\t\treturn slide.slideBackgroundElement;\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\t/**\n\t * Retrieves the current state of the presentation as\n\t * an object. This state can then be restored at any\n\t * time.\n\t *\n\t * @return {{indexh: number, indexv: number, indexf: number, paused: boolean, overview: boolean}}\n\t */\n\tfunction getState() {\n\n\t\tlet indices = getIndices();\n\n\t\treturn {\n\t\t\tindexh: indices.h,\n\t\t\tindexv: indices.v,\n\t\t\tindexf: indices.f,\n\t\t\tpaused: isPaused(),\n\t\t\toverview: overview.isActive()\n\t\t};\n\n\t}\n\n\t/**\n\t * Restores the presentation to the given state.\n\t *\n\t * @param {object} state As generated by getState()\n\t * @see {@link getState} generates the parameter `state`\n\t */\n\tfunction setState( state ) {\n\n\t\tif( typeof state === 'object' ) {\n\t\t\tslide( Util.deserialize( state.indexh ), Util.deserialize( state.indexv ), Util.deserialize( state.indexf ) );\n\n\t\t\tlet pausedFlag = Util.deserialize( state.paused ),\n\t\t\t\toverviewFlag = Util.deserialize( state.overview );\n\n\t\t\tif( typeof pausedFlag === 'boolean' && pausedFlag !== isPaused() ) {\n\t\t\t\ttogglePause( pausedFlag );\n\t\t\t}\n\n\t\t\tif( typeof overviewFlag === 'boolean' && overviewFlag !== overview.isActive() ) {\n\t\t\t\toverview.toggle( overviewFlag );\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Cues a new automated slide if enabled in the config.\n\t */\n\tfunction cueAutoSlide() {\n\n\t\tcancelAutoSlide();\n\n\t\tif( currentSlide && config.autoSlide !== false ) {\n\n\t\t\tlet fragment = currentSlide.querySelector( '.current-fragment[data-autoslide]' );\n\n\t\t\tlet fragmentAutoSlide = fragment ? fragment.getAttribute( 'data-autoslide' ) : null;\n\t\t\tlet parentAutoSlide = currentSlide.parentNode ? currentSlide.parentNode.getAttribute( 'data-autoslide' ) : null;\n\t\t\tlet slideAutoSlide = currentSlide.getAttribute( 'data-autoslide' );\n\n\t\t\t// Pick value in the following priority order:\n\t\t\t// 1. Current fragment's data-autoslide\n\t\t\t// 2. Current slide's data-autoslide\n\t\t\t// 3. Parent slide's data-autoslide\n\t\t\t// 4. Global autoSlide setting\n\t\t\tif( fragmentAutoSlide ) {\n\t\t\t\tautoSlide = parseInt( fragmentAutoSlide, 10 );\n\t\t\t}\n\t\t\telse if( slideAutoSlide ) {\n\t\t\t\tautoSlide = parseInt( slideAutoSlide, 10 );\n\t\t\t}\n\t\t\telse if( parentAutoSlide ) {\n\t\t\t\tautoSlide = parseInt( parentAutoSlide, 10 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tautoSlide = config.autoSlide;\n\n\t\t\t\t// If there are media elements with data-autoplay,\n\t\t\t\t// automatically set the autoSlide duration to the\n\t\t\t\t// length of that media. Not applicable if the slide\n\t\t\t\t// is divided up into fragments.\n\t\t\t\t// playbackRate is accounted for in the duration.\n\t\t\t\tif( currentSlide.querySelectorAll( '.fragment' ).length === 0 ) {\n\t\t\t\t\tUtil.queryAll( currentSlide, 'video, audio' ).forEach( el => {\n\t\t\t\t\t\tif( el.hasAttribute( 'data-autoplay' ) ) {\n\t\t\t\t\t\t\tif( autoSlide && (el.duration * 1000 / el.playbackRate ) > autoSlide ) {\n\t\t\t\t\t\t\t\tautoSlide = ( el.duration * 1000 / el.playbackRate ) + 1000;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Cue the next auto-slide if:\n\t\t\t// - There is an autoSlide value\n\t\t\t// - Auto-sliding isn't paused by the user\n\t\t\t// - The presentation isn't paused\n\t\t\t// - The overview isn't active\n\t\t\t// - The presentation isn't over\n\t\t\tif( autoSlide && !autoSlidePaused && !isPaused() && !overview.isActive() && ( !isLastSlide() || fragments.availableRoutes().next || config.loop === true ) ) {\n\t\t\t\tautoSlideTimeout = setTimeout( () => {\n\t\t\t\t\tif( typeof config.autoSlideMethod === 'function' ) {\n\t\t\t\t\t\tconfig.autoSlideMethod()\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tnavigateNext();\n\t\t\t\t\t}\n\t\t\t\t\tcueAutoSlide();\n\t\t\t\t}, autoSlide );\n\t\t\t\tautoSlideStartTime = Date.now();\n\t\t\t}\n\n\t\t\tif( autoSlidePlayer ) {\n\t\t\t\tautoSlidePlayer.setPlaying( autoSlideTimeout !== -1 );\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Cancels any ongoing request to auto-slide.\n\t */\n\tfunction cancelAutoSlide() {\n\n\t\tclearTimeout( autoSlideTimeout );\n\t\tautoSlideTimeout = -1;\n\n\t}\n\n\tfunction pauseAutoSlide() {\n\n\t\tif( autoSlide && !autoSlidePaused ) {\n\t\t\tautoSlidePaused = true;\n\t\t\tdispatchEvent({ type: 'autoslidepaused' });\n\t\t\tclearTimeout( autoSlideTimeout );\n\n\t\t\tif( autoSlidePlayer ) {\n\t\t\t\tautoSlidePlayer.setPlaying( false );\n\t\t\t}\n\t\t}\n\n\t}\n\n\tfunction resumeAutoSlide() {\n\n\t\tif( autoSlide && autoSlidePaused ) {\n\t\t\tautoSlidePaused = false;\n\t\t\tdispatchEvent({ type: 'autoslideresumed' });\n\t\t\tcueAutoSlide();\n\t\t}\n\n\t}\n\n\tfunction navigateLeft({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedHorizontally = true;\n\n\t\t// Scroll view navigation is handled independently\n\t\tif( scrollView.isActive() ) return scrollView.prev();\n\n\t\t// Reverse for RTL\n\t\tif( config.rtl ) {\n\t\t\tif( ( overview.isActive() || skipFragments || fragments.next() === false ) && availableRoutes().left ) {\n\t\t\t\tslide( indexh + 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t\t}\n\t\t}\n\t\t// Normal navigation\n\t\telse if( ( overview.isActive() || skipFragments || fragments.prev() === false ) && availableRoutes().left ) {\n\t\t\tslide( indexh - 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t}\n\n\t}\n\n\tfunction navigateRight({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedHorizontally = true;\n\n\t\t// Scroll view navigation is handled independently\n\t\tif( scrollView.isActive() ) return scrollView.next();\n\n\t\t// Reverse for RTL\n\t\tif( config.rtl ) {\n\t\t\tif( ( overview.isActive() || skipFragments || fragments.prev() === false ) && availableRoutes().right ) {\n\t\t\t\tslide( indexh - 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t\t}\n\t\t}\n\t\t// Normal navigation\n\t\telse if( ( overview.isActive() || skipFragments || fragments.next() === false ) && availableRoutes().right ) {\n\t\t\tslide( indexh + 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t}\n\n\t}\n\n\tfunction navigateUp({skipFragments=false}={}) {\n\n\t\t// Scroll view navigation is handled independently\n\t\tif( scrollView.isActive() ) return scrollView.prev();\n\n\t\t// Prioritize hiding fragments\n\t\tif( ( overview.isActive() || skipFragments || fragments.prev() === false ) && availableRoutes().up ) {\n\t\t\tslide( indexh, indexv - 1 );\n\t\t}\n\n\t}\n\n\tfunction navigateDown({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedVertically = true;\n\n\t\t// Scroll view navigation is handled independently\n\t\tif( scrollView.isActive() ) return scrollView.next();\n\n\t\t// Prioritize revealing fragments\n\t\tif( ( overview.isActive() || skipFragments || fragments.next() === false ) && availableRoutes().down ) {\n\t\t\tslide( indexh, indexv + 1 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Navigates backwards, prioritized in the following order:\n\t * 1) Previous fragment\n\t * 2) Previous vertical slide\n\t * 3) Previous horizontal slide\n\t */\n\tfunction navigatePrev({skipFragments=false}={}) {\n\n\t\t// Scroll view navigation is handled independently\n\t\tif( scrollView.isActive() ) return scrollView.prev();\n\n\t\t// Prioritize revealing fragments\n\t\tif( skipFragments || fragments.prev() === false ) {\n\t\t\tif( availableRoutes().up ) {\n\t\t\t\tnavigateUp({skipFragments});\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Fetch the previous horizontal slide, if there is one\n\t\t\t\tlet previousSlide;\n\n\t\t\t\tif( config.rtl ) {\n\t\t\t\t\tpreviousSlide = Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR + '.future' ).pop();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tpreviousSlide = Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR + '.past' ).pop();\n\t\t\t\t}\n\n\t\t\t\t// When going backwards and arriving on a stack we start\n\t\t\t\t// at the bottom of the stack\n\t\t\t\tif( previousSlide && previousSlide.classList.contains( 'stack' ) ) {\n\t\t\t\t\tlet v = ( previousSlide.querySelectorAll( 'section' ).length - 1 ) || undefined;\n\t\t\t\t\tlet h = indexh - 1;\n\t\t\t\t\tslide( h, v );\n\t\t\t\t}\n\t\t\t\telse if( config.rtl ) {\n\t\t\t\t\tnavigateRight({skipFragments});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnavigateLeft({skipFragments});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * The reverse of #navigatePrev().\n\t */\n\tfunction navigateNext({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedHorizontally = true;\n\t\tnavigationHistory.hasNavigatedVertically = true;\n\n\t\t// Scroll view navigation is handled independently\n\t\tif( scrollView.isActive() ) return scrollView.next();\n\n\t\t// Prioritize revealing fragments\n\t\tif( skipFragments || fragments.next() === false ) {\n\n\t\t\tlet routes = availableRoutes();\n\n\t\t\t// When looping is enabled `routes.down` is always available\n\t\t\t// so we need a separate check for when we've reached the\n\t\t\t// end of a stack and should move horizontally\n\t\t\tif( routes.down && routes.right && config.loop && isLastVerticalSlide() ) {\n\t\t\t\troutes.down = false;\n\t\t\t}\n\n\t\t\tif( routes.down ) {\n\t\t\t\tnavigateDown({skipFragments});\n\t\t\t}\n\t\t\telse if( config.rtl ) {\n\t\t\t\tnavigateLeft({skipFragments});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnavigateRight({skipFragments});\n\t\t\t}\n\t\t}\n\n\t}\n\n\n\t// --------------------------------------------------------------------//\n\t// ----------------------------- EVENTS -------------------------------//\n\t// --------------------------------------------------------------------//\n\n\t/**\n\t * Called by all event handlers that are based on user\n\t * input.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onUserInput( event ) {\n\n\t\tif( config.autoSlideStoppable ) {\n\t\t\tpauseAutoSlide();\n\t\t}\n\n\t}\n\n\t/**\n\t* Listener for post message events posted to this window.\n\t*/\n\tfunction onPostMessage( event ) {\n\n\t\tlet data = event.data;\n\n\t\t// Make sure we're dealing with JSON\n\t\tif( typeof data === 'string' && data.charAt( 0 ) === '{' && data.charAt( data.length - 1 ) === '}' ) {\n\t\t\tdata = JSON.parse( data );\n\n\t\t\t// Check if the requested method can be found\n\t\t\tif( data.method && typeof Reveal[data.method] === 'function' ) {\n\n\t\t\t\tif( POST_MESSAGE_METHOD_BLACKLIST.test( data.method ) === false ) {\n\n\t\t\t\t\tconst result = Reveal[data.method].apply( Reveal, data.args );\n\n\t\t\t\t\t// Dispatch a postMessage event with the returned value from\n\t\t\t\t\t// our method invocation for getter functions\n\t\t\t\t\tdispatchPostMessage( 'callback', { method: data.method, result: result } );\n\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.warn( 'reveal.js: \"'+ data.method +'\" is is blacklisted from the postMessage API' );\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Event listener for transition end on the current slide.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onTransitionEnd( event ) {\n\n\t\tif( transition === 'running' && /section/gi.test( event.target.nodeName ) ) {\n\t\t\ttransition = 'idle';\n\t\t\tdispatchEvent({\n\t\t\t\ttype: 'slidetransitionend',\n\t\t\t\tdata: { indexh, indexv, previousSlide, currentSlide }\n\t\t\t});\n\t\t}\n\n\t}\n\n\t/**\n\t * A global listener for all click events inside of the\n\t * .slides container.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onSlidesClicked( event ) {\n\n\t\tconst anchor = Util.closest( event.target, 'a[href^=\"#\"]' );\n\n\t\t// If a hash link is clicked, we find the target slide\n\t\t// and navigate to it. We previously relied on 'hashchange'\n\t\t// for links like these but that prevented media with\n\t\t// audio tracks from playing in mobile browsers since it\n\t\t// wasn't considered a direct interaction with the document.\n\t\tif( anchor ) {\n\t\t\tconst hash = anchor.getAttribute( 'href' );\n\t\t\tconst indices = location.getIndicesFromHash( hash );\n\n\t\t\tif( indices ) {\n\t\t\t\tReveal.slide( indices.h, indices.v, indices.f );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the window level 'resize' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onWindowResize( event ) {\n\n\t\tlayout();\n\t}\n\n\t/**\n\t * Handle for the window level 'visibilitychange' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onPageVisibilityChange( event ) {\n\n\t\t// If, after clicking a link or similar and we're coming back,\n\t\t// focus the document.body to ensure we can use keyboard shortcuts\n\t\tif( document.hidden === false && document.activeElement !== document.body ) {\n\t\t\t// Not all elements support .blur() - SVGs among them.\n\t\t\tif( typeof document.activeElement.blur === 'function' ) {\n\t\t\t\tdocument.activeElement.blur();\n\t\t\t}\n\t\t\tdocument.body.focus();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the document level 'fullscreenchange' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onFullscreenChange( event ) {\n\n\t\tlet element = document.fullscreenElement || document.webkitFullscreenElement;\n\t\tif( element === dom.wrapper ) {\n\t\t\tevent.stopImmediatePropagation();\n\n\t\t\t// Timeout to avoid layout shift in Safari\n\t\t\tsetTimeout( () => {\n\t\t\t\tReveal.layout();\n\t\t\t\tReveal.focus.focus(); // focus.focus :'(\n\t\t\t}, 1 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Handles clicks on links that are set to preview in the\n\t * iframe overlay.\n\t *\n\t * @param {object} event\n\t */\n\tfunction onPreviewLinkClicked( event ) {\n\n\t\tif( event.currentTarget && event.currentTarget.hasAttribute( 'href' ) ) {\n\t\t\tlet url = event.currentTarget.getAttribute( 'href' );\n\t\t\tif( url ) {\n\t\t\t\tshowPreview( url );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Handles click on the auto-sliding controls element.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onAutoSlidePlayerClick( event ) {\n\n\t\t// Replay\n\t\tif( isLastSlide() && config.loop === false ) {\n\t\t\tslide( 0, 0 );\n\t\t\tresumeAutoSlide();\n\t\t}\n\t\t// Resume\n\t\telse if( autoSlidePaused ) {\n\t\t\tresumeAutoSlide();\n\t\t}\n\t\t// Pause\n\t\telse {\n\t\t\tpauseAutoSlide();\n\t\t}\n\n\t}\n\n\n\t// --------------------------------------------------------------------//\n\t// ------------------------------- API --------------------------------//\n\t// --------------------------------------------------------------------//\n\n\t// The public reveal.js API\n\tconst API = {\n\t\tVERSION,\n\n\t\tinitialize,\n\t\tconfigure,\n\t\tdestroy,\n\n\t\tsync,\n\t\tsyncSlide,\n\t\tsyncFragments: fragments.sync.bind( fragments ),\n\n\t\t// Navigation methods\n\t\tslide,\n\t\tleft: navigateLeft,\n\t\tright: navigateRight,\n\t\tup: navigateUp,\n\t\tdown: navigateDown,\n\t\tprev: navigatePrev,\n\t\tnext: navigateNext,\n\n\t\t// Navigation aliases\n\t\tnavigateLeft, navigateRight, navigateUp, navigateDown, navigatePrev, navigateNext,\n\n\t\t// Fragment methods\n\t\tnavigateFragment: fragments.goto.bind( fragments ),\n\t\tprevFragment: fragments.prev.bind( fragments ),\n\t\tnextFragment: fragments.next.bind( fragments ),\n\n\t\t// Event binding\n\t\ton,\n\t\toff,\n\n\t\t// Legacy event binding methods left in for backwards compatibility\n\t\taddEventListener: on,\n\t\tremoveEventListener: off,\n\n\t\t// Forces an update in slide layout\n\t\tlayout,\n\n\t\t// Randomizes the order of slides\n\t\tshuffle,\n\n\t\t// Returns an object with the available routes as booleans (left/right/top/bottom)\n\t\tavailableRoutes,\n\n\t\t// Returns an object with the available fragments as booleans (prev/next)\n\t\tavailableFragments: fragments.availableRoutes.bind( fragments ),\n\n\t\t// Toggles a help overlay with keyboard shortcuts\n\t\ttoggleHelp,\n\n\t\t// Toggles the overview mode on/off\n\t\ttoggleOverview: overview.toggle.bind( overview ),\n\n\t\t// Toggles the scroll view on/off\n\t\ttoggleScrollView: scrollView.toggle.bind( scrollView ),\n\n\t\t// Toggles the \"black screen\" mode on/off\n\t\ttogglePause,\n\n\t\t// Toggles the auto slide mode on/off\n\t\ttoggleAutoSlide,\n\n\t\t// Toggles visibility of the jump-to-slide UI\n\t\ttoggleJumpToSlide,\n\n\t\t// Slide navigation checks\n\t\tisFirstSlide,\n\t\tisLastSlide,\n\t\tisLastVerticalSlide,\n\t\tisVerticalSlide,\n\t\tisVerticalStack,\n\n\t\t// State checks\n\t\tisPaused,\n\t\tisAutoSliding,\n\t\tisSpeakerNotes: notes.isSpeakerNotesWindow.bind( notes ),\n\t\tisOverview: overview.isActive.bind( overview ),\n\t\tisFocused: focus.isFocused.bind( focus ),\n\n\t\tisScrollView: scrollView.isActive.bind( scrollView ),\n\t\tisPrintView: printView.isActive.bind( printView ),\n\n\t\t// Checks if reveal.js has been loaded and is ready for use\n\t\tisReady: () => ready,\n\n\t\t// Slide preloading\n\t\tloadSlide: slideContent.load.bind( slideContent ),\n\t\tunloadSlide: slideContent.unload.bind( slideContent ),\n\n\t\t// Start/stop all media inside of the current slide\n\t\tstartEmbeddedContent: () => slideContent.startEmbeddedContent( currentSlide ),\n\t\tstopEmbeddedContent: () => slideContent.stopEmbeddedContent( currentSlide, { unloadIframes: false } ),\n\n\t\t// Preview management\n\t\tshowPreview,\n\t\thidePreview: closeOverlay,\n\n\t\t// Adds or removes all internal event listeners\n\t\taddEventListeners,\n\t\tremoveEventListeners,\n\t\tdispatchEvent,\n\n\t\t// Facility for persisting and restoring the presentation state\n\t\tgetState,\n\t\tsetState,\n\n\t\t// Presentation progress on range of 0-1\n\t\tgetProgress,\n\n\t\t// Returns the indices of the current, or specified, slide\n\t\tgetIndices,\n\n\t\t// Returns an Array of key:value maps of the attributes of each\n\t\t// slide in the deck\n\t\tgetSlidesAttributes,\n\n\t\t// Returns the number of slides that we have passed\n\t\tgetSlidePastCount,\n\n\t\t// Returns the total number of slides\n\t\tgetTotalSlides,\n\n\t\t// Returns the slide element at the specified index\n\t\tgetSlide,\n\n\t\t// Returns the previous slide element, may be null\n\t\tgetPreviousSlide: () => previousSlide,\n\n\t\t// Returns the current slide element\n\t\tgetCurrentSlide: () => currentSlide,\n\n\t\t// Returns the slide background element at the specified index\n\t\tgetSlideBackground,\n\n\t\t// Returns the speaker notes string for a slide, or null\n\t\tgetSlideNotes: notes.getSlideNotes.bind( notes ),\n\n\t\t// Returns an Array of all slides\n\t\tgetSlides,\n\n\t\t// Returns an array with all horizontal/vertical slides in the deck\n\t\tgetHorizontalSlides,\n\t\tgetVerticalSlides,\n\n\t\t// Checks if the presentation contains two or more horizontal\n\t\t// and vertical slides\n\t\thasHorizontalSlides,\n\t\thasVerticalSlides,\n\n\t\t// Checks if the deck has navigated on either axis at least once\n\t\thasNavigatedHorizontally: () => navigationHistory.hasNavigatedHorizontally,\n\t\thasNavigatedVertically: () => navigationHistory.hasNavigatedVertically,\n\n\t\tshouldAutoAnimateBetween,\n\n\t\t// Adds/removes a custom key binding\n\t\taddKeyBinding: keyboard.addKeyBinding.bind( keyboard ),\n\t\tremoveKeyBinding: keyboard.removeKeyBinding.bind( keyboard ),\n\n\t\t// Programmatically triggers a keyboard event\n\t\ttriggerKey: keyboard.triggerKey.bind( keyboard ),\n\n\t\t// Registers a new shortcut to include in the help overlay\n\t\tregisterKeyboardShortcut: keyboard.registerKeyboardShortcut.bind( keyboard ),\n\n\t\tgetComputedSlideSize,\n\t\tsetCurrentScrollPage,\n\n\t\t// Returns the current scale of the presentation content\n\t\tgetScale: () => scale,\n\n\t\t// Returns the current configuration object\n\t\tgetConfig: () => config,\n\n\t\t// Helper method, retrieves query string as a key:value map\n\t\tgetQueryHash: Util.getQueryHash,\n\n\t\t// Returns the path to the current slide as represented in the URL\n\t\tgetSlidePath: location.getHash.bind( location ),\n\n\t\t// Returns reveal.js DOM elements\n\t\tgetRevealElement: () => revealElement,\n\t\tgetSlidesElement: () => dom.slides,\n\t\tgetViewportElement: () => dom.viewport,\n\t\tgetBackgroundsElement: () => backgrounds.element,\n\n\t\t// API for registering and retrieving plugins\n\t\tregisterPlugin: plugins.registerPlugin.bind( plugins ),\n\t\thasPlugin: plugins.hasPlugin.bind( plugins ),\n\t\tgetPlugin: plugins.getPlugin.bind( plugins ),\n\t\tgetPlugins: plugins.getRegisteredPlugins.bind( plugins )\n\n\t};\n\n\t// Our internal API which controllers have access to\n\tUtil.extend( Reveal, {\n\t\t...API,\n\n\t\t// Methods for announcing content to screen readers\n\t\tannounceStatus,\n\t\tgetStatusText,\n\n\t\t// Controllers\n\t\tfocus,\n\t\tscroll: scrollView,\n\t\tprogress,\n\t\tcontrols,\n\t\tlocation,\n\t\toverview,\n\t\tfragments,\n\t\tbackgrounds,\n\t\tslideContent,\n\t\tslideNumber,\n\n\t\tonUserInput,\n\t\tcloseOverlay,\n\t\tupdateSlidesVisibility,\n\t\tlayoutSlideContents,\n\t\ttransformSlides,\n\t\tcueAutoSlide,\n\t\tcancelAutoSlide\n\t} );\n\n\treturn API;\n\n};\n","import Deck, { VERSION } from './reveal.js'\n\n/**\n * Expose the Reveal class to the window. To create a\n * new instance:\n * let deck = new Reveal( document.querySelector( '.reveal' ), {\n * controls: false\n * } );\n * deck.initialize().then(() => {\n * // reveal.js is ready\n * });\n */\nlet Reveal = Deck;\n\n\n/**\n * The below is a thin shell that mimics the pre 4.0\n * reveal.js API and ensures backwards compatibility.\n * This API only allows for one Reveal instance per\n * page, whereas the new API above lets you run many\n * presentations on the same page.\n *\n * Reveal.initialize( { controls: false } ).then(() => {\n * // reveal.js is ready\n * });\n */\n\nlet enqueuedAPICalls = [];\n\nReveal.initialize = options => {\n\n\t// Create our singleton reveal.js instance\n\tObject.assign( Reveal, new Deck( document.querySelector( '.reveal' ), options ) );\n\n\t// Invoke any enqueued API calls\n\tenqueuedAPICalls.map( method => method( Reveal ) );\n\n\treturn Reveal.initialize();\n\n}\n\n/**\n * The pre 4.0 API let you add event listener before\n * initializing. We maintain the same behavior by\n * queuing up premature API calls and invoking all\n * of them when Reveal.initialize is called.\n */\n[ 'configure', 'on', 'off', 'addEventListener', 'removeEventListener', 'registerPlugin' ].forEach( method => {\n\tReveal[method] = ( ...args ) => {\n\t\tenqueuedAPICalls.push( deck => deck[method].call( null, ...args ) );\n\t}\n} );\n\nReveal.isReady = () => false;\n\nReveal.VERSION = VERSION;\n\nexport default Reveal;"],"names":["extend","a","b","i","queryAll","el","selector","Array","from","querySelectorAll","toggleClass","className","value","classList","add","remove","deserialize","match","parseFloat","transformElement","element","transform","style","matches","target","matchesMethod","matchesSelector","msMatchesSelector","call","closest","parentNode","enterFullscreen","requestMethod","document","documentElement","requestFullscreen","webkitRequestFullscreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen","apply","createStyleSheet","tag","createElement","type","length","styleSheet","cssText","appendChild","createTextNode","head","getQueryHash","query","location","search","replace","split","shift","pop","unescape","fileExtensionToMimeMap","mp4","m4a","ogv","mpeg","webm","UA","navigator","userAgent","isMobile","test","platform","maxTouchPoints","isAndroid","e","t","slice","o","l","u","cancelAnimationFrame","requestAnimationFrame","s","filter","dirty","active","c","forEach","styleComputed","m","y","v","p","d","f","S","availableWidth","clientWidth","currentWidth","scrollWidth","previousFontSize","currentFontSize","Math","min","max","minSize","maxSize","whiteSpace","multiLine","n","getComputedStyle","getPropertyValue","display","preStyleTestCompleted","fontSize","dispatchEvent","CustomEvent","detail","oldValue","newValue","scaleFactor","h","w","observeMutations","observer","disconnect","originalStyle","z","F","MutationObserver","observe","g","subtree","childList","characterData","W","E","clearTimeout","setTimeout","x","observeWindowDelay","M","Object","defineProperty","set","concat","observeWindow","fitAll","C","assign","map","newbie","push","fit","unfreeze","freeze","unsubscribe","arguments","window","SlideContent","constructor","Reveal","this","startEmbeddedIframe","bind","shouldPreload","isScrollView","preload","getConfig","preloadIframes","hasAttribute","load","slide","options","tagName","setAttribute","getAttribute","removeAttribute","media","sources","source","background","slideBackgroundElement","backgroundContent","slideBackgroundContentElement","backgroundIframe","backgroundImage","backgroundVideo","backgroundVideoLoop","backgroundVideoMuted","trim","encodeRFC3986URI","url","encodeURI","charCodeAt","toString","toUpperCase","decodeURI","join","isSpeakerNotes","video","muted","sourceElement","getMimeTypeFromFile","filename","excludeIframes","iframe","width","height","maxHeight","maxWidth","backgroundIframeElement","querySelector","layout","scopeElement","fitty","unload","getSlideBackground","formatEmbeddedContent","_appendParamToIframeSource","sourceAttribute","sourceURL","param","getSlidesElement","src","indexOf","startEmbeddedContent","autoplay","autoPlayMedia","play","readyState","startEmbeddedMedia","promise","catch","controls","addEventListener","removeEventListener","event","isAttachedToDOM","isVisible","paused","ended","currentTime","contentWindow","postMessage","stopEmbeddedContent","unloadIframes","pause","SLIDES_SELECTOR","HORIZONTAL_SLIDES_SELECTOR","VERTICAL_SLIDES_SELECTOR","POST_MESSAGE_METHOD_BLACKLIST","FRAGMENT_STYLE_REGEX","SlideNumber","render","getRevealElement","configure","config","oldConfig","slideNumberDisplay","slideNumber","isPrintView","showSlideNumber","update","innerHTML","getSlideNumber","getCurrentSlide","format","getHorizontalSlides","horizontalOffset","dataset","visibility","getSlidePastCount","getTotalSlides","indices","getIndices","sep","isVerticalSlide","getHash","formatNumber","delimiter","isNaN","destroy","JumpToSlide","onInput","onBlur","onKeyDown","jumpInput","placeholder","show","indicesOnShow","focus","hide","jumpTimeout","jump","slideNumberFormat","getSlides","parseInt","getIndicesFromHash","oneBasedIndex","jumpAfter","delay","regex","RegExp","find","innerText","cancel","confirm","keyCode","stopImmediatePropagation","colorToRgb","color","hex3","r","charAt","hex6","rgb","rgba","Backgrounds","create","slideh","backgroundStack","createBackground","slidev","parallaxBackgroundImage","backgroundSize","parallaxBackgroundSize","backgroundRepeat","parallaxBackgroundRepeat","backgroundPosition","parallaxBackgroundPosition","container","contentElement","sync","data","backgroundColor","backgroundGradient","backgroundTransition","backgroundOpacity","dataPreload","opacity","contrastClass","getContrastClass","contrastColor","computedBackgroundStyle","bubbleSlideContrastClassToElement","classToBubble","contains","includeAll","currentSlide","currentBackground","horizontalPast","rtl","horizontalFuture","childNodes","backgroundh","backgroundv","indexv","previousBackground","previousBackgroundHash","currentBackgroundHash","currentVideo","previousVideo","currentVideoParent","slideContent","currentBackgroundContent","backgroundImageURL","updateParallax","backgroundWidth","backgroundHeight","horizontalSlides","verticalSlides","getVerticalSlides","horizontalOffsetMultiplier","slideWidth","offsetWidth","horizontalSlideCount","parallaxBackgroundHorizontal","verticalOffsetMultiplier","verticalOffset","slideHeight","offsetHeight","verticalSlideCount","parallaxBackgroundVertical","autoAnimateCounter","AutoAnimate","run","fromSlide","toSlide","reset","allSlides","toSlideIndex","fromSlideIndex","autoAnimateStyleSheet","animationOptions","getAutoAnimateOptions","autoAnimate","slideDirection","fromSlideIsHidden","css","getAutoAnimatableElements","elements","autoAnimateElements","to","autoAnimateUnmatched","defaultUnmatchedDuration","duration","defaultUnmatchedDelay","getUnmatchedAutoAnimateElements","unmatchedElement","unmatchedOptions","id","autoAnimateTarget","fontWeight","sheet","removeChild","elementOptions","easing","fromProps","getAutoAnimatableProperties","toProps","styles","translate","scale","presentationScale","getScale","delta","scaleX","scaleY","round","propertyName","toValue","fromValue","explicitValue","toStyleProperties","keys","inheritedOptions","autoAnimateEasing","autoAnimateDuration","autoAnimatedParent","autoAnimateDelay","direction","properties","bounds","measure","center","getBoundingClientRect","offsetLeft","offsetTop","computedStyles","autoAnimateStyles","property","pairs","autoAnimateMatcher","getAutoAnimatePairs","reserved","pair","index","textNodes","findAutoAnimateMatches","node","nodeName","textContent","getLocalBoundingBox","fromScope","toScope","serializer","fromMatches","toMatches","key","fromElement","primaryIndex","secondaryIndex","rootElement","children","reduce","result","containsAnimatedElements","ScrollView","activatedCallbacks","onScroll","activate","stateBeforeActivation","getState","slideHTMLBeforeActivation","horizontalBackgrounds","presentationBackground","viewportElement","viewportStyles","pageElements","pageContainer","previousSlide","createPageElement","isVertical","contentContainer","shouldAutoAnimateBetween","page","slideBackground","pageBackground","stickyContainer","insertBefore","horizontalSlide","isVerticalStack","verticalSlide","createProgressBar","stack","setState","callback","restoreScrollPosition","passive","deactivate","stateBeforeDeactivation","removeProgressBar","toggle","override","isActive","progressBar","progressBarInner","progressBarPlayhead","firstChild","handleDocumentMouseMove","progress","clientY","top","progressBarHeight","scrollTop","scrollHeight","handleDocumentMouseUp","draggingProgressBar","showProgressBar","preventDefault","syncPages","syncScrollPosition","slideSize","getComputedSlideSize","innerWidth","innerHeight","useCompactLayout","scrollLayout","viewportHeight","compactHeight","pageHeight","scrollTriggerHeight","setProperty","scrollSnapType","scrollSnap","slideTriggers","pages","pageElement","createPage","slideElement","stickyElement","backgroundElement","autoAnimatePages","activatePage","deactivatePage","createFragmentTriggersForPage","createAutoAnimateTriggersForPage","totalScrollTriggerCount","scrollTriggers","total","triggerStick","scrollSnapAlign","marginTop","removeProperty","scrollPadding","totalHeight","position","setTriggerRanges","scrollProgress","syncProgressBar","trigger","rangeStart","range","scrollTriggerSegmentSize","scrollTrigger","fragmentGroups","fragments","sort","autoAnimateElement","autoAnimatePage","indexh","viewportHeightFactor","playheadHeight","progressBarScrollableHeight","progressSegmentHeight","spacing","slideTrigger","progressBarSlide","scrollTriggerElements","triggerElement","scrollProgressMid","activePage","loaded","activateTrigger","deactivateTrigger","setProgressBarValue","getAllPages","hideProgressBarTimeout","prev","next","scrollToSlide","getScrollTriggerBySlide","storeScrollPosition","storeScrollPositionTimeout","sessionStorage","setItem","origin","pathname","scrollPosition","getItem","scrollOrigin","setCurrentScrollPage","backgrounds","sibling","getSlideByIndices","flatMap","getViewportElement","PrintView","slides","injectPageNumbers","pageWidth","floor","margin","Promise","body","layoutSlideContents","slideScrollHeights","left","contentHeight","numberOfPages","ceil","pdfMaxPagesPerSlide","pdfPageHeightOffset","showNotes","notes","getSlideNotes","notesSpacing","notesLayout","notesElement","bottom","numberElement","pdfSeparateFragments","previousFragmentStep","fragment","clonedPage","cloneNode","fragmentNumber","view","Fragments","disable","enable","availableRoutes","hiddenFragments","grouped","ordered","unordered","sorted","group","sortAll","changedFragments","shown","hidden","maxIndex","currentFragment","wasVisible","announceStatus","getStatusText","bubbles","goto","offset","lastVisibleFragment","fragmentInURL","writeURL","Overview","onSlideClicked","overview","cancelAutoSlide","getBackgroundsElement","overviewSlideWidth","overviewSlideHeight","updateSlidesVisibility","hslide","vslide","hbackground","vbackground","vmin","transformSlides","cueAutoSlide","Keyboard","shortcuts","bindings","onDocumentKeyDown","navigationMode","unbind","addKeyBinding","binding","description","removeKeyBinding","triggerKey","registerKeyboardShortcut","getShortcuts","getBindings","keyboardCondition","isFocused","autoSlideWasPaused","isAutoSliding","onUserInput","activeElementIsCE","activeElement","isContentEditable","activeElementIsInput","activeElementIsNotes","unusedModifier","shiftKey","altKey","ctrlKey","metaKey","resumeKeyCodes","keyboard","isPaused","useLinearMode","hasHorizontalSlides","hasVerticalSlides","triggered","action","skipFragments","right","undefined","up","Number","MAX_VALUE","down","includes","togglePause","embedded","autoSlideStoppable","toggleAutoSlide","jumpToSlide","toggleJumpToSlide","toggleHelp","closeOverlay","Location","MAX_REPLACE_STATE_FREQUENCY","writeURLTimeout","replaceStateTimestamp","onWindowHashChange","hash","name","bits","hashIndexBase","hashOneBasedIndex","getElementById","decodeURIComponent","error","readURL","currentIndices","newIndices","history","debouncedReplaceState","replaceState","Date","now","replaceStateTimeout","encodeURIComponent","Controls","onNavigateLeftClicked","onNavigateRightClicked","onNavigateUpClicked","onNavigateDownClicked","onNavigatePrevClicked","onNavigateNextClicked","onEnterFullscreen","revealElement","controlsLeft","controlsRight","controlsUp","controlsDown","controlsPrev","controlsNext","controlsFullscreen","controlsRightArrow","controlsLeftArrow","controlsDownArrow","controlsLayout","controlsBackArrows","pointerEvents","eventName","routes","fragmentsRoutes","controlsTutorial","hasNavigatedVertically","hasNavigatedHorizontally","viewport","parentElement","Progress","onProgressClicked","bar","getProgress","getMaxWidth","slidesTotal","slideIndex","clientX","targetIndices","Pointer","lastMouseWheelStep","cursorHidden","cursorInactiveTimeout","onDocumentCursorActive","onDocumentMouseScroll","mouseWheel","hideInactiveCursor","showCursor","cursor","hideCursor","hideCursorTime","wheelDelta","loadScript","script","async","defer","onload","onreadystatechange","onerror","err","Error","lastChild","Plugins","reveal","state","registeredPlugins","asyncDependencies","plugins","dependencies","registerPlugin","resolve","scripts","scriptsToLoad","condition","scriptLoadedCallback","initPlugins","then","console","warn","pluginValues","values","pluginsToInitialize","loadAsync","initNextPlugin","afterPlugInitialized","plugin","init","hasPlugin","getPlugin","getRegisteredPlugins","Touch","touchStartX","touchStartY","touchStartCount","touchCaptured","onPointerDown","onPointerMove","onPointerUp","onTouchStart","onTouchMove","onTouchEnd","msPointerEnabled","isSwipePrevented","touches","currentX","currentY","includeFragments","deltaX","deltaY","abs","pointerType","MSPOINTER_TYPE_TOUCH","STATE_FOCUS","STATE_BLUR","Focus","onRevealPointerDown","onDocumentPointerDown","blur","Notes","updateVisibility","hasNotes","isSpeakerNotesWindow","notesElements","Playback","progressCheck","diameter","diameter2","thickness","playing","progressOffset","canvas","context","getContext","setPlaying","wasPlaying","animate","progressBefore","radius","iconSize","endAngle","PI","startAngle","save","clearRect","beginPath","arc","fillStyle","fill","lineWidth","strokeStyle","stroke","fillRect","moveTo","lineTo","restore","on","listener","off","defaultConfig","minScale","maxScale","respondToHashChanges","disableLayout","touch","loop","shuffle","help","showHiddenSlides","autoSlide","autoSlideMethod","defaultTiming","previewLinks","postMessageEvents","focusBodyOnPageVisibilityChange","transition","transitionSpeed","scrollActivationWidth","POSITIVE_INFINITY","viewDistance","mobileViewDistance","sortFragmentsOnSync","VERSION","Deck","autoSlidePlayer","initialized","ready","navigationHistory","slidesTransform","dom","autoSlideTimeout","autoSlideStartTime","autoSlidePaused","scrollView","printView","pointer","start","Util","wrapper","parent","childElementCount","Device","pauseOverlay","createSingletonNode","tagname","classname","nodes","testNode","statusElement","overflow","clip","createStatusElement","setupDOM","onPostMessage","setInterval","scrollLeft","onFullscreenChange","activatePrintView","activateScrollView","removeEventListeners","activateInitialView","text","nodeType","isAriaHidden","isDisplayHidden","child","isReady","numberOfSlides","resume","enablePreviewLinks","disablePreviewLinks","onAutoSlidePlayerClick","addEventListeners","onWindowResize","onSlidesClicked","onTransitionEnd","onPageVisibilityChange","useCapture","transforms","createEvent","initEvent","dispatchPostMessage","dispatchSlideChanged","self","message","namespace","JSON","stringify","onPreviewLinkClicked","showPreview","overlay","showHelp","html","viewportWidth","size","oldScale","presentationWidth","presentationHeight","zoom","len","checkResponsiveScrollView","remainingHeight","getRemainingHeight","newHeight","oldHeight","nw","naturalWidth","videoWidth","nh","naturalHeight","videoHeight","es","setPreviousVerticalIndex","getPreviousVerticalIndex","attributeName","isLastVerticalSlide","nextElementSibling","isFirstSlide","isLastSlide","wasPaused","defaultPrevented","stateBefore","indexhBefore","indexvBefore","updateSlides","slideChanged","currentHorizontalSlide","currentVerticalSlides","autoAnimateTransition","stateLoop","j","splice","beforeSlide","random","slidesLength","printMode","loopedForwards","loopedBackwards","reverse","showFragmentsIn","hideFragmentsIn","wasPresent","slideState","distanceX","distanceY","horizontalSlidesLength","verticalSlidesLength","oy","fragmentRoutes","pastCount","mainLoop","getSlide","indexf","fragmentAutoSlide","parentAutoSlide","slideAutoSlide","playbackRate","navigateNext","pauseAutoSlide","resumeAutoSlide","navigateLeft","navigateRight","navigateUp","navigateDown","navigatePrev","parse","method","args","anchor","fullscreenElement","webkitFullscreenElement","currentTarget","API","initialize","initOptions","setViewport","syncSlide","syncFragments","navigateFragment","prevFragment","nextFragment","availableFragments","toggleOverview","toggleScrollView","isOverview","loadSlide","unloadSlide","hidePreview","pausedFlag","overviewFlag","totalCount","allFragments","fragmentWeight","getSlidesAttributes","attributes","attribute","getPreviousSlide","getSlidePath","getPlugins","scroll","enqueuedAPICalls","deck"],"mappings":"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","x_google_ignoreList":[2]}
\ No newline at end of file
diff --git a/demo/plugin/appearance/appearance.css b/demo/plugin/appearance/appearance.css
index 18898f0..d11ca52 100644
--- a/demo/plugin/appearance/appearance.css
+++ b/demo/plugin/appearance/appearance.css
@@ -2,7 +2,7 @@
/*****************************************************************
*
* Appearance for Reveal.js
- * Version 1.3.3
+ * Version 1.3.4
*
* @author: Martijn De Jongh (Martino), martijn.de.jongh@gmail.com
* https://github.com/martinomagnifico
@@ -14,6 +14,8 @@
*
******************************************************************/
+
+
/* Custom Appearance animation keyframes */
@keyframes skidLeft {
from {
@@ -111,6 +113,10 @@
transform: scale3d(1, 1, 1);
}
}
+.wordchargroup.baseline {
+ overflow: hidden;
+}
+
/* Custom Appearance animation classes */
.skidRight, .animate__skidRight {
animation-name: skidRight;
@@ -218,15 +224,23 @@ i.animate__animated, i.animated, span.animate__animated, span.animated {
animation-duration: calc(var(--animate-duration) * 3);
}
-.print-pdf .animated, .print-pdf .animate__animated,
-.print-pdf section:not(.stack):not([data-appearance-can-start]) .animated,
-.print-pdf section:not(.stack):not([data-appearance-can-start]) .animate__animated {
+.print-pdf .animated .animated:not(.fragment),
+.print-pdf .animated .animate__animated:not(.fragment),
+.print-pdf .animated .animated.fragment.visible,
+.print-pdf .animated .animate__animated.fragment.visible, .print-pdf .animate__animated .animated:not(.fragment),
+.print-pdf .animate__animated .animate__animated:not(.fragment),
+.print-pdf .animate__animated .animated.fragment.visible,
+.print-pdf .animate__animated .animate__animated.fragment.visible,
+.print-pdf section:not(.stack):not([data-appearance-can-start]) .animated:not(.fragment),
+.print-pdf section:not(.stack):not([data-appearance-can-start]) .animate__animated:not(.fragment),
+.print-pdf section:not(.stack):not([data-appearance-can-start]) .animated.fragment.visible,
+.print-pdf section:not(.stack):not([data-appearance-can-start]) .animate__animated.fragment.visible {
opacity: 1;
visibility: visible;
animation: none;
}
-.print-pdf .reveal .fragment {
- opacity: 1;
+.print-pdf .animated, .print-pdf .animate__animated {
+ animation: none;
}
.reveal.sv .animated, .reveal.sv .animate__animated,
diff --git a/demo/plugin/appearance/appearance.esm.js b/demo/plugin/appearance/appearance.esm.js
index bdb38c7..a1808b6 100644
--- a/demo/plugin/appearance/appearance.esm.js
+++ b/demo/plugin/appearance/appearance.esm.js
@@ -1,7 +1,7 @@
/*****************************************************************
*
* Appearance for Reveal.js
- * Version 1.3.3
+ * Version 1.3.4
*
* @author: Martijn De Jongh (Martino), martijn.de.jongh@gmail.com
* https://github.com/martinomagnifico
@@ -12,5 +12,5 @@
* Copyright (C) 2023 Martijn De Jongh (Martino)
*
******************************************************************/
-const e=e=>e&&"object"==typeof e&&!Array.isArray(e),t=(a,...s)=>{if(!s.length)return a;const n=s.shift();if(e(a)&&e(n))for(const s in n)e(n[s])?(a[s]||Object.assign(a,{[s]:{}}),t(a[s],n[s])):Object.assign(a,{[s]:n[s]});return t(a,...s)},a=e=>{let t="";return"string"==typeof e&&(e=e.replace(/[“”]/g,'"').replace(/[‘’]/g,"'")),t=(e=>{try{return JSON.parse(e)&&!!e}catch(e){return!1}})(e)?e:"object"==typeof e?JSON.stringify(e,null,2):"{"===e.trim().replace(/'/g,'"').charAt(0)?e.trim().replace(/'/g,'"'):`{${e.trim().replace(/'/g,'"')}}`,t},s=(e,t,a)=>{let s,n=document.querySelector("head"),r=!1;if("script"===t?document.querySelector(`srcipt[src="${e}"]`)?r=!0:(s=document.createElement("script"),s.type="text/javascript",s.src=e):"stylesheet"===t&&(document.querySelector(`link[href="${e}"]`)?r=!0:(s=document.createElement("link"),s.rel="stylesheet",s.href=e)),!r){const e=()=>{"function"==typeof a&&(a.call(),a=null)};s.onload=e,s.onreadystatechange=function(){"loaded"===this.readyState&&e()},n.appendChild(s)}},n=(e,t)=>{e.debug&&console.log(t)},r=(e,t)=>{let a=(e=>{let t,a=document.querySelector(`script[src$="${e}"]`);return t=a?a.getAttribute("src").slice(0,-1*e.length):import.meta.url.slice(0,import.meta.url.lastIndexOf("/")+1),t})(t),n=t.replace(/\.[^/.]+$/,""),r=e.csspath.appearance?e.csspath.appearance:`${a}${n}.css`||`plugin/${n}/${n}.css`,i=e.compatibility?e.animatecsspath.compat:e.animatecsspath.link;e.debug&&(console.log("Paths:"),console.log(` - Plugin path = ${a}`),console.log(` - Appearance CSS path = ${r}`),console.log(` - AnimateCSS CSS path = ${i}`)),s(i,"stylesheet",(function(){s(r,"stylesheet")}))},i=(e,t)=>{let a=e.parentNode;if(a){for(const t of a.children)if(t!==e&&t.dataset.appearParent)return;a.classList=e.classList,(({attributes:e},t,a)=>{[...e].filter((({nodeName:e})=>e.includes("data"))).forEach((({nodeName:e,nodeValue:s})=>{(a&&e!==a||!a)&&t.setAttribute(e,s)}))})(e,a,"data-appear-parent"),a.innerHTML=e.innerHTML,a.classList.add(t)}},l=(e,t,a)=>Array.from(a.querySelectorAll(`.${e}`)).filter((e=>!e.closest(`.${t}`))),o=(e,t,a)=>{const s=[l(t,a,e),...Array.from(e.querySelectorAll(`.${a}`)).map((e=>((e,t,a)=>Array.from(a.querySelectorAll(`.${e}`)).filter((e=>e.closest(`.${t}`)===a)))(t,a,e)))];return!!s.some((e=>e.length>0))&&s},c=(e,t)=>{t.hideagain&&e.from&&e.from.dataset.appearanceCanStart&&e.from.removeAttribute("data-appearance-can-start")},d=(e,t,a)=>{if(t.hideagain&&e&&e.from){let t=e.from.querySelectorAll(a.animatecss);t&&t.forEach((e=>{e.classList.remove("animationended")}));let s=e.from.querySelectorAll(".fragment.visible");s&&s.forEach((e=>{e.classList.remove("visible")}))}},p=()=>{const e={names:{}};let s={};const l=(e,t,s)=>{n(e,"------------- Preloading -------------");let l=t.names;r(e,l.es5Filename),e.compatibility&&(l.animatecss=".backInDown, .backInLeft, .backInRight, .backInUp, .bounceIn, .bounceInDown, .bounceInLeft, .bounceInRight, .bounceInUp, .fadeIn, .fadeInDown, .fadeInDownBig, .fadeInLeft, .fadeInLeftBig, .fadeInRight, .fadeInRightBig, .fadeInUp, .fadeInUpBig, .fadeInTopLeft, .fadeInTopRight, .fadeInBottomLeft, .fadeInBottomRight, .flipInX, .flipInY, .lightSpeedInRight, .lightSpeedInLeft, .rotateIn, .rotateInDownLeft, .rotateInDownRight, .rotateInUpLeft, .rotateInUpRight, .jackInTheBox, .rollIn, .zoomIn, .zoomInDown, .zoomInLeft, .zoomInRight, .zoomInUp, .slideInDown, .slideInLeft, .slideInRight, .slideInUp, .skidLeft, .skidLeftBig, .skidRight, .skidRightBig, .shrinkIn, .shrinkInBlur",l.baseclass=e.compatibilitybaseclass),t.appearances=Array.from(t.slides.querySelectorAll(l.animatecss)),t.regularSections.forEach((s=>((e,t,s)=>{let n=null;if(e.hasAttribute("data-autoappear")){let a=e.dataset.autoappear;n="auto"==a||""==a||a.length<1||"true"==a?t.autoelements?t.autoelements:null:a}else t.autoappear&&t.autoelements&&(n=t.autoelements);if(n){let t=JSON.parse(a(n));Object.entries(t).forEach((([t,a])=>{let n=Array.from(e.querySelectorAll(t)).filter((e=>!s.appearances.includes(e)));n.length&&n.forEach((e=>{s.appearances.push(e);let t=[],n=null,r=!1,i=null,l=null;Array.isArray(a)?(t=a[0].split(/[ ,]+/),n=a[1]):"string"==typeof a?t=a.split(/[ ,]+/):a.constructor===Object&&((a.class||a.animation)&&(t=(a.animation?a.animation:a.class).split(/[ ,]+/)),a.speed&&(r=String(a.speed),r.includes("animate__")||(r=`animate__${r}`)),a.delay&&(n=String(a.delay)),a.split&&(i=String(a.split)),a["container-delay"]&&(l=String(a["container-delay"]))),e.classList.add(...t),r&&e.classList.add(r),n&&(e.dataset.delay||(e.dataset.delay=n)),i&&(e.dataset.split=i),l&&(e.dataset.containerDelay=l)}))}))}})(s,e,t))),t.appearances.forEach(((t,a)=>{((e,t,a)=>{let s=a.baseclass;e.hasAttribute("data-appear-parent")&&i(e,s),t.appearparents&&e.parentNode&&e.parentNode.tagName&&"SPAN"==e.tagName&&"LI"==e.parentNode.tagName&&String(e.outerHTML).length==String(e.parentNode.innerHTML).length&&i(e)})(t,e,l),((e,t)=>{e.classList.contains(t.baseclass)||e.classList.add(t.baseclass),e.classList.contains(t.fragmentClass)&&e.classList.add("custom")})(t,l),t.hasAttribute("data-split")&&((e,t)=>{let a=!1,s=" ";if("words"==t?a=e.textContent.trim().split(/\s+/):"letters"==t&&(a=e.textContent.trim().split(""),s=""),a){const t=Array.from(e.classList).filter((e=>e.startsWith("animate__"))),n=a.map(((t,a)=>{const s=document.createElement("span");return s.textContent=t," "==t&&(s.textContent=" "),e.dataset.delay&&0!==a&&(s.dataset.delay=e.dataset.delay),e.dataset.containerDelay&&0===a&&(s.dataset.delay=e.dataset.containerDelay),e.classList.forEach((e=>e.startsWith("animate__")&&s.classList.add(e))),s.outerHTML})).join(s);t.forEach((t=>e.classList.remove(t))),e.removeAttribute("data-delay"),e.removeAttribute("data-split"),e.removeAttribute("data-container-delay"),e.innerHTML=n}})(t,t.dataset.split)})),t.regularSections.forEach(((t,a)=>{let s=o(t,l.baseclass,l.fragmentClass);s&&s.forEach((t=>{((e,t,a)=>{let s=0;e.forEach(((e,a)=>{if(0==a&&e.dataset.delay||0!=a){let a=t.delay;e.dataset&&e.dataset.delay&&(a=parseInt(e.dataset.delay)),s+=a,e.style.setProperty("animation-delay",s+"ms"),e.removeAttribute("data-delay")}}))})(t,e)}))})),(e=>{setTimeout(e,0)})(s)},p=(t,a,s)=>{let r=e.names;return r.baseclass=a.baseclass,r.compatibilitybaseclass=a.compatibilitybaseclass,r.fragmentSelector=".fragment",r.fragmentClass="fragment",r.speedClasses=["slower","slow","fast","faster"],r.speedClasses.push(...r.speedClasses.map((e=>`animate__${e}`))),r.animatecss='[class^="animate__"],[class*=" animate__"]',r.es5Filename=s,r.eventnames=["ready","slidechanged","slidetransitionend","autoanimate","overviewhidden"],e.deck=t,e.dom=t.getRevealElement(),e.viewport=t.getViewportElement(),e.slides=t.getSlidesElement(),e.sections=e.slides.querySelectorAll("section"),e.fragments=e.slides.querySelectorAll(r.fragmentSelector),e.regularSections=Array.from(e.sections).filter((e=>!(({childNodes:e})=>{let t=!1;for(let a=0;a
t.on(s,(t=>{((e,t,a,s)=>{s.deck.getConfig().view;let n=s.viewport.classList.contains("reveal-scroll"),r=e.type,i=(e=>{let t={};return t.from=e.fromSlide||e.previousSlide||null,t.to=e.toSlide||e.currentSlide||null,t})(e);if(i.to){"ready"==r&&(i.to.dataset.appearanceCanStart=!0);let s=((e,t)=>(e.dataset.appearevent&&"auto"===e.dataset.appearevent&&(e.dataset.appearevent="autoanimate"),"auto"==t.appearevent&&(t.appearevent="autoanimate"),e.dataset.appearevent?e.dataset.appearevent:t.appearevent))(i.to,t);(r==s||"slidetransitionend"==r&&"autoanimate"==s)&&(i.to.dataset.appearanceCanStart=!0),n&&"slidechanged"==r&&(c(i,t),d(i,t,a),setTimeout((()=>{i.to.dataset.appearanceCanStart=!0}),t.delay)),"slidetransitionend"==r&&(c(i,t),d(i,t,a)),"slidechanged"==r&&document.body.dataset.exitoverview?(c(i,t),i.to.dataset.appearanceCanStart=!0):"overviewhidden"==r&&(document.body.dataset.exitoverview=!0,setTimeout((()=>{document.body.removeAttribute("data-exitoverview")}),500),e.currentSlide&&(c(i,t),i.to.dataset.appearanceCanStart=!0))}})(t,a,r,e)})))),e.viewport.addEventListener("animationend",(e=>{e.target.classList.add("animationended")})),e.viewport.addEventListener("fragmenthidden",(e=>{e.fragment.classList.remove("animationended"),e.fragment.querySelectorAll(".animationended").forEach((e=>{e.classList.remove("animationended")}))})),new Promise((t=>{l(a,e,t),n(a,"---------- Done preloading ----------")}))};return{id:"appearance",init:e=>(s=t({baseclass:"animate__animated",hideagain:!0,delay:300,debug:!1,appearevent:"slidetransitionend",autoappear:!1,autoelements:!1,appearparents:!1,csspath:"",animatecsspath:{link:"https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css",compat:"https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.compat.css"},compatibility:!1,compatibilitybaseclass:"animated"},e.getConfig().appearance||{}),p(e,s,"appearance.js"))}};export{p as default};
+const e=e=>e&&"object"==typeof e&&!Array.isArray(e),t=(a,...s)=>{if(!s.length)return a;const n=s.shift();if(e(a)&&e(n))for(const s in n)e(n[s])?(a[s]||Object.assign(a,{[s]:{}}),t(a[s],n[s])):Object.assign(a,{[s]:n[s]});return t(a,...s)},a=e=>{let t="";return"string"==typeof e&&(e=e.replace(/[“”]/g,'"').replace(/[‘’]/g,"'")),t=(e=>{try{return JSON.parse(e)&&!!e}catch(e){return!1}})(e)?e:"object"==typeof e?JSON.stringify(e,null,2):"{"===e.trim().replace(/'/g,'"').charAt(0)?e.trim().replace(/'/g,'"'):`{${e.trim().replace(/'/g,'"')}}`,t},s=(e,t,a)=>{let s,n=document.querySelector("head"),r=!1;if("script"===t?document.querySelector(`script[src="${e}"]`)?r=!0:(s=document.createElement("script"),s.type="text/javascript",s.src=e):"stylesheet"===t&&(document.querySelector(`link[href="${e}"]`)?r=!0:(s=document.createElement("link"),s.rel="stylesheet",s.href=e)),!r){const e=()=>{"function"==typeof a&&(a.call(),a=null)};s.onload=e,s.onreadystatechange=function(){"loaded"===this.readyState&&e()},n.appendChild(s)}},n=(e,t)=>{e.debug&&console.log(t)},r=(e,t)=>{let a=(e=>{let t,a=document.querySelector(`script[src$="${e}"]`);return t=a?a.getAttribute("src").slice(0,-1*e.length):import.meta.url.slice(0,import.meta.url.lastIndexOf("/")+1),t})(t),n=t.replace(/\.[^/.]+$/,"");if(e.cssautoload){let t=e.csspath.appearance?e.csspath.appearance:`${a}${n}.css`||`plugin/${n}/${n}.css`,r=e.compatibility?e.animatecsspath.compat:e.animatecsspath.link;e.debug&&(console.log("Paths:"),console.log(` - Plugin path = ${a}`),console.log(` - Appearance CSS path = ${t}`),console.log(` - AnimateCSS CSS path = ${r}`)),s(r,"stylesheet",(function(){s(t,"stylesheet")}))}},i=(e,t)=>{let a=e.parentNode;if(a){for(const t of a.children)if(t!==e&&t.dataset.appearParent)return;a.classList=e.classList,(({attributes:e},t,a)=>{[...e].filter((({nodeName:e})=>e.includes("data"))).forEach((({nodeName:e,nodeValue:s})=>{(a&&e!==a||!a)&&t.setAttribute(e,s)}))})(e,a,"data-appear-parent"),a.innerHTML=e.innerHTML,a.classList.add(t)}},l=(e,t,a)=>Array.from(a.querySelectorAll(`.${e}`)).filter((e=>!e.closest(`.${t}`))),o=(e,t,a)=>{const s=[l(t,a,e),...Array.from(e.querySelectorAll(`.${a}`)).map((e=>((e,t,a)=>Array.from(a.querySelectorAll(`.${e}`)).filter((e=>e.closest(`.${t}`)===a)))(t,a,e)))];return!!s.some((e=>e.length>0))&&s},c=(e,t)=>{t.hideagain&&e.from&&e.from.dataset.appearanceCanStart&&e.from.removeAttribute("data-appearance-can-start")},d=(e,t,a)=>{if(t.hideagain&&e&&e.from){let t=e.from.querySelectorAll(a.animatecss);t&&t.forEach((e=>{e.classList.remove("animationended")}));let s=e.from.querySelectorAll(".fragment.visible");s&&s.forEach((e=>{e.classList.remove("visible")}))}},p=()=>{const e={names:{}};let s={};const l=(e,t,s)=>{n(e,"------------- Preloading -------------");let l=t.names;r(e,l.es5Filename),e.compatibility&&(l.animatecss=".backInDown, .backInLeft, .backInRight, .backInUp, .bounceIn, .bounceInDown, .bounceInLeft, .bounceInRight, .bounceInUp, .fadeIn, .fadeInDown, .fadeInDownBig, .fadeInLeft, .fadeInLeftBig, .fadeInRight, .fadeInRightBig, .fadeInUp, .fadeInUpBig, .fadeInTopLeft, .fadeInTopRight, .fadeInBottomLeft, .fadeInBottomRight, .flipInX, .flipInY, .lightSpeedInRight, .lightSpeedInLeft, .rotateIn, .rotateInDownLeft, .rotateInDownRight, .rotateInUpLeft, .rotateInUpRight, .jackInTheBox, .rollIn, .zoomIn, .zoomInDown, .zoomInLeft, .zoomInRight, .zoomInUp, .slideInDown, .slideInLeft, .slideInRight, .slideInUp, .skidLeft, .skidLeftBig, .skidRight, .skidRightBig, .shrinkIn, .shrinkInBlur",l.baseclass=e.compatibilitybaseclass),t.appearances=Array.from(t.slides.querySelectorAll(l.animatecss)),t.regularSections.forEach((s=>((e,t,s)=>{let n=null;if(e.hasAttribute("data-autoappear")){let a=e.dataset.autoappear;n="auto"==a||""==a||a.length<1||"true"==a?t.autoelements?t.autoelements:null:a}else t.autoappear&&t.autoelements&&(n=t.autoelements);if(n){let t=JSON.parse(a(n));Object.entries(t).forEach((([t,a])=>{let n=Array.from(e.querySelectorAll(t)).filter((e=>!s.appearances.includes(e)));n.length&&n.forEach((e=>{s.appearances.push(e);let t=[],n=null,r=!1,i=null,l=null;Array.isArray(a)?(t=a[0].split(/[ ,]+/),n=a[1]):"string"==typeof a?t=a.split(/[ ,]+/):a.constructor===Object&&((a.class||a.animation)&&(t=(a.animation?a.animation:a.class).split(/[ ,]+/)),a.speed&&(r=String(a.speed),r.includes("animate__")||(r=`animate__${r}`)),a.delay&&(n=String(a.delay)),a.split&&(i=String(a.split)),a["container-delay"]&&(l=String(a["container-delay"]))),e.classList.add(...t),r&&e.classList.add(r),n&&(e.dataset.delay||(e.dataset.delay=n)),i&&(e.dataset.split=i),l&&(e.dataset.containerDelay=l)}))}))}})(s,e,t))),t.appearances.forEach(((t,a)=>{((e,t,a)=>{let s=a.baseclass;e.hasAttribute("data-appear-parent")&&i(e,s),t.appearparents&&e.parentNode&&e.parentNode.tagName&&"SPAN"==e.tagName&&"LI"==e.parentNode.tagName&&String(e.outerHTML).length==String(e.parentNode.innerHTML).length&&i(e)})(t,e,l),((e,t)=>{e.classList.contains(t.baseclass)||e.classList.add(t.baseclass),e.classList.contains(t.fragmentClass)&&e.classList.add("custom")})(t,l),t.hasAttribute("data-split")&&((e,t)=>{let a=!1,s=" ";if("words"==t?a=e.textContent.trim().split(/\s+/):"letters"==t&&(a=e.textContent.trim().split(""),s=""),a){const t=Array.from(e.classList).filter((e=>e.startsWith("animate__"))),n=a.map(((t,a)=>{const s=document.createElement("span");return s.textContent=t," "==t&&(s.textContent=" "),e.dataset.delay&&0!==a&&(s.dataset.delay=e.dataset.delay),e.dataset.containerDelay&&0===a&&(s.dataset.delay=e.dataset.containerDelay),e.classList.add("wordchargroup"),e.classList.forEach((e=>e.startsWith("animate__")&&s.classList.add(e))),s.outerHTML})).join(s);t.forEach((t=>e.classList.remove(t))),e.removeAttribute("data-delay"),e.removeAttribute("data-split"),e.removeAttribute("data-container-delay"),e.innerHTML=n}})(t,t.dataset.split)})),t.regularSections.forEach(((t,a)=>{let s=o(t,l.baseclass,l.fragmentClass);s&&s.forEach((t=>{((e,t,a)=>{let s=0;e.forEach(((e,a)=>{if(0==a&&e.dataset.delay||0!=a){let a=t.delay;e.dataset&&e.dataset.delay&&(a=parseInt(e.dataset.delay)),s+=a,e.style.setProperty("animation-delay",s+"ms"),e.removeAttribute("data-delay")}}))})(t,e)}))})),(e=>{setTimeout(e,0)})(s)},p=(t,a,s)=>{let r=e.names;return r.baseclass=a.baseclass,r.compatibilitybaseclass=a.compatibilitybaseclass,r.fragmentSelector=".fragment",r.fragmentClass="fragment",r.speedClasses=["slower","slow","fast","faster"],r.speedClasses.push(...r.speedClasses.map((e=>`animate__${e}`))),r.animatecss='[class^="animate__"],[class*=" animate__"]',r.es5Filename=s,r.eventnames=["ready","slidechanged","slidetransitionend","autoanimate","overviewhidden"],e.deck=t,e.dom=t.getRevealElement(),e.viewport=t.getViewportElement(),e.slides=t.getSlidesElement(),e.sections=e.slides.querySelectorAll("section"),e.fragments=e.slides.querySelectorAll(r.fragmentSelector),e.regularSections=Array.from(e.sections).filter((e=>!(({childNodes:e})=>{let t=!1;for(let a=0;at.on(s,(t=>{((e,t,a,s)=>{s.deck.getConfig().view;let n=s.viewport.classList.contains("reveal-scroll"),r=e.type,i=(e=>{let t={};return t.from=e.fromSlide||e.previousSlide||null,t.to=e.toSlide||e.currentSlide||null,t})(e);if(i.to){"ready"==r&&(i.to.dataset.appearanceCanStart=!0);let s=((e,t)=>(e.dataset.appearevent&&"auto"===e.dataset.appearevent&&(e.dataset.appearevent="autoanimate"),"auto"==t.appearevent&&(t.appearevent="autoanimate"),e.dataset.appearevent?e.dataset.appearevent:t.appearevent))(i.to,t);(r==s||"slidetransitionend"==r&&"autoanimate"==s)&&(i.to.dataset.appearanceCanStart=!0),n&&"slidechanged"==r&&(c(i,t),d(i,t,a),setTimeout((()=>{i.to.dataset.appearanceCanStart=!0}),t.delay)),"slidetransitionend"==r&&(c(i,t),d(i,t,a)),"slidechanged"==r&&document.body.dataset.exitoverview?(c(i,t),i.to.dataset.appearanceCanStart=!0):"overviewhidden"==r&&(document.body.dataset.exitoverview=!0,setTimeout((()=>{document.body.removeAttribute("data-exitoverview")}),500),e.currentSlide&&(c(i,t),i.to.dataset.appearanceCanStart=!0))}})(t,a,r,e)})))),e.viewport.addEventListener("animationend",(e=>{e.target.classList.add("animationended")})),e.viewport.addEventListener("fragmenthidden",(e=>{e.fragment.classList.remove("animationended"),e.fragment.querySelectorAll(".animationended").forEach((e=>{e.classList.remove("animationended")}))})),new Promise((t=>{l(a,e,t),n(a,"---------- Done preloading ----------")}))};return{id:"appearance",init:e=>(s=t({baseclass:"animate__animated",hideagain:!0,delay:300,debug:!1,appearevent:"slidetransitionend",autoappear:!1,autoelements:!1,appearparents:!1,cssautoload:!0,csspath:"",animatecsspath:{link:"https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css",compat:"https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.compat.css"},compatibility:!1,compatibilitybaseclass:"animated"},e.getConfig().appearance||{}),p(e,s,"appearance.js"))}};export{p as default};
//# sourceMappingURL=appearance.esm.js.map
diff --git a/demo/plugin/appearance/appearance.esm.js.map b/demo/plugin/appearance/appearance.esm.js.map
index 46d953d..c2c2459 100644
--- a/demo/plugin/appearance/appearance.esm.js.map
+++ b/demo/plugin/appearance/appearance.esm.js.map
@@ -1 +1 @@
-{"version":3,"file":"appearance.esm.js","sources":["../../../src/plugin/js/helpers.js","../../../src/plugin/js/functions/get-load-css.js","../../../src/plugin/js/functions/fix-list-item.js","../../../src/plugin/js/functions/get-appearance-arrays.js","../../../src/plugin/js/functions/show-hide-slide.js","../../../src/plugin/js/plugin.js","../../../src/plugin/js/functions/add-auto-animation.js","../../../src/plugin/js/functions/add-base-class.js","../../../src/plugin/js/functions/convert-to-spans.js","../../../src/plugin/js/functions/add-delay.js"],"sourcesContent":["/**\n * Check if a given string is valid JSON.\n * @param {string} str - The string to be checked.\n * @returns {boolean} `true` if the string is valid JSON, otherwise `false`.\n */\nexport const isJSON = str => {\n\ttry {\n\t\treturn (JSON.parse(str) && !!str);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\n/**\n * Convert a NodeList into an array based on provided selectors.\n * @param {Element} container - The root element to begin querying.\n * @param {string} selectors - A string containing one or more CSS selectors separated by commas.\n * @returns {Element[]} Array of elements that match the given selectors.\n */\nexport const selectionArray = (container, selectors) => {\n\tlet selections = container.querySelectorAll(selectors);\n\tlet selectionarray = Array.prototype.slice.call(selections);\n\treturn selectionarray;\n};\n\n/**\n * Check if an element has child nodes that are `SECTION` elements.\n * @param {Object} param0 - Object with childNodes property.\n * @param {NodeListOf} param0.childNodes - List of child nodes of the element.\n * @returns {boolean} `true` if the element contains `SECTION` child nodes, otherwise `false`.\n */\nexport const isStack = ({childNodes}) => {\n\tlet isStack = false;\n\tfor (let i = 0; i < childNodes.length; i++) {\n\t\tif (childNodes[i].tagName == \"SECTION\") {\n\t\t\tisStack = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn isStack;\n};\n\n/**\n * Copy data attributes from a source element to a target element with an optional exception.\n * @param {Object} param0 - Object with attributes property.\n * @param {NamedNodeMap} param0.attributes - Map of attributes of the source element.\n * @param {Element} target - Target element to copy attributes to.\n * @param {string} [not] - Optional attribute name to exclude from copying.\n */\nexport const copyDataAttributes = ({attributes}, target, not) => {\n\t[...attributes].filter(({nodeName}) => nodeName.includes('data')).forEach(({nodeName, nodeValue}) => {\n\t\tif ((not && nodeName !== not) || !not) {\n\t\t\ttarget.setAttribute(nodeName, nodeValue);\n\t\t}\n\t});\n};\n\n/**\n * Check if the given item is an object and not an array.\n * @param {*} item - The item to be checked.\n * @returns {boolean} `true` if the item is an object and not an array, otherwise `false`.\n */\nconst isObject = (item) => {\n\treturn (item && typeof item === 'object' && !Array.isArray(item));\n}\n\n/**\n * Deep merge multiple objects into a target object.\n * @param {Object} target - Target object to merge values into.\n * @param {...Object} sources - Source objects to merge from.\n * @returns {Object} The merged object.\n */\nexport const mergeDeep = (target, ...sources) => {\n\tif (!sources.length) return target;\n\tconst source = sources.shift();\n\n\tif (isObject(target) && isObject(source)) {\n\t\tfor (const key in source) {\n\t\t\tif (isObject(source[key])) {\n\t\t\t\tif (!target[key]) Object.assign(target, { [key]: {} });\n\t\t\t\tmergeDeep(target[key], source[key]);\n\t\t\t} else {\n\t\t\t\tObject.assign(target, { [key]: source[key] });\n\t\t\t}\n\t\t}\n\t}\n\treturn mergeDeep(target, ...sources);\n}\n\n/**\n * Resolves the given Promise immediately using setTimeout.\n * @param {Function} resolve - The resolve function of a Promise.\n * @returns {number} The ID value of the timer that is set.\n */\nexport const doneLoading = (resolve) => {\n\treturn setTimeout(resolve, 0);\n}\n\n\n/**\n * Converts a JavaScript object or a JSON-formatted string to a JSON string.\n *\n * @param {Object|string} str - The input string or object to be converted to a JSON string.\n * @returns {string} The JSON string.\n */\nexport const toJSONString = (str) => {\n\tlet JSONString = ''\n\n\tif (typeof str === \"string\") str = str.replace(/[“”]/g,'\"').replace(/[‘’]/g,\"'\");\n\n\tif (isJSON(str)) {\n\t\tJSONString = str\n\t} else {\n\t\tif (typeof str === \"object\") {\n\t\t\tJSONString = JSON.stringify(str, null, 2)\n\t\t} else {\n\t\t\tJSONString = str.trim().replace(/'/g, '\"').charAt(0) === \"{\" ? str.trim().replace(/'/g, '\"') : `{${str.trim().replace(/'/g, '\"')}}`;\n\t\t}\n\t}\n\treturn JSONString;\n}\n\n\n/**\n * Dynamically loads a resource from the specified URL and calls a callback function when it's loaded.\n * Will not load the resource if it has already been loaded.\n *\n * @param {string} url - The URL of the resource to load.\n * @param {string} type - The type of resource to load.\n * @param {Function} callback - A callback function to be called when the resource is loaded.\n */\n\nexport const loadResource = (url, type, callback) => {\n\tlet head = document.querySelector('head');\n\tlet resource;\n\tlet alreadyExists = false;\n\n\tif (type === 'script') {\n\t\tif (!document.querySelector(`srcipt[src=\"${url}\"]`)) {\n\t\t\tresource = document.createElement('script');\n\t\t\tresource.type = 'text/javascript';\n\t\t\tresource.src = url;\n\t\t} else { alreadyExists = true }\n\n\t} else if (type === 'stylesheet') {\n\n\t\tif (!document.querySelector(`link[href=\"${url}\"]`)) {\n\t\t\tresource = document.createElement('link');\n\t\t\tresource.rel = 'stylesheet';\n\t\t\tresource.href = url;\n\t\t} else { alreadyExists = true }\n\t}\n\n\tif (!alreadyExists) {\n\t\tconst finish = () => {\n\t\t\tif (typeof callback === 'function') {\n\t\t\tcallback.call();\n\t\t\tcallback = null;\n\t\t\t}\n\t\t};\n\t\tresource.onload = finish;\n\t\tresource.onreadystatechange = function () {\n\t\t\tif (this.readyState === 'loaded') {\n\t\t\t\tfinish();\n\t\t\t}\n\t\t};\n\t\thead.appendChild(resource);\n\t}\n}\n\n\n/**\n * Retrieves the path of a JavaScript file based on its filename.\n *\n * @param {string} fileName - The filename of the script.\n * @returns {string} The path to the plugin's location.\n */\nexport const pluginPath = (fileName) => {\n\tlet path;\n\tlet pluginScript = document.querySelector(`script[src$=\"${fileName}\"]`);\n\tif (pluginScript) {\n\t\tpath = pluginScript.getAttribute(\"src\").slice(0, -1 * (fileName.length));\n\t} else {\n\t\tpath = import.meta.url.slice(0, import.meta.url.lastIndexOf('/') + 1);\n\t}\n\treturn path;\n}\n\n\n/**\n * Check if element 'a' appears before element 'b' in the DOM tree.\n *\n * @param {HTMLElement} a - The first HTML element to compare.\n * @param {HTMLElement} b - The second HTML element to compare.\n * @returns {boolean|undefined} - Returns `true` if element 'a' appears before element 'b', `false` if 'b' appears before 'a', and `undefined` if the elements have no relative position in the DOM tree.\n */\nexport const isBefore = (a, b) => {\n var all = document.getElementsByTagName('*');\n\n for (var i = 0; i < all.length; ++i) {\n if (all[i] === a) {\n return true;\n } else if (all[i] === b) {\n return false;\n }\n }\n // If the elements have no relative position in the DOM tree\n return undefined;\n};\n\n\n/**\n * Check the number of occurrences of a specific element in an array.\n *\n * @param {Array} array - The array in which occurrences are to be counted.\n * @param {*} element - The element to be counted within the array.\n * @returns {number} - The count of occurrences of the specified element in the array.\n */\nexport const checkOccurrence = (array, element) => {\n let counter = 0;\n for (let i = 0; i < array.length; i++) {\n if (array[i] == element) {\n counter++;\n }\n }\n return counter;\n};\n\n\n/**\n * Create an HTML element from a string of HTML.\n *\n * @param {string} thehtml - The string of HTML to be converted into an HTML element.\n * @returns {HTMLElement | null} - The HTML element created from the provided HTML string. Returns `null` if the element couldn't be created.\n */\nexport const createNode = (thehtml) => {\n const fragment = document.createRange().createContextualFragment(thehtml);\n return fragment.firstElementChild;\n};\n\n\n\nexport const debugLog = (options, text) => {\n\tif (options.debug) console.log(text);\n}\n\n","import { loadResource } from '../helpers';\nimport { pluginPath } from '../helpers';\n\n/**\n * Retrieves and loads CSS stylesheets based on the provided options and ES5 filename.\n *\n * @param {Object} options - Configuration options for loading CSS.\n * @param {string} fileName - The filename of the script.\n */\n\nexport const getAndLoadCSS = (options, fileName) => {\n\tlet thePath = pluginPath(fileName);\n\tlet pluginBaseName = fileName.replace(/\\.[^/.]+$/, \"\");\n\n\tlet AppearanceStylePath = options.csspath.appearance ? options.csspath.appearance : null || `${thePath}${pluginBaseName}.css` || `plugin/${pluginBaseName}/${pluginBaseName}.css`\n\tlet AnimateCSSPath = !options.compatibility ? options.animatecsspath.link : options.animatecsspath.compat;\n\n\tif (options.debug) {\n\t\tconsole.log(`Paths:`);\n\t\tconsole.log(` - Plugin path = ${thePath}`);\n\t\tconsole.log(` - Appearance CSS path = ${AppearanceStylePath}`);\n\t\tconsole.log(` - AnimateCSS CSS path = ${AnimateCSSPath}`);\n\t}\n\n\tloadResource(AnimateCSSPath, 'stylesheet', function () {\n\t\tloadResource(AppearanceStylePath, 'stylesheet');\n\t});\n\n}","import { copyDataAttributes } from '../helpers';\n\n/**\n * Hoist a list item's appearance to its parent element's appearance.\n *\n * @param {HTMLElement} from - The list item element.\n * @returns {undefined}\n */\nconst hoistAppearance = (from, baseclass) => {\n\tlet to = from.parentNode;\n\tif (!to) return;\n \n\tfor (const sibling of to.children) {\n\t if (sibling !== from && sibling.dataset.appearParent) return;\n\t}\n \n\tto.classList = from.classList;\n\tcopyDataAttributes(from, to, \"data-appear-parent\");\n\tto.innerHTML = from.innerHTML;\n\tto.classList.add(baseclass);\n};\n\n\n/**\n * Fix list items that were changed by Quarto.\n *\n * This function is designed for use with Quarto and handles the conversion of list items\n * with Appearance classes to their parent elements when a manual attribute is present.\n * It also provides automatic conversion for list items that directly contain spans, which\n * is related to Quarto's wrapping of list content in a span.\n *\n * @param {HTMLElement} appearance - The list item element whose appearance will be converted.\n * @param {Object} options - An options object that controls the conversion behavior.\n * @param {boolean} options.appearparents - If `true`, automatic conversion of list items with spans is enabled.\n * @returns {undefined}\n */\nexport const fixListItem = (appearance, options, names) => {\n\n\tlet baseclass = names.baseclass\n\tif (appearance.hasAttribute(\"data-appear-parent\")) {\n\t\thoistAppearance(appearance, baseclass);\n\t}\n\n\tif (options.appearparents) {\n\t\tif (appearance.parentNode && appearance.parentNode.tagName) {\n\t\t\tif (appearance.tagName == \"SPAN\" && appearance.parentNode.tagName == \"LI\") {\n\t\t\t\tlet spanLength = String(appearance.outerHTML).length;\n\t\t\t\tlet liContentLength = String(appearance.parentNode.innerHTML).length;\n\t\t\t\tif (spanLength == liContentLength) {\n\t\t\t\t\thoistAppearance(appearance);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Selects elements with a specified class that are not nested inside an element with another specified class.\n * @param {string} targetClass - The class name to select elements.\n * @param {string} excludeClass - The class name to exclude elements nested inside it.\n * @param {Element} el - The element to find the target elements in.\n * @returns {Element[]} - Array of selected elements.\n */\nconst elemsNotInClass = (targetClass, excludeClass, el) => \n Array.from(el.querySelectorAll(`.${targetClass}`))\n .filter(s => !s.closest(`.${excludeClass}`));\n\n/**\n * Selects elements with a specified class that are nested inside an element with another specified class.\n * @param {string} targetClass - The class name to select elements.\n * @param {string} parentClass - The class name of the parent to find elements in.\n * @param {Element} el - The element to find the target elements in.\n * @returns {Element[]} - Array of selected elements.\n */\nconst elemsInClass = (targetClass, parentClass, el) =>\n Array.from(el.querySelectorAll(`.${targetClass}`))\n .filter(s => s.closest(`.${parentClass}`) === el);\n\n/**\n * Extracts groups of elements with a specified class from the provided section element.\n * Groups are formed based on nesting inside elements with another specified class.\n * @param {Element} section - The section to extract data from.\n * @returns {Element[][]} - Nested arrays of selected elements.\n */\n\n\n/**\n * Extracts groups of elements with a specified class from the provided section element.\n * Groups are formed based on nesting inside elements with another specified class.\n * @param {Element} section - The section to extract data from.\n * @param {string} targetClass - The class name to select elements.\n * @param {string} groupClass - The class name of the parent to find elements in.\n * @returns {Element[][]} - Nested arrays of selected elements.\n */\nexport const getAppearanceArrays = (section, targetClass, groupClass) => {\n const result = [\n elemsNotInClass(targetClass, groupClass, section), \n ...Array.from(section.querySelectorAll(`.${groupClass}`))\n .map(frag => elemsInClass(targetClass, groupClass, frag))\n ];\n\n\tif (result.some(group => group.length > 0)) {\n return result;\n } else {\n\t\treturn false;\n\t}\n};\n","/**\n * Derives slide from and to from the event object.\n *\n * @param {Object} event - The event object containing slide transition details.\n * @returns {Object} - An object containing references to the \"from\" and \"to\" slides.\n */\nconst fromTo = (event) => {\n\tlet slides = {};\n\tslides.from = event.fromSlide || event.previousSlide || null;\n\tslides.to = event.toSlide || event.currentSlide || null;\n\treturn slides;\n};\n\n/**\n * A function that determines the appearance event for a given slide.\n *\n * This function checks the `data-appearevent` attribute of the slide and the `options.appearevent` parameter.\n * If `data-appearevent` is set to \"auto\", it is converted to \"autoanimate\". If `options.appearevent` is \"auto\", it is also converted to \"autoanimate\".\n * The function returns the appearance event, prioritizing `data-appearevent` over `options.appearevent`.\n *\n * @param {HTMLElement} toSlide - The slide for which the appearance event is determined.\n * @param {Object} options - An object containing options for the appearance event.\n * @param {string} options.appearevent - The appearance event option provided in the `options` object.\n *\n * @returns {string} - The determined appearance event for the slide, either from `data-appearevent` or `options.appearevent`.\n */\nconst slideAppearevent = (toSlide, options) => {\n\n\tif (toSlide.dataset.appearevent && toSlide.dataset.appearevent === \"auto\" ) {\n\t\ttoSlide.dataset.appearevent = \"autoanimate\"\n\t}\n\tif (options.appearevent == \"auto\") {options.appearevent = \"autoanimate\"}\n\treturn toSlide.dataset.appearevent ? toSlide.dataset.appearevent : options.appearevent;\n};\n\n/**\n * Remove the 'data-appearance-can-start' attribute from the 'from' slide if the 'hideagain' option is enabled.\n *\n * @param {HTMLElement} slides - The container element for the slides.\n * @param {Object} options - An object containing configuration options.\n * @param {boolean} options.hideagain - A flag indicating whether to remove the attribute when 'hideagain' is true.\n */\nconst removeStartAttribute = (slides, options) => {\n\tif (options.hideagain) {\n\t\tif (slides.from && slides.from.dataset.appearanceCanStart ) {\n\t\t\tslides.from.removeAttribute('data-appearance-can-start');\n\t\t}\n\t}\n};\n\n\n/**\n * Turn off slide appearances when transitioning from one slide to another if the 'hideagain' option is enabled.\n *\n * @param {HTMLElement} slides - The container element for the slides.\n * @param {Object} options - An object containing configuration options.\n * @param {string} names.animatecss - The CSS selector for animated elements.\n */\nconst turnOffSlideAppearances = (slides, options, names) => {\n\tif (options.hideagain) {\n\t\tif (slides && slides.from) {\n\n\t\t\t// Remove animationended class from animated elements when moving away from that slide\n\t\t\tlet fromAppearances = slides.from.querySelectorAll(names.animatecss);\n\t\t\tif (fromAppearances) {\n\t\t\t\tfromAppearances.forEach( appearance => {\n\t\t\t\t\tappearance.classList.remove('animationended');\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Remove visible class from fragments when moving away from that slide\n\t\t\tlet fromFragments = slides.from.querySelectorAll(`.fragment.visible`);\n\t\t\tif (fromFragments) {\n\t\t\t\tfromFragments.forEach(fragment => {\n\t\t\t\t\tfragment.classList.remove('visible');\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n/**\n * Handles the showing and hiding of slides based on the provided event and options.\n *\n * @param {Object} event - The event object containing slide transition details.\n * @param {Object} options - An object containing configurations for slide appearance management.\n */\nexport const showHideSlide = (event, options, names, vars) => {\n\n\tlet view = vars.deck.getConfig().view;\n\tlet isScroll = vars.viewport.classList.contains(\"reveal-scroll\");\n\tlet etype = event.type;\n\tlet slides = fromTo(event);\n\n\tif (slides.to) {\n\n\t\tif (etype == \"ready\") {\n\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t}\n\n\t\tlet appearevent = slideAppearevent(slides.to, options)\n\n\t\tif (etype == appearevent || (etype == \"slidetransitionend\" && appearevent == \"autoanimate\")) {\n\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t}\n\n\t\t// Add scroll mode compatibility, does not have a slidetransitionend event yet\n\t\tif (isScroll && etype == 'slidechanged' ) {\n\n\t\t\tremoveStartAttribute(slides, options);\n\t\t\tturnOffSlideAppearances(slides, options, names);\n\n\t\t\t// Add delay to allow for scroll animation to finish\n\t\t\tsetTimeout(() => {\n\t\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t\t}, options.delay)\n\t\t}\n\n\n\t\tif (etype == \"slidetransitionend\" ) {\n\n\t\t\tremoveStartAttribute(slides, options);\n\t\t\tturnOffSlideAppearances(slides, options, names);\n\t\t}\n\t\t\n\t\tif (etype == 'slidechanged' && document.body.dataset.exitoverview) {\n\t\t\tremoveStartAttribute(slides, options);\n\t\t\tslides.to.dataset.appearanceCanStart = true;\n\n\t\t} else if (etype == 'overviewhidden' ) {\n\n\t\t\tdocument.body.dataset.exitoverview = true;\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tdocument.body.removeAttribute('data-exitoverview')\n\t\t\t}, 500)\n\n\t\t\tif (event.currentSlide ) {\n\t\t\t\tremoveStartAttribute(slides, options);\n\t\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t\t}\n\t\t}\n\t}\n}","import { debugLog, mergeDeep, doneLoading, isStack } from './helpers';\n\nimport {getAndLoadCSS} from './functions/get-load-css.js';\nimport {addAutoAnimation} from './functions/add-auto-animation.js';\nimport {fixListItem} from './functions/fix-list-item';\nimport {addBaseClass} from './functions/add-base-class.js';\nimport {addDelay} from './functions/add-delay.js';\nimport {getAppearanceArrays} from './functions/get-appearance-arrays.js';\nimport {convertToSpans} from './functions/convert-to-spans';\nimport {showHideSlide} from './functions/show-hide-slide.js';\n\n\nconst Plugin = () => {\n\n\tconst vars = {};\n\tvars.names = {};\n\tlet options = {};\n\n\t/**\n\t* Prepare the plugin to find Appearance elements\n\t* @param {Object} vars - The variables to be prepared.\n\t* @param {Object} names - The names to be prepared.\n\t* @param {Function} resolve - The callback function to be called when preparation is complete.\n\t* @throws {Error} Throws an error if the 'options' object is not defined.\n\t*/\n\tconst prepare = (options, vars, resolve) => {\n\n\t\tdebugLog(options, \"------------- Preloading -------------\");\n\n\t\tlet names = vars.names;\n\n\t\tgetAndLoadCSS(options, names.es5Filename);\n\n\t\tif (options.compatibility) {\n\t\t\tnames.animatecss = '.backInDown, .backInLeft, .backInRight, .backInUp, .bounceIn, .bounceInDown, .bounceInLeft, .bounceInRight, .bounceInUp, .fadeIn, .fadeInDown, .fadeInDownBig, .fadeInLeft, .fadeInLeftBig, .fadeInRight, .fadeInRightBig, .fadeInUp, .fadeInUpBig, .fadeInTopLeft, .fadeInTopRight, .fadeInBottomLeft, .fadeInBottomRight, .flipInX, .flipInY, .lightSpeedInRight, .lightSpeedInLeft, .rotateIn, .rotateInDownLeft, .rotateInDownRight, .rotateInUpLeft, .rotateInUpRight, .jackInTheBox, .rollIn, .zoomIn, .zoomInDown, .zoomInLeft, .zoomInRight, .zoomInUp, .slideInDown, .slideInLeft, .slideInRight, .slideInUp, .skidLeft, .skidLeftBig, .skidRight, .skidRightBig, .shrinkIn, .shrinkInBlur';\n\t\t\tnames.baseclass = options.compatibilitybaseclass\n\t\t}\n\n\t\tvars.appearances = Array.from(vars.slides.querySelectorAll(names.animatecss));\n\n\t\t// Go through each section to see if there are any (auto) selectors that need animation classes\n\t\tvars.regularSections.forEach(theSection => addAutoAnimation(theSection, options, vars));\n\n\t\tvars.appearances.forEach((theAppearance, index) => {\n\t\t\t// Fix any list item where the Appearance classes were moved to the span (Quarto does this)\n\t\t\tfixListItem(theAppearance, options, names);\n\n\t\t\t// Go through each appearance element and add the baseclass if it doesn't have it\n\t\t\taddBaseClass(theAppearance, names);\n\n\t\t\tif (theAppearance.hasAttribute('data-split')) {\n\t\t\t\tconvertToSpans(theAppearance, theAppearance.dataset.split);\n\t\t\t}\n\t\t});\n\n\t\tvars.regularSections.forEach((theSection, index) => {\n\t\t\t// Get all the Appearances in the section as separate arrays per delay loop\n\t\t\tlet appearanceArrays = getAppearanceArrays(theSection, names.baseclass, names.fragmentClass);\n\n\t\t\tif (appearanceArrays) {\n\t\t\t\tappearanceArrays.forEach((appearanceArray) => {\n\t\t\t\t\t// Add the delays to each appearance in the array\n\t\t\t\t\taddDelay(appearanceArray, options, names)\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\tdoneLoading(resolve);\n\t}\n\n\t/**\n\t* The main function of the plugin\n\t* @param {object} deck - The deck object\n\t* @param {object} options - The options object\n\t* @param {string} es5Filename - The name of the file that will be used\n\t*/\n\tconst Appear = (deck, options, es5Filename) => {\n\n\t\tlet names = vars.names;\n\n\t\t// Set up names\n\t\tnames.baseclass = options.baseclass;\n\t\tnames.compatibilitybaseclass = options.compatibilitybaseclass;\n\t\tnames.fragmentSelector = \".fragment\";\n\t\tnames.fragmentClass = \"fragment\";\n\t\tnames.speedClasses = ['slower', 'slow', 'fast', 'faster'];\n\t\tnames.speedClasses.push(...names.speedClasses.map(speed => `animate__${speed}`));\n\t\tnames.animatecss = '[class^=\"animate__\"],[class*=\" animate__\"]';\n\t\tnames.es5Filename = es5Filename;\n\t\tnames.eventnames = ['ready', 'slidechanged', 'slidetransitionend', 'autoanimate', 'overviewhidden'];\n\t\n\t\t// Set up variables\n\t\tvars.deck = deck;\n\t\tvars.dom = deck.getRevealElement();\n\t\tvars.viewport = deck.getViewportElement();\n\t\tvars.slides = deck.getSlidesElement();\n\n\t\tvars.sections = vars.slides.querySelectorAll('section');\n\t\tvars.fragments = vars.slides.querySelectorAll(names.fragmentSelector);\n\t\tvars.regularSections = Array.from(vars.sections).filter( section => !isStack(section));\n\n\t\tif( /receiver/i.test( window.location.search ) ) vars.viewport.classList.add('sv');\n\n\t\tnames.eventnames.forEach( (eventname) => deck.on( eventname, event => { showHideSlide(event, options, names, vars) } ) );\n\n\t\tvars.viewport.addEventListener(\"animationend\", (event) => {\n\t\t\tevent.target.classList.add('animationended');\n\t\t});\n\t\tvars.viewport.addEventListener(\"fragmenthidden\", (event) => {\n\t\t\tevent.fragment.classList.remove('animationended');\n\t\t\tevent.fragment.querySelectorAll('.animationended').forEach(el => {\n\t\t\t\tel.classList.remove('animationended');\n\t\t\t});\n\t\t});\n\n\t\treturn new Promise(resolve => {\n\t\t\tprepare(options, vars, resolve);\n\t\t\tdebugLog(options, \"---------- Done preloading ----------\");\n\t\t});\n\t};\n\n\n\t/**\n\t* Initialize the plugin\n\t* @param {object} deck - The deck object\n\t*/\n\tconst init = (deck) => {\n\n\t\tlet defaultOptions = {\n\t\t\tbaseclass: 'animate__animated',\n\t\t\thideagain: true,\n\t\t\tdelay: 300,\n\t\t\tdebug: false,\n\t\t\tappearevent: 'slidetransitionend',\n\t\t\tautoappear: false,\n\t\t\tautoelements: false,\n\t\t\tappearparents: false,\n\t\t\tcsspath: '',\n\t\t\tanimatecsspath: {\n\t\t\t\tlink : 'https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css',\n\t\t\t\tcompat : 'https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.compat.css',\n\t\t\t},\n\t\t\tcompatibility: false,\n\t\t\tcompatibilitybaseclass: 'animated'\n\t\t};\n\n\t\toptions = mergeDeep(defaultOptions, deck.getConfig().appearance || {});\n\n\t\treturn Appear(deck, options, \"appearance.js\");\n\t};\n\n\treturn { id: 'appearance', init: init };\n};\n\nexport default Plugin;","import { toJSONString } from '../helpers';\n\n\n/**\n * Adds automatic animations to elements within a section based on specified criteria.\n *\n * This function examines the provided section for attributes and options to determine\n * which classes should be added to its elements to enable automatic animations.\n *\n * @param {HTMLElement} section - The section element to which automatic animations will be applied.\n * @param {Object} options - The existing user options object\n * @param {Object} vars - The existing vars object\n * @returns {undefined}\n */\nexport const addAutoAnimation = (section, options, vars) => {\n\n\tlet sectionAutoSelectors = null;\n\n\tif (section.hasAttribute(\"data-autoappear\")) {\n\n\t\tlet sectDataAppear = section.dataset.autoappear;\n\n\t\tif (sectDataAppear == \"auto\" || sectDataAppear == \"\" || sectDataAppear.length < 1 || sectDataAppear == \"true\") {\n\t\t\t// This section should get the global autoappear classes on its objects\n\t\t\tsectionAutoSelectors = options.autoelements ? options.autoelements : null;\n\t\t} else {\n\t\t\t// This section should get the local autoappear classes on its objects\n\t\t\tsectionAutoSelectors = sectDataAppear;\n\t\t}\n\n\t} else if ( options.autoappear && options.autoelements ) {\n\t\t// This section should get the global autoappear classes on its objects\n\t\tsectionAutoSelectors = options.autoelements;\n\t}\n\n\tif (sectionAutoSelectors) {\n\n\t\tlet elementsToAnimate = JSON.parse(toJSONString(sectionAutoSelectors));\n\n\t\tObject.entries(elementsToAnimate).forEach(([selector, assignables]) => {\n\n\n\t\t\t// Exclude the elements from vars.appearances\n\t\t\tlet elements = Array.from(section.querySelectorAll(selector)).filter( element => !vars.appearances.includes(element) );\n\n\t\t\tif (elements.length) {\n\n\t\t\t\telements.forEach((element) => {\n\n\t\t\t\t\tvars.appearances.push(element)\n\n\t\t\t\t\tlet newClasses = [], newDelay = null, speedClass = false, elementSplit = null, containerDelay = null;\n\n\t\t\t\t\tif (Array.isArray(assignables)) {\n\n\t\t\t\t\t\tnewClasses = assignables[0].split(/[ ,]+/);\n\t\t\t\t\t\tnewDelay = assignables[1];\n\n\t\t\t\t\t} else if (typeof assignables == \"string\"){\n\n\t\t\t\t\t\tnewClasses = assignables.split(/[ ,]+/);\n\n\t\t\t\t\t} else if (assignables.constructor === Object) {\n\n\t\t\t\t\t\tif (assignables.class || assignables.animation) {\n\t\t\t\t\t\t\tlet animationClass = assignables.animation ? assignables.animation : assignables.class;\n\t\t\t\t\t\t\tnewClasses = animationClass.split(/[ ,]+/);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables.speed) {\n\t\t\t\t\t\t\tspeedClass = String(assignables.speed);\n\t\t\t\t\t\t\tif (!speedClass.includes(\"animate__\")) {\n\t\t\t\t\t\t\t\tspeedClass = `animate__${speedClass}`\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables.delay) {\n\t\t\t\t\t\t\tnewDelay = String(assignables.delay);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables.split) {\n\t\t\t\t\t\t\telementSplit = String(assignables.split);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables[\"container-delay\"]) {\n\t\t\t\t\t\t\tcontainerDelay = String(assignables[\"container-delay\"]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telement.classList.add(...newClasses);\n\t\t\t\t\tif (speedClass) { element.classList.add(speedClass)}\n\n\t\t\t\t\tif (newDelay) {\n\t\t\t\t\t\tif (!element.dataset.delay) {\n\t\t\t\t\t\t\telement.dataset.delay = newDelay\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (elementSplit) {element.dataset.split = elementSplit};\n\t\t\t\t\tif (containerDelay) {element.dataset.containerDelay = containerDelay};\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","/**\n * Adds a base class to an HTML element if it doesn't already have it.\n *\n * This function checks if the specified HTML element has the specified base class,\n * and if not, it adds the base class to the element's class list.\n *\n * @param {HTMLElement} appearance - The HTML element to which the base class should be added.\n * @param {Object} names - The existing 'names' object\n * @returns {undefined}\n */\n\nexport const addBaseClass = (appearance, names) => {\n\tif (!appearance.classList.contains(names.baseclass)) {\n\t\tappearance.classList.add(names.baseclass);\n\t}\n\tif (appearance.classList.contains(names.fragmentClass)) {\n\t\tappearance.classList.add('custom');\n\t}\n}\n","export const convertToSpans = (parent, kind) => {\n\n\tlet splitElements = false;\n\tlet joinChar = ' ';\n\n\tif (kind == \"words\") {\n\t\tsplitElements = parent.textContent.trim().split(/\\s+/);\n\t\t\n\t} else if (kind == \"letters\") {\n\t\tsplitElements = parent.textContent.trim().split('');\n\t\tjoinChar = '';\n\t}\n\n\tif (splitElements) {\n\t\tconst parentAnimateClasses = Array.from(parent.classList).filter(className => className.startsWith('animate__'));\n\t\n\t\tconst newHtml = splitElements.map((element, index) => {\n\t\t\tconst span = document.createElement('span');\n\t\t\tspan.textContent = element;\n\t\t\tif (element == \" \") {span.textContent = \"\\u00A0\"}\n\t\n\t\t\tif (parent.dataset.delay && index !== 0) {\n\t\t\t\tspan.dataset.delay = parent.dataset.delay\n\t\t\t}\n\n\t\t\tif (parent.dataset.containerDelay && index === 0) {\n\t\t\t\tspan.dataset.delay = parent.dataset.containerDelay\n\t\t\t}\n\t\n\t\t\tparent.classList.forEach(className => className.startsWith('animate__') && span.classList.add(className));\n\t\t\treturn span.outerHTML;\n\t\t\t\n\t\t}).join(joinChar);\n\t\n\t\tparentAnimateClasses.forEach(className => parent.classList.remove(className));\n\t\tparent.removeAttribute('data-delay');\n\t\tparent.removeAttribute('data-split');\n\t\tparent.removeAttribute('data-container-delay');\n\t\n\t\tparent.innerHTML = newHtml;\n\t}\n\n\n};","export const addDelay = (appearanceArray, options, names) => {\n\n let delay = 0;\n appearanceArray.forEach((appearance, index) => {\n\n if ((index == 0 && appearance.dataset.delay) || index !=0) {\n\n let elementDelay = options.delay;\n\n if (appearance.dataset && appearance.dataset.delay) {\n elementDelay = parseInt(appearance.dataset.delay);\n }\n\n delay = delay + elementDelay;\n\n appearance.style.setProperty('animation-delay', delay + \"ms\");\n appearance.removeAttribute('data-delay');\n }\n\n })\n\n}\n"],"names":["isObject","item","Array","isArray","mergeDeep","target","sources","length","source","shift","key","Object","assign","toJSONString","str","JSONString","replace","JSON","parse","e","isJSON","stringify","trim","charAt","loadResource","url","type","callback","resource","head","document","querySelector","alreadyExists","createElement","src","rel","href","finish","call","onload","onreadystatechange","this","readyState","appendChild","debugLog","options","text","debug","console","log","getAndLoadCSS","fileName","thePath","path","pluginScript","getAttribute","slice","lastIndexOf","pluginPath","pluginBaseName","AppearanceStylePath","csspath","appearance","AnimateCSSPath","compatibility","animatecsspath","compat","link","hoistAppearance","from","baseclass","to","parentNode","sibling","children","dataset","appearParent","classList","copyDataAttributes","attributes","not","filter","nodeName","includes","forEach","nodeValue","setAttribute","innerHTML","add","elemsNotInClass","targetClass","excludeClass","el","querySelectorAll","s","closest","getAppearanceArrays","section","groupClass","result","map","frag","elemsInClass","parentClass","some","group","removeStartAttribute","slides","hideagain","appearanceCanStart","removeAttribute","turnOffSlideAppearances","names","fromAppearances","animatecss","remove","fromFragments","fragment","Plugin","vars","prepare","resolve","es5Filename","compatibilitybaseclass","appearances","regularSections","theSection","addAutoAnimation","sectionAutoSelectors","hasAttribute","sectDataAppear","autoappear","autoelements","elementsToAnimate","entries","selector","assignables","elements","element","push","newClasses","newDelay","speedClass","elementSplit","containerDelay","split","constructor","class","animation","speed","String","delay","theAppearance","index","fixListItem","appearparents","tagName","outerHTML","addBaseClass","contains","fragmentClass","convertToSpans","parent","kind","splitElements","joinChar","textContent","parentAnimateClasses","className","startsWith","newHtml","span","join","appearanceArrays","appearanceArray","addDelay","elementDelay","parseInt","style","setProperty","setTimeout","doneLoading","Appear","deck","fragmentSelector","speedClasses","eventnames","dom","getRevealElement","viewport","getViewportElement","getSlidesElement","sections","fragments","isStack","childNodes","i","test","window","location","search","eventname","on","event","showHideSlide","getConfig","view","isScroll","etype","fromSlide","previousSlide","toSlide","currentSlide","fromTo","appearevent","slideAppearevent","body","exitoverview","addEventListener","Promise","id","init"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"appearance.esm.js","sources":["../../../src/plugin/js/helpers.js","../../../src/plugin/js/functions/get-load-css.js","../../../src/plugin/js/functions/fix-list-item.js","../../../src/plugin/js/functions/get-appearance-arrays.js","../../../src/plugin/js/functions/show-hide-slide.js","../../../src/plugin/js/plugin.js","../../../src/plugin/js/functions/add-auto-animation.js","../../../src/plugin/js/functions/add-base-class.js","../../../src/plugin/js/functions/convert-to-spans.js","../../../src/plugin/js/functions/add-delay.js"],"sourcesContent":["/**\n * Check if a given string is valid JSON.\n * @param {string} str - The string to be checked.\n * @returns {boolean} `true` if the string is valid JSON, otherwise `false`.\n */\nexport const isJSON = str => {\n\ttry {\n\t\treturn (JSON.parse(str) && !!str);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\n/**\n * Convert a NodeList into an array based on provided selectors.\n * @param {Element} container - The root element to begin querying.\n * @param {string} selectors - A string containing one or more CSS selectors separated by commas.\n * @returns {Element[]} Array of elements that match the given selectors.\n */\nexport const selectionArray = (container, selectors) => {\n\tlet selections = container.querySelectorAll(selectors);\n\tlet selectionarray = Array.prototype.slice.call(selections);\n\treturn selectionarray;\n};\n\n/**\n * Check if an element has child nodes that are `SECTION` elements.\n * @param {Object} param0 - Object with childNodes property.\n * @param {NodeListOf} param0.childNodes - List of child nodes of the element.\n * @returns {boolean} `true` if the element contains `SECTION` child nodes, otherwise `false`.\n */\nexport const isStack = ({childNodes}) => {\n\tlet isStack = false;\n\tfor (let i = 0; i < childNodes.length; i++) {\n\t\tif (childNodes[i].tagName == \"SECTION\") {\n\t\t\tisStack = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn isStack;\n};\n\n/**\n * Copy data attributes from a source element to a target element with an optional exception.\n * @param {Object} param0 - Object with attributes property.\n * @param {NamedNodeMap} param0.attributes - Map of attributes of the source element.\n * @param {Element} target - Target element to copy attributes to.\n * @param {string} [not] - Optional attribute name to exclude from copying.\n */\nexport const copyDataAttributes = ({attributes}, target, not) => {\n\t[...attributes].filter(({nodeName}) => nodeName.includes('data')).forEach(({nodeName, nodeValue}) => {\n\t\tif ((not && nodeName !== not) || !not) {\n\t\t\ttarget.setAttribute(nodeName, nodeValue);\n\t\t}\n\t});\n};\n\n/**\n * Check if the given item is an object and not an array.\n * @param {*} item - The item to be checked.\n * @returns {boolean} `true` if the item is an object and not an array, otherwise `false`.\n */\nexport const isObject = (item) => {\n\treturn (item && typeof item === 'object' && !Array.isArray(item));\n}\n\n/**\n * Deep merge multiple objects into a target object.\n * @param {Object} target - Target object to merge values into.\n * @param {...Object} sources - Source objects to merge from.\n * @returns {Object} The merged object.\n */\nexport const mergeDeep = (target, ...sources) => {\n\tif (!sources.length) return target;\n\tconst source = sources.shift();\n\n\tif (isObject(target) && isObject(source)) {\n\t\tfor (const key in source) {\n\t\t\tif (isObject(source[key])) {\n\t\t\t\tif (!target[key]) Object.assign(target, { [key]: {} });\n\t\t\t\tmergeDeep(target[key], source[key]);\n\t\t\t} else {\n\t\t\t\tObject.assign(target, { [key]: source[key] });\n\t\t\t}\n\t\t}\n\t}\n\treturn mergeDeep(target, ...sources);\n}\n\n/**\n * Resolves the given Promise immediately using setTimeout.\n * @param {Function} resolve - The resolve function of a Promise.\n * @returns {number} The ID value of the timer that is set.\n */\nexport const doneLoading = (resolve) => {\n\treturn setTimeout(resolve, 0);\n}\n\n\n/**\n * Converts a JavaScript object or a JSON-formatted string to a JSON string.\n *\n * @param {Object|string} str - The input string or object to be converted to a JSON string.\n * @returns {string} The JSON string.\n */\nexport const toJSONString = (str) => {\n\tlet JSONString = ''\n\n\tif (typeof str === \"string\") str = str.replace(/[“”]/g,'\"').replace(/[‘’]/g,\"'\");\n\n\tif (isJSON(str)) {\n\t\tJSONString = str\n\t} else {\n\t\tif (typeof str === \"object\") {\n\t\t\tJSONString = JSON.stringify(str, null, 2)\n\t\t} else {\n\t\t\tJSONString = str.trim().replace(/'/g, '\"').charAt(0) === \"{\" ? str.trim().replace(/'/g, '\"') : `{${str.trim().replace(/'/g, '\"')}}`;\n\t\t}\n\t}\n\treturn JSONString;\n}\n\n\n/**\n * Dynamically loads a resource from the specified URL and calls a callback function when it's loaded.\n * Will not load the resource if it has already been loaded.\n *\n * @param {string} url - The URL of the resource to load.\n * @param {string} type - The type of resource to load.\n * @param {Function} callback - A callback function to be called when the resource is loaded.\n */\n\nexport const loadResource = (url, type, callback) => {\n\tlet head = document.querySelector('head');\n\tlet resource;\n\tlet alreadyExists = false;\n\n\tif (type === 'script') {\n\t\tif (!document.querySelector(`script[src=\"${url}\"]`)) {\n\t\t\tresource = document.createElement('script');\n\t\t\tresource.type = 'text/javascript';\n\t\t\tresource.src = url;\n\t\t} else { alreadyExists = true }\n\n\t} else if (type === 'stylesheet') {\n\n\t\tif (!document.querySelector(`link[href=\"${url}\"]`)) {\n\t\t\tresource = document.createElement('link');\n\t\t\tresource.rel = 'stylesheet';\n\t\t\tresource.href = url;\n\t\t} else { alreadyExists = true }\n\t}\n\n\tif (!alreadyExists) {\n\t\tconst finish = () => {\n\t\t\tif (typeof callback === 'function') {\n\t\t\tcallback.call();\n\t\t\tcallback = null;\n\t\t\t}\n\t\t};\n\t\tresource.onload = finish;\n\t\tresource.onreadystatechange = function () {\n\t\t\tif (this.readyState === 'loaded') {\n\t\t\t\tfinish();\n\t\t\t}\n\t\t};\n\t\thead.appendChild(resource);\n\t}\n}\n\n\n/**\n * Retrieves the path of a JavaScript file based on its filename.\n *\n * @param {string} fileName - The filename of the script.\n * @returns {string} The path to the plugin's location.\n */\nexport const pluginPath = (fileName) => {\n\tlet path;\n\tlet pluginScript = document.querySelector(`script[src$=\"${fileName}\"]`);\n\tif (pluginScript) {\n\t\tpath = pluginScript.getAttribute(\"src\").slice(0, -1 * (fileName.length));\n\t} else {\n\t\tpath = import.meta.url.slice(0, import.meta.url.lastIndexOf('/') + 1);\n\t}\n\treturn path;\n}\n\n\n/**\n * Check if element 'a' appears before element 'b' in the DOM tree.\n *\n * @param {HTMLElement} a - The first HTML element to compare.\n * @param {HTMLElement} b - The second HTML element to compare.\n * @returns {boolean|undefined} - Returns `true` if element 'a' appears before element 'b', `false` if 'b' appears before 'a', and `undefined` if the elements have no relative position in the DOM tree.\n */\nexport const isBefore = (a, b) => {\n var all = document.getElementsByTagName('*');\n\n for (var i = 0; i < all.length; ++i) {\n if (all[i] === a) {\n return true;\n } else if (all[i] === b) {\n return false;\n }\n }\n // If the elements have no relative position in the DOM tree\n return undefined;\n};\n\n\n/**\n * Check the number of occurrences of a specific element in an array.\n *\n * @param {Array} array - The array in which occurrences are to be counted.\n * @param {*} element - The element to be counted within the array.\n * @returns {number} - The count of occurrences of the specified element in the array.\n */\nexport const checkOccurrence = (array, element) => {\n let counter = 0;\n for (let i = 0; i < array.length; i++) {\n if (array[i] == element) {\n counter++;\n }\n }\n return counter;\n};\n\n\n/**\n * Create an HTML element from a string of HTML.\n *\n * @param {string} thehtml - The string of HTML to be converted into an HTML element.\n * @returns {HTMLElement | null} - The HTML element created from the provided HTML string. Returns `null` if the element couldn't be created.\n */\nexport const createNode = (thehtml) => {\n const fragment = document.createRange().createContextualFragment(thehtml);\n return fragment.firstElementChild;\n};\n\n\n/**\n * Gets the index of the given DOM element within its parent's children.\n * @param {HTMLElement} elm - The target element.\n * @returns {number} - The index of the element within its parent's children.\n */\nexport const getNodeIndex = (elm) => [...elm.parentNode.children].indexOf(elm);\n\n\nexport const debugLog = (options, text) => {\n\tif (options.debug) console.log(text);\n}\n\n","import { loadResource } from '../helpers';\nimport { pluginPath } from '../helpers';\n\n/**\n * Retrieves and loads CSS stylesheets based on the provided options and ES5 filename.\n *\n * @param {Object} options - Configuration options for loading CSS.\n * @param {string} fileName - The filename of the script.\n */\n\nexport const getAndLoadCSS = (options, fileName) => {\n\tlet thePath = pluginPath(fileName);\n\tlet pluginBaseName = fileName.replace(/\\.[^/.]+$/, \"\");\n\n\tif (options.cssautoload) {\n\t\tlet AppearanceStylePath = options.csspath.appearance ? options.csspath.appearance : null || `${thePath}${pluginBaseName}.css` || `plugin/${pluginBaseName}/${pluginBaseName}.css`\n\t\tlet AnimateCSSPath = !options.compatibility ? options.animatecsspath.link : options.animatecsspath.compat;\n\t\n\t\tif (options.debug) {\n\t\t\tconsole.log(`Paths:`);\n\t\t\tconsole.log(` - Plugin path = ${thePath}`);\n\t\t\tconsole.log(` - Appearance CSS path = ${AppearanceStylePath}`);\n\t\t\tconsole.log(` - AnimateCSS CSS path = ${AnimateCSSPath}`);\n\t\t}\n\t\n\t\tloadResource(AnimateCSSPath, 'stylesheet', function () {\n\t\t\tloadResource(AppearanceStylePath, 'stylesheet');\n\t\t});\n\t}\n}","import { copyDataAttributes } from '../helpers';\n\n/**\n * Hoist a list item's appearance to its parent element's appearance.\n *\n * @param {HTMLElement} from - The list item element.\n * @returns {undefined}\n */\nconst hoistAppearance = (from, baseclass) => {\n\tlet to = from.parentNode;\n\tif (!to) return;\n \n\tfor (const sibling of to.children) {\n\t if (sibling !== from && sibling.dataset.appearParent) return;\n\t}\n \n\tto.classList = from.classList;\n\tcopyDataAttributes(from, to, \"data-appear-parent\");\n\tto.innerHTML = from.innerHTML;\n\tto.classList.add(baseclass);\n};\n\n\n/**\n * Fix list items that were changed by Quarto.\n *\n * This function is designed for use with Quarto and handles the conversion of list items\n * with Appearance classes to their parent elements when a manual attribute is present.\n * It also provides automatic conversion for list items that directly contain spans, which\n * is related to Quarto's wrapping of list content in a span.\n *\n * @param {HTMLElement} appearance - The list item element whose appearance will be converted.\n * @param {Object} options - An options object that controls the conversion behavior.\n * @param {boolean} options.appearparents - If `true`, automatic conversion of list items with spans is enabled.\n * @returns {undefined}\n */\nexport const fixListItem = (appearance, options, names) => {\n\n\tlet baseclass = names.baseclass\n\tif (appearance.hasAttribute(\"data-appear-parent\")) {\n\t\thoistAppearance(appearance, baseclass);\n\t}\n\n\tif (options.appearparents) {\n\t\tif (appearance.parentNode && appearance.parentNode.tagName) {\n\t\t\tif (appearance.tagName == \"SPAN\" && appearance.parentNode.tagName == \"LI\") {\n\t\t\t\tlet spanLength = String(appearance.outerHTML).length;\n\t\t\t\tlet liContentLength = String(appearance.parentNode.innerHTML).length;\n\t\t\t\tif (spanLength == liContentLength) {\n\t\t\t\t\thoistAppearance(appearance);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Selects elements with a specified class that are not nested inside an element with another specified class.\n * @param {string} targetClass - The class name to select elements.\n * @param {string} excludeClass - The class name to exclude elements nested inside it.\n * @param {Element} el - The element to find the target elements in.\n * @returns {Element[]} - Array of selected elements.\n */\nconst elemsNotInClass = (targetClass, excludeClass, el) => \n Array.from(el.querySelectorAll(`.${targetClass}`))\n .filter(s => !s.closest(`.${excludeClass}`));\n\n/**\n * Selects elements with a specified class that are nested inside an element with another specified class.\n * @param {string} targetClass - The class name to select elements.\n * @param {string} parentClass - The class name of the parent to find elements in.\n * @param {Element} el - The element to find the target elements in.\n * @returns {Element[]} - Array of selected elements.\n */\nconst elemsInClass = (targetClass, parentClass, el) =>\n Array.from(el.querySelectorAll(`.${targetClass}`))\n .filter(s => s.closest(`.${parentClass}`) === el);\n\n/**\n * Extracts groups of elements with a specified class from the provided section element.\n * Groups are formed based on nesting inside elements with another specified class.\n * @param {Element} section - The section to extract data from.\n * @returns {Element[][]} - Nested arrays of selected elements.\n */\n\n\n/**\n * Extracts groups of elements with a specified class from the provided section element.\n * Groups are formed based on nesting inside elements with another specified class.\n * @param {Element} section - The section to extract data from.\n * @param {string} targetClass - The class name to select elements.\n * @param {string} groupClass - The class name of the parent to find elements in.\n * @returns {Element[][]} - Nested arrays of selected elements.\n */\nexport const getAppearanceArrays = (section, targetClass, groupClass) => {\n const result = [\n elemsNotInClass(targetClass, groupClass, section), \n ...Array.from(section.querySelectorAll(`.${groupClass}`))\n .map(frag => elemsInClass(targetClass, groupClass, frag))\n ];\n\n\tif (result.some(group => group.length > 0)) {\n return result;\n } else {\n\t\treturn false;\n\t}\n};\n","/**\n * Derives slide from and to from the event object.\n *\n * @param {Object} event - The event object containing slide transition details.\n * @returns {Object} - An object containing references to the \"from\" and \"to\" slides.\n */\nconst fromTo = (event) => {\n\tlet slides = {};\n\tslides.from = event.fromSlide || event.previousSlide || null;\n\tslides.to = event.toSlide || event.currentSlide || null;\n\treturn slides;\n};\n\n/**\n * A function that determines the appearance event for a given slide.\n *\n * This function checks the `data-appearevent` attribute of the slide and the `options.appearevent` parameter.\n * If `data-appearevent` is set to \"auto\", it is converted to \"autoanimate\". If `options.appearevent` is \"auto\", it is also converted to \"autoanimate\".\n * The function returns the appearance event, prioritizing `data-appearevent` over `options.appearevent`.\n *\n * @param {HTMLElement} toSlide - The slide for which the appearance event is determined.\n * @param {Object} options - An object containing options for the appearance event.\n * @param {string} options.appearevent - The appearance event option provided in the `options` object.\n *\n * @returns {string} - The determined appearance event for the slide, either from `data-appearevent` or `options.appearevent`.\n */\nconst slideAppearevent = (toSlide, options) => {\n\n\tif (toSlide.dataset.appearevent && toSlide.dataset.appearevent === \"auto\" ) {\n\t\ttoSlide.dataset.appearevent = \"autoanimate\"\n\t}\n\tif (options.appearevent == \"auto\") {options.appearevent = \"autoanimate\"}\n\treturn toSlide.dataset.appearevent ? toSlide.dataset.appearevent : options.appearevent;\n};\n\n/**\n * Remove the 'data-appearance-can-start' attribute from the 'from' slide if the 'hideagain' option is enabled.\n *\n * @param {HTMLElement} slides - The container element for the slides.\n * @param {Object} options - An object containing configuration options.\n * @param {boolean} options.hideagain - A flag indicating whether to remove the attribute when 'hideagain' is true.\n */\nconst removeStartAttribute = (slides, options) => {\n\tif (options.hideagain) {\n\t\tif (slides.from && slides.from.dataset.appearanceCanStart ) {\n\t\t\tslides.from.removeAttribute('data-appearance-can-start');\n\t\t}\n\t}\n};\n\n\n/**\n * Turn off slide appearances when transitioning from one slide to another if the 'hideagain' option is enabled.\n *\n * @param {HTMLElement} slides - The container element for the slides.\n * @param {Object} options - An object containing configuration options.\n * @param {string} names.animatecss - The CSS selector for animated elements.\n */\nconst turnOffSlideAppearances = (slides, options, names) => {\n\tif (options.hideagain) {\n\t\tif (slides && slides.from) {\n\n\t\t\t// Remove animationended class from animated elements when moving away from that slide\n\t\t\tlet fromAppearances = slides.from.querySelectorAll(names.animatecss);\n\t\t\tif (fromAppearances) {\n\t\t\t\tfromAppearances.forEach( appearance => {\n\t\t\t\t\tappearance.classList.remove('animationended');\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Remove visible class from fragments when moving away from that slide\n\t\t\tlet fromFragments = slides.from.querySelectorAll(`.fragment.visible`);\n\t\t\tif (fromFragments) {\n\t\t\t\tfromFragments.forEach(fragment => {\n\t\t\t\t\tfragment.classList.remove('visible');\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n/**\n * Handles the showing and hiding of slides based on the provided event and options.\n *\n * @param {Object} event - The event object containing slide transition details.\n * @param {Object} options - An object containing configurations for slide appearance management.\n */\nexport const showHideSlide = (event, options, names, vars) => {\n\n\tlet view = vars.deck.getConfig().view;\n\tlet isScroll = vars.viewport.classList.contains(\"reveal-scroll\");\n\tlet etype = event.type;\n\tlet slides = fromTo(event);\n\n\tif (slides.to) {\n\n\t\tif (etype == \"ready\") {\n\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t}\n\n\t\tlet appearevent = slideAppearevent(slides.to, options)\n\n\t\tif (etype == appearevent || (etype == \"slidetransitionend\" && appearevent == \"autoanimate\")) {\n\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t}\n\n\t\t// Add scroll mode compatibility, does not have a slidetransitionend event yet\n\t\tif (isScroll && etype == 'slidechanged' ) {\n\n\t\t\tremoveStartAttribute(slides, options);\n\t\t\tturnOffSlideAppearances(slides, options, names);\n\n\t\t\t// Add delay to allow for scroll animation to finish\n\t\t\tsetTimeout(() => {\n\t\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t\t}, options.delay)\n\t\t}\n\n\n\t\tif (etype == \"slidetransitionend\" ) {\n\n\t\t\tremoveStartAttribute(slides, options);\n\t\t\tturnOffSlideAppearances(slides, options, names);\n\t\t}\n\t\t\n\t\tif (etype == 'slidechanged' && document.body.dataset.exitoverview) {\n\t\t\tremoveStartAttribute(slides, options);\n\t\t\tslides.to.dataset.appearanceCanStart = true;\n\n\t\t} else if (etype == 'overviewhidden' ) {\n\n\t\t\tdocument.body.dataset.exitoverview = true;\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tdocument.body.removeAttribute('data-exitoverview')\n\t\t\t}, 500)\n\n\t\t\tif (event.currentSlide ) {\n\t\t\t\tremoveStartAttribute(slides, options);\n\t\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t\t}\n\t\t}\n\t}\n}","import { debugLog, mergeDeep, doneLoading, isStack } from './helpers';\n\nimport {getAndLoadCSS} from './functions/get-load-css.js';\nimport {addAutoAnimation} from './functions/add-auto-animation.js';\nimport {fixListItem} from './functions/fix-list-item';\nimport {addBaseClass} from './functions/add-base-class.js';\nimport {addDelay} from './functions/add-delay.js';\nimport {getAppearanceArrays} from './functions/get-appearance-arrays.js';\nimport {convertToSpans} from './functions/convert-to-spans';\nimport {showHideSlide} from './functions/show-hide-slide.js';\n\n\nconst Plugin = () => {\n\n\tconst vars = {};\n\tvars.names = {};\n\tlet options = {};\n\n\t/**\n\t* Prepare the plugin to find Appearance elements\n\t* @param {Object} vars - The variables to be prepared.\n\t* @param {Object} names - The names to be prepared.\n\t* @param {Function} resolve - The callback function to be called when preparation is complete.\n\t* @throws {Error} Throws an error if the 'options' object is not defined.\n\t*/\n\tconst prepare = (options, vars, resolve) => {\n\n\t\tdebugLog(options, \"------------- Preloading -------------\");\n\n\t\tlet names = vars.names;\n\n\t\tgetAndLoadCSS(options, names.es5Filename);\n\n\t\tif (options.compatibility) {\n\t\t\tnames.animatecss = '.backInDown, .backInLeft, .backInRight, .backInUp, .bounceIn, .bounceInDown, .bounceInLeft, .bounceInRight, .bounceInUp, .fadeIn, .fadeInDown, .fadeInDownBig, .fadeInLeft, .fadeInLeftBig, .fadeInRight, .fadeInRightBig, .fadeInUp, .fadeInUpBig, .fadeInTopLeft, .fadeInTopRight, .fadeInBottomLeft, .fadeInBottomRight, .flipInX, .flipInY, .lightSpeedInRight, .lightSpeedInLeft, .rotateIn, .rotateInDownLeft, .rotateInDownRight, .rotateInUpLeft, .rotateInUpRight, .jackInTheBox, .rollIn, .zoomIn, .zoomInDown, .zoomInLeft, .zoomInRight, .zoomInUp, .slideInDown, .slideInLeft, .slideInRight, .slideInUp, .skidLeft, .skidLeftBig, .skidRight, .skidRightBig, .shrinkIn, .shrinkInBlur';\n\t\t\tnames.baseclass = options.compatibilitybaseclass\n\t\t}\n\n\t\tvars.appearances = Array.from(vars.slides.querySelectorAll(names.animatecss));\n\n\t\t// Go through each section to see if there are any (auto) selectors that need animation classes\n\t\tvars.regularSections.forEach(theSection => addAutoAnimation(theSection, options, vars));\n\n\t\tvars.appearances.forEach((theAppearance, index) => {\n\t\t\t// Fix any list item where the Appearance classes were moved to the span (Quarto does this)\n\t\t\tfixListItem(theAppearance, options, names);\n\n\t\t\t// Go through each appearance element and add the baseclass if it doesn't have it\n\t\t\taddBaseClass(theAppearance, names);\n\n\t\t\tif (theAppearance.hasAttribute('data-split')) {\n\t\t\t\tconvertToSpans(theAppearance, theAppearance.dataset.split);\n\t\t\t}\n\t\t});\n\n\t\tvars.regularSections.forEach((theSection, index) => {\n\t\t\t// Get all the Appearances in the section as separate arrays per delay loop\n\t\t\tlet appearanceArrays = getAppearanceArrays(theSection, names.baseclass, names.fragmentClass);\n\n\t\t\tif (appearanceArrays) {\n\t\t\t\tappearanceArrays.forEach((appearanceArray) => {\n\t\t\t\t\t// Add the delays to each appearance in the array\n\t\t\t\t\taddDelay(appearanceArray, options, names)\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\tdoneLoading(resolve);\n\t}\n\n\t/**\n\t* The main function of the plugin\n\t* @param {object} deck - The deck object\n\t* @param {object} options - The options object\n\t* @param {string} es5Filename - The name of the file that will be used\n\t*/\n\tconst Appear = (deck, options, es5Filename) => {\n\n\t\tlet names = vars.names;\n\n\t\t// Set up names\n\t\tnames.baseclass = options.baseclass;\n\t\tnames.compatibilitybaseclass = options.compatibilitybaseclass;\n\t\tnames.fragmentSelector = \".fragment\";\n\t\tnames.fragmentClass = \"fragment\";\n\t\tnames.speedClasses = ['slower', 'slow', 'fast', 'faster'];\n\t\tnames.speedClasses.push(...names.speedClasses.map(speed => `animate__${speed}`));\n\t\tnames.animatecss = '[class^=\"animate__\"],[class*=\" animate__\"]';\n\t\tnames.es5Filename = es5Filename;\n\t\tnames.eventnames = ['ready', 'slidechanged', 'slidetransitionend', 'autoanimate', 'overviewhidden'];\n\t\n\t\t// Set up variables\n\t\tvars.deck = deck;\n\t\tvars.dom = deck.getRevealElement();\n\t\tvars.viewport = deck.getViewportElement();\n\t\tvars.slides = deck.getSlidesElement();\n\n\t\tvars.sections = vars.slides.querySelectorAll('section');\n\t\tvars.fragments = vars.slides.querySelectorAll(names.fragmentSelector);\n\t\tvars.regularSections = Array.from(vars.sections).filter( section => !isStack(section));\n\n\t\t// Check if Speaker view window\n\t\tif( /receiver/i.test( window.location.search ) ) vars.viewport.classList.add('sv');\n\n\t\tnames.eventnames.forEach( (eventname) => deck.on( eventname, event => { showHideSlide(event, options, names, vars) } ) );\n\n\t\tvars.viewport.addEventListener(\"animationend\", (event) => {\n\t\t\tevent.target.classList.add('animationended');\n\t\t});\n\t\tvars.viewport.addEventListener(\"fragmenthidden\", (event) => {\n\t\t\tevent.fragment.classList.remove('animationended');\n\t\t\tevent.fragment.querySelectorAll('.animationended').forEach(el => {\n\t\t\t\tel.classList.remove('animationended');\n\t\t\t});\n\t\t});\n\n\t\treturn new Promise(resolve => {\n\t\t\tprepare(options, vars, resolve);\n\t\t\tdebugLog(options, \"---------- Done preloading ----------\");\n\t\t});\n\t};\n\n\n\t/**\n\t* Initialize the plugin\n\t* @param {object} deck - The deck object\n\t*/\n\tconst init = (deck) => {\n\n\t\tlet defaultOptions = {\n\t\t\tbaseclass: 'animate__animated',\n\t\t\thideagain: true,\n\t\t\tdelay: 300,\n\t\t\tdebug: false,\n\t\t\tappearevent: 'slidetransitionend',\n\t\t\tautoappear: false,\n\t\t\tautoelements: false,\n\t\t\tappearparents: false,\n\t\t\tcssautoload: true,\n\t\t\tcsspath: '',\n\t\t\tanimatecsspath: {\n\t\t\t\tlink : 'https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css',\n\t\t\t\tcompat : 'https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.compat.css',\n\t\t\t},\n\t\t\tcompatibility: false,\n\t\t\tcompatibilitybaseclass: 'animated'\n\t\t};\n\n\t\toptions = mergeDeep(defaultOptions, deck.getConfig().appearance || {});\n\n\t\treturn Appear(deck, options, \"appearance.js\");\n\t};\n\n\treturn { id: 'appearance', init: init };\n};\n\nexport default Plugin;","import { toJSONString } from '../helpers';\n\n\n/**\n * Adds automatic animations to elements within a section based on specified criteria.\n *\n * This function examines the provided section for attributes and options to determine\n * which classes should be added to its elements to enable automatic animations.\n *\n * @param {HTMLElement} section - The section element to which automatic animations will be applied.\n * @param {Object} options - The existing user options object\n * @param {Object} vars - The existing vars object\n * @returns {undefined}\n */\nexport const addAutoAnimation = (section, options, vars) => {\n\n\tlet sectionAutoSelectors = null;\n\n\tif (section.hasAttribute(\"data-autoappear\")) {\n\n\t\tlet sectDataAppear = section.dataset.autoappear;\n\n\t\tif (sectDataAppear == \"auto\" || sectDataAppear == \"\" || sectDataAppear.length < 1 || sectDataAppear == \"true\") {\n\t\t\t// This section should get the global autoappear classes on its objects\n\t\t\tsectionAutoSelectors = options.autoelements ? options.autoelements : null;\n\t\t} else {\n\t\t\t// This section should get the local autoappear classes on its objects\n\t\t\tsectionAutoSelectors = sectDataAppear;\n\t\t}\n\n\t} else if ( options.autoappear && options.autoelements ) {\n\t\t// This section should get the global autoappear classes on its objects\n\t\tsectionAutoSelectors = options.autoelements;\n\t}\n\n\tif (sectionAutoSelectors) {\n\n\t\tlet elementsToAnimate = JSON.parse(toJSONString(sectionAutoSelectors));\n\n\t\tObject.entries(elementsToAnimate).forEach(([selector, assignables]) => {\n\n\n\t\t\t// Exclude the elements from vars.appearances\n\t\t\tlet elements = Array.from(section.querySelectorAll(selector)).filter( element => !vars.appearances.includes(element) );\n\n\t\t\tif (elements.length) {\n\n\t\t\t\telements.forEach((element) => {\n\n\t\t\t\t\tvars.appearances.push(element)\n\n\t\t\t\t\tlet newClasses = [], newDelay = null, speedClass = false, elementSplit = null, containerDelay = null;\n\n\t\t\t\t\tif (Array.isArray(assignables)) {\n\n\t\t\t\t\t\tnewClasses = assignables[0].split(/[ ,]+/);\n\t\t\t\t\t\tnewDelay = assignables[1];\n\n\t\t\t\t\t} else if (typeof assignables == \"string\"){\n\n\t\t\t\t\t\tnewClasses = assignables.split(/[ ,]+/);\n\n\t\t\t\t\t} else if (assignables.constructor === Object) {\n\n\t\t\t\t\t\tif (assignables.class || assignables.animation) {\n\t\t\t\t\t\t\tlet animationClass = assignables.animation ? assignables.animation : assignables.class;\n\t\t\t\t\t\t\tnewClasses = animationClass.split(/[ ,]+/);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables.speed) {\n\t\t\t\t\t\t\tspeedClass = String(assignables.speed);\n\t\t\t\t\t\t\tif (!speedClass.includes(\"animate__\")) {\n\t\t\t\t\t\t\t\tspeedClass = `animate__${speedClass}`\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables.delay) {\n\t\t\t\t\t\t\tnewDelay = String(assignables.delay);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables.split) {\n\t\t\t\t\t\t\telementSplit = String(assignables.split);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables[\"container-delay\"]) {\n\t\t\t\t\t\t\tcontainerDelay = String(assignables[\"container-delay\"]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telement.classList.add(...newClasses);\n\t\t\t\t\tif (speedClass) { element.classList.add(speedClass)}\n\n\t\t\t\t\tif (newDelay) {\n\t\t\t\t\t\tif (!element.dataset.delay) {\n\t\t\t\t\t\t\telement.dataset.delay = newDelay\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (elementSplit) {element.dataset.split = elementSplit};\n\t\t\t\t\tif (containerDelay) {element.dataset.containerDelay = containerDelay};\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","/**\n * Adds a base class to an HTML element if it doesn't already have it.\n *\n * This function checks if the specified HTML element has the specified base class,\n * and if not, it adds the base class to the element's class list.\n *\n * @param {HTMLElement} appearance - The HTML element to which the base class should be added.\n * @param {Object} names - The existing 'names' object\n * @returns {undefined}\n */\n\nexport const addBaseClass = (appearance, names) => {\n\tif (!appearance.classList.contains(names.baseclass)) {\n\t\tappearance.classList.add(names.baseclass);\n\t}\n\tif (appearance.classList.contains(names.fragmentClass)) {\n\t\tappearance.classList.add('custom');\n\t}\n}\n","export const convertToSpans = (parent, kind) => {\n\n\tlet splitElements = false;\n\tlet joinChar = ' ';\n\n\tif (kind == \"words\") {\n\t\tsplitElements = parent.textContent.trim().split(/\\s+/);\n\t\t\n\t} else if (kind == \"letters\") {\n\t\tsplitElements = parent.textContent.trim().split('');\n\t\tjoinChar = '';\n\t}\n\n\tif (splitElements) {\n\t\tconst parentAnimateClasses = Array.from(parent.classList).filter(className => className.startsWith('animate__'));\n\t\n\t\tconst newHtml = splitElements.map((element, index) => {\n\t\t\tconst span = document.createElement('span');\n\t\t\tspan.textContent = element;\n\t\t\tif (element == \" \") {span.textContent = \"\\u00A0\"}\n\t\n\t\t\tif (parent.dataset.delay && index !== 0) {\n\t\t\t\tspan.dataset.delay = parent.dataset.delay\n\t\t\t}\n\n\t\t\tif (parent.dataset.containerDelay && index === 0) {\n\t\t\t\tspan.dataset.delay = parent.dataset.containerDelay\n\t\t\t}\n\t\t\tparent.classList.add('wordchargroup');\n\t\n\t\t\tparent.classList.forEach(className => className.startsWith('animate__') && span.classList.add(className));\n\t\t\treturn span.outerHTML;\n\t\t\t\n\t\t}).join(joinChar);\n\t\n\t\tparentAnimateClasses.forEach(className => parent.classList.remove(className));\n\t\tparent.removeAttribute('data-delay');\n\t\tparent.removeAttribute('data-split');\n\t\tparent.removeAttribute('data-container-delay');\n\t\n\t\tparent.innerHTML = newHtml;\n\t}\n\n\n};","export const addDelay = (appearanceArray, options, names) => {\n\n let delay = 0;\n appearanceArray.forEach((appearance, index) => {\n\n if ((index == 0 && appearance.dataset.delay) || index !=0) {\n\n let elementDelay = options.delay;\n\n if (appearance.dataset && appearance.dataset.delay) {\n elementDelay = parseInt(appearance.dataset.delay);\n }\n\n delay = delay + elementDelay;\n\n appearance.style.setProperty('animation-delay', delay + \"ms\");\n appearance.removeAttribute('data-delay');\n }\n\n })\n\n}\n"],"names":["isObject","item","Array","isArray","mergeDeep","target","sources","length","source","shift","key","Object","assign","toJSONString","str","JSONString","replace","JSON","parse","e","isJSON","stringify","trim","charAt","loadResource","url","type","callback","resource","head","document","querySelector","alreadyExists","createElement","src","rel","href","finish","call","onload","onreadystatechange","this","readyState","appendChild","debugLog","options","text","debug","console","log","getAndLoadCSS","fileName","thePath","path","pluginScript","getAttribute","slice","lastIndexOf","pluginPath","pluginBaseName","cssautoload","AppearanceStylePath","csspath","appearance","AnimateCSSPath","compatibility","animatecsspath","compat","link","hoistAppearance","from","baseclass","to","parentNode","sibling","children","dataset","appearParent","classList","copyDataAttributes","attributes","not","filter","nodeName","includes","forEach","nodeValue","setAttribute","innerHTML","add","elemsNotInClass","targetClass","excludeClass","el","querySelectorAll","s","closest","getAppearanceArrays","section","groupClass","result","map","frag","elemsInClass","parentClass","some","group","removeStartAttribute","slides","hideagain","appearanceCanStart","removeAttribute","turnOffSlideAppearances","names","fromAppearances","animatecss","remove","fromFragments","fragment","Plugin","vars","prepare","resolve","es5Filename","compatibilitybaseclass","appearances","regularSections","theSection","addAutoAnimation","sectionAutoSelectors","hasAttribute","sectDataAppear","autoappear","autoelements","elementsToAnimate","entries","selector","assignables","elements","element","push","newClasses","newDelay","speedClass","elementSplit","containerDelay","split","constructor","class","animation","speed","String","delay","theAppearance","index","fixListItem","appearparents","tagName","outerHTML","addBaseClass","contains","fragmentClass","convertToSpans","parent","kind","splitElements","joinChar","textContent","parentAnimateClasses","className","startsWith","newHtml","span","join","appearanceArrays","appearanceArray","addDelay","elementDelay","parseInt","style","setProperty","setTimeout","doneLoading","Appear","deck","fragmentSelector","speedClasses","eventnames","dom","getRevealElement","viewport","getViewportElement","getSlidesElement","sections","fragments","isStack","childNodes","i","test","window","location","search","eventname","on","event","showHideSlide","getConfig","view","isScroll","etype","fromSlide","previousSlide","toSlide","currentSlide","fromTo","appearevent","slideAppearevent","body","exitoverview","addEventListener","Promise","id","init"],"mappings":"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"}
\ No newline at end of file
diff --git a/demo/plugin/appearance/appearance.js b/demo/plugin/appearance/appearance.js
index 9ce4445..6350a41 100644
--- a/demo/plugin/appearance/appearance.js
+++ b/demo/plugin/appearance/appearance.js
@@ -1,7 +1,7 @@
/*****************************************************************
*
* Appearance for Reveal.js
- * Version 1.3.3
+ * Version 1.3.4
*
* @author: Martijn De Jongh (Martino), martijn.de.jongh@gmail.com
* https://github.com/martinomagnifico
@@ -12,5 +12,5 @@
* Copyright (C) 2023 Martijn De Jongh (Martino)
*
******************************************************************/
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Appearance=t()}(this,(function(){"use strict";var e="undefined"!=typeof document?document.currentScript:null;const t=e=>e&&"object"==typeof e&&!Array.isArray(e),a=(e,...n)=>{if(!n.length)return e;const s=n.shift();if(t(e)&&t(s))for(const n in s)t(s[n])?(e[n]||Object.assign(e,{[n]:{}}),a(e[n],s[n])):Object.assign(e,{[n]:s[n]});return a(e,...n)},n=e=>{let t="";return"string"==typeof e&&(e=e.replace(/[“”]/g,'"').replace(/[‘’]/g,"'")),t=(e=>{try{return JSON.parse(e)&&!!e}catch(e){return!1}})(e)?e:"object"==typeof e?JSON.stringify(e,null,2):"{"===e.trim().replace(/'/g,'"').charAt(0)?e.trim().replace(/'/g,'"'):`{${e.trim().replace(/'/g,'"')}}`,t},s=(e,t,a)=>{let n,s=document.querySelector("head"),r=!1;if("script"===t?document.querySelector(`srcipt[src="${e}"]`)?r=!0:(n=document.createElement("script"),n.type="text/javascript",n.src=e):"stylesheet"===t&&(document.querySelector(`link[href="${e}"]`)?r=!0:(n=document.createElement("link"),n.rel="stylesheet",n.href=e)),!r){const e=()=>{"function"==typeof a&&(a.call(),a=null)};n.onload=e,n.onreadystatechange=function(){"loaded"===this.readyState&&e()},s.appendChild(n)}},r=(e,t)=>{e.debug&&console.log(t)},i=(t,a)=>{let n=(t=>{let a,n=document.querySelector(`script[src$="${t}"]`);return a=n?n.getAttribute("src").slice(0,-1*t.length):("undefined"==typeof document&&"undefined"==typeof location?require("url").pathToFileURL(__filename).href:"undefined"==typeof document?location.href:e&&e.src||new URL("appearance.js",document.baseURI).href).slice(0,("undefined"==typeof document&&"undefined"==typeof location?require("url").pathToFileURL(__filename).href:"undefined"==typeof document?location.href:e&&e.src||new URL("appearance.js",document.baseURI).href).lastIndexOf("/")+1),a})(a),r=a.replace(/\.[^/.]+$/,""),i=t.csspath.appearance?t.csspath.appearance:`${n}${r}.css`||`plugin/${r}/${r}.css`,o=t.compatibility?t.animatecsspath.compat:t.animatecsspath.link;t.debug&&(console.log("Paths:"),console.log(` - Plugin path = ${n}`),console.log(` - Appearance CSS path = ${i}`),console.log(` - AnimateCSS CSS path = ${o}`)),s(o,"stylesheet",(function(){s(i,"stylesheet")}))},o=(e,t)=>{let a=e.parentNode;if(a){for(const t of a.children)if(t!==e&&t.dataset.appearParent)return;a.classList=e.classList,(({attributes:e},t,a)=>{[...e].filter((({nodeName:e})=>e.includes("data"))).forEach((({nodeName:e,nodeValue:n})=>{(a&&e!==a||!a)&&t.setAttribute(e,n)}))})(e,a,"data-appear-parent"),a.innerHTML=e.innerHTML,a.classList.add(t)}},l=(e,t,a)=>Array.from(a.querySelectorAll(`.${e}`)).filter((e=>!e.closest(`.${t}`))),c=(e,t,a)=>{const n=[l(t,a,e),...Array.from(e.querySelectorAll(`.${a}`)).map((e=>((e,t,a)=>Array.from(a.querySelectorAll(`.${e}`)).filter((e=>e.closest(`.${t}`)===a)))(t,a,e)))];return!!n.some((e=>e.length>0))&&n},d=(e,t)=>{t.hideagain&&e.from&&e.from.dataset.appearanceCanStart&&e.from.removeAttribute("data-appearance-can-start")},p=(e,t,a)=>{if(t.hideagain&&e&&e.from){let t=e.from.querySelectorAll(a.animatecss);t&&t.forEach((e=>{e.classList.remove("animationended")}));let n=e.from.querySelectorAll(".fragment.visible");n&&n.forEach((e=>{e.classList.remove("visible")}))}};return()=>{const e={names:{}};let t={};const s=(e,t,a)=>{r(e,"------------- Preloading -------------");let s=t.names;i(e,s.es5Filename),e.compatibility&&(s.animatecss=".backInDown, .backInLeft, .backInRight, .backInUp, .bounceIn, .bounceInDown, .bounceInLeft, .bounceInRight, .bounceInUp, .fadeIn, .fadeInDown, .fadeInDownBig, .fadeInLeft, .fadeInLeftBig, .fadeInRight, .fadeInRightBig, .fadeInUp, .fadeInUpBig, .fadeInTopLeft, .fadeInTopRight, .fadeInBottomLeft, .fadeInBottomRight, .flipInX, .flipInY, .lightSpeedInRight, .lightSpeedInLeft, .rotateIn, .rotateInDownLeft, .rotateInDownRight, .rotateInUpLeft, .rotateInUpRight, .jackInTheBox, .rollIn, .zoomIn, .zoomInDown, .zoomInLeft, .zoomInRight, .zoomInUp, .slideInDown, .slideInLeft, .slideInRight, .slideInUp, .skidLeft, .skidLeftBig, .skidRight, .skidRightBig, .shrinkIn, .shrinkInBlur",s.baseclass=e.compatibilitybaseclass),t.appearances=Array.from(t.slides.querySelectorAll(s.animatecss)),t.regularSections.forEach((a=>((e,t,a)=>{let s=null;if(e.hasAttribute("data-autoappear")){let a=e.dataset.autoappear;s="auto"==a||""==a||a.length<1||"true"==a?t.autoelements?t.autoelements:null:a}else t.autoappear&&t.autoelements&&(s=t.autoelements);if(s){let t=JSON.parse(n(s));Object.entries(t).forEach((([t,n])=>{let s=Array.from(e.querySelectorAll(t)).filter((e=>!a.appearances.includes(e)));s.length&&s.forEach((e=>{a.appearances.push(e);let t=[],s=null,r=!1,i=null,o=null;Array.isArray(n)?(t=n[0].split(/[ ,]+/),s=n[1]):"string"==typeof n?t=n.split(/[ ,]+/):n.constructor===Object&&((n.class||n.animation)&&(t=(n.animation?n.animation:n.class).split(/[ ,]+/)),n.speed&&(r=String(n.speed),r.includes("animate__")||(r=`animate__${r}`)),n.delay&&(s=String(n.delay)),n.split&&(i=String(n.split)),n["container-delay"]&&(o=String(n["container-delay"]))),e.classList.add(...t),r&&e.classList.add(r),s&&(e.dataset.delay||(e.dataset.delay=s)),i&&(e.dataset.split=i),o&&(e.dataset.containerDelay=o)}))}))}})(a,e,t))),t.appearances.forEach(((t,a)=>{((e,t,a)=>{let n=a.baseclass;e.hasAttribute("data-appear-parent")&&o(e,n),t.appearparents&&e.parentNode&&e.parentNode.tagName&&"SPAN"==e.tagName&&"LI"==e.parentNode.tagName&&String(e.outerHTML).length==String(e.parentNode.innerHTML).length&&o(e)})(t,e,s),((e,t)=>{e.classList.contains(t.baseclass)||e.classList.add(t.baseclass),e.classList.contains(t.fragmentClass)&&e.classList.add("custom")})(t,s),t.hasAttribute("data-split")&&((e,t)=>{let a=!1,n=" ";if("words"==t?a=e.textContent.trim().split(/\s+/):"letters"==t&&(a=e.textContent.trim().split(""),n=""),a){const t=Array.from(e.classList).filter((e=>e.startsWith("animate__"))),s=a.map(((t,a)=>{const n=document.createElement("span");return n.textContent=t," "==t&&(n.textContent=" "),e.dataset.delay&&0!==a&&(n.dataset.delay=e.dataset.delay),e.dataset.containerDelay&&0===a&&(n.dataset.delay=e.dataset.containerDelay),e.classList.forEach((e=>e.startsWith("animate__")&&n.classList.add(e))),n.outerHTML})).join(n);t.forEach((t=>e.classList.remove(t))),e.removeAttribute("data-delay"),e.removeAttribute("data-split"),e.removeAttribute("data-container-delay"),e.innerHTML=s}})(t,t.dataset.split)})),t.regularSections.forEach(((t,a)=>{let n=c(t,s.baseclass,s.fragmentClass);n&&n.forEach((t=>{((e,t,a)=>{let n=0;e.forEach(((e,a)=>{if(0==a&&e.dataset.delay||0!=a){let a=t.delay;e.dataset&&e.dataset.delay&&(a=parseInt(e.dataset.delay)),n+=a,e.style.setProperty("animation-delay",n+"ms"),e.removeAttribute("data-delay")}}))})(t,e)}))})),(e=>{setTimeout(e,0)})(a)},l=(t,a,n)=>{let i=e.names;return i.baseclass=a.baseclass,i.compatibilitybaseclass=a.compatibilitybaseclass,i.fragmentSelector=".fragment",i.fragmentClass="fragment",i.speedClasses=["slower","slow","fast","faster"],i.speedClasses.push(...i.speedClasses.map((e=>`animate__${e}`))),i.animatecss='[class^="animate__"],[class*=" animate__"]',i.es5Filename=n,i.eventnames=["ready","slidechanged","slidetransitionend","autoanimate","overviewhidden"],e.deck=t,e.dom=t.getRevealElement(),e.viewport=t.getViewportElement(),e.slides=t.getSlidesElement(),e.sections=e.slides.querySelectorAll("section"),e.fragments=e.slides.querySelectorAll(i.fragmentSelector),e.regularSections=Array.from(e.sections).filter((e=>!(({childNodes:e})=>{let t=!1;for(let a=0;at.on(n,(t=>{((e,t,a,n)=>{n.deck.getConfig().view;let s=n.viewport.classList.contains("reveal-scroll"),r=e.type,i=(e=>{let t={};return t.from=e.fromSlide||e.previousSlide||null,t.to=e.toSlide||e.currentSlide||null,t})(e);if(i.to){"ready"==r&&(i.to.dataset.appearanceCanStart=!0);let n=((e,t)=>(e.dataset.appearevent&&"auto"===e.dataset.appearevent&&(e.dataset.appearevent="autoanimate"),"auto"==t.appearevent&&(t.appearevent="autoanimate"),e.dataset.appearevent?e.dataset.appearevent:t.appearevent))(i.to,t);(r==n||"slidetransitionend"==r&&"autoanimate"==n)&&(i.to.dataset.appearanceCanStart=!0),s&&"slidechanged"==r&&(d(i,t),p(i,t,a),setTimeout((()=>{i.to.dataset.appearanceCanStart=!0}),t.delay)),"slidetransitionend"==r&&(d(i,t),p(i,t,a)),"slidechanged"==r&&document.body.dataset.exitoverview?(d(i,t),i.to.dataset.appearanceCanStart=!0):"overviewhidden"==r&&(document.body.dataset.exitoverview=!0,setTimeout((()=>{document.body.removeAttribute("data-exitoverview")}),500),e.currentSlide&&(d(i,t),i.to.dataset.appearanceCanStart=!0))}})(t,a,i,e)})))),e.viewport.addEventListener("animationend",(e=>{e.target.classList.add("animationended")})),e.viewport.addEventListener("fragmenthidden",(e=>{e.fragment.classList.remove("animationended"),e.fragment.querySelectorAll(".animationended").forEach((e=>{e.classList.remove("animationended")}))})),new Promise((t=>{s(a,e,t),r(a,"---------- Done preloading ----------")}))};return{id:"appearance",init:e=>(t=a({baseclass:"animate__animated",hideagain:!0,delay:300,debug:!1,appearevent:"slidetransitionend",autoappear:!1,autoelements:!1,appearparents:!1,csspath:"",animatecsspath:{link:"https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css",compat:"https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.compat.css"},compatibility:!1,compatibilitybaseclass:"animated"},e.getConfig().appearance||{}),l(e,t,"appearance.js"))}}}));
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Appearance=t()}(this,(function(){"use strict";var e="undefined"!=typeof document?document.currentScript:null;const t=e=>e&&"object"==typeof e&&!Array.isArray(e),a=(e,...n)=>{if(!n.length)return e;const s=n.shift();if(t(e)&&t(s))for(const n in s)t(s[n])?(e[n]||Object.assign(e,{[n]:{}}),a(e[n],s[n])):Object.assign(e,{[n]:s[n]});return a(e,...n)},n=e=>{let t="";return"string"==typeof e&&(e=e.replace(/[“”]/g,'"').replace(/[‘’]/g,"'")),t=(e=>{try{return JSON.parse(e)&&!!e}catch(e){return!1}})(e)?e:"object"==typeof e?JSON.stringify(e,null,2):"{"===e.trim().replace(/'/g,'"').charAt(0)?e.trim().replace(/'/g,'"'):`{${e.trim().replace(/'/g,'"')}}`,t},s=(e,t,a)=>{let n,s=document.querySelector("head"),r=!1;if("script"===t?document.querySelector(`script[src="${e}"]`)?r=!0:(n=document.createElement("script"),n.type="text/javascript",n.src=e):"stylesheet"===t&&(document.querySelector(`link[href="${e}"]`)?r=!0:(n=document.createElement("link"),n.rel="stylesheet",n.href=e)),!r){const e=()=>{"function"==typeof a&&(a.call(),a=null)};n.onload=e,n.onreadystatechange=function(){"loaded"===this.readyState&&e()},s.appendChild(n)}},r=(e,t)=>{e.debug&&console.log(t)},i=(t,a)=>{let n=(t=>{let a,n=document.querySelector(`script[src$="${t}"]`);return a=n?n.getAttribute("src").slice(0,-1*t.length):("undefined"==typeof document&&"undefined"==typeof location?require("url").pathToFileURL(__filename).href:"undefined"==typeof document?location.href:e&&e.src||new URL("appearance.js",document.baseURI).href).slice(0,("undefined"==typeof document&&"undefined"==typeof location?require("url").pathToFileURL(__filename).href:"undefined"==typeof document?location.href:e&&e.src||new URL("appearance.js",document.baseURI).href).lastIndexOf("/")+1),a})(a),r=a.replace(/\.[^/.]+$/,"");if(t.cssautoload){let e=t.csspath.appearance?t.csspath.appearance:`${n}${r}.css`||`plugin/${r}/${r}.css`,a=t.compatibility?t.animatecsspath.compat:t.animatecsspath.link;t.debug&&(console.log("Paths:"),console.log(` - Plugin path = ${n}`),console.log(` - Appearance CSS path = ${e}`),console.log(` - AnimateCSS CSS path = ${a}`)),s(a,"stylesheet",(function(){s(e,"stylesheet")}))}},o=(e,t)=>{let a=e.parentNode;if(a){for(const t of a.children)if(t!==e&&t.dataset.appearParent)return;a.classList=e.classList,(({attributes:e},t,a)=>{[...e].filter((({nodeName:e})=>e.includes("data"))).forEach((({nodeName:e,nodeValue:n})=>{(a&&e!==a||!a)&&t.setAttribute(e,n)}))})(e,a,"data-appear-parent"),a.innerHTML=e.innerHTML,a.classList.add(t)}},l=(e,t,a)=>Array.from(a.querySelectorAll(`.${e}`)).filter((e=>!e.closest(`.${t}`))),c=(e,t,a)=>{const n=[l(t,a,e),...Array.from(e.querySelectorAll(`.${a}`)).map((e=>((e,t,a)=>Array.from(a.querySelectorAll(`.${e}`)).filter((e=>e.closest(`.${t}`)===a)))(t,a,e)))];return!!n.some((e=>e.length>0))&&n},d=(e,t)=>{t.hideagain&&e.from&&e.from.dataset.appearanceCanStart&&e.from.removeAttribute("data-appearance-can-start")},p=(e,t,a)=>{if(t.hideagain&&e&&e.from){let t=e.from.querySelectorAll(a.animatecss);t&&t.forEach((e=>{e.classList.remove("animationended")}));let n=e.from.querySelectorAll(".fragment.visible");n&&n.forEach((e=>{e.classList.remove("visible")}))}};return()=>{const e={names:{}};let t={};const s=(e,t,a)=>{r(e,"------------- Preloading -------------");let s=t.names;i(e,s.es5Filename),e.compatibility&&(s.animatecss=".backInDown, .backInLeft, .backInRight, .backInUp, .bounceIn, .bounceInDown, .bounceInLeft, .bounceInRight, .bounceInUp, .fadeIn, .fadeInDown, .fadeInDownBig, .fadeInLeft, .fadeInLeftBig, .fadeInRight, .fadeInRightBig, .fadeInUp, .fadeInUpBig, .fadeInTopLeft, .fadeInTopRight, .fadeInBottomLeft, .fadeInBottomRight, .flipInX, .flipInY, .lightSpeedInRight, .lightSpeedInLeft, .rotateIn, .rotateInDownLeft, .rotateInDownRight, .rotateInUpLeft, .rotateInUpRight, .jackInTheBox, .rollIn, .zoomIn, .zoomInDown, .zoomInLeft, .zoomInRight, .zoomInUp, .slideInDown, .slideInLeft, .slideInRight, .slideInUp, .skidLeft, .skidLeftBig, .skidRight, .skidRightBig, .shrinkIn, .shrinkInBlur",s.baseclass=e.compatibilitybaseclass),t.appearances=Array.from(t.slides.querySelectorAll(s.animatecss)),t.regularSections.forEach((a=>((e,t,a)=>{let s=null;if(e.hasAttribute("data-autoappear")){let a=e.dataset.autoappear;s="auto"==a||""==a||a.length<1||"true"==a?t.autoelements?t.autoelements:null:a}else t.autoappear&&t.autoelements&&(s=t.autoelements);if(s){let t=JSON.parse(n(s));Object.entries(t).forEach((([t,n])=>{let s=Array.from(e.querySelectorAll(t)).filter((e=>!a.appearances.includes(e)));s.length&&s.forEach((e=>{a.appearances.push(e);let t=[],s=null,r=!1,i=null,o=null;Array.isArray(n)?(t=n[0].split(/[ ,]+/),s=n[1]):"string"==typeof n?t=n.split(/[ ,]+/):n.constructor===Object&&((n.class||n.animation)&&(t=(n.animation?n.animation:n.class).split(/[ ,]+/)),n.speed&&(r=String(n.speed),r.includes("animate__")||(r=`animate__${r}`)),n.delay&&(s=String(n.delay)),n.split&&(i=String(n.split)),n["container-delay"]&&(o=String(n["container-delay"]))),e.classList.add(...t),r&&e.classList.add(r),s&&(e.dataset.delay||(e.dataset.delay=s)),i&&(e.dataset.split=i),o&&(e.dataset.containerDelay=o)}))}))}})(a,e,t))),t.appearances.forEach(((t,a)=>{((e,t,a)=>{let n=a.baseclass;e.hasAttribute("data-appear-parent")&&o(e,n),t.appearparents&&e.parentNode&&e.parentNode.tagName&&"SPAN"==e.tagName&&"LI"==e.parentNode.tagName&&String(e.outerHTML).length==String(e.parentNode.innerHTML).length&&o(e)})(t,e,s),((e,t)=>{e.classList.contains(t.baseclass)||e.classList.add(t.baseclass),e.classList.contains(t.fragmentClass)&&e.classList.add("custom")})(t,s),t.hasAttribute("data-split")&&((e,t)=>{let a=!1,n=" ";if("words"==t?a=e.textContent.trim().split(/\s+/):"letters"==t&&(a=e.textContent.trim().split(""),n=""),a){const t=Array.from(e.classList).filter((e=>e.startsWith("animate__"))),s=a.map(((t,a)=>{const n=document.createElement("span");return n.textContent=t," "==t&&(n.textContent=" "),e.dataset.delay&&0!==a&&(n.dataset.delay=e.dataset.delay),e.dataset.containerDelay&&0===a&&(n.dataset.delay=e.dataset.containerDelay),e.classList.add("wordchargroup"),e.classList.forEach((e=>e.startsWith("animate__")&&n.classList.add(e))),n.outerHTML})).join(n);t.forEach((t=>e.classList.remove(t))),e.removeAttribute("data-delay"),e.removeAttribute("data-split"),e.removeAttribute("data-container-delay"),e.innerHTML=s}})(t,t.dataset.split)})),t.regularSections.forEach(((t,a)=>{let n=c(t,s.baseclass,s.fragmentClass);n&&n.forEach((t=>{((e,t,a)=>{let n=0;e.forEach(((e,a)=>{if(0==a&&e.dataset.delay||0!=a){let a=t.delay;e.dataset&&e.dataset.delay&&(a=parseInt(e.dataset.delay)),n+=a,e.style.setProperty("animation-delay",n+"ms"),e.removeAttribute("data-delay")}}))})(t,e)}))})),(e=>{setTimeout(e,0)})(a)},l=(t,a,n)=>{let i=e.names;return i.baseclass=a.baseclass,i.compatibilitybaseclass=a.compatibilitybaseclass,i.fragmentSelector=".fragment",i.fragmentClass="fragment",i.speedClasses=["slower","slow","fast","faster"],i.speedClasses.push(...i.speedClasses.map((e=>`animate__${e}`))),i.animatecss='[class^="animate__"],[class*=" animate__"]',i.es5Filename=n,i.eventnames=["ready","slidechanged","slidetransitionend","autoanimate","overviewhidden"],e.deck=t,e.dom=t.getRevealElement(),e.viewport=t.getViewportElement(),e.slides=t.getSlidesElement(),e.sections=e.slides.querySelectorAll("section"),e.fragments=e.slides.querySelectorAll(i.fragmentSelector),e.regularSections=Array.from(e.sections).filter((e=>!(({childNodes:e})=>{let t=!1;for(let a=0;at.on(n,(t=>{((e,t,a,n)=>{n.deck.getConfig().view;let s=n.viewport.classList.contains("reveal-scroll"),r=e.type,i=(e=>{let t={};return t.from=e.fromSlide||e.previousSlide||null,t.to=e.toSlide||e.currentSlide||null,t})(e);if(i.to){"ready"==r&&(i.to.dataset.appearanceCanStart=!0);let n=((e,t)=>(e.dataset.appearevent&&"auto"===e.dataset.appearevent&&(e.dataset.appearevent="autoanimate"),"auto"==t.appearevent&&(t.appearevent="autoanimate"),e.dataset.appearevent?e.dataset.appearevent:t.appearevent))(i.to,t);(r==n||"slidetransitionend"==r&&"autoanimate"==n)&&(i.to.dataset.appearanceCanStart=!0),s&&"slidechanged"==r&&(d(i,t),p(i,t,a),setTimeout((()=>{i.to.dataset.appearanceCanStart=!0}),t.delay)),"slidetransitionend"==r&&(d(i,t),p(i,t,a)),"slidechanged"==r&&document.body.dataset.exitoverview?(d(i,t),i.to.dataset.appearanceCanStart=!0):"overviewhidden"==r&&(document.body.dataset.exitoverview=!0,setTimeout((()=>{document.body.removeAttribute("data-exitoverview")}),500),e.currentSlide&&(d(i,t),i.to.dataset.appearanceCanStart=!0))}})(t,a,i,e)})))),e.viewport.addEventListener("animationend",(e=>{e.target.classList.add("animationended")})),e.viewport.addEventListener("fragmenthidden",(e=>{e.fragment.classList.remove("animationended"),e.fragment.querySelectorAll(".animationended").forEach((e=>{e.classList.remove("animationended")}))})),new Promise((t=>{s(a,e,t),r(a,"---------- Done preloading ----------")}))};return{id:"appearance",init:e=>(t=a({baseclass:"animate__animated",hideagain:!0,delay:300,debug:!1,appearevent:"slidetransitionend",autoappear:!1,autoelements:!1,appearparents:!1,cssautoload:!0,csspath:"",animatecsspath:{link:"https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css",compat:"https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.compat.css"},compatibility:!1,compatibilitybaseclass:"animated"},e.getConfig().appearance||{}),l(e,t,"appearance.js"))}}}));
//# sourceMappingURL=appearance.js.map
diff --git a/demo/plugin/appearance/appearance.js.map b/demo/plugin/appearance/appearance.js.map
index 8d24905..2e11f50 100644
--- a/demo/plugin/appearance/appearance.js.map
+++ b/demo/plugin/appearance/appearance.js.map
@@ -1 +1 @@
-{"version":3,"file":"appearance.js","sources":["../../../src/plugin/js/helpers.js","../../../src/plugin/js/functions/get-load-css.js","../../../src/plugin/js/functions/fix-list-item.js","../../../src/plugin/js/functions/get-appearance-arrays.js","../../../src/plugin/js/functions/show-hide-slide.js","../../../src/plugin/js/plugin.js","../../../src/plugin/js/functions/add-auto-animation.js","../../../src/plugin/js/functions/add-base-class.js","../../../src/plugin/js/functions/convert-to-spans.js","../../../src/plugin/js/functions/add-delay.js"],"sourcesContent":["/**\n * Check if a given string is valid JSON.\n * @param {string} str - The string to be checked.\n * @returns {boolean} `true` if the string is valid JSON, otherwise `false`.\n */\nexport const isJSON = str => {\n\ttry {\n\t\treturn (JSON.parse(str) && !!str);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\n/**\n * Convert a NodeList into an array based on provided selectors.\n * @param {Element} container - The root element to begin querying.\n * @param {string} selectors - A string containing one or more CSS selectors separated by commas.\n * @returns {Element[]} Array of elements that match the given selectors.\n */\nexport const selectionArray = (container, selectors) => {\n\tlet selections = container.querySelectorAll(selectors);\n\tlet selectionarray = Array.prototype.slice.call(selections);\n\treturn selectionarray;\n};\n\n/**\n * Check if an element has child nodes that are `SECTION` elements.\n * @param {Object} param0 - Object with childNodes property.\n * @param {NodeListOf} param0.childNodes - List of child nodes of the element.\n * @returns {boolean} `true` if the element contains `SECTION` child nodes, otherwise `false`.\n */\nexport const isStack = ({childNodes}) => {\n\tlet isStack = false;\n\tfor (let i = 0; i < childNodes.length; i++) {\n\t\tif (childNodes[i].tagName == \"SECTION\") {\n\t\t\tisStack = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn isStack;\n};\n\n/**\n * Copy data attributes from a source element to a target element with an optional exception.\n * @param {Object} param0 - Object with attributes property.\n * @param {NamedNodeMap} param0.attributes - Map of attributes of the source element.\n * @param {Element} target - Target element to copy attributes to.\n * @param {string} [not] - Optional attribute name to exclude from copying.\n */\nexport const copyDataAttributes = ({attributes}, target, not) => {\n\t[...attributes].filter(({nodeName}) => nodeName.includes('data')).forEach(({nodeName, nodeValue}) => {\n\t\tif ((not && nodeName !== not) || !not) {\n\t\t\ttarget.setAttribute(nodeName, nodeValue);\n\t\t}\n\t});\n};\n\n/**\n * Check if the given item is an object and not an array.\n * @param {*} item - The item to be checked.\n * @returns {boolean} `true` if the item is an object and not an array, otherwise `false`.\n */\nconst isObject = (item) => {\n\treturn (item && typeof item === 'object' && !Array.isArray(item));\n}\n\n/**\n * Deep merge multiple objects into a target object.\n * @param {Object} target - Target object to merge values into.\n * @param {...Object} sources - Source objects to merge from.\n * @returns {Object} The merged object.\n */\nexport const mergeDeep = (target, ...sources) => {\n\tif (!sources.length) return target;\n\tconst source = sources.shift();\n\n\tif (isObject(target) && isObject(source)) {\n\t\tfor (const key in source) {\n\t\t\tif (isObject(source[key])) {\n\t\t\t\tif (!target[key]) Object.assign(target, { [key]: {} });\n\t\t\t\tmergeDeep(target[key], source[key]);\n\t\t\t} else {\n\t\t\t\tObject.assign(target, { [key]: source[key] });\n\t\t\t}\n\t\t}\n\t}\n\treturn mergeDeep(target, ...sources);\n}\n\n/**\n * Resolves the given Promise immediately using setTimeout.\n * @param {Function} resolve - The resolve function of a Promise.\n * @returns {number} The ID value of the timer that is set.\n */\nexport const doneLoading = (resolve) => {\n\treturn setTimeout(resolve, 0);\n}\n\n\n/**\n * Converts a JavaScript object or a JSON-formatted string to a JSON string.\n *\n * @param {Object|string} str - The input string or object to be converted to a JSON string.\n * @returns {string} The JSON string.\n */\nexport const toJSONString = (str) => {\n\tlet JSONString = ''\n\n\tif (typeof str === \"string\") str = str.replace(/[“”]/g,'\"').replace(/[‘’]/g,\"'\");\n\n\tif (isJSON(str)) {\n\t\tJSONString = str\n\t} else {\n\t\tif (typeof str === \"object\") {\n\t\t\tJSONString = JSON.stringify(str, null, 2)\n\t\t} else {\n\t\t\tJSONString = str.trim().replace(/'/g, '\"').charAt(0) === \"{\" ? str.trim().replace(/'/g, '\"') : `{${str.trim().replace(/'/g, '\"')}}`;\n\t\t}\n\t}\n\treturn JSONString;\n}\n\n\n/**\n * Dynamically loads a resource from the specified URL and calls a callback function when it's loaded.\n * Will not load the resource if it has already been loaded.\n *\n * @param {string} url - The URL of the resource to load.\n * @param {string} type - The type of resource to load.\n * @param {Function} callback - A callback function to be called when the resource is loaded.\n */\n\nexport const loadResource = (url, type, callback) => {\n\tlet head = document.querySelector('head');\n\tlet resource;\n\tlet alreadyExists = false;\n\n\tif (type === 'script') {\n\t\tif (!document.querySelector(`srcipt[src=\"${url}\"]`)) {\n\t\t\tresource = document.createElement('script');\n\t\t\tresource.type = 'text/javascript';\n\t\t\tresource.src = url;\n\t\t} else { alreadyExists = true }\n\n\t} else if (type === 'stylesheet') {\n\n\t\tif (!document.querySelector(`link[href=\"${url}\"]`)) {\n\t\t\tresource = document.createElement('link');\n\t\t\tresource.rel = 'stylesheet';\n\t\t\tresource.href = url;\n\t\t} else { alreadyExists = true }\n\t}\n\n\tif (!alreadyExists) {\n\t\tconst finish = () => {\n\t\t\tif (typeof callback === 'function') {\n\t\t\tcallback.call();\n\t\t\tcallback = null;\n\t\t\t}\n\t\t};\n\t\tresource.onload = finish;\n\t\tresource.onreadystatechange = function () {\n\t\t\tif (this.readyState === 'loaded') {\n\t\t\t\tfinish();\n\t\t\t}\n\t\t};\n\t\thead.appendChild(resource);\n\t}\n}\n\n\n/**\n * Retrieves the path of a JavaScript file based on its filename.\n *\n * @param {string} fileName - The filename of the script.\n * @returns {string} The path to the plugin's location.\n */\nexport const pluginPath = (fileName) => {\n\tlet path;\n\tlet pluginScript = document.querySelector(`script[src$=\"${fileName}\"]`);\n\tif (pluginScript) {\n\t\tpath = pluginScript.getAttribute(\"src\").slice(0, -1 * (fileName.length));\n\t} else {\n\t\tpath = import.meta.url.slice(0, import.meta.url.lastIndexOf('/') + 1);\n\t}\n\treturn path;\n}\n\n\n/**\n * Check if element 'a' appears before element 'b' in the DOM tree.\n *\n * @param {HTMLElement} a - The first HTML element to compare.\n * @param {HTMLElement} b - The second HTML element to compare.\n * @returns {boolean|undefined} - Returns `true` if element 'a' appears before element 'b', `false` if 'b' appears before 'a', and `undefined` if the elements have no relative position in the DOM tree.\n */\nexport const isBefore = (a, b) => {\n var all = document.getElementsByTagName('*');\n\n for (var i = 0; i < all.length; ++i) {\n if (all[i] === a) {\n return true;\n } else if (all[i] === b) {\n return false;\n }\n }\n // If the elements have no relative position in the DOM tree\n return undefined;\n};\n\n\n/**\n * Check the number of occurrences of a specific element in an array.\n *\n * @param {Array} array - The array in which occurrences are to be counted.\n * @param {*} element - The element to be counted within the array.\n * @returns {number} - The count of occurrences of the specified element in the array.\n */\nexport const checkOccurrence = (array, element) => {\n let counter = 0;\n for (let i = 0; i < array.length; i++) {\n if (array[i] == element) {\n counter++;\n }\n }\n return counter;\n};\n\n\n/**\n * Create an HTML element from a string of HTML.\n *\n * @param {string} thehtml - The string of HTML to be converted into an HTML element.\n * @returns {HTMLElement | null} - The HTML element created from the provided HTML string. Returns `null` if the element couldn't be created.\n */\nexport const createNode = (thehtml) => {\n const fragment = document.createRange().createContextualFragment(thehtml);\n return fragment.firstElementChild;\n};\n\n\n\nexport const debugLog = (options, text) => {\n\tif (options.debug) console.log(text);\n}\n\n","import { loadResource } from '../helpers';\nimport { pluginPath } from '../helpers';\n\n/**\n * Retrieves and loads CSS stylesheets based on the provided options and ES5 filename.\n *\n * @param {Object} options - Configuration options for loading CSS.\n * @param {string} fileName - The filename of the script.\n */\n\nexport const getAndLoadCSS = (options, fileName) => {\n\tlet thePath = pluginPath(fileName);\n\tlet pluginBaseName = fileName.replace(/\\.[^/.]+$/, \"\");\n\n\tlet AppearanceStylePath = options.csspath.appearance ? options.csspath.appearance : null || `${thePath}${pluginBaseName}.css` || `plugin/${pluginBaseName}/${pluginBaseName}.css`\n\tlet AnimateCSSPath = !options.compatibility ? options.animatecsspath.link : options.animatecsspath.compat;\n\n\tif (options.debug) {\n\t\tconsole.log(`Paths:`);\n\t\tconsole.log(` - Plugin path = ${thePath}`);\n\t\tconsole.log(` - Appearance CSS path = ${AppearanceStylePath}`);\n\t\tconsole.log(` - AnimateCSS CSS path = ${AnimateCSSPath}`);\n\t}\n\n\tloadResource(AnimateCSSPath, 'stylesheet', function () {\n\t\tloadResource(AppearanceStylePath, 'stylesheet');\n\t});\n\n}","import { copyDataAttributes } from '../helpers';\n\n/**\n * Hoist a list item's appearance to its parent element's appearance.\n *\n * @param {HTMLElement} from - The list item element.\n * @returns {undefined}\n */\nconst hoistAppearance = (from, baseclass) => {\n\tlet to = from.parentNode;\n\tif (!to) return;\n \n\tfor (const sibling of to.children) {\n\t if (sibling !== from && sibling.dataset.appearParent) return;\n\t}\n \n\tto.classList = from.classList;\n\tcopyDataAttributes(from, to, \"data-appear-parent\");\n\tto.innerHTML = from.innerHTML;\n\tto.classList.add(baseclass);\n};\n\n\n/**\n * Fix list items that were changed by Quarto.\n *\n * This function is designed for use with Quarto and handles the conversion of list items\n * with Appearance classes to their parent elements when a manual attribute is present.\n * It also provides automatic conversion for list items that directly contain spans, which\n * is related to Quarto's wrapping of list content in a span.\n *\n * @param {HTMLElement} appearance - The list item element whose appearance will be converted.\n * @param {Object} options - An options object that controls the conversion behavior.\n * @param {boolean} options.appearparents - If `true`, automatic conversion of list items with spans is enabled.\n * @returns {undefined}\n */\nexport const fixListItem = (appearance, options, names) => {\n\n\tlet baseclass = names.baseclass\n\tif (appearance.hasAttribute(\"data-appear-parent\")) {\n\t\thoistAppearance(appearance, baseclass);\n\t}\n\n\tif (options.appearparents) {\n\t\tif (appearance.parentNode && appearance.parentNode.tagName) {\n\t\t\tif (appearance.tagName == \"SPAN\" && appearance.parentNode.tagName == \"LI\") {\n\t\t\t\tlet spanLength = String(appearance.outerHTML).length;\n\t\t\t\tlet liContentLength = String(appearance.parentNode.innerHTML).length;\n\t\t\t\tif (spanLength == liContentLength) {\n\t\t\t\t\thoistAppearance(appearance);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Selects elements with a specified class that are not nested inside an element with another specified class.\n * @param {string} targetClass - The class name to select elements.\n * @param {string} excludeClass - The class name to exclude elements nested inside it.\n * @param {Element} el - The element to find the target elements in.\n * @returns {Element[]} - Array of selected elements.\n */\nconst elemsNotInClass = (targetClass, excludeClass, el) => \n Array.from(el.querySelectorAll(`.${targetClass}`))\n .filter(s => !s.closest(`.${excludeClass}`));\n\n/**\n * Selects elements with a specified class that are nested inside an element with another specified class.\n * @param {string} targetClass - The class name to select elements.\n * @param {string} parentClass - The class name of the parent to find elements in.\n * @param {Element} el - The element to find the target elements in.\n * @returns {Element[]} - Array of selected elements.\n */\nconst elemsInClass = (targetClass, parentClass, el) =>\n Array.from(el.querySelectorAll(`.${targetClass}`))\n .filter(s => s.closest(`.${parentClass}`) === el);\n\n/**\n * Extracts groups of elements with a specified class from the provided section element.\n * Groups are formed based on nesting inside elements with another specified class.\n * @param {Element} section - The section to extract data from.\n * @returns {Element[][]} - Nested arrays of selected elements.\n */\n\n\n/**\n * Extracts groups of elements with a specified class from the provided section element.\n * Groups are formed based on nesting inside elements with another specified class.\n * @param {Element} section - The section to extract data from.\n * @param {string} targetClass - The class name to select elements.\n * @param {string} groupClass - The class name of the parent to find elements in.\n * @returns {Element[][]} - Nested arrays of selected elements.\n */\nexport const getAppearanceArrays = (section, targetClass, groupClass) => {\n const result = [\n elemsNotInClass(targetClass, groupClass, section), \n ...Array.from(section.querySelectorAll(`.${groupClass}`))\n .map(frag => elemsInClass(targetClass, groupClass, frag))\n ];\n\n\tif (result.some(group => group.length > 0)) {\n return result;\n } else {\n\t\treturn false;\n\t}\n};\n","/**\n * Derives slide from and to from the event object.\n *\n * @param {Object} event - The event object containing slide transition details.\n * @returns {Object} - An object containing references to the \"from\" and \"to\" slides.\n */\nconst fromTo = (event) => {\n\tlet slides = {};\n\tslides.from = event.fromSlide || event.previousSlide || null;\n\tslides.to = event.toSlide || event.currentSlide || null;\n\treturn slides;\n};\n\n/**\n * A function that determines the appearance event for a given slide.\n *\n * This function checks the `data-appearevent` attribute of the slide and the `options.appearevent` parameter.\n * If `data-appearevent` is set to \"auto\", it is converted to \"autoanimate\". If `options.appearevent` is \"auto\", it is also converted to \"autoanimate\".\n * The function returns the appearance event, prioritizing `data-appearevent` over `options.appearevent`.\n *\n * @param {HTMLElement} toSlide - The slide for which the appearance event is determined.\n * @param {Object} options - An object containing options for the appearance event.\n * @param {string} options.appearevent - The appearance event option provided in the `options` object.\n *\n * @returns {string} - The determined appearance event for the slide, either from `data-appearevent` or `options.appearevent`.\n */\nconst slideAppearevent = (toSlide, options) => {\n\n\tif (toSlide.dataset.appearevent && toSlide.dataset.appearevent === \"auto\" ) {\n\t\ttoSlide.dataset.appearevent = \"autoanimate\"\n\t}\n\tif (options.appearevent == \"auto\") {options.appearevent = \"autoanimate\"}\n\treturn toSlide.dataset.appearevent ? toSlide.dataset.appearevent : options.appearevent;\n};\n\n/**\n * Remove the 'data-appearance-can-start' attribute from the 'from' slide if the 'hideagain' option is enabled.\n *\n * @param {HTMLElement} slides - The container element for the slides.\n * @param {Object} options - An object containing configuration options.\n * @param {boolean} options.hideagain - A flag indicating whether to remove the attribute when 'hideagain' is true.\n */\nconst removeStartAttribute = (slides, options) => {\n\tif (options.hideagain) {\n\t\tif (slides.from && slides.from.dataset.appearanceCanStart ) {\n\t\t\tslides.from.removeAttribute('data-appearance-can-start');\n\t\t}\n\t}\n};\n\n\n/**\n * Turn off slide appearances when transitioning from one slide to another if the 'hideagain' option is enabled.\n *\n * @param {HTMLElement} slides - The container element for the slides.\n * @param {Object} options - An object containing configuration options.\n * @param {string} names.animatecss - The CSS selector for animated elements.\n */\nconst turnOffSlideAppearances = (slides, options, names) => {\n\tif (options.hideagain) {\n\t\tif (slides && slides.from) {\n\n\t\t\t// Remove animationended class from animated elements when moving away from that slide\n\t\t\tlet fromAppearances = slides.from.querySelectorAll(names.animatecss);\n\t\t\tif (fromAppearances) {\n\t\t\t\tfromAppearances.forEach( appearance => {\n\t\t\t\t\tappearance.classList.remove('animationended');\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Remove visible class from fragments when moving away from that slide\n\t\t\tlet fromFragments = slides.from.querySelectorAll(`.fragment.visible`);\n\t\t\tif (fromFragments) {\n\t\t\t\tfromFragments.forEach(fragment => {\n\t\t\t\t\tfragment.classList.remove('visible');\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n/**\n * Handles the showing and hiding of slides based on the provided event and options.\n *\n * @param {Object} event - The event object containing slide transition details.\n * @param {Object} options - An object containing configurations for slide appearance management.\n */\nexport const showHideSlide = (event, options, names, vars) => {\n\n\tlet view = vars.deck.getConfig().view;\n\tlet isScroll = vars.viewport.classList.contains(\"reveal-scroll\");\n\tlet etype = event.type;\n\tlet slides = fromTo(event);\n\n\tif (slides.to) {\n\n\t\tif (etype == \"ready\") {\n\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t}\n\n\t\tlet appearevent = slideAppearevent(slides.to, options)\n\n\t\tif (etype == appearevent || (etype == \"slidetransitionend\" && appearevent == \"autoanimate\")) {\n\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t}\n\n\t\t// Add scroll mode compatibility, does not have a slidetransitionend event yet\n\t\tif (isScroll && etype == 'slidechanged' ) {\n\n\t\t\tremoveStartAttribute(slides, options);\n\t\t\tturnOffSlideAppearances(slides, options, names);\n\n\t\t\t// Add delay to allow for scroll animation to finish\n\t\t\tsetTimeout(() => {\n\t\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t\t}, options.delay)\n\t\t}\n\n\n\t\tif (etype == \"slidetransitionend\" ) {\n\n\t\t\tremoveStartAttribute(slides, options);\n\t\t\tturnOffSlideAppearances(slides, options, names);\n\t\t}\n\t\t\n\t\tif (etype == 'slidechanged' && document.body.dataset.exitoverview) {\n\t\t\tremoveStartAttribute(slides, options);\n\t\t\tslides.to.dataset.appearanceCanStart = true;\n\n\t\t} else if (etype == 'overviewhidden' ) {\n\n\t\t\tdocument.body.dataset.exitoverview = true;\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tdocument.body.removeAttribute('data-exitoverview')\n\t\t\t}, 500)\n\n\t\t\tif (event.currentSlide ) {\n\t\t\t\tremoveStartAttribute(slides, options);\n\t\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t\t}\n\t\t}\n\t}\n}","import { debugLog, mergeDeep, doneLoading, isStack } from './helpers';\n\nimport {getAndLoadCSS} from './functions/get-load-css.js';\nimport {addAutoAnimation} from './functions/add-auto-animation.js';\nimport {fixListItem} from './functions/fix-list-item';\nimport {addBaseClass} from './functions/add-base-class.js';\nimport {addDelay} from './functions/add-delay.js';\nimport {getAppearanceArrays} from './functions/get-appearance-arrays.js';\nimport {convertToSpans} from './functions/convert-to-spans';\nimport {showHideSlide} from './functions/show-hide-slide.js';\n\n\nconst Plugin = () => {\n\n\tconst vars = {};\n\tvars.names = {};\n\tlet options = {};\n\n\t/**\n\t* Prepare the plugin to find Appearance elements\n\t* @param {Object} vars - The variables to be prepared.\n\t* @param {Object} names - The names to be prepared.\n\t* @param {Function} resolve - The callback function to be called when preparation is complete.\n\t* @throws {Error} Throws an error if the 'options' object is not defined.\n\t*/\n\tconst prepare = (options, vars, resolve) => {\n\n\t\tdebugLog(options, \"------------- Preloading -------------\");\n\n\t\tlet names = vars.names;\n\n\t\tgetAndLoadCSS(options, names.es5Filename);\n\n\t\tif (options.compatibility) {\n\t\t\tnames.animatecss = '.backInDown, .backInLeft, .backInRight, .backInUp, .bounceIn, .bounceInDown, .bounceInLeft, .bounceInRight, .bounceInUp, .fadeIn, .fadeInDown, .fadeInDownBig, .fadeInLeft, .fadeInLeftBig, .fadeInRight, .fadeInRightBig, .fadeInUp, .fadeInUpBig, .fadeInTopLeft, .fadeInTopRight, .fadeInBottomLeft, .fadeInBottomRight, .flipInX, .flipInY, .lightSpeedInRight, .lightSpeedInLeft, .rotateIn, .rotateInDownLeft, .rotateInDownRight, .rotateInUpLeft, .rotateInUpRight, .jackInTheBox, .rollIn, .zoomIn, .zoomInDown, .zoomInLeft, .zoomInRight, .zoomInUp, .slideInDown, .slideInLeft, .slideInRight, .slideInUp, .skidLeft, .skidLeftBig, .skidRight, .skidRightBig, .shrinkIn, .shrinkInBlur';\n\t\t\tnames.baseclass = options.compatibilitybaseclass\n\t\t}\n\n\t\tvars.appearances = Array.from(vars.slides.querySelectorAll(names.animatecss));\n\n\t\t// Go through each section to see if there are any (auto) selectors that need animation classes\n\t\tvars.regularSections.forEach(theSection => addAutoAnimation(theSection, options, vars));\n\n\t\tvars.appearances.forEach((theAppearance, index) => {\n\t\t\t// Fix any list item where the Appearance classes were moved to the span (Quarto does this)\n\t\t\tfixListItem(theAppearance, options, names);\n\n\t\t\t// Go through each appearance element and add the baseclass if it doesn't have it\n\t\t\taddBaseClass(theAppearance, names);\n\n\t\t\tif (theAppearance.hasAttribute('data-split')) {\n\t\t\t\tconvertToSpans(theAppearance, theAppearance.dataset.split);\n\t\t\t}\n\t\t});\n\n\t\tvars.regularSections.forEach((theSection, index) => {\n\t\t\t// Get all the Appearances in the section as separate arrays per delay loop\n\t\t\tlet appearanceArrays = getAppearanceArrays(theSection, names.baseclass, names.fragmentClass);\n\n\t\t\tif (appearanceArrays) {\n\t\t\t\tappearanceArrays.forEach((appearanceArray) => {\n\t\t\t\t\t// Add the delays to each appearance in the array\n\t\t\t\t\taddDelay(appearanceArray, options, names)\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\tdoneLoading(resolve);\n\t}\n\n\t/**\n\t* The main function of the plugin\n\t* @param {object} deck - The deck object\n\t* @param {object} options - The options object\n\t* @param {string} es5Filename - The name of the file that will be used\n\t*/\n\tconst Appear = (deck, options, es5Filename) => {\n\n\t\tlet names = vars.names;\n\n\t\t// Set up names\n\t\tnames.baseclass = options.baseclass;\n\t\tnames.compatibilitybaseclass = options.compatibilitybaseclass;\n\t\tnames.fragmentSelector = \".fragment\";\n\t\tnames.fragmentClass = \"fragment\";\n\t\tnames.speedClasses = ['slower', 'slow', 'fast', 'faster'];\n\t\tnames.speedClasses.push(...names.speedClasses.map(speed => `animate__${speed}`));\n\t\tnames.animatecss = '[class^=\"animate__\"],[class*=\" animate__\"]';\n\t\tnames.es5Filename = es5Filename;\n\t\tnames.eventnames = ['ready', 'slidechanged', 'slidetransitionend', 'autoanimate', 'overviewhidden'];\n\t\n\t\t// Set up variables\n\t\tvars.deck = deck;\n\t\tvars.dom = deck.getRevealElement();\n\t\tvars.viewport = deck.getViewportElement();\n\t\tvars.slides = deck.getSlidesElement();\n\n\t\tvars.sections = vars.slides.querySelectorAll('section');\n\t\tvars.fragments = vars.slides.querySelectorAll(names.fragmentSelector);\n\t\tvars.regularSections = Array.from(vars.sections).filter( section => !isStack(section));\n\n\t\tif( /receiver/i.test( window.location.search ) ) vars.viewport.classList.add('sv');\n\n\t\tnames.eventnames.forEach( (eventname) => deck.on( eventname, event => { showHideSlide(event, options, names, vars) } ) );\n\n\t\tvars.viewport.addEventListener(\"animationend\", (event) => {\n\t\t\tevent.target.classList.add('animationended');\n\t\t});\n\t\tvars.viewport.addEventListener(\"fragmenthidden\", (event) => {\n\t\t\tevent.fragment.classList.remove('animationended');\n\t\t\tevent.fragment.querySelectorAll('.animationended').forEach(el => {\n\t\t\t\tel.classList.remove('animationended');\n\t\t\t});\n\t\t});\n\n\t\treturn new Promise(resolve => {\n\t\t\tprepare(options, vars, resolve);\n\t\t\tdebugLog(options, \"---------- Done preloading ----------\");\n\t\t});\n\t};\n\n\n\t/**\n\t* Initialize the plugin\n\t* @param {object} deck - The deck object\n\t*/\n\tconst init = (deck) => {\n\n\t\tlet defaultOptions = {\n\t\t\tbaseclass: 'animate__animated',\n\t\t\thideagain: true,\n\t\t\tdelay: 300,\n\t\t\tdebug: false,\n\t\t\tappearevent: 'slidetransitionend',\n\t\t\tautoappear: false,\n\t\t\tautoelements: false,\n\t\t\tappearparents: false,\n\t\t\tcsspath: '',\n\t\t\tanimatecsspath: {\n\t\t\t\tlink : 'https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css',\n\t\t\t\tcompat : 'https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.compat.css',\n\t\t\t},\n\t\t\tcompatibility: false,\n\t\t\tcompatibilitybaseclass: 'animated'\n\t\t};\n\n\t\toptions = mergeDeep(defaultOptions, deck.getConfig().appearance || {});\n\n\t\treturn Appear(deck, options, \"appearance.js\");\n\t};\n\n\treturn { id: 'appearance', init: init };\n};\n\nexport default Plugin;","import { toJSONString } from '../helpers';\n\n\n/**\n * Adds automatic animations to elements within a section based on specified criteria.\n *\n * This function examines the provided section for attributes and options to determine\n * which classes should be added to its elements to enable automatic animations.\n *\n * @param {HTMLElement} section - The section element to which automatic animations will be applied.\n * @param {Object} options - The existing user options object\n * @param {Object} vars - The existing vars object\n * @returns {undefined}\n */\nexport const addAutoAnimation = (section, options, vars) => {\n\n\tlet sectionAutoSelectors = null;\n\n\tif (section.hasAttribute(\"data-autoappear\")) {\n\n\t\tlet sectDataAppear = section.dataset.autoappear;\n\n\t\tif (sectDataAppear == \"auto\" || sectDataAppear == \"\" || sectDataAppear.length < 1 || sectDataAppear == \"true\") {\n\t\t\t// This section should get the global autoappear classes on its objects\n\t\t\tsectionAutoSelectors = options.autoelements ? options.autoelements : null;\n\t\t} else {\n\t\t\t// This section should get the local autoappear classes on its objects\n\t\t\tsectionAutoSelectors = sectDataAppear;\n\t\t}\n\n\t} else if ( options.autoappear && options.autoelements ) {\n\t\t// This section should get the global autoappear classes on its objects\n\t\tsectionAutoSelectors = options.autoelements;\n\t}\n\n\tif (sectionAutoSelectors) {\n\n\t\tlet elementsToAnimate = JSON.parse(toJSONString(sectionAutoSelectors));\n\n\t\tObject.entries(elementsToAnimate).forEach(([selector, assignables]) => {\n\n\n\t\t\t// Exclude the elements from vars.appearances\n\t\t\tlet elements = Array.from(section.querySelectorAll(selector)).filter( element => !vars.appearances.includes(element) );\n\n\t\t\tif (elements.length) {\n\n\t\t\t\telements.forEach((element) => {\n\n\t\t\t\t\tvars.appearances.push(element)\n\n\t\t\t\t\tlet newClasses = [], newDelay = null, speedClass = false, elementSplit = null, containerDelay = null;\n\n\t\t\t\t\tif (Array.isArray(assignables)) {\n\n\t\t\t\t\t\tnewClasses = assignables[0].split(/[ ,]+/);\n\t\t\t\t\t\tnewDelay = assignables[1];\n\n\t\t\t\t\t} else if (typeof assignables == \"string\"){\n\n\t\t\t\t\t\tnewClasses = assignables.split(/[ ,]+/);\n\n\t\t\t\t\t} else if (assignables.constructor === Object) {\n\n\t\t\t\t\t\tif (assignables.class || assignables.animation) {\n\t\t\t\t\t\t\tlet animationClass = assignables.animation ? assignables.animation : assignables.class;\n\t\t\t\t\t\t\tnewClasses = animationClass.split(/[ ,]+/);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables.speed) {\n\t\t\t\t\t\t\tspeedClass = String(assignables.speed);\n\t\t\t\t\t\t\tif (!speedClass.includes(\"animate__\")) {\n\t\t\t\t\t\t\t\tspeedClass = `animate__${speedClass}`\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables.delay) {\n\t\t\t\t\t\t\tnewDelay = String(assignables.delay);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables.split) {\n\t\t\t\t\t\t\telementSplit = String(assignables.split);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables[\"container-delay\"]) {\n\t\t\t\t\t\t\tcontainerDelay = String(assignables[\"container-delay\"]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telement.classList.add(...newClasses);\n\t\t\t\t\tif (speedClass) { element.classList.add(speedClass)}\n\n\t\t\t\t\tif (newDelay) {\n\t\t\t\t\t\tif (!element.dataset.delay) {\n\t\t\t\t\t\t\telement.dataset.delay = newDelay\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (elementSplit) {element.dataset.split = elementSplit};\n\t\t\t\t\tif (containerDelay) {element.dataset.containerDelay = containerDelay};\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","/**\n * Adds a base class to an HTML element if it doesn't already have it.\n *\n * This function checks if the specified HTML element has the specified base class,\n * and if not, it adds the base class to the element's class list.\n *\n * @param {HTMLElement} appearance - The HTML element to which the base class should be added.\n * @param {Object} names - The existing 'names' object\n * @returns {undefined}\n */\n\nexport const addBaseClass = (appearance, names) => {\n\tif (!appearance.classList.contains(names.baseclass)) {\n\t\tappearance.classList.add(names.baseclass);\n\t}\n\tif (appearance.classList.contains(names.fragmentClass)) {\n\t\tappearance.classList.add('custom');\n\t}\n}\n","export const convertToSpans = (parent, kind) => {\n\n\tlet splitElements = false;\n\tlet joinChar = ' ';\n\n\tif (kind == \"words\") {\n\t\tsplitElements = parent.textContent.trim().split(/\\s+/);\n\t\t\n\t} else if (kind == \"letters\") {\n\t\tsplitElements = parent.textContent.trim().split('');\n\t\tjoinChar = '';\n\t}\n\n\tif (splitElements) {\n\t\tconst parentAnimateClasses = Array.from(parent.classList).filter(className => className.startsWith('animate__'));\n\t\n\t\tconst newHtml = splitElements.map((element, index) => {\n\t\t\tconst span = document.createElement('span');\n\t\t\tspan.textContent = element;\n\t\t\tif (element == \" \") {span.textContent = \"\\u00A0\"}\n\t\n\t\t\tif (parent.dataset.delay && index !== 0) {\n\t\t\t\tspan.dataset.delay = parent.dataset.delay\n\t\t\t}\n\n\t\t\tif (parent.dataset.containerDelay && index === 0) {\n\t\t\t\tspan.dataset.delay = parent.dataset.containerDelay\n\t\t\t}\n\t\n\t\t\tparent.classList.forEach(className => className.startsWith('animate__') && span.classList.add(className));\n\t\t\treturn span.outerHTML;\n\t\t\t\n\t\t}).join(joinChar);\n\t\n\t\tparentAnimateClasses.forEach(className => parent.classList.remove(className));\n\t\tparent.removeAttribute('data-delay');\n\t\tparent.removeAttribute('data-split');\n\t\tparent.removeAttribute('data-container-delay');\n\t\n\t\tparent.innerHTML = newHtml;\n\t}\n\n\n};","export const addDelay = (appearanceArray, options, names) => {\n\n let delay = 0;\n appearanceArray.forEach((appearance, index) => {\n\n if ((index == 0 && appearance.dataset.delay) || index !=0) {\n\n let elementDelay = options.delay;\n\n if (appearance.dataset && appearance.dataset.delay) {\n elementDelay = parseInt(appearance.dataset.delay);\n }\n\n delay = delay + elementDelay;\n\n appearance.style.setProperty('animation-delay', delay + \"ms\");\n appearance.removeAttribute('data-delay');\n }\n\n })\n\n}\n"],"names":["isObject","item","Array","isArray","mergeDeep","target","sources","length","source","shift","key","Object","assign","toJSONString","str","JSONString","replace","JSON","parse","e","isJSON","stringify","trim","charAt","loadResource","url","type","callback","resource","head","document","querySelector","alreadyExists","createElement","src","rel","href","finish","call","onload","onreadystatechange","this","readyState","appendChild","debugLog","options","text","debug","console","log","getAndLoadCSS","fileName","thePath","path","pluginScript","getAttribute","slice","import","location","require","pathToFileURL","__filename","_documentCurrentScript","URL","baseURI","lastIndexOf","pluginPath","pluginBaseName","AppearanceStylePath","csspath","appearance","AnimateCSSPath","compatibility","animatecsspath","compat","link","hoistAppearance","from","baseclass","to","parentNode","sibling","children","dataset","appearParent","classList","copyDataAttributes","attributes","not","filter","nodeName","includes","forEach","nodeValue","setAttribute","innerHTML","add","elemsNotInClass","targetClass","excludeClass","el","querySelectorAll","s","closest","getAppearanceArrays","section","groupClass","result","map","frag","elemsInClass","parentClass","some","group","removeStartAttribute","slides","hideagain","appearanceCanStart","removeAttribute","turnOffSlideAppearances","names","fromAppearances","animatecss","remove","fromFragments","fragment","Plugin","vars","prepare","resolve","es5Filename","compatibilitybaseclass","appearances","regularSections","theSection","addAutoAnimation","sectionAutoSelectors","hasAttribute","sectDataAppear","autoappear","autoelements","elementsToAnimate","entries","selector","assignables","elements","element","push","newClasses","newDelay","speedClass","elementSplit","containerDelay","split","constructor","class","animation","speed","String","delay","theAppearance","index","fixListItem","appearparents","tagName","outerHTML","addBaseClass","contains","fragmentClass","convertToSpans","parent","kind","splitElements","joinChar","textContent","parentAnimateClasses","className","startsWith","newHtml","span","join","appearanceArrays","appearanceArray","addDelay","elementDelay","parseInt","style","setProperty","setTimeout","doneLoading","Appear","deck","fragmentSelector","speedClasses","eventnames","dom","getRevealElement","viewport","getViewportElement","getSlidesElement","sections","fragments","isStack","childNodes","i","test","window","search","eventname","on","event","showHideSlide","getConfig","view","isScroll","etype","fromSlide","previousSlide","toSlide","currentSlide","fromTo","appearevent","slideAppearevent","body","exitoverview","addEventListener","Promise","id","init"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"appearance.js","sources":["../../../src/plugin/js/helpers.js","../../../src/plugin/js/functions/get-load-css.js","../../../src/plugin/js/functions/fix-list-item.js","../../../src/plugin/js/functions/get-appearance-arrays.js","../../../src/plugin/js/functions/show-hide-slide.js","../../../src/plugin/js/plugin.js","../../../src/plugin/js/functions/add-auto-animation.js","../../../src/plugin/js/functions/add-base-class.js","../../../src/plugin/js/functions/convert-to-spans.js","../../../src/plugin/js/functions/add-delay.js"],"sourcesContent":["/**\n * Check if a given string is valid JSON.\n * @param {string} str - The string to be checked.\n * @returns {boolean} `true` if the string is valid JSON, otherwise `false`.\n */\nexport const isJSON = str => {\n\ttry {\n\t\treturn (JSON.parse(str) && !!str);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\n/**\n * Convert a NodeList into an array based on provided selectors.\n * @param {Element} container - The root element to begin querying.\n * @param {string} selectors - A string containing one or more CSS selectors separated by commas.\n * @returns {Element[]} Array of elements that match the given selectors.\n */\nexport const selectionArray = (container, selectors) => {\n\tlet selections = container.querySelectorAll(selectors);\n\tlet selectionarray = Array.prototype.slice.call(selections);\n\treturn selectionarray;\n};\n\n/**\n * Check if an element has child nodes that are `SECTION` elements.\n * @param {Object} param0 - Object with childNodes property.\n * @param {NodeListOf} param0.childNodes - List of child nodes of the element.\n * @returns {boolean} `true` if the element contains `SECTION` child nodes, otherwise `false`.\n */\nexport const isStack = ({childNodes}) => {\n\tlet isStack = false;\n\tfor (let i = 0; i < childNodes.length; i++) {\n\t\tif (childNodes[i].tagName == \"SECTION\") {\n\t\t\tisStack = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn isStack;\n};\n\n/**\n * Copy data attributes from a source element to a target element with an optional exception.\n * @param {Object} param0 - Object with attributes property.\n * @param {NamedNodeMap} param0.attributes - Map of attributes of the source element.\n * @param {Element} target - Target element to copy attributes to.\n * @param {string} [not] - Optional attribute name to exclude from copying.\n */\nexport const copyDataAttributes = ({attributes}, target, not) => {\n\t[...attributes].filter(({nodeName}) => nodeName.includes('data')).forEach(({nodeName, nodeValue}) => {\n\t\tif ((not && nodeName !== not) || !not) {\n\t\t\ttarget.setAttribute(nodeName, nodeValue);\n\t\t}\n\t});\n};\n\n/**\n * Check if the given item is an object and not an array.\n * @param {*} item - The item to be checked.\n * @returns {boolean} `true` if the item is an object and not an array, otherwise `false`.\n */\nexport const isObject = (item) => {\n\treturn (item && typeof item === 'object' && !Array.isArray(item));\n}\n\n/**\n * Deep merge multiple objects into a target object.\n * @param {Object} target - Target object to merge values into.\n * @param {...Object} sources - Source objects to merge from.\n * @returns {Object} The merged object.\n */\nexport const mergeDeep = (target, ...sources) => {\n\tif (!sources.length) return target;\n\tconst source = sources.shift();\n\n\tif (isObject(target) && isObject(source)) {\n\t\tfor (const key in source) {\n\t\t\tif (isObject(source[key])) {\n\t\t\t\tif (!target[key]) Object.assign(target, { [key]: {} });\n\t\t\t\tmergeDeep(target[key], source[key]);\n\t\t\t} else {\n\t\t\t\tObject.assign(target, { [key]: source[key] });\n\t\t\t}\n\t\t}\n\t}\n\treturn mergeDeep(target, ...sources);\n}\n\n/**\n * Resolves the given Promise immediately using setTimeout.\n * @param {Function} resolve - The resolve function of a Promise.\n * @returns {number} The ID value of the timer that is set.\n */\nexport const doneLoading = (resolve) => {\n\treturn setTimeout(resolve, 0);\n}\n\n\n/**\n * Converts a JavaScript object or a JSON-formatted string to a JSON string.\n *\n * @param {Object|string} str - The input string or object to be converted to a JSON string.\n * @returns {string} The JSON string.\n */\nexport const toJSONString = (str) => {\n\tlet JSONString = ''\n\n\tif (typeof str === \"string\") str = str.replace(/[“”]/g,'\"').replace(/[‘’]/g,\"'\");\n\n\tif (isJSON(str)) {\n\t\tJSONString = str\n\t} else {\n\t\tif (typeof str === \"object\") {\n\t\t\tJSONString = JSON.stringify(str, null, 2)\n\t\t} else {\n\t\t\tJSONString = str.trim().replace(/'/g, '\"').charAt(0) === \"{\" ? str.trim().replace(/'/g, '\"') : `{${str.trim().replace(/'/g, '\"')}}`;\n\t\t}\n\t}\n\treturn JSONString;\n}\n\n\n/**\n * Dynamically loads a resource from the specified URL and calls a callback function when it's loaded.\n * Will not load the resource if it has already been loaded.\n *\n * @param {string} url - The URL of the resource to load.\n * @param {string} type - The type of resource to load.\n * @param {Function} callback - A callback function to be called when the resource is loaded.\n */\n\nexport const loadResource = (url, type, callback) => {\n\tlet head = document.querySelector('head');\n\tlet resource;\n\tlet alreadyExists = false;\n\n\tif (type === 'script') {\n\t\tif (!document.querySelector(`script[src=\"${url}\"]`)) {\n\t\t\tresource = document.createElement('script');\n\t\t\tresource.type = 'text/javascript';\n\t\t\tresource.src = url;\n\t\t} else { alreadyExists = true }\n\n\t} else if (type === 'stylesheet') {\n\n\t\tif (!document.querySelector(`link[href=\"${url}\"]`)) {\n\t\t\tresource = document.createElement('link');\n\t\t\tresource.rel = 'stylesheet';\n\t\t\tresource.href = url;\n\t\t} else { alreadyExists = true }\n\t}\n\n\tif (!alreadyExists) {\n\t\tconst finish = () => {\n\t\t\tif (typeof callback === 'function') {\n\t\t\tcallback.call();\n\t\t\tcallback = null;\n\t\t\t}\n\t\t};\n\t\tresource.onload = finish;\n\t\tresource.onreadystatechange = function () {\n\t\t\tif (this.readyState === 'loaded') {\n\t\t\t\tfinish();\n\t\t\t}\n\t\t};\n\t\thead.appendChild(resource);\n\t}\n}\n\n\n/**\n * Retrieves the path of a JavaScript file based on its filename.\n *\n * @param {string} fileName - The filename of the script.\n * @returns {string} The path to the plugin's location.\n */\nexport const pluginPath = (fileName) => {\n\tlet path;\n\tlet pluginScript = document.querySelector(`script[src$=\"${fileName}\"]`);\n\tif (pluginScript) {\n\t\tpath = pluginScript.getAttribute(\"src\").slice(0, -1 * (fileName.length));\n\t} else {\n\t\tpath = import.meta.url.slice(0, import.meta.url.lastIndexOf('/') + 1);\n\t}\n\treturn path;\n}\n\n\n/**\n * Check if element 'a' appears before element 'b' in the DOM tree.\n *\n * @param {HTMLElement} a - The first HTML element to compare.\n * @param {HTMLElement} b - The second HTML element to compare.\n * @returns {boolean|undefined} - Returns `true` if element 'a' appears before element 'b', `false` if 'b' appears before 'a', and `undefined` if the elements have no relative position in the DOM tree.\n */\nexport const isBefore = (a, b) => {\n var all = document.getElementsByTagName('*');\n\n for (var i = 0; i < all.length; ++i) {\n if (all[i] === a) {\n return true;\n } else if (all[i] === b) {\n return false;\n }\n }\n // If the elements have no relative position in the DOM tree\n return undefined;\n};\n\n\n/**\n * Check the number of occurrences of a specific element in an array.\n *\n * @param {Array} array - The array in which occurrences are to be counted.\n * @param {*} element - The element to be counted within the array.\n * @returns {number} - The count of occurrences of the specified element in the array.\n */\nexport const checkOccurrence = (array, element) => {\n let counter = 0;\n for (let i = 0; i < array.length; i++) {\n if (array[i] == element) {\n counter++;\n }\n }\n return counter;\n};\n\n\n/**\n * Create an HTML element from a string of HTML.\n *\n * @param {string} thehtml - The string of HTML to be converted into an HTML element.\n * @returns {HTMLElement | null} - The HTML element created from the provided HTML string. Returns `null` if the element couldn't be created.\n */\nexport const createNode = (thehtml) => {\n const fragment = document.createRange().createContextualFragment(thehtml);\n return fragment.firstElementChild;\n};\n\n\n/**\n * Gets the index of the given DOM element within its parent's children.\n * @param {HTMLElement} elm - The target element.\n * @returns {number} - The index of the element within its parent's children.\n */\nexport const getNodeIndex = (elm) => [...elm.parentNode.children].indexOf(elm);\n\n\nexport const debugLog = (options, text) => {\n\tif (options.debug) console.log(text);\n}\n\n","import { loadResource } from '../helpers';\nimport { pluginPath } from '../helpers';\n\n/**\n * Retrieves and loads CSS stylesheets based on the provided options and ES5 filename.\n *\n * @param {Object} options - Configuration options for loading CSS.\n * @param {string} fileName - The filename of the script.\n */\n\nexport const getAndLoadCSS = (options, fileName) => {\n\tlet thePath = pluginPath(fileName);\n\tlet pluginBaseName = fileName.replace(/\\.[^/.]+$/, \"\");\n\n\tif (options.cssautoload) {\n\t\tlet AppearanceStylePath = options.csspath.appearance ? options.csspath.appearance : null || `${thePath}${pluginBaseName}.css` || `plugin/${pluginBaseName}/${pluginBaseName}.css`\n\t\tlet AnimateCSSPath = !options.compatibility ? options.animatecsspath.link : options.animatecsspath.compat;\n\t\n\t\tif (options.debug) {\n\t\t\tconsole.log(`Paths:`);\n\t\t\tconsole.log(` - Plugin path = ${thePath}`);\n\t\t\tconsole.log(` - Appearance CSS path = ${AppearanceStylePath}`);\n\t\t\tconsole.log(` - AnimateCSS CSS path = ${AnimateCSSPath}`);\n\t\t}\n\t\n\t\tloadResource(AnimateCSSPath, 'stylesheet', function () {\n\t\t\tloadResource(AppearanceStylePath, 'stylesheet');\n\t\t});\n\t}\n}","import { copyDataAttributes } from '../helpers';\n\n/**\n * Hoist a list item's appearance to its parent element's appearance.\n *\n * @param {HTMLElement} from - The list item element.\n * @returns {undefined}\n */\nconst hoistAppearance = (from, baseclass) => {\n\tlet to = from.parentNode;\n\tif (!to) return;\n \n\tfor (const sibling of to.children) {\n\t if (sibling !== from && sibling.dataset.appearParent) return;\n\t}\n \n\tto.classList = from.classList;\n\tcopyDataAttributes(from, to, \"data-appear-parent\");\n\tto.innerHTML = from.innerHTML;\n\tto.classList.add(baseclass);\n};\n\n\n/**\n * Fix list items that were changed by Quarto.\n *\n * This function is designed for use with Quarto and handles the conversion of list items\n * with Appearance classes to their parent elements when a manual attribute is present.\n * It also provides automatic conversion for list items that directly contain spans, which\n * is related to Quarto's wrapping of list content in a span.\n *\n * @param {HTMLElement} appearance - The list item element whose appearance will be converted.\n * @param {Object} options - An options object that controls the conversion behavior.\n * @param {boolean} options.appearparents - If `true`, automatic conversion of list items with spans is enabled.\n * @returns {undefined}\n */\nexport const fixListItem = (appearance, options, names) => {\n\n\tlet baseclass = names.baseclass\n\tif (appearance.hasAttribute(\"data-appear-parent\")) {\n\t\thoistAppearance(appearance, baseclass);\n\t}\n\n\tif (options.appearparents) {\n\t\tif (appearance.parentNode && appearance.parentNode.tagName) {\n\t\t\tif (appearance.tagName == \"SPAN\" && appearance.parentNode.tagName == \"LI\") {\n\t\t\t\tlet spanLength = String(appearance.outerHTML).length;\n\t\t\t\tlet liContentLength = String(appearance.parentNode.innerHTML).length;\n\t\t\t\tif (spanLength == liContentLength) {\n\t\t\t\t\thoistAppearance(appearance);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Selects elements with a specified class that are not nested inside an element with another specified class.\n * @param {string} targetClass - The class name to select elements.\n * @param {string} excludeClass - The class name to exclude elements nested inside it.\n * @param {Element} el - The element to find the target elements in.\n * @returns {Element[]} - Array of selected elements.\n */\nconst elemsNotInClass = (targetClass, excludeClass, el) => \n Array.from(el.querySelectorAll(`.${targetClass}`))\n .filter(s => !s.closest(`.${excludeClass}`));\n\n/**\n * Selects elements with a specified class that are nested inside an element with another specified class.\n * @param {string} targetClass - The class name to select elements.\n * @param {string} parentClass - The class name of the parent to find elements in.\n * @param {Element} el - The element to find the target elements in.\n * @returns {Element[]} - Array of selected elements.\n */\nconst elemsInClass = (targetClass, parentClass, el) =>\n Array.from(el.querySelectorAll(`.${targetClass}`))\n .filter(s => s.closest(`.${parentClass}`) === el);\n\n/**\n * Extracts groups of elements with a specified class from the provided section element.\n * Groups are formed based on nesting inside elements with another specified class.\n * @param {Element} section - The section to extract data from.\n * @returns {Element[][]} - Nested arrays of selected elements.\n */\n\n\n/**\n * Extracts groups of elements with a specified class from the provided section element.\n * Groups are formed based on nesting inside elements with another specified class.\n * @param {Element} section - The section to extract data from.\n * @param {string} targetClass - The class name to select elements.\n * @param {string} groupClass - The class name of the parent to find elements in.\n * @returns {Element[][]} - Nested arrays of selected elements.\n */\nexport const getAppearanceArrays = (section, targetClass, groupClass) => {\n const result = [\n elemsNotInClass(targetClass, groupClass, section), \n ...Array.from(section.querySelectorAll(`.${groupClass}`))\n .map(frag => elemsInClass(targetClass, groupClass, frag))\n ];\n\n\tif (result.some(group => group.length > 0)) {\n return result;\n } else {\n\t\treturn false;\n\t}\n};\n","/**\n * Derives slide from and to from the event object.\n *\n * @param {Object} event - The event object containing slide transition details.\n * @returns {Object} - An object containing references to the \"from\" and \"to\" slides.\n */\nconst fromTo = (event) => {\n\tlet slides = {};\n\tslides.from = event.fromSlide || event.previousSlide || null;\n\tslides.to = event.toSlide || event.currentSlide || null;\n\treturn slides;\n};\n\n/**\n * A function that determines the appearance event for a given slide.\n *\n * This function checks the `data-appearevent` attribute of the slide and the `options.appearevent` parameter.\n * If `data-appearevent` is set to \"auto\", it is converted to \"autoanimate\". If `options.appearevent` is \"auto\", it is also converted to \"autoanimate\".\n * The function returns the appearance event, prioritizing `data-appearevent` over `options.appearevent`.\n *\n * @param {HTMLElement} toSlide - The slide for which the appearance event is determined.\n * @param {Object} options - An object containing options for the appearance event.\n * @param {string} options.appearevent - The appearance event option provided in the `options` object.\n *\n * @returns {string} - The determined appearance event for the slide, either from `data-appearevent` or `options.appearevent`.\n */\nconst slideAppearevent = (toSlide, options) => {\n\n\tif (toSlide.dataset.appearevent && toSlide.dataset.appearevent === \"auto\" ) {\n\t\ttoSlide.dataset.appearevent = \"autoanimate\"\n\t}\n\tif (options.appearevent == \"auto\") {options.appearevent = \"autoanimate\"}\n\treturn toSlide.dataset.appearevent ? toSlide.dataset.appearevent : options.appearevent;\n};\n\n/**\n * Remove the 'data-appearance-can-start' attribute from the 'from' slide if the 'hideagain' option is enabled.\n *\n * @param {HTMLElement} slides - The container element for the slides.\n * @param {Object} options - An object containing configuration options.\n * @param {boolean} options.hideagain - A flag indicating whether to remove the attribute when 'hideagain' is true.\n */\nconst removeStartAttribute = (slides, options) => {\n\tif (options.hideagain) {\n\t\tif (slides.from && slides.from.dataset.appearanceCanStart ) {\n\t\t\tslides.from.removeAttribute('data-appearance-can-start');\n\t\t}\n\t}\n};\n\n\n/**\n * Turn off slide appearances when transitioning from one slide to another if the 'hideagain' option is enabled.\n *\n * @param {HTMLElement} slides - The container element for the slides.\n * @param {Object} options - An object containing configuration options.\n * @param {string} names.animatecss - The CSS selector for animated elements.\n */\nconst turnOffSlideAppearances = (slides, options, names) => {\n\tif (options.hideagain) {\n\t\tif (slides && slides.from) {\n\n\t\t\t// Remove animationended class from animated elements when moving away from that slide\n\t\t\tlet fromAppearances = slides.from.querySelectorAll(names.animatecss);\n\t\t\tif (fromAppearances) {\n\t\t\t\tfromAppearances.forEach( appearance => {\n\t\t\t\t\tappearance.classList.remove('animationended');\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Remove visible class from fragments when moving away from that slide\n\t\t\tlet fromFragments = slides.from.querySelectorAll(`.fragment.visible`);\n\t\t\tif (fromFragments) {\n\t\t\t\tfromFragments.forEach(fragment => {\n\t\t\t\t\tfragment.classList.remove('visible');\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n/**\n * Handles the showing and hiding of slides based on the provided event and options.\n *\n * @param {Object} event - The event object containing slide transition details.\n * @param {Object} options - An object containing configurations for slide appearance management.\n */\nexport const showHideSlide = (event, options, names, vars) => {\n\n\tlet view = vars.deck.getConfig().view;\n\tlet isScroll = vars.viewport.classList.contains(\"reveal-scroll\");\n\tlet etype = event.type;\n\tlet slides = fromTo(event);\n\n\tif (slides.to) {\n\n\t\tif (etype == \"ready\") {\n\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t}\n\n\t\tlet appearevent = slideAppearevent(slides.to, options)\n\n\t\tif (etype == appearevent || (etype == \"slidetransitionend\" && appearevent == \"autoanimate\")) {\n\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t}\n\n\t\t// Add scroll mode compatibility, does not have a slidetransitionend event yet\n\t\tif (isScroll && etype == 'slidechanged' ) {\n\n\t\t\tremoveStartAttribute(slides, options);\n\t\t\tturnOffSlideAppearances(slides, options, names);\n\n\t\t\t// Add delay to allow for scroll animation to finish\n\t\t\tsetTimeout(() => {\n\t\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t\t}, options.delay)\n\t\t}\n\n\n\t\tif (etype == \"slidetransitionend\" ) {\n\n\t\t\tremoveStartAttribute(slides, options);\n\t\t\tturnOffSlideAppearances(slides, options, names);\n\t\t}\n\t\t\n\t\tif (etype == 'slidechanged' && document.body.dataset.exitoverview) {\n\t\t\tremoveStartAttribute(slides, options);\n\t\t\tslides.to.dataset.appearanceCanStart = true;\n\n\t\t} else if (etype == 'overviewhidden' ) {\n\n\t\t\tdocument.body.dataset.exitoverview = true;\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tdocument.body.removeAttribute('data-exitoverview')\n\t\t\t}, 500)\n\n\t\t\tif (event.currentSlide ) {\n\t\t\t\tremoveStartAttribute(slides, options);\n\t\t\t\tslides.to.dataset.appearanceCanStart = true;\n\t\t\t}\n\t\t}\n\t}\n}","import { debugLog, mergeDeep, doneLoading, isStack } from './helpers';\n\nimport {getAndLoadCSS} from './functions/get-load-css.js';\nimport {addAutoAnimation} from './functions/add-auto-animation.js';\nimport {fixListItem} from './functions/fix-list-item';\nimport {addBaseClass} from './functions/add-base-class.js';\nimport {addDelay} from './functions/add-delay.js';\nimport {getAppearanceArrays} from './functions/get-appearance-arrays.js';\nimport {convertToSpans} from './functions/convert-to-spans';\nimport {showHideSlide} from './functions/show-hide-slide.js';\n\n\nconst Plugin = () => {\n\n\tconst vars = {};\n\tvars.names = {};\n\tlet options = {};\n\n\t/**\n\t* Prepare the plugin to find Appearance elements\n\t* @param {Object} vars - The variables to be prepared.\n\t* @param {Object} names - The names to be prepared.\n\t* @param {Function} resolve - The callback function to be called when preparation is complete.\n\t* @throws {Error} Throws an error if the 'options' object is not defined.\n\t*/\n\tconst prepare = (options, vars, resolve) => {\n\n\t\tdebugLog(options, \"------------- Preloading -------------\");\n\n\t\tlet names = vars.names;\n\n\t\tgetAndLoadCSS(options, names.es5Filename);\n\n\t\tif (options.compatibility) {\n\t\t\tnames.animatecss = '.backInDown, .backInLeft, .backInRight, .backInUp, .bounceIn, .bounceInDown, .bounceInLeft, .bounceInRight, .bounceInUp, .fadeIn, .fadeInDown, .fadeInDownBig, .fadeInLeft, .fadeInLeftBig, .fadeInRight, .fadeInRightBig, .fadeInUp, .fadeInUpBig, .fadeInTopLeft, .fadeInTopRight, .fadeInBottomLeft, .fadeInBottomRight, .flipInX, .flipInY, .lightSpeedInRight, .lightSpeedInLeft, .rotateIn, .rotateInDownLeft, .rotateInDownRight, .rotateInUpLeft, .rotateInUpRight, .jackInTheBox, .rollIn, .zoomIn, .zoomInDown, .zoomInLeft, .zoomInRight, .zoomInUp, .slideInDown, .slideInLeft, .slideInRight, .slideInUp, .skidLeft, .skidLeftBig, .skidRight, .skidRightBig, .shrinkIn, .shrinkInBlur';\n\t\t\tnames.baseclass = options.compatibilitybaseclass\n\t\t}\n\n\t\tvars.appearances = Array.from(vars.slides.querySelectorAll(names.animatecss));\n\n\t\t// Go through each section to see if there are any (auto) selectors that need animation classes\n\t\tvars.regularSections.forEach(theSection => addAutoAnimation(theSection, options, vars));\n\n\t\tvars.appearances.forEach((theAppearance, index) => {\n\t\t\t// Fix any list item where the Appearance classes were moved to the span (Quarto does this)\n\t\t\tfixListItem(theAppearance, options, names);\n\n\t\t\t// Go through each appearance element and add the baseclass if it doesn't have it\n\t\t\taddBaseClass(theAppearance, names);\n\n\t\t\tif (theAppearance.hasAttribute('data-split')) {\n\t\t\t\tconvertToSpans(theAppearance, theAppearance.dataset.split);\n\t\t\t}\n\t\t});\n\n\t\tvars.regularSections.forEach((theSection, index) => {\n\t\t\t// Get all the Appearances in the section as separate arrays per delay loop\n\t\t\tlet appearanceArrays = getAppearanceArrays(theSection, names.baseclass, names.fragmentClass);\n\n\t\t\tif (appearanceArrays) {\n\t\t\t\tappearanceArrays.forEach((appearanceArray) => {\n\t\t\t\t\t// Add the delays to each appearance in the array\n\t\t\t\t\taddDelay(appearanceArray, options, names)\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\tdoneLoading(resolve);\n\t}\n\n\t/**\n\t* The main function of the plugin\n\t* @param {object} deck - The deck object\n\t* @param {object} options - The options object\n\t* @param {string} es5Filename - The name of the file that will be used\n\t*/\n\tconst Appear = (deck, options, es5Filename) => {\n\n\t\tlet names = vars.names;\n\n\t\t// Set up names\n\t\tnames.baseclass = options.baseclass;\n\t\tnames.compatibilitybaseclass = options.compatibilitybaseclass;\n\t\tnames.fragmentSelector = \".fragment\";\n\t\tnames.fragmentClass = \"fragment\";\n\t\tnames.speedClasses = ['slower', 'slow', 'fast', 'faster'];\n\t\tnames.speedClasses.push(...names.speedClasses.map(speed => `animate__${speed}`));\n\t\tnames.animatecss = '[class^=\"animate__\"],[class*=\" animate__\"]';\n\t\tnames.es5Filename = es5Filename;\n\t\tnames.eventnames = ['ready', 'slidechanged', 'slidetransitionend', 'autoanimate', 'overviewhidden'];\n\t\n\t\t// Set up variables\n\t\tvars.deck = deck;\n\t\tvars.dom = deck.getRevealElement();\n\t\tvars.viewport = deck.getViewportElement();\n\t\tvars.slides = deck.getSlidesElement();\n\n\t\tvars.sections = vars.slides.querySelectorAll('section');\n\t\tvars.fragments = vars.slides.querySelectorAll(names.fragmentSelector);\n\t\tvars.regularSections = Array.from(vars.sections).filter( section => !isStack(section));\n\n\t\t// Check if Speaker view window\n\t\tif( /receiver/i.test( window.location.search ) ) vars.viewport.classList.add('sv');\n\n\t\tnames.eventnames.forEach( (eventname) => deck.on( eventname, event => { showHideSlide(event, options, names, vars) } ) );\n\n\t\tvars.viewport.addEventListener(\"animationend\", (event) => {\n\t\t\tevent.target.classList.add('animationended');\n\t\t});\n\t\tvars.viewport.addEventListener(\"fragmenthidden\", (event) => {\n\t\t\tevent.fragment.classList.remove('animationended');\n\t\t\tevent.fragment.querySelectorAll('.animationended').forEach(el => {\n\t\t\t\tel.classList.remove('animationended');\n\t\t\t});\n\t\t});\n\n\t\treturn new Promise(resolve => {\n\t\t\tprepare(options, vars, resolve);\n\t\t\tdebugLog(options, \"---------- Done preloading ----------\");\n\t\t});\n\t};\n\n\n\t/**\n\t* Initialize the plugin\n\t* @param {object} deck - The deck object\n\t*/\n\tconst init = (deck) => {\n\n\t\tlet defaultOptions = {\n\t\t\tbaseclass: 'animate__animated',\n\t\t\thideagain: true,\n\t\t\tdelay: 300,\n\t\t\tdebug: false,\n\t\t\tappearevent: 'slidetransitionend',\n\t\t\tautoappear: false,\n\t\t\tautoelements: false,\n\t\t\tappearparents: false,\n\t\t\tcssautoload: true,\n\t\t\tcsspath: '',\n\t\t\tanimatecsspath: {\n\t\t\t\tlink : 'https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css',\n\t\t\t\tcompat : 'https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.compat.css',\n\t\t\t},\n\t\t\tcompatibility: false,\n\t\t\tcompatibilitybaseclass: 'animated'\n\t\t};\n\n\t\toptions = mergeDeep(defaultOptions, deck.getConfig().appearance || {});\n\n\t\treturn Appear(deck, options, \"appearance.js\");\n\t};\n\n\treturn { id: 'appearance', init: init };\n};\n\nexport default Plugin;","import { toJSONString } from '../helpers';\n\n\n/**\n * Adds automatic animations to elements within a section based on specified criteria.\n *\n * This function examines the provided section for attributes and options to determine\n * which classes should be added to its elements to enable automatic animations.\n *\n * @param {HTMLElement} section - The section element to which automatic animations will be applied.\n * @param {Object} options - The existing user options object\n * @param {Object} vars - The existing vars object\n * @returns {undefined}\n */\nexport const addAutoAnimation = (section, options, vars) => {\n\n\tlet sectionAutoSelectors = null;\n\n\tif (section.hasAttribute(\"data-autoappear\")) {\n\n\t\tlet sectDataAppear = section.dataset.autoappear;\n\n\t\tif (sectDataAppear == \"auto\" || sectDataAppear == \"\" || sectDataAppear.length < 1 || sectDataAppear == \"true\") {\n\t\t\t// This section should get the global autoappear classes on its objects\n\t\t\tsectionAutoSelectors = options.autoelements ? options.autoelements : null;\n\t\t} else {\n\t\t\t// This section should get the local autoappear classes on its objects\n\t\t\tsectionAutoSelectors = sectDataAppear;\n\t\t}\n\n\t} else if ( options.autoappear && options.autoelements ) {\n\t\t// This section should get the global autoappear classes on its objects\n\t\tsectionAutoSelectors = options.autoelements;\n\t}\n\n\tif (sectionAutoSelectors) {\n\n\t\tlet elementsToAnimate = JSON.parse(toJSONString(sectionAutoSelectors));\n\n\t\tObject.entries(elementsToAnimate).forEach(([selector, assignables]) => {\n\n\n\t\t\t// Exclude the elements from vars.appearances\n\t\t\tlet elements = Array.from(section.querySelectorAll(selector)).filter( element => !vars.appearances.includes(element) );\n\n\t\t\tif (elements.length) {\n\n\t\t\t\telements.forEach((element) => {\n\n\t\t\t\t\tvars.appearances.push(element)\n\n\t\t\t\t\tlet newClasses = [], newDelay = null, speedClass = false, elementSplit = null, containerDelay = null;\n\n\t\t\t\t\tif (Array.isArray(assignables)) {\n\n\t\t\t\t\t\tnewClasses = assignables[0].split(/[ ,]+/);\n\t\t\t\t\t\tnewDelay = assignables[1];\n\n\t\t\t\t\t} else if (typeof assignables == \"string\"){\n\n\t\t\t\t\t\tnewClasses = assignables.split(/[ ,]+/);\n\n\t\t\t\t\t} else if (assignables.constructor === Object) {\n\n\t\t\t\t\t\tif (assignables.class || assignables.animation) {\n\t\t\t\t\t\t\tlet animationClass = assignables.animation ? assignables.animation : assignables.class;\n\t\t\t\t\t\t\tnewClasses = animationClass.split(/[ ,]+/);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables.speed) {\n\t\t\t\t\t\t\tspeedClass = String(assignables.speed);\n\t\t\t\t\t\t\tif (!speedClass.includes(\"animate__\")) {\n\t\t\t\t\t\t\t\tspeedClass = `animate__${speedClass}`\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables.delay) {\n\t\t\t\t\t\t\tnewDelay = String(assignables.delay);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables.split) {\n\t\t\t\t\t\t\telementSplit = String(assignables.split);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (assignables[\"container-delay\"]) {\n\t\t\t\t\t\t\tcontainerDelay = String(assignables[\"container-delay\"]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telement.classList.add(...newClasses);\n\t\t\t\t\tif (speedClass) { element.classList.add(speedClass)}\n\n\t\t\t\t\tif (newDelay) {\n\t\t\t\t\t\tif (!element.dataset.delay) {\n\t\t\t\t\t\t\telement.dataset.delay = newDelay\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (elementSplit) {element.dataset.split = elementSplit};\n\t\t\t\t\tif (containerDelay) {element.dataset.containerDelay = containerDelay};\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","/**\n * Adds a base class to an HTML element if it doesn't already have it.\n *\n * This function checks if the specified HTML element has the specified base class,\n * and if not, it adds the base class to the element's class list.\n *\n * @param {HTMLElement} appearance - The HTML element to which the base class should be added.\n * @param {Object} names - The existing 'names' object\n * @returns {undefined}\n */\n\nexport const addBaseClass = (appearance, names) => {\n\tif (!appearance.classList.contains(names.baseclass)) {\n\t\tappearance.classList.add(names.baseclass);\n\t}\n\tif (appearance.classList.contains(names.fragmentClass)) {\n\t\tappearance.classList.add('custom');\n\t}\n}\n","export const convertToSpans = (parent, kind) => {\n\n\tlet splitElements = false;\n\tlet joinChar = ' ';\n\n\tif (kind == \"words\") {\n\t\tsplitElements = parent.textContent.trim().split(/\\s+/);\n\t\t\n\t} else if (kind == \"letters\") {\n\t\tsplitElements = parent.textContent.trim().split('');\n\t\tjoinChar = '';\n\t}\n\n\tif (splitElements) {\n\t\tconst parentAnimateClasses = Array.from(parent.classList).filter(className => className.startsWith('animate__'));\n\t\n\t\tconst newHtml = splitElements.map((element, index) => {\n\t\t\tconst span = document.createElement('span');\n\t\t\tspan.textContent = element;\n\t\t\tif (element == \" \") {span.textContent = \"\\u00A0\"}\n\t\n\t\t\tif (parent.dataset.delay && index !== 0) {\n\t\t\t\tspan.dataset.delay = parent.dataset.delay\n\t\t\t}\n\n\t\t\tif (parent.dataset.containerDelay && index === 0) {\n\t\t\t\tspan.dataset.delay = parent.dataset.containerDelay\n\t\t\t}\n\t\t\tparent.classList.add('wordchargroup');\n\t\n\t\t\tparent.classList.forEach(className => className.startsWith('animate__') && span.classList.add(className));\n\t\t\treturn span.outerHTML;\n\t\t\t\n\t\t}).join(joinChar);\n\t\n\t\tparentAnimateClasses.forEach(className => parent.classList.remove(className));\n\t\tparent.removeAttribute('data-delay');\n\t\tparent.removeAttribute('data-split');\n\t\tparent.removeAttribute('data-container-delay');\n\t\n\t\tparent.innerHTML = newHtml;\n\t}\n\n\n};","export const addDelay = (appearanceArray, options, names) => {\n\n let delay = 0;\n appearanceArray.forEach((appearance, index) => {\n\n if ((index == 0 && appearance.dataset.delay) || index !=0) {\n\n let elementDelay = options.delay;\n\n if (appearance.dataset && appearance.dataset.delay) {\n elementDelay = parseInt(appearance.dataset.delay);\n }\n\n delay = delay + elementDelay;\n\n appearance.style.setProperty('animation-delay', delay + \"ms\");\n appearance.removeAttribute('data-delay');\n }\n\n })\n\n}\n"],"names":["isObject","item","Array","isArray","mergeDeep","target","sources","length","source","shift","key","Object","assign","toJSONString","str","JSONString","replace","JSON","parse","e","isJSON","stringify","trim","charAt","loadResource","url","type","callback","resource","head","document","querySelector","alreadyExists","createElement","src","rel","href","finish","call","onload","onreadystatechange","this","readyState","appendChild","debugLog","options","text","debug","console","log","getAndLoadCSS","fileName","thePath","path","pluginScript","getAttribute","slice","import","location","require","pathToFileURL","__filename","_documentCurrentScript","URL","baseURI","lastIndexOf","pluginPath","pluginBaseName","cssautoload","AppearanceStylePath","csspath","appearance","AnimateCSSPath","compatibility","animatecsspath","compat","link","hoistAppearance","from","baseclass","to","parentNode","sibling","children","dataset","appearParent","classList","copyDataAttributes","attributes","not","filter","nodeName","includes","forEach","nodeValue","setAttribute","innerHTML","add","elemsNotInClass","targetClass","excludeClass","el","querySelectorAll","s","closest","getAppearanceArrays","section","groupClass","result","map","frag","elemsInClass","parentClass","some","group","removeStartAttribute","slides","hideagain","appearanceCanStart","removeAttribute","turnOffSlideAppearances","names","fromAppearances","animatecss","remove","fromFragments","fragment","Plugin","vars","prepare","resolve","es5Filename","compatibilitybaseclass","appearances","regularSections","theSection","addAutoAnimation","sectionAutoSelectors","hasAttribute","sectDataAppear","autoappear","autoelements","elementsToAnimate","entries","selector","assignables","elements","element","push","newClasses","newDelay","speedClass","elementSplit","containerDelay","split","constructor","class","animation","speed","String","delay","theAppearance","index","fixListItem","appearparents","tagName","outerHTML","addBaseClass","contains","fragmentClass","convertToSpans","parent","kind","splitElements","joinChar","textContent","parentAnimateClasses","className","startsWith","newHtml","span","join","appearanceArrays","appearanceArray","addDelay","elementDelay","parseInt","style","setProperty","setTimeout","doneLoading","Appear","deck","fragmentSelector","speedClasses","eventnames","dom","getRevealElement","viewport","getViewportElement","getSlidesElement","sections","fragments","isStack","childNodes","i","test","window","search","eventname","on","event","showHideSlide","getConfig","view","isScroll","etype","fromSlide","previousSlide","toSlide","currentSlide","fromTo","appearevent","slideAppearevent","body","exitoverview","addEventListener","Promise","id","init"],"mappings":"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"}
\ No newline at end of file
diff --git a/demo/plugin/highlight/highlight.esm.js b/demo/plugin/highlight/highlight.esm.js
index d146177..adda9ee 100644
--- a/demo/plugin/highlight/highlight.esm.js
+++ b/demo/plugin/highlight/highlight.esm.js
@@ -2,4 +2,4 @@ function e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"de
/*!
* reveal.js plugin that adds syntax highlight support.
*/
-const Rs={id:"highlight",HIGHLIGHT_STEP_DELIMITER:"|",HIGHLIGHT_LINE_DELIMITER:",",HIGHLIGHT_LINE_RANGE_DELIMITER:"-",hljs:fs,init:function(e){let t=e.getConfig().highlight||{};t.highlightOnLoad="boolean"!=typeof t.highlightOnLoad||t.highlightOnLoad,t.escapeHTML="boolean"!=typeof t.escapeHTML||t.escapeHTML,Array.from(e.getRevealElement().querySelectorAll("pre code")).forEach((e=>{e.parentNode.classList.add("code-wrapper");let a=e.querySelector('script[type="text/template"]');a&&(e.textContent=a.innerHTML),e.hasAttribute("data-trim")&&"function"==typeof e.innerHTML.trim&&(e.innerHTML=function(e){function t(e){return e.replace(/^[\s\uFEFF\xA0]+/g,"")}function a(e){for(var t=e.split("\n"),a=0;a=0&&""===t[a].trim();a--)t.splice(a,1);return t.join("\n")}return function(e){var n=a(e.innerHTML).split("\n"),i=n.reduce((function(e,a){return a.length>0&&t(a).length>0&&e>a.length-t(a).length?a.length-t(a).length:e}),Number.POSITIVE_INFINITY);return n.map((function(e,t){return e.slice(i)})).join("\n")}(e)}(e)),t.escapeHTML&&!e.hasAttribute("data-noescape")&&(e.innerHTML=e.innerHTML.replace(//g,">")),e.addEventListener("focusout",(function(e){fs.highlightElement(e.currentTarget)}),!1)})),"function"==typeof t.beforeHighlight&&t.beforeHighlight(fs),t.highlightOnLoad&&Array.from(e.getRevealElement().querySelectorAll("pre code")).forEach((e=>{Rs.highlightBlock(e)})),e.on("pdf-ready",(function(){[].slice.call(e.getRevealElement().querySelectorAll("pre code[data-line-numbers].current-fragment")).forEach((function(e){Rs.scrollHighlightedLineIntoView(e,{},!0)}))}))},highlightBlock:function(e){if(fs.highlightElement(e),0!==e.innerHTML.trim().length&&e.hasAttribute("data-line-numbers")){fs.lineNumbersBlock(e,{singleLine:!0});var t={currentBlock:e},a=Rs.deserializeHighlightSteps(e.getAttribute("data-line-numbers"));if(a.length>1){var n=parseInt(e.getAttribute("data-fragment-index"),10);("number"!=typeof n||isNaN(n))&&(n=null),a.slice(1).forEach((function(a){var i=e.cloneNode(!0);i.setAttribute("data-line-numbers",Rs.serializeHighlightSteps([a])),i.classList.add("fragment"),e.parentNode.appendChild(i),Rs.highlightLines(i),"number"==typeof n?(i.setAttribute("data-fragment-index",n),n+=1):i.removeAttribute("data-fragment-index"),i.addEventListener("visible",Rs.scrollHighlightedLineIntoView.bind(Rs,i,t)),i.addEventListener("hidden",Rs.scrollHighlightedLineIntoView.bind(Rs,i.previousSibling,t))})),e.removeAttribute("data-fragment-index"),e.setAttribute("data-line-numbers",Rs.serializeHighlightSteps([a[0]]))}var i="function"==typeof e.closest?e.closest("section:not(.stack)"):null;if(i){var r=function(){Rs.scrollHighlightedLineIntoView(e,t,!0),i.removeEventListener("visible",r)};i.addEventListener("visible",r)}Rs.highlightLines(e)}},scrollHighlightedLineIntoView:function(e,t,a){cancelAnimationFrame(t.animationFrameID),t.currentBlock&&(e.scrollTop=t.currentBlock.scrollTop),t.currentBlock=e;var n=this.getHighlightedLineBounds(e),i=e.offsetHeight,r=getComputedStyle(e);i-=parseInt(r.paddingTop)+parseInt(r.paddingBottom);var o=e.scrollTop,s=n.top+(Math.min(n.bottom-n.top,i)-i)/2,l=e.querySelector(".hljs-ln");if(l&&(s+=l.offsetTop-parseInt(r.paddingTop)),s=Math.max(Math.min(s,e.scrollHeight-i),0),!0===a||o===s)e.scrollTop=s;else{if(e.scrollHeight<=i)return;var c=0,_=function(){c=Math.min(c+.02,1),e.scrollTop=o+(s-o)*Rs.easeInOutQuart(c),c<1&&(t.animationFrameID=requestAnimationFrame(_))};_()}},easeInOutQuart:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},getHighlightedLineBounds:function(e){var t=e.querySelectorAll(".highlight-line");if(0===t.length)return{top:0,bottom:0};var a=t[0],n=t[t.length-1];return{top:a.offsetTop,bottom:n.offsetTop+n.offsetHeight}},highlightLines:function(e,t){var a=Rs.deserializeHighlightSteps(t||e.getAttribute("data-line-numbers"));a.length&&a[0].forEach((function(t){var a=[];"number"==typeof t.end?a=[].slice.call(e.querySelectorAll("table tr:nth-child(n+"+t.start+"):nth-child(-n+"+t.end+")")):"number"==typeof t.start&&(a=[].slice.call(e.querySelectorAll("table tr:nth-child("+t.start+")"))),a.length&&(a.forEach((function(e){e.classList.add("highlight-line")})),e.classList.add("has-highlights"))}))},deserializeHighlightSteps:function(e){return(e=(e=e.replace(/\s/g,"")).split(Rs.HIGHLIGHT_STEP_DELIMITER)).map((function(e){return e.split(Rs.HIGHLIGHT_LINE_DELIMITER).map((function(e){if(/^[\d-]+$/.test(e)){e=e.split(Rs.HIGHLIGHT_LINE_RANGE_DELIMITER);var t=parseInt(e[0],10),a=parseInt(e[1],10);return isNaN(a)?{start:t}:{start:t,end:a}}return{}}))}))},serializeHighlightSteps:function(e){return e.map((function(e){return e.map((function(e){return"number"==typeof e.end?e.start+Rs.HIGHLIGHT_LINE_RANGE_DELIMITER+e.end:"number"==typeof e.start?e.start:""})).join(Rs.HIGHLIGHT_LINE_DELIMITER)})).join(Rs.HIGHLIGHT_STEP_DELIMITER)}};var Ns=()=>Rs;export{Ns as default};
+const Rs={id:"highlight",HIGHLIGHT_STEP_DELIMITER:"|",HIGHLIGHT_LINE_DELIMITER:",",HIGHLIGHT_LINE_RANGE_DELIMITER:"-",hljs:fs,init:function(e){let t=e.getConfig().highlight||{};t.highlightOnLoad="boolean"!=typeof t.highlightOnLoad||t.highlightOnLoad,t.escapeHTML="boolean"!=typeof t.escapeHTML||t.escapeHTML,Array.from(e.getRevealElement().querySelectorAll("pre code")).forEach((e=>{e.parentNode.classList.add("code-wrapper");let a=e.querySelector('script[type="text/template"]');a&&(e.textContent=a.innerHTML),e.hasAttribute("data-trim")&&"function"==typeof e.innerHTML.trim&&(e.innerHTML=function(e){function t(e){return e.replace(/^[\s\uFEFF\xA0]+/g,"")}function a(e){for(var t=e.split("\n"),a=0;a=0&&""===t[a].trim();a--)t.splice(a,1);return t.join("\n")}return function(e){var n=a(e.innerHTML).split("\n"),i=n.reduce((function(e,a){return a.length>0&&t(a).length>0&&e>a.length-t(a).length?a.length-t(a).length:e}),Number.POSITIVE_INFINITY);return n.map((function(e,t){return e.slice(i)})).join("\n")}(e)}(e)),t.escapeHTML&&!e.hasAttribute("data-noescape")&&(e.innerHTML=e.innerHTML.replace(//g,">")),e.addEventListener("focusout",(function(e){fs.highlightElement(e.currentTarget)}),!1)})),"function"==typeof t.beforeHighlight&&t.beforeHighlight(fs),t.highlightOnLoad&&Array.from(e.getRevealElement().querySelectorAll("pre code")).forEach((e=>{Rs.highlightBlock(e)})),e.on("pdf-ready",(function(){[].slice.call(e.getRevealElement().querySelectorAll("pre code[data-line-numbers].current-fragment")).forEach((function(e){Rs.scrollHighlightedLineIntoView(e,{},!0)}))}))},highlightBlock:function(e){if(fs.highlightElement(e),0!==e.innerHTML.trim().length&&e.hasAttribute("data-line-numbers")){fs.lineNumbersBlock(e,{singleLine:!0});var t={currentBlock:e},a=Rs.deserializeHighlightSteps(e.getAttribute("data-line-numbers"));if(a.length>1){var n=parseInt(e.getAttribute("data-fragment-index"),10);("number"!=typeof n||isNaN(n))&&(n=null),a.slice(1).forEach((function(a){var i=e.cloneNode(!0);i.setAttribute("data-line-numbers",Rs.serializeHighlightSteps([a])),i.classList.add("fragment"),e.parentNode.appendChild(i),Rs.highlightLines(i),"number"==typeof n?(i.setAttribute("data-fragment-index",n),n+=1):i.removeAttribute("data-fragment-index"),i.addEventListener("visible",Rs.scrollHighlightedLineIntoView.bind(Rs,i,t)),i.addEventListener("hidden",Rs.scrollHighlightedLineIntoView.bind(Rs,i.previousElementSibling,t))})),e.removeAttribute("data-fragment-index"),e.setAttribute("data-line-numbers",Rs.serializeHighlightSteps([a[0]]))}var i="function"==typeof e.closest?e.closest("section:not(.stack)"):null;if(i){var r=function(){Rs.scrollHighlightedLineIntoView(e,t,!0),i.removeEventListener("visible",r)};i.addEventListener("visible",r)}Rs.highlightLines(e)}},scrollHighlightedLineIntoView:function(e,t,a){cancelAnimationFrame(t.animationFrameID),t.currentBlock&&(e.scrollTop=t.currentBlock.scrollTop),t.currentBlock=e;var n=this.getHighlightedLineBounds(e),i=e.offsetHeight,r=getComputedStyle(e);i-=parseInt(r.paddingTop)+parseInt(r.paddingBottom);var o=e.scrollTop,s=n.top+(Math.min(n.bottom-n.top,i)-i)/2,l=e.querySelector(".hljs-ln");if(l&&(s+=l.offsetTop-parseInt(r.paddingTop)),s=Math.max(Math.min(s,e.scrollHeight-i),0),!0===a||o===s)e.scrollTop=s;else{if(e.scrollHeight<=i)return;var c=0,_=function(){c=Math.min(c+.02,1),e.scrollTop=o+(s-o)*Rs.easeInOutQuart(c),c<1&&(t.animationFrameID=requestAnimationFrame(_))};_()}},easeInOutQuart:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},getHighlightedLineBounds:function(e){var t=e.querySelectorAll(".highlight-line");if(0===t.length)return{top:0,bottom:0};var a=t[0],n=t[t.length-1];return{top:a.offsetTop,bottom:n.offsetTop+n.offsetHeight}},highlightLines:function(e,t){var a=Rs.deserializeHighlightSteps(t||e.getAttribute("data-line-numbers"));a.length&&a[0].forEach((function(t){var a=[];"number"==typeof t.end?a=[].slice.call(e.querySelectorAll("table tr:nth-child(n+"+t.start+"):nth-child(-n+"+t.end+")")):"number"==typeof t.start&&(a=[].slice.call(e.querySelectorAll("table tr:nth-child("+t.start+")"))),a.length&&(a.forEach((function(e){e.classList.add("highlight-line")})),e.classList.add("has-highlights"))}))},deserializeHighlightSteps:function(e){return(e=(e=e.replace(/\s/g,"")).split(Rs.HIGHLIGHT_STEP_DELIMITER)).map((function(e){return e.split(Rs.HIGHLIGHT_LINE_DELIMITER).map((function(e){if(/^[\d-]+$/.test(e)){e=e.split(Rs.HIGHLIGHT_LINE_RANGE_DELIMITER);var t=parseInt(e[0],10),a=parseInt(e[1],10);return isNaN(a)?{start:t}:{start:t,end:a}}return{}}))}))},serializeHighlightSteps:function(e){return e.map((function(e){return e.map((function(e){return"number"==typeof e.end?e.start+Rs.HIGHLIGHT_LINE_RANGE_DELIMITER+e.end:"number"==typeof e.start?e.start:""})).join(Rs.HIGHLIGHT_LINE_DELIMITER)})).join(Rs.HIGHLIGHT_STEP_DELIMITER)}};var Ns=()=>Rs;export{Ns as default};
diff --git a/demo/plugin/highlight/highlight.js b/demo/plugin/highlight/highlight.js
index a73b409..e78c45f 100644
--- a/demo/plugin/highlight/highlight.js
+++ b/demo/plugin/highlight/highlight.js
@@ -2,4 +2,4 @@
/*!
* reveal.js plugin that adds syntax highlight support.
*/
-const Rs={id:"highlight",HIGHLIGHT_STEP_DELIMITER:"|",HIGHLIGHT_LINE_DELIMITER:",",HIGHLIGHT_LINE_RANGE_DELIMITER:"-",hljs:fs,init:function(e){let t=e.getConfig().highlight||{};t.highlightOnLoad="boolean"!=typeof t.highlightOnLoad||t.highlightOnLoad,t.escapeHTML="boolean"!=typeof t.escapeHTML||t.escapeHTML,Array.from(e.getRevealElement().querySelectorAll("pre code")).forEach((e=>{e.parentNode.classList.add("code-wrapper");let a=e.querySelector('script[type="text/template"]');a&&(e.textContent=a.innerHTML),e.hasAttribute("data-trim")&&"function"==typeof e.innerHTML.trim&&(e.innerHTML=function(e){function t(e){return e.replace(/^[\s\uFEFF\xA0]+/g,"")}function a(e){for(var t=e.split("\n"),a=0;a=0&&""===t[a].trim();a--)t.splice(a,1);return t.join("\n")}return function(e){var n=a(e.innerHTML).split("\n"),i=n.reduce((function(e,a){return a.length>0&&t(a).length>0&&e>a.length-t(a).length?a.length-t(a).length:e}),Number.POSITIVE_INFINITY);return n.map((function(e,t){return e.slice(i)})).join("\n")}(e)}(e)),t.escapeHTML&&!e.hasAttribute("data-noescape")&&(e.innerHTML=e.innerHTML.replace(//g,">")),e.addEventListener("focusout",(function(e){fs.highlightElement(e.currentTarget)}),!1)})),"function"==typeof t.beforeHighlight&&t.beforeHighlight(fs),t.highlightOnLoad&&Array.from(e.getRevealElement().querySelectorAll("pre code")).forEach((e=>{Rs.highlightBlock(e)})),e.on("pdf-ready",(function(){[].slice.call(e.getRevealElement().querySelectorAll("pre code[data-line-numbers].current-fragment")).forEach((function(e){Rs.scrollHighlightedLineIntoView(e,{},!0)}))}))},highlightBlock:function(e){if(fs.highlightElement(e),0!==e.innerHTML.trim().length&&e.hasAttribute("data-line-numbers")){fs.lineNumbersBlock(e,{singleLine:!0});var t={currentBlock:e},a=Rs.deserializeHighlightSteps(e.getAttribute("data-line-numbers"));if(a.length>1){var n=parseInt(e.getAttribute("data-fragment-index"),10);("number"!=typeof n||isNaN(n))&&(n=null),a.slice(1).forEach((function(a){var i=e.cloneNode(!0);i.setAttribute("data-line-numbers",Rs.serializeHighlightSteps([a])),i.classList.add("fragment"),e.parentNode.appendChild(i),Rs.highlightLines(i),"number"==typeof n?(i.setAttribute("data-fragment-index",n),n+=1):i.removeAttribute("data-fragment-index"),i.addEventListener("visible",Rs.scrollHighlightedLineIntoView.bind(Rs,i,t)),i.addEventListener("hidden",Rs.scrollHighlightedLineIntoView.bind(Rs,i.previousSibling,t))})),e.removeAttribute("data-fragment-index"),e.setAttribute("data-line-numbers",Rs.serializeHighlightSteps([a[0]]))}var i="function"==typeof e.closest?e.closest("section:not(.stack)"):null;if(i){var r=function(){Rs.scrollHighlightedLineIntoView(e,t,!0),i.removeEventListener("visible",r)};i.addEventListener("visible",r)}Rs.highlightLines(e)}},scrollHighlightedLineIntoView:function(e,t,a){cancelAnimationFrame(t.animationFrameID),t.currentBlock&&(e.scrollTop=t.currentBlock.scrollTop),t.currentBlock=e;var n=this.getHighlightedLineBounds(e),i=e.offsetHeight,r=getComputedStyle(e);i-=parseInt(r.paddingTop)+parseInt(r.paddingBottom);var o=e.scrollTop,s=n.top+(Math.min(n.bottom-n.top,i)-i)/2,l=e.querySelector(".hljs-ln");if(l&&(s+=l.offsetTop-parseInt(r.paddingTop)),s=Math.max(Math.min(s,e.scrollHeight-i),0),!0===a||o===s)e.scrollTop=s;else{if(e.scrollHeight<=i)return;var c=0,_=function(){c=Math.min(c+.02,1),e.scrollTop=o+(s-o)*Rs.easeInOutQuart(c),c<1&&(t.animationFrameID=requestAnimationFrame(_))};_()}},easeInOutQuart:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},getHighlightedLineBounds:function(e){var t=e.querySelectorAll(".highlight-line");if(0===t.length)return{top:0,bottom:0};var a=t[0],n=t[t.length-1];return{top:a.offsetTop,bottom:n.offsetTop+n.offsetHeight}},highlightLines:function(e,t){var a=Rs.deserializeHighlightSteps(t||e.getAttribute("data-line-numbers"));a.length&&a[0].forEach((function(t){var a=[];"number"==typeof t.end?a=[].slice.call(e.querySelectorAll("table tr:nth-child(n+"+t.start+"):nth-child(-n+"+t.end+")")):"number"==typeof t.start&&(a=[].slice.call(e.querySelectorAll("table tr:nth-child("+t.start+")"))),a.length&&(a.forEach((function(e){e.classList.add("highlight-line")})),e.classList.add("has-highlights"))}))},deserializeHighlightSteps:function(e){return(e=(e=e.replace(/\s/g,"")).split(Rs.HIGHLIGHT_STEP_DELIMITER)).map((function(e){return e.split(Rs.HIGHLIGHT_LINE_DELIMITER).map((function(e){if(/^[\d-]+$/.test(e)){e=e.split(Rs.HIGHLIGHT_LINE_RANGE_DELIMITER);var t=parseInt(e[0],10),a=parseInt(e[1],10);return isNaN(a)?{start:t}:{start:t,end:a}}return{}}))}))},serializeHighlightSteps:function(e){return e.map((function(e){return e.map((function(e){return"number"==typeof e.end?e.start+Rs.HIGHLIGHT_LINE_RANGE_DELIMITER+e.end:"number"==typeof e.start?e.start:""})).join(Rs.HIGHLIGHT_LINE_DELIMITER)})).join(Rs.HIGHLIGHT_STEP_DELIMITER)}};return()=>Rs}));
+const Rs={id:"highlight",HIGHLIGHT_STEP_DELIMITER:"|",HIGHLIGHT_LINE_DELIMITER:",",HIGHLIGHT_LINE_RANGE_DELIMITER:"-",hljs:fs,init:function(e){let t=e.getConfig().highlight||{};t.highlightOnLoad="boolean"!=typeof t.highlightOnLoad||t.highlightOnLoad,t.escapeHTML="boolean"!=typeof t.escapeHTML||t.escapeHTML,Array.from(e.getRevealElement().querySelectorAll("pre code")).forEach((e=>{e.parentNode.classList.add("code-wrapper");let a=e.querySelector('script[type="text/template"]');a&&(e.textContent=a.innerHTML),e.hasAttribute("data-trim")&&"function"==typeof e.innerHTML.trim&&(e.innerHTML=function(e){function t(e){return e.replace(/^[\s\uFEFF\xA0]+/g,"")}function a(e){for(var t=e.split("\n"),a=0;a=0&&""===t[a].trim();a--)t.splice(a,1);return t.join("\n")}return function(e){var n=a(e.innerHTML).split("\n"),i=n.reduce((function(e,a){return a.length>0&&t(a).length>0&&e>a.length-t(a).length?a.length-t(a).length:e}),Number.POSITIVE_INFINITY);return n.map((function(e,t){return e.slice(i)})).join("\n")}(e)}(e)),t.escapeHTML&&!e.hasAttribute("data-noescape")&&(e.innerHTML=e.innerHTML.replace(//g,">")),e.addEventListener("focusout",(function(e){fs.highlightElement(e.currentTarget)}),!1)})),"function"==typeof t.beforeHighlight&&t.beforeHighlight(fs),t.highlightOnLoad&&Array.from(e.getRevealElement().querySelectorAll("pre code")).forEach((e=>{Rs.highlightBlock(e)})),e.on("pdf-ready",(function(){[].slice.call(e.getRevealElement().querySelectorAll("pre code[data-line-numbers].current-fragment")).forEach((function(e){Rs.scrollHighlightedLineIntoView(e,{},!0)}))}))},highlightBlock:function(e){if(fs.highlightElement(e),0!==e.innerHTML.trim().length&&e.hasAttribute("data-line-numbers")){fs.lineNumbersBlock(e,{singleLine:!0});var t={currentBlock:e},a=Rs.deserializeHighlightSteps(e.getAttribute("data-line-numbers"));if(a.length>1){var n=parseInt(e.getAttribute("data-fragment-index"),10);("number"!=typeof n||isNaN(n))&&(n=null),a.slice(1).forEach((function(a){var i=e.cloneNode(!0);i.setAttribute("data-line-numbers",Rs.serializeHighlightSteps([a])),i.classList.add("fragment"),e.parentNode.appendChild(i),Rs.highlightLines(i),"number"==typeof n?(i.setAttribute("data-fragment-index",n),n+=1):i.removeAttribute("data-fragment-index"),i.addEventListener("visible",Rs.scrollHighlightedLineIntoView.bind(Rs,i,t)),i.addEventListener("hidden",Rs.scrollHighlightedLineIntoView.bind(Rs,i.previousElementSibling,t))})),e.removeAttribute("data-fragment-index"),e.setAttribute("data-line-numbers",Rs.serializeHighlightSteps([a[0]]))}var i="function"==typeof e.closest?e.closest("section:not(.stack)"):null;if(i){var r=function(){Rs.scrollHighlightedLineIntoView(e,t,!0),i.removeEventListener("visible",r)};i.addEventListener("visible",r)}Rs.highlightLines(e)}},scrollHighlightedLineIntoView:function(e,t,a){cancelAnimationFrame(t.animationFrameID),t.currentBlock&&(e.scrollTop=t.currentBlock.scrollTop),t.currentBlock=e;var n=this.getHighlightedLineBounds(e),i=e.offsetHeight,r=getComputedStyle(e);i-=parseInt(r.paddingTop)+parseInt(r.paddingBottom);var o=e.scrollTop,s=n.top+(Math.min(n.bottom-n.top,i)-i)/2,l=e.querySelector(".hljs-ln");if(l&&(s+=l.offsetTop-parseInt(r.paddingTop)),s=Math.max(Math.min(s,e.scrollHeight-i),0),!0===a||o===s)e.scrollTop=s;else{if(e.scrollHeight<=i)return;var c=0,_=function(){c=Math.min(c+.02,1),e.scrollTop=o+(s-o)*Rs.easeInOutQuart(c),c<1&&(t.animationFrameID=requestAnimationFrame(_))};_()}},easeInOutQuart:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},getHighlightedLineBounds:function(e){var t=e.querySelectorAll(".highlight-line");if(0===t.length)return{top:0,bottom:0};var a=t[0],n=t[t.length-1];return{top:a.offsetTop,bottom:n.offsetTop+n.offsetHeight}},highlightLines:function(e,t){var a=Rs.deserializeHighlightSteps(t||e.getAttribute("data-line-numbers"));a.length&&a[0].forEach((function(t){var a=[];"number"==typeof t.end?a=[].slice.call(e.querySelectorAll("table tr:nth-child(n+"+t.start+"):nth-child(-n+"+t.end+")")):"number"==typeof t.start&&(a=[].slice.call(e.querySelectorAll("table tr:nth-child("+t.start+")"))),a.length&&(a.forEach((function(e){e.classList.add("highlight-line")})),e.classList.add("has-highlights"))}))},deserializeHighlightSteps:function(e){return(e=(e=e.replace(/\s/g,"")).split(Rs.HIGHLIGHT_STEP_DELIMITER)).map((function(e){return e.split(Rs.HIGHLIGHT_LINE_DELIMITER).map((function(e){if(/^[\d-]+$/.test(e)){e=e.split(Rs.HIGHLIGHT_LINE_RANGE_DELIMITER);var t=parseInt(e[0],10),a=parseInt(e[1],10);return isNaN(a)?{start:t}:{start:t,end:a}}return{}}))}))},serializeHighlightSteps:function(e){return e.map((function(e){return e.map((function(e){return"number"==typeof e.end?e.start+Rs.HIGHLIGHT_LINE_RANGE_DELIMITER+e.end:"number"==typeof e.start?e.start:""})).join(Rs.HIGHLIGHT_LINE_DELIMITER)})).join(Rs.HIGHLIGHT_STEP_DELIMITER)}};return()=>Rs}));
diff --git a/demo/plugin/highlight/plugin.js b/demo/plugin/highlight/plugin.js
index 46528bf..26a7f93 100644
--- a/demo/plugin/highlight/plugin.js
+++ b/demo/plugin/highlight/plugin.js
@@ -138,7 +138,7 @@ const Plugin = {
// Scroll highlights into view as we step through them
fragmentBlock.addEventListener( 'visible', Plugin.scrollHighlightedLineIntoView.bind( Plugin, fragmentBlock, scrollState ) );
- fragmentBlock.addEventListener( 'hidden', Plugin.scrollHighlightedLineIntoView.bind( Plugin, fragmentBlock.previousSibling, scrollState ) );
+ fragmentBlock.addEventListener( 'hidden', Plugin.scrollHighlightedLineIntoView.bind( Plugin, fragmentBlock.previousElementSibling, scrollState ) );
} );
diff --git a/demo/plugin/math/math.esm.js b/demo/plugin/math/math.esm.js
index f57d5cc..55c07a0 100644
--- a/demo/plugin/math/math.esm.js
+++ b/demo/plugin/math/math.esm.js
@@ -3,4 +3,4 @@ const t=()=>{let t,e={messageStyle:"none",tex2jax:{inlineMath:[["$","$"],["\\(",
* This plugin is a wrapper for the MathJax2,
* MathJax3 and KaTeX typesetter plugins.
*/
-var a=Plugin=Object.assign(e(),{KaTeX:()=>{let t,e={version:"latest",delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}],ignoredTags:["script","noscript","style","textarea","pre"]};const a=t=>new Promise(((e,a)=>{const n=document.createElement("script");n.type="text/javascript",n.onload=e,n.onerror=a,n.src=t,document.head.append(n)}));return{id:"katex",init:function(n){t=n;let i=t.getConfig().katex||{},s={...e,...i};const{local:l,version:o,extensions:r,...c}=s;let d=s.local||"https://cdn.jsdelivr.net/npm/katex",p=s.local?"":"@"+s.version,u=d+p+"/dist/katex.min.css",h=d+p+"/dist/contrib/mhchem.min.js",x=d+p+"/dist/contrib/auto-render.min.js",m=[d+p+"/dist/katex.min.js"];s.extensions&&s.extensions.includes("mhchem")&&m.push(h),m.push(x);const f=()=>{renderMathInElement(n.getSlidesElement(),c),t.layout()};(t=>{let e=document.createElement("link");e.rel="stylesheet",e.href=t,document.head.appendChild(e)})(u),async function(t){for(const e of t)await a(e)}(m).then((()=>{t.isReady()?f():t.on("ready",f.bind(this))}))}}},MathJax2:t,MathJax3:()=>{let t,e={tex:{inlineMath:[["$","$"],["\\(","\\)"]]},options:{skipHtmlTags:["script","noscript","style","textarea","pre"]},startup:{ready:()=>{MathJax.startup.defaultReady(),MathJax.startup.promise.then((()=>{Reveal.layout()}))}}};return{id:"mathjax3",init:function(a){t=a;let n=t.getConfig().mathjax3||{},i={...e,...n};i.tex={...e.tex,...n.tex},i.options={...e.options,...n.options},i.startup={...e.startup,...n.startup};let s=i.mathjax||"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js";i.mathjax=null,window.MathJax=i,function(t,e){let a=document.createElement("script");a.type="text/javascript",a.id="MathJax-script",a.src=t,a.async=!0,a.onload=()=>{"function"==typeof e&&(e.call(),e=null)},document.head.appendChild(a)}(s,(function(){Reveal.addEventListener("slidechanged",(function(t){MathJax.typeset()}))}))}}}});export{a as default};
+var a=Plugin=Object.assign(e(),{KaTeX:()=>{let t,e={version:"latest",delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}],ignoredTags:["script","noscript","style","textarea","pre"]};const a=t=>new Promise(((e,a)=>{const n=document.createElement("script");n.type="text/javascript",n.onload=e,n.onerror=a,n.src=t,document.head.append(n)}));return{id:"katex",init:function(n){t=n;let i=t.getConfig().katex||{},s={...e,...i};const{local:l,version:o,extensions:r,...c}=s;let d=s.local||"https://cdn.jsdelivr.net/npm/katex",p=s.local?"":"@"+s.version,u=d+p+"/dist/katex.min.css",h=d+p+"/dist/contrib/mhchem.min.js",x=d+p+"/dist/contrib/auto-render.min.js",m=[d+p+"/dist/katex.min.js"];s.extensions&&s.extensions.includes("mhchem")&&m.push(h),m.push(x);const f=()=>{renderMathInElement(n.getSlidesElement(),c),t.layout()};(t=>{let e=document.createElement("link");e.rel="stylesheet",e.href=t,document.head.appendChild(e)})(u),async function(t){for(const e of t)await a(e)}(m).then((()=>{t.isReady()?f():t.on("ready",f.bind(this))}))}}},MathJax2:t,MathJax3:()=>{let t,e={tex:{inlineMath:[["$","$"],["\\(","\\)"]]},options:{skipHtmlTags:["script","noscript","style","textarea","pre"]},startup:{ready:()=>{MathJax.startup.defaultReady(),MathJax.startup.promise.then((()=>{t.layout()}))}}};return{id:"mathjax3",init:function(a){t=a;let n=t.getConfig().mathjax3||{},i={...e,...n};i.tex={...e.tex,...n.tex},i.options={...e.options,...n.options},i.startup={...e.startup,...n.startup};let s=i.mathjax||"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js";i.mathjax=null,window.MathJax=i,function(t,e){let a=document.createElement("script");a.type="text/javascript",a.id="MathJax-script",a.src=t,a.async=!0,a.onload=()=>{"function"==typeof e&&(e.call(),e=null)},document.head.appendChild(a)}(s,(function(){t.addEventListener("slidechanged",(function(t){MathJax.typeset()}))}))}}}});export{a as default};
diff --git a/demo/plugin/math/math.js b/demo/plugin/math/math.js
index 0564317..ec644bd 100644
--- a/demo/plugin/math/math.js
+++ b/demo/plugin/math/math.js
@@ -1 +1 @@
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).RevealMath=e()}(this,(function(){"use strict";const t=()=>{let t,e={messageStyle:"none",tex2jax:{inlineMath:[["$","$"],["\\(","\\)"]],skipTags:["script","noscript","style","textarea","pre"]},skipStartupTypeset:!0};return{id:"mathjax2",init:function(n){t=n;let a=t.getConfig().mathjax2||t.getConfig().math||{},i={...e,...a},s=(i.mathjax||"https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js")+"?config="+(i.config||"TeX-AMS_HTML-full");i.tex2jax={...e.tex2jax,...a.tex2jax},i.mathjax=i.config=null,function(t,e){let n=document.querySelector("head"),a=document.createElement("script");a.type="text/javascript",a.src=t;let i=()=>{"function"==typeof e&&(e.call(),e=null)};a.onload=i,a.onreadystatechange=()=>{"loaded"===this.readyState&&i()},n.appendChild(a)}(s,(function(){MathJax.Hub.Config(i),MathJax.Hub.Queue(["Typeset",MathJax.Hub,t.getRevealElement()]),MathJax.Hub.Queue(t.layout),t.on("slidechanged",(function(t){MathJax.Hub.Queue(["Typeset",MathJax.Hub,t.currentSlide])}))}))}}},e=t;return Plugin=Object.assign(e(),{KaTeX:()=>{let t,e={version:"latest",delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}],ignoredTags:["script","noscript","style","textarea","pre"]};const n=t=>new Promise(((e,n)=>{const a=document.createElement("script");a.type="text/javascript",a.onload=e,a.onerror=n,a.src=t,document.head.append(a)}));return{id:"katex",init:function(a){t=a;let i=t.getConfig().katex||{},s={...e,...i};const{local:o,version:l,extensions:r,...c}=s;let d=s.local||"https://cdn.jsdelivr.net/npm/katex",u=s.local?"":"@"+s.version,p=d+u+"/dist/katex.min.css",h=d+u+"/dist/contrib/mhchem.min.js",x=d+u+"/dist/contrib/auto-render.min.js",m=[d+u+"/dist/katex.min.js"];s.extensions&&s.extensions.includes("mhchem")&&m.push(h),m.push(x);const f=()=>{renderMathInElement(a.getSlidesElement(),c),t.layout()};(t=>{let e=document.createElement("link");e.rel="stylesheet",e.href=t,document.head.appendChild(e)})(p),async function(t){for(const e of t)await n(e)}(m).then((()=>{t.isReady()?f():t.on("ready",f.bind(this))}))}}},MathJax2:t,MathJax3:()=>{let t,e={tex:{inlineMath:[["$","$"],["\\(","\\)"]]},options:{skipHtmlTags:["script","noscript","style","textarea","pre"]},startup:{ready:()=>{MathJax.startup.defaultReady(),MathJax.startup.promise.then((()=>{Reveal.layout()}))}}};return{id:"mathjax3",init:function(n){t=n;let a=t.getConfig().mathjax3||{},i={...e,...a};i.tex={...e.tex,...a.tex},i.options={...e.options,...a.options},i.startup={...e.startup,...a.startup};let s=i.mathjax||"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js";i.mathjax=null,window.MathJax=i,function(t,e){let n=document.createElement("script");n.type="text/javascript",n.id="MathJax-script",n.src=t,n.async=!0,n.onload=()=>{"function"==typeof e&&(e.call(),e=null)},document.head.appendChild(n)}(s,(function(){Reveal.addEventListener("slidechanged",(function(t){MathJax.typeset()}))}))}}}})}));
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).RevealMath=e()}(this,(function(){"use strict";const t=()=>{let t,e={messageStyle:"none",tex2jax:{inlineMath:[["$","$"],["\\(","\\)"]],skipTags:["script","noscript","style","textarea","pre"]},skipStartupTypeset:!0};return{id:"mathjax2",init:function(n){t=n;let a=t.getConfig().mathjax2||t.getConfig().math||{},i={...e,...a},s=(i.mathjax||"https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js")+"?config="+(i.config||"TeX-AMS_HTML-full");i.tex2jax={...e.tex2jax,...a.tex2jax},i.mathjax=i.config=null,function(t,e){let n=document.querySelector("head"),a=document.createElement("script");a.type="text/javascript",a.src=t;let i=()=>{"function"==typeof e&&(e.call(),e=null)};a.onload=i,a.onreadystatechange=()=>{"loaded"===this.readyState&&i()},n.appendChild(a)}(s,(function(){MathJax.Hub.Config(i),MathJax.Hub.Queue(["Typeset",MathJax.Hub,t.getRevealElement()]),MathJax.Hub.Queue(t.layout),t.on("slidechanged",(function(t){MathJax.Hub.Queue(["Typeset",MathJax.Hub,t.currentSlide])}))}))}}},e=t;return Plugin=Object.assign(e(),{KaTeX:()=>{let t,e={version:"latest",delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}],ignoredTags:["script","noscript","style","textarea","pre"]};const n=t=>new Promise(((e,n)=>{const a=document.createElement("script");a.type="text/javascript",a.onload=e,a.onerror=n,a.src=t,document.head.append(a)}));return{id:"katex",init:function(a){t=a;let i=t.getConfig().katex||{},s={...e,...i};const{local:o,version:l,extensions:r,...c}=s;let d=s.local||"https://cdn.jsdelivr.net/npm/katex",u=s.local?"":"@"+s.version,p=d+u+"/dist/katex.min.css",h=d+u+"/dist/contrib/mhchem.min.js",x=d+u+"/dist/contrib/auto-render.min.js",m=[d+u+"/dist/katex.min.js"];s.extensions&&s.extensions.includes("mhchem")&&m.push(h),m.push(x);const f=()=>{renderMathInElement(a.getSlidesElement(),c),t.layout()};(t=>{let e=document.createElement("link");e.rel="stylesheet",e.href=t,document.head.appendChild(e)})(p),async function(t){for(const e of t)await n(e)}(m).then((()=>{t.isReady()?f():t.on("ready",f.bind(this))}))}}},MathJax2:t,MathJax3:()=>{let t,e={tex:{inlineMath:[["$","$"],["\\(","\\)"]]},options:{skipHtmlTags:["script","noscript","style","textarea","pre"]},startup:{ready:()=>{MathJax.startup.defaultReady(),MathJax.startup.promise.then((()=>{t.layout()}))}}};return{id:"mathjax3",init:function(n){t=n;let a=t.getConfig().mathjax3||{},i={...e,...a};i.tex={...e.tex,...a.tex},i.options={...e.options,...a.options},i.startup={...e.startup,...a.startup};let s=i.mathjax||"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js";i.mathjax=null,window.MathJax=i,function(t,e){let n=document.createElement("script");n.type="text/javascript",n.id="MathJax-script",n.src=t,n.async=!0,n.onload=()=>{"function"==typeof e&&(e.call(),e=null)},document.head.appendChild(n)}(s,(function(){t.addEventListener("slidechanged",(function(t){MathJax.typeset()}))}))}}}})}));
diff --git a/demo/plugin/math/mathjax3.js b/demo/plugin/math/mathjax3.js
index 9e62d0d..767129c 100644
--- a/demo/plugin/math/mathjax3.js
+++ b/demo/plugin/math/mathjax3.js
@@ -21,7 +21,7 @@ export const MathJax3 = () => {
ready: () => {
MathJax.startup.defaultReady();
MathJax.startup.promise.then(() => {
- Reveal.layout();
+ deck.layout();
});
}
}
@@ -66,7 +66,7 @@ export const MathJax3 = () => {
loadScript( url, function() {
// Reprocess equations in slides when they turn visible
- Reveal.addEventListener( 'slidechanged', function( event ) {
+ deck.addEventListener( 'slidechanged', function( event ) {
MathJax.typeset();
} );
} );
diff --git a/demo/plugin/notes/notes.esm.js b/demo/plugin/notes/notes.esm.js
index f095761..beacbd2 100644
--- a/demo/plugin/notes/notes.esm.js
+++ b/demo/plugin/notes/notes.esm.js
@@ -1 +1 @@
-function t(){return{async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,hooks:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}let e={async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,hooks:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1};const n=/[&<>"']/,s=new RegExp(n.source,"g"),i=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,r=new RegExp(i.source,"g"),a={"&":"&","<":"<",">":">",'"':""","'":"'"},o=t=>a[t];function l(t,e){if(e){if(n.test(t))return t.replace(s,o)}else if(i.test(t))return t.replace(r,o);return t}const c=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function p(t){return t.replace(c,((t,e)=>"colon"===(e=e.toLowerCase())?":":"#"===e.charAt(0)?"x"===e.charAt(1)?String.fromCharCode(parseInt(e.substring(2),16)):String.fromCharCode(+e.substring(1)):""))}const u=/(^|[^\[])\^/g;function d(t,e){t="string"==typeof t?t:t.source,e=e||"";const n={replace:(e,s)=>(s=(s=s.source||s).replace(u,"$1"),t=t.replace(e,s),n),getRegex:()=>new RegExp(t,e)};return n}const h=/[^\w:]/g,g=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function m(t,e,n){if(t){let t;try{t=decodeURIComponent(p(n)).replace(h,"").toLowerCase()}catch(t){return null}if(0===t.indexOf("javascript:")||0===t.indexOf("vbscript:")||0===t.indexOf("data:"))return null}e&&!g.test(n)&&(n=function(t,e){f[" "+t]||(k.test(t)?f[" "+t]=t+"/":f[" "+t]=v(t,"/",!0));t=f[" "+t];const n=-1===t.indexOf(":");return"//"===e.substring(0,2)?n?e:t.replace(x,"$1")+e:"/"===e.charAt(0)?n?e:t.replace(w,"$1")+e:t+e}(e,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(t){return null}return n}const f={},k=/^[^:]+:\/*[^/]*$/,x=/^([^:]+:)[\s\S]*$/,w=/^([^:]+:\/*[^/]*)[\s\S]*$/;const b={exec:function(){}};function y(t,e){const n=t.replace(/\|/g,((t,e,n)=>{let s=!1,i=e;for(;--i>=0&&"\\"===n[i];)s=!s;return s?"|":" |"})).split(/ \|/);let s=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),n.length>e)n.splice(e);else for(;n.length1;)1&e&&(n+=t),e>>=1,t+=t;return n+t}function T(t,e,n,s){const i=e.href,r=e.title?l(e.title):null,a=t[1].replace(/\\([\[\]])/g,"$1");if("!"!==t[0].charAt(0)){s.state.inLink=!0;const t={type:"link",raw:n,href:i,title:r,text:a,tokens:s.inlineTokens(a)};return s.state.inLink=!1,t}return{type:"image",raw:n,href:i,title:r,text:l(a)}}class _{constructor(t){this.options=t||e}space(t){const e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){const e=this.rules.block.code.exec(t);if(e){const t=e[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?t:v(t,"\n")}}}fences(t){const e=this.rules.block.fences.exec(t);if(e){const t=e[0],n=function(t,e){const n=t.match(/^(\s+)(?:```)/);if(null===n)return e;const s=n[1];return e.split("\n").map((t=>{const e=t.match(/^\s+/);if(null===e)return t;const[n]=e;return n.length>=s.length?t.slice(s.length):t})).join("\n")}(t,e[3]||"");return{type:"code",raw:t,lang:e[2]?e[2].trim().replace(this.rules.inline._escapes,"$1"):e[2],text:n}}}heading(t){const e=this.rules.block.heading.exec(t);if(e){let t=e[2].trim();if(/#$/.test(t)){const e=v(t,"#");this.options.pedantic?t=e.trim():e&&!/ $/.test(e)||(t=e.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:t,tokens:this.lexer.inline(t)}}}hr(t){const e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:e[0]}}blockquote(t){const e=this.rules.block.blockquote.exec(t);if(e){const t=e[0].replace(/^ *>[ \t]?/gm,""),n=this.lexer.state.top;this.lexer.state.top=!0;const s=this.lexer.blockTokens(t);return this.lexer.state.top=n,{type:"blockquote",raw:e[0],tokens:s,text:t}}}list(t){let e=this.rules.block.list.exec(t);if(e){let n,s,i,r,a,o,l,c,p,u,d,h,g=e[1].trim();const m=g.length>1,f={type:"list",raw:"",ordered:m,start:m?+g.slice(0,-1):"",loose:!1,items:[]};g=m?`\\d{1,9}\\${g.slice(-1)}`:`\\${g}`,this.options.pedantic&&(g=m?g:"[*+-]");const k=new RegExp(`^( {0,3}${g})((?:[\t ][^\\n]*)?(?:\\n|$))`);for(;t&&(h=!1,e=k.exec(t))&&!this.rules.block.hr.test(t);){if(n=e[0],t=t.substring(n.length),c=e[2].split("\n",1)[0].replace(/^\t+/,(t=>" ".repeat(3*t.length))),p=t.split("\n",1)[0],this.options.pedantic?(r=2,d=c.trimLeft()):(r=e[2].search(/[^ ]/),r=r>4?1:r,d=c.slice(r),r+=e[1].length),o=!1,!c&&/^ *$/.test(p)&&(n+=p+"\n",t=t.substring(p.length+1),h=!0),!h){const e=new RegExp(`^ {0,${Math.min(3,r-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`),s=new RegExp(`^ {0,${Math.min(3,r-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),i=new RegExp(`^ {0,${Math.min(3,r-1)}}(?:\`\`\`|~~~)`),a=new RegExp(`^ {0,${Math.min(3,r-1)}}#`);for(;t&&(u=t.split("\n",1)[0],p=u,this.options.pedantic&&(p=p.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),!i.test(p))&&!a.test(p)&&!e.test(p)&&!s.test(t);){if(p.search(/[^ ]/)>=r||!p.trim())d+="\n"+p.slice(r);else{if(o)break;if(c.search(/[^ ]/)>=4)break;if(i.test(c))break;if(a.test(c))break;if(s.test(c))break;d+="\n"+p}o||p.trim()||(o=!0),n+=u+"\n",t=t.substring(u.length+1),c=p.slice(r)}}f.loose||(l?f.loose=!0:/\n *\n *$/.test(n)&&(l=!0)),this.options.gfm&&(s=/^\[[ xX]\] /.exec(d),s&&(i="[ ] "!==s[0],d=d.replace(/^\[[ xX]\] +/,""))),f.items.push({type:"list_item",raw:n,task:!!s,checked:i,loose:!1,text:d}),f.raw+=n}f.items[f.items.length-1].raw=n.trimRight(),f.items[f.items.length-1].text=d.trimRight(),f.raw=f.raw.trimRight();const x=f.items.length;for(a=0;a"space"===t.type)),e=t.length>0&&t.some((t=>/\n.*\n/.test(t.raw)));f.loose=e}if(f.loose)for(a=0;a$/,"$1").replace(this.rules.inline._escapes,"$1"):"",s=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline._escapes,"$1"):e[3];return{type:"def",tag:t,raw:e[0],href:n,title:s}}}table(t){const e=this.rules.block.table.exec(t);if(e){const t={type:"table",header:y(e[1]).map((t=>({text:t}))),align:e[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:e[3]&&e[3].trim()?e[3].replace(/\n[ \t]*$/,"").split("\n"):[]};if(t.header.length===t.align.length){t.raw=e[0];let n,s,i,r,a=t.align.length;for(n=0;n({text:t})));for(a=t.header.length,s=0;s /i.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):l(e[0]):e[0]}}link(t){const e=this.rules.inline.link.exec(t);if(e){const t=e[2].trim();if(!this.options.pedantic&&/^$/.test(t))return;const e=v(t.slice(0,-1),"\\");if((t.length-e.length)%2==0)return}else{const t=function(t,e){if(-1===t.indexOf(e[1]))return-1;const n=t.length;let s=0,i=0;for(;i-1){const n=(0===e[0].indexOf("!")?5:4)+e[1].length+t;e[2]=e[2].substring(0,t),e[0]=e[0].substring(0,n).trim(),e[3]=""}}let n=e[2],s="";if(this.options.pedantic){const t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);t&&(n=t[1],s=t[3])}else s=e[3]?e[3].slice(1,-1):"";return n=n.trim(),/^$/.test(t)?n.slice(1):n.slice(1,-1)),T(e,{href:n?n.replace(this.rules.inline._escapes,"$1"):n,title:s?s.replace(this.rules.inline._escapes,"$1"):s},e[0],this.lexer)}}reflink(t,e){let n;if((n=this.rules.inline.reflink.exec(t))||(n=this.rules.inline.nolink.exec(t))){let t=(n[2]||n[1]).replace(/\s+/g," ");if(t=e[t.toLowerCase()],!t){const t=n[0].charAt(0);return{type:"text",raw:t,text:t}}return T(n,t,n[0],this.lexer)}}emStrong(t,e,n=""){let s=this.rules.inline.emStrong.lDelim.exec(t);if(!s)return;if(s[3]&&n.match(/[\p{L}\p{N}]/u))return;const i=s[1]||s[2]||"";if(!i||i&&(""===n||this.rules.inline.punctuation.exec(n))){const n=s[0].length-1;let i,r,a=n,o=0;const l="*"===s[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(l.lastIndex=0,e=e.slice(-1*t.length+n);null!=(s=l.exec(e));){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i)continue;if(r=i.length,s[3]||s[4]){a+=r;continue}if((s[5]||s[6])&&n%3&&!((n+r)%3)){o+=r;continue}if(a-=r,a>0)continue;r=Math.min(r,r+a+o);const e=t.slice(0,n+s.index+(s[0].length-i.length)+r);if(Math.min(n,r)%2){const t=e.slice(1,-1);return{type:"em",raw:e,text:t,tokens:this.lexer.inlineTokens(t)}}const l=e.slice(2,-2);return{type:"strong",raw:e,text:l,tokens:this.lexer.inlineTokens(l)}}}}codespan(t){const e=this.rules.inline.code.exec(t);if(e){let t=e[2].replace(/\n/g," ");const n=/[^ ]/.test(t),s=/^ /.test(t)&&/ $/.test(t);return n&&s&&(t=t.substring(1,t.length-1)),t=l(t,!0),{type:"codespan",raw:e[0],text:t}}}br(t){const e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t){const e=this.rules.inline.del.exec(t);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}}autolink(t,e){const n=this.rules.inline.autolink.exec(t);if(n){let t,s;return"@"===n[2]?(t=l(this.options.mangle?e(n[1]):n[1]),s="mailto:"+t):(t=l(n[1]),s=t),{type:"link",raw:n[0],text:t,href:s,tokens:[{type:"text",raw:t,text:t}]}}}url(t,e){let n;if(n=this.rules.inline.url.exec(t)){let t,s;if("@"===n[2])t=l(this.options.mangle?e(n[0]):n[0]),s="mailto:"+t;else{let e;do{e=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(e!==n[0]);t=l(n[0]),s="www."===n[1]?"http://"+n[0]:n[0]}return{type:"link",raw:n[0],text:t,href:s,tokens:[{type:"text",raw:t,text:t}]}}}inlineText(t,e){const n=this.rules.inline.text.exec(t);if(n){let t;return t=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(n[0]):l(n[0]):n[0]:l(this.options.smartypants?e(n[0]):n[0]),{type:"text",raw:n[0],text:t}}}}const z={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:b,lheading:/^((?:.|\n(?!\n))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\.|[^\[\]\\])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};z.def=d(z.def).replace("label",z._label).replace("title",z._title).getRegex(),z.bullet=/(?:[*+-]|\d{1,9}[.)])/,z.listItemStart=d(/^( *)(bull) */).replace("bull",z.bullet).getRegex(),z.list=d(z.list).replace(/bull/g,z.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+z.def.source+")").getRegex(),z._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",z._comment=/|$)/,z.html=d(z.html,"i").replace("comment",z._comment).replace("tag",z._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),z.paragraph=d(z._paragraph).replace("hr",z.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",z._tag).getRegex(),z.blockquote=d(z.blockquote).replace("paragraph",z.paragraph).getRegex(),z.normal={...z},z.gfm={...z.normal,table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"},z.gfm.table=d(z.gfm.table).replace("hr",z.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",z._tag).getRegex(),z.gfm.paragraph=d(z._paragraph).replace("hr",z.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",z.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",z._tag).getRegex(),z.pedantic={...z.normal,html:d("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?\\1> *(?:\\n{2,}|\\s*$)| \\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",z._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:b,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:d(z.normal._paragraph).replace("hr",z.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",z.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()};const $={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:b,tag:"^comment|^[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^(?:[^_*\\]|\\.)*?\_\_(?:[^_*\\]|\\.)*?\*(?:[^_*\\]|\\.)*?(?=\_\_)|(?:[^*\\]|\\.)+(?=[^*])|[punct_](\*+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|(?:[^punct*_\s\\]|\\.)(\*+)(?=[^punct*_\s])/,rDelimUnd:/^(?:[^_*\\]|\\.)*?\*\*(?:[^_*\\]|\\.)*?\_(?:[^_*\\]|\\.)*?(?=\*\*)|(?:[^_\\]|\\.)+(?=[^_])|[punct*](\_+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:b,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\.5&&(n="x"+n.toString(16)),s+=""+n+";";return s}$._punctuation="!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~",$.punctuation=d($.punctuation).replace(/punctuation/g,$._punctuation).getRegex(),$.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,$.escapedEmSt=/(?:^|[^\\])(?:\\\\)*\\[*_]/g,$._comment=d(z._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),$.emStrong.lDelim=d($.emStrong.lDelim).replace(/punct/g,$._punctuation).getRegex(),$.emStrong.rDelimAst=d($.emStrong.rDelimAst,"g").replace(/punct/g,$._punctuation).getRegex(),$.emStrong.rDelimUnd=d($.emStrong.rDelimUnd,"g").replace(/punct/g,$._punctuation).getRegex(),$._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,$._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,$._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,$.autolink=d($.autolink).replace("scheme",$._scheme).replace("email",$._email).getRegex(),$._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,$.tag=d($.tag).replace("comment",$._comment).replace("attribute",$._attribute).getRegex(),$._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,$._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,$._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,$.link=d($.link).replace("label",$._label).replace("href",$._href).replace("title",$._title).getRegex(),$.reflink=d($.reflink).replace("label",$._label).replace("ref",z._label).getRegex(),$.nolink=d($.nolink).replace("ref",z._label).getRegex(),$.reflinkSearch=d($.reflinkSearch,"g").replace("reflink",$.reflink).replace("nolink",$.nolink).getRegex(),$.normal={...$},$.pedantic={...$.normal,strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:d(/^!?\[(label)\]\((.*?)\)/).replace("label",$._label).getRegex(),reflink:d(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",$._label).getRegex()},$.gfm={...$.normal,escape:d($.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\e+" ".repeat(n.length)));t;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((s=>!!(n=s.call({lexer:this},t,e))&&(t=t.substring(n.raw.length),e.push(n),!0)))))if(n=this.tokenizer.space(t))t=t.substring(n.raw.length),1===n.raw.length&&e.length>0?e[e.length-1].raw+="\n":e.push(n);else if(n=this.tokenizer.code(t))t=t.substring(n.raw.length),s=e[e.length-1],!s||"paragraph"!==s.type&&"text"!==s.type?e.push(n):(s.raw+="\n"+n.raw,s.text+="\n"+n.text,this.inlineQueue[this.inlineQueue.length-1].src=s.text);else if(n=this.tokenizer.fences(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.heading(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.hr(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.blockquote(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.list(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.html(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.def(t))t=t.substring(n.raw.length),s=e[e.length-1],!s||"paragraph"!==s.type&&"text"!==s.type?this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title}):(s.raw+="\n"+n.raw,s.text+="\n"+n.raw,this.inlineQueue[this.inlineQueue.length-1].src=s.text);else if(n=this.tokenizer.table(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.lheading(t))t=t.substring(n.raw.length),e.push(n);else{if(i=t,this.options.extensions&&this.options.extensions.startBlock){let e=1/0;const n=t.slice(1);let s;this.options.extensions.startBlock.forEach((function(t){s=t.call({lexer:this},n),"number"==typeof s&&s>=0&&(e=Math.min(e,s))})),e<1/0&&e>=0&&(i=t.substring(0,e+1))}if(this.state.top&&(n=this.tokenizer.paragraph(i)))s=e[e.length-1],r&&"paragraph"===s.type?(s.raw+="\n"+n.raw,s.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):e.push(n),r=i.length!==t.length,t=t.substring(n.raw.length);else if(n=this.tokenizer.text(t))t=t.substring(n.raw.length),s=e[e.length-1],s&&"text"===s.type?(s.raw+="\n"+n.raw,s.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):e.push(n);else if(t){const e="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(e);break}throw new Error(e)}}return this.state.top=!0,e}inline(t,e=[]){return this.inlineQueue.push({src:t,tokens:e}),e}inlineTokens(t,e=[]){let n,s,i,r,a,o,l=t;if(this.tokens.links){const t=Object.keys(this.tokens.links);if(t.length>0)for(;null!=(r=this.tokenizer.rules.inline.reflinkSearch.exec(l));)t.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(l=l.slice(0,r.index)+"["+S("a",r[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(r=this.tokenizer.rules.inline.blockSkip.exec(l));)l=l.slice(0,r.index)+"["+S("a",r[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(r=this.tokenizer.rules.inline.escapedEmSt.exec(l));)l=l.slice(0,r.index+r[0].length-2)+"++"+l.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex),this.tokenizer.rules.inline.escapedEmSt.lastIndex--;for(;t;)if(a||(o=""),a=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((s=>!!(n=s.call({lexer:this},t,e))&&(t=t.substring(n.raw.length),e.push(n),!0)))))if(n=this.tokenizer.escape(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.tag(t))t=t.substring(n.raw.length),s=e[e.length-1],s&&"text"===n.type&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):e.push(n);else if(n=this.tokenizer.link(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.reflink(t,this.tokens.links))t=t.substring(n.raw.length),s=e[e.length-1],s&&"text"===n.type&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):e.push(n);else if(n=this.tokenizer.emStrong(t,l,o))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.codespan(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.br(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.del(t))t=t.substring(n.raw.length),e.push(n);else if(n=this.tokenizer.autolink(t,A))t=t.substring(n.raw.length),e.push(n);else if(this.state.inLink||!(n=this.tokenizer.url(t,A))){if(i=t,this.options.extensions&&this.options.extensions.startInline){let e=1/0;const n=t.slice(1);let s;this.options.extensions.startInline.forEach((function(t){s=t.call({lexer:this},n),"number"==typeof s&&s>=0&&(e=Math.min(e,s))})),e<1/0&&e>=0&&(i=t.substring(0,e+1))}if(n=this.tokenizer.inlineText(i,E))t=t.substring(n.raw.length),"_"!==n.raw.slice(-1)&&(o=n.raw.slice(-1)),a=!0,s=e[e.length-1],s&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):e.push(n);else if(t){const e="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(e);break}throw new Error(e)}}else t=t.substring(n.raw.length),e.push(n);return e}}class L{constructor(t){this.options=t||e}code(t,e,n){const s=(e||"").match(/\S*/)[0];if(this.options.highlight){const e=this.options.highlight(t,s);null!=e&&e!==t&&(n=!0,t=e)}return t=t.replace(/\n$/,"")+"\n",s?''+(n?t:l(t,!0))+"
\n":""+(n?t:l(t,!0))+"
\n"}blockquote(t){return`\n${t} \n`}html(t){return t}heading(t,e,n,s){if(this.options.headerIds){return`\n`}return`${t} \n`}hr(){return this.options.xhtml?" \n":" \n"}list(t,e,n){const s=e?"ol":"ul";return"<"+s+(e&&1!==n?' start="'+n+'"':"")+">\n"+t+""+s+">\n"}listitem(t){return`${t} \n`}checkbox(t){return" "}paragraph(t){return`${t}
\n`}table(t,e){return e&&(e=`${e} `),"\n"}tablerow(t){return`\n${t} \n`}tablecell(t,e){const n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`${n}>\n`}strong(t){return`${t} `}em(t){return`${t} `}codespan(t){return`${t}
`}br(){return this.options.xhtml?" ":" "}del(t){return`${t}`}link(t,e,n){if(null===(t=m(this.options.sanitize,this.options.baseUrl,t)))return n;let s='"+n+" ",s}image(t,e,n){if(null===(t=m(this.options.sanitize,this.options.baseUrl,t)))return n;let s=` ":">",s}text(t){return t}}class I{strong(t){return t}em(t){return t}codespan(t){return t}del(t){return t}html(t){return t}text(t){return t}link(t,e,n){return""+n}image(t,e,n){return""+n}br(){return""}}class M{constructor(){this.seen={}}serialize(t){return t.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(t,e){let n=t,s=0;if(this.seen.hasOwnProperty(n)){s=this.seen[t];do{s++,n=t+"-"+s}while(this.seen.hasOwnProperty(n))}return e||(this.seen[t]=s,this.seen[n]=0),n}slug(t,e={}){const n=this.serialize(t);return this.getNextSafeSlug(n,e.dryrun)}}class C{constructor(t){this.options=t||e,this.options.renderer=this.options.renderer||new L,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new I,this.slugger=new M}static parse(t,e){return new C(e).parse(t)}static parseInline(t,e){return new C(e).parseInline(t)}parse(t,e=!0){let n,s,i,r,a,o,l,c,u,d,h,g,m,f,k,x,w,b,y,v="";const S=t.length;for(n=0;n0&&"paragraph"===k.tokens[0].type?(k.tokens[0].text=b+" "+k.tokens[0].text,k.tokens[0].tokens&&k.tokens[0].tokens.length>0&&"text"===k.tokens[0].tokens[0].type&&(k.tokens[0].tokens[0].text=b+" "+k.tokens[0].tokens[0].text)):k.tokens.unshift({type:"text",text:b}):f+=b),f+=this.parse(k.tokens,m),u+=this.renderer.listitem(f,w,x);v+=this.renderer.list(u,h,g);continue;case"html":v+=this.renderer.html(d.text);continue;case"paragraph":v+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(u=d.tokens?this.parseInline(d.tokens):d.text;n+1{"function"==typeof s&&(i=s,s=null);const r={...s},a=function(t,e,n){return s=>{if(s.message+="\nPlease report this to https://github.com/markedjs/marked.",t){const t=" An error occurred:
"+l(s.message+"",!0)+" ";return e?Promise.resolve(t):n?void n(null,t):t}if(e)return Promise.reject(s);if(!n)throw s;n(s)}}((s={...O.defaults,...r}).silent,s.async,i);if(null==n)return a(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof n)return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(function(t){t&&t.sanitize&&!t.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")}(s),s.hooks&&(s.hooks.options=s),i){const r=s.highlight;let o;try{s.hooks&&(n=s.hooks.preprocess(n)),o=t(n,s)}catch(t){return a(t)}const l=function(t){let n;if(!t)try{s.walkTokens&&O.walkTokens(o,s.walkTokens),n=e(o,s),s.hooks&&(n=s.hooks.postprocess(n))}catch(e){t=e}return s.highlight=r,t?a(t):i(null,n)};if(!r||r.length<3)return l();if(delete s.highlight,!o.length)return l();let c=0;return O.walkTokens(o,(function(t){"code"===t.type&&(c++,setTimeout((()=>{r(t.text,t.lang,(function(e,n){if(e)return l(e);null!=n&&n!==t.text&&(t.text=n,t.escaped=!0),c--,0===c&&l()}))}),0))})),void(0===c&&l())}if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then((e=>t(e,s))).then((t=>s.walkTokens?Promise.all(O.walkTokens(t,s.walkTokens)).then((()=>t)):t)).then((t=>e(t,s))).then((t=>s.hooks?s.hooks.postprocess(t):t)).catch(a);try{s.hooks&&(n=s.hooks.preprocess(n));const i=t(n,s);s.walkTokens&&O.walkTokens(i,s.walkTokens);let r=e(i,s);return s.hooks&&(r=s.hooks.postprocess(r)),r}catch(t){return a(t)}}}function O(t,e,n){return P(R.lex,C.parse)(t,e,n)}O.options=O.setOptions=function(t){var n;return O.defaults={...O.defaults,...t},n=O.defaults,e=n,O},O.getDefaults=t,O.defaults=e,O.use=function(...t){const e=O.defaults.extensions||{renderers:{},childTokens:{}};t.forEach((t=>{const n={...t};if(n.async=O.defaults.async||n.async||!1,t.extensions&&(t.extensions.forEach((t=>{if(!t.name)throw new Error("extension name required");if(t.renderer){const n=e.renderers[t.name];e.renderers[t.name]=n?function(...e){let s=t.renderer.apply(this,e);return!1===s&&(s=n.apply(this,e)),s}:t.renderer}if(t.tokenizer){if(!t.level||"block"!==t.level&&"inline"!==t.level)throw new Error("extension level must be 'block' or 'inline'");e[t.level]?e[t.level].unshift(t.tokenizer):e[t.level]=[t.tokenizer],t.start&&("block"===t.level?e.startBlock?e.startBlock.push(t.start):e.startBlock=[t.start]:"inline"===t.level&&(e.startInline?e.startInline.push(t.start):e.startInline=[t.start]))}t.childTokens&&(e.childTokens[t.name]=t.childTokens)})),n.extensions=e),t.renderer){const e=O.defaults.renderer||new L;for(const n in t.renderer){const s=e[n];e[n]=(...i)=>{let r=t.renderer[n].apply(e,i);return!1===r&&(r=s.apply(e,i)),r}}n.renderer=e}if(t.tokenizer){const e=O.defaults.tokenizer||new _;for(const n in t.tokenizer){const s=e[n];e[n]=(...i)=>{let r=t.tokenizer[n].apply(e,i);return!1===r&&(r=s.apply(e,i)),r}}n.tokenizer=e}if(t.hooks){const e=O.defaults.hooks||new q;for(const n in t.hooks){const s=e[n];q.passThroughHooks.has(n)?e[n]=i=>{if(O.defaults.async)return Promise.resolve(t.hooks[n].call(e,i)).then((t=>s.call(e,t)));const r=t.hooks[n].call(e,i);return s.call(e,r)}:e[n]=(...i)=>{let r=t.hooks[n].apply(e,i);return!1===r&&(r=s.apply(e,i)),r}}n.hooks=e}if(t.walkTokens){const e=O.defaults.walkTokens;n.walkTokens=function(n){let s=[];return s.push(t.walkTokens.call(this,n)),e&&(s=s.concat(e.call(this,n))),s}}O.setOptions(n)}))},O.walkTokens=function(t,e){let n=[];for(const s of t)switch(n=n.concat(e.call(O,s)),s.type){case"table":for(const t of s.header)n=n.concat(O.walkTokens(t.tokens,e));for(const t of s.rows)for(const s of t)n=n.concat(O.walkTokens(s.tokens,e));break;case"list":n=n.concat(O.walkTokens(s.items,e));break;default:O.defaults.extensions&&O.defaults.extensions.childTokens&&O.defaults.extensions.childTokens[s.type]?O.defaults.extensions.childTokens[s.type].forEach((function(t){n=n.concat(O.walkTokens(s[t],e))})):s.tokens&&(n=n.concat(O.walkTokens(s.tokens,e)))}return n},O.parseInline=P(R.lexInline,C.parseInline),O.Parser=C,O.parser=C.parse,O.Renderer=L,O.TextRenderer=I,O.Lexer=R,O.lexer=R.lex,O.Tokenizer=_,O.Slugger=M,O.Hooks=q,O.parse=O,O.options,O.setOptions,O.use,O.walkTokens,O.parseInline,C.parse,R.lex;const N=()=>{let t,e,n=null;function s(){if(n&&!n.closed)n.focus();else{if(n=window.open("about:blank","reveal.js - Notes","width=1100,height=700"),n.marked=O,n.document.write("\x3c!--\n\tNOTE: You need to build the notes plugin after making changes to this file.\n--\x3e\n\n\t\n\t\t \n\n\t\treveal.js - Speaker View \n\n\t\t\n\t\n\n\t\n\n\t\tLoading speaker view...
\n\n\t\t
\n\t\tUpcoming
\n\t\t\n\t\t\t
\n\t\t\t\t
Time Click to Reset \n\t\t\t\t
\n\t\t\t\t\t0:00 AM \n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t00 :00 :00 \n\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
Pacing – Time to finish current slide \n\t\t\t\t
\n\t\t\t\t\t00 :00 :00 \n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
Notes \n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t\n\t\t\t \n\t\t\t \n\t\t
\n\n\t\t