{"version":3,"sources":["../src/components/deck/index.tsx","../src/components/deck/default-deck.tsx","../src/components/deck/deck.tsx","../src/hooks/use-slides.tsx","../src/hooks/use-aspect-ratio-fitting.ts","../src/hooks/use-deck-state.ts","../src/utils/clamp.ts","../src/hooks/use-mousetrap.ts","../src/hooks/use-location-sync.ts","../src/theme/default-theme.ts","../src/theme/print-theme.ts","../src/theme/index.ts","../src/location-map-fns/query-string.ts","../src/components/deck/deck-styles.ts","../src/utils/use-auto-play.ts","../src/components/transitions/index.ts","../src/components/template-wrapper.tsx","../src/utils/constants.ts","../src/hooks/use-broadcast-channel.ts","../src/components/presenter-mode/index.tsx","../src/components/presenter-mode/components.tsx","../src/components/layout-primitives.ts","../src/components/presenter-mode/timer.tsx","../src/components/typography.tsx","../src/components/internal-button.ts","../src/utils/use-timer.ts","../src/components/print-mode/index.tsx","../src/components/slide/slide.tsx","../src/hooks/use-steps.tsx","../src/utils/sort-by.ts","../src/hooks/use-modes.ts","../src/components/command-bar/index.tsx","../src/components/command-bar/command-bar-actions.tsx","../src/components/command-bar/search/index.tsx","../src/components/command-bar/results/index.tsx","../src/utils/platform-keys.ts","../src/components/appear.tsx","../src/components/code-pane.tsx","../src/utils/indent-normalizer.ts","../src/components/table.tsx","../src/components/image.ts","../src/components/notes.tsx","../src/components/progress.tsx","../src/components/animated-progress.tsx","../src/components/fullscreen.tsx","../src/hooks/use-full-screen.ts","../src/components/slide-layout.tsx","../src/components/default-template.tsx","../src/utils/remark-rehype-presenter-notes.ts","../src/components/markdown/markdown.tsx","../src/utils/mdx-component-mapper.tsx","../src/utils/separate-sections-from-json.ts","../src/components/markdown/markdown-layout-containers.tsx","../src/components/markdown/markdown-slide-renderer.tsx","../src/utils/remark-rehype-directive.ts","../src/components/logo.tsx","../src/utils/notes.ts"],"sourcesContent":["import { Fragment } from 'react';\nimport DefaultDeck from './default-deck';\nimport PresenterMode from '../presenter-mode';\nimport PrintMode from '../print-mode';\nimport useMousetrap from '../../hooks/use-mousetrap';\nimport { KEYBOARD_SHORTCUTS, SPECTACLE_MODES } from '../../utils/constants';\nimport { DeckProps } from './deck';\nimport useModes, { ModeActions } from '../../hooks/use-modes';\nimport CommandBar from '../command-bar';\n\nconst View = ({\n  getCurrentMode,\n  toggleMode,\n  ...props\n}: ModeActions & DeckProps) => {\n  const mode = getCurrentMode();\n  switch (mode) {\n    case SPECTACLE_MODES.DEFAULT_MODE:\n      return <DefaultDeck {...props} toggleMode={toggleMode} />;\n\n    case SPECTACLE_MODES.PRESENTER_MODE:\n      return <PresenterMode {...props} />;\n\n    /**\n     * Print mode and export mode are identical except for the theme\n     * that is used. Print mode uses the print theme which is usually\n     * monotone and export mode uses the default theme.\n     */\n    case SPECTACLE_MODES.PRINT_MODE:\n      return <PrintMode {...props} />;\n\n    case SPECTACLE_MODES.EXPORT_MODE:\n      return <PrintMode {...props} exportMode />;\n\n    case SPECTACLE_MODES.OVERVIEW_MODE:\n      return <DefaultDeck overviewMode toggleMode={toggleMode} {...props} />;\n\n    default:\n      return <Fragment />;\n  }\n};\n\nconst SpectacleDeck = (props: DeckProps): JSX.Element => {\n  const { toggleMode, getCurrentMode } = useModes();\n\n  useMousetrap(\n    {\n      [KEYBOARD_SHORTCUTS.PRESENTER_MODE]: (e) =>\n        e && toggleMode({ e, newMode: SPECTACLE_MODES.PRESENTER_MODE }),\n      [KEYBOARD_SHORTCUTS.PRINT_MODE]: (e) =>\n        e && toggleMode({ e, newMode: SPECTACLE_MODES.PRINT_MODE }),\n      [KEYBOARD_SHORTCUTS.EXPORT_MODE]: (e) =>\n        e && toggleMode({ e, newMode: SPECTACLE_MODES.EXPORT_MODE }),\n      [KEYBOARD_SHORTCUTS.OVERVIEW_MODE]: (e) =>\n        e && toggleMode({ e, newMode: SPECTACLE_MODES.OVERVIEW_MODE })\n    },\n    []\n  );\n\n  return (\n    <CommandBar>\n      <View\n        getCurrentMode={getCurrentMode}\n        toggleMode={toggleMode}\n        {...props}\n      />\n    </CommandBar>\n  );\n};\n\nexport default SpectacleDeck;\n","import { useRef, useCallback, useEffect } from 'react';\nimport { DeckInternal, DeckInternalProps, DeckProps, DeckRef } from './deck';\nimport useBroadcastChannel from '../../hooks/use-broadcast-channel';\nimport useMousetrap from '../../hooks/use-mousetrap';\nimport {\n  KEYBOARD_SHORTCUTS,\n  SPECTACLE_MODES,\n  ToggleModeParams\n} from '../../utils/constants';\n\n/**\n * Spectacle DefaultDeck is a wrapper around the Deck component that adds Broadcast channel support\n * for audience and presenter modes. This is intentionally not built into the base Deck component\n * to allow for extensibility outside of core Spectacle functionality.\n */\nconst DefaultDeck = (props: DefaultDeckProps): JSX.Element => {\n  const {\n    overviewMode = false,\n    printMode = false,\n    exportMode = false,\n    toggleMode,\n    children,\n    ...rest\n  } = props;\n  const deck = useRef<DeckRef>(null);\n\n  const [postMessage] = useBroadcastChannel(\n    'spectacle_presenter_bus',\n    (message) => {\n      if (message.type !== 'SYNC') return;\n      const nextView = message.payload;\n      if (deck.current!.initialized) {\n        deck.current!.skipTo(nextView);\n      } else {\n        deck.current!.initializeTo(nextView);\n      }\n    }\n  );\n\n  useEffect(() => {\n    postMessage('SYNC_REQUEST');\n  }, [postMessage]);\n\n  useMousetrap(\n    overviewMode\n      ? {\n          [KEYBOARD_SHORTCUTS.TAB_FORWARD_OVERVIEW_MODE]: () =>\n            deck.current!.advanceSlide(),\n          [KEYBOARD_SHORTCUTS.TAB_BACKWARD_OVERVIEW_MODE]: () =>\n            deck.current!.regressSlide({\n              stepIndex: 0\n            }),\n          [KEYBOARD_SHORTCUTS.SELECT_SLIDE_OVERVIEW_MODE]: () =>\n            toggleMode({\n              newMode: SPECTACLE_MODES.DEFAULT_MODE\n            })\n        }\n      : {},\n    []\n  );\n\n  const onSlideClick = useCallback<\n    NonNullable<DeckInternalProps['onSlideClick']>\n  >(\n    (e, slideIndex) => {\n      if (overviewMode) {\n        toggleMode({\n          e,\n          newMode: SPECTACLE_MODES.DEFAULT_MODE,\n          senderSlideIndex: +slideIndex\n        });\n      }\n    },\n    [overviewMode, toggleMode]\n  );\n\n  const onMobileSlide: DeckInternalProps['onMobileSlide'] = (e) => {\n    if (navigator.maxTouchPoints < 1 || !deck.current) return;\n    switch (e.dir) {\n      case 'Left':\n        deck.current.stepForward();\n        break;\n      case 'Right':\n        deck.current.regressSlide();\n        break;\n    }\n  };\n\n  return (\n    <DeckInternal\n      overviewMode={overviewMode}\n      onSlideClick={onSlideClick}\n      onMobileSlide={onMobileSlide}\n      printMode={printMode}\n      exportMode={exportMode}\n      ref={deck}\n      {...rest}\n    >\n      {children}\n    </DeckInternal>\n  );\n};\n\nexport default DefaultDeck;\n\ntype DefaultDeckProps = DeckProps & {\n  toggleMode(args: ToggleModeParams): void;\n  overviewMode?: boolean;\n  printMode?: boolean;\n  exportMode?: boolean;\n};\n","import {\n  useState,\n  useEffect,\n  forwardRef,\n  useMemo,\n  useCallback,\n  createContext,\n  ElementType,\n  useImperativeHandle,\n  FC,\n  RefAttributes,\n  ReactNode,\n  CSSProperties,\n  useId\n} from 'react';\nimport styled, { CSSObject, ThemeProvider } from 'styled-components';\nimport { useCollectSlides } from '../../hooks/use-slides';\nimport useAspectRatioFitting from '../../hooks/use-aspect-ratio-fitting';\nimport useDeckState, {\n  DeckStateAndActions,\n  DeckView\n} from '../../hooks/use-deck-state';\nimport useMousetrap from '../../hooks/use-mousetrap';\nimport useLocationSync from '../../hooks/use-location-sync';\nimport { mergeTheme } from '../../theme';\nimport * as queryStringMapFns from '../../location-map-fns/query-string';\nimport {\n  overviewFrameStyle,\n  overviewWrapperStyle,\n  printFrameStyle,\n  printWrapperStyle\n} from './deck-styles';\nimport { useAutoPlay } from '../../utils/use-auto-play';\nimport defaultTheme, {\n  SpectacleThemeOverrides\n} from '../../theme/default-theme';\nimport { defaultTransition, SlideTransition } from '../transitions';\nimport { SwipeEventData } from 'react-swipeable';\nimport { MarkdownComponentMap } from '../../utils/mdx-component-mapper';\nimport TemplateWrapper from '../template-wrapper';\nimport { useRegisterActions } from 'kbar';\nimport { KEYBOARD_SHORTCUTS_IDS } from '../../utils/constants';\n\nexport type DeckContextType = {\n  deckId: string | number;\n  slideCount: number;\n  slideIds: SlideId[];\n  useAnimations: boolean;\n  autoPlayLoop: boolean;\n  navigationDirection: number;\n  slidePortalNode: HTMLDivElement;\n  onSlideClick(e: MouseEvent, slideId: SlideId): void;\n  onMobileSlide(eventData: SwipeEventData): void;\n  theme?: SpectacleThemeOverrides & MarkdownThemeOverrides;\n  frameOverrideStyle: CSSProperties;\n  wrapperOverrideStyle: CSSProperties;\n  backdropNode: HTMLDivElement;\n  notePortalNode: HTMLDivElement;\n  initialized: boolean;\n  activeView: {\n    slideId: SlideId;\n    slideIndex: number;\n    stepIndex: number;\n  };\n  pendingView: {\n    slideId: SlideId;\n    slideIndex: number;\n    stepIndex: number;\n  };\n  skipTo(options: { slideIndex: number; stepIndex: number }): void;\n  stepForward(): void;\n  stepBackward(): void;\n  advanceSlide(): void;\n  regressSlide(): void;\n  commitTransition(newView?: { stepIndex: number }): void;\n  cancelTransition(): void;\n  template: TemplateFn | ReactNode;\n  transition: SlideTransition;\n  backgroundImage?: string;\n  inOverviewMode: boolean;\n  inPrintMode: boolean;\n};\n\nexport const DeckContext = createContext<DeckContextType>(null as any);\nDeckContext.displayName = 'DeckContext';\nconst noop = () => {};\n\n/**\n * By default, Spectacle will maintain a 100% zoom on print/export mode. This can be customized if the\n * user wants to select a different paper size.\n */\nconst DEFAULT_PRINT_SCALE = 1.0;\nconst DEFAULT_OVERVIEW_SCALE = 0.25;\n\ntype PortalProps = {\n  fitAspectRatioStyle: CSSObject;\n  overviewMode: boolean;\n  printMode: boolean;\n};\nconst Portal = styled.div<PortalProps>(\n  ({ fitAspectRatioStyle, overviewMode, printMode }) => [\n    !printMode && { overflow: 'hidden' },\n    !printMode && fitAspectRatioStyle,\n    overviewMode && {\n      display: 'flex',\n      flexWrap: 'wrap',\n      justifyContent: 'flex-start',\n      alignItems: 'flex-start',\n      alignContent: 'flex-start',\n      transform: 'scale(1)',\n      overflowY: 'scroll',\n      width: '100%',\n      height: '100%'\n    },\n    printMode && {\n      display: 'block'\n    }\n  ]\n);\n\nexport const DeckInternal = forwardRef<DeckRef, DeckInternalProps>(\n  (\n    {\n      id: userProvidedId,\n      className = '',\n      backdropStyle: userProvidedBackdropStyle,\n      overviewMode = false,\n      printMode = false,\n      exportMode = false,\n      overviewScale = DEFAULT_OVERVIEW_SCALE,\n      printScale = DEFAULT_PRINT_SCALE,\n      template,\n      theme: {\n        Backdrop: UserProvidedBackdropComponent,\n        backdropStyle: themeProvidedBackdropStyle = {\n          position: 'fixed',\n          top: 0,\n          left: 0,\n          width: '100vw',\n          height: '100vh'\n        } as CSSObject,\n        suppressBackdropFallback: themeSuppressBackdropFallback,\n        ...restTheme\n      } = {},\n\n      onSlideClick = noop,\n      onMobileSlide = noop,\n\n      disableInteractivity = false,\n      notePortalNode,\n      useAnimations = true,\n      children,\n      onActiveStateChange: onActiveStateChangeExternal = noop,\n      initialState: initialDeckState = {\n        slideIndex: 0,\n        stepIndex: 0\n      },\n      suppressBackdropFallback = false,\n      autoPlay = false,\n      autoPlayLoop = false,\n      autoPlayInterval = 1000,\n      transition = defaultTransition,\n      backgroundImage\n    },\n    ref\n  ) => {\n    const id = useId();\n    const [deckId] = useState(userProvidedId || id);\n    const {\n      width: nativeSlideWidth = defaultTheme.size.width,\n      height: nativeSlideHeight = defaultTheme.size.height\n    } = restTheme.size || {};\n\n    const {\n      initialized,\n      pendingView,\n      activeView,\n      navigationDirection,\n\n      initializeTo,\n      skipTo,\n      stepForward,\n      stepBackward,\n      advanceSlide,\n      regressSlide,\n      commitTransition,\n      cancelTransition\n    } = useDeckState(initialDeckState);\n\n    const [\n      setPlaceholderContainer,\n      slideIds,\n      slideIdsWithTemplates,\n      slideIdsInitialized\n    ] = useCollectSlides();\n\n    // It really is much easier to just expose methods to the outside world that\n    // drive the presentation through its state rather than trying to implement a\n    // declarative API.\n    useImperativeHandle(\n      ref,\n      () => ({\n        initialized,\n        activeView,\n        initializeTo,\n        skipTo,\n        stepForward,\n        stepBackward,\n        advanceSlide,\n        regressSlide,\n        numberOfSlides: slideIds.length\n      }),\n      [\n        initialized,\n        activeView,\n        initializeTo,\n        skipTo,\n        stepForward,\n        stepBackward,\n        advanceSlide,\n        regressSlide,\n        slideIds\n      ]\n    );\n\n    useRegisterActions(\n      !disableInteractivity\n        ? [\n            {\n              id: KEYBOARD_SHORTCUTS_IDS.NEXT_SLIDE,\n              name: 'Next Slide',\n              keywords: 'next',\n              perform: () => stepForward(),\n              section: 'Slide'\n            },\n            {\n              id: KEYBOARD_SHORTCUTS_IDS.PREVIOUS_SLIDE,\n              name: 'Previous Slide',\n              keywords: 'previous',\n              perform: () => stepBackward(),\n              section: 'Slide'\n            },\n            {\n              id: 'Restart Presentation',\n              name: 'Restart Presentation',\n              keywords: 'restart',\n              perform: () =>\n                skipTo({\n                  slideIndex: 0,\n                  stepIndex: 0\n                }),\n              section: 'Slide'\n            }\n          ]\n        : []\n    );\n    useMousetrap(\n      disableInteractivity\n        ? {}\n        : {\n            left: () => stepBackward(),\n            right: () => stepForward()\n          },\n      []\n    );\n\n    const [syncLocation, onActiveStateChange] = useLocationSync({\n      disableInteractivity,\n      setState: skipTo,\n      ...queryStringMapFns\n    });\n\n    useEffect(() => {\n      if (!initialized) return;\n      onActiveStateChange(activeView);\n      onActiveStateChangeExternal(activeView);\n    }, [\n      initialized,\n      activeView,\n      onActiveStateChange,\n      onActiveStateChangeExternal\n    ]);\n\n    useEffect(() => {\n      const initialView = syncLocation({\n        slideIndex: 0,\n        stepIndex: 0\n      });\n      initializeTo(initialView);\n    }, [initializeTo, syncLocation]);\n\n    useAutoPlay({\n      enabled: autoPlay,\n      loop: autoPlayLoop,\n      interval: autoPlayInterval,\n      stepForward\n    });\n\n    const handleSlideClick = useCallback<\n      NonNullable<DeckInternalProps['onSlideClick']>\n    >(\n      (e, slideId) => {\n        const slideIndex = slideIds.indexOf(slideId);\n        onSlideClick(e, slideIndex);\n      },\n      [onSlideClick, slideIds]\n    );\n\n    const activeSlideId = slideIds[activeView.slideIndex];\n    const pendingSlideId = slideIds[pendingView.slideIndex];\n\n    const fullyInitialized = initialized && slideIdsInitialized;\n\n    // Slides don't actually render their content to their position in the DOM-\n    // they render to this `portalNode` element. The only thing they actually\n    // render to their \"natural\" DOM location is a placeholder node which we use\n    // below to enumerate them.\n    //\n    // The main reason for this is so that we can be absolutely sure that no\n    // intermediate areas of the tree end up breaking styling, while still\n    // allowing users to organize their slides via component nesting:\n    //\n    //     const ContentSlides = () => (\n    //       <>\n    //         <Slide>First Slide</Slide>\n    //         <p>This text will never appear, because it's not part of a Slide.<p>\n    //         <Slide>Second Slide</Slide>\n    //       </>\n    //     );\n    //\n    //     const Presentation = () => (\n    //       <Deck>\n    //         <Slide>Title Slide</Slide>\n    //         <ContentSlides />\n    //         <Slide>Conclusion Slide</Slide>\n    //       </Deck>\n    //     );\n    const [slidePortalNode, setSlidePortalNode] =\n      useState<HTMLDivElement | null>();\n\n    const [backdropRef, fitAspectRatioStyle] = useAspectRatioFitting({\n      targetWidth: nativeSlideWidth,\n      targetHeight: nativeSlideHeight\n    });\n\n    const frameStyle = useMemo(() => {\n      const options = {\n        printScale,\n        overviewScale,\n        nativeSlideWidth,\n        nativeSlideHeight\n      };\n      if (overviewMode) {\n        return overviewFrameStyle(options);\n      } else if (printMode) {\n        return printFrameStyle(options);\n      }\n      return {};\n    }, [\n      nativeSlideHeight,\n      nativeSlideWidth,\n      overviewMode,\n      overviewScale,\n      printMode,\n      printScale\n    ]);\n\n    const wrapperStyle = useMemo(() => {\n      if (overviewMode) {\n        return overviewWrapperStyle({ overviewScale });\n      } else if (printMode) {\n        return printWrapperStyle({ printScale });\n      }\n      return {};\n    }, [overviewMode, overviewScale, printMode, printScale]);\n\n    // Try to be intelligent about the backdrop background color: we have to use\n    // inline styles, which will take precedence over all other styles. So, we do\n    // as much as we can here to detect if a backdrop color has been provided, or\n    // if the user has provided a custom backdrop component (in which case they're\n    // responsible for styling it properly.) If we don't detect an appropriate\n    // case, then we apply the inline style.\n    //\n    // Yes, this is slightly awkward, but IMO adding an additional `<div>` element\n    // would be even more awkward.\n    const backdropStyle = {\n      ...themeProvidedBackdropStyle,\n      ...userProvidedBackdropStyle\n    };\n    const BackdropComponent = UserProvidedBackdropComponent || 'div';\n\n    if (\n      !backdropStyle['background'] &&\n      !backdropStyle['backgroundColor'] &&\n      !UserProvidedBackdropComponent &&\n      !suppressBackdropFallback &&\n      !themeSuppressBackdropFallback\n    ) {\n      backdropStyle['backgroundColor'] = 'black';\n    }\n\n    const doesCurrentSlideHaveItsOwnTemplate =\n      slideIdsWithTemplates.has(activeSlideId);\n\n    const templateElement: ReactNode =\n      typeof template === 'function'\n        ? template({\n            slideNumber: activeView.slideIndex + 1,\n            numberOfSlides: slideIds.length\n          })\n        : template;\n\n    return (\n      <ThemeProvider\n        theme={mergeTheme({\n          theme: restTheme,\n          printMode: printMode && !exportMode\n        })}\n      >\n        <BackdropComponent\n          ref={backdropRef}\n          className={className}\n          style={{\n            ...backdropStyle,\n            overflow: 'hidden'\n          }}\n        >\n          <DeckContext.Provider\n            value={{\n              deckId,\n              slideCount: slideIds.length,\n              slideIds,\n              useAnimations,\n              slidePortalNode: slidePortalNode!,\n              onSlideClick: handleSlideClick,\n              onMobileSlide: onMobileSlide,\n              theme: restTheme,\n              autoPlayLoop,\n              navigationDirection,\n\n              frameOverrideStyle: frameStyle,\n              wrapperOverrideStyle: wrapperStyle,\n\n              backdropNode: backdropRef.current!,\n              notePortalNode: notePortalNode!,\n              initialized: fullyInitialized,\n              activeView: {\n                ...activeView,\n                slideId: activeSlideId\n              },\n              pendingView: {\n                ...pendingView,\n                slideId: pendingSlideId\n              },\n              skipTo,\n              stepForward,\n              stepBackward,\n              advanceSlide,\n              regressSlide,\n              commitTransition,\n              cancelTransition,\n              transition,\n              template,\n              backgroundImage,\n              inOverviewMode: overviewMode,\n              inPrintMode: printMode\n            }}\n          >\n            <Portal\n              ref={setSlidePortalNode}\n              overviewMode={overviewMode}\n              printMode={printMode}\n              fitAspectRatioStyle={fitAspectRatioStyle}\n            >\n              {!doesCurrentSlideHaveItsOwnTemplate &&\n                !overviewMode &&\n                !printMode && (\n                  <TemplateWrapper\n                    style={{\n                      ...wrapperStyle,\n                      // Slides are appended to the parent as they are portaled in and end up later in\n                      // the source order. Adding zIndex to the template to overlay the sibling slides\n                      // once they have been portaled in.\n                      zIndex: 1\n                    }}\n                  >\n                    {templateElement}\n                  </TemplateWrapper>\n                )}\n            </Portal>\n            <div ref={setPlaceholderContainer} style={{ display: 'none' }}>\n              {children}\n            </div>\n          </DeckContext.Provider>\n        </BackdropComponent>\n      </ThemeProvider>\n    );\n  }\n);\nDeckInternal.displayName = 'Deck';\n\nexport const Deck = DeckInternal as FC<DeckProps & RefAttributes<DeckRef>>;\n\nDeck.displayName = 'Deck';\n\nexport type TemplateFn = (options: {\n  slideNumber: number;\n  numberOfSlides: number;\n}) => ReactNode;\nexport type SlideId = string | number;\ntype MarkdownThemeOverrides = {\n  markdownComponentMap?: MarkdownComponentMap;\n};\ntype BackdropOverrides = {\n  Backdrop?: ElementType;\n  backdropStyle?: CSSObject;\n  /**\n   * @deprecated set a value to one of the `Backdrop`,\n   * `backdropStyle.background`, or `backdropStyle.backgroundColor` properties\n   * inside the `theme` prop object instead\n   */\n  suppressBackdropFallback?: boolean;\n};\n\nexport type DeckRef = Omit<\n  DeckStateAndActions,\n  | 'cancelTransition'\n  | 'commitTransition'\n  | 'navigationDirection'\n  | 'pendingView'\n> & {\n  numberOfSlides: number;\n};\nexport type DeckProps = {\n  id?: string | number;\n  className?: string;\n  children: ReactNode;\n  autoPlay?: boolean;\n  autoPlayLoop?: boolean;\n  autoPlayInterval?: number;\n  theme?: SpectacleThemeOverrides & MarkdownThemeOverrides & BackdropOverrides;\n  template?: TemplateFn | ReactNode;\n  printScale?: number;\n  overviewScale?: number;\n  transition?: SlideTransition;\n  /**\n   * @deprecated set a value to one of the `Backdrop`,\n   * `backdropStyle.background`, or `backdropStyle.backgroundColor` properties\n   * inside the `theme` prop object instead\n   */\n  suppressBackdropFallback?: boolean;\n  backgroundImage?: string;\n};\n/**\n * These types are only used internally,\n * and are not officially part of the public API\n */\nexport type DeckInternalProps = DeckProps & {\n  initialState?: DeckView;\n  printMode?: boolean;\n  exportMode?: boolean;\n  overviewMode?: boolean;\n  onSlideClick?(e: Event, slideId: SlideId): void;\n  onMobileSlide?(eventData: SwipeEventData): void;\n  disableInteractivity?: boolean;\n  useAnimations?: boolean;\n  notePortalNode?: HTMLDivElement | null;\n  /** @deprecated use the backdropStyle property inside the `theme` prop object instead */\n  backdropStyle?: Partial<CSSStyleDeclaration>;\n  onActiveStateChange?: (activeView: DeckView) => void;\n  backgroundImage?: string;\n};\n\nexport default Deck;\n","import { useState, useEffect, useId } from 'react';\nimport { SlideId } from '../components/deck/deck';\n\nexport const PLACEHOLDER_CLASS_NAME = 'spectacle-v7-slide';\n\n// After the initial render pass, this hook actually goes and looks for\n// <Slide> elements rendered lower in the tree. Slides decide on an ID for\n// themselves and communicate via the `data-slide-key` element on their\n// placeholder.\nexport function useCollectSlides() {\n  const [initialized, setInitialized] = useState(false);\n  const [slideContainer, setSlideContainer] = useState<HTMLElement | null>();\n  const [slideIds, setSlideIds] = useState<SlideId[]>([]);\n  const [slideIdsOfSlidesWithTemplates, setSlideIdsOfSlidesWithTemplates] =\n    useState<Set<SlideId>>(new Set());\n\n  useEffect(() => {\n    if (!slideContainer) return;\n    const slides = slideContainer.getElementsByClassName(\n      PLACEHOLDER_CLASS_NAME\n    ) as unknown as Iterable<HTMLElement>;\n\n    const nextSlideIds: SlideId[] = [];\n    const nextSlideIdsOfSlidesWithTemplates: Set<SlideId> = new Set();\n    for (const placeholderNode of slides) {\n      const { slideId, slideHasTemplate } = placeholderNode.dataset;\n      if (slideId !== undefined) {\n        nextSlideIds.push(slideId);\n        if (slideHasTemplate === 'true') {\n          nextSlideIdsOfSlidesWithTemplates.add(slideId);\n        }\n      }\n    }\n    setSlideIds(nextSlideIds);\n    setSlideIdsOfSlidesWithTemplates(nextSlideIdsOfSlidesWithTemplates);\n    setInitialized(true);\n  }, [slideContainer]);\n\n  return [\n    setSlideContainer,\n    slideIds,\n    slideIdsOfSlidesWithTemplates,\n    initialized\n  ] as const;\n}\n\nexport function useSlide(\n  doesSlideHaveTemplate: boolean,\n  userProvidedId?: SlideId\n) {\n  const id = useId();\n  const [slideId] = useState<SlideId>(userProvidedId || id);\n  return {\n    slideId,\n    placeholder: (\n      <div\n        className={PLACEHOLDER_CLASS_NAME}\n        data-slide-id={slideId}\n        data-slide-has-template={doesSlideHaveTemplate}\n      />\n    )\n  };\n}\n","import { useRef, useState, useCallback, useEffect } from 'react';\nimport useResizeObserver from 'use-resize-observer';\nimport { CSSObject } from 'styled-components';\n\ntype ResizeHandler = NonNullable<\n  NonNullable<Parameters<typeof useResizeObserver>[0]>['onResize']\n>;\n\n// Returns an offset and scaling factor which, when applied to `element`, will\n// make it properly fit into `container` at the given aspect ratio.\nexport default function useAspectRatioFitting({\n  targetWidth = 1366,\n  targetHeight = 768\n}) {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [scaleFactor, setScaleFactor] = useState(1);\n  const [transformOrigin, setTransformOrigin] = useState({ x: 0, y: 0 });\n\n  const recalculate = useCallback<ResizeHandler>(\n    ({ width, height }) => {\n      const containerWidth = Number(width) || 0.01;\n      const containerHeight = Number(height) || 0.01;\n\n      const containerRatio = containerWidth / containerHeight;\n      const targetRatio = targetWidth / targetHeight;\n      const useVertical = containerRatio > targetRatio;\n\n      const scaleFactor = useVertical\n        ? containerHeight / targetHeight\n        : containerWidth / targetWidth;\n\n      const scaledWidth = targetWidth * scaleFactor;\n      const scaledHeight = targetHeight * scaleFactor;\n\n      let x0 = 0;\n      if (useVertical) {\n        x0 = 0.5 * (containerWidth - scaledWidth);\n        x0 /= 1 - scaleFactor;\n      }\n\n      let y0 = 0;\n      if (!useVertical) {\n        y0 = 0.5 * (containerHeight - scaledHeight);\n        y0 /= 1 - scaleFactor;\n      }\n\n      setScaleFactor(scaleFactor);\n      setTransformOrigin({ x: x0, y: y0 });\n    },\n    [targetWidth, targetHeight]\n  );\n\n  // recalculate sizes on the initial pass, and each time the target size\n  // changes. (our measurements aren't as accurate as `useResizeObserver`, but\n  // we only need to get them close because it'll do them again anyways.)\n  useEffect(() => {\n    if (!containerRef || !containerRef.current) return;\n    const rects = containerRef.current.getClientRects();\n    recalculate(rects[0]);\n  }, [targetWidth, targetHeight, recalculate]);\n\n  useResizeObserver({\n    ref: containerRef,\n    onResize: recalculate\n  });\n\n  const styles: CSSObject = {\n    position: 'relative',\n    width: targetWidth,\n    height: targetHeight,\n    scaleFactor,\n    transform: `scale(${scaleFactor})`,\n    transformOrigin: `${transformOrigin.x}px ${transformOrigin.y}px`\n  };\n\n  return [containerRef, styles] as const;\n}\n","import { useReducer, useMemo } from 'react';\nimport { merge } from 'merge-anything';\nimport { SlideId } from '../components/deck/deck';\nimport clamp from '../utils/clamp';\n\nexport const GOTO_FINAL_STEP = null as unknown as number;\n\nexport type DeckView = {\n  slideId?: SlideId;\n  slideIndex: number;\n  stepIndex: number;\n};\nexport type DeckState = {\n  initialized: boolean;\n  navigationDirection: number;\n  activeView: DeckView;\n  pendingView: DeckView;\n};\n\nexport const initialDeckState: DeckState = {\n  initialized: false,\n  navigationDirection: 0,\n  pendingView: {\n    slideIndex: 0,\n    stepIndex: 0\n  },\n  activeView: {\n    slideIndex: 0,\n    stepIndex: 0\n  }\n};\n\ntype ReducerActions =\n  | { type: 'INITIALIZE_TO'; payload: Partial<DeckView> }\n  | { type: 'SKIP_TO'; payload: Partial<DeckView> }\n  | { type: 'STEP_FORWARD'; payload?: undefined }\n  | { type: 'STEP_BACKWARD'; payload?: undefined }\n  | { type: 'ADVANCE_SLIDE'; payload?: undefined }\n  | { type: 'REGRESS_SLIDE'; payload?: Pick<DeckView, 'stepIndex'> }\n  | { type: 'COMMIT_TRANSITION'; payload?: DeckView }\n  | { type: 'CANCEL_TRANSITION'; payload?: undefined };\n\nfunction deckReducer(state: DeckState, { type, payload = {} }: ReducerActions) {\n  switch (type) {\n    case 'INITIALIZE_TO':\n      return {\n        navigationDirection: 0,\n        activeView: merge(state.activeView, payload),\n        pendingView: merge(state.pendingView, payload),\n        initialized: true\n      };\n    case 'SKIP_TO':\n      const navigationDirection = (() => {\n        if ('slideIndex' in payload && payload.slideIndex) {\n          return clamp(payload.slideIndex - state.activeView.slideIndex, -1, 1);\n        }\n        return null;\n      })();\n      return {\n        ...state,\n        navigationDirection: navigationDirection || state.navigationDirection,\n        pendingView: merge(state.pendingView, payload)\n      };\n    case 'STEP_FORWARD':\n      return {\n        ...state,\n        navigationDirection: 1,\n        pendingView: merge(state.pendingView, {\n          stepIndex: state.pendingView.stepIndex + 1\n        })\n      };\n    case 'STEP_BACKWARD':\n      return {\n        ...state,\n        navigationDirection: -1,\n        pendingView: merge(state.pendingView, {\n          stepIndex: state.pendingView.stepIndex - 1\n        })\n      };\n    case 'ADVANCE_SLIDE':\n      return {\n        ...state,\n        navigationDirection: 1,\n        pendingView: merge(state.pendingView, {\n          stepIndex: 0,\n          slideIndex: state.pendingView.slideIndex + 1\n        })\n      };\n    case 'REGRESS_SLIDE':\n      return {\n        ...state,\n        navigationDirection: -1,\n        pendingView: merge(state.pendingView, {\n          stepIndex: payload?.stepIndex ?? GOTO_FINAL_STEP,\n          slideIndex: state.pendingView.slideIndex - 1\n        })\n      };\n    case 'COMMIT_TRANSITION':\n      const pendingView = merge(state.pendingView, payload);\n      return {\n        ...state,\n        pendingView,\n        activeView: merge(state.activeView, pendingView)\n      };\n    case 'CANCEL_TRANSITION':\n      return {\n        ...state,\n        pendingView: merge(state.pendingView, state.activeView)\n      };\n    default:\n      return state;\n  }\n}\n\nexport default function useDeckState(userProvidedInitialState: DeckView) {\n  const [\n    { initialized, navigationDirection, pendingView, activeView },\n    dispatch\n  ] = useReducer(deckReducer, {\n    initialized: initialDeckState.initialized,\n    navigationDirection: initialDeckState.navigationDirection,\n    pendingView: {\n      ...initialDeckState.pendingView,\n      ...userProvidedInitialState\n    },\n    activeView: {\n      ...initialDeckState.activeView,\n      ...userProvidedInitialState\n    }\n  });\n  const actions = useMemo(\n    () => ({\n      initializeTo: (payload: Partial<DeckView>) =>\n        dispatch({ type: 'INITIALIZE_TO', payload }),\n      skipTo: (payload: Partial<DeckView>) =>\n        dispatch({ type: 'SKIP_TO', payload }),\n      stepForward: () => dispatch({ type: 'STEP_FORWARD' }),\n      stepBackward: () => dispatch({ type: 'STEP_BACKWARD' }),\n      advanceSlide: () => dispatch({ type: 'ADVANCE_SLIDE' }),\n      regressSlide: (payload?: Pick<DeckView, 'stepIndex'>) =>\n        dispatch({ type: 'REGRESS_SLIDE', payload }),\n      commitTransition: (payload?: DeckView) =>\n        dispatch({ type: 'COMMIT_TRANSITION', payload }),\n      cancelTransition: () => dispatch({ type: 'CANCEL_TRANSITION' })\n    }),\n    [dispatch]\n  );\n\n  return {\n    initialized,\n    navigationDirection,\n    pendingView,\n    activeView,\n    ...actions\n  };\n}\n\nexport type DeckStateAndActions = ReturnType<typeof useDeckState>;\n","export function toFiniteNumber(value: number) {\n  if (!value || isNaN(value)) {\n    return 0;\n  } else if (value === Infinity || value === -Infinity) {\n    const sign = value < 0 ? -1 : 1;\n    return sign * Number.MAX_SAFE_INTEGER;\n  }\n  return value;\n}\n\nexport default function clamp(number: number, lower?: number, upper?: number) {\n  if (isNaN(number)) {\n    return NaN;\n  }\n  let finiteNumber = toFiniteNumber(number);\n  if (finiteNumber === finiteNumber) {\n    if (upper !== undefined) {\n      finiteNumber = finiteNumber <= upper ? finiteNumber : upper;\n    }\n    if (lower !== undefined) {\n      finiteNumber = finiteNumber >= lower ? finiteNumber : lower;\n    }\n  }\n  return finiteNumber;\n}\n","import { useEffect } from 'react';\nimport Mousetrap, { ExtendedKeyboardEvent } from 'mousetrap';\n\n/*\n * Hook for binding functions to keyboard bindings. Will throw an error if the\n * value of the keybind combination is not a function.\n */\nexport default function useMousetrap(\n  keybinds: Record<string, (e?: ExtendedKeyboardEvent) => void>,\n  deps: any[]\n): void {\n  useEffect(() => {\n    for (const combo in keybinds) {\n      const callback = keybinds[combo];\n      if (typeof callback !== 'function') {\n        throw new TypeError(\n          `Expected type 'function' in useMousetrap for combo '${combo}', but got ${typeof callback}`\n        );\n      }\n      Mousetrap.bind(combo, callback);\n    }\n    return () => {\n      for (const combo in keybinds) {\n        Mousetrap.unbind(combo);\n      }\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [keybinds, ...deps]);\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport { createBrowserHistory, Location } from 'history';\nimport QS from 'query-string';\nimport isEqual from 'react-fast-compare';\nimport { mergeAndCompare, merge } from 'merge-anything';\nimport { DeckView } from './use-deck-state';\nimport {\n  mapLocationToState,\n  mapStateToLocation,\n  SlideState\n} from '../location-map-fns/query-string';\n\n// Needed to properly merge query strings. (Hook consumers can also provide\n// their own merge function if necessary)\nfunction defaultMergeLocation(\n  object: Partial<Location>,\n  ...sources: Partial<Location>[]\n): Partial<Location> {\n  return mergeAndCompare(\n    (left, right, key) => {\n      switch (key) {\n        case 'search':\n          if (!left) return right;\n          return (\n            '?' +\n            QS.stringify({\n              ...QS.parse(left),\n              ...QS.parse(right)\n            })\n          );\n        default:\n          return merge(left, right);\n      }\n    },\n    object,\n    ...sources\n  );\n}\n\ntype LocationStateOptions = {\n  setState(state: Partial<DeckView>): void;\n  mapStateToLocation: typeof mapStateToLocation;\n  mapLocationToState: typeof mapLocationToState;\n  mergeLocation?: typeof defaultMergeLocation;\n  historyFactory?: typeof createBrowserHistory;\n  disableInteractivity?: boolean;\n};\n\n// Hook to keep some external state synchronized with the history location.\nexport default function useLocationSync({\n  setState,\n  mapStateToLocation,\n  mapLocationToState,\n  disableInteractivity = false,\n  mergeLocation = defaultMergeLocation,\n  historyFactory = createBrowserHistory\n}: LocationStateOptions) {\n  const [history] = useState(() => {\n    return typeof document !== 'undefined' ? historyFactory() : null;\n  });\n  const [initialized, setInitialized] = useState(false);\n\n  // \"down-sync\" from location to state\n  useEffect(() => {\n    if (!initialized && disableInteractivity) return;\n    return history?.listen(({ location }) => {\n      setState(mapLocationToState(location));\n    });\n  }, [\n    disableInteractivity,\n    initialized,\n    history,\n    setState,\n    mapLocationToState\n  ]);\n\n  const syncLocation = useCallback(\n    (defaultState: DeckView): DeckView => {\n      if (disableInteractivity || !history) {\n        return defaultState;\n      }\n      // perform initial two-way sync between location and state (state wins)\n      const { location } = history;\n      const initialState: DeckView = merge(\n        defaultState,\n        mapLocationToState(location)\n      );\n      const nextLocation = mergeLocation(\n        {},\n        location,\n        mapStateToLocation(initialState)\n      );\n      history.replace(nextLocation);\n      setInitialized(true);\n      return initialState;\n    },\n    [\n      history,\n      mapLocationToState,\n      mapStateToLocation,\n      disableInteractivity,\n      mergeLocation\n    ]\n  );\n\n  const setLocation = useCallback(\n    (state: SlideState) => {\n      if (!initialized || !history) return;\n      // perform one-way sync to history\n      const { location } = history;\n      const nextLocation = mergeLocation(\n        {},\n        location,\n        mapStateToLocation(state)\n      );\n      if (!isEqual(location, nextLocation)) {\n        history.push(nextLocation);\n      }\n    },\n    [history, initialized, mergeLocation, mapStateToLocation]\n  );\n\n  return [syncLocation, setLocation] as const;\n}\n","import { DeepPartial } from '../types/deep-partial';\n\nconst defaultTheme = {\n  size: {\n    width: 1366,\n    height: 768,\n    maxCodePaneHeight: 200\n  },\n  colors: {\n    primary: '#ebe5da',\n    secondary: '#fc6986',\n    tertiary: '#1e2852',\n    quaternary: '#ffc951',\n    quinary: '#8bddfd'\n  },\n  fonts: {\n    header: '\"Helvetica Neue\", Helvetica, Arial, sans-serif',\n    text: '\"Helvetica Neue\", Helvetica, Arial, sans-serif',\n    monospace: '\"Consolas\", \"Menlo\", monospace'\n  },\n  fontSizes: {\n    h1: '72px',\n    h2: '64px',\n    h3: '56px',\n    text: '44px',\n    monospace: '20px'\n  },\n  space: [16, 24, 32]\n};\n\nexport type SpectacleTheme = typeof defaultTheme;\nexport type SpectacleThemeOverrides = DeepPartial<SpectacleTheme>;\n\nexport default defaultTheme;\n","import { SpectacleThemeOverrides } from './default-theme';\n\nconst printTheme: SpectacleThemeOverrides = {\n  colors: {\n    primary: '#777',\n    secondary: '#000',\n    tertiary: '#fff',\n    quaternary: '#000000',\n    quinary: '#000000'\n  }\n};\nexport default printTheme;\n","import defaultTheme, {\n  SpectacleTheme,\n  SpectacleThemeOverrides\n} from './default-theme';\nimport printTheme from './print-theme';\n\nconst mergeKeys = (\n  base: SpectacleTheme,\n  override: SpectacleThemeOverrides\n): SpectacleTheme =>\n  (Object.keys(override || {}) as Array<keyof SpectacleTheme>).reduce(\n    (merged, key) => {\n      merged[key] = { ...merged[key], ...override[key] } as any;\n      return merged;\n    },\n    { ...base }\n  );\n\ntype MergeOptions = { theme: SpectacleThemeOverrides; printMode?: boolean };\n\nexport function mergeTheme({ theme, printMode }: MergeOptions) {\n  const merged = mergeKeys(defaultTheme, theme);\n  return printMode ? mergeKeys(merged, printTheme) : merged;\n}\n","import { GOTO_FINAL_STEP } from '../hooks/use-deck-state';\nimport {\n  parse as parseQS,\n  ParsedQuery,\n  stringify as stringifyQS\n} from 'query-string';\n\nexport type SlideState = {\n  slideIndex?: number;\n  stepIndex?: number | typeof GOTO_FINAL_STEP;\n};\n\nexport function mapLocationToState(\n  location: Pick<Location, 'search'>\n): SlideState {\n  const { search: queryString } = location;\n\n  const { slideIndex: rawSlideIndex, stepIndex: rawStepIndex } =\n    parseQS(queryString);\n\n  const nextState: SlideState = {};\n\n  if (rawSlideIndex === undefined) {\n    return nextState;\n  }\n\n  nextState.slideIndex = Number(rawSlideIndex);\n  if (isNaN(nextState.slideIndex)) {\n    throw new Error(\n      `Invalid slide index in URL query string: '${queryString}'`\n    );\n  }\n\n  if (rawStepIndex === 'final') {\n    nextState.stepIndex = GOTO_FINAL_STEP;\n  } else if (rawStepIndex !== undefined) {\n    nextState.stepIndex = Number(rawStepIndex);\n    if (isNaN(nextState.stepIndex)) {\n      throw new Error(\n        `Invalid step index in URL query string: '${queryString}'`\n      );\n    }\n  }\n\n  return nextState;\n}\n\nexport function mapStateToLocation(state: SlideState) {\n  const { slideIndex, stepIndex } = state;\n  const query: ParsedQuery = {};\n  if (typeof slideIndex !== 'number') {\n    return query;\n  }\n  query.slideIndex = String(slideIndex);\n  if (typeof stepIndex === 'number') {\n    query.stepIndex = String(stepIndex);\n  } else if (stepIndex === GOTO_FINAL_STEP) {\n    query.stepIndex = 'final';\n  }\n  return {\n    search: '?' + stringifyQS(query)\n  };\n}\n","import { CSSProperties } from 'react';\n\nexport function overviewFrameStyle({\n  overviewScale,\n  nativeSlideWidth,\n  nativeSlideHeight\n}: {\n  overviewScale: number;\n  nativeSlideWidth: number;\n  nativeSlideHeight: number;\n}): CSSProperties {\n  return {\n    margin: '1rem',\n    width: `${overviewScale * nativeSlideWidth}px`,\n    height: `${\n      (overviewScale / (nativeSlideWidth / nativeSlideHeight)) *\n      nativeSlideWidth\n    }px`,\n    display: 'block',\n    transform: 'none',\n    position: 'relative'\n  };\n}\n\nexport function overviewWrapperStyle({\n  overviewScale\n}: {\n  overviewScale: number;\n}): CSSProperties {\n  return {\n    width: `${100 / overviewScale}%`,\n    height: `${100 / overviewScale}%`,\n    transform: `scale(${overviewScale})`,\n    transformOrigin: '0px 0px',\n    position: 'absolute'\n  };\n}\n\nexport function printFrameStyle({\n  nativeSlideWidth,\n  nativeSlideHeight,\n  printScale\n}: {\n  nativeSlideWidth: number;\n  nativeSlideHeight: number;\n  printScale: number;\n}): CSSProperties {\n  return {\n    margin: '0',\n    width: `${printScale * nativeSlideWidth}px`,\n    height: `${\n      (printScale / (nativeSlideWidth / nativeSlideHeight)) * nativeSlideWidth\n    }px`,\n    display: 'block',\n    transform: 'none',\n    position: 'relative',\n    breakAfter: 'page'\n  };\n}\n\nexport function printWrapperStyle({\n  printScale\n}: {\n  printScale: number;\n}): CSSProperties {\n  return {\n    width: `${100 / printScale}%`,\n    height: `${100 / printScale}%`,\n    transform: `scale(${printScale})`,\n    transformOrigin: '0px 0px',\n    position: 'absolute'\n  };\n}\n","import { useEffect, useRef } from 'react';\nimport { DeckStateAndActions } from '../hooks/use-deck-state';\n\nexport type AutoPlayOptions = {\n  enabled?: boolean;\n  loop?: boolean;\n  stepForward: DeckStateAndActions['stepForward'];\n  interval?: number;\n};\n\nexport const useAutoPlay = ({\n  enabled = false,\n  loop = false,\n  stepForward,\n  interval = 1000\n}: AutoPlayOptions) => {\n  const stepFn = useRef(stepForward);\n  stepFn.current = stepForward;\n\n  useEffect(() => {\n    if (enabled) {\n      const id = setInterval(() => {\n        stepFn.current();\n      }, interval);\n\n      return () => clearInterval(id);\n    }\n  }, [enabled, interval, loop]);\n};\n","import { CSSObject } from 'styled-components';\n\nconst STAGE_RIGHT = 'translateX(-100%)';\nconst CENTER_STAGE = 'translateX(0%)';\nconst STAGE_LEFT = 'translateX(100%)';\n\nexport type SlideTransition = {\n  from?: CSSObject;\n  leave?: CSSObject;\n  enter?: CSSObject;\n};\n\nexport const fadeTransition: SlideTransition = {\n  from: {\n    opacity: 0\n  },\n  enter: {\n    opacity: 1\n  },\n  leave: {\n    opacity: 0\n  }\n};\n\nexport const slideTransition: SlideTransition = {\n  from: {\n    transform: STAGE_LEFT\n  },\n  enter: {\n    transform: CENTER_STAGE\n  },\n  leave: {\n    transform: STAGE_RIGHT\n  }\n};\n\nexport const defaultTransition = slideTransition;\n","import styled from 'styled-components';\n\nexport const TemplateWrapper = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  pointer-events: none;\n`;\n\nexport default TemplateWrapper;\n","export const DEFAULT_SLIDE_ELEMENT_INDEX = -1;\nexport const DEFAULT_SLIDE_INDEX = 0;\nexport const SYSTEM_FONT =\n  '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Helvetica Neue\", Helvetica, sans-serif';\n\nexport const KEYBOARD_SHORTCUTS = {\n  DEFAULT_MODE: 'mod+shift+d',\n  PRESENTER_MODE: 'mod+shift+p',\n  OVERVIEW_MODE: 'mod+shift+o',\n  PRINT_MODE: 'mod+shift+r',\n  EXPORT_MODE: 'mod+shift+e',\n  TAB_FORWARD_OVERVIEW_MODE: 'tab',\n  TAB_BACKWARD_OVERVIEW_MODE: 'shift+tab',\n  SELECT_SLIDE_OVERVIEW_MODE: 'enter',\n  NEXT_SLIDE: 'right',\n  PREVIOUS_SLIDE: 'left'\n};\nexport type KeyboardShortcutTypes = keyof typeof KEYBOARD_SHORTCUTS;\n\nexport const KEYBOARD_SHORTCUTS_IDS = {\n  DEFAULT_MODE: 'DEFAULT_MODE',\n  PRESENTER_MODE: 'PRESENTER_MODE',\n  OVERVIEW_MODE: 'OVERVIEW_MODE',\n  PRINT_MODE: 'PRINT_MODE',\n  EXPORT_MODE: 'EXPORT_MODE',\n  TAB_FORWARD_OVERVIEW_MODE: 'TAB_FORWARD_OVERVIEW_MODE',\n  TAB_BACKWARD_OVERVIEW_MODE: 'TAB_BACKWARD_OVERVIEW_MODE',\n  SELECT_SLIDE_OVERVIEW_MODE: 'SELECT_SLIDE_OVERVIEW_MODE',\n  NEXT_SLIDE: 'NEXT_SLIDE',\n  PREVIOUS_SLIDE: 'PREVIOUS_SLIDE'\n};\n\nexport const SPECTACLE_MODES = {\n  DEFAULT_MODE: 'DEFAULT_MODE',\n  PRESENTER_MODE: 'PRESENTER_MODE',\n  OVERVIEW_MODE: 'OVERVIEW_MODE',\n  PRINT_MODE: 'PRINT_MODE',\n  EXPORT_MODE: 'EXPORT_MODE'\n} as const;\ntype ValuesOf<T> = T[keyof T];\nexport type SpectacleMode = ValuesOf<typeof SPECTACLE_MODES>;\n\nexport type ModeSearchParams = {\n  presenterMode?: boolean;\n  overviewMode?: boolean;\n  printMode?: boolean;\n  exportMode?: boolean;\n};\n\nexport type ToggleModeParams = {\n  newMode: SpectacleMode;\n  senderSlideIndex?: number;\n  e?: Event;\n};\n","import { useCallback, useEffect, useId, useRef } from 'react';\nimport { BroadcastChannel as BroadcastChannelPolyfill } from 'broadcast-channel';\nimport { DeckView } from './use-deck-state';\n\nconst noop = () => {};\nlet safeWindow: any = {};\nif (typeof window !== 'undefined') {\n  safeWindow = window;\n}\nconst BroadcastChannel =\n  safeWindow.BroadcastChannel || BroadcastChannelPolyfill;\n\ntype MessageCallback = (message: MessageTypes) => void;\n\ntype MessageTypes =\n  | { type: 'SYNC'; payload: Partial<DeckView> }\n  | { type: 'SYNC_REQUEST'; payload?: never };\n\nexport default function useBroadcastChannel(\n  channelName: string,\n  onMessage: MessageCallback = noop,\n  deps = []\n) {\n  const broadcasterId = useId();\n  const channel = useRef<BroadcastChannel>();\n\n  useEffect(() => {\n    channel.current = new BroadcastChannel(channelName);\n\n    return () => {\n      channel.current?.close();\n    };\n  }, [channelName]);\n\n  const postMessage = useCallback(\n    <TType extends MessageTypes['type']>(\n      type: TType,\n      payload: MessageTypes['payload'] = {}\n    ) => {\n      const message = {\n        type,\n        payload,\n        meta: { sender: broadcasterId }\n      };\n      const rawMessage = JSON.stringify(message);\n      channel.current?.postMessage(rawMessage);\n    },\n    [broadcasterId]\n  );\n\n  // Avoid constantly modifying the 'message' listener in the effect below\n  const userMessageHandlerRef = useRef(onMessage);\n  useEffect(() => {\n    userMessageHandlerRef.current = onMessage;\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [...deps, postMessage]);\n\n  useEffect(() => {\n    if (!channel.current) return;\n    const messageHandler = (event: MessageEvent<string>) => {\n      const rawMessage = event.data;\n      const message = JSON.parse(rawMessage);\n      userMessageHandlerRef.current(message);\n    };\n    channel.current?.addEventListener('message', messageHandler);\n    return () => {\n      channel.current?.removeEventListener('message', messageHandler);\n    };\n  }, [postMessage]);\n\n  return [postMessage, broadcasterId] as const;\n}\n","import {\n  useRef,\n  useCallback,\n  useState,\n  useEffect,\n  ReactNode,\n  ReactElement\n} from 'react';\nimport styled from 'styled-components';\nimport { DeckInternal, DeckRef, TemplateFn } from '../deck/deck';\nimport { Text, SpectacleLogo } from '../../index';\nimport {\n  PresenterDeckContainer,\n  NotesColumn,\n  PreviewColumn,\n  deckBackdropStyles,\n  NotesContainer\n} from './components';\nimport useLocationSync from '../../hooks/use-location-sync';\nimport * as queryStringMapFns from '../../location-map-fns/query-string';\nimport { DeckView, GOTO_FINAL_STEP } from '../../hooks/use-deck-state';\nimport { SYSTEM_FONT } from '../../utils/constants';\nimport { FlexBox, Box } from '../layout-primitives';\nimport { Timer } from './timer';\nimport useBroadcastChannel from '../../hooks/use-broadcast-channel';\nimport { SpectacleThemeOverrides } from '../../theme/default-theme';\n\nconst endOfNextSlide = ({ slideIndex }: DeckView) => ({\n  slideIndex: slideIndex + 1,\n  stepIndex: GOTO_FINAL_STEP\n});\n\nconst PreviewSlideWrapper = styled.div<{ visible?: boolean }>(\n  ({ visible }) => ({\n    visibility: visible ? 'visible' : 'hidden'\n  })\n);\n\nconst PresenterMode = (props: PresenterModeProps): ReactElement => {\n  const { children, theme, backgroundImage, template } = props;\n  const deck = useRef<DeckRef>(null);\n  const previewDeck = useRef<DeckRef>(null);\n  const [notePortalNode, setNotePortalNode] = useState<HTMLDivElement | null>();\n  const [showFinalSlide, setShowFinalSlide] = useState(true);\n\n  const [postMessage] = useBroadcastChannel(\n    'spectacle_presenter_bus',\n    (message) => {\n      if (message.type === 'SYNC_REQUEST') {\n        postMessage('SYNC', deck.current!.activeView);\n      }\n    }\n  );\n\n  const [syncLocation, setLocation] = useLocationSync({\n    setState: (state) => deck.current!.skipTo(state),\n    ...queryStringMapFns\n  });\n\n  const onActiveStateChange = useCallback(\n    (activeView: DeckView) => {\n      setLocation(activeView);\n      postMessage('SYNC', activeView);\n      setShowFinalSlide(\n        (deck.current?.numberOfSlides || 0) - 1 !==\n          deck?.current?.activeView.slideIndex\n      );\n      previewDeck.current!.skipTo(endOfNextSlide(activeView));\n    },\n    [postMessage, setLocation]\n  );\n\n  useEffect(() => {\n    const initialView = syncLocation({\n      slideIndex: 0,\n      stepIndex: 0\n    })!;\n    deck.current!.initializeTo(initialView);\n    postMessage('SYNC', initialView);\n    previewDeck.current!.initializeTo(endOfNextSlide(initialView));\n  }, [postMessage, syncLocation]);\n\n  return (\n    <PresenterDeckContainer>\n      <NotesColumn>\n        <FlexBox justifyContent=\"space-between\" paddingTop={15} paddingX={15}>\n          <SpectacleLogo size={60} />\n          <FlexBox width={0.75} flexDirection=\"column\" alignItems=\"flex-end\">\n            <Text\n              data-testid=\"use-browser-tab-text\"\n              fontSize={15}\n              fontFamily={SYSTEM_FONT}\n              textAlign=\"right\"\n              padding=\"0px\"\n              margin=\"0px 0px 10px\"\n            >\n              Open a second browser tab at {window.location.host} to use as the\n              audience deck.\n            </Text>\n          </FlexBox>\n        </FlexBox>\n        <Box paddingX={15} paddingY={10}>\n          <Timer />\n        </Box>\n        <NotesContainer>\n          <Text\n            ref={setNotePortalNode}\n            fontFamily={SYSTEM_FONT}\n            lineHeight=\"1.5em\"\n            fontSize=\"1.5vw\"\n            padding={15}\n          />\n        </NotesContainer>\n      </NotesColumn>\n      <PreviewColumn>\n        <DeckInternal\n          notePortalNode={notePortalNode}\n          backdropStyle={deckBackdropStyles.currentSlide}\n          onActiveStateChange={onActiveStateChange}\n          ref={deck}\n          theme={theme}\n          backgroundImage={backgroundImage}\n          template={template}\n        >\n          {children}\n        </DeckInternal>\n        <PreviewSlideWrapper visible={showFinalSlide}>\n          <DeckInternal\n            disableInteractivity\n            useAnimations={false}\n            backdropStyle={deckBackdropStyles.nextSlide}\n            ref={previewDeck}\n            theme={theme}\n            backgroundImage={backgroundImage}\n            template={template}\n          >\n            {children}\n          </DeckInternal>\n        </PreviewSlideWrapper>\n      </PreviewColumn>\n    </PresenterDeckContainer>\n  );\n};\n\nexport default PresenterMode;\n\ntype PresenterModeProps = {\n  theme?: SpectacleThemeOverrides;\n  children: ReactNode;\n  backgroundImage?: string;\n  template?: TemplateFn | ReactNode;\n};\n","import styled from 'styled-components';\n\nexport const PresenterDeckContainer = styled.div`\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  display: flex;\n  flex-direction: row;\n  background-color: #181818;\n  overflow: hidden;\n  color: white;\n`;\n\nexport const NotesColumn = styled.div`\n  padding: 0;\n  display: flex;\n  flex-direction: column;\n  width: 50%;\n  border-right: 1px solid black;\n`;\n\nexport const PreviewColumn = styled.div`\n  background-color: black;\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  width: 50%;\n  > :first-child {\n    margin-bottom: 0.5em;\n  }\n`;\n\nexport const SlideContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  height: calc(50% - 1em);\n  width: 100%;\n  overflow: hidden;\n`;\n\nexport const SlideWrapper = styled.div<{ small?: boolean }>`\n  flex: 1;\n  width: 100%;\n  position: relative;\n  .spectacle-fullscreen-button {\n    display: none;\n  }\n  ${({ small }) => small && `flex: 0.8;`}\n`;\n\nexport const SlideCountLabel = styled.span`\n  background: hsla(0, 0%, 100%, 0.1);\n  border-radius: 4px;\n  font-size: 0.7em;\n  padding: 1px 4px;\n`;\n\nexport const NotesContainer = styled.div`\n  border-top: 1px solid black;\n  overflow-y: scroll;\n  flex: 1;\n\n  ::-webkit-scrollbar {\n    width: 10px;\n  }\n\n  /* Track */\n  ::-webkit-scrollbar-track {\n    background-color: #111;\n  }\n\n  /* Handle */\n  ::-webkit-scrollbar-thumb {\n    background: #333;\n    border-radius: 10px;\n  }\n`;\n\nexport const deckBackdropStyles = {\n  currentSlide: {\n    width: '50vw',\n    height: '50vh',\n    left: '50vw',\n    top: '7vh'\n  },\n  nextSlide: {\n    width: '50vw',\n    height: '33vh',\n    top: '60vh',\n    left: '50vw'\n  }\n};\n","import styled from 'styled-components';\n\nconst containerPrintStyle = `\n  @media print {\n    height: inherit;\n  }\n`;\n\nimport {\n  compose,\n  grid,\n  flexbox,\n  layout,\n  position,\n  border,\n  color,\n  space\n} from 'styled-system';\nimport * as SS from 'styled-system';\n\ntype BoxProps = SS.LayoutProps &\n  SS.SpaceProps &\n  SS.PositionProps &\n  SS.ColorProps &\n  SS.BorderProps;\n\nconst Box = styled.div<BoxProps>(\n  compose(layout, space, position, color, border),\n  containerPrintStyle\n);\n\nconst FlexBox = styled.div.attrs<BoxProps & SS.FlexboxProps>((props) => ({\n  alignItems: 'center',\n  justifyContent: 'center',\n  display: 'flex',\n  ...props\n}))<BoxProps & SS.FlexboxProps>(\n  compose(layout, space, position, color, border, flexbox),\n  containerPrintStyle\n);\n\ntype GridProps = SS.LayoutProps & SS.GridProps & SS.PositionProps;\nconst Grid = styled.div.attrs<GridProps>((props) => ({\n  display: 'grid',\n  ...props\n}))<GridProps>(compose(layout, grid, position), containerPrintStyle);\n\nexport { Box, FlexBox, Grid };\n","import { useState, useCallback } from 'react';\nimport { Text } from '../typography';\nimport { FlexBox, Box } from '../layout-primitives';\nimport InternalButton from '../internal-button';\nimport { useTimer } from '../../utils/use-timer';\nimport { SYSTEM_FONT } from '../../utils/constants';\nimport { useRegisterActions } from 'kbar';\n\nexport const Timer = () => {\n  const [timer, setTimer] = useState(0);\n  const [timerStarted, setTimerStarted] = useState(false);\n  const addToTimer = useCallback((v: number) => setTimer((s) => s + v), []);\n  const toggleTimer = useCallback(() => setTimerStarted((s) => !s), []);\n  const resetTimer = useCallback(() => setTimer(0), []);\n  useTimer(addToTimer, 1000, timerStarted);\n  const minutes = Math.floor(Math.round(timer) / 60);\n\n  useRegisterActions([\n    {\n      id: 'Start/Pause Timer',\n      name: 'Start/Pause Timer',\n      keywords: 'start pause',\n      perform: toggleTimer,\n      section: 'Timer'\n    },\n    {\n      id: 'Restart Timer',\n      name: 'Restart Timer',\n      keywords: 'restart',\n      perform: resetTimer,\n      section: 'Timer'\n    }\n  ]);\n\n  return (\n    <FlexBox>\n      <FlexBox justifyContent=\"flex-start\" flex={1}>\n        <Text\n          fontFamily={SYSTEM_FONT}\n          fontWeight=\"bold\"\n          fontSize=\"2vw\"\n          textAlign=\"left\"\n        >{`${String(minutes).padStart(2, '0')}:${String(\n          Math.round(timer) - minutes * 60\n        ).padStart(2, '0')}`}</Text>\n      </FlexBox>\n      <InternalButton onClick={toggleTimer}>\n        {timerStarted ? 'Stop Timer' : 'Start Timer'}\n      </InternalButton>\n      <Box width={8} />\n      <InternalButton onClick={resetTimer}>Reset</InternalButton>\n    </FlexBox>\n  );\n};\n","import styled, { CSSObject } from 'styled-components';\nimport {\n  color,\n  typography,\n  space,\n  compose,\n  system,\n  ColorProps,\n  TypographyProps,\n  SpaceProps,\n  BorderProps\n} from 'styled-system';\nimport {\n  FC,\n  PropsWithChildren,\n  RefAttributes,\n  useRef,\n  useState,\n  HTMLAttributes\n} from 'react';\nimport useResizeObserver from 'use-resize-observer';\n\nconst decoration = system({ textDecoration: true });\ntype DecorationProps = Pick<CSSObject, 'textDecoration'>;\n\nexport type CommonTypographyProps = ColorProps & TypographyProps & SpaceProps;\n\nconst Text = styled.div.attrs<CommonTypographyProps>((props) => ({\n  color: 'primary',\n  fontFamily: 'text',\n  fontSize: 'text',\n  textAlign: 'left',\n  padding: 0,\n  margin: 0,\n  ...props\n}))<CommonTypographyProps>(compose(color, typography, space));\n\nconst CodeSpan = styled.code.attrs<CommonTypographyProps>((props) => ({\n  fontFamily: 'monospace',\n  fontSize: 'text',\n  ...props\n}))<CommonTypographyProps>(compose(color, typography, space));\n\nconst Link = styled.a.attrs<CommonTypographyProps & DecorationProps>(\n  (props) => ({\n    fontFamily: 'text',\n    fontSize: 'text',\n    textDecoration: 'underline',\n    color: 'quaternary',\n    ...props\n  })\n)<CommonTypographyProps & DecorationProps>(\n  compose(color, typography, space, decoration)\n);\n\nconst Heading = styled.div.attrs<CommonTypographyProps>((props) => ({\n  color: 'secondary',\n  fontFamily: 'header',\n  fontSize: 'h1',\n  fontWeight: 'bold',\n  textAlign: 'center',\n  margin: 1,\n  padding: 0,\n  ...props\n}))<CommonTypographyProps>(compose(color, typography, space));\n\nconst Quote = styled(\n  Text as FC<\n    PropsWithChildren<CommonTypographyProps & Pick<BorderProps, 'borderColor'>>\n  >\n).attrs<CommonTypographyProps & Pick<BorderProps, 'borderColor'>>((props) => ({\n  color: 'primary',\n  fontFamily: 'text',\n  fontSize: 'text',\n  textAlign: 'left',\n  fontStyle: 'italic',\n  padding: '16px 0 16px 8px',\n  margin: 0,\n  ...props\n}))<CommonTypographyProps & Pick<BorderProps, 'borderColor'>>`\n  border-left: 1px solid\n    ${({ theme, borderColor }) => borderColor || theme.colors.secondary};\n\n  div {\n    margin: 0;\n  }\n`;\n\nconst listStyle = system({\n  listStyleType: true\n});\ntype ListStyleProps = Pick<CSSObject, 'listStyleType'>;\n\nconst OrderedList = styled.ol.attrs<CommonTypographyProps & ListStyleProps>(\n  (props) => ({\n    color: 'primary',\n    fontFamily: 'text',\n    fontSize: 'text',\n    textAlign: 'left',\n    margin: 0,\n    ...props\n  })\n)<CommonTypographyProps & ListStyleProps>(\n  compose(color, typography, space, listStyle)\n);\n\nconst UnorderedList = styled.ul.attrs<CommonTypographyProps & ListStyleProps>(\n  (props) => ({\n    color: 'primary',\n    fontFamily: 'text',\n    fontSize: 'text',\n    textAlign: 'left',\n    margin: 0,\n    ...props\n  })\n)<CommonTypographyProps & ListStyleProps>(\n  compose(color, typography, space, listStyle)\n);\n\nconst ListItem = styled.li.attrs<CommonTypographyProps>((props) => ({\n  margin: 0,\n  ...props\n}))<CommonTypographyProps>(compose(color, typography, space));\n\nconst FitContainer = styled.div`\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n`;\n\nconst ScalableText = styled(\n  Text as FC<CommonTypographyProps & RefAttributes<HTMLDivElement>>\n).attrs<CommonTypographyProps & { scale?: number }>((props) => ({\n  textAlign: 'center',\n  ...props\n}))<{ scale?: number }>`\n  transform-origin: center;\n  transform: scale(${(props) => props.scale || 1});\n  white-space: nowrap;\n`;\n\nconst FitText: FC<\n  PropsWithChildren<CommonTypographyProps & HTMLAttributes<HTMLDivElement>>\n> = (props) => {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const textRef = useRef<HTMLDivElement>(null);\n  const [scale, setScale] = useState(1);\n\n  useResizeObserver({\n    ref: containerRef,\n    onResize: () => {\n      if (!containerRef.current || !textRef.current) return;\n\n      const containerWidth = containerRef.current.offsetWidth;\n      const textWidth = textRef.current.offsetWidth;\n      if (textWidth === 0) return;\n\n      const newScale = Math.min(containerWidth / textWidth);\n      setScale(newScale);\n    }\n  });\n\n  return (\n    <FitContainer ref={containerRef}>\n      <ScalableText {...props} ref={textRef} scale={scale} />\n    </FitContainer>\n  );\n};\n\nexport {\n  Text,\n  Heading,\n  Quote,\n  OrderedList,\n  UnorderedList,\n  ListItem,\n  Link,\n  CodeSpan,\n  FitText\n};\n","import styled from 'styled-components';\nimport { SYSTEM_FONT } from '../utils/constants';\n\n/**\n * This button is for internal controls like the presenter display.\n * It uses Formidable Spectacle-branded colors.\n */\nconst InternalButton = styled('button')`\n  background: #333;\n  border: 1px solid hsla(0, 0%, 0%, 0.4);\n  border-radius: 2px;\n  color: #fff;\n  box-shadow: inset 1px 1px 0 hsla(0, 0%, 100%, 0.1),\n    1px 1px 0 hsla(0, 0%, 0%, 0.1);\n  padding: 3px 20px;\n  font-size: 14px;\n  font-weight: bold;\n  font-family: ${SYSTEM_FONT};\n\n  &:active {\n    box-shadow: inset 1px 1px 0 hsla(0, 0%, 0%, 0.25),\n      1px 1px 0 hsla(0, 0%, 0%, 0.1);\n  }\n`;\n\nexport default InternalButton;\n","import { useState, useRef, useEffect } from 'react';\n\nexport const useTimer = (\n  handler: (timeDelay: number) => void,\n  period: number,\n  isActive: boolean\n) => {\n  const [timeDelay, setTimeDelay] = useState(1);\n  const initialTime = useRef<number>();\n  const callBack = useRef<typeof handler>();\n  useEffect(() => {\n    callBack.current = handler;\n  }, [handler]);\n\n  // eslint-disable-next-line consistent-return\n  useEffect(() => {\n    if (isActive) {\n      initialTime.current = new Date().getTime();\n      const timer = setInterval(() => {\n        const currentTime = new Date().getTime();\n        const delay = currentTime - initialTime.current!;\n        initialTime.current = currentTime;\n        setTimeDelay(delay / 1000);\n        callBack.current!(timeDelay);\n      }, period);\n\n      return () => {\n        clearInterval(timer);\n      };\n    }\n  }, [period, isActive, timeDelay]);\n};\n","import { ReactNode } from 'react';\nimport styled, { createGlobalStyle } from 'styled-components';\nimport { DeckInternal, TemplateFn } from '../deck/deck';\nimport { AnimatedDiv } from '../slide/slide';\nimport defaultTheme, {\n  SpectacleThemeOverrides\n} from '../../theme/default-theme';\n\nconst Backdrop = styled.div`\n  background-color: white;\n`;\n\ntype PrintStyleProps = { pageSize: string };\nconst PrintStyle = createGlobalStyle<PrintStyleProps>`\n  @media print {\n    body, html {\n      margin: 0;\n    }\n    @page {\n      size: ${({ pageSize }) => pageSize};\n    }\n    ${AnimatedDiv} {\n      @page {\n        margin: 0;\n      }\n    }\n  }\n`;\n\nexport default function PrintMode({\n  children,\n  theme,\n  exportMode,\n  pageSize,\n  backgroundImage,\n  template\n}: PrintModeProps) {\n  const width = theme?.size?.width || defaultTheme.size.width;\n  const height = theme?.size?.height || defaultTheme.size.height;\n  const computedPageSize = pageSize || `${width}px ${height}px`;\n  return (\n    <>\n      <PrintStyle pageSize={computedPageSize} />\n      <DeckInternal\n        printMode\n        exportMode={exportMode}\n        disableInteractivity\n        theme={{ ...theme, Backdrop, backdropStyle: {} }}\n        backgroundImage={backgroundImage}\n        template={template}\n      >\n        {children}\n      </DeckInternal>\n    </>\n  );\n}\n\ntype PrintModeProps = {\n  children: ReactNode;\n  theme?: SpectacleThemeOverrides;\n  exportMode?: boolean;\n  pageSize?: string;\n  pageOrientation?: '' | 'landscape' | 'portrait';\n  backgroundImage?: string;\n  template?: TemplateFn | ReactNode;\n};\n","import {\n  createContext,\n  ReactNode,\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useState\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport styled, { css, ThemeContext } from 'styled-components';\nimport {\n  background,\n  BackgroundProps,\n  color,\n  ColorProps,\n  space,\n  SpaceProps\n} from 'styled-system';\nimport { DeckContext, SlideId, TemplateFn } from '../deck/deck';\nimport { animated, useSpring } from 'react-spring';\nimport { useSlide } from '../../hooks/use-slides';\nimport { ActivationThresholds, useCollectSteps } from '../../hooks/use-steps';\nimport { GOTO_FINAL_STEP } from '../../hooks/use-deck-state';\nimport { useSwipeable } from 'react-swipeable';\nimport { SlideTransition } from '../transitions';\nimport TemplateWrapper from '../template-wrapper';\n\nconst noop = () => {};\n\nexport type SlideContextType = {\n  immediate: boolean;\n  slideId: SlideId;\n  isSlideActive: boolean;\n  activationThresholds: ActivationThresholds;\n  activeStepIndex: number;\n};\n\nexport const SlideContext = createContext<SlideContextType>(null as any);\nSlideContext.displayName = 'SlideContext';\n\ntype SlideContainerProps = BackgroundProps &\n  ColorProps & { backgroundOpacity: number };\n\nconst SlideContainer = styled.div<SlideContainerProps>`\n  ${color};\n  width: 100%;\n  height: 100%;\n  position: relative;\n  overflow: hidden;\n  display: flex;\n  z-index: 0;\n\n  &:before {\n    ${background};\n    content: ' ';\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: -1;\n    opacity: ${({ backgroundOpacity }) => backgroundOpacity};\n  }\n`;\n\nconst SlideWrapper = styled.div<ColorProps & SpaceProps>(\n  color,\n  space,\n  css`\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n    justify-content: flex-start;\n  `\n);\n\nexport const AnimatedDiv = styled(animated.div)`\n  width: 100%;\n  height: 100%;\n  position: absolute;\n  background: transparent;\n\n  ${({ tabIndex }) =>\n    tabIndex === 0 &&\n    css`\n      outline: 2px solid white;\n    `}\n`;\n\nconst Slide = (props: SlideProps): JSX.Element => {\n  const {\n    id: userProvidedId,\n    children,\n    backgroundColor = 'tertiary',\n    backgroundImage,\n    backgroundOpacity = 1,\n    backgroundPosition = 'center',\n    backgroundRepeat = 'no-repeat',\n    backgroundSize = 'cover',\n    padding = 2,\n    textColor = 'primary',\n    template: slideTemplate,\n    transition: slideTransition = {},\n    className = ''\n  } = props;\n  if (useContext(SlideContext)) {\n    throw new Error(`Slide components may not be nested within each other.`);\n  }\n\n  const slideHasTemplate = slideTemplate !== undefined;\n  const { slideId, placeholder } = useSlide(slideHasTemplate, userProvidedId);\n\n  const { setStepContainer, activationThresholds, finalStepIndex } =\n    useCollectSteps();\n  const {\n    onSlideClick = noop,\n    onMobileSlide,\n    useAnimations,\n    autoPlayLoop,\n    navigationDirection,\n    slidePortalNode,\n    frameOverrideStyle = {},\n    wrapperOverrideStyle = {},\n    slideIds,\n    activeView,\n    pendingView,\n    advanceSlide,\n    regressSlide,\n    skipTo,\n    commitTransition,\n    cancelTransition,\n    transition,\n    template: deckTemplate,\n    slideCount,\n    backgroundImage: deckBackgroundImage,\n    inOverviewMode,\n    inPrintMode\n  } = useContext(DeckContext);\n\n  const handleClick = useCallback(\n    (e: MouseEvent) => {\n      onSlideClick(e, slideId);\n    },\n    [onSlideClick, slideId]\n  );\n\n  const mergedTransition = useMemo(() => {\n    const result = { ...transition };\n    'from' in slideTransition && (result.from = slideTransition.from);\n    'enter' in slideTransition && (result.enter = slideTransition.enter);\n    'leave' in slideTransition && (result.leave = slideTransition.leave);\n    return result;\n  }, [slideTransition, transition]);\n\n  const isActive = activeView.slideId === slideId;\n  const isPending = pendingView.slideId === slideId;\n  const slideIndex = slideIds.findIndex((id) => id === slideId);\n  const [isPassed, isUpcoming] = (() => {\n    // Handle special cases not covered by the main logic below\n    if (slideCount === 1) {\n      return [false, false];\n    }\n    if (slideCount === 2) {\n      // The 2-slide case results in some janky animation when wrapping from end\n      // to start, but that's the best overall behavior that could be achieved\n      // without majorly reworking the animation logic.\n      if (slideIndex === activeView.slideIndex) {\n        return [false, false];\n      }\n      if (slideIndex === 0) {\n        return [true, false];\n      }\n      return [false, true];\n    }\n\n    const isWrappingForward =\n      slideIndex === slideCount - 1 && activeView.slideIndex === 0;\n    const isWrappingReverse =\n      slideIndex === 0 && activeView.slideIndex === slideCount - 1;\n    const isWrapping = isWrappingForward || isWrappingReverse;\n    const isPassed =\n      (!isWrapping && slideIndex < activeView.slideIndex) || isWrappingForward;\n    const isUpcoming =\n      (!isWrapping && slideIndex > activeView.slideIndex) || isWrappingReverse;\n    return [isPassed, isUpcoming];\n  })();\n\n  const willEnter = !isActive && isPending;\n  const willExit = isActive && !isPending;\n\n  const slideWillChange = activeView.slideIndex !== pendingView.slideIndex;\n  const stepWillChange = activeView.stepIndex !== pendingView.stepIndex;\n\n  const [animate, setAnimate] = useState(false);\n\n  // If we've already been to this slide, all its elements should be visible; if\n  // we haven't gotten to it yet, none of them should be visible. (This helps us\n  // handle slides which are exiting but which are still visible while\n  // animated.)\n  const infinityDirection =\n    slideIndex < activeView.slideIndex ? Infinity : -Infinity;\n  const internalStepIndex = isActive ? activeView.stepIndex : infinityDirection;\n\n  const [hover, setHover] = useState(false);\n  const onHoverChange = useCallback(() => {\n    setHover(!hover);\n  }, [hover]);\n\n  useEffect(() => {\n    if (!isActive) return;\n    if (!stepWillChange) return;\n    if (slideWillChange) return;\n\n    if (pendingView.stepIndex < 0) {\n      setAnimate(false);\n\n      if (autoPlayLoop && activeView.slideIndex === 0) {\n        skipTo({ slideIndex: slideCount - 1, stepIndex: GOTO_FINAL_STEP });\n      } else {\n        regressSlide();\n      }\n    } else if (pendingView.stepIndex > finalStepIndex) {\n      setAnimate(true);\n\n      if (autoPlayLoop && activeView.slideIndex === slideCount - 1) {\n        skipTo({ slideIndex: 0, stepIndex: 0 });\n      } else {\n        advanceSlide();\n      }\n    } else if (pendingView.stepIndex === GOTO_FINAL_STEP) {\n      setAnimate(false);\n      commitTransition({\n        stepIndex: finalStepIndex\n      });\n    } else {\n      const isSingleForwardStep = navigationDirection > 0;\n      // the step is happening within this slide\n      setAnimate(isSingleForwardStep);\n      commitTransition();\n    }\n  }, [\n    activeView,\n    advanceSlide,\n    autoPlayLoop,\n    commitTransition,\n    finalStepIndex,\n    navigationDirection,\n    isActive,\n    pendingView,\n    regressSlide,\n    skipTo,\n    slideCount,\n    slideWillChange,\n    stepWillChange\n  ]);\n\n  // Bounds checking for slides in the presentation.\n  useEffect(() => {\n    if (!willExit) return;\n    if (pendingView.slideId === undefined && !autoPlayLoop) {\n      setAnimate(false);\n      cancelTransition();\n    } else {\n      const isSingleForwardStep = navigationDirection > 0;\n      setAnimate(isSingleForwardStep);\n    }\n  }, [\n    activeView.slideIndex,\n    autoPlayLoop,\n    cancelTransition,\n    pendingView,\n    navigationDirection,\n    willExit\n  ]);\n\n  useEffect(() => {\n    if (!willEnter) return;\n    if (finalStepIndex === undefined) return;\n\n    if (pendingView.stepIndex < 0) {\n      setAnimate(false);\n      commitTransition({\n        stepIndex: 0\n      });\n    } else if (pendingView.stepIndex === GOTO_FINAL_STEP) {\n      // Because <Slide> elements enumerate their own steps, nobody else\n      // actually knows how many steps are in a slide. So other slides put a\n      // value of GOTO_FINAL_STEP in the step index to indicate that the slide\n      // should fill in the correct finalStepIndex before we commit the change.\n      setAnimate(false);\n      commitTransition({\n        stepIndex: finalStepIndex\n      });\n    } else if (pendingView.stepIndex > finalStepIndex) {\n      setAnimate(false);\n      commitTransition({\n        stepIndex: finalStepIndex\n      });\n    } else {\n      const isSingleForwardStep = navigationDirection > 0;\n\n      setAnimate(isSingleForwardStep);\n      commitTransition();\n    }\n  }, [\n    activeView,\n    commitTransition,\n    finalStepIndex,\n    navigationDirection,\n    pendingView,\n    willEnter\n  ]);\n\n  const target = useMemo(() => {\n    if (isPassed) {\n      return [mergedTransition.leave, { display: 'none' }];\n    }\n    if (isActive) {\n      return {\n        ...mergedTransition.enter,\n        display: 'unset'\n      };\n    }\n    if (isUpcoming) {\n      return {\n        ...mergedTransition.from,\n        display: 'none'\n      };\n    }\n    return {\n      display: 'none'\n    };\n  }, [\n    isPassed,\n    isActive,\n    isUpcoming,\n    mergedTransition.leave,\n    mergedTransition.enter,\n    mergedTransition.from\n  ]);\n\n  const immediate = !animate || !useAnimations;\n\n  const springFrameStyle = useSpring({\n    to: target,\n    immediate\n  });\n\n  const theme = useContext(ThemeContext);\n  const scaledWrapperOverrideStyle = useMemo(() => {\n    if (\n      !wrapperOverrideStyle ||\n      Object.entries(wrapperOverrideStyle).length === 0\n    ) {\n      return {};\n    }\n    const themeSlidePadding = theme?.space?.[padding] || 0;\n    return {\n      ...wrapperOverrideStyle,\n      width: `calc(${wrapperOverrideStyle.width} - ${themeSlidePadding * 2}px)`,\n      height: `calc(${wrapperOverrideStyle.height} - ${\n        themeSlidePadding * 2\n      }px)`\n    };\n  }, [wrapperOverrideStyle, theme, padding]);\n\n  const template = slideHasTemplate ? slideTemplate : deckTemplate;\n  const templateElement =\n    typeof template === 'function'\n      ? template({\n          slideNumber: activeView.slideIndex + 1,\n          numberOfSlides: slideCount\n        })\n      : template;\n\n  const swipeHandler = useSwipeable({\n    onSwiped: (eventData) => onMobileSlide(eventData)\n  });\n  return (\n    <>\n      {placeholder}\n      <SlideContext.Provider\n        value={{\n          immediate,\n          slideId,\n          isSlideActive: isActive,\n          activationThresholds,\n          activeStepIndex: internalStepIndex\n        }}\n      >\n        {slidePortalNode &&\n          ReactDOM.createPortal(\n            <AnimatedDiv\n              ref={setStepContainer}\n              // @ts-expect-error Events are not typed quite tightly enough (yet)\n              onClick={handleClick}\n              tabIndex={inOverviewMode && isActive ? 0 : undefined}\n              style={{\n                ...(inOverviewMode || inPrintMode ? {} : springFrameStyle),\n                // NOTE: React-spring will update the display value at some point in the near\n                // future rather than immediately at the time of render. In the AnimatedProgress\n                // component, we need to make DOM calculations when a new slide becomes active\n                // but are not able to if the active slide is not visible at the time of render.\n                // We toggle the display immediately once a slide becomes active to avoid the delay.\n                ...(isActive && { display: 'unset' }),\n                ...frameOverrideStyle,\n                ...(inOverviewMode &&\n                  hover && {\n                    outline: '2px solid white'\n                  })\n              }}\n              onMouseEnter={onHoverChange}\n              onMouseLeave={onHoverChange}\n            >\n              <SlideContainer\n                className={className}\n                backgroundColor={backgroundColor}\n                backgroundImage={backgroundImage || deckBackgroundImage}\n                backgroundOpacity={backgroundOpacity}\n                backgroundPosition={backgroundPosition}\n                backgroundRepeat={backgroundRepeat}\n                backgroundSize={backgroundSize}\n                color={textColor}\n                {...swipeHandler}\n              >\n                {((slideHasTemplate && isActive) ||\n                  inOverviewMode ||\n                  inPrintMode) && (\n                  <TemplateWrapper style={wrapperOverrideStyle}>\n                    {templateElement}\n                  </TemplateWrapper>\n                )}\n                <SlideWrapper\n                  style={scaledWrapperOverrideStyle}\n                  padding={padding}\n                >\n                  {children}\n                </SlideWrapper>\n              </SlideContainer>\n            </AnimatedDiv>,\n            slidePortalNode\n          )}\n      </SlideContext.Provider>\n    </>\n  );\n};\n\nexport default Slide;\n\nexport type SlideProps = {\n  id?: SlideId;\n  className?: string;\n\n  backgroundColor?: string;\n  backgroundImage?: string;\n  backgroundOpacity?: number;\n  backgroundPosition?: string;\n  backgroundRepeat?: string;\n  backgroundSize?: string;\n  children: ReactNode;\n  padding?: string | number;\n  textColor?: string;\n  template?: TemplateFn | ReactNode;\n  transition?: SlideTransition;\n};\n","import { useState, useContext, useRef, useEffect, useId } from 'react';\nimport { SlideContext } from '../components/slide/slide';\nimport sortByKeyComparator from '../utils/sort-by';\nimport clamp from '../utils/clamp';\n\nconst PLACEHOLDER_CLASS_NAME = 'step-placeholder';\n\n/*\n * This hook is used to create components which can 'participate' in a presentation.\n * When a component uses this hook, it passes numSteps, which \"reserves\" that many steps within the slide progression.\n * Returns the stepId, whether or not the step is active, the relative step\n * number and the DOM placeholder.\n */\nexport function useSteps(\n  numSteps = 1,\n  {\n    id: userProvidedId,\n    priority,\n    stepIndex\n  }: { id?: string | number; priority?: number; stepIndex?: number } = {}\n) {\n  const id = useId();\n  const [stepId] = useState(userProvidedId || id);\n\n  const slideContext = useContext(SlideContext);\n  if (slideContext === null) {\n    throw new Error(\n      '`useSteps` must be called within a SlideContext.Provider. Did you' +\n        ' call `useSteps` in a component that was not placed inside a <Slide>?'\n    );\n  }\n\n  const { activeStepIndex, activationThresholds } = slideContext;\n\n  let relStep: number;\n\n  if (activationThresholds === null) {\n    // We won't have a set of activation thresholds during the very first render\n    // pass for a <Slide> element, so we make sure the stepper isn't activated\n    // at all.\n    relStep = 0;\n  } else {\n    // Otherwise, we just need to convert the 'absolute step' to a 'relative\n    // step' to provide to the hook consumer.\n    const threshold = activationThresholds[stepId];\n    relStep = activeStepIndex - threshold;\n    relStep = clamp(relStep, -1, numSteps - 1);\n  }\n\n  const isActive = relStep >= 0;\n\n  // Animated steppers are visible for a short period of time as they're\n  // disappearing, which could cause a \"flash of incorrect step\". To avoid this,\n  // we clamp to the \"first visible step\" if we're exiting.\n\n  // const visibleStep = (isActive ? relStep : 1);\n\n  // Helpful hints for the developer.\n  const placeholderRef = useRef<HTMLDivElement>(null);\n  useEffect(() => {\n    if (!placeholderRef.current) {\n      console.warn(\n        `A placeholder ref does not appear to be present in the DOM for stepper element with id '${stepId}'. (Did you forget to render it?)`\n      );\n    }\n  });\n\n  const placeholderProps: any = {\n    ref: placeholderRef,\n    className: PLACEHOLDER_CLASS_NAME,\n    style: { display: 'none' },\n    'data-step-id': stepId,\n    'data-step-count': numSteps\n  };\n\n  if (priority !== undefined) {\n    placeholderProps['data-priority'] = priority;\n  } else if (stepIndex !== undefined) {\n    console.warn(\n      '`options.stepIndex` option to `useSteps` is deprecated- please use `priority` option instead.'\n    );\n    placeholderProps['data-priority'] = stepIndex;\n  }\n\n  return {\n    stepId,\n    isActive,\n    step: relStep,\n    placeholder: <div {...placeholderProps}></div>\n  };\n}\n\ntype StepId = string;\nexport type ActivationThresholds = Record<StepId, number>;\n\n// Similar to <Deck>, this is where we go looking for \"step placeholder\"\n// elements. The main difference here is that slide placeholders are 1:1 with\n// slides, whereas step placeholders may represent multiple steps. So, the\n// keys of 'activationThresholds' represent the IDs of stepper elements, and\n// the values represent the _first step at which they should appear_.\nexport function useCollectSteps() {\n  const [stepContainer, setStepContainer] = useState<HTMLElement | null>();\n  const [activationThresholds, setActivationThresholds] =\n    useState<ActivationThresholds>({});\n  const [finalStepIndex, setFinalStepIndex] = useState<number>(0);\n\n  useEffect(() => {\n    if (!stepContainer) return;\n    const placeholderNodes = stepContainer.getElementsByClassName(\n      PLACEHOLDER_CLASS_NAME\n    ) as unknown as Iterable<HTMLElement>;\n\n    const [thresholds, numSteps] = [...placeholderNodes]\n      .map((node, index) => {\n        const dataset = node.dataset;\n\n        const id = dataset.stepId as StepId;\n        let stepCount = Number(dataset.stepCount);\n        if (isNaN(stepCount)) {\n          stepCount = 1;\n        }\n        let priority = Number(dataset.priority);\n        if (isNaN(priority)) {\n          priority = index;\n        }\n\n        return {\n          id,\n          count: stepCount,\n          priority\n        };\n      })\n      .concat()\n      .sort(sortByKeyComparator('priority'))\n      .reduce(\n        (memo, el) => {\n          const [thresholds, nextThreshold] = memo;\n          const { id, count } = el;\n          thresholds[id] = nextThreshold;\n          return [thresholds, nextThreshold + count];\n        },\n        [{}, 1] as [ActivationThresholds, number]\n      );\n\n    setActivationThresholds(thresholds);\n    setFinalStepIndex(numSteps - 1);\n  }, [stepContainer]);\n\n  return {\n    setStepContainer,\n    activationThresholds,\n    finalStepIndex\n  };\n}\n","export default function sortByKeyComparator<T>(key: keyof T) {\n  return (lhs: T, rhs: T) => {\n    if (lhs[key] < rhs[key]) {\n      return -1;\n    } else if (lhs[key] > rhs[key]) {\n      return 1;\n    }\n    return 0;\n  };\n}\n","import { useCallback, useRef } from 'react';\nimport { parse as parseQS, stringify as stringifyQS } from 'query-string';\nimport {\n  SPECTACLE_MODES,\n  SpectacleMode,\n  ToggleModeParams,\n  ModeSearchParams\n} from '../utils/constants';\n\nconst useModes = (): ModeActions => {\n  const qs =\n    (typeof window !== 'undefined' ? window : {})?.location?.search || '';\n  const mode = useRef(\n    modeKeyForSearchParam(\n      parseQS(qs, {\n        parseBooleans: true\n      })\n    )\n  );\n\n  const toggleMode = useCallback(\n    (args: ToggleModeParams) => {\n      const { newMode, senderSlideIndex, e } = args;\n      e?.preventDefault();\n\n      let stepIndex: string | number = 0;\n      let slideIndex: string | number = senderSlideIndex || '';\n      const searchParams = parseQS(window.location.search, {\n        parseBooleans: true\n      });\n\n      if (!slideIndex) {\n        slideIndex = searchParams.slideIndex as string;\n        stepIndex = searchParams.stepIndex as string;\n      }\n\n      if (mode.current === newMode) {\n        window.location.search = stringifyQS({\n          slideIndex,\n          stepIndex\n        });\n        return;\n      }\n\n      mode.current = newMode;\n\n      window.location.search = stringifyQS({\n        slideIndex,\n        stepIndex,\n        ...modeSearchParamForKey(newMode)\n      });\n    },\n    [mode]\n  );\n\n  const getCurrentMode = useCallback((): SpectacleMode => mode.current, []);\n\n  return { toggleMode, getCurrentMode };\n};\n\nfunction modeSearchParamForKey(key: SpectacleMode): ModeSearchParams {\n  if (key === SPECTACLE_MODES.PRESENTER_MODE) {\n    return { presenterMode: true };\n  } else if (key === SPECTACLE_MODES.OVERVIEW_MODE) {\n    return { overviewMode: true };\n  } else if (key === SPECTACLE_MODES.PRINT_MODE) {\n    return { printMode: true };\n  } else if (key === SPECTACLE_MODES.EXPORT_MODE) {\n    return { exportMode: true };\n  }\n  return {};\n}\n\nfunction modeKeyForSearchParam({\n  presenterMode,\n  overviewMode,\n  printMode,\n  exportMode\n}: ModeSearchParams) {\n  if (presenterMode) {\n    return SPECTACLE_MODES.PRESENTER_MODE;\n  } else if (overviewMode) {\n    return SPECTACLE_MODES.OVERVIEW_MODE;\n  } else if (printMode) {\n    return SPECTACLE_MODES.PRINT_MODE;\n  } else if (exportMode) {\n    return SPECTACLE_MODES.EXPORT_MODE;\n  }\n  return SPECTACLE_MODES.DEFAULT_MODE;\n}\n\nexport type ModeActions = {\n  toggleMode: (args: ToggleModeParams) => void;\n  getCurrentMode: () => SpectacleMode;\n};\n\nexport default useModes;\n","import { ReactNode } from 'react';\nimport { KBarProvider } from 'kbar';\nimport useCommandBarActions from './command-bar-actions';\nimport CommandBarSearch from './search';\n\nconst CommandBar = ({ children }: CommandBarProps): JSX.Element => {\n  const actions = useCommandBarActions();\n  return (\n    <KBarProvider actions={actions}>\n      <CommandBarSearch />\n      {children}\n    </KBarProvider>\n  );\n};\n\nexport type CommandBarProps = {\n  children: ReactNode;\n};\n\nexport default CommandBar;\n","import {\n  KEYBOARD_SHORTCUTS_IDS,\n  SpectacleMode,\n  SPECTACLE_MODES\n} from '../../utils/constants';\nimport useModes from '../../hooks/use-modes';\n\n/**\n * Kbar default actions, those that do not depend on dynamic logic, can be added here.\n * To register actions dynamically use 'useRegisterActions' and make sure the action\n * is registed within the KBarProvider.\n * @see https://kbar.vercel.app/docs/concepts/actions\n * Kbar action shortcuts dont seem to support all keybindings. If you need to utilize\n * keybindings that are not supported you'll have to implement the keybinding seperately.\n * @see useMousetrap\n * To display keybindings that are not supported in the Kbar results, please use\n * KEYBOARD_SHORTCUTS instead of Kbar actions 'shortcut' property.\n * @see CommandBarResults getShortcutKeys\n */\n\nconst spectacleModeDisplay = {\n  [SPECTACLE_MODES.DEFAULT_MODE]: 'Default Mode',\n  [SPECTACLE_MODES.PRESENTER_MODE]: 'Presenter Mode',\n  [SPECTACLE_MODES.OVERVIEW_MODE]: 'Overview Mode',\n  [SPECTACLE_MODES.PRINT_MODE]: 'Print Mode',\n  [SPECTACLE_MODES.EXPORT_MODE]: 'Export Mode'\n};\n\nconst getName = (currentMode: string, mode: SpectacleMode) => {\n  const defaultMode = SPECTACLE_MODES.DEFAULT_MODE;\n  return currentMode === mode\n    ? `← Back to ${spectacleModeDisplay[defaultMode]}`\n    : spectacleModeDisplay[mode];\n};\n\nconst useCommandBarActions = () => {\n  const { toggleMode, getCurrentMode } = useModes();\n  const currentMode = getCurrentMode();\n  return [\n    {\n      id: KEYBOARD_SHORTCUTS_IDS.PRESENTER_MODE,\n      name: getName(currentMode, SPECTACLE_MODES.PRESENTER_MODE),\n      keywords: 'presenter',\n      perform: () => toggleMode({ newMode: SPECTACLE_MODES.PRESENTER_MODE }),\n      section: 'Mode'\n    },\n    {\n      id: KEYBOARD_SHORTCUTS_IDS.OVERVIEW_MODE,\n      name: getName(currentMode, SPECTACLE_MODES.OVERVIEW_MODE),\n      keywords: 'overview',\n      perform: () => toggleMode({ newMode: SPECTACLE_MODES.OVERVIEW_MODE }),\n      section: 'Mode'\n    },\n    {\n      id: KEYBOARD_SHORTCUTS_IDS.PRINT_MODE,\n      name: getName(currentMode, SPECTACLE_MODES.PRINT_MODE),\n      keywords: 'export',\n      perform: () => toggleMode({ newMode: SPECTACLE_MODES.PRINT_MODE }),\n      section: 'Mode'\n    },\n    {\n      id: KEYBOARD_SHORTCUTS_IDS.EXPORT_MODE,\n      name: getName(currentMode, SPECTACLE_MODES.EXPORT_MODE),\n      keywords: 'export',\n      perform: () => toggleMode({ newMode: SPECTACLE_MODES.EXPORT_MODE }),\n      section: 'Mode'\n    }\n  ];\n};\n\nexport default useCommandBarActions;\n","import styled from 'styled-components';\nimport { KBarPortal, KBarPositioner, KBarAnimator, KBarSearch } from 'kbar';\nimport CommandBarResults from '../results';\n\nconst KBarSearchStyled = styled(KBarSearch)`\n  padding: 12px 16px;\n  font-size: 16px;\n  width: 100%;\n  box-sizing: border-box;\n  outline: none;\n  border: none;\n`;\n\nconst KBarAnimatorStyled = styled(KBarAnimator)`\n  max-width: 600px;\n  width: 100%;\n  background: white;\n  border-radius: 8px;\n  overflow: hidden;\n  box-shadow: rgb(0 0 0 / 50%) 0px 16px 70px;\n`;\n\nconst CommandBarSearch = () => {\n  return (\n    <KBarPortal>\n      <KBarPositioner>\n        <KBarAnimatorStyled>\n          <KBarSearchStyled />\n          <CommandBarResults />\n        </KBarAnimatorStyled>\n      </KBarPositioner>\n    </KBarPortal>\n  );\n};\n\nexport default CommandBarSearch;\n","import styled from 'styled-components';\nimport { ActionImpl, KBarResults, useMatches } from 'kbar';\nimport { prettifyShortcut } from '../../../utils/platform-keys';\nimport {\n  KeyboardShortcutTypes,\n  KEYBOARD_SHORTCUTS,\n  SYSTEM_FONT\n} from '../../../utils/constants';\nimport { Text } from '../../typography';\n\ntype RenderParams = {\n  item: ActionImpl | string;\n  active: boolean;\n};\n\nfunction getShortcutKeys({ id, shortcut = [] }: ActionImpl): string[] {\n  if (id in KEYBOARD_SHORTCUTS && !shortcut?.length) {\n    const _id = id as KeyboardShortcutTypes;\n    return prettifyShortcut(KEYBOARD_SHORTCUTS[_id]);\n  }\n  return prettifyShortcut(shortcut);\n}\n\nconst ResultCommand = styled.div<Partial<RenderParams>>`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  background-color: ${(p) => (p.active ? 'lightsteelblue' : 'transparent')};\n  padding: 0.5rem 1rem;\n  cursor: pointer;\n  height: 30px;\n`;\n\nconst ResultSectionHeader = styled(Text)`\n  background-color: white;\n  color: gray;\n  margin: 0 2rem;\n  padding: 0.5rem 0;\n  font-size: small;\n  font-weight: bold;\n  font-family: ${SYSTEM_FONT};\n`;\n\nconst ResultShortcut = styled.span`\n  display: flex;\n  gap: 5px;\n`;\n\nconst ResultShortcutKey = styled.kbd`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  background-color: #eee;\n  border-radius: 5px;\n  border: 1px solid #b4b4b4;\n  padding: 5px 10px;\n  min-width: 20px;\n  height: 25px;\n  white-space: nowrap;\n  font-family: ${SYSTEM_FONT};\n`;\n\nfunction onRender({ item, active }: RenderParams) {\n  if (typeof item === 'string') {\n    return <ResultSectionHeader>{item}</ResultSectionHeader>;\n  } else {\n    return (\n      <ResultCommand active={active}>\n        <Text fontFamily={SYSTEM_FONT}>{item.name}</Text>\n        <ResultShortcut>\n          {getShortcutKeys(item).map(\n            (key) =>\n              key && (\n                <ResultShortcutKey key={`${item.id}-${key}`}>\n                  {key}\n                </ResultShortcutKey>\n              )\n          )}\n        </ResultShortcut>\n      </ResultCommand>\n    );\n  }\n}\n\nconst CommandBarResults = () => {\n  const { results } = useMatches();\n  return <KBarResults items={results} onRender={onRender} />;\n};\n\nexport default CommandBarResults;\n","/*\n * Check if operating system is MacOS\n */\nexport function isPlatformMacOS() {\n  return /Mac|iPad/.test(navigator.userAgent);\n}\n\n/*\n * Get operating system specific key\n */\nexport function getKeyForOS(key: KeyType) {\n  const isMacOS = isPlatformMacOS();\n\n  const replacementKeyMap = {\n    alt: isMacOS ? '⌥' : 'Alt',\n    ctrl: isMacOS ? '^' : 'Ctrl',\n    mod: isMacOS ? '⌘' : 'Ctrl',\n    shift: isMacOS ? '⇧' : 'Shift'\n  };\n\n  return replacementKeyMap[key];\n}\n\n/**\n * Prettifies keyboard shortcuts in a platform-agnostic way.\n */\nexport function prettifyShortcut(shortcut: string[] | string): string[] {\n  const _shortcut =\n    typeof shortcut === 'string' ? shortcut : shortcut.join('+');\n  return _shortcut\n    .toLowerCase()\n    .replace('alt', getKeyForOS('alt'))\n    .replace('ctrl', getKeyForOS('ctrl'))\n    .replace('mod', getKeyForOS('mod'))\n    .replace('shift', getKeyForOS('shift'))\n    .replace('left', '←')\n    .replace('right', '→')\n    .split('+')\n    .map((s) => s.charAt(0).toUpperCase() + s.slice(1));\n}\n\nexport type KeyType = 'alt' | 'ctrl' | 'mod' | 'shift';\n","import { ReactNode, useContext } from 'react';\nimport { animated, useSpring } from 'react-spring';\nimport { useSteps } from '../hooks/use-steps';\nimport { SlideContext } from './slide/slide';\nimport { DeckContext } from './deck/deck';\n\nconst SteppedComponent = (props: SteppedComponentProps): JSX.Element => {\n  const {\n    id,\n    className,\n    children: childrenOrRenderFunction,\n    tagName = 'div',\n    priority,\n    stepIndex,\n    numSteps = 1,\n    alwaysAppearActive = false,\n    activeStyle = { opacity: '1' },\n    inactiveStyle = { opacity: '0' }\n  } = props;\n  const slideContext = useContext(SlideContext);\n  const { inPrintMode, inOverviewMode } = useContext(DeckContext);\n\n  if (slideContext === null) {\n    throw new Error(\n      'This component must be used within a SlideContext.Provider. Did you' +\n        ' put an <Appear> or <Stepper> component outside of a <Slide>?'\n    );\n  }\n\n  const { immediate } = slideContext;\n\n  const { isActive, step, placeholder } = useSteps(numSteps, {\n    id,\n    priority,\n    stepIndex\n  });\n\n  const AnimatedEl = animated[tagName];\n\n  let children: ReactNode;\n  if (typeof childrenOrRenderFunction === 'function') {\n    children = childrenOrRenderFunction(step, isActive);\n  } else {\n    children = childrenOrRenderFunction;\n  }\n\n  const springStyle = useSpring({\n    to: (isActive ? activeStyle : inactiveStyle) as React.CSSProperties,\n    immediate\n  });\n\n  return (\n    <>\n      {placeholder}\n      <AnimatedEl\n        style={\n          alwaysAppearActive || inPrintMode || inOverviewMode\n            ? (activeStyle as React.CSSProperties)\n            : springStyle\n        }\n        className={className}\n        data-testid=\"AppearElement\"\n      >\n        {children}\n      </AnimatedEl>\n    </>\n  );\n};\n\ntype SteppedComponentProps = {\n  id?: string | number;\n  priority?: number;\n  /** @deprecated use priority prop instead */\n  stepIndex?: number;\n  children: ReactNode | ((step: number, isActive: boolean) => ReactNode);\n  className?: string;\n  tagName?: keyof JSX.IntrinsicElements;\n  // TODO v10: change this type to React.CSSProperties\n  activeStyle?: Partial<CSSStyleDeclaration>;\n  // TODO v10: change this type to React.CSSProperties\n  inactiveStyle?: Partial<CSSStyleDeclaration>;\n  numSteps?: number;\n  alwaysAppearActive?: boolean;\n};\n\ntype AppearProps = Omit<\n  SteppedComponentProps,\n  'numSteps' | 'alwaysAppearActive'\n>;\nexport const Appear = (props: AppearProps): JSX.Element => {\n  const { children, ...restProps } = props;\n  return (\n    <SteppedComponent {...restProps} numSteps={1}>\n      {children}\n    </SteppedComponent>\n  );\n};\n\nexport const Stepper = (props: StepperProps): JSX.Element => {\n  const {\n    values,\n    render: renderFn,\n    children: renderChildrenFn,\n    alwaysVisible = false,\n    ...restProps\n  } = props;\n  if (renderFn !== undefined && renderChildrenFn !== undefined) {\n    throw new Error(\n      '<Stepper> component specified both `render` prop and a render function as its `children`.'\n    );\n  }\n\n  return (\n    <SteppedComponent\n      {...restProps}\n      numSteps={values.length}\n      alwaysAppearActive={alwaysVisible}\n    >\n      {(step, isActive) =>\n        (renderFn || renderChildrenFn!)(values[step], step, isActive)\n      }\n    </SteppedComponent>\n  );\n};\n\ntype StepperProps<T extends unknown[] = unknown[]> = {\n  id?: string | number;\n  priority?: number;\n  /** @deprecated use priority prop instead */\n  stepIndex?: number;\n  render?: (value: T[number], step: number, isActive: boolean) => ReactNode;\n  children?: (value: T[number], step: number, isActive: boolean) => ReactNode;\n  className?: string;\n  tagName?: keyof JSX.IntrinsicElements;\n  values: T;\n  alwaysVisible?: boolean;\n  // TODO v10: change this type to React.CSSProperties\n  activeStyle?: Partial<CSSStyleDeclaration>;\n  // TODO v10: change this type to React.CSSProperties\n  inactiveStyle?: Partial<CSSStyleDeclaration>;\n};\n","import {\n  forwardRef,\n  useMemo,\n  useContext,\n  useRef,\n  useCallback,\n  useEffect,\n  CSSProperties\n} from 'react';\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport { useSteps } from '../hooks/use-steps';\nimport indentNormalizer from '../utils/indent-normalizer';\nimport styled, { ThemeContext } from 'styled-components';\nimport { compose, layout, position } from 'styled-system';\n/**\n * We export all the themes from the index file and the VSCode Dark Theme.\n * The default VSCode dark theme is not part of the index file, so we need\n * to import it separately and re-export with the rest of the themes.\n *\n * **Note**: For ESM + one-page we swap out for `dist/esm/**` files instead.\n */\n// @ts-ignore\nimport vsDark from 'react-syntax-highlighter/dist/cjs/styles/prism/vs-dark.js';\n// @ts-ignore\nimport * as allThemes from 'react-syntax-highlighter/dist/cjs/styles/prism/index.js';\n\n// Allow for rewriting of RSH `/cjs/` to `/esm/` by flexibly falling back to object\n// if `.default` isn't available.\nconst vsDarkTheme = vsDark.default || vsDark;\n\nexport const codePaneThemes = { vsDark: vsDarkTheme, ...allThemes };\n\ntype Ranges = Array<number | number[]>;\n\nconst checkForNumberValues = (ranges: Ranges) => {\n  return ranges.every((element) => typeof element === 'number');\n};\n\nconst checkForInvalidValues = (ranges: Ranges) => {\n  return ranges.every((element) => element === null || element === undefined);\n};\n\nconst getRangeFormat = (\n  numberOfSteps: number,\n  highlightRanges: Ranges,\n  step: number\n): Ranges => {\n  // If the value passed to highlightRanges is:\n  // a single array containing only two numbers e.g. [3, 5]\n  if (numberOfSteps === 1) {\n    return highlightRanges;\n  }\n\n  // a 2D array containing null/undefined values e.g. [1, null, 5, [7, 9]]\n  if (highlightRanges[step] === null || highlightRanges[step] === undefined) {\n    return [];\n  }\n\n  // a 2D array and some of its elements contain numbers e.g. [[1, 3], 5, 7, 9, [10, 15]]\n  if (typeof highlightRanges[step] === 'number') {\n    return [highlightRanges[step]];\n  }\n\n  // a 2D array e.g. [[1], [3], [5, 9], [15], [20, 25], [30]]\n  return highlightRanges[step] as Ranges;\n};\n\nconst getStyleForLineNumber = (lineNumber: number, activeRange: Ranges) => {\n  const isOneLineNumber = activeRange.length === 1;\n  if (isOneLineNumber) {\n    const [activeLineNumber] = activeRange;\n    if (activeLineNumber === lineNumber) {\n      return { opacity: 1 };\n    } else {\n      return { opacity: 0.5 };\n    }\n  }\n\n  const [from, to] = activeRange;\n  return { opacity: from <= lineNumber && lineNumber <= to ? 1 : 0.5 };\n};\n\nconst Container = styled('div')(compose(position, layout));\n\nconst CodePane = forwardRef<HTMLDivElement, CodePaneProps>(\n  (\n    {\n      highlightRanges = [],\n      language,\n      showLineNumbers = true,\n      children: rawCodeString,\n      stepIndex,\n      theme: syntaxTheme = codePaneThemes.vsDark,\n      ...props\n    },\n    ref\n  ) => {\n    const numberOfSteps = useMemo(() => {\n      if (\n        highlightRanges.length === 0 ||\n        // Prevents e.g. [null, null] to be used to count the number of steps\n        checkForInvalidValues(highlightRanges)\n      ) {\n        return 0;\n      }\n\n      // Checks if the value passed to highlightRanges is a single array containing only two numbers e.g. [3, 5]\n      const isSingleRange =\n        highlightRanges.length <= 2 &&\n        // Prevents e.g. [3, [5]] from being considered a single array range\n        checkForNumberValues(highlightRanges);\n\n      if (isSingleRange) {\n        return 1;\n      }\n\n      return highlightRanges.length;\n    }, [highlightRanges]);\n\n    const theme = useContext(ThemeContext);\n    const { isActive, step, placeholder } = useSteps(numberOfSteps, {\n      stepIndex\n    });\n\n    const children = useMemo(() => {\n      return indentNormalizer(rawCodeString);\n    }, [rawCodeString]);\n\n    const scrollTarget = useRef<HTMLElement>(null);\n\n    const getLineNumberStyle = useCallback(\n      (lineNumber: number) => {\n        if (!isActive) return {};\n        const range = getRangeFormat(numberOfSteps, highlightRanges, step);\n        return getStyleForLineNumber(lineNumber, range);\n      },\n      [isActive, highlightRanges, numberOfSteps, step]\n    );\n\n    const getLineProps = useCallback(\n      (lineNumber: number) => {\n        if (!isActive) return {};\n        const range = getRangeFormat(numberOfSteps, highlightRanges, step);\n        return {\n          ref: lineNumber === (range as number[])[0] ? scrollTarget : null,\n          style: getStyleForLineNumber(lineNumber, range)\n        };\n      },\n      [isActive, highlightRanges, numberOfSteps, step]\n    );\n\n    useEffect(() => {\n      window.requestAnimationFrame(() => {\n        if (!scrollTarget.current) return;\n        scrollTarget.current.scrollIntoView({\n          block: 'center',\n          behavior: 'smooth'\n        });\n      });\n    }, [isActive, step]);\n\n    const customStyle = useMemo(() => {\n      /**\n       * Provide fallback values if the user intentionally overrides the\n       * default theme with no valid values.\n       */\n      const {\n        space = [0, 0, 0],\n        fontSizes: { monospace = '20px' }\n      } = theme;\n\n      return {\n        padding: space[0],\n        margin: 0,\n        fontSize: monospace\n      };\n    }, [theme]);\n\n    return (\n      <>\n        {placeholder}\n        <Container ref={ref} {...props}>\n          <SyntaxHighlighter\n            customStyle={customStyle}\n            language={language}\n            wrapLines\n            showLineNumbers={showLineNumbers}\n            lineProps={getLineProps}\n            lineNumberStyle={getLineNumberStyle}\n            style={syntaxTheme}\n          >\n            {children}\n          </SyntaxHighlighter>\n        </Container>\n      </>\n    );\n  }\n);\nCodePane.displayName = 'CodePane';\n\nexport type CodePaneProps = {\n  children: string;\n  language: string | undefined;\n  theme?: Record<string, CSSProperties>;\n  stepIndex?: number;\n  highlightRanges?: Ranges;\n  showLineNumbers?: boolean;\n};\n\nexport default CodePane;\n","// Indent to smallest non-empty whitespace level and trim start / end of string.\nconst indentNormalizer = (val: string) => {\n  let prefix: string | null = null;\n  return (val || '')\n    .split('\\n')\n    .filter((line) => {\n      const [cur, remainder] = (line.match(/^([ ]*)([^ ]+)/) || []).slice(1);\n      return remainder\n        ? ((prefix =\n            null === prefix || cur.length < prefix.length ? cur : prefix),\n          !0)\n        : null !== prefix;\n    })\n    .map((line) => (prefix ? line.replace(prefix, '') : line))\n    .join('\\n')\n    .trimRight();\n};\nexport default indentNormalizer;\n","import styled from 'styled-components';\nimport {\n  color,\n  typography,\n  space,\n  compose,\n  border,\n  layout,\n  ColorProps,\n  TypographyProps,\n  SpaceProps,\n  BorderProps,\n  LayoutProps\n} from 'styled-system';\n\nexport type TableProps = ColorProps &\n  TypographyProps &\n  SpaceProps &\n  BorderProps &\n  LayoutProps;\n\nconst Table = styled.table.attrs<TableProps>((props) => ({\n  color: 'primary',\n  fontFamily: 'text',\n  fontSize: 'text',\n  textAlign: 'left',\n  margin: 'listMargin',\n  width: 1,\n  ...props\n}))<TableProps>(compose(color, typography, space, border, layout));\n\nconst TableHeader = styled.thead.attrs<TableProps>((props) => ({\n  color: 'primary',\n  fontFamily: 'text',\n  fontSize: 'text',\n  fontWeight: 'bold',\n  textAlign: 'left',\n  margin: 'listMargin',\n  ...props\n}))<TableProps>(compose(color, typography, space, border, layout));\n\nconst TableBody = styled.tbody.attrs<TableProps>((props) => ({\n  color: 'primary',\n  fontFamily: 'text',\n  fontSize: 'text',\n  textAlign: 'left',\n  margin: 'listMargin',\n  width: 1,\n  ...props\n}))<TableProps>(compose(color, typography, space, border, layout));\n\nconst TableRow = styled.tr.attrs<TableProps>((props) => ({\n  color: 'primary',\n  fontFamily: 'text',\n  fontSize: 'text',\n  textAlign: 'left',\n  margin: 'listMargin',\n  ...props\n}))<TableProps>(compose(color, typography, space, border, layout));\n\nconst TableCell = styled.td.attrs<TableProps>((props) => ({\n  color: 'primary',\n  fontFamily: 'text',\n  fontSize: 'text',\n  textAlign: 'left',\n  margin: 'listMargin',\n  ...props\n}))<TableProps>(compose(color, typography, space, border, layout));\n\nexport { Table, TableCell, TableRow, TableHeader, TableBody };\n","import { FC } from 'react';\nimport styled from 'styled-components';\nimport { compose, layout, position } from 'styled-system';\nimport * as SS from 'styled-system';\n\ntype ImageType = FC<\n  SS.LayoutProps & SS.PositionProps & Partial<HTMLImageElement>\n>;\n\nconst Image = styled.img(compose(layout, position)) as ImageType;\nconst FullSizeImage = styled(Image).attrs<SS.LayoutProps>((props) => ({\n  maxWidth: '100%',\n  maxHeight: '100%',\n  ...props\n})) as unknown as ImageType;\n\nexport { Image, FullSizeImage };\n","import ReactDOM from 'react-dom';\nimport { DeckContext } from './deck/deck';\nimport { SlideContext } from './slide/slide';\nimport { PropsWithChildren, useContext } from 'react';\n\nconst Notes = ({ children }: PropsWithChildren<{}>): JSX.Element | null => {\n  const { notePortalNode } = useContext(DeckContext);\n  const { isSlideActive } = useContext(SlideContext);\n\n  if (!isSlideActive) return null;\n  if (!notePortalNode) return null;\n\n  return ReactDOM.createPortal(<div>{children}</div>, notePortalNode);\n};\n\nexport default Notes;\n","import { forwardRef, useContext } from 'react';\nimport styled from 'styled-components';\nimport { DeckContext } from './deck/deck';\nimport { position, PositionProps } from 'styled-system';\n\nconst DEFAULT_PROGRESS_CIRCLE_SIZE = 10;\nexport const PROGRESS_CIRCLE_BORDER_WIDTH = 1;\nconst PROGRESS_CIRCLE_MARGIN = DEFAULT_PROGRESS_CIRCLE_SIZE / 3;\nexport const DEFAULT_PROGRESS_CIRCLE_WIDTH_INCLUDING_MARGIN =\n  DEFAULT_PROGRESS_CIRCLE_SIZE +\n  (PROGRESS_CIRCLE_BORDER_WIDTH + PROGRESS_CIRCLE_MARGIN) * 2;\n\nexport type CircleProps = {\n  size: number;\n  margin: number;\n  color: string;\n  active: boolean;\n};\nexport const Circle = styled.div<CircleProps>`\n  width: ${({ size }) => size}px;\n  height: ${({ size }) => size}px;\n  border: ${PROGRESS_CIRCLE_BORDER_WIDTH}px solid ${({ color }) => color};\n  background: ${({ color, active }) => (active ? color : 'transparent')};\n  margin: ${({ margin }) => margin}px;\n  border-radius: 50%;\n  pointer-events: all;\n  cursor: pointer;\n`;\n\nexport const ProgressContainer = styled.div<PositionProps>`\n  ${position}\n  display: flex;\n  flex-wrap: wrap;\n  @media print {\n    display: none;\n  }\n`;\n\nexport type ProgressProps = {\n  color?: string;\n  size?: number;\n};\n\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>(\n  ({ color = '#fff', size = DEFAULT_PROGRESS_CIRCLE_SIZE, ...props }, ref) => {\n    const { slideCount, skipTo, activeView } = useContext(DeckContext);\n    return (\n      <ProgressContainer\n        ref={ref}\n        className=\"spectacle-progress-indicator\"\n        {...props}\n      >\n        {Array(slideCount)\n          .fill(0)\n          .map((_, idx) => (\n            <Circle\n              key={`progress-circle-${idx}`}\n              color={color}\n              active={activeView.slideIndex === idx}\n              size={size}\n              margin={PROGRESS_CIRCLE_MARGIN}\n              onClick={() =>\n                skipTo({\n                  slideIndex: idx,\n                  stepIndex: 0\n                })\n              }\n              data-testid=\"Progress Circle\"\n            />\n          ))}\n      </ProgressContainer>\n    );\n  }\n);\n\nProgress.displayName = 'Progress';\n\nexport default Progress;\n","import {\n  forwardRef,\n  useContext,\n  useEffect,\n  useState,\n  useCallback\n} from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { DeckContext } from './deck/deck';\nimport {\n  ProgressContainer,\n  Circle,\n  PROGRESS_CIRCLE_BORDER_WIDTH,\n  DEFAULT_PROGRESS_CIRCLE_WIDTH_INCLUDING_MARGIN\n} from './progress';\n\ninterface PacmanBaseProps {\n  pacmanSize: number;\n  top: number;\n  left: number;\n}\nexport const PacmanBase = styled.div<PacmanBaseProps>`\n  position: absolute;\n  top: ${({ top }) => top}px;\n  left: ${({ left }) => left}px;\n  height: ${({ pacmanSize }) => pacmanSize}px;\n  width: ${({ pacmanSize }) => pacmanSize}px;\n  transition: left 0.3s ease-in-out 0.2s;\n  transform: translate(-50%, -50%);\n  border-radius: 9999px;\n  overflow: hidden;\n`;\n\nconst pacmanTopFrames = keyframes`\n  0% { transform: rotateZ(0deg) }\n  100% { transform: rotateZ(-30deg) }\n`;\nconst pacmanBottomFrames = keyframes`\n  0% { transform: rotateZ(0deg) }\n  100% { transform: rotateZ(30deg) }\n`;\n// NOTE: rotateZ is 0.1 to generate two different animation names (styled components deduplication)\nconst pacmanTopFramesAlternate = keyframes`\n  0% { transform: rotateZ(0.1deg) }\n  100% { transform: rotateZ(-30deg) }\n`;\n// NOTE: rotateZ is 0.1 to generate two different animation names (styled components deduplication)\nconst pacmanBottomFramesAlternate = keyframes`\n  0% { transform: rotateZ(0.1deg) }\n  100% { transform: rotateZ(30deg) }\n`;\ninterface PacmanBodyProps {\n  color: string;\n  pacmanSize: number;\n  alternate: boolean;\n}\nconst PacmanBodyTop = styled.div<PacmanBodyProps>`\n  position: absolute;\n  top: 0;\n  height: ${({ pacmanSize }) => pacmanSize / 2}px;\n  width: ${({ pacmanSize }) => pacmanSize}px;\n  background: ${({ color }) => color};\n  border-top-left-radius: ${({ pacmanSize }) => pacmanSize / 2}px;\n  border-top-right-radius: ${({ pacmanSize }) => pacmanSize / 2}px;\n  // NOTE: So the top and bottom always overlap when sizes are in decimals.\n  box-shadow: 0 0 0 0.5px ${({ color }) => color};\n  animation-name: ${({ alternate }) =>\n    alternate ? pacmanTopFrames : pacmanTopFramesAlternate};\n  animation-duration: 0.12s;\n  animation-timing-function: linear;\n  animation-iteration-count: 10;\n  animation-direction: alternate;\n  animation-fill-mode: both;\n`;\nconst PacmanBodyBottom = styled(PacmanBodyTop)`\n  top: 50%;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-left-radius: ${({ pacmanSize }) => pacmanSize / 2}px;\n  border-bottom-right-radius: ${({ pacmanSize }) => pacmanSize / 2}px;\n  animation-name: ${({ alternate }) =>\n    alternate ? pacmanBottomFrames : pacmanBottomFramesAlternate};\n`;\n\nconst DEFAULT_ANIMATED_PROGRESS_CIRCLE_SIZE = 7.5;\n\nexport type AnimatedProgressProps = {\n  color?: string;\n  size?: number;\n  pacmanColor?: string;\n};\n\nconst AnimatedProgress = forwardRef<HTMLDivElement, AnimatedProgressProps>(\n  (\n    {\n      color: circleColor = '#fff',\n      size: circleSize = DEFAULT_ANIMATED_PROGRESS_CIRCLE_SIZE,\n      ...props\n    },\n    ref\n  ) => {\n    const {\n      slideCount,\n      skipTo,\n      activeView: { slideIndex }\n    } = useContext(DeckContext);\n\n    const [pacmanOffsetLeft, setPacmanOffsetLeft] = useState<number | null>(\n      null\n    );\n    const [pacmanOffsetTop, setPacmanOffsetTop] = useState<number | null>(null);\n    const [alternateAnimation, setAlternateAnimation] = useState(false);\n\n    const [activeCircleNode, setActiveCircleNode] =\n      useState<HTMLDivElement | null>(null);\n    const activeCircleCallbackRef = useCallback(\n      (activeCircleNode: HTMLDivElement) => {\n        setActiveCircleNode(activeCircleNode);\n      },\n      []\n    );\n\n    useEffect(() => {\n      if (activeCircleNode?.offsetParent) {\n        const { offsetLeft, offsetTop } = activeCircleNode;\n        const halfOfCircleOccupiedSpace =\n          circleSize / 2 + PROGRESS_CIRCLE_BORDER_WIDTH;\n        setPacmanOffsetLeft(offsetLeft + halfOfCircleOccupiedSpace);\n        setPacmanOffsetTop(offsetTop + halfOfCircleOccupiedSpace);\n        setAlternateAnimation((alternateAnimation) => !alternateAnimation);\n      } else {\n        setPacmanOffsetLeft(null);\n        setPacmanOffsetTop(null);\n      }\n    }, [circleSize, activeCircleNode]);\n\n    const circleMargin =\n      (DEFAULT_PROGRESS_CIRCLE_WIDTH_INCLUDING_MARGIN -\n        DEFAULT_ANIMATED_PROGRESS_CIRCLE_SIZE -\n        PROGRESS_CIRCLE_BORDER_WIDTH * 2) /\n      2;\n    const pacmanColor = props.pacmanColor || circleColor;\n    const pacmanSize =\n      circleSize + PROGRESS_CIRCLE_BORDER_WIDTH + circleMargin * 2;\n\n    return (\n      <ProgressContainer ref={ref} position=\"relative\" {...props}>\n        {typeof pacmanOffsetTop === 'number' &&\n          typeof pacmanOffsetLeft === 'number' && (\n            <PacmanBase\n              pacmanSize={pacmanSize}\n              top={pacmanOffsetTop}\n              left={pacmanOffsetLeft}\n            >\n              <PacmanBodyTop\n                color={pacmanColor}\n                pacmanSize={pacmanSize}\n                alternate={alternateAnimation}\n              />\n              <PacmanBodyBottom\n                color={pacmanColor}\n                pacmanSize={pacmanSize}\n                alternate={alternateAnimation}\n              />\n            </PacmanBase>\n          )}\n        {Array(slideCount)\n          .fill(0)\n          .map((_, idx) => (\n            <Circle\n              key={idx}\n              ref={slideIndex === idx ? activeCircleCallbackRef : null}\n              color={circleColor}\n              active={false}\n              size={circleSize}\n              margin={circleMargin}\n              onClick={() =>\n                skipTo({\n                  slideIndex: idx,\n                  stepIndex: 0\n                })\n              }\n              data-testid=\"animated-progress-circle\"\n            />\n          ))}\n      </ProgressContainer>\n    );\n  }\n);\n\nAnimatedProgress.displayName = 'AnimatedProgress';\n\nexport default AnimatedProgress;\n","import { forwardRef, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { position } from 'styled-system';\n\nimport { useToggleFullScreen } from '../hooks/use-full-screen';\n\ntype FSProps = {\n  color?: string;\n  size?: number;\n};\n\nconst Container = styled('div')`\n  ${position}\n  @media print {\n    display: none;\n  }\n`;\n\nconst FullScreen = forwardRef<HTMLDivElement, FSProps>(\n  ({ size = 24, color = '#fff', ...props }, ref) => {\n    const toggleFullScreen = useToggleFullScreen();\n    const [isClient, setIsClient] = useState(false);\n\n    useEffect(() => {\n      setIsClient(true);\n    }, []);\n\n    if (!isClient) return null;\n\n    return (\n      <Container\n        ref={ref}\n        className=\"spectacle-fullscreen-button\"\n        onClick={toggleFullScreen}\n        style={{ pointerEvents: 'all' }}\n        {...props}\n      >\n        <svg width={size} height={size} viewBox=\"0 0 512 512\">\n          <path\n            fill={color}\n            d={\n              !!document.fullscreenElement || document.webkitIsFullScreen\n                ? 'M64 371.2h76.795V448H192V320H64v51.2zm76.795-230.4H64V192h128V64h-51.205v76.8zM320 448h51.2v-76.8H448V320H320v128zm51.2-307.2V64H320v128h128v-51.2h-76.8z'\n                : 'M396.795 396.8H320V448h128V320h-51.205zM396.8 115.205V192H448V64H320v51.205zM115.205 115.2H192V64H64v128h51.205zM115.2 396.795V320H64v128h128v-51.205z'\n            }\n          />\n        </svg>\n      </Container>\n    );\n  }\n);\n\nFullScreen.displayName = 'Fullscreen';\n\nexport default FullScreen;\n","import { useCallback } from 'react';\n\nexport const useToggleFullScreen = () =>\n  useCallback(() => {\n    if (typeof document === 'undefined') {\n      return;\n    }\n    // https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen\n    if ('requestFullscreen' in document.documentElement) {\n      // Chrome/FF\n      if (!document.fullscreenElement) {\n        document.documentElement.requestFullscreen();\n      } else {\n        document.exitFullscreen();\n      }\n    } else if ('webkitRequestFullScreen' in document.documentElement) {\n      // Safari still doesn't support standard.\n      if (!document.webkitIsFullScreen) {\n        document.documentElement!.webkitRequestFullScreen();\n      } else {\n        document.webkitCancelFullScreen();\n      }\n    }\n  }, []);\n","import * as React from 'react';\nimport styled from 'styled-components';\nimport Slide, { SlideProps } from './slide/slide';\nimport { Box, FlexBox, Grid } from './layout-primitives';\nimport CodePane, { CodePaneProps } from './code-pane';\nimport { ComponentProps, Fragment, ReactNode } from 'react';\nimport {\n  Heading,\n  Text,\n  ListItem,\n  OrderedList,\n  UnorderedList\n} from './typography';\nimport { Appear } from './appear';\n\n/**\n * Full-slide layout\n */\nconst Full = ({ children, ...rest }: SlideProps) => (\n  <Slide {...rest}>{children}</Slide>\n);\n\n/**\n * Centered layout\n */\nconst Center = ({ children, ...rest }: SlideProps) => (\n  <Slide {...rest}>\n    <FlexBox justifyContent=\"center\" alignItems=\"center\" height=\"100%\">\n      <Box>{children}</Box>\n    </FlexBox>\n  </Slide>\n);\n\n/**\n * Two-column layout\n */\nconst TwoColumn = ({\n  left,\n  right,\n  ...rest\n}: Omit<SlideProps, 'children'> & { left: ReactNode; right: ReactNode }) => (\n  <Slide {...rest}>\n    <FlexBox flexDirection=\"row\" alignItems=\"start\" flex={1}>\n      <Box width=\"100%\">{left}</Box>\n      <Box width=\"100%\">{right}</Box>\n    </FlexBox>\n  </Slide>\n);\n\n/**\n * Generic List utility\n */\nconst Ul = ({\n  items = [],\n  type = 'unordered',\n  animate = false,\n  listProps\n}: {\n  items: ReactNode[];\n  type?: 'unordered' | 'ordered';\n  animate?: boolean;\n  listProps?: React.ComponentPropsWithoutRef<\n    typeof UnorderedList & typeof OrderedList\n  >;\n}) => {\n  const List = type === 'unordered' ? UnorderedList : OrderedList;\n\n  return (\n    <List {...listProps}>\n      {items.map((item, i) => {\n        const Wrapper = animate ? Appear : Fragment;\n\n        return (\n          <Wrapper key={i}>\n            <ListItem key={i}>{item}</ListItem>\n          </Wrapper>\n        );\n      })}\n    </List>\n  );\n};\n\n/**\n * List layout with optional title\n */\nconst List = ({\n  title,\n  items,\n  listType = 'unordered',\n  animateListItems = false,\n  titleProps,\n  listProps,\n  ...rest\n}: Omit<SlideProps, 'children'> & {\n  title?: string;\n  listType?: 'unordered' | 'ordered';\n  items: ReactNode[];\n  animateListItems?: boolean;\n  titleProps?: ComponentProps<typeof Heading>;\n  listProps?: ComponentProps<typeof UnorderedList & typeof OrderedList>;\n}) => (\n  <Slide {...rest}>\n    {title ? (\n      <Heading textAlign=\"left\" {...titleProps}>\n        {title}\n      </Heading>\n    ) : null}\n    <Ul\n      items={items}\n      animate={animateListItems}\n      type={listType}\n      listProps={listProps}\n    />\n  </Slide>\n);\n\n/**\n * Generic vertically-centered Header layout\n */\nconst Header = ({\n  flexBoxProps,\n  headingProps,\n  children,\n  ...rest\n}: SlideProps & {\n  flexBoxProps?: ComponentProps<typeof FlexBox>;\n  headingProps?: ComponentProps<typeof Heading>;\n}) => (\n  <Slide {...rest}>\n    <FlexBox height=\"100%\" {...flexBoxProps}>\n      <Heading {...headingProps}>{children}</Heading>\n    </FlexBox>\n  </Slide>\n);\n\n/**\n * Section layout with left aligned text\n */\nconst Section = ({\n  sectionProps,\n  children\n}: SlideProps & {\n  sectionProps?: ComponentProps<typeof Heading>;\n}) => (\n  <Header\n    headingProps={sectionProps}\n    flexBoxProps={{ justifyContent: 'flex-start' }}\n  >\n    {children}\n  </Header>\n);\n\n/**\n * Statement layout with centered text\n */\nconst Statement = ({\n  statementProps,\n  children\n}: SlideProps & {\n  statementProps?: ComponentProps<typeof Heading>;\n}) => <Header headingProps={statementProps}>{children}</Header>;\n\n/**\n * Big Fact with optional fact information\n */\nconst BigFact = ({\n  children,\n  factInformation,\n  factProps,\n  factFontSize = '250px',\n  factInformationProps,\n  ...rest\n}: SlideProps & {\n  factInformation?: string | ReactNode;\n  factProps?: ComponentProps<typeof Text>;\n  factFontSize?: string;\n  factInformationProps?: ComponentProps<typeof Text>;\n}) => (\n  <Slide {...rest}>\n    <FlexBox>\n      <Box>\n        <Text textAlign=\"center\" fontSize={factFontSize} {...factProps}>\n          {children}\n        </Text>\n        {factInformation ? (\n          <Text textAlign=\"center\" {...factInformationProps}>\n            {factInformation}\n          </Text>\n        ) : null}\n      </Box>\n    </FlexBox>\n  </Slide>\n);\n\n/**\n * Quote layout\n */\nconst Quote = ({\n  children,\n  quoteProps,\n  attribution,\n  attributionProps,\n  ...rest\n}: SlideProps & {\n  quoteProps?: ComponentProps<typeof Text>;\n  attribution: string | ReactNode;\n  attributionProps?: ComponentProps<typeof Text>;\n}) => (\n  <Slide {...rest}>\n    <Box width=\"100%\" margin=\"auto\">\n      <Text fontSize=\"85px\" {...quoteProps}>\n        {children}\n      </Text>\n      <Text fontSize=\"36px\" padding={'0em 0em 0em 1em'} {...attributionProps}>\n        &ndash;{attribution}\n      </Text>\n    </Box>\n  </Slide>\n);\n\n/**\n * Generic Codepane utility with optional Description text\n */\nconst CodeLayout = ({\n  text,\n  textProps,\n  children,\n  ...props\n}: CodePaneProps & {\n  text?: string | ReactNode;\n  textProps?: ComponentProps<typeof Text>;\n}) => (\n  <Box data-testid=\"CodePane\">\n    {text ? (\n      <Text margin={8} {...textProps}>\n        {text}\n      </Text>\n    ) : null}\n    <CodePane {...props}>{children}</CodePane>\n  </Box>\n);\n\n/**\n * single Code Pane with optional Title layout\n */\nconst Code = ({\n  children,\n  language,\n  title,\n  titleProps,\n  codePaneProps,\n  ...rest\n}: Omit<SlideProps, 'children'> & {\n  children: string;\n  language: string;\n  title?: string | ReactNode;\n  titleProps?: ComponentProps<typeof Text>;\n  codePaneProps?: CodePaneProps;\n}) => {\n  return (\n    <Slide {...rest}>\n      <Box display=\"inline-block\" style={{ overflow: 'scroll' }}>\n        {title ? <Heading {...titleProps}>{title}</Heading> : null}\n        <CodeLayout language={language} {...codePaneProps}>\n          {children}\n        </CodeLayout>\n      </Box>\n    </Slide>\n  );\n};\n\n/**\n * multiple Code Panes with optional Description, with optional Title layout\n */\nconst MultiCodeLayout = ({\n  codeBlocks,\n  title,\n  titleProps,\n  numColumns = 1,\n  ...rest\n}: Omit<SlideProps, 'children'> & {\n  codeBlocks: Array<\n    Omit<CodePaneProps, 'children'> & {\n      code: CodePaneProps['children'];\n      description?: string | ReactNode;\n      descriptionProps?: ComponentProps<typeof Text>;\n    }\n  >;\n  title?: string | ReactNode;\n  titleProps?: ComponentProps<typeof Text>;\n  numColumns?: number;\n}) => {\n  return (\n    <Slide {...rest}>\n      <Box display=\"inline-block\" style={{ overflow: 'scroll' }}>\n        {title ? <Heading {...titleProps}>{title}</Heading> : null}\n        <Grid\n          gridRowGap={1}\n          gridColumnGap={1}\n          gridTemplateColumns={`repeat(${numColumns}, minmax(100px, 1fr))`}\n          maxWidth=\"100%\"\n        >\n          {codeBlocks.map(\n            ({ description, descriptionProps, code, ...codePaneProps }, i) => (\n              <CodeLayout\n                key={i}\n                text={description}\n                textProps={descriptionProps}\n                {...codePaneProps}\n              >\n                {code}\n              </CodeLayout>\n            )\n          )}\n        </Grid>\n      </Box>\n    </Slide>\n  );\n};\n\n/**\n * Generic styled-component Image utilities\n */\nconst Img = styled.img<{ objectFit?: React.CSSProperties['objectFit'] }>`\n  min-width: 100%;\n  min-height: 100%;\n  max-width: 100%;\n  object-fit: ${(props) => props.objectFit || 'contain'};\n`;\n\nconst ImgContainer = styled(FlexBox)`\n  overflow: hidden;\n`;\n\nconst Image = ({\n  src,\n  alt = '',\n  imgContainerProps,\n  imgProps,\n  objectFit\n}: {\n  src: string;\n  alt: string;\n  imgContainerProps?: ComponentProps<typeof FlexBox>;\n  imgProps?: React.ImgHTMLAttributes<HTMLImageElement>;\n  objectFit?: React.CSSProperties['objectFit'];\n}) => (\n  <ImgContainer data-testid=\"ImgContainer\" {...imgContainerProps}>\n    <Img\n      data-testid=\"Img\"\n      src={src}\n      alt={alt}\n      objectFit={objectFit}\n      {...imgProps}\n    />\n  </ImgContainer>\n);\n\n/**\n * Horizontal Image layout with optional Title and Description\n */\nconst HorizontalImage = ({\n  src,\n  alt,\n  title,\n  titleProps,\n  description,\n  descriptionProps,\n  imgProps,\n  imgContainerProps,\n  objectFit,\n  ...rest\n}: Omit<SlideProps, 'children'> & {\n  src: string;\n  alt: string;\n  title?: string | ReactNode;\n  titleProps?: ComponentProps<typeof Text>;\n  description?: string | ReactNode;\n  descriptionProps?: ComponentProps<typeof Text>;\n  imgProps?: React.ImgHTMLAttributes<HTMLImageElement>;\n  imgContainerProps?: ComponentProps<typeof FlexBox>;\n  objectFit?: React.CSSProperties['objectFit'];\n}) => {\n  return (\n    <Slide {...rest}>\n      <Image\n        src={src}\n        alt={alt}\n        objectFit={objectFit}\n        imgContainerProps={{\n          width: '100%',\n          ...imgContainerProps\n        }}\n        imgProps={imgProps}\n      />\n      {title ? (\n        <Heading textAlign=\"left\" margin=\"0 0\" {...titleProps}>\n          {title}\n        </Heading>\n      ) : null}\n      {description ? (\n        <Text margin=\"0 0\" {...descriptionProps}>\n          {description}\n        </Text>\n      ) : null}\n    </Slide>\n  );\n};\n\n/**\n * Image and List layout with optional Title\n */\nconst VerticalImage = ({\n  src,\n  alt,\n  title,\n  titleProps,\n  listType = 'unordered',\n  listItems,\n  animateListItems = false,\n  listProps,\n  imgProps,\n  imgContainerProps,\n  position = 'left',\n  objectFit,\n  ...rest\n}: Omit<SlideProps, 'children'> & {\n  src: string;\n  alt: string;\n  listItems: ReactNode[];\n  title?: string | ReactNode;\n  titleProps?: ComponentProps<typeof Heading>;\n  listType?: 'unordered' | 'ordered';\n  animateListItems?: boolean;\n  listProps?: ComponentProps<typeof UnorderedList & typeof OrderedList>;\n  imgProps?: React.ImgHTMLAttributes<HTMLImageElement>;\n  imgContainerProps?: ComponentProps<typeof FlexBox>;\n  position?: 'right' | 'left';\n  objectFit?: React.CSSProperties['objectFit'];\n}) => {\n  return (\n    <Slide {...rest}>\n      {title ? <Heading {...titleProps}>{title}</Heading> : null}\n      <Grid\n        gridColumnGap={2}\n        gridTemplateColumns={'repeat(2, 1fr)'}\n        height={'100%'}\n      >\n        <FlexBox justifyContent=\"start\">\n          <Ul\n            items={listItems}\n            animate={animateListItems}\n            type={listType}\n            {...listProps}\n          />\n        </FlexBox>\n        <Image\n          src={src}\n          alt={alt}\n          objectFit={objectFit}\n          imgContainerProps={{\n            order: position === 'right' ? 1 : -1,\n            ...imgContainerProps\n          }}\n          imgProps={imgProps}\n        />\n      </Grid>\n    </Slide>\n  );\n};\n\n/**\n * Image 3-up layout\n */\nconst ThreeUpImage = ({\n  primary,\n  top,\n  bottom,\n  ...rest\n}: Omit<SlideProps, 'children'> & {\n  primary: {\n    src: string;\n    alt: string;\n    objectFit?: React.CSSProperties['objectFit'];\n    position?: 'right' | 'left';\n    imgProps?: React.ImgHTMLAttributes<HTMLImageElement>;\n    imgContainerProps?: ComponentProps<typeof FlexBox>;\n  };\n  top: {\n    src: string;\n    alt: string;\n    objectFit?: React.CSSProperties['objectFit'];\n    imgProps?: React.ImgHTMLAttributes<HTMLImageElement>;\n    imgContainerProps?: ComponentProps<typeof FlexBox>;\n  };\n  bottom: {\n    src: string;\n    alt: string;\n    objectFit?: React.CSSProperties['objectFit'];\n    imgProps?: React.ImgHTMLAttributes<HTMLImageElement>;\n    imgContainerProps?: ComponentProps<typeof FlexBox>;\n  };\n}) => {\n  return (\n    <Slide {...rest}>\n      <Grid\n        height={'100%'}\n        gridColumnGap={2}\n        gridTemplateColumns={'repeat(2, 1fr)'}\n      >\n        <Grid gridRowGap={2} gridTemplateRows={'repeat(2, .5fr)'}>\n          <Image\n            src={top.src}\n            alt={top.alt}\n            objectFit={top.objectFit}\n            imgProps={top.imgProps}\n            imgContainerProps={{ ...top.imgContainerProps }}\n          />\n          <Image\n            src={bottom.src}\n            alt={bottom.alt}\n            objectFit={bottom.objectFit}\n            imgProps={bottom.imgProps}\n            imgContainerProps={{\n              ...bottom.imgContainerProps\n            }}\n          />\n        </Grid>\n\n        <Image\n          src={primary.src}\n          alt={primary.alt}\n          objectFit={primary.objectFit}\n          imgProps={primary.imgProps}\n          imgContainerProps={{\n            order: primary.position === 'right' ? 1 : -1,\n            ...primary.imgContainerProps\n          }}\n        />\n      </Grid>\n    </Slide>\n  );\n};\n\n/**\n * Full Bleed Image layout\n */\nconst FullBleedImage = ({\n  src,\n  alt,\n  imgProps,\n  imgContainerProps,\n  objectFit,\n  ...rest\n}: Omit<SlideProps, 'children'> & {\n  src: string;\n  alt: string;\n  imgProps?: React.ImgHTMLAttributes<HTMLImageElement>;\n  imgContainerProps?: ComponentProps<typeof FlexBox>;\n  objectFit?: React.CSSProperties['objectFit'];\n}) => (\n  <Slide padding=\"0 0 0\" {...rest}>\n    <Image\n      src={src}\n      alt={alt}\n      objectFit={objectFit || 'cover'}\n      imgProps={imgProps}\n      imgContainerProps={{\n        height: '100%',\n        ...imgContainerProps\n      }}\n    />\n  </Slide>\n);\n\n/**\n * Layouts to consider:\n * - Intro\n */\n\nexport default {\n  Full,\n  Center,\n  TwoColumn,\n  List,\n  Section,\n  BigFact,\n  Quote,\n  Statement,\n  Code,\n  MultiCodeLayout,\n  HorizontalImage,\n  VerticalImage,\n  ThreeUpImage,\n  FullBleedImage\n};\n","import React from 'react';\nimport { Box, FlexBox } from './layout-primitives';\nimport FullScreen from './fullscreen';\nimport AnimatedProgress from './animated-progress';\n\ntype Props = {\n  color?: string;\n};\nexport const DefaultTemplate = ({ color = '#fff' }: Props) => (\n  <FlexBox\n    justifyContent=\"space-between\"\n    position=\"absolute\"\n    bottom={0}\n    width={1}\n  >\n    <Box padding=\"0 1em\">\n      <FullScreen color={color} />\n    </Box>\n    <Box padding=\"1em\">\n      <AnimatedProgress color={color} />\n    </Box>\n  </FlexBox>\n);\n","// @ts-ignore\nimport zone from 'mdast-zone';\nimport unistVisit, { Visitor } from 'unist-util-visit';\nimport * as mdast from 'mdast-builder';\n\nimport type { Node, Parent, Literal } from 'unist';\n\nexport default function remarkRehypePresenterNotes(\n  noteCallback: (...nodes: Node[]) => void\n) {\n  const transformZoneNote = (start: unknown, nodes: Node[]) => {\n    noteCallback(...nodes);\n    return [];\n  };\n\n  const transformLineNote: Visitor<Parent> = (node, index, parent) => {\n    if (node.children.length === 0) return;\n    if (node.children[0].type !== 'text') return;\n\n    const text = node.children[0] as Literal;\n    const match = /^Notes: (.*)$/.exec(text.value as string);\n    if (!match) return;\n\n    noteCallback(mdast.paragraph(mdast.text(match[1])) as Node);\n    parent!.children.splice(index, 1);\n  };\n\n  return (tree: Node) => {\n    zone(tree, 'notes', transformZoneNote);\n    unistVisit(tree, 'paragraph', transformLineNote);\n  };\n}\n","/* eslint-disable react/display-name */\nimport { DeckContext } from '../deck/deck';\nimport presenterNotesPlugin from '../../utils/remark-rehype-presenter-notes';\nimport CodePane, { CodePaneProps } from '../code-pane';\nimport unified from 'unified';\nimport styled from 'styled-components';\nimport { compose, layout, position } from 'styled-system';\nimport remark from 'remark-parse';\nimport remark2rehype from 'remark-rehype';\nimport remarkRaw from 'rehype-raw';\nimport rehype2react from 'rehype-react';\nimport { isValidElementType } from 'react-is';\nimport { root as mdRoot } from 'mdast-builder';\nimport mdxComponentMap from '../../utils/mdx-component-mapper';\nimport indentNormalizer from '../../utils/indent-normalizer';\nimport Notes from '../notes';\nimport { ListItem } from '../../index';\nimport { Appear } from '../appear';\nimport React, {\n  ElementType,\n  FC,\n  forwardRef,\n  ReactElement,\n  useContext,\n  useMemo,\n  createElement,\n  Children\n} from 'react';\nimport { separateSectionsFromJson } from '../../utils/separate-sections-from-json';\nimport {\n  CommonMarkdownProps,\n  MapAndTemplate,\n  MarkdownSlideSetProps\n} from './markdown-types';\nimport { MarkdownSlide } from './markdown-slide-renderer';\nimport {\n  directiveParserPlugin,\n  directivesHandlerPlugin\n} from '../../utils/remark-rehype-directive';\n\ntype MarkdownProps = CommonMarkdownProps & MapAndTemplate;\nconst Container = styled('div')(compose(position, layout), { height: '100%' });\n\nexport const Markdown = forwardRef<\n  HTMLDivElement,\n  MarkdownProps & { slideConfig?: Record<string, string> }\n>(\n  (\n    {\n      componentMap: userProvidedComponentMap = mdxComponentMap,\n      template: { default: TemplateComponent, getPropsForAST } = {\n        default: 'div'\n      },\n      children: rawMarkdownText,\n      animateListItems = false,\n      componentProps,\n      slideConfig,\n      ...props\n    },\n    ref\n  ) => {\n    const { theme: { markdownComponentMap: themeComponentMap = null } = {} } =\n      useContext(DeckContext);\n\n    const [templateProps, noteElements] = useMemo(() => {\n      // Dedent and parse markdown into MDAST\n      const markdownText = indentNormalizer(rawMarkdownText);\n      const ast = unified().use(remark).parse(markdownText);\n\n      // Extract presenter notes from the MDAST (since we want to use a different\n      // component map for them.)\n      const extractedNotes = mdRoot();\n      const transformedAst = unified()\n        .use(presenterNotesPlugin, (...notes) => {\n          extractedNotes.children.push(...notes);\n        })\n        .use(directiveParserPlugin)\n        .use(directivesHandlerPlugin)\n        .runSync(ast);\n\n      // Pass the AST into the provided template function, which returns an object\n      // whose keys are prop names and whose values are chunks of the parsed AST.\n      let templatePropMDASTs: any;\n      if (typeof getPropsForAST === 'function') {\n        templatePropMDASTs = getPropsForAST(transformedAst);\n      }\n\n      if (!templatePropMDASTs) {\n        templatePropMDASTs = { children: transformedAst };\n      }\n\n      // Construct the component map based on the current theme and any custom\n      // mappings provided directly to <Markdown />\n      const componentMap = {\n        __codeBlock: MarkdownCodePane,\n        ...(themeComponentMap || {}),\n        ...userProvidedComponentMap\n      };\n\n      // If user wants to animate list items,\n      // wrap ListItem in Appear\n      if (animateListItems) {\n        componentMap['li'] = AppearingListItem;\n      }\n\n      // Create an HOC based on the component map which will specially handle\n      // fenced code blocks. (See MarkdownPreHelper for more details.)\n      const PreComponent = componentMap['pre'];\n      const CodeBlockComponent = componentMap['__codeBlock'];\n      const CodeInlineComponent = componentMap['code'];\n      componentMap['pre'] = MarkdownPreHelper(\n        PreComponent,\n        CodeInlineComponent,\n        CodeBlockComponent\n      );\n\n      const componentMapWithPassedThroughProps = Object.entries(\n        componentMap\n      ).reduce((newMap, [key, Component]) => {\n        newMap[key] = (props: any) => {\n          // Replace \\r\\n and \\n with <br /> for paragraphs\n          const children =\n            key === 'p'\n              ? props.children?.map((child: any) => {\n                  if (typeof child == 'string') {\n                    const lines = child.split(/\\r\\n|\\n/g);\n                    return lines.map((str, i) => (\n                      <React.Fragment key={i}>\n                        {str}\n                        {i !== lines.length - 1 && <br />}\n                      </React.Fragment>\n                    ));\n                  }\n                  return child;\n                })\n              : props.children;\n\n          return (\n            <Component {...props} {...(componentProps || {})}>\n              {children}\n            </Component>\n          );\n        };\n        return newMap;\n      }, {} as any);\n\n      // Create the compiler for the _user-visible_ markdown (not presenter notes)\n      const compiler = unified()\n        .use(remark2rehype, { allowDangerousHtml: true })\n        .use(remarkRaw)\n        .use(rehype2react, {\n          createElement,\n          components: componentMapWithPassedThroughProps\n        });\n\n      // Compile each of the values we got back from the template function\n      const templateProps = Object.entries(templatePropMDASTs).reduce(\n        (acc, [key, mdast]) => {\n          // Transform the MDAST into HAST\n          const hast = compiler.runSync(mdast as any);\n\n          // Compile the HAST into React elements\n          acc[key] = compiler.stringify(hast);\n          return acc;\n        },\n        {} as any\n      );\n      // Create the compiler for presenter notes, which wraps the entire compiled\n      // chunk in a <Note> component. (Rather than React.Fragment, which is the\n      // default behavior.)\n      const notesCompiler = unified()\n        .use(remark2rehype, { allowDangerousHtml: true })\n        .use(remarkRaw)\n        .use(rehype2react, {\n          createElement,\n          Fragment: Notes\n        });\n\n      // Transform and compile the notes AST.\n      if (\n        Array.isArray(extractedNotes.children) &&\n        extractedNotes.children.length >= 1\n      ) {\n        const transformedNotesAst = notesCompiler.runSync(extractedNotes);\n        const noteElements = notesCompiler.stringify(transformedNotesAst);\n        return [templateProps, noteElements] as const;\n      }\n      return [templateProps, null] as const;\n    }, [\n      rawMarkdownText,\n      getPropsForAST,\n      themeComponentMap,\n      userProvidedComponentMap,\n      animateListItems,\n      componentProps\n    ]);\n\n    const { children, ...restProps } = templateProps;\n    return (\n      <Container ref={ref} {...props}>\n        <TemplateComponent {...restProps}>\n          {slideConfig?.layout === 'columns'\n            ? children.props.children\n            : children}\n          {noteElements}\n        </TemplateComponent>\n      </Container>\n    );\n  }\n);\n\nconst AppearingListItem = (\n  props: React.ComponentPropsWithoutRef<typeof ListItem>\n) => (\n  <Appear>\n    <ListItem {...props} />\n  </Appear>\n);\n\nexport const MarkdownSlideSet = ({\n  children: rawMarkdownText,\n  slideProps = [],\n  ...allSlideProps\n}: MarkdownSlideSetProps) => {\n  const dedentedMarkdownText = indentNormalizer(rawMarkdownText);\n  const mdSlides = separateSectionsFromJson(dedentedMarkdownText);\n  return (\n    <>\n      {mdSlides.map((md, ix) => {\n        const props = {};\n        Object.assign(props, allSlideProps);\n        if (slideProps[ix]) {\n          Object.assign(props, slideProps[ix]);\n        }\n        const { jsonObject = {}, content } = md;\n        return (\n          <MarkdownSlide key={ix} slideConfig={jsonObject} {...props}>\n            {content}\n          </MarkdownSlide>\n        );\n      })}\n    </>\n  );\n};\n\n// This HOC is necessary due to the fact that `remark-rehype` transforms _inline\n// code_ into <code>...</code>, but _fenced code blocks_ into\n// <pre><code>...</code></pre>. (It's also possible that <pre>...</pre> might\n// get in there somewhere.) In order to allow the user to theme these\n// differently, we detect the latter case and render CodeBlockComponent if\n// needed.\nexport const MarkdownPreHelper =\n  (\n    PreComponent: ElementType = 'pre',\n    CodeInlineComponent: ElementType = 'code',\n    CodeBlockComponent: ElementType\n  ): FC<React.HTMLProps<unknown>> =>\n  ({ children, ...restProps }) => {\n    const pre = <PreComponent {...restProps}>{children}</PreComponent>;\n\n    if (Children.count(children) !== 1) return pre;\n    const child = (children as ReactElement[])[0];\n    if (child.type !== CodeInlineComponent) return pre;\n    if (!isValidElementType(CodeBlockComponent)) return pre;\n\n    // Edge behavior: when `rehype-react` does its transformations, children are\n    // always provided as an array, even if there's only one. We extract it here\n    // so there are less surprises for implementers of a code block component.\n    const {\n      children: [rawCode],\n      ...restChildProps\n    } = child.props;\n    return (\n      <CodeBlockComponent {...restProps} {...restChildProps}>\n        {rawCode}\n      </CodeBlockComponent>\n    );\n  };\n\nconst MarkdownCodePane: FC<{ className?: string } & CodePaneProps> = ({\n  className,\n  children,\n  ...rest\n}) => {\n  const language = useMemo(() => {\n    const match = /^language-(.*)$/.exec(className || '');\n    return match ? match[1] : undefined;\n  }, [className]);\n\n  return (\n    <CodePane {...rest} language={language}>\n      {children}\n    </CodePane>\n  );\n};\n","/* eslint-disable react/display-name */\nimport { ElementType } from 'react';\nimport {\n  Heading,\n  Image,\n  Link,\n  ListItem,\n  OrderedList,\n  Quote,\n  Table,\n  TableCell,\n  TableRow,\n  Text,\n  UnorderedList\n} from '../index';\n\nexport type MarkdownComponentMap = Partial<\n  Record<keyof JSX.IntrinsicElements, ElementType>\n>;\n\nconst mdxComponentMap: MarkdownComponentMap = {\n  p: Text,\n  h1: (props) => <Heading {...props} fontSize=\"h1\" />,\n  h2: (props) => <Heading {...props} fontSize=\"h2\" />,\n  h3: (props) => <Heading {...props} fontSize=\"h3\" />,\n  h4: (props) => <Heading {...props} fontSize=\"h4\" />,\n  blockquote: Quote,\n  ul: UnorderedList,\n  ol: OrderedList,\n  li: ListItem,\n  img: Image,\n  a: Link,\n  table: Table,\n  tr: TableRow,\n  td: TableCell\n};\n\nexport default mdxComponentMap;\n","type Section = {\n  content: string;\n  jsonObject?: Record<string, string>;\n};\n\nexport const separateSectionsFromJson = (json?: string): Section[] => {\n  if (!json || json.trim().length === 0) return [];\n\n  const sections: Section[] = [];\n  const lines: string[] = json.split('\\n');\n  let currentSection: Section = {\n    content: ''\n  };\n\n  for (const line of lines) {\n    const trimmedLine = line.trim();\n\n    if (trimmedLine.startsWith('---')) {\n      if (currentSection.content !== '') {\n        sections.push(currentSection);\n      }\n\n      const jsonContent = trimmedLine.substring(3).trim();\n      const jsonObject = jsonContent ? JSON.parse(jsonContent) : undefined;\n\n      currentSection = {\n        content: '',\n        jsonObject: jsonObject\n      };\n    } else {\n      currentSection.content += line + '\\n';\n    }\n  }\n\n  sections.push(currentSection);\n  return sections;\n};\n","import React, { PropsWithChildren } from 'react';\nimport { FlexBox } from '../layout-primitives';\n\nexport const Columns = ({ children }: PropsWithChildren) => (\n  <FlexBox flexDirection=\"row\" alignItems=\"start\" flex={1}>\n    {children}\n  </FlexBox>\n);\n\nexport const Center = ({ children }: PropsWithChildren) => (\n  <FlexBox justifyContent=\"center\" alignItems=\"center\" height=\"100%\">\n    {children}\n  </FlexBox>\n);\n\nexport const hasLayoutConfig =\n  (layoutKey: string) => (config?: Record<string, string>) =>\n    config && 'layout' in config && config.layout === layoutKey;\n","import Slide from '../slide/slide';\nimport React from 'react';\nimport { Markdown } from './markdown';\nimport { MarkdownSlideProps } from './markdown-types';\nimport { Center, Columns, hasLayoutConfig } from './markdown-layout-containers';\n\nexport const MarkdownSlide = ({\n  children,\n  componentMap,\n  animateListItems = false,\n  componentProps = {},\n  slideConfig,\n  template: propTemplate,\n  ...rest\n}: MarkdownSlideProps) => {\n  let template = propTemplate;\n\n  if (hasLayoutConfig('columns')(slideConfig)) template = { default: Columns };\n  if (hasLayoutConfig('center')(slideConfig)) template = { default: Center };\n\n  return (\n    <Slide {...rest}>\n      <Markdown\n        {...{\n          componentMap,\n          template,\n          animateListItems,\n          componentProps,\n          children,\n          slideConfig\n        }}\n      />\n    </Slide>\n  );\n};\n","// @ts-ignore\nimport unistVisit, { Visitor } from 'unist-util-visit';\nimport { Literal, Node, Parent } from 'unist';\nimport * as mdast from 'mdast-builder';\nimport type { Plugin } from 'unified';\nimport visit from 'unist-util-visit';\nimport cloneDeep from 'lodash.clonedeep';\n\nconst directiveNodeTypes = ['sectionDirective'] as const;\nexport const directiveMatch = /^::(.*)$/;\n\ntype DirectiveNodes = typeof directiveNodeTypes[number];\ntype ValueNode = Node & { value: string; children?: unknown[] };\ntype VisitNode = Node & {\n  name: string;\n  attributes?: Record<string, string> | undefined;\n  children?: unknown[];\n};\ntype TreeNode = Node & { children: Node[] };\n\nconst cloneFn =\n  typeof structuredClone !== 'undefined' ? structuredClone : cloneDeep;\n\nexport const directiveParserPlugin = () => {\n  const transformLineDirective: Visitor<Parent> = (node, index, parent) => {\n    if (node.children.length === 0) return;\n    if (node.children[0].type !== 'text') return;\n\n    const text = <Literal>node.children[0];\n    const match = directiveMatch.exec(<string>text.value);\n    if (!match) return;\n\n    const matchedNode = mdast.paragraph(mdast.text(match[1]));\n    const directiveType = `${\n      (<ValueNode>matchedNode.children[0]).value\n    }Directive`;\n\n    /**\n     * If the parser finds an unknown directive, splice it out from\n     * the node tree, so it doesn't render on/break the slide.\n     */\n    if (!directiveNodeTypes.includes(<DirectiveNodes>directiveType)) {\n      parent?.children.splice(index, 1);\n    } else {\n      /**\n       * If the parser finds a directive node, flatten it and replace\n       * the raw structure with one that contains no children and the position.\n       * The children will be populated with directivesHandlerPlugin to contain\n       * the nodes for each grouping.\n       */\n      const directiveNode = {\n        type: directiveType,\n        children: [],\n        position: node.position\n      };\n      parent?.children.splice(index, 1, directiveNode);\n    }\n  };\n\n  return (tree: Node) => {\n    unistVisit(tree, 'paragraph', transformLineDirective);\n  };\n};\n\nexport const directivesHandlerPlugin: Plugin = () => {\n  return (tree) => {\n    const treeChildren: Node[] = [];\n    let slideHasDirectives = false;\n    visit(tree, (node) => {\n      if (isDirectiveNode(node)) {\n        slideHasDirectives = true;\n        const treeNodes = <TreeNode>tree;\n        const clonedNode = <typeof node>cloneFn(node);\n\n        switch (<DirectiveNodes>node.type) {\n          /**\n           * Get the start and end index based on the section directives in the\n           * node tree. These will be used to determine which nodes belong to each\n           * section. If there is no final directive, assume end of slide.\n           */\n          case 'sectionDirective': {\n            const startIndex = treeNodes.children.indexOf(node);\n            const endIndex = (() => {\n              /**\n               * The end index should be the next section directive found in the node\n               * tree or the end of slide. Offset each visit run by the index of the\n               * previous section directive index.\n               */\n              const proposedEndIndex =\n                treeNodes.children\n                  .slice(startIndex + 1)\n                  .findIndex((n) => n.type === 'sectionDirective') + startIndex;\n              return proposedEndIndex > startIndex\n                ? proposedEndIndex\n                : treeNodes.children.length - 1;\n            })();\n\n            /**\n             * Collect the elements that are within the index bounds of the two\n             * section directives.\n             */\n            const elements = treeNodes.children.slice(\n              startIndex + 1,\n              endIndex + 1\n            );\n\n            /**\n             * Finally, assign the nodes within the bounds as children\n             * to the section directive and push it to the overall tree.\n             */\n            (<VisitNode>clonedNode).children = [...elements];\n            treeChildren.push(clonedNode);\n          }\n        }\n      }\n    });\n    slideHasDirectives && ((<TreeNode>tree).children = treeChildren);\n  };\n};\n\nconst isDirectiveNode = <T extends Node>(\n  node: T\n): node is T & { name: string; attributes?: Record<string, string> } =>\n  directiveNodeTypes.includes(<DirectiveNodes>node.type);\n","export default function SpectacleLogo({ size = 100 }) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={Math.floor(size * 1.012)}\n      height={size}\n      fillRule=\"evenodd\"\n      clipRule=\"evenodd\"\n      viewBox=\"0 0 510 500\"\n    >\n      <g transform=\"translate(.56 -8.403)\">\n        <g>\n          <g>\n            <g>\n              <path\n                fill=\"#202020\"\n                fillRule=\"nonzero\"\n                d=\"M288.107 16.303l164.681 73.248c31.558 14.036 51.893 45.336 51.893 79.874v178.119c0 34.538-20.335 65.839-51.893 79.875l-164.681 73.247a87.415 87.415 0 01-71.054 0L52.371 427.419C20.814 413.383.479 382.082.479 347.544V169.425c0-34.538 20.335-65.838 51.892-79.874l164.682-73.248a87.423 87.423 0 0171.054 0z\"\n              />\n              <path\n                fill=\"none\"\n                fillRule=\"nonzero\"\n                stroke=\"#FC6986\"\n                strokeOpacity=\"0.5\"\n                strokeWidth=\"24\"\n                d=\"M279.696 44.792a67.128 67.128 0 00-54.404 0L64.664 115.996a57.732 57.732 0 00-34.335 52.778v179.582a57.732 57.732 0 0034.335 52.777l160.628 71.205a67.128 67.128 0 0054.404 0l160.629-71.205a57.732 57.732 0 0034.335-52.777V168.774a57.732 57.732 0 00-34.335-52.778L279.696 44.792z\"\n              />\n              <path\n                fill=\"none\"\n                fillRule=\"nonzero\"\n                stroke=\"#FC6986\"\n                strokeWidth=\"24\"\n                d=\"M284.007 25.519a77.337 77.337 0 00-62.855 0L56.471 98.767c-27.917 12.417-45.905 40.105-45.905 70.658v178.119c0 30.553 17.988 58.242 45.905 70.658l164.681 73.248a77.33 77.33 0 0062.855 0l164.682-73.248c27.916-12.416 45.905-40.105 45.905-70.658V169.425c0-30.553-17.989-58.241-45.905-70.658L284.007 25.519z\"\n              />\n              <g transform=\"translate(109.244 121.849)\">\n                <g fillRule=\"nonzero\">\n                  <path\n                    fill=\"#F14E74\"\n                    d=\"M133.25 181.944L42.592 93.853c-11.098-10.782-9.804-29.022 2.703-38.114 12.508-9.092 30.154-4.622 36.876 9.342l54.914 114.075c1.17 2.43-1.904 4.664-3.835 2.788\"\n                  />\n                  <path\n                    fill=\"#FC6986\"\n                    d=\"M137.08 179.135L82.067 65.108c-6.734-13.958.719-30.64 15.574-34.86 14.855-4.221 29.898 6.07 31.435 21.504l12.56 126.089c.268 2.686-3.384 3.723-4.556 1.294\"\n                  />\n                  <path\n                    fill=\"#E13E65\"\n                    d=\"M130.542 185.845L15.243 134.5C1.13 128.215-3.905 110.643 4.722 97.78c8.627-12.863 26.726-14.77 37.822-3.986l90.644 88.106c1.931 1.876-.19 5.038-2.646 3.945\"\n                  />\n                  <path\n                    fill=\"#FC6986\"\n                    d=\"M3.845 99.275c.618-1.267 5.452-10.3 18.702-12.521 6.012-1.007 14.627.963 21.824 8.901l83.456 80.96.601 3.485-82.297-64.701s-13.082-10.252-28.044-.644l-.035-.039a10.58 10.58 0 01-5.6 1.607c-5.895 0-10.674-4.802-10.674-10.724 0-2.368.773-4.55 2.067-6.324\"\n                  />\n                  <path\n                    fill=\"#FF92AC\"\n                    d=\"M43.711 56.892c1.011-.979 8.623-7.812 21.832-5.356 5.993 1.113 13.421 5.921 17.491 15.85l50.913 105.166-.618 3.482-55.347-89.486s-8.814-14.123-26.141-10.222l-.021-.048a10.57 10.57 0 01-5.809-.409c-5.541-2.022-8.402-8.174-6.391-13.741a10.656 10.656 0 014.091-5.236\"\n                  />\n                  <path\n                    fill=\"#FF92AC\"\n                    d=\"M95.897 30.914c1.284-.57 10.773-4.353 22.333 2.523 5.245 3.118 10.572 10.2 10.991 20.93l11.774 116.349-1.774 3.055-21.307-103.16s-3.438-16.308-21.042-18.639l-.003-.052a10.585 10.585 0 01-5.314-2.394c-4.509-3.814-5.088-10.579-1.292-15.111a10.602 10.602 0 015.634-3.501\"\n                  />\n                  <path\n                    fill=\"#FF92AC\"\n                    d=\"M127.602 45.338l-.858 111.944s3.407 25.113 7.651 30.279l-19.887-8.833c-7.512-6.39-5.54-20.646-5.54-20.646l18.634-112.744z\"\n                  />\n                  <path\n                    fill=\"#E13E65\"\n                    d=\"M142.425 188.83c-14.822 0-26.839-12.074-26.839-26.967l15.609-151.132C131.793 4.95 136.64.558 142.425.558c5.784 0 10.633 4.392 11.23 10.173l15.609 151.132c0 14.893-12.017 26.967-26.839 26.967\"\n                  />\n                  <path\n                    fill=\"#FF92AC\"\n                    d=\"M134.618 26.354l7.82 13.852 7.86-13.675\"\n                  />\n                  <path\n                    fill=\"#FC6986\"\n                    d=\"M153.642 11.828c0 6.225-2.366 20.199-11.217 20.199-8.48 0-11.217-13.974-11.217-20.199 0-6.224 5.022-11.27 11.217-11.27s11.217 5.046 11.217 11.27\"\n                  />\n                  <path\n                    fill=\"#FC6986\"\n                    d=\"M187.696 30.247c-12.972-3.685-26.086 3.696-30.226 15.904l13.929 85.017 31.87-66.06c6.735-13.958-.718-30.64-15.573-34.861\"\n                  />\n                  <path\n                    fill=\"#FC6986\"\n                    d=\"M142.935 169.288c-.921-.115-15.057-2.168-14.712-18.819l3.016-74.905a96.49 96.49 0 00-3.628-30.379l-12.033 116.693a6.241 6.241 0 00.063 1.71c.31 4.212 2.129 15.211 12.538 21.257 3.52 2.044 8.117 3.929 13.779 3.977l.001-.022c.09.003.177.013.267.013 5.376 0 9.734-4.378 9.734-9.78 0-5.162-3.981-9.379-9.025-9.745\"\n                  />\n                  <path\n                    fill=\"#FF92AC\"\n                    d=\"M118.843 75.078s1.897 11.598-.237 24.627l2.134-6.673 2.056-15.888-3.953-2.066z\"\n                  />\n                  <path\n                    fill=\"#FF92AC\"\n                    d=\"M195.075 34.415a10.608 10.608 0 00-5.635-3.501c-1.284-.569-10.773-4.352-22.333 2.522-3.792 2.256-7.618 6.594-9.61 12.876l6.61 40.352 3.316-16.053s3.438-16.308 21.042-18.638l.003-.053a10.585 10.585 0 005.314-2.394c4.51-3.814 5.089-10.58 1.293-15.111\"\n                  />\n                  <path\n                    fill=\"#F14E74\"\n                    d=\"M240.042 55.739c-12.507-9.092-30.154-4.622-36.875 9.342l-31.78 66.016 4.477 27.326s.02.132.049.371l66.833-64.94c11.097-10.783 9.803-29.023-2.704-38.115\"\n                  />\n                  <path\n                    fill=\"#FF92AC\"\n                    d=\"M245.717 62.127a10.66 10.66 0 00-4.09-5.235c-1.012-.979-8.624-7.813-21.833-5.356-5.993 1.114-13.421 5.921-17.49 15.85l-30.899 63.823 1.744 10.644 34.206-55.305s8.814-14.123 26.141-10.222l.021-.049c1.875.394 3.876.297 5.809-.409 5.542-2.021 8.403-8.173 6.391-13.741\"\n                  />\n                  <path\n                    fill=\"#E13E65\"\n                    d=\"M280.615 97.78v-.001c-8.627-12.862-26.726-14.769-37.822-3.985l-66.879 65.007c.272 2.27 1.352 14.257-5.394 20.041l99.574-44.342c14.114-6.285 19.148-23.857 10.521-36.72\"\n                  />\n                  <path\n                    fill=\"#FC6986\"\n                    d=\"M281.493 99.275c-.619-1.267-5.453-10.3-18.703-12.521-6.012-1.008-14.627.963-21.823 8.902l-65.055 63.132c.107.889.342 3.316.168 6.283l63.126-49.672s13.082-10.253 28.044-.644l.035-.039a10.571 10.571 0 005.601 1.607c5.894 0 10.673-4.802 10.673-10.724a10.7 10.7 0 00-2.066-6.324\"\n                  />\n                </g>\n              </g>\n              <g transform=\"translate(111.013 374.877)\">\n                <g>\n                  <path\n                    fill=\"#FC6986\"\n                    fillRule=\"nonzero\"\n                    d=\"M.048-.166c-.007.004-.011.009-.011.015 0 .005.001.007.004.013A.293.293 0 00.308.01c.138 0 .237-.091.237-.209 0-.121-.067-.179-.208-.222-.089-.027-.13-.055-.13-.1 0-.045.045-.067.088-.067.059 0 .094.027.123.069a.02.02 0 00.017.009c.005 0 .009-.002.014-.006l.07-.058c.006-.005.008-.009.008-.013S.525-.595.521-.6a.26.26 0 00-.223-.11c-.132 0-.226.076-.226.195 0 .113.094.177.188.205.104.031.147.063.147.117 0 .051-.042.081-.096.081-.06 0-.113-.027-.152-.099C.154-.22.151-.222.144-.222a.024.024 0 00-.014.005l-.082.051z\"\n                    transform=\"scale(52)\"\n                  />\n                  <path\n                    fill=\"#FC6986\"\n                    fillRule=\"nonzero\"\n                    d=\"M.082-.02c0 .014.006.02.02.02h.09c.014 0 .02-.006.02-.02v-.246h.17c.146 0 .22-.096.22-.214C.602-.603.528-.7.371-.7H.102c-.014 0-.02.006-.02.02v.66zm.13-.368v-.19h.145c.078 0 .115.032.115.095s-.037.095-.115.095H.212z\"\n                    transform=\"matrix(52 0 0 52 29.224 0)\"\n                  />\n                  <path\n                    fill=\"#FC6986\"\n                    fillRule=\"nonzero\"\n                    d=\"M.082-.02c0 .014.006.02.02.02h.457c.014 0 .02-.006.02-.02v-.082c0-.014-.006-.02-.02-.02H.212v-.185h.267c.014 0 .02-.006.02-.02v-.082c0-.014-.006-.02-.02-.02H.212v-.149h.335c.013 0 .018-.005.018-.018V-.68c0-.014-.006-.02-.02-.02H.102c-.014 0-.02.006-.02.02v.66z\"\n                    transform=\"matrix(52 0 0 52 61.62 0)\"\n                  />\n                  <path\n                    fill=\"#FC6986\"\n                    fillRule=\"nonzero\"\n                    d=\"M.602-.186C.597-.193.593-.196.587-.196a.024.024 0 00-.017.008c-.042.037-.086.076-.173.076-.102 0-.215-.069-.215-.238 0-.169.116-.238.22-.238a.24.24 0 01.164.068c.005.004.009.006.013.006.006 0 .009-.003.015-.01l.054-.07C.652-.6.654-.603.654-.608c0-.006-.004-.011-.01-.016A.36.36 0 00.4-.71a.342.342 0 00-.356.36c0 .237.161.36.348.36a.35.35 0 00.259-.098C.657-.093.66-.098.66-.104.66-.109.658-.113.653-.12L.602-.186z\"\n                    transform=\"matrix(52 0 0 52 91.936 0)\"\n                  />\n                  <path\n                    fill=\"#FC6986\"\n                    fillRule=\"nonzero\"\n                    d=\"M.238-.02c0 .014.006.02.02.02h.09c.014 0 .02-.006.02-.02v-.558h.19c.014 0 .02-.006.02-.02V-.68c0-.014-.006-.02-.02-.02h-.51c-.014 0-.02.006-.02.02v.082c0 .014.006.02.02.02h.19v.558z\"\n                    transform=\"matrix(52 0 0 52 128.076 0)\"\n                  />\n                  <path\n                    fill=\"#FC6986\"\n                    fillRule=\"nonzero\"\n                    d=\"M.505-.02C.51-.007.517 0 .531 0H.63c.014 0 .02-.006.02-.02L.394-.68C.389-.693.383-.7.369-.7h-.08c-.014 0-.02.007-.025.02l-.256.66c0 .014.006.02.02.02h.099c.014 0 .021-.007.026-.02L.21-.178h.237l.058.158zM.329-.504L.403-.3H.255l.074-.204z\"\n                    transform=\"matrix(52 0 0 52 154.076 0)\"\n                  />\n                  <path\n                    fill=\"#FC6986\"\n                    fillRule=\"nonzero\"\n                    d=\"M.602-.186C.597-.193.593-.196.587-.196a.024.024 0 00-.017.008c-.042.037-.086.076-.173.076-.102 0-.215-.069-.215-.238 0-.169.116-.238.22-.238a.24.24 0 01.164.068c.005.004.009.006.013.006.006 0 .009-.003.015-.01l.054-.07C.652-.6.654-.603.654-.608c0-.006-.004-.011-.01-.016A.36.36 0 00.4-.71a.342.342 0 00-.356.36c0 .237.161.36.348.36a.35.35 0 00.259-.098C.657-.093.66-.098.66-.104.66-.109.658-.113.653-.12L.602-.186z\"\n                    transform=\"matrix(52 0 0 52 186.212 0)\"\n                  />\n                  <path\n                    fill=\"#FC6986\"\n                    fillRule=\"nonzero\"\n                    d=\"M.082-.02c0 .014.006.02.02.02h.445c.014 0 .02-.006.02-.02v-.082c0-.014-.006-.02-.02-.02H.212V-.68c0-.014-.006-.02-.02-.02h-.09c-.014 0-.02.006-.02.02v.66z\"\n                    transform=\"matrix(52 0 0 52 220.74 0)\"\n                  />\n                  <path\n                    fill=\"#FC6986\"\n                    fillRule=\"nonzero\"\n                    d=\"M.082-.02c0 .014.006.02.02.02h.457c.014 0 .02-.006.02-.02v-.082c0-.014-.006-.02-.02-.02H.212v-.185h.267c.014 0 .02-.006.02-.02v-.082c0-.014-.006-.02-.02-.02H.212v-.149h.335c.013 0 .018-.005.018-.018V-.68c0-.014-.006-.02-.02-.02H.102c-.014 0-.02.006-.02.02v.66z\"\n                    transform=\"matrix(52 0 0 52 250.9 0)\"\n                  />\n                </g>\n              </g>\n            </g>\n          </g>\n        </g>\n      </g>\n    </svg>\n  );\n}\n","const NOTES_MARKER = 'Notes: ';\nconst NOTES_REG = new RegExp(`^${NOTES_MARKER}`, 'm');\n/*\n * We want to pull the notes out of each slide. This RegEx looks for \"Notes: \"\n * that starts on a new line. Anything after the notes marker will be considered notes.\n */\nexport const isolateNotes = (content: string) => {\n  const indexOfNotes = content.search(NOTES_REG);\n  if (indexOfNotes >= 0) {\n    // found the notes marker!\n    return content.substring(indexOfNotes + NOTES_MARKER.length);\n  }\n  return '';\n};\n\n/*\n * When generating the slide components, we only want the slide content to be\n * compiled by mdx.sync. Remove all the notes content.\n */\nexport const removeNotes = (content: string) => {\n  const indexOfNotes = content.search(NOTES_REG);\n  if (indexOfNotes >= 0) {\n    // found the notes marker!\n    return content.substring(0, indexOfNotes);\n  }\n  return content;\n};\n"],"mappings":"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","names":["Fragment","useRef","useCallback","useEffect","useState","useEffect","useMemo","useCallback","useId","styled","useState","useEffect","scaleFactor","useEffect","useState","useEffect","useCallback","merge","merge","mapStateToLocation","mapLocationToState","useState","useEffect","useCallback","useEffect","useRef","jsx","styled","initialDeckState","useId","useState","useEffect","useCallback","useMemo","useCallback","useEffect","useId","useRef","noop","_a","jsx","useRef","useEffect","useCallback","useRef","useCallback","useState","useEffect","styled","styled","styled","styled","useState","useCallback","styled","color","space","compose","useRef","useState","useResizeObserver","jsx","styled","compose","color","space","useRef","useState","useResizeObserver","styled","styled","useState","useRef","useEffect","useRegisterActions","jsx","jsxs","useState","useCallback","jsx","jsxs","styled","useRef","useState","useCallback","useEffect","styled","createContext","useCallback","useContext","useEffect","useMemo","useState","styled","color","space","useState","useRef","useEffect","useId","jsx","PLACEHOLDER_CLASS_NAME","useId","useState","useRef","useEffect","thresholds","jsx","jsxs","noop","createContext","SlideContainer","styled","color","SlideWrapper","space","slideTransition","useContext","useCallback","useMemo","isPassed","isUpcoming","useState","useEffect","Fragment","jsx","jsxs","styled","useCallback","useRef","parseQS","stringifyQS","useRef","parseQS","useCallback","stringifyQS","styled","styled","jsx","jsxs","styled","jsx","jsxs","styled","jsx","jsxs","jsx","Fragment","useContext","animated","useSpring","Fragment","jsx","jsxs","useContext","animated","useSpring","forwardRef","useMemo","useContext","useRef","useCallback","useEffect","styled","ThemeContext","compose","layout","position","Fragment","jsx","jsxs","styled","compose","position","layout","forwardRef","useMemo","useContext","ThemeContext","useRef","useCallback","useEffect","space","styled","color","typography","space","compose","border","layout","styled","compose","color","typography","space","border","layout","styled","compose","layout","position","styled","compose","layout","position","ReactDOM","useContext","jsx","ReactDOM","forwardRef","useContext","styled","position","jsx","styled","color","position","forwardRef","useContext","forwardRef","useContext","useEffect","useState","useCallback","styled","jsx","jsxs","styled","color","forwardRef","useContext","useState","useCallback","activeCircleNode","useEffect","alternateAnimation","forwardRef","useEffect","useState","styled","position","useCallback","jsx","Container","styled","position","forwardRef","color","useState","useEffect","styled","Fragment","jsx","jsxs","List","Fragment","Quote","text","_a","_b","styled","Image","position","jsx","jsxs","color","text","styled","compose","layout","position","jsx","forwardRef","useContext","useMemo","jsx","Center","jsx","Center","unistVisit","mdast","text","Fragment","jsx","jsxs","Container","styled","compose","position","layout","forwardRef","useContext","useMemo","props","_a","children","templateProps","mdast","noteElements","jsx","jsxs"]}