{
  "version": 3,
  "sources": ["../../javascript/controllers/error_reporter.js", "../../javascript/source/session_preferences.js", "../../javascript/source/responsive_video.js", "../../javascript/source/guide_toc.js", "../../javascript/source/burger_menu.js", "../../javascript/source/games_section.js", "../../javascript/source/mobile_carousel.js", "../../javascript/source/map_loader.js", "../../../node_modules/.pnpm/@hotwired+stimulus@3.0.1/node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../javascript/controllers/clamp_controller.js", "../../javascript/controllers/locale_link_controller.js", "../../javascript/pages.js"],
  "sourcesContent": ["// Reports JavaScript errors thrown in our own bundles to /js_errors (JsError).\n// Imported once by every layout bundle (application, admin, booking, kiosk,\n// pages, guides, public_share); add-on bundles on top of them are covered by\n// the host's listener. Errors from browser extensions, tag managers and other\n// third-party scripts are dropped here, and the server drops them again.\n// Readable messages need crossorigin on our script tags (docs/js-errors.md).\nconst MAX_REPORTS_PER_PAGE = 5;\n\n// boot_check.js reports a page whose bundle never got this far (a parse error\n// on an old browser kills this reporter too). Imported first, so this runs\n// before any other module of the bundle.\nwindow.gamerBooted = true;\n// An own frame ends in <origin>/assets/<entry>-<64 hex digest>.js:<line>:<column>\n// (no digest in test and development). Anchored at the end: a V8 eval frame\n// names the script that called eval earlier in the line, but runs elsewhere.\nconst OWN_FRAME =\n  /https?:\\/\\/[^\\s/]+(\\/assets\\/[a-z_]+(?:-[0-9a-f]{64})?\\.js):(\\d+):(\\d+)\\)?\\s*$/;\n// Stack lines that are frames with a position of their own (V8 \"at \u2026\",\n// Gecko/JSC \"fn@\u2026\"). Builtins (`Array.map (<anonymous>)`, `[native code]`)\n// have none and are skipped, so our code calling into them still counts.\nconst POSITIONED_FRAME = /:\\d+:\\d+\\)?\\s*$/;\nconst BUILTIN_FRAME = /\\[native code\\]|\\(<anonymous>\\)\\s*$|\\(native\\)\\s*$/;\n\n// A fetch that lost the connection (Chrome, Safari, Firefox wording). Turbo\n// rethrows these and aborted requests after handling them: a failed visit\n// falls back to a full page load, an aborted one was superseded by the next\n// tap. Nothing in our code to fix (docs/js-errors.md).\nconst NETWORK_FAILURE =\n  /^(Failed to fetch|Load failed|NetworkError when attempting to fetch resource\\.?)$/;\n// Firefox's cross-compartment security error. Our code never touches another\n// frame or window, so the object came from a browser extension: e.g. a node it\n// inserted, which Stimulus' MutationObserver then reads `nodeType` on.\nconst FOREIGN_OBJECT = /^Permission denied to access (property|object)\\b/;\n\nlet sent = 0;\nconst seen = new Set();\n// Where the page came from when the error hit, sent as `context`: a crash on a\n// back/forward restore, a Turbo cache preview or in a just-loaded frame looks\n// the same in the stack as one on a fresh load.\nlet lastVisit = null;\nlet lastFrame = null;\nlet lastRenderAt = 0;\n\ndocument.addEventListener(\"turbo:visit\", (event) => {\n  lastVisit = event.detail.action;\n});\ndocument.addEventListener(\"turbo:load\", () => {\n  lastRenderAt = performance.now();\n});\ndocument.addEventListener(\"turbo:frame-load\", (event) => {\n  lastFrame = event.target.id || \"frame\";\n});\n\nwindow.addEventListener(\"error\", (event) => {\n  if (isBrowserNoise(event.error)) return;\n  const own =\n    ownFrame(`${event.filename}:${event.lineno}:${event.colno}`) ||\n    ownStackFrame(event.error?.stack);\n  if (own) report(event.message, own, event.error?.stack);\n});\n\nwindow.addEventListener(\"unhandledrejection\", (event) => {\n  const reason = event.reason;\n  if (isBrowserNoise(reason)) return;\n  const own = ownStackFrame(reason?.stack);\n  if (own) report(reason?.message || String(reason), own, reason?.stack);\n});\n\nfunction isBrowserNoise(error) {\n  return (\n    error?.name === \"AbortError\" ||\n    (error?.name === \"TypeError\" && NETWORK_FAILURE.test(error.message)) ||\n    FOREIGN_OBJECT.test(error?.message)\n  );\n}\n\n// The first frame with code of its own decides, not any frame further down:\n// an inline or injected script that Turbo runs (`<anonymous>:1:1`, e.g. from\n// a browser extension) has Turbo's activateScriptElements, ours, below it.\nfunction ownStackFrame(stack) {\n  for (const line of String(stack || \"\").split(\"\\n\")) {\n    if (BUILTIN_FRAME.test(line) || !POSITIONED_FRAME.test(line)) continue;\n    return ownFrame(line);\n  }\n  return null;\n}\n\n// The own-bundle location in a \"file:line:column\" string.\nfunction ownFrame(text) {\n  const match = OWN_FRAME.exec(text || \"\");\n  return match && { source: match[1], line: +match[2], column: +match[3] };\n}\n\n// keepalive lets the report outlive a page that is being left. Failures are\n// ignored: a lost report must never turn into another error.\nfunction report(message, { source, line, column }, stack) {\n  const key = `${message}|${source}|${line}|${column}`;\n  if (sent >= MAX_REPORTS_PER_PAGE || seen.has(key)) return;\n  sent += 1;\n  seen.add(key);\n\n  fetch(\"/js_errors\", {\n    method: \"POST\",\n    keepalive: true,\n    headers: { \"Content-Type\": \"application/json\" },\n    body: JSON.stringify({\n      message: String(message || \"unknown\").slice(0, 500),\n      source,\n      line,\n      column,\n      // Hosts stripped: every frame is ours or a browser internal anyway.\n      stack: String(stack || \"\")\n        .replace(/https?:\\/\\/[^\\s/)]+/g, \"\")\n        .slice(0, 4000),\n      page: window.location.pathname,\n      context: context(),\n    }),\n  }).catch(() => {});\n}\n\n// Scalars only; the server keeps the keys it knows (JsError::CONTEXT_KEYS).\nfunction context() {\n  return {\n    navigation: performance.getEntriesByType?.(\"navigation\")[0]?.type,\n    turbo_visit: lastVisit,\n    turbo_preview: document.documentElement.hasAttribute(\"data-turbo-preview\"),\n    frame: lastFrame,\n    ms_since_load: Math.round(performance.now()),\n    ms_since_render: lastRenderAt\n      ? Math.round(performance.now() - lastRenderAt)\n      : null,\n    visibility: document.visibilityState,\n  };\n}\n", "const PREFS_ENDPOINT = \"/sp\";\n\nfunction encodeData(data) {\n  try {\n    const json = JSON.stringify(data);\n    const encoded = encodeURIComponent(json).replace(\n      /%([0-9A-F]{2})/g,\n      (_, match) => String.fromCharCode(parseInt(match, 16)),\n    );\n    return window.btoa(encoded);\n  } catch (error) {\n    console.error(\"Failed to encode preferences\", error);\n    return null;\n  }\n}\n\nfunction submitPreferences(bodyData) {\n  const csrf = document.querySelector('meta[name=\"csrf-token\"]');\n  const headers = { \"Content-Type\": \"application/json\" };\n  if (csrf) {\n    headers[\"X-CSRF-Token\"] = csrf.getAttribute(\"content\");\n  }\n\n  fetch(PREFS_ENDPOINT, {\n    method: \"POST\",\n    headers,\n    body: bodyData,\n    credentials: \"same-origin\",\n    keepalive: true,\n  }).catch(() => {});\n}\n\nfunction loadPreferences() {\n  const body = document.body;\n  if (!body) return;\n  // The server omits this attribute once it has buffered preferences for\n  // the session (tracked in the encrypted Rails session cookie), so the\n  // gate is not visible or editable by the browser user.\n  if (body.dataset.sessionPrefsNeeded !== \"1\") return;\n\n  try {\n    const nav = window.navigator || {};\n    const dtz = Intl.DateTimeFormat().resolvedOptions();\n    const data = {\n      tz: dtz.timeZone || null,\n      lg: nav.language || null,\n      lgs: Array.isArray(nav.languages) ? nav.languages : [],\n      hB: (() => {\n        const n = nav.hardwareConcurrency || 0;\n        if (n <= 2) return \"1-2\";\n        if (n <= 4) return \"3-4\";\n        if (n <= 8) return \"5-8\";\n        return \"9+\";\n      })(),\n      mB: (() => {\n        const m = nav.deviceMemory || 0;\n        if (!m) return null;\n        if (m <= 2) return \"\u22642\";\n        if (m <= 4) return \"3-4\";\n        if (m <= 8) return \"5-8\";\n        return \"9+\";\n      })(),\n      sB: (() => {\n        const { width, height } = window.screen || {};\n        const min = Math.min(width || 0, height || 0);\n        if (!min) return null;\n        if (min <= 400) return \"\u2264400\";\n        if (min <= 768) return \"401-768\";\n        if (min <= 1080) return \"769-1080\";\n        if (min <= 1440) return \"1081-1440\";\n        return \"1441+\";\n      })(),\n      dB: (() => {\n        const d = window.devicePixelRatio || 1;\n        if (d <= 1) return \"\u22641\";\n        if (d <= 2) return \"1-2\";\n        return \"2+\";\n      })(),\n      cD: (window.screen && window.screen.colorDepth) || null,\n      tc: (nav.maxTouchPoints || 0) > 0,\n      pD:\n        window.matchMedia &&\n        window.matchMedia(\"(prefers-color-scheme: dark)\").matches,\n      rM:\n        window.matchMedia &&\n        window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches,\n      dn: nav.doNotTrack === \"1\",\n      gp: !!nav.globalPrivacyControl,\n      pl: nav.userAgentData?.platform || nav.platform || null,\n      br: nav.userAgentData?.brands || null,\n    };\n\n    const encoded = encodeData(data);\n    if (!encoded) return;\n\n    const bodyData = JSON.stringify({ p: encoded });\n    submitPreferences(bodyData);\n  } catch (error) {\n    console.error(\"Session preferences failed\", error);\n  }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", loadPreferences);\n", "// The proof video under the landing-page hero: 18 MB (mobile) / 10 MB (desktop)\n// progressive MP4s. It used to autoplay for every non-bot visitor the moment the\n// page loaded, on every connection. Now the poster shows first, the file is only\n// requested once the container is in view, and slow or data-saving connections\n// get a click-to-play poster instead (Sep 2026 audit).\nconst container = document.getElementById(\"responsive-video-container\");\nif (container) {\n  const isBot = container.dataset.isBot === \"true\";\n  const isDesktop = window.matchMedia(\"(min-width: 1024px)\").matches;\n  const connection =\n    navigator.connection ||\n    navigator.mozConnection ||\n    navigator.webkitConnection;\n  const constrained =\n    !!connection &&\n    (connection.saveData === true ||\n      /(^|-)(slow-)?2g$|^3g$/.test(connection.effectiveType || \"\"));\n\n  const video = document.createElement(\"video\");\n  video.poster = isDesktop\n    ? container.dataset.desktopPoster\n    : container.dataset.mobilePoster;\n  video.muted = true;\n  video.loop = true;\n  video.playsInline = true;\n  video.preload = \"none\";\n  video.className = \"w-full h-full rounded-xl object-cover\";\n\n  const source = isDesktop\n    ? container.dataset.desktopVideo\n    : container.dataset.mobileVideo;\n\n  const attachSource = () => {\n    if (video.src) return;\n    video.src = source;\n  };\n\n  if (isBot || constrained) {\n    // Bots get a plain player; constrained connections get the poster with\n    // controls and only load the file when the visitor presses play.\n    video.controls = true;\n    video.addEventListener(\"play\", attachSource, { once: true });\n  } else if (\"IntersectionObserver\" in window) {\n    const observer = new IntersectionObserver(\n      (entries) => {\n        if (!entries.some((entry) => entry.isIntersecting)) return;\n        observer.disconnect();\n        attachSource();\n        video.autoplay = true;\n        // play() returns undefined on some crawlers' stubbed media elements.\n        video.play()?.catch(() => {\n          video.controls = true;\n        });\n      },\n      { rootMargin: \"200px 0px\" },\n    );\n    observer.observe(container);\n  } else {\n    attachSource();\n    video.autoplay = true;\n  }\n\n  container.appendChild(video);\n}\n", "function initGuideToc() {\n  const links = document.querySelectorAll(\".guide-toc-link\");\n  if (!links.length) return;\n  const anchors = Array.from(links)\n    .map(function (l) {\n      return { link: l, el: document.getElementById(l.dataset.tocAnchor) };\n    })\n    .filter(function (a) {\n      return a.el;\n    });\n\n  // The sticky brand bar shows the same \"where am I\" state below xl, where the\n  // TOC itself is display:none. Its links stay in the DOM at every width, so\n  // one pass drives both.\n  const label = document.querySelector(\"[data-guide-current-section]\");\n\n  // Viewport coordinates, not offsetTop: offsetTop is measured from the nearest\n  // positioned ancestor (the .relative wrapper), so it silently changed meaning\n  // whenever that wrapper moved and the highlight lit up the wrong entry.\n  function update() {\n    let current = null;\n    for (let i = anchors.length - 1; i >= 0; i--) {\n      if (anchors[i].el.getBoundingClientRect().top <= 120) {\n        current = anchors[i];\n        break;\n      }\n    }\n    links.forEach(function (l) {\n      l.classList.remove(\"text-pages-darkfrom\", \"font-semibold\");\n      l.classList.add(\"text-gray-500\");\n    });\n    if (current) {\n      current.link.classList.add(\"text-pages-darkfrom\", \"font-semibold\");\n      current.link.classList.remove(\"text-gray-500\");\n    }\n    // Above the first section there is nothing to name, so the bar falls back to\n    // its server-rendered text rather than keeping a stale heading.\n    if (label) {\n      label.textContent = current\n        ? current.link.textContent.trim()\n        : label.dataset.default;\n    }\n  }\n\n  let ticking = false;\n  window.addEventListener(\"scroll\", function () {\n    if (!ticking) {\n      requestAnimationFrame(function () {\n        update();\n        ticking = false;\n      });\n      ticking = true;\n    }\n  });\n  update();\n}\n\n// pages/guides bundles only - neither loads Turbo, so DOMContentLoaded is\n// the page-ready event here (turbo:load would never fire).\ndocument.addEventListener(\"DOMContentLoaded\", initGuideToc);\n", "// Mobile burger-menu open/close. Document-level delegation so the listener\n// survives Turbo navigation without being re-registered.\ndocument.addEventListener(\"click\", function (e) {\n  if (e.target.closest(\"[data-burger-open]\")) {\n    const menu = document.getElementById(\"burger-menu\");\n    const backdrop = document.getElementById(\"burger-backdrop\");\n    const panel = document.getElementById(\"burger-panel\");\n    if (!menu || !backdrop || !panel) return;\n    document.body.classList.add(\"overflow-hidden\");\n    menu.classList.remove(\"hidden\");\n    requestAnimationFrame(function () {\n      backdrop.classList.remove(\"opacity-0\");\n      backdrop.classList.add(\"opacity-100\");\n      panel.classList.remove(\"translate-x-full\");\n      panel.classList.add(\"translate-x-0\");\n    });\n  } else if (e.target.closest(\"[data-burger-close]\")) {\n    const backdrop2 = document.getElementById(\"burger-backdrop\");\n    const panel2 = document.getElementById(\"burger-panel\");\n    if (!backdrop2 || !panel2) return;\n    backdrop2.classList.remove(\"opacity-100\");\n    backdrop2.classList.add(\"opacity-0\");\n    panel2.classList.remove(\"translate-x-0\");\n    panel2.classList.add(\"translate-x-full\");\n    setTimeout(function () {\n      const menu2 = document.getElementById(\"burger-menu\");\n      if (menu2) menu2.classList.add(\"hidden\");\n      document.body.classList.remove(\"overflow-hidden\");\n    }, 300);\n  }\n});\n", "// Game image lightbox + \"show all games\" toggle for the pages/_games_section\n// partial. Document-level delegation so it survives Turbo navigation.\nfunction closeGameImageOverlay() {\n  const overlay = document.getElementById(\"game-image-overlay\");\n  if (!overlay) return;\n  overlay.classList.add(\"hidden\");\n  document.body.style.overflow = \"\";\n}\n\ndocument.addEventListener(\"click\", function (e) {\n  const img = e.target.closest(\"[data-game-image]\");\n  if (img) {\n    const overlay = document.getElementById(\"game-image-overlay\");\n    const overlayImg = document.getElementById(\"game-image-overlay-img\");\n    if (!overlay || !overlayImg) return;\n    overlayImg.src = img.dataset.fullSrc || img.src;\n    overlayImg.alt = img.alt;\n    overlay.classList.remove(\"hidden\");\n    document.body.style.overflow = \"hidden\";\n    return;\n  }\n  if (e.target.closest(\"[data-game-image-overlay]\")) {\n    closeGameImageOverlay();\n    return;\n  }\n  const toggle = e.target.closest(\"[data-games-show-all]\");\n  if (toggle) {\n    document.querySelectorAll(\".game-extra\").forEach(function (el) {\n      el.classList.remove(\"hidden\");\n      el.classList.add(\"flex\");\n    });\n    toggle.parentElement.classList.add(\"hidden\");\n  }\n});\n\ndocument.addEventListener(\"keydown\", function (e) {\n  if (e.key === \"Escape\") closeGameImageOverlay();\n});\n", "// The mobile image strip is a native scroll-snap carousel; this only\n// auto-advances it card by card while in view, until the visitor touches\n// it themselves. Re-runs on Turbo navigation for the new node.\n// The advance is tweened by hand: scrollBy({behavior: \"smooth\"}) is not\n// animated on older iOS Safari and gets cut short by mandatory snapping,\n// which made the change look like a jump instead of a swipe. Targets must\n// be the exact center-snap positions \u2014 anything else makes the re-enabled\n// snap correct the landing with a visible jolt.\n// The strip loops forever to the right: the first cards are cloned onto\n// the end, and landing on a clone invisibly teleports back to its real\n// twin. The teleport waits for the SECOND clone \u2014 the first real card is\n// clamped against the strip's left edge and cannot center, so only from\n// card two onwards do clone and original render pixel-identically.\nconst CLONES = 3;\n\nfunction initMobileCarousel() {\n  const carousel = document.getElementById(\"mobile-carousel\");\n  if (!carousel) return;\n  if (carousel.dataset.carouselInit) return; // guard against re-init\n  carousel.dataset.carouselInit = \"true\";\n  if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) return;\n\n  const SWIPE_MS = 800;\n  const DWELL_MS = 1000;\n\n  Array.prototype.slice\n    .call(carousel.children, 0, CLONES)\n    .forEach(function (card, i) {\n      const clone = card.cloneNode(true);\n      clone.setAttribute(\"aria-hidden\", \"true\");\n      clone.dataset.cloneOf = String(i);\n      carousel.appendChild(clone);\n    });\n\n  let timer = null;\n  let frame = null;\n\n  function stop() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n    if (frame) {\n      cancelAnimationFrame(frame);\n      frame = null;\n      carousel.style.scrollSnapType = \"\";\n    }\n  }\n\n  // Where mandatory center-snapping would put this card (clamped at the\n  // strip's ends, so first/last cards differ from a width+gap step).\n  function snapPosition(card) {\n    const left =\n      card.getBoundingClientRect().left -\n      carousel.getBoundingClientRect().left +\n      carousel.scrollLeft -\n      (carousel.clientWidth - card.clientWidth) / 2;\n    return Math.max(\n      0,\n      Math.min(left, carousel.scrollWidth - carousel.clientWidth),\n    );\n  }\n\n  function nextCard() {\n    const cards = carousel.children;\n    for (let i = 0; i < cards.length; i++) {\n      if (snapPosition(cards[i]) > carousel.scrollLeft + 1) return cards[i];\n    }\n    return cards[0];\n  }\n\n  // Quadratic ease-in-out: its tail still covers ~2% of the distance in the\n  // last frames, so the landing doesn't degrade into 1px steps the way a\n  // cubic tail does.\n  function ease(t) {\n    return t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2;\n  }\n\n  function advance() {\n    const card = nextCard();\n    const from = carousel.scrollLeft;\n    const distance = snapPosition(card) - from;\n    let start = null;\n\n    // Mandatory snapping fights per-frame scrollLeft writes; pause it for\n    // the tween \u2014 the target is an exact snap position, so re-enabling it\n    // moves nothing.\n    carousel.style.scrollSnapType = \"none\";\n\n    function tick(now) {\n      if (start === null) start = now;\n      const progress = Math.min((now - start) / SWIPE_MS, 1);\n      carousel.scrollLeft = from + distance * ease(progress);\n      if (progress < 1) {\n        frame = requestAnimationFrame(tick);\n        return;\n      }\n      frame = null;\n      if (Number(card.dataset.cloneOf) > 0) {\n        const twin = carousel.children[Number(card.dataset.cloneOf)];\n        carousel.scrollLeft = snapPosition(twin);\n      }\n      carousel.style.scrollSnapType = \"\";\n      timer = setTimeout(advance, DWELL_MS);\n    }\n\n    frame = requestAnimationFrame(tick);\n  }\n\n  const observer = new IntersectionObserver(function (entries) {\n    if (entries[0].isIntersecting) {\n      if (!timer && !frame) timer = setTimeout(advance, DWELL_MS);\n    } else {\n      stop();\n    }\n  });\n\n  // Any touch means the visitor has taken over \u2014 never move under a finger.\n  [\"touchstart\", \"pointerdown\", \"wheel\"].forEach(function (event) {\n    carousel.addEventListener(\n      event,\n      function () {\n        stop();\n        observer.disconnect();\n      },\n      { passive: true },\n    );\n  });\n\n  observer.observe(carousel);\n}\n\n// pages/guides bundles only - neither loads Turbo, so DOMContentLoaded is\n// the page-ready event here (turbo:load would never fire).\ndocument.addEventListener(\"DOMContentLoaded\", initMobileCarousel);\n", "// Lazy-loads the MapLibre bundle (data-map-script) only when a [data-map]\n// element comes near the viewport. Shared by pages.js and guides.js: MapLibre\n// is far too heavy to ship on every page load, and most visitors never scroll\n// to the map.\n// Visibility is only half of the gate. The home page's fleet map sits just\n// below the city buttons, so it intersects during the initial load and the\n// ~1 MB of MapLibre would compete with the page's own images and CSS for\n// bandwidth. Hold every injection until the page itself has finished loading,\n// then take the first idle moment. `timeout` keeps a permanently busy main\n// thread from starving the map entirely; the setTimeout is the Safari < 16.4\n// fallback, which has no requestIdleCallback.\nfunction whenPageIdle(callback) {\n  const idle = () => {\n    if (\"requestIdleCallback\" in window)\n      requestIdleCallback(callback, { timeout: 2000 });\n    else setTimeout(callback, 200);\n  };\n  if (document.readyState === \"complete\") idle();\n  else window.addEventListener(\"load\", idle, { once: true });\n}\n\nexport function initMapLoader() {\n  const mapEls = document.querySelectorAll(\"[data-map]\");\n  if (!mapEls.length) return;\n\n  // Read each path from the first element that actually carries it, not from\n  // mapEls[0]: a page can mix map elements (Stuttgart renders a city overview\n  // next to the close-up) and one of them omitting data-map-css used to leave\n  // the whole page without maplibre-gl.css \u2014 the map drew, the markers didn't.\n  const datasetValue = (key) =>\n    [...mapEls].map((el) => el.dataset[key]).find(Boolean);\n\n  const scriptSrc = datasetValue(\"mapScript\");\n  if (!scriptSrc) return;\n  // The address_map bundle's stylesheet (extracted maplibre-gl CSS) must be\n  // loaded alongside the script; the bundle cannot know its digested path.\n  const cssHref = datasetValue(\"mapCss\");\n\n  // Propagate the page's CSP nonce so the injected <script> is allowed under\n  // a nonce-only policy (incl. 'strict-dynamic', which drops host-source).\n  const nonce = document.querySelector('meta[name=\"csp-nonce\"]')?.content;\n\n  const inject = () => {\n    if (cssHref && !document.querySelector(`link[href=\"${cssHref}\"]`)) {\n      const link = document.createElement(\"link\");\n      link.rel = \"stylesheet\";\n      link.href = cssHref;\n      document.head.appendChild(link);\n    }\n    const script = document.createElement(\"script\");\n    if (nonce) script.nonce = nonce;\n    // CloudFront bundle: crossorigin lets its errors through unmasked (see\n    // ApplicationHelper#javascript_include_tag).\n    script.crossOrigin = \"anonymous\";\n    script.src = scriptSrc;\n    document.head.appendChild(script);\n  };\n\n  const observer = new IntersectionObserver(\n    (entries) => {\n      entries.forEach((entry) => {\n        if (entry.isIntersecting) {\n          whenPageIdle(inject);\n          observer.disconnect();\n        }\n      });\n    },\n    { rootMargin: \"200px\" },\n  );\n\n  mapEls.forEach((el) => observer.observe(el));\n}\n\n// pages/guides bundles only - neither loads Turbo, so DOMContentLoaded is\n// the page-ready event here (turbo:load would never fire).\ndocument.addEventListener(\"DOMContentLoaded\", initMapLoader);\n", "/*\nStimulus 3.0.1\nCopyright \u00A9 2021 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            }\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map;\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach(eventListener => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach(eventListener => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values())\n            .reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map;\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions).sort().forEach(key => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName: matches[2],\n        eventOptions: matches[9] ? parseEventOptions(matches[9]) : {},\n        identifier: matches[5],\n        methodName: matches[7]\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions.split(\":\").reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nclass Action {\n    constructor(element, index, descriptor) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n    }\n    static forToken(token) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content));\n    }\n    toString() {\n        const eventNameSuffix = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventNameSuffix}->${this.identifier}#${this.methodName}`;\n    }\n    get params() {\n        if (this.eventTarget instanceof Element) {\n            return this.getParamsFromEventTargetAttributes(this.eventTarget);\n        }\n        else {\n            return {};\n        }\n    }\n    getParamsFromEventTargetAttributes(eventTarget) {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`);\n        const attributes = Array.from(eventTarget.attributes);\n        attributes.forEach(({ name, value }) => {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                Object.assign(params, { [camelize(key)]: typecast(value) });\n            }\n        });\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n}\nconst defaultEventNames = {\n    \"a\": e => \"click\",\n    \"button\": e => \"click\",\n    \"form\": e => \"submit\",\n    \"details\": e => \"toggle\",\n    \"input\": e => e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\",\n    \"select\": e => \"change\",\n    \"textarea\": e => \"input\"\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        if (this.willBeInvokedByEvent(event)) {\n            this.invokeWithEvent(event);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            const { params } = this.action;\n            const actionEvent = Object.assign(event, { params });\n            this.method.call(this.controller, actionEvent);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set;\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(node, attributeName) {\n        const element = node;\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map;\n        this.mutationObserver = new MutationObserver(mutations => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map(attribute => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some(set => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([key, values]) => values.has(value))\n            .map(([key, values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map;\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap;\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach(token => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach(token => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens)\n            .findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString.trim().split(/\\s+/).filter(content => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap;\n        this.valuesByTokenByElement = new WeakMap;\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map;\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map;\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach(binding => this.delegate.bindingDisconnected(binding));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    start() {\n        this.stringMapObserver.start();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            const value = descriptor.reader(rawValue);\n            let oldValue = rawOldValue;\n            if (rawOldValue) {\n                oldValue = descriptor.reader(rawOldValue);\n            }\n            changedMethod.call(this.receiver, value, oldValue);\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map(key => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach(key => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap;\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach(name => values.add(name));\n        return values;\n    }, new Set));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map(key => [key, definition[key]]) : [];\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [\n            ...Object.getOwnPropertyNames(object),\n            ...Object.getOwnPropertySymbols(object)\n        ];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended }\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () { this.a.call(this); };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b;\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor)\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap;\n        this.connectedContexts = new Set;\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap;\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set;\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target\n            || this.findTarget(targetName)\n            || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName)\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map(element => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n    }\n    findElement(selector) {\n        return this.element.matches(selector)\n            ? this.element\n            : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...this.element.matches(selector) ? [this.element] : [],\n            ...this.queryElements(selector).filter(this.containsElement)\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap;\n        this.scopeReferenceCounts = new WeakMap;\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map;\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap;\n        this.modulesByIdentifier = new Map;\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find(context => context.element == element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach(scope => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach(scope => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: identifier => `data-${identifier}-target`\n};\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n    }\n    static start(element, schema) {\n        const application = new Application(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        if (controllerConstructor.shouldLoad) {\n            this.load({ identifier, controllerConstructor });\n        }\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach(definition => this.router.loadDefinition(definition));\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach(identifier => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map(context => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise(resolve => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            }\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            }\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            }\n        }\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            }\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            }\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            }\n        }\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            }\n        }\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            }\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            }\n        }\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition]) {\n    return valueDescriptorForTokenAndTypeDefinition(token, typeDefinition);\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array: return \"array\";\n        case Boolean: return \"boolean\";\n        case Number: return \"number\";\n        case Object: return \"object\";\n        case String: return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\": return \"boolean\";\n        case \"number\": return \"number\";\n        case \"string\": return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(typeObject) {\n    const typeFromObject = parseValueTypeConstant(typeObject.type);\n    if (typeFromObject) {\n        const defaultValueType = parseValueTypeDefault(typeObject.default);\n        if (typeFromObject !== defaultValueType) {\n            throw new Error(`Type \"${typeFromObject}\" must match the type of the default value. Given default value: \"${typeObject.default}\" as \"${defaultValueType}\"`);\n        }\n        return typeFromObject;\n    }\n}\nfunction parseValueTypeDefinition(typeDefinition) {\n    const typeFromObject = parseValueTypeObject(typeDefinition);\n    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    throw new Error(`Unknown value type \"${typeDefinition}\"`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const defaultValue = typeDefinition.default;\n    if (defaultValue !== undefined)\n        return defaultValue;\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(token, typeDefinition) {\n    const key = `${dasherize(token)}-value`;\n    const type = parseValueTypeDefinition(typeDefinition);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() { return defaultValueForDefinition(typeDefinition); },\n        get hasCustomDefaultValue() { return parseValueTypeDefault(typeDefinition) !== undefined; },\n        reader: readers[type],\n        writer: writers[type] || writers.default\n    };\n}\nconst defaultValuesByType = {\n    get array() { return []; },\n    boolean: false,\n    number: 0,\n    get object() { return {}; },\n    string: \"\"\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(\"Expected array\");\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || value == \"false\");\n    },\n    number(value) {\n        return Number(value);\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(\"Expected object\");\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    }\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [ClassPropertiesBlessing, TargetPropertiesBlessing, ValuePropertiesBlessing];\nController.targets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import { Application } from \"@hotwired/stimulus\";\n\n// One Stimulus application per page, shared across bundles via window.Stimulus.\n// Add-on bundles (registration, faq_ai) are included on top of a host layout\n// bundle (application, admin, booking, ...). Each bundle carries its own copy\n// of this module, so the sharing must go through window: without it every\n// bundle would start its own Application, each would scan the whole DOM, and\n// any identifier registered by two bundles would connect twice per element\n// (e.g. step-particles in both the application and registration bundles).\nconst application = window.Stimulus || Application.start();\napplication.debug = false;\nwindow.Stimulus = application;\n\n// All bundles register through this helper, never through\n// application.register directly - Stimulus itself does not dedupe\n// identifiers, and the registered set must span bundles.\nconst registered = (application.registeredIdentifiers ||= new Set());\n\nexport function register(identifier, controller) {\n  if (registered.has(identifier)) return;\n  registered.add(identifier);\n  application.register(identifier, controller);\n}\n\nexport { application };\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Collapses long content to a few lines and reveals the rest on demand.\n// The button is hidden when the content fits without clamping, and again\n// once the content has been expanded. Measurement is deferred until the\n// content is visible, because the drawer panel slides in from a hidden\n// state where everything measures 0\u00D70. The optional `fade` target (a\n// gradient overlay on the last clamped lines) follows the button's\n// visibility.\nexport default class extends Controller {\n  static targets = [\"content\", \"button\", \"fade\"];\n\n  connect() {\n    this.observer = new IntersectionObserver((entries) => {\n      if (entries.some((entry) => entry.isIntersecting)) {\n        this.updateButton();\n        this.observer.disconnect();\n      }\n    });\n    this.observer.observe(this.contentTarget);\n  }\n\n  disconnect() {\n    this.observer?.disconnect();\n  }\n\n  updateButton() {\n    const overflowing =\n      this.contentTarget.scrollHeight > this.contentTarget.clientHeight;\n    this.buttonTarget.classList.toggle(\"hidden\", !overflowing);\n    if (this.hasFadeTarget)\n      this.fadeTarget.classList.toggle(\"hidden\", !overflowing);\n  }\n\n  expand() {\n    const clampClasses = [...this.contentTarget.classList].filter((name) =>\n      name.startsWith(\"line-clamp-\"),\n    );\n    this.contentTarget.classList.remove(...clampClasses);\n    this.buttonTarget.classList.add(\"hidden\");\n    if (this.hasFadeTarget) this.fadeTarget.classList.add(\"hidden\");\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Carries the current page's query string and fragment onto the language\n// switcher's links, so switching language from\n// /koeln?group=freunde#pricing lands on /en/cologne?group=freunde#pricing\n// instead of the top of the untargeted page.\n//\n// Both halves have to happen here rather than in `locale_switch_url`:\n//   - a fragment never reaches the server, so Ruby cannot know about #pricing;\n//   - the navbar and footer fragment caches key on request.path, not the query\n//     string, so a ?group= baked into the cached HTML would be served to the\n//     next visitor of the plain path.\n//\n// `locale` is dropped rather than carried: the target locale is already in\n// the switcher's href (a path segment, or nothing at all for German), so a\n// ?locale= the reader arrived with would win over it and switch them straight\n// back. Any other param the href already sets also keeps its own value.\nexport default class extends Controller {\n  // LocaleSwitchable reads params[:locale]; see the note above.\n  static SKIP = new Set([\"locale\"]);\n\n  connect() {\n    this.base = this.element.getAttribute(\"href\");\n    this.apply();\n    this.onHashChange = () => this.apply();\n    window.addEventListener(\"hashchange\", this.onHashChange);\n  }\n\n  disconnect() {\n    window.removeEventListener(\"hashchange\", this.onHashChange);\n  }\n\n  // Recomputed from the untouched href every time, so repeated hash changes\n  // don't stack up params.\n  apply() {\n    const url = new URL(this.base, window.location.href);\n    const current = new URLSearchParams(window.location.search);\n\n    for (const key of new Set(current.keys())) {\n      if (url.searchParams.has(key) || this.constructor.SKIP.has(key)) continue;\n      for (const value of current.getAll(key)) {\n        url.searchParams.append(key, value);\n      }\n    }\n    url.hash = window.location.hash;\n\n    this.element.setAttribute(\"href\", url.pathname + url.search + url.hash);\n  }\n}\n", "// viewport_fix intentionally omitted: no pages-layout view uses\n// h-screen/min-h-screen (the only --vh consumers), and reading innerHeight +\n// writing --vh on load caused a forced reflow. See guides.js for the same call.\nimport \"./controllers/error_reporter.js\"; // first, so it sees errors from every module below\nimport \"./source/session_preferences.js\";\nimport \"./source/responsive_video.js\";\nimport \"./source/guide_toc.js\";\nimport \"./source/burger_menu.js\";\nimport \"./source/games_section.js\";\nimport \"./source/mobile_carousel.js\";\n\nimport \"./source/map_loader.js\";\n\n// The marketing bundle runs a minimal Stimulus app. Controllers registered\n// in shared_controllers/user_controllers live in the application.js bundle,\n// which pages-layout views never load \u2014 a data-controller here silently\n// no-ops unless its controller is registered below.\nimport { register } from \"./controllers/application.js\";\nimport ClampController from \"./controllers/clamp_controller.js\";\nimport LocaleLinkController from \"./controllers/locale_link_controller.js\";\n\nregister(\"clamp\", ClampController);\nregister(\"locale-link\", LocaleLinkController);\n"],
  "mappings": "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",
  "names": ["OWN_FRAME", "POSITIONED_FRAME", "BUILTIN_FRAME", "NETWORK_FAILURE", "FOREIGN_OBJECT", "sent", "seen", "lastVisit", "lastFrame", "lastRenderAt", "event", "isBrowserNoise", "own", "ownFrame", "ownStackFrame", "report", "reason", "error", "stack", "line", "text", "match", "message", "source", "column", "key", "context", "encodeData", "data", "json", "encoded", "_", "match", "error", "submitPreferences", "bodyData", "csrf", "headers", "loadPreferences", "body", "nav", "n", "m", "width", "height", "min", "d", "container", "isBot", "isDesktop", "connection", "constrained", "video", "source", "attachSource", "observer", "entries", "entry", "initGuideToc", "links", "anchors", "l", "a", "label", "update", "current", "i", "ticking", "e", "menu", "backdrop", "panel", "backdrop2", "panel2", "menu2", "closeGameImageOverlay", "overlay", "e", "img", "overlayImg", "toggle", "el", "initMobileCarousel", "carousel", "SWIPE_MS", "DWELL_MS", "card", "i", "clone", "timer", "frame", "stop", "snapPosition", "left", "nextCard", "cards", "ease", "t", "advance", "from", "distance", "start", "tick", "now", "progress", "twin", "observer", "entries", "event", "whenPageIdle", "callback", "idle", "initMapLoader", "mapEls", "datasetValue", "key", "el", "scriptSrc", "cssHref", "nonce", "inject", "link", "script", "observer", "entries", "entry", "EventListener", "eventTarget", "eventName", "eventOptions", "binding", "event", "extendedEvent", "extendEvent", "left", "right", "leftIndex", "rightIndex", "stopImmediatePropagation", "Dispatcher", "application", "eventListener", "listeners", "map", "error", "message", "detail", "eventListenerMap", "cacheKey", "parts", "key", "descriptorPattern", "parseActionDescriptorString", "descriptorString", "matches", "parseEventTarget", "parseEventOptions", "eventTargetName", "options", "token", "stringifyEventTarget", "camelize", "value", "_", "char", "capitalize", "dasherize", "tokenize", "Action", "element", "index", "descriptor", "getDefaultEventNameForElement", "eventNameSuffix", "params", "pattern", "name", "match", "typecast", "defaultEventNames", "e", "tagName", "Binding", "context", "action", "method", "target", "currentTarget", "actionEvent", "identifier", "controller", "ElementObserver", "delegate", "mutations", "callback", "mutation", "node", "attributeName", "nodes", "tree", "processor", "AttributeObserver", "StringMapObserver", "oldValue", "attribute", "add", "fetch", "del", "prune", "values", "Multimap", "set", "size", "TokenListObserver", "element", "attributeName", "delegate", "AttributeObserver", "Multimap", "callback", "unmatchedTokens", "matchedTokens", "tokens", "token", "previousTokens", "currentTokens", "firstDifferingIndex", "zip", "previousToken", "currentToken", "tokensAreEqual", "tokenString", "parseTokenString", "content", "index", "left", "right", "length", "_", "ValueListObserver", "value", "parseResult", "valuesByToken", "error", "BindingObserver", "context", "action", "binding", "Binding", "Action", "ValueObserver", "receiver", "StringMapObserver", "key", "descriptor", "name", "oldValue", "defaultValue", "writer", "rawValue", "rawOldValue", "changedMethodName", "changedMethod", "valueDescriptorMap", "descriptors", "hasMethodName", "capitalize", "TargetObserver", "_a", "Context", "module", "scope", "functionName", "detail", "identifier", "controller", "message", "methodName", "args", "readInheritableStaticArrayValues", "constructor", "propertyName", "ancestors", "getAncestorsForConstructor", "values", "getOwnStaticArrayValues", "readInheritableStaticObjectPairs", "pairs", "getOwnStaticObjectPairs", "definition", "bless", "shadow", "getBlessedProperties", "properties", "shadowConstructor", "extend", "shadowProperties", "getShadowProperties", "blessedProperties", "blessing", "prototype", "getOwnKeys", "getShadowedDescriptor", "shadowingDescriptor", "object", "extendWithReflect", "extended", "testReflectExtension", "b", "blessDefinition", "Module", "application", "ClassMap", "tokenize", "DataMap", "dasherize", "Guide", "logger", "warnedKeys", "attributeValueContainsToken", "TargetSet", "targetName", "targetNames", "target", "targets", "selector", "targetDescriptor", "revisedAttributeName", "Scope", "schema", "ScopeObserver", "scopesByIdentifier", "referenceCount", "Router", "contexts", "defaultSchema", "Application", "_Application", "Dispatcher", "domReady", "controllerConstructor", "head", "rest", "resolve", "ClassPropertiesBlessing", "classDefinition", "propertiesForClassDefinition", "classes", "attribute", "TargetPropertiesBlessing", "targetDefinition", "propertiesForTargetDefinition", "ValuePropertiesBlessing", "valueDefinitionPairs", "propertyDescriptorMap", "result", "valueDefinitionPair", "valueDescriptor", "parseValueDefinitionPair", "propertiesForValueDefinitionPair", "read", "write", "typeDefinition", "valueDescriptorForTokenAndTypeDefinition", "parseValueTypeConstant", "constant", "parseValueTypeDefault", "parseValueTypeObject", "typeObject", "typeFromObject", "defaultValueType", "parseValueTypeDefinition", "typeFromDefaultValue", "typeFromConstant", "type", "defaultValueForDefinition", "defaultValuesByType", "camelize", "readers", "writers", "array", "writeString", "writeJSON", "Controller", "eventName", "prefix", "bubbles", "cancelable", "event", "application", "Application", "registered", "register", "identifier", "controller", "clamp_controller_default", "Controller", "entries", "entry", "overflowing", "clampClasses", "name", "__publicField", "locale_link_controller_default", "Controller", "url", "current", "key", "value", "__publicField", "register", "clamp_controller_default", "locale_link_controller_default"]
}
