{"version":3,"sources":["../src/index.tsx","../src/TicketMap/index.tsx","../src/Actions/index.tsx","../src/Legend/index.tsx","../src/Button/Button.tsx","../src/Legend/swatch.tsx","../src/icons/ChevronDown.tsx","../src/icons/ChevronUp.tsx","../src/Actions/ActionGroup.tsx","../src/icons/Plus.tsx","../src/icons/Minus.tsx","../src/icons/Undo.tsx","../src/icons/Close.tsx","../src/Tooltip/index.tsx","../src/ZoomHelper/index.tsx","../src/icons/PinchZoomIn.tsx","../src/icons/TwoFingerSlide.tsx","../src/icons/MissingSeatMapLogo.tsx","../src/utils/utils.ts","../src/utils/zoom.ts","../src/utils/selectors.ts"],"names":["React","Component","isEqual","formatCurrency","initialViewboxHeight","initialViewboxWidth"],"mappings":"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","sourcesContent":["import pick from \"lodash.pick\";\nimport union from \"lodash.union\";\nimport React from \"react\";\nimport { render } from \"react-dom\";\nimport {\n  DefaultProps,\n  Props,\n  PublicApi,\n  RequiredProps,\n  TicketMap,\n} from \"./TicketMap\";\n\nconst requiredConfigKeys: (keyof RequiredProps)[] = [\n  \"venueId\",\n  \"configurationId\",\n];\n\nconst optionalConfigKeys: (keyof DefaultProps)[] = [\n  \"mapFontFamily\",\n  \"selectedSections\",\n  \"onSelection\",\n  \"ticketGroups\",\n  \"sectionPercentiles\",\n  \"mapsDomain\",\n  \"showControls\",\n  \"showLegendOpenAlwaysForDesktop\",\n  \"showLegend\",\n  \"openLegendInitially\",\n  \"mouseControlEnabled\",\n  \"showZoomHelper\",\n];\n\nexport function extractConfigurationFromOptions(options: Props): Props {\n  const keys = union(requiredConfigKeys, optionalConfigKeys);\n  return pick(options, keys);\n}\n\nexport function validateOptions(options: Props) {\n  for (const key of requiredConfigKeys) {\n    if (!(key in options)) {\n      throw new Error(`Seatmap configuration requires a '${key}' value.`);\n    }\n  }\n}\n\nexport class SeatmapFactory {\n  configuration: Props;\n\n  constructor(options: Props) {\n    validateOptions(options);\n    this.configuration = extractConfigurationFromOptions(options);\n  }\n\n  build(rootElementId: string): PublicApi | undefined {\n    if (!rootElementId) {\n      throw new Error(\"Seatmaps must be initialized with a DOM element.\");\n    }\n\n    const rootElement = document.getElementById(rootElementId);\n    if (!rootElement) {\n      throw new Error(\"Seatmaps must be initialized with a DOM element.\");\n    }\n\n    let map: TicketMap | undefined;\n\n    render(\n      <TicketMap\n        {...this.configuration}\n        ref={(ref: TicketMap) => {\n          map = ref;\n        }}\n      />,\n      rootElement,\n    );\n\n    return map?.publicApi;\n  }\n}\n\nexport { TicketMap };\n","import React, { Component } from \"react\";\nimport isEqual from \"lodash.isequal\";\nimport fetchPonyfill from \"fetch-ponyfill\";\n\nimport Actions from \"../Actions\";\nimport Tooltip from \"../Tooltip\";\nimport ZoomHelper from \"../ZoomHelper\";\nimport MissingSeatMapLogo from \"../icons/MissingSeatMapLogo\";\n\nimport { ZoomControl, initializeZoom } from \"../utils/zoom\";\n\nimport { TicketGroup, NormalizedTicketGroup } from \"../types/TicketGroups\";\nimport { State, Props, DefaultProps, Manifest } from \"../types/TicketMap\";\n\nimport {\n  $availableTicketGroups,\n  $missingSectionIds,\n  $ticketGroupsBySection,\n  $venueSections,\n  $costRanges,\n} from \"../utils/selectors\";\n\nexport * from \"../types/TicketMap\";\n\nexport interface PublicApi {\n  updateTicketGroups: (ticketGroups: TicketGroup[]) => void;\n  highlightSection: (section: string) => void;\n  unhighlightSection: (section?: string) => void;\n  selectSection: (section: string) => void;\n  deselectSection: (section?: string) => void;\n}\n\ninterface ElementProperties {\n  [key: string]: string;\n}\n\ntype PropertiesForElement = (element: Element) => ElementProperties;\n\nclass MapNotFoundError extends Error {\n  name = \"MapNotFoundError\";\n  constructor(message = \"This map is not currently available.\") {\n    super(message);\n  }\n}\n\nexport const highlightedSectionColor = \"#4a4a4a\";\nexport const unhighlightedSectionColor = \"#FFFFFF\";\n\n// Needed to support SSR in some cases - in case user wants to prerender/cache map html serverside.\nconst { fetch: isomorphicFetch } = fetchPonyfill();\nexport class TicketMap extends Component<Props & DefaultProps, State> {\n  publicApi: PublicApi;\n  mapRoot = React.createRef<HTMLDivElement>();\n  container = React.createRef<HTMLDivElement>();\n  zoom?: ZoomControl;\n\n  static defaultProps: DefaultProps = {\n    mapsDomain: \"https://maps.ticketevolution.com\",\n    onSelection: () => {},\n    selectedSections: [],\n    sectionPercentiles: {\n      \"0.2\": \"#FFC515\",\n      \"0.4\": \"#f2711c\",\n      \"0.6\": \"#D6226A\",\n      \"0.8\": \"#a333c8\",\n      \"1\": \"#2A6EBB\",\n    },\n    ticketGroups: [],\n    showLegend: true,\n    showLegendOpenAlwaysForDesktop: false,\n    showControls: true,\n    openLegendInitially: false,\n    mouseControlEnabled: true,\n    showZoomHelper: true,\n    mapFontFamily: \"inherit\",\n  };\n\n  constructor(props: Props & DefaultProps) {\n    super(props);\n    this.state = {\n      sectionMapping: {},\n      selectedSections: new Set(\n        this.props.selectedSections.filter((section) => !!section),\n      ),\n      tooltipActive: false,\n      tooltipSectionName: \"\",\n      tooltipX: 0,\n      tooltipY: 0,\n      ticketGroups: this.props.ticketGroups,\n      mapNotFound: false,\n      touchStarts: {},\n      dragging: false,\n      isTouchDevice: false,\n    };\n\n    this.publicApi = {\n      updateTicketGroups: this.updateTicketGroups,\n      highlightSection: this.highlightSection,\n      unhighlightSection: this.unhighlightSection,\n      selectSection: this.selectSection,\n      deselectSection: this.deselectSection,\n    };\n  }\n\n  isTouchDevice = () => {\n    return \"ontouchstart\" in document.documentElement;\n  };\n\n  /**\n   * Lifecycle\n   */\n\n  async componentDidMount() {\n    this.setState({\n      isTouchDevice: this.isTouchDevice(),\n    });\n\n    try {\n      await this.fetchMap();\n      this.setupMap();\n      await this.fetchManifest();\n      this.updateMap();\n    } catch (error) {\n      console.error(error);\n      if (\n        error &&\n        typeof error === \"object\" &&\n        \"name\" in error &&\n        error.name === \"MapNotFoundError\"\n      ) {\n        this.setState({ mapNotFound: true });\n      }\n    }\n  }\n\n  componentWillUnmount() {\n    if (this.zoom) {\n      this.zoom.teardown();\n    }\n  }\n\n  componentDidUpdate(_prevProps: Props, prevState: State) {\n    const availableTicketGroupsDidChange =\n      $availableTicketGroups(prevState) !== $availableTicketGroups(this.state);\n    const isNoLongerHoveringOnSection =\n      prevState.currentHoveredSection !== undefined &&\n      this.state.currentHoveredSection === undefined;\n    const selectedSectionsDidChange = !isEqual(\n      this.state.selectedSections,\n      prevState.selectedSections,\n    );\n\n    if (\n      this.mapRoot.current &&\n      (isNoLongerHoveringOnSection ||\n        availableTicketGroupsDidChange ||\n        selectedSectionsDidChange)\n    ) {\n      this.updateMap();\n    }\n\n    if (selectedSectionsDidChange) {\n      this.props.onSelection(Array.from(this.state.selectedSections));\n    }\n\n    if (\n      $missingSectionIds(prevState) !== $missingSectionIds(this.state) &&\n      $missingSectionIds(this.state).length > 0\n    ) {\n      console.warn(\n        \"Unknown section names found in ticket groups: %o\",\n        $missingSectionIds(this.state),\n      );\n    }\n\n    if (\n      _prevProps.mouseControlEnabled !== this.props.mouseControlEnabled &&\n      this.zoom\n    ) {\n      if (this.props.mouseControlEnabled) {\n        this.zoom.enable();\n      } else {\n        this.zoom.disable();\n      }\n    }\n  }\n\n  async fetchMap() {\n    const mapResponse = await isomorphicFetch(`${this.configFilePath}/map.svg`);\n    if (!mapResponse.ok) {\n      throw new MapNotFoundError();\n    }\n    const mapHtml = await mapResponse.text();\n    // Can't use dangerouslySetInnerHTML={{ __html: this.state.mapHtml }} in this case because\n    // re-rendering would inject all this HTML again, which would break all the event bindings\n    // we set in future methods.\n    if (this.mapRoot.current) {\n      this.mapRoot.current.innerHTML = mapHtml;\n      const svg = this.mapRoot.current.querySelector(\"svg\");\n      if (svg && this.props.mouseControlEnabled) {\n        this.zoom = initializeZoom(svg);\n      }\n    }\n  }\n\n  async fetchManifest() {\n    const manifestResponse = await isomorphicFetch(\n      `${this.configFilePath}/manifest.json`,\n    );\n    if (!manifestResponse.ok) {\n      throw Error(\n        \"There was an error fetching the venue map data, please try again\",\n      );\n    }\n\n    const manifest: Manifest = await manifestResponse.json();\n\n    this.setState({\n      sectionMapping: Object.keys(manifest.sections).reduce(\n        (memo, sectionName) => ({\n          ...memo,\n          [sectionName.toLowerCase()]: {\n            sectionName,\n          },\n        }),\n        {},\n      ),\n    });\n  }\n\n  getMapRootElement = () => {\n    return this.mapRoot.current;\n  };\n\n  setupMap() {\n    const mapRootElement = this.getMapRootElement();\n    if (!mapRootElement) {\n      return;\n    }\n    const mapSvg = mapRootElement.querySelector(\"svg\");\n    if (!mapSvg) {\n      return;\n    }\n\n    Object.assign(mapSvg.style, {\n      position: \"absolute\",\n      zIndex: 0,\n      top: 0,\n      left: 0,\n      height: \"100%\",\n      width: \"100%\",\n    });\n\n    this.setUnavailableColors();\n\n    mapSvg\n      .querySelectorAll<HTMLElement>(\"*[data-section-id]\")\n      .forEach((path) => {\n        const sectionId = path.getAttribute(\"data-section-id\");\n        if (!sectionId) {\n          return;\n        }\n        path.setAttribute(\"data-section-id\", sectionId.toLowerCase());\n      });\n\n    mapSvg.querySelectorAll<HTMLElement>(\"text\").forEach((text) => {\n      text.style.pointerEvents = \"none\";\n    });\n\n    this.setState({ mapSvg });\n  }\n\n  /**\n   * Properties\n   */\n\n  get configFilePath() {\n    return `${this.props.mapsDomain}/${this.props.venueId}/${this.props.configurationId}`;\n  }\n\n  /**\n   * Public Methods\n   */\n\n  highlightSection = (section: string) =>\n    this.toggleSectionHighlight(section, true);\n\n  unhighlightSection = (section?: string) => {\n    if (!section) {\n      return this.setState({ currentHoveredSection: undefined });\n    }\n    return this.toggleSectionHighlight(section, false);\n  };\n\n  selectSection = (section: string) => this.toggleSectionSelect(section, true);\n\n  deselectSection = (section?: string) => {\n    if (!section) {\n      return this.clearSelection();\n    }\n    return this.toggleSectionSelect(section, false);\n  };\n\n  updateTicketGroups = (ticketGroups = this.props.ticketGroups) =>\n    this.setState({ ticketGroups });\n\n  /**\n   * Colors\n   */\n\n  setUnavailableColors = () =>\n    this.fillPathsForSection((element) => ({\n      \"data-unavailable-color\": element.getAttribute(\"fill\") as string,\n    }));\n\n  fillUnavailableColors = () =>\n    this.fillPathsForSection((element) => ({\n      fill: element.getAttribute(\"data-unavailable-color\") as string,\n      opacity: \"1\",\n      \"stroke-width\": \"1\",\n      stroke: unhighlightedSectionColor,\n    }));\n\n  fillPathsForSection = (\n    propertiesForElement: PropertiesForElement,\n    section?: string,\n  ): void =>\n    this.getAllPaths(section).forEach((element) =>\n      Object.entries(propertiesForElement(element)).forEach(\n        ([property, value]) => element.setAttribute(property, value),\n      ),\n    );\n\n  getAllPaths = (id?: string) => {\n    const mapRootElement = this.getMapRootElement();\n    if (!mapRootElement) {\n      return [];\n    }\n\n    return Array.from(\n      mapRootElement.querySelectorAll(\n        `[data-section-id${id ? `=\"${id}\"` : \"\"}]`,\n      ),\n    ).reduce((memo, element) => {\n      const children = element.querySelectorAll(\"path\");\n      return memo.concat(children.length ? Array.from(children) : [element]);\n    }, [] as Element[]);\n  };\n\n  /**\n   * Helpers\n   */\n\n  clearSelection = () => {\n    this.setState({\n      selectedSections: new Set(),\n    });\n  };\n\n  toggleSectionHighlight = (section?: string, shouldHighlight = true) => {\n    if (!section) {\n      return;\n    }\n\n    const sectionId = section.toLowerCase();\n    const isUnhighlightingSelectedSection =\n      !shouldHighlight && this.state.selectedSections.has(sectionId);\n    if (isUnhighlightingSelectedSection) {\n      return;\n    }\n\n    return this.fillSection(sectionId, shouldHighlight);\n  };\n\n  toggleSectionSelect = (section?: string | null, shouldHighlight = true) => {\n    if (!section) {\n      return;\n    }\n\n    const sectionId = section.toLowerCase();\n    if (!$venueSections(this.state).includes(sectionId)) {\n      return;\n    }\n\n    const selectedSections = new Set(this.state.selectedSections);\n    if (shouldHighlight) {\n      selectedSections.add(sectionId);\n    } else {\n      selectedSections.delete(sectionId);\n    }\n\n    this.setState({ selectedSections });\n  };\n\n  updateMap() {\n    this.fillUnavailableColors();\n    $venueSections(this.state).forEach((section) => {\n      this.fillSection(\n        section.toLowerCase(),\n        this.state.selectedSections.has(section),\n      );\n    });\n  }\n\n  fillSection(section: string, shouldHighlight = true) {\n    const isAnAvailableSection = $venueSections(this.state).includes(section);\n    if (isAnAvailableSection) {\n      this.fillPathsForSection(\n        () => ({\n          fill: this.getDefaultColor(\n            $ticketGroupsBySection(this.state)[section],\n          ),\n          opacity: shouldHighlight ? \"1\" : \"0.6\",\n          \"stroke-width\": \"1\",\n          stroke: shouldHighlight\n            ? highlightedSectionColor\n            : unhighlightedSectionColor,\n          cursor: \"pointer\",\n        }),\n        section,\n      );\n    }\n  }\n\n  getSectionFromTarget(target?: HTMLElement | null) {\n    if (!target) {\n      return;\n    }\n    const element = target.closest(\"[data-section-id]\");\n    if (!element) {\n      return;\n    }\n\n    const sectionId = element.getAttribute(\"data-section-id\");\n    if (!sectionId) {\n      return;\n    }\n\n    return sectionId.toLowerCase();\n  }\n\n  /**\n   * Coloring\n   */\n\n  getDefaultColor(ticketGroups: NormalizedTicketGroup[] = []): string {\n    const lowestTicketPriceInSection =\n      ticketGroups.length > 0\n        ? Math.min(...ticketGroups.map(({ price }) => price))\n        : 0;\n\n    const ranges = $costRanges(this.state, this.props);\n    if (ranges.length === 0) return \"#CCCCCC\";\n\n    for (const range of ranges) {\n      if (range.max >= lowestTicketPriceInSection) {\n        return range.color;\n      }\n    }\n\n    return ranges[ranges.length - 1].color;\n  }\n\n  /**\n   * Interaction Callbacks\n   */\n\n  onMouseOver = ({\n    clientX,\n    clientY,\n    target,\n  }: React.MouseEvent<HTMLElement>) => {\n    if (this.state.isTouchDevice) return;\n    this.doHover(target as HTMLElement, clientX, clientY);\n  };\n\n  onMouseOut = ({ relatedTarget }: React.MouseEvent<HTMLElement>) => {\n    if (this.state.isTouchDevice) return;\n    this.doHoverCleanup(relatedTarget as HTMLElement);\n  };\n\n  onMouseMove = ({ nativeEvent }: React.MouseEvent<HTMLElement>) =>\n    this.setState({\n      tooltipX: nativeEvent.clientX,\n      tooltipY: nativeEvent.clientY,\n    });\n\n  onClick = () => this.doSelect();\n\n  onTouchStart = (e: React.TouchEvent<HTMLElement>) => {\n    const section = this.getSectionFromTarget(e.target as HTMLElement);\n    if (section) {\n      this.setState({\n        currentHoveredSection: section,\n      });\n      this.highlightSection(section);\n    }\n  };\n\n  onTouchMove = () => {\n    this.setState({ dragging: true });\n  };\n\n  onTouchEnd = (e: React.TouchEvent<HTMLElement>) => {\n    const section = this.state.currentHoveredSection;\n    if (section) {\n      this.doSelect(section);\n      this.setState({ currentHoveredSection: undefined });\n    }\n    if (this.state.dragging) {\n      e.preventDefault();\n    }\n    this.setState({ dragging: false });\n  };\n\n  /**\n   * Interactions\n   */\n\n  doHover(target: HTMLElement, tooltipX?: number, tooltipY?: number) {\n    const section = this.getSectionFromTarget(target);\n    if (!section) {\n      return;\n    }\n\n    if (!$venueSections(this.state).includes(section)) {\n      return;\n    }\n\n    this.highlightSection(section);\n    this.setState({\n      tooltipActive: tooltipX !== undefined && tooltipY !== undefined,\n      tooltipX: tooltipX !== undefined ? tooltipX : 0,\n      tooltipY: tooltipY !== undefined ? tooltipY : 0,\n      tooltipSectionName: this.state.sectionMapping[section].sectionName,\n      currentHoveredSection: section,\n    });\n  }\n\n  doHoverCleanup(enteringElement: HTMLElement): void {\n    const isEnteringText =\n      !!enteringElement && enteringElement.nodeName.toLowerCase() === \"text\";\n    if (isEnteringText) {\n      return;\n    }\n\n    const enteringSection = this.getSectionFromTarget(enteringElement);\n    const isEnteringTheSameSection =\n      !!enteringSection && enteringSection === this.state.currentHoveredSection;\n    if (isEnteringTheSameSection) {\n      return;\n    }\n\n    this.setState({\n      tooltipActive: false,\n      currentHoveredSection: undefined,\n    });\n  }\n\n  doSelect(section = this.state.currentHoveredSection) {\n    if (!section) {\n      return;\n    }\n    this.toggleSectionSelect(\n      section,\n      !this.state.selectedSections.has(section),\n    );\n  }\n\n  handleZoomIn = () => {\n    if (this.zoom) {\n      this.zoom.zoomIn(0.1);\n    }\n  };\n\n  handleZoomOut = () => {\n    if (this.zoom) {\n      this.zoom.zoomOut(0.1);\n    }\n  };\n\n  handleResetZoom = () => {\n    if (this.zoom) {\n      this.zoom.reset();\n    }\n  };\n\n  render() {\n    if (this.state.mapNotFound) {\n      return (\n        <div\n          style={{\n            height: \"100%\",\n            width: \"100%\",\n            display: \"flex\",\n            flexWrap: \"wrap\",\n            fontFamily: \"Nunito Sans\",\n          }}\n        >\n          <div\n            style={{\n              display: \"flex\",\n              justifyContent: \"center\",\n              alignItems: \"center\",\n              flexDirection: \"column\",\n              textAlign: \"center\",\n              flex: \"1 0 30%\",\n            }}\n          >\n            {this.props.missingSeatMapLogo || <MissingSeatMapLogo />}\n            <div\n              style={{\n                fontWeight: 400,\n                fontSize: \"1.2em\",\n              }}\n            >\n              Seating Chart Coming Soon\n            </div>\n          </div>\n        </div>\n      );\n    }\n\n    return (\n      <div\n        ref={this.container}\n        onMouseOver={this.onMouseOver}\n        onMouseOut={this.onMouseOut}\n        onMouseMove={this.onMouseMove}\n        onClick={this.onClick}\n        onTouchStart={this.onTouchStart}\n        onTouchEnd={this.onTouchEnd}\n        onTouchMove={this.onTouchMove}\n        style={{\n          position: \"relative\",\n          fontFamily: this.props.mapFontFamily,\n          height: \"100%\",\n          width: \"100%\",\n          pointerEvents: this.props.mouseControlEnabled ? \"initial\" : \"none\",\n        }}\n      >\n        {!this.state.isTouchDevice && (\n          <Tooltip\n            isActive={this.state.tooltipActive}\n            x={this.state.tooltipX}\n            y={this.state.tooltipY}\n            name={this.state.tooltipSectionName}\n            color={\n              this.state.currentHoveredSection\n                ? this.getDefaultColor(\n                    $ticketGroupsBySection(this.state)[\n                      this.state.currentHoveredSection\n                    ],\n                  )\n                : \"\"\n            }\n            ticketGroups={$availableTicketGroups(this.state).filter(\n              (ticketGroup) =>\n                ticketGroup.section === this.state.currentHoveredSection,\n            )}\n          />\n        )}\n        <div\n          ref={this.mapRoot}\n          style={{\n            cursor: \"-webkit-grab\",\n            opacity: this.state.mapSvg ? 1 : 0,\n          }}\n        />\n        {this.state.mapSvg && (\n          <Actions\n            onClearSelection={this.clearSelection}\n            ranges={$costRanges(this.state, this.props)}\n            showLegend={this.props.showLegend}\n            showLegendOpenAlwaysForDesktop={\n              this.props.showLegendOpenAlwaysForDesktop\n            }\n            showControls={this.props.showControls}\n            openLegendInitially={this.props.openLegendInitially}\n            onZoomIn={this.handleZoomIn}\n            onZoomOut={this.handleZoomOut}\n            onResetZoom={this.handleResetZoom}\n          />\n        )}\n        {this.state.isTouchDevice &&\n          this.props.mouseControlEnabled &&\n          this.props.showZoomHelper && <ZoomHelper />}\n      </div>\n    );\n  }\n}\n","import React from \"react\";\nimport Legend from \"../Legend\";\nimport Button from \"../Button\";\nimport ActionGroup from \"./ActionGroup\";\nimport type { CostRange } from \"../TicketMap\";\nimport { IconPlus } from \"../icons/Plus\";\nimport { IconMinus } from \"../icons/Minus\";\nimport { IconUndo } from \"../icons/Undo\";\nimport { IconClose } from \"../icons/Close\";\n\nexport interface Props {\n  onClearSelection?: () => void;\n  showLegend?: boolean;\n  showControls?: boolean;\n  ranges: CostRange[];\n  onZoomIn: () => void;\n  onZoomOut: () => void;\n  onResetZoom: () => void;\n}\n\ninterface DefaultProps {\n  showLegend: boolean;\n  showLegendOpenAlwaysForDesktop: boolean;\n  openLegendInitially: boolean;\n  showControls: boolean;\n  onClearSelection(): void;\n}\n\ninterface State {\n  isMobile: boolean;\n}\n\nexport default class Actions extends React.Component<\n  Props & DefaultProps,\n  State\n> {\n  container = React.createRef<HTMLDivElement>();\n  timer?: number;\n\n  state: State = {\n    // initial value, would correct itself after first render\n    // TODO: we should refactor this to an FC component and some variant of useMediaQuery\n    isMobile: false,\n  };\n\n  static defaultProps: DefaultProps = {\n    showLegend: true,\n    showLegendOpenAlwaysForDesktop: false,\n    showControls: true,\n    openLegendInitially: false,\n    onClearSelection: () => {},\n  };\n\n  get styles(): { [key: string]: React.CSSProperties } {\n    return {\n      container: {\n        position: \"absolute\",\n        top: this.state.isMobile ? 0 : 10,\n        left: this.state.isMobile ? 0 : 10,\n        right: this.state.isMobile ? 0 : 10,\n        bottom: this.state.isMobile ? 0 : 10,\n        display: \"flex\",\n        alignItems: \"flex-start\",\n        justifyContent: \"space-between\",\n        opacity: 0.9,\n        pointerEvents: \"none\",\n        whiteSpace: \"nowrap\",\n        maxWidth: \"100%\",\n        fontSize: \"0.75em\",\n      },\n      icon: {\n        display: \"inline-block\",\n        fontSize: \"inherit\",\n        height: \"1.333333333em\",\n        overflow: \"visible\",\n        verticalAlign: \"-0.125em\",\n      },\n    };\n  }\n\n  componentDidMount() {\n    this.timer = window.setInterval(this.updateIsMobile, 200);\n  }\n\n  componentWillUnmount() {\n    window.clearInterval(this.timer);\n  }\n\n  updateIsMobile = () => {\n    const currentContainer = this.getCurrentContainer();\n    if (!currentContainer) {\n      return;\n    }\n\n    const isMobile =\n      window.innerWidth < 520 || currentContainer.clientWidth < 400;\n\n    if (this.state.isMobile !== isMobile) {\n      this.setState({ isMobile });\n    }\n  };\n\n  getCurrentContainer = () => {\n    return this.container.current;\n  };\n\n  render() {\n    const { isMobile } = this.state;\n    const { showControls, showLegend } = this.props;\n\n    const showLeftActions = showControls || (isMobile && showLegend);\n    const showRightActions = !isMobile && showLegend;\n\n    return (\n      <div\n        style={this.styles.container}\n        ref={this.container}\n        data-testid=\"seatmaps-actions-menu\"\n      >\n        {showLeftActions && (\n          <ActionGroup>\n            {!isMobile && showControls && (\n              <React.Fragment>\n                <Button\n                  data-rh=\"Default\"\n                  data-custom-at=\"right\"\n                  onClick={this.props.onZoomIn}\n                  icon={<IconPlus />}\n                  isMobile={isMobile}\n                  style={{ borderRight: \"2px solid lightgray\" }}\n                  name=\"zoom-in\"\n                  data-testid=\"zoom-in\"\n                />\n\n                <Button\n                  onClick={this.props.onZoomOut}\n                  icon={<IconMinus />}\n                  isMobile={isMobile}\n                  style={{ borderRight: \"2px solid lightgray\" }}\n                  name=\"zoom-out\"\n                  data-testid=\"zoom-out\"\n                />\n\n                <Button\n                  onClick={this.props.onResetZoom}\n                  icon={<IconUndo />}\n                  text=\"Reset Zoom\"\n                  isMobile={isMobile}\n                  style={{ borderRight: \"2px solid lightgray\" }}\n                  name=\"reset-zoom\"\n                  data-testid=\"reset-zoom\"\n                />\n              </React.Fragment>\n            )}\n            {showControls && (\n              <Button\n                className=\"clear-selection\"\n                onClick={this.props.onClearSelection}\n                icon={<IconClose />}\n                text={`Clear${isMobile ? \"\" : \" All\"}`}\n                isMobile={isMobile}\n                style={{\n                  borderRight: isMobile ? \"2px solid lightgray\" : undefined,\n                }}\n                name=\"clear-selection\"\n              />\n            )}\n            {isMobile && showLegend && (\n              <Legend isMobile ranges={this.props.ranges} />\n            )}\n          </ActionGroup>\n        )}\n        {showRightActions && (\n          <ActionGroup>\n            <Legend\n              ranges={this.props.ranges}\n              showLegendOpenAlwaysForDesktop={\n                this.props.showLegendOpenAlwaysForDesktop\n              }\n              openLegendInitially={this.props.openLegendInitially}\n            />\n          </ActionGroup>\n        )}\n      </div>\n    );\n  }\n}\n","import React, { Component } from \"react\";\nimport Button from \"../Button\";\nimport Swatch from \"./swatch\";\nimport { IconChevronDown } from \"../icons/ChevronDown\";\nimport { IconChevronUp } from \"../icons/ChevronUp\";\n\nconst formatCurrency = new Intl.NumberFormat(undefined, {\n  style: \"currency\",\n  currency: \"USD\",\n  maximumFractionDigits: 0,\n  minimumFractionDigits: 0,\n}).format;\n\nexport interface Range {\n  color: string;\n  min: number;\n  max: number;\n}\n\nexport interface Props {\n  ranges: Range[];\n  isMobile?: boolean;\n  showLegendOpenAlwaysForDesktop?: boolean;\n  openLegendInitially?: boolean;\n}\n\ninterface State {\n  isOpen: boolean;\n}\n\nexport default class Legend extends Component<Props, State> {\n  static defaultProps = {\n    isMobile: false,\n    showLegendOpenAlwaysForDesktop: false,\n    openLegendInitially: false,\n  };\n\n  state = {\n    isOpen: this.props.openLegendInitially || false,\n  };\n\n  render() {\n    const { isOpen } = this.state;\n    const { ranges, isMobile, showLegendOpenAlwaysForDesktop } = this.props;\n\n    return showLegendOpenAlwaysForDesktop && !isMobile ? (\n      <div style={{ position: \"relative\" }}>\n        <div\n          style={{\n            position: \"absolute\",\n            backgroundColor: \"white\",\n            right: -2,\n            border: \"2px solid lightgray\",\n            borderRadius: \"0 0 5px 5px\",\n          }}\n        >\n          <h3 style={{ padding: \"0 0 0 8px\", textAlign: \"left\" }}>\n            Map Legend\n          </h3>\n          {ranges.map((range) => (\n            <div key={range.color} style={{ padding: 8, textAlign: \"left\" }}>\n              <Swatch color={range.color} style={{ marginRight: 8 }} />\n              <span>\n                {formatCurrency(Math.floor(range.min))}\n                {\" - \"}\n                {formatCurrency(Math.ceil(range.max))}\n              </span>\n            </div>\n          ))}\n        </div>\n      </div>\n    ) : (\n      <div style={{ position: \"relative\" }}>\n        <Button\n          onClick={() => this.setState({ isOpen: !isOpen })}\n          icon={isOpen ? <IconChevronUp /> : <IconChevronDown />}\n          text={`${isOpen ? \"Hide \" : \"Show \"}Map Legend`}\n          isMobile={isMobile}\n        />\n        {ranges.length > 0 && isOpen && (\n          <div\n            style={{\n              position: \"absolute\",\n              backgroundColor: \"white\",\n              right: -2,\n              border: \"2px solid lightgray\",\n              borderRadius: \"0 0 5px 5px\",\n            }}\n          >\n            {ranges.map((range) => (\n              <div key={range.color} style={{ padding: 8, textAlign: \"left\" }}>\n                <Swatch color={range.color} style={{ marginRight: 8 }} />\n                <span>\n                  {formatCurrency(Math.floor(range.min))}\n                  {\" - \"}\n                  {formatCurrency(Math.ceil(range.max))}\n                </span>\n              </div>\n            ))}\n          </div>\n        )}\n      </div>\n    );\n  }\n}\n","import React from \"react\";\n\ninterface Props extends React.HTMLProps<HTMLDivElement> {\n  icon?: React.ReactNode;\n  text?: string;\n  isMobile?: boolean;\n}\n\nexport default function Button({\n  icon,\n  text,\n  style,\n  isMobile,\n  ...props\n}: Props) {\n  return (\n    <div\n      {...props}\n      style={{\n        backgroundColor: \"transparent\",\n        borderRadius: 0,\n        padding: isMobile ? \"0.25em 0.5em\" : \"0.5em 1em\",\n        outline: \"none\",\n        cursor: \"pointer\",\n        border: \"none\",\n        display: \"flex\",\n        alignItems: \"center\",\n        justifyContent: \"center\",\n        gap: isMobile ? \"4px\" : \"6px\",\n        ...(style || {}),\n      }}\n    >\n      {icon}\n      {text}\n    </div>\n  );\n}\n","import React, { CSSProperties } from \"react\";\n\nexport interface Props {\n  style?: CSSProperties;\n  color: string;\n}\n\nexport default (props: Props) => (\n  <div\n    style={{\n      ...(props.style || {}),\n      height: 14,\n      width: 14,\n      borderRadius: 4,\n      backgroundColor: props.color,\n      display: \"inline-block\",\n    }}\n  />\n);\n","import React from \"react\";\n\nexport const IconChevronDown = () => (\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 512 512\">\n    <path\n      fill=\"currentColor\"\n      d=\"M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z\"\n    />\n  </svg>\n);\n","import React from \"react\";\n\nexport const IconChevronUp = () => (\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 512 512\">\n    <path\n      fill=\"currentColor\"\n      d=\"M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z\"\n    />\n  </svg>\n);\n","import React from \"react\";\n\nexport default function (props: React.HTMLProps<HTMLDivElement>) {\n  return (\n    <div\n      {...props}\n      style={{\n        pointerEvents: \"all\",\n        border: \"2px solid lightgray\",\n        borderRadius: 5,\n        display: \"flex\",\n        backgroundColor: \"white\",\n        ...(props.style || {}),\n      }}\n    />\n  );\n}\n","import React from \"react\";\n\nexport const IconPlus = () => (\n  <svg width=\"14\" height=\"16\" viewBox=\"0 0 448 512\">\n    <path\n      fill=\"currentColor\"\n      d=\"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32v144H48c-17.7 0-32 14.3-32 32s14.3 32 32 32h144v144c0 17.7 14.3 32 32 32s32-14.3 32-32V288h144c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z\"\n    />\n  </svg>\n);\n","import React from \"react\";\n\nexport const IconMinus = () => (\n  <svg width=\"14\" height=\"16\" viewBox=\"0 0 448 512\">\n    <path\n      fill=\"currentColor\"\n      d=\"M432 256c0 17.7-14.3 32-32 32H48c-17.7 0-32-14.3-32-32s14.3-32 32-32h352c17.7 0 32 14.3 32 32z\"\n    />\n  </svg>\n);\n","import React from \"react\";\n\nexport const IconUndo = () => (\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 512 512\">\n    <path\n      fill=\"currentColor\"\n      d=\"M48.5 224H40c-13.3 0-24-10.7-24-24V72c0-9.7 5.8-18.5 14.8-22.2S50.1 48.1 57 55l41.6 41.6c87.6-86.5 228.7-86.2 315.8 1 87.5 87.5 87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3c-62.2-62.2-162.7-62.5-225.3-1L185 183c6.9 6.9 8.9 17.2 5.2 26.2S177.7 224 168 224H48.5z\"\n    />\n  </svg>\n);\n","import React from \"react\";\n\nexport const IconClose = () => (\n  <svg width=\"16\" height=\"16\" viewBox=\"0 0 512 512\">\n    <path\n      fill=\"currentColor\"\n      d=\"M256 512a256 256 0 1 0 0-512 256 256 0 1 0 0 512zm-81-337c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"\n    />\n  </svg>\n);\n","import React, { Component, CSSProperties } from \"react\";\nimport { NormalizedTicketGroup } from \"../types/TicketGroups\";\n\nexport const defaultDirection = [\"up\", \"right\"];\n\nexport const formatCurrency = new Intl.NumberFormat(undefined, {\n  style: \"currency\",\n  currency: \"USD\",\n}).format;\n\nexport interface Props {\n  x?: number;\n  y?: number;\n  color?: string;\n  isActive?: boolean;\n  ticketGroups?: NormalizedTicketGroup[];\n  name?: string;\n}\n\ninterface DefaultProps {\n  x: number;\n  y: number;\n  color: string;\n  isActive: boolean;\n  ticketGroups: NormalizedTicketGroup[];\n  name: string;\n}\n\ninterface Point {\n  x: number;\n  y: number;\n}\n\nexport default class Tooltip extends Component<Props & DefaultProps> {\n  container = React.createRef<HTMLDivElement>();\n\n  static defaultProps: DefaultProps = {\n    isActive: false,\n    ticketGroups: [],\n    name: \"\",\n    x: 0,\n    y: 0,\n    color: \"#000000\",\n  };\n\n  direction(): string[] {\n    const container = this.container.current;\n    const { x, y } = this.props;\n    const direction = [...defaultDirection];\n\n    if (!container || !container.parentElement) {\n      return direction;\n    }\n\n    // display to the left of the cursor when the right side of the tooltip is clipped\n    if (x + container.clientWidth > container.parentElement.clientWidth) {\n      direction[1] = \"left\";\n    }\n\n    // display beneath the cursor when the top of the tooltip is clipped\n    if (y < container.clientHeight) {\n      direction[0] = \"down\";\n    }\n\n    return direction;\n  }\n\n  position(): Point {\n    const direction = this.direction();\n    const point = {\n      x: this.props.x,\n      y: this.props.y,\n    };\n\n    const container = this.container.current;\n    if (container) {\n      if (direction[0] === \"up\") {\n        point.y -= container.clientHeight;\n      }\n\n      if (direction[1] === \"left\") {\n        point.x -= container.clientWidth;\n      }\n    }\n\n    return point;\n  }\n\n  tipStyle(): CSSProperties {\n    const direction = this.direction();\n\n    const style: CSSProperties = {\n      width: 0,\n      height: 0,\n      borderStyle: \"solid\",\n    };\n\n    if (direction[0] === \"down\") {\n      if (direction[1] === \"right\") {\n        style.borderWidth = \"10px 0 0 10px\";\n        style.borderColor = \"transparent transparent transparent white\";\n      } else {\n        style.borderWidth = \"0 0 10px 10px\";\n        style.borderColor = \"transparent transparent white transparent\";\n      }\n    } else {\n      if (direction[1] === \"right\") {\n        style.borderWidth = \"10px 10px 0 0\";\n        style.borderColor = \"white transparent transparent transparent\";\n      } else {\n        style.borderWidth = \"0 10px 10px 0\";\n        style.borderColor = \"transparent white transparent transparent\";\n      }\n    }\n\n    return style;\n  }\n\n  containerStyle(): CSSProperties {\n    const { isActive } = this.props;\n    const direction = this.direction();\n    const position = this.position();\n\n    return {\n      position: \"fixed\",\n      zIndex: 1,\n      transition: \"top .1s, left .1s\",\n      opacity: isActive ? 1 : 0,\n      padding: 5,\n      display: \"flex\",\n      flexDirection: direction[0] === \"down\" ? \"column\" : \"column-reverse\",\n      alignItems: direction[1] === \"right\" ? \"flex-start\" : \"flex-end\",\n      filter: \"drop-shadow(rgba(0, 0, 0, 0.5) 0 2px 2px)\",\n      pointerEvents: \"none\",\n      top: position.y,\n      left: position.x,\n    };\n  }\n\n  swatchStyle(): CSSProperties {\n    return {\n      width: 10,\n      height: 10,\n      backgroundColor: this.props.color,\n      display: \"inline-block\",\n      marginRight: 5,\n    };\n  }\n\n  contentStyle(): CSSProperties {\n    return {\n      backgroundColor: \"white\",\n      padding: 20,\n    };\n  }\n\n  nameStyle(): CSSProperties {\n    return {\n      display: \"flex\",\n      alignItems: \"center\",\n    };\n  }\n\n  priceStyle(): CSSProperties {\n    return {\n      fontWeight: 700,\n    };\n  }\n\n  render() {\n    const prices = this.props.ticketGroups\n      .map((ticketGroup) => ticketGroup.price)\n      .sort((a, b) => a - b);\n\n    return (\n      <div\n        ref={this.container}\n        style={this.containerStyle()}\n        data-testid=\"seatmaps-tooltip\"\n      >\n        <div style={this.tipStyle()} />\n        <div style={this.contentStyle()}>\n          <div style={this.nameStyle()}>\n            <div style={this.swatchStyle()} />\n            {this.props.name}\n          </div>\n          <div>\n            {this.props.ticketGroups.length} listing\n            {prices.length !== 1 ? \"s\" : \"\"}\n            {\" ● \"}\n            Starting at{\" \"}\n            <span style={this.priceStyle()}>{formatCurrency(prices[0])}</span>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n","import React, { CSSProperties } from \"react\";\nimport { IconPinchZoomIn } from \"../icons/PinchZoomIn\";\nimport { IconTwoFingerSlide } from \"../icons/TwoFingerSlide\";\n\nconst containerStyle: CSSProperties = {\n  position: \"absolute\",\n  backgroundColor: \"rgba(0, 0, 0, 0.8)\",\n  width: \"100%\",\n  height: \"100%\",\n  padding: \"20% 30%\",\n  boxSizing: \"border-box\",\n  display: \"grid\",\n  gridTemplateColumns: \"50% 50%\",\n  justifyItems: \"center\",\n  alignItems: \"top\",\n  color: \"white\",\n  fontFamily: \"Nunito Sans\",\n  fontSize: \"2vw\",\n  fontWeight: 700,\n  textTransform: \"uppercase\",\n  textAlign: \"center\",\n  opacity: 1,\n  visibility: \"visible\",\n  lineHeight: \"initial\",\n};\n\nconst discoveredStyle: CSSProperties = {\n  transition: \"opacity .4s, visibility .4s\",\n  opacity: 0,\n  visibility: \"hidden\",\n};\n\nconst imageStyle = {\n  width: \"10vw\",\n  alignSelf: \"end\",\n};\n\ninterface State {\n  discovered: boolean;\n}\n\nexport default class ZoomHelper extends React.Component {\n  state: State = {\n    discovered: false,\n  };\n\n  container = React.createRef<HTMLDivElement>();\n\n  hide = () => {\n    this.setState({\n      discovered: true,\n    });\n  };\n\n  getCurrentContainer = () => {\n    return this.container.current;\n  };\n\n  shouldHide = (bounds: DOMRect) => {\n    return (\n      bounds.top < window.innerHeight &&\n      bounds.top + bounds.height > 0 &&\n      bounds.left <= window.innerWidth &&\n      bounds.left + bounds.width > 0\n    );\n  };\n\n  handleViewportChange = () => {\n    if (this.state.discovered) {\n      return;\n    }\n\n    const currentContainer = this.getCurrentContainer();\n    if (!currentContainer) {\n      return;\n    }\n\n    const bounds = currentContainer.getBoundingClientRect();\n    if (this.shouldHide(bounds)) {\n      setTimeout(this.hide, 4000);\n    }\n  };\n\n  componentDidMount() {\n    setTimeout(() => {\n      window.addEventListener(\"wheel\", this.handleViewportChange);\n      window.addEventListener(\"resize\", this.handleViewportChange);\n      this.handleViewportChange();\n    }, 500);\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener(\"wheel\", this.handleViewportChange);\n    window.removeEventListener(\"resize\", this.handleViewportChange);\n  }\n\n  render() {\n    const style = {\n      ...containerStyle,\n      ...(this.state.discovered ? discoveredStyle : {}),\n    };\n\n    return (\n      <div style={style} ref={this.container} onClick={this.hide}>\n        <link\n          href=\"https://fonts.googleapis.com/css?family=Nunito+Sans&display=swap\"\n          rel=\"stylesheet\"\n        />\n        <IconPinchZoomIn className=\"zoom-in-icon\" style={imageStyle} />\n        <IconTwoFingerSlide className=\"slide-icon\" style={imageStyle} />\n        <div>pinch to zoom in/out</div>\n        <div>use two fingers to move map</div>\n      </div>\n    );\n  }\n}\n","import React from \"react\";\n\nexport const IconPinchZoomIn = (props: React.SVGProps<SVGSVGElement>) => (\n  <svg viewBox=\"0 0 50 62.5\" {...props}>\n    <path\n      fillRule=\"evenodd\"\n      d=\"M18.343 7.009a1.92 1.92 0 0 1 2.498 1.035l6.576 15.882c.173.427.72.658 1.152.478a.88.88 0 0 0 .478-1.151l-2.317-5.597a1.901 1.901 0 0 1 .004-1.457 1.89 1.89 0 0 1 1.031-1.035 1.889 1.889 0 0 1 1.461.002c.475.197.841.562 1.035 1.032l2.68 6.475A.881.881 0 1 0 34.57 22l-1.698-4.107c-.18-.433-.18-.917.004-1.358.181-.439.52-.782.955-.963a1.781 1.781 0 0 1 2.321.962l1.897 4.581a.887.887 0 0 0 1.152.478.883.883 0 0 0 .478-1.154l-.917-2.213a1.78 1.78 0 0 1 .965-2.313 1.735 1.735 0 0 1 1.356.004c.441.181.782.522.963.955l5.132 12.506.074.213c.458 1.86.492 4.098.524 6.263.028 1.86.056 3.633.331 5.194l-13.916 5.761c-3.021-1.824-4.788-2.568-6.21-3.16-1.615-.674-2.781-1.159-5.071-2.885-1.056-.794-2.195-1.872-3.296-2.913-1.345-1.269-2.61-2.469-3.774-3.229-1.196-.781-2.433-2.207-2.301-3.003.115-.655 1.347-.787 1.872-.813a5.642 5.642 0 0 1 1.858.222c.509.151.989.369 1.426.65 1.071.689 4.72 2.929 7.577 3.424.356.059.651.067.932-.204.248-.231.365-.653.223-.969L17.312 9.506a1.914 1.914 0 0 1 1.031-2.497m4.127.361c-.777-1.87-2.933-2.767-4.799-1.988a3.68 3.68 0 0 0-1.99 4.799l9.432 22.783c-2.331-.805-4.881-2.392-5.467-2.769a7.432 7.432 0 0 0-4.329-1.152c-2.746.138-3.382 1.484-3.519 2.277-.333 1.974 1.866 3.988 3.075 4.779 1.03.672 2.241 1.818 3.527 3.031 1.136 1.077 2.314 2.187 3.445 3.039 2.469 1.861 3.788 2.409 5.452 3.105 1.502.626 3.204 1.336 6.357 3.27a.882.882 0 0 0 .462.128c.11 0 .227-.022.337-.066l15.001-6.211a.881.881 0 0 0 .52-1.023c-.377-1.539-.407-3.487-.439-5.549-.032-2.263-.068-4.602-.574-6.656a2.938 2.938 0 0 0-.152-.459l-5.135-12.51a3.497 3.497 0 0 0-1.918-1.912 3.493 3.493 0 0 0-4.188 1.174c-.874-1.521-2.752-2.211-4.411-1.519a3.518 3.518 0 0 0-1.483 1.178 3.63 3.63 0 0 0-1.776-1.581 3.639 3.639 0 0 0-2.809-.004 3.609 3.609 0 0 0-1.554 1.24L22.47 7.37zm-6.233-5.449a7.673 7.673 0 0 0-4.184 4.185 7.663 7.663 0 0 0 0 5.92c.176.43.389.836.629 1.214a.882.882 0 0 0 1.485-.95 5.867 5.867 0 0 1-.487-.939 5.956 5.956 0 0 1 0-4.563 5.952 5.952 0 0 1 3.232-3.241 5.945 5.945 0 0 1 4.572.002 5.939 5.939 0 0 1 3.229 3.232c.14.339.249.686.323 1.031a.875.875 0 0 0 1.051.674.884.884 0 0 0 .674-1.047 8.235 8.235 0 0 0-.418-1.332 7.69 7.69 0 0 0-4.184-4.186 7.677 7.677 0 0 0-5.922 0zm2.993 23.885a7.382 7.382 0 0 0-5.642-.783 7.386 7.386 0 0 0-4.542 3.436 7.381 7.381 0 0 0-.78 5.641 7.38 7.38 0 0 0 3.435 4.542c.387.227.786.413 1.19.564.447.18.965-.068 1.133-.517a.879.879 0 0 0-.517-1.132 5.757 5.757 0 0 1-.913-.435 5.652 5.652 0 0 1-2.624-3.465 5.641 5.641 0 0 1 .598-4.305 5.64 5.64 0 0 1 3.466-2.624 5.65 5.65 0 0 1 4.304.598c.303.176.58.377.837.595a.88.88 0 0 0 1.244-.094.885.885 0 0 0-.096-1.245 7.708 7.708 0 0 0-1.093-.776zM3.39 6.724a.882.882 0 0 0 1.056 1.412l.752-.562L2.15 28.582l-.564-.755a.88.88 0 1 0-1.411 1.055l1.836 2.457a.882.882 0 0 0 1.232.179L5.7 29.685a.882.882 0 0 0-1.055-1.413l-.753.562L6.94 7.827l.564.755a.884.884 0 0 0 1.232.178.879.879 0 0 0 .179-1.234L7.079 5.069a.88.88 0 0 0-1.232-.179L3.39 6.724z\"\n      clipRule=\"evenodd\"\n      fill=\"#fff\"\n    />\n  </svg>\n);\n","import React from \"react\";\n\nexport const IconTwoFingerSlide = (props: React.SVGProps<SVGSVGElement>) => (\n  <svg xmlSpace=\"preserve\" viewBox=\"0 0 48 60\" {...props}>\n    <g\n      fill=\"none\"\n      stroke=\"#FFF\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      strokeMiterlimit=\"10\"\n      strokeWidth=\"2\"\n    >\n      <path d=\"M19 32V6a3 3 0 0 1 6 0v17M25 13V4a3 3 0 0 1 6 0v20M31 26v-7a3 3 0 0 1 6 0v10\" />\n      <path d=\"M37 29v-6a3 3 0 0 1 6 0v9c0 8.284-6.716 15-15 15s-15-6.716-15-15v-7c0-3.313 2.688-6 6-6M9 14l-2 2-2-2M9 5 7 3 5 5M7 3v13\" />\n    </g>\n  </svg>\n);\n","import React from \"react\";\n\nexport default function MissingSeatMapLogo() {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      data-name=\"Layer 2\"\n      viewBox=\"0 0 551.25 356.37\"\n      width=\"145\"\n      height=\"145\"\n    >\n      <path\n        d=\"M551.25 199.17c-2.23 4.39-4.41 9.15-9.58 10.46-4.67 1.18-9.61 1.29-15.05 1.95 0 9.76-.04 19.67.08 29.59.01.81 1.08 1.75 1.86 2.38 2.87 2.33 4.24 5.22 3.05 8.8-1.2 3.61-3.73 5.82-7.77 5.82-12.04 0-24.07.03-36.11-.02-3.75-.02-6.89-1.98-7.34-5.5-.35-2.73 1.25-5.75 2.18-8.57.54-1.65 2.08-3.15 2.12-4.75.22-8.07-.05-16.16.17-24.23.09-3.5-1.35-4.23-4.49-4.2-11.4.14-22.81.15-34.21 0-3.33-.05-4.4 1.08-4.36 4.38.15 12.2.15 24.4 0 36.59-.04 3.33 1.11 4.22 4.36 4.4 10.32.59 15.74 6.55 15.82 16.88.05 6.34.05 12.67 0 19.01-.09 10.67-5.99 16.66-16.74 17.07q-7.93.3-7.93 8.22c0 5.07-.03 10.14.01 15.21.03 3.98-.77 7.96 3.59 10.95 1.48 1.01 2.09 5.37 1.17 7.25-1.12 2.28-4.14 4.75-6.58 5.04-6.41.75-12.95.38-19.45.41-5.54.03-11.09 0-16.63-.02-3.83 0-6.89-1.48-8.29-5.17-1.37-3.65-.26-6.72 2.66-9.38 1.01-.92 1.79-2.62 1.82-3.98.17-8.23.21-16.48-.05-24.71-.04-1.29-1.81-3.61-2.79-3.62-19.46-.22-38.92-.16-59.16-.16v6.8c0 6.81-.17 13.63.11 20.43.08 1.87 1.61 3.65 2.29 5.54 1.01 2.79 2.8 5.73 2.55 8.45-.33 3.55-3.48 5.64-7.2 5.67-12.35.09-24.71.28-37.04-.21-2.36-.09-5.85-2.71-6.56-4.9-.79-2.42.89-5.73 1.73-8.57.58-1.95 2.21-3.77 2.26-5.67.25-8.98.11-17.98.11-26.85-10.43-2.03-20.39-1.77-30.33-.54-.92.11-2.3 2-2.32 3.09-.19 8.55-.2 17.11-.01 25.66.03 1.31 1.11 2.83 2.12 3.82 2.64 2.59 3.78 5.49 2.46 9.01-1.3 3.49-3.98 5.24-7.7 5.25-11.88.03-23.76.06-35.63 0-3.84-.02-6.73-1.85-7.98-5.59-1.2-3.58.19-6.36 2.91-8.86 1.09-1 1.94-2.83 1.97-4.3.19-8.07-.04-16.16.15-24.23.08-3.18-1.08-4.07-4.12-4.05-18.06.1-36.11.1-54.17 0-3.02-.02-4.25.86-4.14 4.05.2 6.33.03 12.67.07 19.01.03 4.13-.38 7.86 3.63 11.37 4.69 4.1 1.08 11.87-5.48 12.45-5.19.45-10.44.22-15.67.23-6.97.01-13.94 0-20.91-.07-3.68-.03-6.47-1.7-7.8-5.16-1.33-3.47-.21-6.41 2.37-9.06 1.08-1.1 2.07-2.84 2.1-4.31.2-8.23 0-16.47.15-24.71.05-2.91-.99-3.97-3.87-3.81-2.36.13-4.76.01-7.1-.33-7.82-1.16-13.1-7-13.3-14.89-.18-7.12-.14-14.26-.06-21.38.11-9.71 5.69-15.83 15.43-16.27 3.88-.18 4.77-1.49 4.71-5.06-.18-11.72-.19-23.45 0-35.16.06-3.78-.84-5.33-4.97-5.23-11.24.27-22.49.2-33.73.03-3.52-.06-4.76 1.09-4.64 4.62.22 6.33.05 12.67.06 19.01 0 4.02-.28 7.6 3.61 10.96 4.47 3.86 1.05 12.23-5.01 12.44-12.81.46-25.66.4-38.46-.1-2.25-.09-5.51-3.04-6.25-5.33-.74-2.28.3-6.15 2.01-7.96 2-2.12 2.55-3.99 2.53-6.59-.07-8.7-.03-17.4-.03-26.64-2.78-.13-5.24-.27-7.7-.34-10.7-.36-16.63-6.31-16.72-17.01-.05-6.49-.07-12.99 0-19.48.11-9.69 5.75-15.97 15.38-16.38 4.09-.17 4.95-1.61 4.89-5.36-.2-12.83-.15-25.66-.03-38.49.06-6.33 3.4-9.67 8.8-9.28 4.66.34 7.24 3.69 7.28 9.9.08 12.2.02 24.4.03 36.59q0 6.45 6.37 6.46c20.43 0 40.86-.11 61.29.09 4.15.04 5.57-1.06 5.35-5.31-.52-10.36.23-20.59 5.37-29.99 8.18-14.95 20.93-22.81 37.78-24.27 1.42-.12 2.84-.22 4.26-.34.14-.01.28-.13.94-.44.12-1.04.4-2.38.4-3.72.03-15.68.16-31.37-.02-47.05-.2-17.59-11.42-29.92-28.62-30.32-22-.51-44.03-.42-66.03.15-14.28.37-25.71 11.81-26.71 26.1-.67 9.62-.25 19.31-.41 28.97-.03 2.03.24 4.65-.86 5.96-1.85 2.21-4.5 4.56-7.16 5.07-3.39.66-7.26-1.57-7.38-5.22-.58-17.45-3.94-35.41 4.15-51.92C32.78 10.06 45.93 1.01 63.62.56c22-.56 44.05-.89 66.02-.07 26.79 1 44.35 20 44.66 46.88.17 15.05.03 30.1.04 45.15v5.76c7.58 0 14.65.17 21.69-.21.9-.05 2.36-2.88 2.38-4.44.18-14.89.04-29.78.14-44.67.05-8.3 1.14-16.5 5.14-23.9C212.22 9.26 225.61.64 243.57.39c22.64-.32 45.3-.43 67.92.35 20.65.71 39.1 18.73 40.31 39.3 1.03 17.52.75 35.13.77 52.7 0 4.18.9 5.98 5.5 5.67 5.98-.42 12.01-.1 18.59-.1.1-2.11.26-3.94.26-5.77.02-15.05-.11-30.1.05-45.15.23-22.86 12.92-39.73 34.32-45.65 3.47-.96 7.19-1.39 10.79-1.4 22.49-.03 44.99-.38 67.45.38 20.74.7 38.92 18.24 40.78 38.97 1.03 11.48.66 23.1.6 34.65-.03 5.22-3.26 8.16-7.95 8.17-4.66.02-7.81-2.89-7.97-8.18-.26-8.7-.07-17.42-.13-26.13-.13-19.71-11.99-31.73-31.67-31.79-20.9-.07-41.82-.26-62.71.3-13.96.37-25.85 10.66-26.65 24.4-1.09 18.76-.27 37.63-.27 56.79 1.15.15 2.35.39 3.57.47 26.63 1.82 44.28 20.42 44.72 47.15.05 3.01.1 6.02 0 9.03-.09 2.4.83 3.43 3.3 3.42 22.17-.04 44.35-.06 66.52.02 3.5.01 3.21-2.16 3.21-4.43 0-12.99-.06-25.98.03-38.97.04-6.1 2.78-9.43 7.53-9.65 5.26-.24 8.48 2.96 8.55 9.06.14 11.88.05 23.76.05 35.64v8.18c9.64-.56 16.65 2.96 20.21 11.9v29.47Zm-364.89 56.98c18.68 0 37.36-.07 56.03.06 3.54.03 5.02-.72 5-4.7-.15-35.3.02-70.61-.13-105.91-.08-18.95-12.42-31.05-31.37-31.12-19.63-.08-39.25-.08-58.88 0-18.94.07-31.39 12.19-31.48 31.04-.16 35.3 0 70.61-.13 105.91-.01 3.85 1.26 4.82 4.92 4.79 18.68-.15 37.35-.07 56.03-.07Zm178.5 0c18.52 0 37.04-.12 55.55.09 4.13.05 5.41-1.04 5.39-5.29-.16-34.82-.04-69.65-.11-104.48-.04-19.79-12.24-31.94-31.96-31.99-19.31-.05-38.62-.05-57.93 0-19.56.05-31.79 12.08-31.85 31.6-.1 34.98.05 69.97-.13 104.95-.02 4.37 1.48 5.24 5.48 5.2 18.52-.19 37.04-.08 55.55-.08ZM275.63 16.63v-.26c-9.66 0-19.32-.05-28.98.01-19.83.12-31.91 12.18-32 32-.07 14.57.2 29.14-.14 43.7-.12 4.98 1.42 6.29 6.28 6.53 18.87.94 35.04 13.36 40.12 31.61 2.08 7.47 2.02 15.6 2.46 23.45.19 3.3 1.1 4.45 4.4 4.32 5.53-.22 11.08-.13 16.62-.04 2.39.04 3.49-.79 3.4-3.3-.12-3.16-.09-6.34 0-9.5.39-14.26 4.96-26.62 16.26-35.97 8.21-6.79 17.58-10.46 28.24-10.83 2.01-.07 4.3.32 4.27-2.93-.17-18.05.37-36.13-.65-54.13-.75-13.27-12.75-23.98-26.09-24.58-11.37-.51-22.79-.1-34.18-.1Zm170.03 255.56h-63.1c-31.35 0-62.7.05-94.04-.06-3.64-.01-5.23.96-4.92 4.8.28 3.46.35 6.99-.01 10.44-.49 4.63 1.24 5.82 5.8 5.8 50.35-.16 100.69-.1 151.04-.1h5.23v-20.88Zm-340.04 20.63c1.51.1 2.59.24 3.67.24 51.28.01 102.56-.03 153.84.09 3.72 0 4.65-1.35 4.42-4.72-.23-3.47-.33-6.99.02-10.44.45-4.51-1.06-5.91-5.73-5.89-50.33.17-100.66.1-150.99.11-1.68 0-3.36.17-5.23.26v20.35Zm-89.23-98.05c30.22 0 59.97-.02 89.72.03 2.53 0 3.31-1.1 3.25-3.45-.1-3.8-.28-7.62.05-11.39.4-4.45-.96-6-5.7-5.96-27.38.22-54.76.1-82.14.12-1.67 0-3.34.16-5.18.26v20.4Zm518.45-.21v-19.78c-.52-.26-.79-.5-1.06-.5-29.61-.06-59.23-.14-88.84-.02-1.02 0-2.81 1.91-2.91 3.05-.36 4.09.14 8.25-.24 12.34-.4 4.36 1.38 5.25 5.41 5.22 27.72-.16 55.43-.08 83.15-.09 1.4 0 2.79-.13 4.48-.21Zm-247.07 38.82c0-6.32-.04-12.64.02-18.96.02-2.28-.63-3.54-3.21-3.49-6 .1-12.01-.12-18 .17-1.07.05-2.93 1.91-2.95 2.96-.2 12.95-.1 25.91-.16 38.87-.01 2.51 1.16 2.99 3.44 3.31 5.57.78 10.97 1.15 16.64.16 3.61-.63 4.38-1.76 4.28-5-.19-6-.05-12.01-.06-18.01Zm-12.13-38.6c2.84 0 5.68-.11 8.51.03 2.57.12 3.75-.74 3.66-3.48-.15-4.57-.14-9.15 0-13.72.08-2.71-1.07-3.61-3.66-3.53-3.94.12-7.88-.02-11.82.04-10.14.13-8.76-1.39-8.82 8.71-.08 11.96-.02 11.96 12.14 11.96Zm234.53 47.01v-30.81c-2.41 0-4.61-.22-6.73.1-.89.13-2.3 1.39-2.31 2.16-.16 9.43-.1 18.87-.1 28.55h9.15ZM40.98 211.23v30.5h8.57v-30.5h-8.57Zm267.39 98.26v30.34h8.68v-30.34h-8.68Zm-65.41 30.41v-24.26q0-6.73-6.92-6.35c-.6.03-1.2.2-2.06.35v30.26h8.97Zm177.82-.13v-30.23h-8.89v24.29q0 6.62 6.44 6.3c.76-.04 1.5-.22 2.45-.36Zm-290.32-30.25c-.28.67-.6 1.1-.61 1.53-.07 7.58-.12 15.16-.14 22.74-.02 6.6 0 6.61 6.44 6.34.76-.03 1.51-.17 2.49-.29v-30.33h-8.18Z\"\n        data-name=\"Layer 1\"\n      />\n    </svg>\n  );\n}\n","export function getReferencePoint(svg: SVGSVGElement) {\n  return svg.createSVGPoint();\n}\n\nexport function getScreenCTM(svg: SVGSVGElement) {\n  return svg.getScreenCTM();\n}\n\nexport function getViewBox(svg: SVGSVGElement) {\n  return svg.viewBox.baseVal;\n}\n","import { getReferencePoint, getScreenCTM, getViewBox } from \"./utils\";\n\nconst ZOOM_COEFFICIENT = 5;\nconst SCROLL_PAN_COEFFICIENT = 0.5;\nconst MOUSE_MOVEMENT_TRAP_LOWER_BOUND = 50;\n\n// determines the magnitude of a vector\nfunction magnitude(ax: number, ay: number, bx: number, by: number) {\n  return Math.sqrt(Math.pow(ax - bx, 2) + Math.pow(ay - by, 2));\n}\n\n// prevents the default reaction to an event\nfunction preventDefault(event: Event) {\n  event.preventDefault();\n}\n\n// retrieves the line height of the page by generating an unstyled, blank span and measuring its height\nfunction getScrollLineHeight() {\n  const iframe = document.createElement(\"iframe\");\n  iframe.src = \"#\";\n  document.body.appendChild(iframe);\n\n  if (!iframe.contentDocument) {\n    throw new Error(\"unable to create an iframe to test for line height\");\n  }\n\n  iframe.contentDocument.open();\n  iframe.contentDocument.write(\n    \"<!DOCTYPE html><html><head></head><body><span>a</span></body></html>\",\n  );\n  iframe.contentDocument.close();\n\n  const testElement = iframe.contentDocument.querySelector(\"span\");\n  if (!testElement) {\n    throw new Error(\"unable to find test element for line height test\");\n  }\n\n  const lineHeight = testElement.offsetHeight;\n  document.body.removeChild(iframe);\n  return lineHeight;\n}\n\nexport interface ZoomControl {\n  zoomIn: (percent: number) => void;\n  zoomOut: (percent: number) => void;\n  reset: () => void;\n  teardown: () => void;\n  enable: () => void;\n  disable: () => void;\n}\n\n/*\n * enables support for touch and mouse control of an svg element's viewport\n * two-finger drags will pan the map\n * mouse scrolling and pinching will zoom in and out\n */\nexport function initializeZoom(svg: SVGSVGElement) {\n  // used to convert screen coordinates into coordinates in the svg space\n  const referencePoint = getReferencePoint(svg);\n\n  // converts a point from the page coordinate space to a point in the svg coordinate space\n  function svgPoint(x: number, y: number): number[] {\n    const matrix = getScreenCTM(svg);\n    if (!matrix) {\n      throw new Error(\n        \"cannot convert dom point to svg point due to missing conversion matrix\",\n      );\n    }\n\n    referencePoint.x = x;\n    referencePoint.y = y;\n\n    const p = referencePoint.matrixTransform(matrix.inverse());\n    return [p.x, p.y];\n  }\n\n  // initial touch points (x and y components of points a and b)\n  let iTouchAX: number;\n  let iTouchAY: number;\n  let iTouchBX: number;\n  let iTouchBY: number;\n\n  // initial viewbox of the svg element (at the beginning of the current manipulation)\n  let initialViewboxX: number;\n  let initialViewboxY: number;\n  let initialViewboxHeight: number;\n  let initialViewboxWidth: number;\n\n  const viewbox = getViewBox(svg);\n\n  function updateInitialViewbox() {\n    initialViewboxX = viewbox.x;\n    initialViewboxY = viewbox.y;\n    initialViewboxWidth = viewbox.width;\n    initialViewboxHeight = viewbox.height;\n  }\n\n  // original viewBox of the svg element (before the first manipulation)\n  const originalViewboxX = viewbox.x;\n  const originalViewboxY = viewbox.y;\n  const originalViewboxWidth = viewbox.width;\n  const originalViewboxHeight = viewbox.height;\n\n  function constrainPan() {\n    const minX = originalViewboxX;\n    const maxX = originalViewboxX + originalViewboxWidth - viewbox.width;\n\n    const minY = originalViewboxY;\n    const maxY = originalViewboxY + originalViewboxHeight - viewbox.height;\n\n    viewbox.x = Math.max(minX, Math.min(maxX, viewbox.x));\n    viewbox.y = Math.max(minY, Math.min(maxY, viewbox.y));\n  }\n\n  function translate(x: number, y: number) {\n    viewbox.x += x;\n    viewbox.y += y;\n    constrainPan();\n  }\n\n  const MIN_ZOOM = 0.1; // Minimum zoom scale (10% of the original size)\n  const MAX_ZOOM = 1.0; // Maximum zoom scale (100% of the original size)\n\n  function scale(scaleFactor: number) {\n    // Calculate the new dimensions of the viewbox\n    const newHeight = viewbox.height * scaleFactor;\n    const newWidth = viewbox.width * scaleFactor;\n\n    // Ensure the new dimensions are within the min and max zoom bounds\n    const minViewboxHeight = originalViewboxHeight * MIN_ZOOM;\n    const maxViewboxHeight = originalViewboxHeight * MAX_ZOOM;\n\n    if (newHeight < minViewboxHeight || newHeight > maxViewboxHeight) {\n      return; // Prevent scaling if the zoom level is outside the allowed bounds\n    }\n\n    // Apply the scaling\n    const initialViewboxHeight = viewbox.height;\n    const initialViewboxWidth = viewbox.width;\n\n    viewbox.height = newHeight;\n    viewbox.width = newWidth;\n\n    // Adjust the viewbox to keep the zoom centered\n    translate(\n      0 - (viewbox.width - initialViewboxWidth) / 2,\n      0 - (viewbox.height - initialViewboxHeight) / 2,\n    );\n\n    constrainPan(); // Ensure panning stays within bounds after scaling\n  }\n\n  // decreases the size of the map, relative to the viewport size\n  function zoomIn(percent: number) {\n    scale(1 - percent);\n  }\n\n  // increases the size of the map, relative to the viewport size\n  function zoomOut(percent: number) {\n    scale(1 + percent);\n  }\n\n  // resets the svg's viewport to its original version\n  function reset() {\n    viewbox.x = originalViewboxX;\n    viewbox.y = originalViewboxY;\n    viewbox.width = originalViewboxWidth;\n    viewbox.height = originalViewboxHeight;\n  }\n\n  let touching = false;\n\n  // for each touch start with exactly two touches, update the initial touch points and viewbox\n  function handleTouchStart(event: TouchEvent) {\n    // only respond when two fingers are on the screen\n    if (event.touches.length !== 2) {\n      return;\n    }\n\n    touching = true;\n    event.preventDefault();\n\n    const iTouchA = event.touches.item(0);\n    const iTouchB = event.touches.item(1);\n    if (!iTouchA || !iTouchB) {\n      return;\n    }\n\n    // update initial touch points\n    iTouchAX = iTouchA.clientX;\n    iTouchAY = iTouchA.clientY;\n    iTouchBX = iTouchB.clientX;\n    iTouchBY = iTouchB.clientY;\n\n    updateInitialViewbox();\n  }\n\n  function handleTouchMove(event: TouchEvent) {\n    const touchA = event.touches.item(0);\n    const touchB = event.touches.item(1);\n\n    // only respond when two fingers are on the screen\n    if (event.touches.length !== 2 || !touchA || !touchB) {\n      return;\n    }\n\n    event.preventDefault();\n\n    // current points of the touch vector\n    const touchAX = touchA.clientX;\n    const touchAY = touchA.clientY;\n    const touchBX = touchB.clientX;\n    const touchBY = touchB.clientY;\n\n    // initial and current touch vector midpoints\n    const [touchMidX, touchMidY] = svgPoint(\n      (touchAX + touchBX) / 2,\n      (touchAY + touchBY) / 2,\n    );\n    const [iTouchMidX, iTouchMidY] = svgPoint(\n      (iTouchAX + iTouchBX) / 2,\n      (iTouchAY + iTouchBY) / 2,\n    );\n\n    // rate of change of the touch vector\n    const iTouchMag = magnitude(iTouchAX, iTouchAY, iTouchBX, iTouchBY);\n    const touchMag = magnitude(touchAX, touchAY, touchBX, touchBY);\n    const magRatio = iTouchMag / touchMag;\n\n    // magnitude components of the viewbox vector\n    viewbox.height = initialViewboxHeight * magRatio;\n    viewbox.width = initialViewboxWidth * magRatio;\n\n    // change in the magnitude components of the viewbox vector\n    const dvbh = viewbox.height - initialViewboxHeight;\n    const dvbw = viewbox.width - initialViewboxWidth;\n\n    // position components of the viewbox vector\n    viewbox.x = initialViewboxX - touchMidX + iTouchMidX - dvbh / 2;\n    viewbox.y = initialViewboxY - touchMidY + iTouchMidY - dvbw / 2;\n  }\n\n  function handleTouchEnd(event: TouchEvent) {\n    if (event.touches.length < 2) {\n      touching = false;\n    }\n  }\n\n  // initial mouse points in the client coordinate space\n  let iMouseX: number;\n  let iMouseY: number;\n\n  let dragging = false;\n\n  function handleMouseDown(event: MouseEvent) {\n    iMouseX = event.clientX;\n    iMouseY = event.clientY;\n\n    event.stopPropagation();\n    updateInitialViewbox();\n\n    dragging = true;\n  }\n\n  // dragging the svg will also trigger click events, so we must trap them\n  // unless they drag the svg a very small distance (common with trackpads)\n  function handleClick(e: MouseEvent) {\n    if (\n      magnitude(e.clientX, e.clientY, iMouseX, iMouseY) >\n      MOUSE_MOVEMENT_TRAP_LOWER_BOUND\n    ) {\n      e.stopPropagation();\n    }\n  }\n\n  function handleMouseMove(event: MouseEvent) {\n    if (!dragging) {\n      return;\n    }\n\n    const [mouseSVGX, mouseSVGY] = svgPoint(event.clientX, event.clientY);\n    const [iMouseSVGX, iMouseSVGY] = svgPoint(iMouseX, iMouseY);\n\n    viewbox.x = initialViewboxX - mouseSVGX + iMouseSVGX;\n    viewbox.y = initialViewboxY - mouseSVGY + iMouseSVGY;\n  }\n\n  function stopDragging() {\n    dragging = false;\n  }\n\n  const lineHeight = getScrollLineHeight();\n\n  function handleWheel(event: WheelEvent) {\n    let deltaX, deltaY;\n\n    if (event.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n      deltaX = event.deltaX;\n      deltaY = event.deltaY;\n    } else if (event.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n      deltaX = event.deltaX * lineHeight;\n      deltaY = event.deltaY * lineHeight;\n    } else {\n      return;\n    }\n\n    event.preventDefault();\n\n    updateInitialViewbox();\n\n    if (event.ctrlKey) {\n      // Handle controlled scrolls as zoom inputs.\n      const delta = deltaY;\n\n      // Calculate the scaling factor\n      const scaleFactor = 1 + (delta / window.innerHeight) * ZOOM_COEFFICIENT;\n\n      // Determine the new dimensions\n      const newHeight = viewbox.height * scaleFactor;\n      const newWidth = viewbox.width * scaleFactor;\n\n      // Enforce zoom restrictions\n      const minViewboxHeight = originalViewboxHeight * MIN_ZOOM;\n      const maxViewboxHeight = originalViewboxHeight * MAX_ZOOM;\n\n      // Check and enforce the minimum and maximum zoom\n      if (newHeight < minViewboxHeight || newHeight > maxViewboxHeight) {\n        return;\n      }\n\n      // Apply the scaling\n      viewbox.height = newHeight;\n      viewbox.width = newWidth;\n\n      // Adjust the viewbox to keep the zoom centered\n      translate(\n        0 - (viewbox.width - initialViewboxWidth) / 2,\n        0 - (viewbox.height - initialViewboxHeight) / 2,\n      );\n\n      constrainPan(); // Ensure panning stays within bounds after scaling\n    } else {\n      // Handle non-controlled scrolls as pan inputs.\n      translate(\n        deltaX * SCROLL_PAN_COEFFICIENT,\n        deltaY * SCROLL_PAN_COEFFICIENT,\n      );\n    }\n  }\n\n  type GestureEvent = Event & {\n    readonly rotation: number;\n    readonly scale: number;\n  };\n\n  function handleGestureChange(event: Event) {\n    if (touching) {\n      return;\n    }\n\n    updateInitialViewbox();\n\n    viewbox.width = (originalViewboxWidth * 1) / (event as GestureEvent).scale;\n    viewbox.height =\n      (originalViewboxHeight * 1) / (event as GestureEvent).scale;\n\n    viewbox.x -= (viewbox.width - initialViewboxWidth) / 2;\n    viewbox.y -= (viewbox.height - initialViewboxHeight) / 2;\n  }\n\n  function setup() {\n    // disables full page zooming and panning on safari mobile\n    svg.addEventListener(\"touchstart\", handleTouchStart, { passive: false });\n    svg.addEventListener(\"touchmove\", handleTouchMove, { passive: false });\n    svg.addEventListener(\"touchend\", handleTouchEnd, { passive: false });\n    svg.addEventListener(\"mousedown\", handleMouseDown);\n    svg.addEventListener(\"click\", handleClick);\n    svg.addEventListener(\"mousemove\", handleMouseMove);\n    svg.addEventListener(\"mouseup\", stopDragging);\n    svg.addEventListener(\"mouseleave\", stopDragging);\n    svg.addEventListener(\"wheel\", handleWheel);\n    svg.addEventListener(\"gesturestart\", preventDefault, { passive: false });\n    svg.addEventListener(\"gesturechange\", preventDefault, { passive: false });\n    svg.addEventListener(\"gesturechange\", handleGestureChange);\n    svg.addEventListener(\"gestureend\", preventDefault, { passive: false });\n  }\n\n  function teardown() {\n    svg.removeEventListener(\"touchstart\", handleTouchStart);\n    svg.removeEventListener(\"touchmove\", handleTouchMove);\n    svg.removeEventListener(\"touchend\", handleTouchEnd);\n    svg.removeEventListener(\"mousedown\", handleMouseDown);\n    svg.removeEventListener(\"click\", handleClick);\n    svg.removeEventListener(\"mousemove\", handleMouseMove);\n    svg.removeEventListener(\"mouseup\", stopDragging);\n    svg.removeEventListener(\"mouseleave\", stopDragging);\n    svg.removeEventListener(\"wheel\", handleWheel);\n    svg.removeEventListener(\"gesturestart\", preventDefault);\n    svg.removeEventListener(\"gesturechange\", preventDefault);\n    svg.removeEventListener(\"gesturechange\", handleGestureChange);\n    svg.removeEventListener(\"gestureend\", preventDefault);\n  }\n\n  setup();\n\n  return {\n    zoomIn,\n    zoomOut,\n    reset,\n    teardown,\n    enable: setup,\n    disable: teardown,\n  };\n}\n","import { defaultMemoize, createSelectorCreator } from \"reselect\";\nimport isEqual from \"lodash.isequal\";\n\nimport { NormalizedTicketGroup } from \"../types/TicketGroups\";\nimport {\n  State,\n  Props,\n  NormalizedTicketGroupsBySection,\n  CostRange,\n} from \"../types/TicketMap\";\n\nconst $ticketGroups = (state: State) => state.ticketGroups;\nconst $sectionMapping = (state: State) => state.sectionMapping;\nconst $sectionPercentiles = (_state: State, props: Props) =>\n  props.sectionPercentiles;\n\nconst createDeepEqualSelector = createSelectorCreator(defaultMemoize, isEqual);\n\nexport const $missingSectionIds = createDeepEqualSelector(\n  $sectionMapping,\n  $ticketGroups,\n  (sectionMapping, ticketGroups) =>\n    ticketGroups\n      .map((ticketGroup) => ticketGroup.tevo_section_name.toLowerCase())\n      .filter((sectionId) => sectionMapping[sectionId] === undefined),\n);\n\nexport const $availableTicketGroups = createDeepEqualSelector(\n  $ticketGroups,\n  $sectionMapping,\n  (ticketGroups, sectionMapping) =>\n    ticketGroups\n      .map((ticketGroup): NormalizedTicketGroup => {\n        const section = ticketGroup.tevo_section_name.toLowerCase();\n        const isSectionInTheManifest = sectionMapping[section];\n\n        return (\n          isSectionInTheManifest && {\n            section,\n            price: ticketGroup.retail_price,\n          }\n        );\n      })\n      .filter((ticketGroup) => ticketGroup),\n);\n\nconst $priceSortedTicketGroups = createDeepEqualSelector(\n  $ticketGroups,\n  (ticketGroups) =>\n    ticketGroups.sort((a, b) => a.retail_price - b.retail_price),\n);\n\nexport const $costRanges = createDeepEqualSelector(\n  $sectionPercentiles,\n  $priceSortedTicketGroups,\n  (percentiles = {}, ticketGroups) => {\n    const costRanges = Object.entries(percentiles)\n      .map(\n        ([percentile, color]): CostRange => ({\n          percentile: parseFloat(percentile),\n          color,\n          min: 0,\n          max: 0,\n          ticketGroups: [],\n        }),\n      )\n      .sort((a, b) => a.percentile - b.percentile);\n\n    if (ticketGroups.length === 1) {\n      costRanges[costRanges.length - 1].ticketGroups.push(ticketGroups[0]);\n    } else {\n      for (let i = 0; i < ticketGroups.length; i++) {\n        const percentile = i / ticketGroups.length;\n        for (const costRange of costRanges) {\n          if (costRange.percentile > percentile) {\n            costRange.ticketGroups.push(ticketGroups[i]);\n            break;\n          }\n        }\n      }\n    }\n\n    costRanges.forEach((costRange) => {\n      if (costRange.ticketGroups.length > 0) {\n        costRange.min = costRange.ticketGroups[0].retail_price;\n        costRange.max =\n          costRange.ticketGroups[\n            costRange.ticketGroups.length - 1\n          ].retail_price;\n      }\n    });\n\n    return costRanges.filter(({ min, max }) => !(min === 0 && max === 0));\n  },\n);\n\nexport const $ticketGroupsBySection = createDeepEqualSelector(\n  $availableTicketGroups,\n  (ticketGroups): NormalizedTicketGroupsBySection =>\n    ticketGroups.reduce(\n      (memo: NormalizedTicketGroupsBySection, ticketGroup) => ({\n        ...memo,\n        [ticketGroup.section]: [\n          ...(memo[ticketGroup.section] || []),\n          ticketGroup,\n        ],\n      }),\n      {},\n    ),\n);\n\nexport const $venueSections = createDeepEqualSelector(\n  $ticketGroupsBySection,\n  Object.keys,\n);\n"]}