{
  "version": 3,
  "sources": ["map_exploded.js"],
  "sourcesContent": ["/* Interactive explanation of the live MapLibre layer stack. Every texture is\n * captured from the application's renderer; nothing is traced or recoloured. */\n(() => {\n  'use strict';\n  if (!window.snowdeskLayerExplainer) return;\n\n  const fallbackStrings = {\n    title: 'How the map is built',\n    loading: 'Loading map layers\u2026',\n    close: 'Close layer animation',\n    'view-label': 'Map layer view',\n    stacked: 'Stacked',\n    exploded: 'Exploded',\n    replay: 'Replay build',\n    'map-layers': 'Map layers',\n    'layers-order': 'Layers from top to bottom',\n    reset: 'Reset',\n    'data-credits': 'Data credits',\n    swisstopo: 'Swisstopo',\n    'winter-basemap': 'Winter basemap',\n    bulletins: 'SLF bulletins',\n    'avalanche-danger': 'Avalanche danger',\n    major: 'L1 \u00B7 Major',\n    minor: 'L2 \u00B7 Minor',\n    micro: 'L4 \u00B7 Micro',\n    boundaries: 'EAWS boundaries',\n    resorts: 'Resorts',\n    'resort-locations': 'Resort locations',\n    locations: 'Your locations',\n    'saved-places': 'Saved places',\n    'stacked-status': 'Stacked layer view.',\n    'exploded-status': 'Exploded layer view.',\n    'replay-status': 'Replaying map build.',\n    complete: 'Every layer, together in one map.',\n    restored: 'All layers restored.',\n    adding: 'Adding %(name)s.',\n    unavailable: '%(name)s is unavailable. Close and retry after its data loads.',\n    timeout: 'Map tiles did not finish loading. Close and retry.',\n    'no-date': 'No bulletin date selected',\n  };\n  const strings = window.pwaStrings?.read('map-explainer-strings', fallbackStrings)\n    || fallbackStrings;\n  const interpolate = window.pwaStrings?.interpolate\n    || ((value, values) => value.replace(/%\\((\\w+)\\)s/g, (match, key) => values[key] ?? match));\n  const escape = window.pwaStrings?.escapeHtml\n    || (value => String(value).replace(/[&<>\"']/g, character => ({\n      '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#x27;',\n    })[character]));\n  const text = key => escape(strings[key]);\n\n  const dialog = document.createElement('dialog');\n  dialog.className = 'map-exploded';\n  dialog.setAttribute('aria-labelledby', 'exploded-title');\n  dialog.innerHTML = `\n    <header class=\"exploded-header\">\n      <h1 id=\"exploded-title\">${text('title')}</h1>\n      <p id=\"exploded-status\" class=\"exploded-status\" role=\"status\">${text('loading')}</p>\n      <button type=\"button\" class=\"exploded-close\" data-close aria-label=\"${text('close')}\">\u00D7</button>\n    </header>\n    <div class=\"exploded-controls\">\n      <div class=\"exploded-segments\" role=\"group\" aria-label=\"${text('view-label')}\">\n        <button type=\"button\" data-view=\"stacked\" aria-pressed=\"true\" disabled>${text('stacked')}</button>\n        <button type=\"button\" data-view=\"exploded\" aria-pressed=\"false\" disabled>${text('exploded')}</button>\n      </div>\n      <button type=\"button\" class=\"exploded-replay\" data-replay disabled>\n        <svg viewBox=\"0 0 20 20\" aria-hidden=\"true\"><path d=\"M4.2 7.1A6.5 6.5 0 1 1 3.7 12M4.2 7.1V2.8M4.2 7.1h4.3\"/></svg>\n        ${text('replay')}\n      </button>\n    </div>\n    <div class=\"exploded-scene\">\n      <div class=\"exploded-stage\"><svg role=\"img\" aria-label=\"${text('map-layers')}\"></svg></div>\n      <aside class=\"exploded-sidebar\" aria-label=\"${text('layers-order')}\">\n        <div class=\"exploded-reset-slot\"><button type=\"button\" class=\"exploded-reset\" data-reset hidden>${text('reset')}</button></div>\n        <div class=\"exploded-labels\"></div>\n      </aside>\n    </div>\n    <footer>\n      <span><span data-date></span> \u00B7 \u00A9 swisstopo \u00B7 SLF / EAWS</span>\n      <a href=\"/colophon/\">${text('data-credits')}</a>\n    </footer>`;\n  document.body.appendChild(dialog);\n\n  const status = dialog.querySelector('[role=\"status\"]');\n  const stage = dialog.querySelector('.exploded-stage');\n  const svg = dialog.querySelector('.exploded-stage svg');\n  const labels = dialog.querySelector('.exploded-labels');\n  const reset = dialog.querySelector('[data-reset]');\n  const replay = dialog.querySelector('[data-replay]');\n  const viewButtons = Array.from(dialog.querySelectorAll('[data-view]'));\n  const ns = 'http://www.w3.org/2000/svg';\n  const captureAbort = new AbortController();\n  let amount = 0;\n  let shown = 0;\n  let activeIndex = -1;\n  let animation = 0;\n  let busy = true;\n  let closed = false;\n\n  const mapEl = document.getElementById('map');\n  const groups = [\n    [strings.swisstopo, strings['winter-basemap'], [], null],\n  ];\n  // SNOW-1073 removed the slope sheet: swisstopo's slope raster is gone,\n  // and the slope layer that replaced it is the terrain filter's slope mode,\n  // which is off unless the reader switched it on \u2014 not a sheet every build\n  // can demonstrate.\n  groups.push(\n    [strings.bulletins, strings['avalanche-danger'], ['regions-fill', 'bulletin-groupings-line'], 'l3'],\n    [strings.major, strings.boundaries, ['major-regions-line', 'major-regions-label'], 'l1'],\n    [strings.minor, strings.boundaries, ['sub-regions-line', 'sub-regions-label'], 'l2'],\n    [strings.micro, strings.boundaries, ['regions-line', 'regions-label'], null],\n    [strings.resorts, strings['resort-locations'], ['resorts-pin', 'resorts-label'], 'resorts'],\n  );\n  if (mapEl?.dataset.favouritesEligible === 'true') {\n    groups.push([strings.locations, strings['saved-places'], ['favourites-pin', 'favourites-label'], 'favourites']);\n  }\n\n  const textures = [];\n  groups.forEach(([name, description], index) => {\n    const group = document.createElementNS(ns, 'g');\n    const rect = document.createElementNS(ns, 'rect');\n    rect.setAttribute('width', '1000');\n    rect.setAttribute('height', '720');\n    rect.setAttribute('class', 'exploded-sheet');\n    const image = document.createElementNS(ns, 'image');\n    image.setAttribute('width', '1000');\n    image.setAttribute('height', '720');\n    image.setAttribute('preserveAspectRatio', 'xMidYMid meet');\n    group.append(rect, image);\n    svg.appendChild(group);\n\n    const row = document.createElement('div');\n    row.className = 'exploded-label';\n    row.dataset.built = 'false';\n    // The basemap is the one rung that cannot be switched off.\n    if (index === 0) row.dataset.fixed = 'true';\n    const control = document.createElement('label');\n    const input = document.createElement('input');\n    input.type = 'checkbox';\n    input.setAttribute('role', 'switch');\n    input.checked = true;\n    input.disabled = true;\n    input.setAttribute('aria-label', name);\n    const copy = document.createElement('span');\n    copy.className = 'exploded-label-copy';\n    const title = document.createElement('strong');\n    title.textContent = name;\n    const subtitle = document.createElement('span');\n    subtitle.textContent = description;\n    copy.append(title, subtitle);\n    const off = document.createElement('span');\n    off.className = 'exploded-label-off';\n    off.textContent = 'OFF';\n    off.setAttribute('aria-hidden', 'true');\n    control.append(input, copy, off);\n    row.appendChild(control);\n    // Prepended, so the list always reads top of the ladder down to the\n    // basemap \u2014 the order the exploded view draws, and the order the stack\n    // really has. It used to be built basemap-first and flipped with\n    // `column-reverse` for the exploded view only, so switching views turned\n    // the list upside down, and in the stacked view the basemap sat at the\n    // top of a ladder it is the bottom of. Reversing the DOM rather than the\n    // flex direction also keeps reading and tab order matching what is drawn.\n    labels.prepend(row);\n\n    const texture = {\n      group,\n      image,\n      row,\n      input,\n      off,\n      name,\n      enabled: true,\n      fixed: index === 0,\n    };\n    input.addEventListener('change', () => {\n      texture.enabled = input.checked;\n      syncRows();\n      draw();\n    });\n    textures.push(texture);\n  });\n\n  function stopAnimation() {\n    cancelAnimationFrame(animation);\n  }\n\n  function syncRows() {\n    textures.forEach((texture, index) => {\n      const built = index < shown;\n      texture.row.dataset.built = String(built);\n      texture.row.dataset.current = String(index === activeIndex);\n      texture.row.dataset.off = String(built && !texture.enabled);\n      texture.input.checked = texture.enabled;\n      texture.input.disabled = busy || !built || texture.fixed;\n      texture.off.hidden = !built || texture.enabled;\n    });\n    reset.hidden = !textures.some(texture => !texture.fixed && !texture.enabled);\n    replay.disabled = busy || shown < textures.length;\n    viewButtons.forEach(button => { button.disabled = busy || shown < textures.length; });\n  }\n\n  function draw() {\n    const width = stage.clientWidth;\n    if (!width) return;\n    const narrow = width < 600;\n    const available = Math.max(120, width - 2);\n    const k = available / 1000;\n    const flatScale = available / 1000;\n    const layerStep = narrow ? 34 : 60;\n    const explodedTop = narrow ? 18 : 24;\n    const explodedBaseY = explodedTop + (textures.length - 1) * layerStep;\n    const explodedA = .86 * k;\n    const explodedB = .035 * k;\n    const explodedC = -.14 * k;\n    const explodedD = .12 * k;\n    const explodedSheetHeight = 1000 * explodedB + 720 * explodedD;\n    const explodedHeight = explodedBaseY + explodedSheetHeight + (narrow ? 18 : 26);\n    const flatHeight = flatScale * 720 + 2;\n    const height = explodedHeight * amount + flatHeight * (1 - amount);\n    stage.style.height = `${height}px`;\n    svg.setAttribute('viewBox', `0 0 ${width} ${height}`);\n\n    textures.forEach((texture, index) => {\n      const flat = 1 - amount;\n      const a = explodedA * amount + flatScale * flat;\n      const b = explodedB * amount;\n      const c = explodedC * amount;\n      const d = explodedD * amount + flatScale * flat;\n      const x = 112 * k * amount + flat;\n      const y = (explodedBaseY - index * layerStep) * amount + flat;\n      texture.group.setAttribute('transform', `matrix(${a},${b},${c},${d},${x},${y})`);\n      texture.group.style.opacity = index < shown && texture.enabled ? 1 : 0;\n    });\n    syncRows();\n  }\n\n  function setPressedView(view) {\n    dialog.dataset.view = view;\n    viewButtons.forEach(button => {\n      button.setAttribute('aria-pressed', String(button.dataset.view === view));\n    });\n  }\n\n  function move(target, announce = true) {\n    stopAnimation();\n    const from = amount;\n    const start = performance.now();\n    const duration = matchMedia('(prefers-reduced-motion: reduce)').matches ? 0 : 1300;\n    function tick(now) {\n      const progress = duration ? Math.min(1, (now - start) / duration) : 1;\n      const eased = progress * progress * (3 - 2 * progress);\n      amount = from + (target - from) * eased;\n      draw();\n      if (progress < 1) animation = requestAnimationFrame(tick);\n      else if (announce) status.textContent = target\n        ? strings['exploded-status']\n        : strings['stacked-status'];\n    }\n    animation = requestAnimationFrame(tick);\n  }\n\n  viewButtons.forEach(button => {\n    button.addEventListener('click', () => {\n      const view = button.dataset.view;\n      setPressedView(view);\n      move(view === 'exploded' ? 1 : 0);\n    });\n  });\n\n  function waitForFrame(map, event, read = () => undefined) {\n    return new Promise((resolve, reject) => {\n      if (captureAbort.signal.aborted) {\n        reject(new Error('Capture cancelled'));\n        return;\n      }\n      const cleanup = () => {\n        clearTimeout(timer);\n        map.off(event, done);\n        captureAbort.signal.removeEventListener('abort', cancel);\n      };\n      const cancel = () => {\n        cleanup();\n        reject(new Error('Capture cancelled'));\n      };\n      const done = () => {\n        cleanup();\n        try { resolve(read()); } catch (error) { reject(error); }\n      };\n      const timer = setTimeout(() => {\n        cleanup();\n        reject(new Error(strings.timeout));\n      }, 45000);\n      captureAbort.signal.addEventListener('abort', cancel, {once: true});\n      map.once(event, done);\n      map.triggerRepaint();\n    });\n  }\n\n  function waitForDelay(delay) {\n    if (delay <= 0) return Promise.resolve();\n    return new Promise((resolve, reject) => {\n      const done = () => {\n        captureAbort.signal.removeEventListener('abort', cancel);\n        resolve();\n      };\n      const cancel = () => {\n        clearTimeout(timer);\n        reject(new Error('Capture cancelled'));\n      };\n      const timer = setTimeout(done, delay);\n      captureAbort.signal.addEventListener('abort', cancel, {once: true});\n    });\n  }\n\n  function waitForCadence(lastRevealAt) {\n    if (!lastRevealAt) return Promise.resolve();\n    return waitForDelay(Math.max(0, 1100 - (performance.now() - lastRevealAt)));\n  }\n\n  async function replayBuild() {\n    if (busy || shown < textures.length) return;\n    busy = true;\n    activeIndex = 0;\n    shown = 0;\n    setPressedView('stacked');\n    move(0, false);\n    status.textContent = strings['replay-status'];\n    draw();\n    let lastRevealAt = performance.now();\n    for (let index = 0; index < textures.length; index += 1) {\n      activeIndex = index;\n      syncRows();\n      await waitForCadence(lastRevealAt);\n      if (closed) return;\n      shown = index + 1;\n      lastRevealAt = performance.now();\n      draw();\n    }\n    activeIndex = -1;\n    busy = false;\n    status.textContent = strings.complete;\n    draw();\n  }\n\n  replay.addEventListener('click', () => {\n    replayBuild().catch(error => {\n      if (!closed) {\n        status.textContent = error.message;\n        status.setAttribute('role', 'alert');\n      }\n    });\n  });\n\n  reset.addEventListener('click', () => {\n    textures.forEach(texture => { texture.enabled = true; });\n    status.textContent = strings.restored;\n    draw();\n  });\n\n  const idle = map => waitForFrame(map, 'idle');\n  const capture = map => waitForFrame(map, 'render', () => map.getCanvas().toDataURL('image/png'));\n\n  async function build() {\n    await window.snowdeskMapState.ready;\n    const map = window.snowdeskMap;\n    const oldCamera = {\n      center: map.getCenter(), zoom: map.getZoom(),\n      bearing: map.getBearing(), pitch: map.getPitch(),\n    };\n    const visibility = new Map();\n    const filters = new Map();\n    // Snapshot every layer the demo is about to override, and do it LAZILY.\n    // Reading the style once after ``ready`` misses the tiers the boot-time\n    // lazy loads install later \u2014 the bulletin boundary, and an eligible user's\n    // default-on favourites \u2014 which `prepare()` brings in mid-build. Those\n    // layers would be absent from the snapshot, and the restore below would\n    // read them as `none` and leave them hidden for the rest of the session,\n    // with `overlayLoaded` already true so no loader reinstates them. Taking\n    // each layer's state the first time we see it records what the\n    // application configured, before this demo touches it.\n    const remember = () => {\n      for (const layer of map.getStyle().layers) {\n        if (visibility.has(layer.id)) continue;\n        visibility.set(layer.id, layer.layout?.visibility || 'visible');\n        filters.set(layer.id, layer.filter || null);\n      }\n    };\n    // Show exactly ``ids`` and nothing else, recording what each layer was\n    // configured to be first.\n    const only = (ids) => {\n      remember();\n      for (const layer of map.getStyle().layers) {\n        map.setLayoutProperty(layer.id, 'visibility', ids.includes(layer.id) ? 'visible' : 'none');\n      }\n    };\n    remember();\n    const oldFill = map.getPaintProperty('regions-fill', 'fill-opacity');\n    const container = map.getContainer();\n    const oldContainerStyle = container.getAttribute('style');\n    // SNOW-172: the capture flies to a fixed Swiss view, but the persisted\n    // country filters are the user's. A returning visitor who follows only\n    // France or ALBINA has Switzerland filtered out, so the region, bulletin,\n    // L1, L2 and L4 sheets would all capture blank. Force CH on for the\n    // duration and put the preference back afterwards \u2014 localStorage is never\n    // written.\n    let restoreCountries = () => {};\n    try {\n      const metadata = await window.snowdeskLayerExplainer.prepare();\n      if (closed) return;\n      remember();\n      restoreCountries = await window.snowdeskLayerExplainer.focusSwitzerland();\n      // Install every tier the ladder shows BEFORE photographing anything.\n      // The demo is a fixed sequence \u2014 basemap, then each layer on top \u2014 and\n      // it must read the same whatever the visitor happens to have switched\n      // on, so it cannot wait for the ordinary lazy loads to arrive as their\n      // step comes round. That is also a correctness fix: the boot-time\n      // ``restoreOverlay`` calls for a visitor's OWN enabled tiers are\n      // fire-and-forget, still in flight when ``ready`` resolves, so an L1\n      // outline or a resort pin would install a moment after a step had\n      // already hidden everything and land in that step's photograph. The\n      // Swisstopo sheet came out with region boundaries and resorts drawn on\n      // it. Loading is not showing: each tier installs at the visibility its\n      // own toggle dictates, and the capture forces what it needs per step.\n      for (const [, , , loaderKey] of groups) {\n        if (loaderKey) await window.snowdeskLayerExplainer.prepare(loaderKey);\n      }\n      remember();\n      const applicationSources = new Set([\n        'regions', 'major-regions', 'sub-regions', 'bulletin-groupings',\n        'resorts', 'favourites', 'weather', 'routes', 'community-reports',\n        'cached-tiles', 'terrain-filter',\n      ]);\n      groups[0][2] = map.getStyle().layers\n        .filter(layer => !applicationSources.has(layer.source) && !/^(routes|trip|download|cached)-/.test(layer.id))\n        .map(layer => layer.id);\n      Object.assign(container.style, {\n        position: 'fixed', left: '-10000px', top: '0', width: '1000px', height: '720px',\n      });\n      map.resize();\n      map.fitBounds([[5.9, 45.72], [10.6, 47.85]], {padding: 45, duration: 0});\n      map.setPaintProperty('regions-fill', 'fill-opacity', metadata.fillOpacity);\n      let lastRevealAt = 0;\n      for (let index = 0; index < groups.length; index += 1) {\n        const [name, , ids] = groups[index];\n        if (closed) return;\n        activeIndex = index;\n        status.textContent = interpolate(strings.adding, {name});\n        syncRows();\n        if (!ids.some(id => map.getLayer(id))) {\n          throw new Error(interpolate(strings.unavailable, {name}));\n        }\n        only(ids);\n        await idle(map);\n        // Re-assert immediately before the shutter. The preload above settles\n        // the tiers this demo owns, but an overlay it does not \u2014 community\n        // reports, weather, routes \u2014 can still land from its own boot restore\n        // during the wait, and would otherwise be photographed.\n        only(ids);\n        const url = await capture(map);\n        const decoded = new Image();\n        decoded.src = url;\n        await decoded.decode();\n        textures[index].image.setAttribute('href', url);\n        await waitForCadence(lastRevealAt);\n        shown = index + 1;\n        lastRevealAt = performance.now();\n        draw();\n      }\n      dialog.querySelector('[data-date]').textContent = metadata.date || strings['no-date'];\n      activeIndex = -1;\n      busy = false;\n      status.textContent = strings.complete;\n      draw();\n    } finally {\n      for (const layer of map.getStyle().layers) {\n        // A layer this demo never saw is a layer it never hid; leave it alone\n        // rather than defaulting it to `none`.\n        if (!visibility.has(layer.id)) continue;\n        map.setLayoutProperty(layer.id, 'visibility', visibility.get(layer.id));\n        if (layer.type !== 'background' && layer.type !== 'raster') {\n          map.setFilter(layer.id, filters.get(layer.id));\n        }\n      }\n      // Last, so the recomposed country filters win over the snapshot above.\n      restoreCountries();\n      map.setPaintProperty('regions-fill', 'fill-opacity', oldFill);\n      if (oldContainerStyle === null) container.removeAttribute('style');\n      else container.setAttribute('style', oldContainerStyle);\n      map.resize();\n      map.jumpTo(oldCamera);\n    }\n  }\n\n  const observer = new ResizeObserver(draw);\n\n  /*\n   * Take ``layers=exploded`` back off the URL when the demo closes.\n   *\n   * The parameter is what opened the demo, and it is what map.js reads to\n   * force the Swiss winter basemap for the capture. Left in place, closing\n   * the dialog dismisses the demo for this paint only \u2014 a reload, a\n   * back/forward step, or a shared link reopens it and re-forces the\n   * basemap over the visitor's own stored choice. Closing is the visitor\n   * saying they are done, so the address bar has to agree. replaceState\n   * rather than pushState: the demo is not a history entry of its own, and\n   * every other parameter (``d``, the date) stays exactly as it was.\n   */\n  function clearExplainerParam() {\n    const url = new URL(window.location.href);\n    if (url.searchParams.get('layers') !== 'exploded') return;\n    url.searchParams.delete('layers');\n    window.history.replaceState(window.history.state, '', url.href);\n  }\n\n  dialog.addEventListener('close', () => {\n    closed = true;\n    captureAbort.abort();\n    stopAnimation();\n    observer.disconnect();\n    clearExplainerParam();\n  });\n  dialog.querySelector('[data-close]').addEventListener('click', () => dialog.close());\n  syncRows();\n  setPressedView('stacked');\n  dialog.showModal();\n  draw();\n  observer.observe(stage);\n  build().catch(error => {\n    if (!closed) {\n      busy = false;\n      activeIndex = -1;\n      status.textContent = error.message;\n      status.setAttribute('role', 'alert');\n      syncRows();\n    }\n  });\n})();\n"],
  "mappings": "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",
  "names": ["fallbackStrings", "strings", "interpolate", "value", "values", "match", "key", "escape", "character", "text", "dialog", "status", "stage", "svg", "labels", "reset", "replay", "viewButtons", "ns", "captureAbort", "amount", "shown", "activeIndex", "animation", "busy", "closed", "mapEl", "groups", "textures", "name", "description", "index", "group", "rect", "image", "row", "control", "input", "copy", "title", "subtitle", "off", "texture", "syncRows", "draw", "stopAnimation", "built", "button", "width", "narrow", "available", "k", "flatScale", "layerStep", "explodedBaseY", "explodedA", "explodedB", "explodedC", "explodedD", "explodedSheetHeight", "explodedHeight", "flatHeight", "height", "flat", "a", "b", "c", "d", "x", "y", "setPressedView", "view", "move", "target", "announce", "from", "start", "duration", "tick", "now", "progress", "eased", "waitForFrame", "map", "event", "read", "resolve", "reject", "cleanup", "timer", "done", "cancel", "error", "waitForDelay", "delay", "waitForCadence", "lastRevealAt", "replayBuild", "idle", "capture", "build", "oldCamera", "visibility", "filters", "remember", "layer", "only", "ids", "oldFill", "container", "oldContainerStyle", "restoreCountries", "metadata", "loaderKey", "applicationSources", "id", "url", "decoded", "observer", "clearExplainerParam"]
}
