Range panel
The range panel component can show all the ranges within a Manifest, allowing you to style them and add interactive events that can update other canvas panel components.
The following CSS class names are available:
ul.range-item-container- a<ul />element containing a list of rangesli.range-split- a<li />element containing a single range.range-label- a<span />element within a li for the range label.range-nested-container- The outer container for a nested range (div)
The .range-item-container may have any of the following data-attributes for styling:
[data-leaf="true"]- if this is set, the range is a left-node (no nested ranges)[data-with-selector="true"]- if this is set, then the target of this range contains selectors (not just canvases)[data-range-id="..."]- this is a data attribute with the range identifier
There is a change event available on this component:
const $rp = document.getElementById('range-panel');
const $cp = document.getElementById('canvas-panel');
$rp.addEventListener('range-change', e => {
  const {
    range, // The full range from Vault
    isLeaf, // If the range click is a left
    fragment, // e.g. `t=10,20` if there was a fragment
    selector, // raw selector for the range item
    parsedSelector, // parsed version of the selector
    canvasId, // If the range targets a canvas, this will be the ID
  } = e.detail;
  // This can be used to drive other web components.
  $cp.setAttribute('canvas-id', canvasId);
  if (fragment && fragment.startsWith('xywh=')) {
    $cp.setAttribute('target', fragment.slice(5)); // slice(5) to remove xywh=
  }
  // You can also set a `selected-range` on the <range-panel />
  $rp.setAttribute('selected-range', e.detail.range.id);
})
tip
The value of e.detail.parsedSelector is a "Supported target".
You can read more about this in the Vault helpers documentation.