{"version":3,"sources":["../src/Button/Button.tsx","../src/Legend/swatch.tsx","../src/icons/ChevronDown.tsx","../src/icons/ChevronUp.tsx","../src/Legend/index.tsx","../src/Actions/ActionGroup.tsx","../src/icons/Plus.tsx","../src/icons/Minus.tsx","../src/icons/Undo.tsx","../src/Actions/index.tsx","../src/Tooltip/index.tsx","../src/icons/PinchZoomIn.tsx","../src/icons/TwoFingerSlide.tsx","../src/ZoomHelper/index.tsx","../src/icons/MissingSeatMapLogo.tsx","../src/utils/utils.ts","../src/utils/zoom.ts","../src/utils/selectors.ts","../src/TicketMap/index.tsx","../src/index.tsx"],"names":["jsxs","jsx","Component","React","initialViewboxHeight","initialViewboxWidth","createSelectorCreator","lruMemoize","isEqual","fetchPonyfill","section","union","pick","createRoot"],"mappings":"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","file":"index.cjs","sourcesContent":["import React from \"react\";\r\n\r\ninterface Props extends React.HTMLProps<HTMLDivElement> {\r\n  icon?: React.ReactNode;\r\n  text?: string;\r\n  isMobile?: boolean;\r\n}\r\n\r\nexport default function Button({\r\n  icon,\r\n  text,\r\n  style,\r\n  isMobile,\r\n  ...props\r\n}: Props) {\r\n  return (\r\n    <div\r\n      {...props}\r\n      style={{\r\n        backgroundColor: \"transparent\",\r\n        borderRadius: 0,\r\n        padding: isMobile ? \"0.25em 0.5em\" : \"0.5em 1em\",\r\n        outline: \"none\",\r\n        cursor: \"pointer\",\r\n        border: \"none\",\r\n        display: \"flex\",\r\n        alignItems: \"center\",\r\n        justifyContent: \"center\",\r\n        gap: isMobile ? \"4px\" : \"6px\",\r\n        ...(style || {}),\r\n      }}\r\n    >\r\n      {icon}\r\n      {text}\r\n    </div>\r\n  );\r\n}\r\n","import { type CSSProperties } from \"react\";\r\n\r\nexport interface Props {\r\n  style?: CSSProperties;\r\n  color: string;\r\n}\r\n\r\nexport default (props: Props) => (\r\n  <div\r\n    style={{\r\n      ...(props.style || {}),\r\n      height: 14,\r\n      width: 14,\r\n      borderRadius: 4,\r\n      backgroundColor: props.color,\r\n      display: \"inline-block\",\r\n    }}\r\n  />\r\n);\r\n","export 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","export 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 { Component, CSSProperties } from \"react\";\r\nimport Button from \"./../Button\";\r\nimport Swatch from \"./swatch\";\r\nimport { IconChevronDown } from \"../icons/ChevronDown\";\r\nimport { IconChevronUp } from \"../icons/ChevronUp\";\r\nimport type { TicketGroup } from \"../types/TicketGroups\";\r\n\r\nexport interface Props {\r\n  isMobile?: boolean;\r\n  showLegendOpenAlwaysForDesktop?: boolean;\r\n  openLegendInitially?: boolean;\r\n  ticketGroups: TicketGroup[];\r\n}\r\n\r\ninterface State {\r\n  isOpen: boolean;\r\n}\r\n\r\nconst uniqueByZone = (groups: TicketGroup[]): TicketGroup[] => {\r\n  const map = new Map<string, TicketGroup>();\r\n\r\n  groups.forEach(group => {\r\n    map.set(group.zone_name, group);\r\n  });\r\n\r\n  return Array.from(map.values());\r\n};\r\n\r\nexport default class Legend extends Component<Props, State> {\r\n  static defaultProps = {\r\n    isMobile: false,\r\n    showLegendOpenAlwaysForDesktop: false,\r\n    openLegendInitially: false,\r\n  };\r\n\r\n  state = {\r\n    isOpen: this.props.openLegendInitially || false,\r\n  };\r\n\r\n  containerStyle(): CSSProperties {\r\n    return {\r\n      position: \"absolute\",\r\n      backgroundColor: \"white\",\r\n      right: -2,\r\n      border: \"2px solid lightgray\",\r\n      borderRadius: \"0 0 5px 5px\",\r\n      maxHeight: 400,\r\n      overflowY: \"auto\",\r\n      width: 300,\r\n      padding: 8,\r\n      zIndex: 1000,\r\n    };\r\n  }\r\n\r\n  itemStyle(): CSSProperties {\r\n    return {\r\n      display: \"flex\",\r\n      alignItems: \"flex-start\",\r\n      gap: 8,\r\n      marginBottom: 8,\r\n      wordBreak: \"break-word\",\r\n      textAlign: \"left\",\r\n    };\r\n  }\r\n\r\n  textContainerStyle(): CSSProperties {\r\n    return {\r\n      flex: 1,\r\n      whiteSpace: \"normal\",\r\n      overflowWrap: \"break-word\",\r\n    };\r\n  }\r\n\r\n  render() {\r\n    const { isOpen } = this.state;\r\n    const { ticketGroups, isMobile, showLegendOpenAlwaysForDesktop } = this.props;\r\n\r\n    const filteredTicketGroups = uniqueByZone(ticketGroups);\r\n\r\n    const content = (\r\n      <div style={this.containerStyle()}>\r\n        <h3 style={{ margin: 0, marginBottom: 8, fontWeight: 700 }}>Map Legend</h3>\r\n        {filteredTicketGroups.map((ticketGroup) => (\r\n          <div key={ticketGroup.color} style={this.itemStyle()}>\r\n            <Swatch color={ticketGroup.color} />\r\n            <div style={this.textContainerStyle()}>\r\n              <strong>{ticketGroup.zone_name}</strong>\r\n              {ticketGroup.description && ` - ${ticketGroup.description}`}\r\n            </div>\r\n          </div>\r\n        ))}\r\n      </div>\r\n    );\r\n\r\n    return showLegendOpenAlwaysForDesktop && !isMobile ? (\r\n      <div style={{ position: \"relative\" }}>{content}</div>\r\n    ) : (\r\n      <div style={{ position: \"relative\" }}>\r\n        <Button\r\n          onClick={() => this.setState({ isOpen: !isOpen })}\r\n          icon={isOpen ? <IconChevronUp /> : <IconChevronDown />}\r\n          text={`${isOpen ? \"Hide \" : \"Show \"}Map Legend`}\r\n          isMobile={isMobile}\r\n        />\r\n        {filteredTicketGroups.length > 0 && isOpen && content}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import React from \"react\";\r\n\r\nexport default function (props: React.HTMLProps<HTMLDivElement>) {\r\n  return (\r\n    <div\r\n      {...props}\r\n      style={{\r\n        pointerEvents: \"all\",\r\n        border: \"2px solid lightgray\",\r\n        borderRadius: 8,\r\n        display: \"flex\",\r\n        backgroundColor: \"white\",\r\n        ...(props.style || {}),\r\n      }}\r\n    />\r\n  );\r\n}\r\n","export 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","export 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","export 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\";\r\nimport Legend from \"./../Legend\";\r\nimport Button from \"./../Button\";\r\nimport ActionGroup from \"./ActionGroup\";\r\nimport { IconPlus } from \"../icons/Plus\";\r\nimport { IconMinus } from \"../icons/Minus\";\r\nimport { IconUndo } from \"../icons/Undo\";\r\nimport type { TicketGroup } from \"../types/TicketGroups\";\r\n\r\nexport interface Props {\r\n  onClearSelection?: () => void;\r\n  showLegend?: boolean;\r\n  showControls?: boolean;\r\n  ticketGroups: TicketGroup[],\r\n  onZoomIn: () => void;\r\n  onZoomOut: () => void;\r\n  onResetZoom: () => void;\r\n}\r\n\r\ninterface DefaultProps {\r\n  showLegend: boolean;\r\n  showLegendOpenAlwaysForDesktop: boolean;\r\n  openLegendInitially: boolean;\r\n  showControls: boolean;\r\n  onClearSelection(): void;\r\n}\r\n\r\ninterface State {\r\n  isMobile: boolean;\r\n}\r\n\r\nexport default class Actions extends React.Component<\r\n  Props & DefaultProps,\r\n  State\r\n> {\r\n  container = React.createRef<HTMLDivElement>();\r\n  timer?: number;\r\n\r\n  state: State = {\r\n    // initial value, would correct itself after first render\r\n    // TODO: we should refactor this to an FC component and some variant of useMediaQuery\r\n    isMobile: false,\r\n  };\r\n\r\n  static defaultProps: DefaultProps = {\r\n    showLegend: true,\r\n    showLegendOpenAlwaysForDesktop: false,\r\n    showControls: true,\r\n    openLegendInitially: false,\r\n    onClearSelection: () => { },\r\n  };\r\n\r\n  get styles(): { [key: string]: React.CSSProperties } {\r\n    return {\r\n      container: {\r\n        position: \"absolute\",\r\n        top: this.state.isMobile ? 0 : 10,\r\n        left: this.state.isMobile ? 0 : 10,\r\n        right: this.state.isMobile ? 0 : 10,\r\n        bottom: this.state.isMobile ? 0 : 10,\r\n        display: \"flex\",\r\n        alignItems: \"flex-start\",\r\n        justifyContent: \"space-between\",\r\n        opacity: 0.9,\r\n        pointerEvents: \"none\",\r\n        whiteSpace: \"nowrap\",\r\n        maxWidth: \"100%\",\r\n        fontSize: \"0.75em\",\r\n      },\r\n      icon: {\r\n        display: \"inline-block\",\r\n        fontSize: \"inherit\",\r\n        height: \"1.333333333em\",\r\n        overflow: \"visible\",\r\n        verticalAlign: \"-0.125em\",\r\n      },\r\n    };\r\n  }\r\n\r\n  componentDidMount() {\r\n    this.timer = window.setInterval(this.updateIsMobile, 200);\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    window.clearInterval(this.timer);\r\n  }\r\n\r\n  updateIsMobile = () => {\r\n    const currentContainer = this.getCurrentContainer();\r\n    if (!currentContainer) {\r\n      return;\r\n    }\r\n\r\n    const isMobile =\r\n      window.innerWidth < 520 || currentContainer.clientWidth < 400;\r\n\r\n    if (this.state.isMobile !== isMobile) {\r\n      this.setState({ isMobile });\r\n    }\r\n  };\r\n\r\n  getCurrentContainer = () => {\r\n    return this.container.current;\r\n  };\r\n\r\n  render() {\r\n    const { isMobile } = this.state;\r\n    const { showControls, showLegend } = this.props;\r\n\r\n    const showLeftActions = showControls || (isMobile && showLegend);\r\n    const showRightActions = !isMobile && showLegend;\r\n\r\n    return (\r\n      <div\r\n        style={this.styles.container}\r\n        ref={this.container}\r\n        data-testid=\"seatmaps-actions-menu\"\r\n      >\r\n        {showLeftActions && (\r\n          <ActionGroup>\r\n            {!isMobile && showControls && (\r\n              <React.Fragment>\r\n                <Button\r\n                  data-rh=\"Default\"\r\n                  data-custom-at=\"right\"\r\n                  onClick={this.props.onZoomIn}\r\n                  icon={<IconPlus />}\r\n                  isMobile={isMobile}\r\n                  style={{ borderRight: \"2px solid lightgray\" }}\r\n                  name=\"zoom-in\"\r\n                  data-testid=\"zoom-in\"\r\n                />\r\n\r\n                <Button\r\n                  onClick={this.props.onZoomOut}\r\n                  icon={<IconMinus />}\r\n                  isMobile={isMobile}\r\n                  style={{ borderRight: \"2px solid lightgray\" }}\r\n                  name=\"zoom-out\"\r\n                  data-testid=\"zoom-out\"\r\n                />\r\n\r\n                <Button\r\n                  onClick={this.props.onResetZoom}\r\n                  icon={<IconUndo />}\r\n                  text=\"Reset\"\r\n                  isMobile={isMobile}\r\n                  style={{ borderRight: \"2px solid lightgray\" }}\r\n                  name=\"reset-zoom\"\r\n                  data-testid=\"reset-zoom\"\r\n                />\r\n              </React.Fragment>\r\n            )}\r\n            {isMobile && showLegend && (\r\n              <Legend isMobile ticketGroups={this.props.ticketGroups}\r\n              />\r\n            )}\r\n          </ActionGroup>\r\n        )}\r\n        {showRightActions && (\r\n          <ActionGroup>\r\n            <Legend\r\n              showLegendOpenAlwaysForDesktop={\r\n                this.props.showLegendOpenAlwaysForDesktop\r\n              }\r\n              openLegendInitially={this.props.openLegendInitially}\r\n              ticketGroups={this.props.ticketGroups}\r\n            />\r\n          </ActionGroup>\r\n        )}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import React, { Component, type CSSProperties } from \"react\";\r\nimport type { TicketGroup } from \"../types/TicketGroups\";\r\n\r\nexport const defaultDirection = [\"up\", \"right\"];\r\n\r\nexport const formatCurrency = new Intl.NumberFormat(\"en-US\", {\r\n  style: \"currency\",\r\n  currency: \"USD\",\r\n}).format;\r\n\r\nexport interface Props {\r\n  x?: number;\r\n  y?: number;\r\n  color?: string;\r\n  isActive?: boolean;\r\n  ticketGroups?: TicketGroup[];\r\n  name?: string;\r\n  zone?: string;\r\n}\r\n\r\ninterface DefaultProps {\r\n  x: number;\r\n  y: number;\r\n  color: string;\r\n  isActive: boolean;\r\n  ticketGroups: TicketGroup[];\r\n  name: string;\r\n  zone: string;\r\n}\r\n\r\ninterface Point {\r\n  x: number;\r\n  y: number;\r\n}\r\n\r\nexport default class Tooltip extends Component<Props & DefaultProps> {\r\n  container = React.createRef<HTMLDivElement>();\r\n\r\n  static defaultProps: DefaultProps = {\r\n    isActive: false,\r\n    ticketGroups: [],\r\n    name: \"\",\r\n    zone: \"\",\r\n    x: 0,\r\n    y: 0,\r\n    color: \"#000000\",\r\n  };\r\n\r\n  direction(): string[] {\r\n    const container = this.container.current;\r\n    const { x, y } = this.props;\r\n    const direction = [...defaultDirection];\r\n\r\n    if (!container || !container.parentElement) {\r\n      return direction;\r\n    }\r\n\r\n    // display to the left of the cursor when the right side of the tooltip is clipped\r\n    if (x + container.clientWidth > container.parentElement.clientWidth) {\r\n      direction[1] = \"left\";\r\n    }\r\n\r\n    // display beneath the cursor when the top of the tooltip is clipped\r\n    if (y < container.clientHeight) {\r\n      direction[0] = \"down\";\r\n    }\r\n\r\n    return direction;\r\n  }\r\n\r\n  position(): Point {\r\n    const direction = this.direction();\r\n    const point = {\r\n      x: this.props.x,\r\n      y: this.props.y,\r\n    };\r\n\r\n    const container = this.container.current;\r\n    if (container) {\r\n      if (direction[0] === \"up\") {\r\n        point.y -= container.clientHeight;\r\n      }\r\n\r\n      if (direction[1] === \"left\") {\r\n        point.x -= container.clientWidth;\r\n      }\r\n    }\r\n\r\n    return point;\r\n  }\r\n\r\n  containerStyle(): CSSProperties {\r\n    const { isActive } = this.props;\r\n    const direction = this.direction();\r\n    const position = this.position();\r\n\r\n    return {\r\n      position: \"fixed\",\r\n      zIndex: 1,\r\n      transition: \"top .1s, left .1s\",\r\n      opacity: isActive ? 1 : 0,\r\n      padding: 10,\r\n      display: \"flex\",\r\n      flexDirection: direction[0] === \"down\" ? \"column\" : \"column-reverse\",\r\n      alignItems: direction[1] === \"right\" ? \"flex-start\" : \"flex-end\",\r\n      filter: \"drop-shadow(rgba(0, 0, 0, 0.5) 0 2px 2px)\",\r\n      pointerEvents: \"none\",\r\n      top: position.y,\r\n      left: position.x,\r\n    };\r\n  }\r\n\r\n  swatchStyle(): CSSProperties {\r\n    return {\r\n      width: 16,\r\n      height: 16,\r\n      backgroundColor: this.props.color,\r\n      display: \"inline-block\",\r\n      marginRight: 5,\r\n      borderRadius: 4,\r\n    };\r\n  }\r\n\r\n  contentStyle(): CSSProperties {\r\n    return {\r\n      backgroundColor: \"white\",\r\n      padding: 8,\r\n      borderRadius: 8,\r\n      fontSize: \"12px\",\r\n    };\r\n  }\r\n\r\n  nameStyle(): CSSProperties {\r\n    return {\r\n      fontSize: \"12px\",\r\n      display: \"flex\",\r\n      alignItems: \"center\",\r\n    };\r\n  }\r\n\r\n  priceStyle(): CSSProperties {\r\n    return {\r\n      fontWeight: 400,\r\n      fontSize: \"12px\"\r\n    };\r\n  }\r\n\r\n  render() {\r\n    const prices = this.props.ticketGroups\r\n      .map((ticketGroup) => ticketGroup.retail_price)\r\n      .sort((a, b) => a - b);\r\n\r\n    return (\r\n      <div\r\n        ref={this.container}\r\n        style={this.containerStyle()}\r\n        data-testid=\"seatmaps-tooltip\"\r\n      >\r\n        <div style={this.contentStyle()}>\r\n          <div style={this.nameStyle()}>\r\n            <div style={this.swatchStyle()} />\r\n            <strong>Section: </strong> &nbsp; {this.props.name}, &nbsp;\r\n            <strong>Zone: </strong> &nbsp; {this.props.zone}\r\n          </div>\r\n          {prices[prices.length - 1] === 0 ? (\r\n            <div>\r\n              No offers yet. Be the first one to Name Your Price\r\n            </div>\r\n          ) : (\r\n            <div>\r\n              <strong>Best Offer Price</strong> {formatCurrency(prices[prices.length - 1])}\r\n            </div>\r\n          )}\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","export 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, { type CSSProperties } from \"react\";\r\nimport { IconPinchZoomIn } from \"../icons/PinchZoomIn\";\r\nimport { IconTwoFingerSlide } from \"../icons/TwoFingerSlide\";\r\n\r\nconst containerStyle: CSSProperties = {\r\n  position: \"absolute\",\r\n  backgroundColor: \"rgba(0, 0, 0, 0.8)\",\r\n  width: \"100%\",\r\n  height: \"100%\",\r\n  padding: \"20% 30%\",\r\n  boxSizing: \"border-box\",\r\n  display: \"grid\",\r\n  gridTemplateColumns: \"50% 50%\",\r\n  justifyItems: \"center\",\r\n  alignItems: \"top\",\r\n  color: \"white\",\r\n  fontFamily: \"Nunito Sans\",\r\n  fontSize: \"2vw\",\r\n  fontWeight: 700,\r\n  textTransform: \"uppercase\",\r\n  textAlign: \"center\",\r\n  opacity: 1,\r\n  visibility: \"visible\",\r\n  lineHeight: \"initial\",\r\n};\r\n\r\nconst discoveredStyle: CSSProperties = {\r\n  transition: \"opacity .4s, visibility .4s\",\r\n  opacity: 0,\r\n  visibility: \"hidden\",\r\n};\r\n\r\nconst imageStyle = {\r\n  width: \"10vw\",\r\n  alignSelf: \"end\",\r\n};\r\n\r\ninterface State {\r\n  discovered: boolean;\r\n}\r\n\r\nexport default class ZoomHelper extends React.Component {\r\n  state: State = {\r\n    discovered: false,\r\n  };\r\n\r\n  container = React.createRef<HTMLDivElement>();\r\n\r\n  hide = () => {\r\n    this.setState({\r\n      discovered: true,\r\n    });\r\n  };\r\n\r\n  getCurrentContainer = () => {\r\n    return this.container.current;\r\n  };\r\n\r\n  shouldHide = (bounds: DOMRect) => {\r\n    return (\r\n      bounds.top < window.innerHeight &&\r\n      bounds.top + bounds.height > 0 &&\r\n      bounds.left <= window.innerWidth &&\r\n      bounds.left + bounds.width > 0\r\n    );\r\n  };\r\n\r\n  handleViewportChange = () => {\r\n    if (this.state.discovered) {\r\n      return;\r\n    }\r\n\r\n    const currentContainer = this.getCurrentContainer();\r\n    if (!currentContainer) {\r\n      return;\r\n    }\r\n\r\n    const bounds = currentContainer.getBoundingClientRect();\r\n    if (this.shouldHide(bounds)) {\r\n      setTimeout(this.hide, 4000);\r\n    }\r\n  };\r\n\r\n  componentDidMount() {\r\n    setTimeout(() => {\r\n      window.addEventListener(\"wheel\", this.handleViewportChange);\r\n      window.addEventListener(\"resize\", this.handleViewportChange);\r\n      this.handleViewportChange();\r\n    }, 500);\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    window.removeEventListener(\"wheel\", this.handleViewportChange);\r\n    window.removeEventListener(\"resize\", this.handleViewportChange);\r\n  }\r\n\r\n  render() {\r\n    const style = {\r\n      ...containerStyle,\r\n      ...(this.state.discovered ? discoveredStyle : {}),\r\n    };\r\n\r\n    return (\r\n      <div style={style} ref={this.container} onClick={this.hide}>\r\n        <link\r\n          href=\"https://fonts.googleapis.com/css?family=Nunito+Sans&display=swap\"\r\n          rel=\"stylesheet\"\r\n        />\r\n        <IconPinchZoomIn className=\"zoom-in-icon\" style={imageStyle} />\r\n        <IconTwoFingerSlide className=\"slide-icon\" style={imageStyle} />\r\n        <div>pinch to zoom in/out</div>\r\n        <div>use two fingers to move map</div>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","export 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 { lruMemoize, createSelectorCreator } from \"reselect\";\n\nimport isEqual from \"lodash.isequal\";\n\nimport type { TicketGroup } from \"../types/TicketGroups\";\nimport type {\n  State,\n  TicketGroupsBySection,\n} from \"../types/TicketMap\";\n\nconst $ticketGroups = (state: State) => state.ticketGroups;\nconst $sectionMapping = (state: State) => state.sectionMapping;\n\nconst createDeepEqualSelector = createSelectorCreator(lruMemoize, isEqual);\n\nexport const $missingSectionIds = createDeepEqualSelector(\n  $sectionMapping,\n  $ticketGroups,\n  (sectionMapping, ticketGroups) =>\n    ticketGroups\n      .map((ticketGroup) => ticketGroup.tevo_section_name)\n      .filter((sectionId) => sectionMapping[sectionId] === undefined),\n);\n\nexport const $availableTicketGroups = createDeepEqualSelector(\n  $ticketGroups,\n  $sectionMapping,\n  (ticketGroups, sectionMapping) =>\n    ticketGroups\n      .map((ticketGroup): TicketGroup => {\n        const section = ticketGroup.tevo_section_name;\n        const isSectionInTheManifest = sectionMapping[section];\n\n        return (\n          isSectionInTheManifest && {\n            tevo_section_name: ticketGroup.tevo_section_name,\n            retail_price: ticketGroup.retail_price,\n            color: ticketGroup.color,\n            zone_name: ticketGroup.zone_name,\n          }\n        );\n      })\n      .filter((ticketGroup) => ticketGroup),\n);\n\nexport const $ticketGroupsBySection = createDeepEqualSelector(\n  $availableTicketGroups,\n  (ticketGroups): TicketGroupsBySection =>\n    ticketGroups.reduce(\n      (memo: TicketGroupsBySection, ticketGroup) => ({\n        ...memo,\n        [ticketGroup.tevo_section_name]: [\n          ...(memo[ticketGroup.tevo_section_name] || []),\n          ticketGroup,\n        ],\n      }),\n      {},\n    ),\n);\n\nexport const $venueSections = createDeepEqualSelector(\n  $ticketGroupsBySection,\n  Object.keys,\n);\n","import React, { Component } from \"react\";\r\nimport isEqual from \"lodash.isequal\";\r\nimport fetchPonyfill from \"fetch-ponyfill\";\r\n\r\nimport Actions from \"../Actions\";\r\nimport Tooltip from \"../Tooltip\";\r\nimport ZoomHelper from \"../ZoomHelper\";\r\nimport MissingSeatMapLogo from \"../icons/MissingSeatMapLogo\";\r\n\r\nimport { type ZoomControl, initializeZoom } from \"../utils/zoom\";\r\n\r\nimport type { TicketGroup } from \"../types/TicketGroups\";\r\nimport type { State, Props, DefaultProps } from \"../types/TicketMap\";\r\n\r\nimport {\r\n  $availableTicketGroups,\r\n  $missingSectionIds,\r\n  $ticketGroupsBySection,\r\n  $venueSections,\r\n} from \"../utils/selectors\";\r\n\r\nexport * from \"../types/TicketMap\";\r\n\r\nexport interface PublicApi {\r\n  updateTicketGroups: (ticketGroups: TicketGroup[]) => void;\r\n  highlightSection: (section: string) => void;\r\n  unhighlightSection: (section?: string) => void;\r\n  selectSection: (section: string) => void;\r\n  deselectSection: (section?: string) => void;\r\n}\r\n\r\ninterface ElementProperties {\r\n  [key: string]: string;\r\n}\r\n\r\ntype PropertiesForElement = (element: Element) => ElementProperties;\r\n\r\nclass MapNotFoundError extends Error {\r\n  name = \"MapNotFoundError\";\r\n  constructor(message = \"This map is not currently available.\") {\r\n    super(message);\r\n  }\r\n}\r\n\r\nexport const highlightedSectionColor = \"#1C1C1C\";\r\nexport const unhighlightedSectionColor = \"#FFFFFF\";\r\n\r\n// Needed to support SSR in some cases - in case user wants to prerender/cache map html serverside.\r\nconst { fetch: isomorphicFetch } = fetchPonyfill();\r\nexport class TicketMap extends Component<Props & DefaultProps, State> {\r\n  publicApi: PublicApi;\r\n  mapRoot = React.createRef<HTMLDivElement>();\r\n  container = React.createRef<HTMLDivElement>();\r\n  zoom?: ZoomControl;\r\n\r\n  static defaultProps: DefaultProps = {\r\n    mapsDomain: \"https://maps.ticketevolution.com\",\r\n    onSelection: () => { },\r\n    selectedSections: [],\r\n    ticketGroups: [],\r\n    showLegend: true,\r\n    showLegendOpenAlwaysForDesktop: false,\r\n    showControls: true,\r\n    openLegendInitially: false,\r\n    mouseControlEnabled: true,\r\n    showZoomHelper: true,\r\n    mapFontFamily: \"inherit\",\r\n  };\r\n\r\n  constructor(props: Props & DefaultProps) {\r\n    super(props);\r\n    this.state = {\r\n      sectionMapping: {},\r\n      manifest: this.props.manifest,\r\n      selectedSections: new Set(\r\n        this.props.selectedSections.filter((section) => !!section),\r\n      ),\r\n      tooltipActive: false,\r\n      tooltipSectionName: \"\",\r\n      tooltipZoneName: \"\",\r\n      tooltipX: 0,\r\n      tooltipY: 0,\r\n      ticketGroups: this.props.ticketGroups,\r\n      mapNotFound: false,\r\n      touchStarts: {},\r\n      dragging: false,\r\n      isTouchDevice: false,\r\n    };\r\n\r\n    this.publicApi = {\r\n      updateTicketGroups: this.updateTicketGroups,\r\n      highlightSection: this.highlightSection,\r\n      unhighlightSection: this.unhighlightSection,\r\n      selectSection: this.selectSection,\r\n      deselectSection: this.deselectSection,\r\n    };\r\n  }\r\n\r\n  isTouchDevice = () => {\r\n    return \"ontouchstart\" in document.documentElement;\r\n  };\r\n\r\n  /**\r\n   * Lifecycle\r\n   */\r\n\r\n  async componentDidMount() {\r\n    this.setState({\r\n      isTouchDevice: this.isTouchDevice(),\r\n    });\r\n\r\n    try {\r\n      await this.fetchMap();\r\n      this.setupMap();\r\n      this.fetchManifest();\r\n      this.updateMap();\r\n    } catch (error) {\r\n      console.error(error);\r\n      if (\r\n        error &&\r\n        typeof error === \"object\" &&\r\n        \"name\" in error &&\r\n        error.name === \"MapNotFoundError\"\r\n      ) {\r\n        this.setState({ mapNotFound: true });\r\n      }\r\n    }\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    if (this.zoom) {\r\n      this.zoom.teardown();\r\n    }\r\n  }\r\n\r\n  componentDidUpdate(_prevProps: Props, prevState: State) {\r\n    const availableTicketGroupsDidChange =\r\n      $availableTicketGroups(prevState) !== $availableTicketGroups(this.state);\r\n    const isNoLongerHoveringOnSection =\r\n      prevState.currentHoveredSection !== undefined &&\r\n      this.state.currentHoveredSection === undefined;\r\n    const selectedSectionsDidChange = !isEqual(\r\n      this.state.selectedSections,\r\n      prevState.selectedSections,\r\n    );\r\n\r\n    if (\r\n      this.mapRoot.current &&\r\n      (isNoLongerHoveringOnSection ||\r\n        availableTicketGroupsDidChange ||\r\n        selectedSectionsDidChange)\r\n    ) {\r\n      this.updateMap();\r\n    }\r\n\r\n    if (selectedSectionsDidChange) {\r\n      const selectedZone = this.props.manifest.sections[Array.from(this.state.selectedSections)[0]]?.zone_name;\r\n\r\n      if (selectedZone) {\r\n        this.props.onSelection(selectedZone);\r\n      }\r\n    }\r\n\r\n    if (\r\n      $missingSectionIds(prevState) !== $missingSectionIds(this.state) &&\r\n      $missingSectionIds(this.state).length > 0\r\n    ) {\r\n      console.warn(\r\n        \"Unknown section names found in ticket groups: %o\",\r\n        $missingSectionIds(this.state),\r\n      );\r\n    }\r\n\r\n    if (\r\n      _prevProps.mouseControlEnabled !== this.props.mouseControlEnabled &&\r\n      this.zoom\r\n    ) {\r\n      if (this.props.mouseControlEnabled) {\r\n        this.zoom.enable();\r\n      } else {\r\n        this.zoom.disable();\r\n      }\r\n    }\r\n  }\r\n\r\n  async fetchMap() {\r\n    let mapHtml = '';\r\n    if (this.props.customMapSvg) {\r\n      mapHtml = this.props.customMapSvg;\r\n    }\r\n    else {\r\n      const mapResponse = await isomorphicFetch(`${this.configFilePath}/map.svg`);\r\n      if (!mapResponse.ok) {\r\n        throw new MapNotFoundError();\r\n      }\r\n      mapHtml = await mapResponse.text();\r\n    }\r\n\r\n    // Can't use dangerouslySetInnerHTML={{ __html: this.state.mapHtml }} in this case because\r\n    // re-rendering would inject all t\r\n    // his HTML again, which would break all the event bindings\r\n    // we set in future methods.\r\n    if (this.mapRoot.current) {\r\n      this.mapRoot.current.innerHTML = mapHtml;\r\n      const svg = this.mapRoot.current.querySelector(\"svg\");\r\n      if (svg && this.props.mouseControlEnabled) {\r\n        this.zoom = initializeZoom(svg);\r\n      }\r\n    }\r\n  }\r\n\r\n  fetchManifest() {\r\n    this.setState({\r\n      sectionMapping: Object.keys(this.props.manifest.sections).reduce(\r\n        (memo, sectionName) => ({\r\n          ...memo,\r\n          [sectionName]: {\r\n            sectionName,\r\n          },\r\n        }),\r\n        {},\r\n      ),\r\n    });\r\n\r\n    this.setState({ manifest: this.props.manifest });\r\n  }\r\n\r\n  getMapRootElement = () => {\r\n    return this.mapRoot.current;\r\n  };\r\n\r\n  setupMap() {\r\n    const mapRootElement = this.getMapRootElement();\r\n    if (!mapRootElement) {\r\n      return;\r\n    }\r\n    const mapSvg = mapRootElement.querySelector(\"svg\");\r\n    if (!mapSvg) {\r\n      return;\r\n    }\r\n\r\n    Object.assign(mapSvg.style, {\r\n      position: \"absolute\",\r\n      zIndex: 0,\r\n      top: 0,\r\n      left: 0,\r\n      height: \"100%\",\r\n      width: \"100%\",\r\n    });\r\n\r\n    this.setUnavailableColors();\r\n\r\n    mapSvg\r\n      .querySelectorAll<HTMLElement>(\"*[data-section-id]\")\r\n      .forEach((path) => {\r\n        const sectionId = path.getAttribute(\"data-section-id\");\r\n        if (!sectionId) {\r\n          return;\r\n        }\r\n        path.setAttribute(\"data-section-id\", sectionId);\r\n      });\r\n\r\n    mapSvg.querySelectorAll<HTMLElement>(\"text\").forEach((text) => {\r\n      text.style.pointerEvents = \"none\";\r\n    });\r\n\r\n    this.setState({ mapSvg });\r\n  }\r\n\r\n  /**\r\n   * Properties\r\n   */\r\n\r\n  get configFilePath() {\r\n    return `${this.props.mapsDomain}/${this.props.venueId}/${this.props.configurationId}`;\r\n  }\r\n\r\n  /**\r\n   * Public Methods\r\n   */\r\n\r\n  highlightSection = (section: string) =>\r\n    this.toggleSectionHighlight(section, true);\r\n\r\n  unhighlightSection = (section?: string) => {\r\n    if (!section) {\r\n      return this.setState({ currentHoveredSection: undefined, currentHoveredZone: undefined });\r\n    }\r\n    return this.toggleSectionHighlight(section, false);\r\n  };\r\n\r\n  selectSection = (section: string) => this.toggleSectionSelect(section, true);\r\n\r\n  deselectSection = (section?: string) => {\r\n    if (!section) {\r\n      return this.clearSelection();\r\n    }\r\n    return this.toggleSectionSelect(section, false);\r\n  };\r\n\r\n  updateTicketGroups = (ticketGroups = this.props.ticketGroups) =>\r\n    this.setState({ ticketGroups });\r\n\r\n  /**\r\n   * Colors\r\n   */\r\n\r\n  setUnavailableColors = () =>\r\n    this.fillPathsForSection((element) => ({\r\n      \"data-unavailable-color\": element.getAttribute(\"fill\") as string,\r\n    }));\r\n\r\n  fillUnavailableColors = () =>\r\n    this.fillPathsForSection((element) => ({\r\n      fill: element.getAttribute(\"data-unavailable-color\") as string,\r\n      opacity: \"1\",\r\n      \"stroke-width\": \"1\",\r\n      stroke: unhighlightedSectionColor,\r\n    }));\r\n\r\n  fillPathsForSection = (\r\n    propertiesForElement: PropertiesForElement,\r\n    section?: string,\r\n  ): void =>\r\n    this.getAllPaths(section).forEach((element) =>\r\n      Object.entries(propertiesForElement(element)).forEach(\r\n        ([property, value]) => element.setAttribute(property, value),\r\n      ),\r\n    );\r\n\r\n  fillPathsForZone = (\r\n    propertiesForElement: PropertiesForElement,\r\n    section?: string,\r\n  ): void =>\r\n    this.getAllPathsForZone(section).forEach((element) =>\r\n      Object.entries(propertiesForElement(element)).forEach(\r\n        ([property, value]) => element.setAttribute(property, value),\r\n      ),\r\n    );\r\n\r\n  getAllPaths = (id?: string) => {\r\n    const mapRootElement = this.getMapRootElement();\r\n    if (!mapRootElement) {\r\n      return [];\r\n    }\r\n\r\n    return Array.from(\r\n      mapRootElement.querySelectorAll(\r\n        `[data-section-id${id ? `=\"${id}\"` : \"\"}]`,\r\n      ),\r\n    ).reduce((memo, element) => {\r\n      const children = element.querySelectorAll(\"path\");\r\n      return memo.concat(children.length ? Array.from(children) : [element]);\r\n    }, [] as Element[]);\r\n  };\r\n\r\n  getAllPathsForZone = (id?: string) => {\r\n    const mapRootElement = this.getMapRootElement();\r\n    if (!mapRootElement) {\r\n      return [];\r\n    }\r\n\r\n    const sections = this.state.manifest.sections;\r\n    const zone: string = sections[id ?? ''].zone_name;\r\n    var ids: string[] = [];\r\n\r\n    Object.keys(sections).forEach(key => {\r\n      if (sections[key].zone_name === zone) {\r\n        ids.push(key);\r\n      }\r\n    });\r\n\r\n    return Array.from(\r\n      mapRootElement.querySelectorAll(\r\n        `[data-section-id${ids.length > 0 ? `=\"${ids.join('\"],[data-section-id=\"')}\"` : \"\"}]`\r\n      ),\r\n    ).reduce((memo, element) => {\r\n      const children = element.querySelectorAll(\"path\");\r\n      return memo.concat(children.length ? Array.from(children) : [element]);\r\n    }, [] as Element[]);\r\n  };\r\n\r\n  /**\r\n   * Helpers\r\n   */\r\n\r\n  clearSelection = () => {\r\n    this.setState({\r\n      selectedSections: new Set(),\r\n    });\r\n  };\r\n\r\n  toggleSectionHighlight = (section?: string, shouldHighlight = true) => {\r\n    if (!section) {\r\n      return;\r\n    }\r\n\r\n    const sectionId = section;\r\n    const isUnhighlightingSelectedSection =\r\n      !shouldHighlight && this.state.selectedSections.has(sectionId);\r\n    if (isUnhighlightingSelectedSection) {\r\n      return;\r\n    }\r\n\r\n    return this.fillZone(sectionId, shouldHighlight);\r\n  };\r\n\r\n\r\n  toggleSectionSelect = (section?: string | null, shouldHighlight = true) => {\r\n    if (!section) {\r\n      return;\r\n    }\r\n\r\n    const sectionId = section;\r\n    if (!$venueSections(this.state).includes(sectionId)) {\r\n      return;\r\n    }\r\n\r\n    const selectedSections = new Set<string>();\r\n\r\n    if (shouldHighlight) {\r\n      const selectedZone = this.props.manifest.sections[section]?.zone_name;\r\n\r\n      if (!selectedZone) {\r\n        return;\r\n      }\r\n\r\n      for (const [key, section] of Object.entries(this.props.manifest.sections)) {\r\n        if (section.zone_name === selectedZone) {\r\n          selectedSections.add(key);\r\n        }\r\n      }\r\n    }\r\n\r\n    this.setState({ selectedSections });\r\n  };\r\n\r\n  updateMap() {\r\n    this.fillUnavailableColors();\r\n    $venueSections(this.state).forEach((section) => {\r\n      this.fillZone(\r\n        section,\r\n        this.state.selectedSections.has(section),\r\n      );\r\n    });\r\n  }\r\n\r\n  fillZone(section: string, shouldHighlight = true) {\r\n    const isAnAvailableSection = $venueSections(this.state).includes(section);\r\n    if (isAnAvailableSection) {\r\n      this.fillPathsForZone(\r\n        () => ({\r\n          fill: this.getDefaultColor(\r\n            $ticketGroupsBySection(this.state)[section],\r\n          ),\r\n          //opacity: shouldHighlight ? \"0.8\" : \"1\",\r\n          opacity: \"1\",\r\n          \"stroke-width\": \"1\",\r\n          stroke: shouldHighlight\r\n            ? highlightedSectionColor\r\n            : unhighlightedSectionColor,\r\n          cursor: \"pointer\",\r\n        }),\r\n        section,\r\n      );\r\n    }\r\n  }\r\n\r\n  getSectionFromTarget(target?: HTMLElement | null) {\r\n    if (!target) {\r\n      return;\r\n    }\r\n    const element = target.closest(\"[data-section-id]\");\r\n    if (!element) {\r\n      return;\r\n    }\r\n\r\n    const sectionId = element.getAttribute(\"data-section-id\");\r\n    if (!sectionId) {\r\n      return;\r\n    }\r\n\r\n    return sectionId;\r\n  }\r\n\r\n  /**\r\n   * Coloring\r\n   */\r\n\r\n\r\n  getDefaultColor(ticketGroups: TicketGroup[] = []): string {\r\n    return ticketGroups[0].color;\r\n  }\r\n\r\n  /**\r\n   * Interaction Callbacks\r\n   */\r\n\r\n  onMouseOver = ({\r\n    clientX,\r\n    clientY,\r\n    target,\r\n  }: React.MouseEvent<HTMLElement>) => {\r\n    if (this.state.isTouchDevice) return;\r\n    this.doHover(target as HTMLElement, clientX, clientY);\r\n  };\r\n\r\n  onMouseOut = ({ relatedTarget }: React.MouseEvent<HTMLElement>) => {\r\n    if (this.state.isTouchDevice) return;\r\n    this.doHoverCleanup(relatedTarget as HTMLElement);\r\n  };\r\n\r\n  onMouseMove = ({ nativeEvent }: React.MouseEvent<HTMLElement>) =>\r\n    this.setState({\r\n      tooltipX: nativeEvent.clientX,\r\n      tooltipY: nativeEvent.clientY,\r\n    });\r\n\r\n  onClick = () => this.doSelect();\r\n\r\n  onTouchStart = (e: React.TouchEvent<HTMLElement>) => {\r\n    const section = this.getSectionFromTarget(e.target as HTMLElement);\r\n    if (section) {\r\n      this.setState({\r\n        currentHoveredSection: section,\r\n      });\r\n      this.highlightSection(section);\r\n    }\r\n  };\r\n\r\n  onTouchMove = () => {\r\n    this.setState({ dragging: true });\r\n  };\r\n\r\n  getZoneNameFromSection(section: string): string {\r\n    return this.state.manifest.sections[section]?.zone_name ?? '';\r\n  }\r\n\r\n  onTouchEnd = (e: React.TouchEvent<HTMLElement>) => {\r\n    const section = this.state.currentHoveredSection;\r\n    if (section) {\r\n      this.doSelect(section);\r\n      this.setState({ currentHoveredSection: undefined, currentHoveredZone: undefined });\r\n    }\r\n    if (this.state.dragging) {\r\n      e.preventDefault();\r\n    }\r\n    this.setState({ dragging: false });\r\n  };\r\n\r\n  /**\r\n   * Interactions\r\n   */\r\n\r\n  doHover(target: HTMLElement, tooltipX?: number, tooltipY?: number) {\r\n    const section = this.getSectionFromTarget(target);\r\n    if (!section) {\r\n      return;\r\n    }\r\n\r\n    if (!$venueSections(this.state).includes(section)) {\r\n      return;\r\n    }\r\n\r\n    this.highlightSection(section);\r\n    this.setState({\r\n      tooltipActive: tooltipX !== undefined && tooltipY !== undefined,\r\n      tooltipX: tooltipX !== undefined ? tooltipX : 0,\r\n      tooltipY: tooltipY !== undefined ? tooltipY : 0,\r\n      tooltipSectionName: this.state.sectionMapping[section].sectionName,\r\n      tooltipZoneName: this.state.manifest.sections[section].zone_name,\r\n      currentHoveredSection: section,\r\n      currentHoveredZone: this.getZoneNameFromSection(section)\r\n    });\r\n  }\r\n\r\n  doHoverCleanup(enteringElement: HTMLElement): void {\r\n    const isEnteringText =\r\n      !!enteringElement && enteringElement.nodeName.toLowerCase() === \"text\";\r\n    if (isEnteringText) {\r\n      return;\r\n    }\r\n\r\n    const enteringSection = this.getSectionFromTarget(enteringElement);\r\n    const isEnteringTheSameSection =\r\n      !!enteringSection && enteringSection === this.state.currentHoveredSection;\r\n    if (isEnteringTheSameSection) {\r\n      return;\r\n    }\r\n\r\n    this.setState({\r\n      tooltipActive: false,\r\n      currentHoveredSection: undefined,\r\n      currentHoveredZone: undefined,\r\n    });\r\n  }\r\n\r\n  // TBD\r\n  doSelect(section = this.state.currentHoveredSection) {\r\n    if (!section) {\r\n      return;\r\n    }\r\n    this.toggleSectionSelect(\r\n      section,\r\n      !this.state.selectedSections.has(section),\r\n    );\r\n  }\r\n\r\n  handleZoomIn = () => {\r\n    if (this.zoom) {\r\n      this.zoom.zoomIn(0.1);\r\n    }\r\n  };\r\n\r\n  handleZoomOut = () => {\r\n    if (this.zoom) {\r\n      this.zoom.zoomOut(0.1);\r\n    }\r\n  };\r\n\r\n  handleResetZoom = () => {\r\n    if (this.zoom) {\r\n      this.zoom.reset();\r\n    }\r\n\r\n    this.setState({\r\n      selectedSections: new Set(),\r\n    });\r\n  };\r\n\r\n  render() {\r\n    if (this.state.mapNotFound) {\r\n      return (\r\n        <div\r\n          style={{\r\n            height: \"100%\",\r\n            width: \"100%\",\r\n            display: \"flex\",\r\n            flexWrap: \"wrap\",\r\n            fontFamily: \"Nunito Sans\",\r\n          }}\r\n        >\r\n          <div\r\n            style={{\r\n              display: \"flex\",\r\n              justifyContent: \"center\",\r\n              alignItems: \"center\",\r\n              flexDirection: \"column\",\r\n              textAlign: \"center\",\r\n              flex: \"1 0 30%\",\r\n            }}\r\n          >\r\n            {this.props.missingSeatMapLogo || <MissingSeatMapLogo />}\r\n            <div\r\n              style={{\r\n                fontWeight: 400,\r\n                fontSize: \"1.2em\",\r\n              }}\r\n            >\r\n              Seating Chart Coming Soon\r\n            </div>\r\n          </div>\r\n        </div>\r\n      );\r\n    }\r\n\r\n    return (\r\n      <div\r\n        ref={this.container}\r\n        onMouseOver={this.onMouseOver}\r\n        onMouseOut={this.onMouseOut}\r\n        onMouseMove={this.onMouseMove}\r\n        onClick={this.onClick}\r\n        onTouchStart={this.onTouchStart}\r\n        onTouchEnd={this.onTouchEnd}\r\n        onTouchMove={this.onTouchMove}\r\n        style={{\r\n          position: \"relative\",\r\n          fontFamily: this.props.mapFontFamily,\r\n          height: \"95%\",\r\n          width: \"100%\",\r\n          pointerEvents: this.props.mouseControlEnabled ? \"initial\" : \"none\",\r\n        }}\r\n      >\r\n        {!this.state.isTouchDevice && (\r\n          <Tooltip\r\n            isActive={this.state.tooltipActive}\r\n            x={this.state.tooltipX}\r\n            y={this.state.tooltipY}\r\n            name={this.state.tooltipSectionName}\r\n            zone={this.state.tooltipZoneName}\r\n            color={\r\n              this.state.currentHoveredSection\r\n                ? this.getDefaultColor(\r\n                  $ticketGroupsBySection(this.state)[\r\n                  this.state.currentHoveredSection\r\n                  ],\r\n                )\r\n                : \"\"\r\n            }\r\n            ticketGroups={$availableTicketGroups(this.state).filter(\r\n              (ticketGroup) => ticketGroup.zone_name === this.state.currentHoveredZone,\r\n            )}\r\n          />\r\n        )}\r\n        <div\r\n          ref={this.mapRoot}\r\n          style={{\r\n            cursor: \"-webkit-grab\",\r\n            opacity: this.state.mapSvg ? 1 : 0,\r\n          }}\r\n        />\r\n        {this.state.mapSvg && (\r\n          <Actions\r\n            onClearSelection={this.clearSelection}\r\n            showLegend={this.props.showLegend}\r\n            showLegendOpenAlwaysForDesktop={\r\n              this.props.showLegendOpenAlwaysForDesktop\r\n            }\r\n            ticketGroups={this.props.ticketGroups}\r\n            showControls={this.props.showControls}\r\n            openLegendInitially={this.props.openLegendInitially}\r\n            onZoomIn={this.handleZoomIn}\r\n            onZoomOut={this.handleZoomOut}\r\n            onResetZoom={this.handleResetZoom}\r\n          />\r\n        )}\r\n        {this.state.isTouchDevice &&\r\n          this.props.mouseControlEnabled &&\r\n          this.props.showZoomHelper && <ZoomHelper />}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import pick from \"lodash.pick\";\r\nimport union from \"lodash.union\";\r\nimport { createRoot } from \"react-dom/client\";\r\nimport type {\r\n  DefaultProps,\r\n  Props,\r\n  PublicApi,\r\n  RequiredProps,\r\n} from \"./TicketMap\";\r\nimport {\r\n  TicketMap,\r\n} from \"./TicketMap\";\r\n\r\nconst requiredConfigKeys: (keyof RequiredProps)[] = [\r\n  \"venueId\",\r\n  \"configurationId\",\r\n];\r\n\r\nconst optionalConfigKeys: (keyof DefaultProps)[] = [\r\n  \"mapFontFamily\",\r\n  \"selectedSections\",\r\n  \"onSelection\",\r\n  \"ticketGroups\",\r\n  \"mapsDomain\",\r\n  \"showControls\",\r\n  \"showLegendOpenAlwaysForDesktop\",\r\n  \"showLegend\",\r\n  \"openLegendInitially\",\r\n  \"mouseControlEnabled\",\r\n  \"showZoomHelper\",\r\n];\r\n\r\nexport function extractConfigurationFromOptions(options: Props): Props {\r\n  const keys = union(requiredConfigKeys, optionalConfigKeys);\r\n  return pick(options, keys);\r\n}\r\n\r\nexport function validateOptions(options: Props) {\r\n  for (const key of requiredConfigKeys) {\r\n    if (!(key in options)) {\r\n      throw new Error(`Seatmap configuration requires a \"${key}\" value.`);\r\n    }\r\n  }\r\n}\r\n\r\nexport class SeatmapFactory {\r\n  configuration: Props;\r\n\r\n  constructor(options: Props) {\r\n    validateOptions(options);\r\n    this.configuration = extractConfigurationFromOptions(options);\r\n  }\r\n\r\n  build(rootElementId: string): PublicApi | undefined {\r\n    if (!rootElementId) {\r\n      throw new Error(\"Seatmaps must be initialized with a DOM element.\");\r\n    }\r\n\r\n    const rootElement = document.getElementById(rootElementId);\r\n    if (!rootElement) {\r\n      throw new Error(\"Seatmaps must be initialized with a DOM element.\");\r\n    }\r\n\r\n    let map: TicketMap | undefined;\r\n\r\n    const root = createRoot(rootElement);\r\n\r\n    root.render(\r\n      <TicketMap\r\n        {...this.configuration}\r\n        ref={(ref: TicketMap) => {\r\n          map = ref;\r\n        }}\r\n      />\r\n    );\r\n\r\n    return map?.publicApi;\r\n  }\r\n}\r\n\r\nexport { TicketMap };\r\n"]}