diff --git a/assets/icons.js b/assets/icons.js new file mode 100644 index 00000000..3dfbd322 --- /dev/null +++ b/assets/icons.js @@ -0,0 +1,18 @@ +(function() { + addIcons(); + function addIcons() { + if (document.readyState === "loading") return document.addEventListener("DOMContentLoaded", addIcons); + const svg = document.body.appendChild(document.createElementNS("http://www.w3.org/2000/svg", "svg")); + svg.innerHTML = `MMNEPVFCICPMFPCPTTAAATR`; + svg.style.display = "none"; + if (location.protocol === "file:") updateUseElements(); + } + + function updateUseElements() { + document.querySelectorAll("use").forEach(el => { + if (el.getAttribute("href").includes("#icon-")) { + el.setAttribute("href", el.getAttribute("href").replace(/.*#/, "#")); + } + }); + } +})() \ No newline at end of file diff --git a/assets/icons.svg b/assets/icons.svg new file mode 100644 index 00000000..a19417dc --- /dev/null +++ b/assets/icons.svg @@ -0,0 +1 @@ +MMNEPVFCICPMFPCPTTAAATR \ No newline at end of file diff --git a/assets/main.js b/assets/main.js index 3092fea0..99097a05 100644 --- a/assets/main.js +++ b/assets/main.js @@ -1,8 +1,9 @@ "use strict"; -"use strict";(()=>{var Ie=Object.create;var ne=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Ie(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),v=s.str.charAt(1),f;v in s.node.edges?f=s.node.edges[v]:(f=new t.TokenSet,s.node.edges[v]=f),s.str.length==1&&(f.final=!0),i.push({node:f,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${ce(l.parent,i)}.${d}`);let v=document.createElement("li");v.classList.value=l.classes??"";let f=document.createElement("a");f.href=r.base+l.url,f.innerHTML=u+d,v.append(f),e.appendChild(v)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var He={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>He[e])}var C=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",pe="mousemove",H="mouseup",J={x:0,y:0},fe=!1,ee=!1,Be=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(Be=!0,F="touchstart",pe="touchmove",H="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(pe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(H,()=>{ee=!1});document.addEventListener("click",t=>{fe&&(t.preventDefault(),t.stopImmediatePropagation(),fe=!1)});var X=class extends C{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(H,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(H,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ve=document.head.appendChild(document.createElement("style"));ve.dataset.for="filters";var Y=class extends C{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ve.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`,this.updateIndexHeadingVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.updateIndexHeadingVisibility()}updateIndexHeadingVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}};var Z=class extends C{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.href===r.href&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); +window.translations={"copy":"Copy","copied":"Copied!","normally_hidden":"This member is normally hidden due to your filter settings."}; +"use strict";(()=>{var Pe=Object.create;var ie=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames;var Re=Object.getPrototypeOf,Me=Object.prototype.hasOwnProperty;var Fe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var De=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of _e(e))!Me.call(t,i)&&i!==n&&ie(t,i,{get:()=>e[i],enumerable:!(r=Oe(e,i))||r.enumerable});return t};var Ae=(t,e,n)=>(n=t!=null?Pe(Re(t)):{},De(e||!t||!t.__esModule?ie(n,"default",{value:t,enumerable:!0}):n,t));var ue=Fe((ae,le)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),m=s.str.charAt(1),p;m in s.node.edges?p=s.node.edges[m]:(p=new t.TokenSet,s.node.edges[m]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof ae=="object"?le.exports=n():e.lunr=n()}(this,function(){return t})})()});var se=[];function G(t,e){se.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){se.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!Ve(e)){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r,document.querySelector(".col-sidebar").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(!n)return;let r=n.offsetParent==null,i=n;for(;i!==document.body;)i instanceof HTMLDetailsElement&&(i.open=!0),i=i.parentElement;if(n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let s=document.createElement("p");s.classList.add("warning"),s.textContent=window.translations.normally_hidden,n.prepend(s)}r&&e.scrollIntoView()}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent=window.translations.copied,e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent=window.translations.copy},100)},1e3)})})}};function Ve(t){let e=t.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(e.bottom<0||e.top-n>=0)}var oe=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var pe=Ae(ue());async function ce(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=pe.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function fe(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{ce(e,t)}),ce(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");i.addEventListener("mouseup",()=>{te(t)}),r.addEventListener("focus",()=>t.classList.add("has-focus")),He(t,i,r,e)}function He(t,e,n,r){n.addEventListener("input",oe(()=>{Ne(t,e,n,r)},200)),n.addEventListener("keydown",i=>{i.key=="Enter"?Be(e,t):i.key=="ArrowUp"?(de(e,n,-1),i.preventDefault()):i.key==="ArrowDown"&&(de(e,n,1),i.preventDefault())}),document.body.addEventListener("keypress",i=>{i.altKey||i.ctrlKey||i.metaKey||!n.matches(":focus")&&i.key==="/"&&(i.preventDefault(),n.focus())}),document.body.addEventListener("keyup",i=>{t.classList.contains("has-focus")&&(i.key==="Escape"||!e.matches(":focus-within")&&!n.matches(":focus"))&&(n.blur(),te(t))})}function te(t){t.classList.remove("has-focus")}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=he(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${he(l.parent,i)}.${d}`);let m=document.createElement("li");m.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,m.append(p),p.addEventListener("focus",()=>{e.querySelector(".current")?.classList.remove("current"),m.classList.add("current")}),e.appendChild(m)}}function de(t,e,n){let r=t.querySelector(".current");if(!r)r=t.querySelector(n==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let i=r;if(n===1)do i=i.nextElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);else do i=i.previousElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);i?(r.classList.remove("current"),i.classList.add("current")):n===-1&&(r.classList.remove("current"),e.focus())}}function Be(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),te(e)}}function he(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(ee(t.substring(s,o)),`${ee(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(ee(t.substring(s))),i.join("")}var je={"&":"&","<":"<",">":">","'":"'",'"':"""};function ee(t){return t.replace(/[&<>"'"]/g,e=>je[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",ye="mousemove",N="mouseup",J={x:0,y:0},me=!1,ne=!1,qe=!1,D=!1,ve=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(ve?"is-mobile":"not-mobile");ve&&"ontouchstart"in document.documentElement&&(qe=!0,F="touchstart",ye="touchmove",N="touchend");document.addEventListener(F,t=>{ne=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(ye,t=>{if(ne&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(N,()=>{ne=!1});document.addEventListener("click",t=>{me&&(t.preventDefault(),t.stopImmediatePropagation(),me=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(N,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(N,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var re;try{re=localStorage}catch{re={getItem(){return null},setItem(){}}}var Q=re;var ge=document.head.appendChild(document.createElement("style"));ge.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ge.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var Z=class extends I{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function Ee(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,xe(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),xe(t.value)})}function xe(t){document.documentElement.dataset.theme=t}var K;function we(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",Le),Le())}async function Le(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();K=t.dataset.base,K.endsWith("/")||(K+="/"),t.innerHTML="";for(let s of i)Se(s,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function Se(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-accordion`:"tsd-accordion";let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.dataset.key=i.join("$"),o.innerHTML='',be(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)Se(u,l,i)}else be(t,r,t.class)}function be(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=K+t.path,n&&(r.className=n),location.pathname===r.pathname&&!r.href.includes("#")&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else{let r=e.appendChild(document.createElement("span"));r.innerHTML='',r.appendChild(document.createElement("span")).textContent=t.text}}G(X,"a[data-toggle]");G(Z,".tsd-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Te=document.getElementById("tsd-theme");Te&&Ee(Te);var $e=new U;Object.defineProperty(window,"app",{value:$e});fe();we();})(); /*! Bundled license information: lunr/lunr.js: diff --git a/assets/navigation.js b/assets/navigation.js index 4287aaae..209bb434 100644 --- a/assets/navigation.js +++ b/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WZb2/bNhDGv8qg19nSJG2W5Z1nN4i3uHUtNcBQBAEjnm0uEumRVFpj2HcfLMUSJR6Pyls/z/3EP6c7mvr2b2Lhh02uk+licpOcJPlWFFyDTK6/tdKkEBsJPP0ubL4VcpOCTU6SHbPb5Dqx+x2YU8Tyy9aWRXKSPAvJk+vzd7/9evbh/L+TjlpxoTLN8mcP1ioxxo1mJayYhSGiFWKEW1YOY29ZGYtaMCnWYLxlOP4+Nv5G6ZIFKY0aYy01GJCWWaHkkORqMU4KmxKkN5jXn+PRBeSHxyDJ4WpRDpFkb8muDH5YNLlaIUpAo0dHZvudl5WtECPcs0JwdEc7JcoQHPD3q1NiDM7MNlO9d2RdyXovzWkr9imX7x3ABprFNjdalXimdsCgeewD8CQMPCCclcQD0OwMPSCYrr0HbFmZqRkzWwzYijHAbWGC8beFocILE9zio0aEvzQJCbHNxXwjsF5V8olohaJg6EoNPaNwdLphvjdiI0N1jGPAkezFfG/E0uN1jSPAg+LlA5EaFgaRQ2scHurBgU0X01nggDQtc/5R5ooLuemeArIqzamr9flXLrzM+S0wDvpGQMExiCPTnM9Pf0Nu+/2nw3QqTUmtBlaGKJ06hiLkZnjSGaJaC83rAEJa0GuWQ0MZdLIPl4PAegvg867e9iCl54ohp5WxqvwT9sP+2hNjLfZgbmZuQWOkVhxDapLELNgOQ3XqGFZgZiPndM+KyjsAtUKUsJjOHpeT1WTRIV6YFuypOGBatc+58BD3Z8H4+zMq2F14gzJ6DgLFdjuQ3Fl+rA55JqKqdd4vFeg9jastBIzDIeP7r5ZzxGtVAgGSQnQqgVhrVUZWaGAZAQuuTs9AgKyKjKlniIL+MPjJqFOjiOCUHDnSxNJwEzN0CzJjW5AhW5AZ2YIM2YLMyBZk4i3Is9C82V6yUuSBHtLqdPdobUumWRlqSANXDDmmx5m39LjDyjBLzLWRYxCiUZq3NEoTaipmbFNJZ4+zvz5NFvMp3hY6nWws6ewxzSYZQWnkGCTUndJIdzqWZSQZ/dodyEi0C/gbjvGwXUc7Ajk+zzQKGB7f0EPXwWzy8+W7q0ApvAf9pAzcwQsUw3rhakShYPX7leYawCn6ecGMOWyxK/cpZ+cIx9ypzcY9Hg5ArzpJsuzy3dV0y6R0J9WCXDnOWTJt0PE4KkVZgjzsEviEo0JFr9R3P3ClvlMxaZ6HBt1KZLzdF8C/SlFn2ZZhnKGFXMcKbpnkhTsgt7q2MlVdl5PpjFmGEl41sjg32bNQHIxXVR0tegV92LN94UNaIXrtW+12Slvgg7PH68VvT42x4IfVLLdNKvaXx6kWQxN1oBSSN8ZPrKjw02nfQtae+ewiUHdmdYnlc35Rf78YLsNAjq1DCDM2Pmeyfi3m/AKbsiPT16fH56EL5+pRTCZKMJaVuzCptZBbsIJ/qubzDXoSVmWp5AK4YJ0ReUU9G/muuW6zU9JAnNr4KOwKjKp0Dpkoe5dPDrFvoWH1NOaH2Bx2VnkXEr4jlkXHSZBQz4JTH3r1WFe5rTTwn441A9vLdD23UCK1uv6dLPjrTD1jzftVoGN/Zxr6T34tZa0SLYnr5n33zvNHUE8eQRP1i8K0dwx3tTgn8C/jiKL+XiC0uZSg74T/KdWR4pQFlE/+7dnx93h8/f8K+lc9R0anRb+W1RvSrGb4BN3o0cP4MHF9jJ9EKKa/uD7GX2Hk6B2elKuPwIQm5eojMKFJuTrZAb5aUX8xw2rGEzNw+b5ZH+whrk6MtbE1IwpjGp3AaFVJnqmPL4DeHjkyAal0kakVFMyKF1geGAjKM1FAu76aaM32mUqtRmk9B4WqBHpzePgd2cOH/wEj7yiitCIAAA==" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WZb2/bNhDGv8qg19naNF2W5Z1rO7C7ukktJUBRFAUjnm2tEuWRVFpj2HcfJNkSJR559Fs9D3/8dzyepC//Rhp+6ug2mq4md9FFlO6ynEsQ0e2XTprk2VYAj39kOt1lYhuDji6iPdO76DbShz2oV4jlt50u8ugi+p4JHt2+ef3nH5e/v/nvoqdWPCsTydLvFqxTKMaMqd2KiWwDyhqSqVGcO8kKWDMNY0gnUIQFK8ZtF6wgW+XKNXxDoiguxLnt70pZMCelVSnWgwQFQjOdlWJMMjWKE8O2AGEN5viYbp1DWneDhKqpkRxPyJ8T6wn81GiodwJJQFsHt0wOeyu2O4EiPLE84+iO9grJyDjgp71XKAZnapeUg5O2qUSzl+pVJw4p128NwBbaxVZ3sizwSO2BTnNoB3gQOjpwR6WnAzQ6XR04w3XQwY4VSVmnTgzYiRRgkStn+0WufM1z5dzik+Zp/tIGJFCbi/kCsFZWsolohvLB0JUae4Jw/nDDfGdiiaEaxhAwEb2Y70ysf7ymMQA8Sl42EMlhbpB3aK3DQn01YNPVdOYo16ZFyuciLXkmtn0vIKpCvTK1If/GhBcpXwDjIO8yyDkGMWQ/5/75b0j18P7pMb3qp8RaAisysR3XKD1qZAnhuUbVq37K+Cqrn1GXWO2ZVkqXxV9wwACdGEJq9hLu9038YLSBIYTYrp4GidE6MYTUhohasT2G6tUQlmOtAlfpieWVVf50AklYTWffFvPJbL6Oe8gLkxl7zmuQoQ9ZVxbmfXz/0cmoRQpw/+79fJo4Ea1MQR4m68nKyWhUCvHpcb7+7EQ0KoVYzz89zmP3XI46hYnncbz0rOpRJzHJJHl0728rU5CnSyfg6dLX2DxbCmUMHB4U2+9BcOOEYReNZfJcW733UwXy4Mc1Fg+MQ52OhrnTqOE71YMA4UP0qgexkWVBrNDIEgBzrs7A4AHpkhjTwECC3iu89O1VEuGckiETVUrsrlKUv8ZQoTWG8tYYKrDGUHSNYVlCeK5RhdUYylcrqHNqBcVnB8GKLMU4R+kMygOTrEAqjpEhhEjUMOrcGqZeW6bxibZKCMNRM6jQmiGefZt9/jhZLaf4ldDr3kslbq8eD6WVKYjrZoqJm+mUkpHwsfO2I5DQG8DeJYyH7Rd6G3jHZ5mCgO7xjT3+HJhMfr1+feNIg08gn0sFH+AF8nGaMDVPkmDNwYhTCWAk/DRnStVbbMpDyuUbhKM+lNutWf2PQEfdS9Ls+vXNdMeEMCfVgUyZ5jwwqdDxGKqP8gCi3iWwCSfF13pd/rAbrssfvjZxmroG3Une9vqQA38UWRNlO4ZxxpaAnV2VHOz8amhkUqtgwQTPkXfDTiH/D0ymM6aZ9WugfUy2rnfskNvT6ATyi36135dSAx9VHcdv+gOVYsFPLVmq20AczsrIFWOTr5TMBG+NH1le4XXp0OLNPMvZlSPrzJoEy5f8qvnBZf06G8rUOrgwoe1TJppDseRX2JQN2f9l/NQfunCmTmKSrAClWbF3kzqLdwvW8E/V/plDa+CyKEqxAp6x3jg8WJaDPKRmC7UvhbKrGNtCUY+dL4UGmcJel1YKsB00U5WVTCHJisGXyhPPVANYzTy8A7QsOPXrIBXLKtWVBP7LKWFgGxlvlhoKJE03z725fpOU37F7+yj4275jEoY9H/NYp5D5cNMedkf5PZIDaFlzSpi03ldMjeZ4XwpGMk1bCgHyQ2afL0OiKSsonu277/Scbt+8EsHwC8+J0WvkX9BmQ9rVdBfPrU7W4ePAtTF2EKGY4eLaGHuFkarbPSlTD8C4JmXqARjXpEzdm/4fddb8CcVyxjNTcP22XR+sE1P3jLW1tSNyY1rdg5FlJXhSzl8A/WhkyB5IJfOkXEPOdPYCDzUDQVkmH1BvbiZSskNSxlqitIHDh6oy9INh/RzZw6//AzTFg+MaJQAA" \ No newline at end of file diff --git a/assets/search.js b/assets/search.js index dd82f6d2..833b0aa6 100644 --- a/assets/search.js +++ b/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/assets/style.css b/assets/style.css index 98a43779..178bfb02 100644 --- a/assets/style.css +++ b/assets/style.css @@ -4,12 +4,19 @@ --light-color-background-secondary: #eff0f1; --light-color-warning-text: #222; --light-color-background-warning: #e6e600; - --light-color-icon-background: var(--light-color-background); --light-color-accent: #c5c7c9; --light-color-active-menu-item: var(--light-color-accent); --light-color-text: #222; --light-color-text-aside: #6e6e6e; + + --light-color-icon-background: var(--light-color-background); + --light-color-icon-text: var(--light-color-text); + + --light-color-comment-tag-text: var(--light-color-text); + --light-color-comment-tag: var(--light-color-background); + --light-color-link: #1f70c2; + --light-color-focus-outline: #3584e4; --light-color-ts-keyword: #056bd6; --light-color-ts-project: #b111c9; @@ -21,20 +28,22 @@ --light-color-ts-function: #572be7; --light-color-ts-class: #1f70c2; --light-color-ts-interface: #108024; - --light-color-ts-constructor: var(--light-color-ts-class); - --light-color-ts-property: var(--light-color-ts-variable); - --light-color-ts-method: var(--light-color-ts-function); + --light-color-ts-constructor: #4d7fff; + --light-color-ts-property: #ff984d; + --light-color-ts-method: #ff4db8; + --light-color-ts-reference: #ff4d82; --light-color-ts-call-signature: var(--light-color-ts-method); --light-color-ts-index-signature: var(--light-color-ts-property); --light-color-ts-constructor-signature: var(--light-color-ts-constructor); --light-color-ts-parameter: var(--light-color-ts-variable); /* type literal not included as links will never be generated to it */ --light-color-ts-type-parameter: #a55c0e; - --light-color-ts-accessor: var(--light-color-ts-property); + --light-color-ts-accessor: #ff4d4d; --light-color-ts-get-signature: var(--light-color-ts-accessor); --light-color-ts-set-signature: var(--light-color-ts-accessor); --light-color-ts-type-alias: #d51270; /* reference not included as links will be colored with the kind that it points to */ + --light-color-document: #000000; --light-external-icon: url("data:image/svg+xml;utf8,"); --light-color-scheme: light; @@ -44,12 +53,19 @@ --dark-color-background-secondary: #1e2024; --dark-color-background-warning: #bebe00; --dark-color-warning-text: #222; - --dark-color-icon-background: var(--dark-color-background-secondary); --dark-color-accent: #9096a2; --dark-color-active-menu-item: #5d5d6a; --dark-color-text: #f5f5f5; --dark-color-text-aside: #dddddd; + + --dark-color-icon-background: var(--dark-color-background-secondary); + --dark-color-icon-text: var(--dark-color-text); + + --dark-color-comment-tag-text: var(--dark-color-text); + --dark-color-comment-tag: var(--dark-color-background); + --dark-color-link: #00aff4; + --dark-color-focus-outline: #4c97f2; --dark-color-ts-keyword: #3399ff; --dark-color-ts-project: #e358ff; @@ -61,20 +77,22 @@ --dark-color-ts-function: #a280ff; --dark-color-ts-class: #8ac4ff; --dark-color-ts-interface: #6cff87; - --dark-color-ts-constructor: var(--dark-color-ts-class); - --dark-color-ts-property: var(--dark-color-ts-variable); - --dark-color-ts-method: var(--dark-color-ts-function); + --dark-color-ts-constructor: #4d7fff; + --dark-color-ts-property: #ff984d; + --dark-color-ts-method: #ff4db8; + --dark-color-ts-reference: #ff4d82; --dark-color-ts-call-signature: var(--dark-color-ts-method); --dark-color-ts-index-signature: var(--dark-color-ts-property); --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); --dark-color-ts-parameter: var(--dark-color-ts-variable); /* type literal not included as links will never be generated to it */ --dark-color-ts-type-parameter: #e07d13; - --dark-color-ts-accessor: var(--dark-color-ts-property); + --dark-color-ts-accessor: #ff4d4d; --dark-color-ts-get-signature: var(--dark-color-ts-accessor); --dark-color-ts-set-signature: var(--dark-color-ts-accessor); --dark-color-ts-type-alias: #ff6492; /* reference not included as links will be colored with the kind that it points to */ + --dark-color-document: #ffffff; --dark-external-icon: url("data:image/svg+xml;utf8,"); --dark-color-scheme: dark; @@ -86,14 +104,22 @@ --color-background-secondary: var(--light-color-background-secondary); --color-background-warning: var(--light-color-background-warning); --color-warning-text: var(--light-color-warning-text); - --color-icon-background: var(--light-color-icon-background); --color-accent: var(--light-color-accent); --color-active-menu-item: var(--light-color-active-menu-item); --color-text: var(--light-color-text); --color-text-aside: var(--light-color-text-aside); + + --color-icon-background: var(--light-color-icon-background); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); --color-ts-module: var(--light-color-ts-module); --color-ts-namespace: var(--light-color-ts-namespace); --color-ts-enum: var(--light-color-ts-enum); @@ -105,6 +131,7 @@ --color-ts-constructor: var(--light-color-ts-constructor); --color-ts-property: var(--light-color-ts-property); --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); --color-ts-call-signature: var(--light-color-ts-call-signature); --color-ts-index-signature: var(--light-color-ts-index-signature); --color-ts-constructor-signature: var( @@ -116,6 +143,7 @@ --color-ts-get-signature: var(--light-color-ts-get-signature); --color-ts-set-signature: var(--light-color-ts-set-signature); --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); --external-icon: var(--light-external-icon); --color-scheme: var(--light-color-scheme); @@ -128,14 +156,22 @@ --color-background-secondary: var(--dark-color-background-secondary); --color-background-warning: var(--dark-color-background-warning); --color-warning-text: var(--dark-color-warning-text); - --color-icon-background: var(--dark-color-icon-background); --color-accent: var(--dark-color-accent); --color-active-menu-item: var(--dark-color-active-menu-item); --color-text: var(--dark-color-text); --color-text-aside: var(--dark-color-text-aside); + + --color-icon-background: var(--dark-color-icon-background); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); --color-ts-module: var(--dark-color-ts-module); --color-ts-namespace: var(--dark-color-ts-namespace); --color-ts-enum: var(--dark-color-ts-enum); @@ -147,6 +183,7 @@ --color-ts-constructor: var(--dark-color-ts-constructor); --color-ts-property: var(--dark-color-ts-property); --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); --color-ts-call-signature: var(--dark-color-ts-call-signature); --color-ts-index-signature: var(--dark-color-ts-index-signature); --color-ts-constructor-signature: var( @@ -158,6 +195,7 @@ --color-ts-get-signature: var(--dark-color-ts-get-signature); --color-ts-set-signature: var(--dark-color-ts-set-signature); --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); --external-icon: var(--dark-external-icon); --color-scheme: var(--dark-color-scheme); @@ -182,9 +220,16 @@ body { --color-active-menu-item: var(--light-color-active-menu-item); --color-text: var(--light-color-text); --color-text-aside: var(--light-color-text-aside); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); --color-ts-module: var(--light-color-ts-module); --color-ts-namespace: var(--light-color-ts-namespace); --color-ts-enum: var(--light-color-ts-enum); @@ -196,6 +241,7 @@ body { --color-ts-constructor: var(--light-color-ts-constructor); --color-ts-property: var(--light-color-ts-property); --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); --color-ts-call-signature: var(--light-color-ts-call-signature); --color-ts-index-signature: var(--light-color-ts-index-signature); --color-ts-constructor-signature: var( @@ -207,6 +253,7 @@ body { --color-ts-get-signature: var(--light-color-ts-get-signature); --color-ts-set-signature: var(--light-color-ts-set-signature); --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); --external-icon: var(--light-external-icon); --color-scheme: var(--light-color-scheme); @@ -222,9 +269,16 @@ body { --color-active-menu-item: var(--dark-color-active-menu-item); --color-text: var(--dark-color-text); --color-text-aside: var(--dark-color-text-aside); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); --color-ts-module: var(--dark-color-ts-module); --color-ts-namespace: var(--dark-color-ts-namespace); --color-ts-enum: var(--dark-color-ts-enum); @@ -236,6 +290,7 @@ body { --color-ts-constructor: var(--dark-color-ts-constructor); --color-ts-property: var(--dark-color-ts-property); --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); --color-ts-call-signature: var(--dark-color-ts-call-signature); --color-ts-index-signature: var(--dark-color-ts-index-signature); --color-ts-constructor-signature: var( @@ -247,11 +302,17 @@ body { --color-ts-get-signature: var(--dark-color-ts-get-signature); --color-ts-set-signature: var(--dark-color-ts-set-signature); --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); --external-icon: var(--dark-external-icon); --color-scheme: var(--dark-color-scheme); } +*:focus-visible, +.tsd-accordion-summary:focus-visible svg { + outline: 2px solid var(--color-focus-outline); +} + .always-visible, .always-visible .tsd-signatures { display: inherit !important; @@ -266,16 +327,6 @@ h6 { line-height: 1.2; } -h1 > a:not(.link), -h2 > a:not(.link), -h3 > a:not(.link), -h4 > a:not(.link), -h5 > a:not(.link), -h6 > a:not(.link) { - text-decoration: none; - color: var(--color-text); -} - h1 { font-size: 1.875rem; margin: 0.67rem 0; @@ -306,10 +357,6 @@ h6 { margin: 2.33rem 0; } -.uppercase { - text-transform: uppercase; -} - dl, menu, ol, @@ -327,17 +374,14 @@ dd { } /* Footer */ -.tsd-generator { +footer { border-top: 1px solid var(--color-accent); padding-top: 1rem; padding-bottom: 1rem; max-height: 3.5rem; } - -.tsd-generator > p { - margin-top: 0; - margin-bottom: 0; - padding: 0 1rem; +footer > p { + margin: 0 1em; } .container-main { @@ -405,7 +449,8 @@ dd { } body { background: var(--color-background); - font-family: "Segoe UI", sans-serif; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; color: var(--color-text); } @@ -423,6 +468,9 @@ a.external[target="_blank"] { background-repeat: no-repeat; padding-right: 13px; } +a.tsd-anchor-link { + color: var(--color-text); +} code, pre { @@ -435,7 +483,6 @@ pre { pre { position: relative; - white-space: pre; white-space: pre-wrap; word-wrap: break-word; padding: 10px; @@ -582,13 +629,13 @@ dl.tsd-comment-tag-group p { } .tsd-filter-input { display: flex; - width: fit-content; width: -moz-fit-content; + width: fit-content; align-items: center; - user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; + user-select: none; cursor: pointer; } .tsd-filter-input input[type="checkbox"] { @@ -611,11 +658,8 @@ dl.tsd-comment-tag-group p { Don't remove unless you know what you're doing. */ opacity: 0.99; } -.tsd-filter-input input[type="checkbox"]:focus + svg { - transform: scale(0.95); -} -.tsd-filter-input input[type="checkbox"]:focus:not(:focus-visible) + svg { - transform: scale(1); +.tsd-filter-input input[type="checkbox"]:focus-visible + svg { + outline: 2px solid var(--color-focus-outline); } .tsd-checkbox-background { fill: var(--color-accent); @@ -632,13 +676,18 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { stroke: var(--color-accent); } -.tsd-theme-toggle { - padding-top: 0.75rem; +.settings-label { + font-weight: bold; + text-transform: uppercase; + display: inline-block; } -.tsd-theme-toggle > h4 { - display: inline; - vertical-align: middle; - margin-right: 0.75rem; + +.tsd-filter-visibility .settings-label { + margin: 0.75rem 0 0.5rem 0; +} + +.tsd-theme-toggle .settings-label { + margin: 0.75rem 0.75rem 0 0; } .tsd-hierarchy { @@ -771,6 +820,9 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { padding: 0; max-width: 100%; } +.tsd-navigation .tsd-nav-link { + display: none; +} .tsd-nested-navigation { margin-left: 3rem; } @@ -784,6 +836,15 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { margin-left: -1.5rem; } +.tsd-page-navigation-section { + margin-left: 10px; +} +.tsd-page-navigation-section > summary { + padding: 0.25rem; +} +.tsd-page-navigation-section > div { + margin-left: 20px; +} .tsd-page-navigation ul { padding-left: 1.75rem; } @@ -814,10 +875,10 @@ a.tsd-index-link { } .tsd-accordion-summary, .tsd-accordion-summary a { - user-select: none; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; + user-select: none; cursor: pointer; } @@ -830,8 +891,9 @@ a.tsd-index-link { padding-top: 0; padding-bottom: 0; } -.tsd-index-accordion .tsd-accordion-summary > svg { +.tsd-accordion .tsd-accordion-summary > svg { margin-left: 0.25rem; + vertical-align: text-top; } .tsd-index-content > :not(:first-child) { margin-top: 0.75rem; @@ -841,6 +903,12 @@ a.tsd-index-link { margin-bottom: 0.75rem; } +.tsd-no-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} .tsd-kind-icon { margin-right: 0.5rem; width: 1.25rem; @@ -848,10 +916,6 @@ a.tsd-index-link { min-width: 1.25rem; min-height: 1.25rem; } -.tsd-kind-icon path { - transform-origin: center; - transform: scale(1.1); -} .tsd-signature > .tsd-kind-icon { margin-right: 0.8rem; } @@ -879,7 +943,7 @@ a.tsd-index-link { } .tsd-panel-group { - margin: 4rem 0; + margin: 2rem 0; } .tsd-panel-group.tsd-index-group { margin: 2rem 0; @@ -887,6 +951,9 @@ a.tsd-index-link { .tsd-panel-group.tsd-index-group details { margin: 2rem 0; } +.tsd-panel-group > .tsd-accordion-summary { + margin-bottom: 1rem; +} #tsd-search { transition: background-color 0.2s; @@ -1036,6 +1103,12 @@ a.tsd-index-link { border-width: 1px 0; transition: background-color 0.1s; } +.tsd-signatures .tsd-index-signature:not(:last-child) { + margin-bottom: 1em; +} +.tsd-signatures .tsd-index-signature .tsd-signature { + border-width: 1px; +} .tsd-description .tsd-signatures .tsd-signature { border-width: 1px; } @@ -1214,6 +1287,9 @@ img { .tsd-kind-method { color: var(--color-ts-method); } +.tsd-kind-reference { + color: var(--color-ts-reference); +} .tsd-kind-call-signature { color: var(--color-ts-call-signature); } @@ -1226,9 +1302,6 @@ img { .tsd-kind-parameter { color: var(--color-ts-parameter); } -.tsd-kind-type-literal { - color: var(--color-ts-type-literal); -} .tsd-kind-type-parameter { color: var(--color-ts-type-parameter); } @@ -1349,6 +1422,12 @@ img { .has-menu .tsd-navigation { max-height: 100%; } + #tsd-toolbar-links { + display: none; + } + .tsd-navigation .tsd-nav-link { + display: flex; + } } /* one sidebar */ @@ -1401,7 +1480,7 @@ img { } .site-menu { - margin-top: 1rem 0; + margin-top: 1rem; } .page-menu, diff --git a/classes/CaptionScreen.html b/classes/CaptionScreen.html index 6cbeabd5..4e8c3442 100644 --- a/classes/CaptionScreen.html +++ b/classes/CaptionScreen.html @@ -1,22 +1,22 @@ -CaptionScreen | @svta/common-media-library

Keep a CTA-608 screen of 32x15 styled characters

-

Constructors

Methods

  • Get all non-empty rows with as unicode text.

    -

    Parameters

    • Optional asOneRow: boolean

    Returns string

  • Insert a character (without styling) in the current row.

    -

    Parameters

    • char: number

    Returns void

  • Set background/extra foreground, but first do back_space, and then insert space (backwards compatibility).

    -

    Parameters

    Returns void

\ No newline at end of file +CaptionScreen | @svta/common-media-library

Keep a CTA-608 screen of 32x15 styled characters

+

Constructors

Methods

  • Beta

    Get all non-empty rows with as unicode text.

    +

    Parameters

    • OptionalasOneRow: boolean

    Returns string

  • Beta

    Insert a character (without styling) in the current row.

    +

    Parameters

    • char: number

    Returns void

  • Beta

    Set background/extra foreground, but first do back_space, and then insert space (backwards compatibility).

    +

    Parameters

    Returns void

diff --git a/classes/CaptionsLogger.html b/classes/CaptionsLogger.html index d387ee0c..4ee4dedd 100644 --- a/classes/CaptionsLogger.html +++ b/classes/CaptionsLogger.html @@ -1,6 +1,6 @@ -CaptionsLogger | @svta/common-media-library

CaptionsLogger. To be removed in the future.

-

Constructors

Properties

Methods

log -

Constructors

Properties

time: null | number = null
verboseLevel: VerboseLevel = VerboseLevel.ERROR

Methods

\ No newline at end of file +CaptionsLogger | @svta/common-media-library

CaptionsLogger. To be removed in the future.

+

Constructors

Properties

Methods

log +

Constructors

Properties

time: null | number = null
verboseLevel: VerboseLevel = VerboseLevel.ERROR

Methods

diff --git a/classes/Cta608Channel.html b/classes/Cta608Channel.html index 821c23d0..547f309d 100644 --- a/classes/Cta608Channel.html +++ b/classes/Cta608Channel.html @@ -1,26 +1,26 @@ -Cta608Channel | @svta/common-media-library

CTA-608 Channel

-

Constructors

Methods

\ No newline at end of file +Cta608Channel | @svta/common-media-library

CTA-608 Channel

+

Constructors

Methods

diff --git a/classes/Cta608Parser.html b/classes/Cta608Parser.html index dc55bb97..6ce08815 100644 --- a/classes/Cta608Parser.html +++ b/classes/Cta608Parser.html @@ -1,11 +1,11 @@ -Cta608Parser | @svta/common-media-library

CEA-608 caption parser.

-

Constructors

Methods

Constructors

Methods

  • Add data for time t in forms of list of bytes (unsigned ints). The bytes are treated as pairs.

    -

    Parameters

    • time: null | number

      The time in milliseconds

      -
    • byteList: number[]

      The list of bytes

      -

    Returns void

  • Trigger the generation of a cue, and the start of a new one if displayScreens are not empty.

    -

    Parameters

    • t: number

    Returns void

\ No newline at end of file +Cta608Parser | @svta/common-media-library

CEA-608 caption parser.

+

Constructors

Methods

Constructors

Methods

  • Beta

    Add data for time t in forms of list of bytes (unsigned ints). The bytes are treated as pairs.

    +

    Parameters

    • time: null | number

      The time in milliseconds

      +
    • byteList: number[]

      The list of bytes

      +

    Returns void

  • Beta

    Trigger the generation of a cue, and the start of a new one if displayScreens are not empty.

    +

    Parameters

    • t: number

    Returns void

diff --git a/classes/PenState.html b/classes/PenState.html index 61820811..d8d23657 100644 --- a/classes/PenState.html +++ b/classes/PenState.html @@ -1,13 +1,13 @@ -PenState | @svta/common-media-library

Pen state.

-

Constructors

Properties

background: string = 'black'
flash: boolean = false
foreground: string = 'white'
italics: boolean = false
underline: boolean = false

Methods

\ No newline at end of file +PenState | @svta/common-media-library

Pen state.

+

Constructors

Properties

background: string = 'black'
flash: boolean = false
foreground: string = 'white'
italics: boolean = false
underline: boolean = false

Methods

diff --git a/classes/Row.html b/classes/Row.html index aa9dfe5f..7956c1ba 100644 --- a/classes/Row.html +++ b/classes/Row.html @@ -1,20 +1,20 @@ -Row | @svta/common-media-library

CTA-608 row consisting of NR_COLS instances of StyledUnicodeChar.

-

Constructors

Properties

chars: StyledUnicodeChar[] = []
cueStartTime: null | number = null

Methods

  • Backspace, move one step back and clear character.

    -

    Returns void

  • Parameters

    • startPos: number

    Returns void

  • Move the cursor relative to current position.

    -

    Parameters

    • relPos: number

    Returns void

  • Set the cursor to a valid column.

    -

    Parameters

    • absPos: number

    Returns void

\ No newline at end of file +Row | @svta/common-media-library

CTA-608 row consisting of NR_COLS instances of StyledUnicodeChar.

+

Constructors

Properties

chars: StyledUnicodeChar[] = []
cueStartTime: null | number = null

Methods

  • Beta

    Backspace, move one step back and clear character.

    +

    Returns void

  • Beta

    Parameters

    • startPos: number

    Returns void

  • Beta

    Move the cursor relative to current position.

    +

    Parameters

    • relPos: number

    Returns void

  • Beta

    Set the cursor to a valid column.

    +

    Parameters

    • absPos: number

    Returns void

diff --git a/classes/SccParser.html b/classes/SccParser.html index 57f660d4..241c2702 100644 --- a/classes/SccParser.html +++ b/classes/SccParser.html @@ -1,13 +1,13 @@ -SccParser | @svta/common-media-library

SCC Parser

-

Constructors

Properties

field: any
hasHeader: boolean = false
nrLinesParsed: number = 0
processor: any

Methods

  • Parameters

    • line: string

    Returns null | [number, number[]]

\ No newline at end of file +SccParser | @svta/common-media-library

SCC Parser

+

Constructors

Properties

field: any
hasHeader: boolean = false
nrLinesParsed: number = 0
processor: any

Methods

  • Beta

    Parameters

    • line: string

    Returns null | [number, number[]]

diff --git a/classes/SfItem.html b/classes/SfItem.html index 0ab0b2f8..df0fe380 100644 --- a/classes/SfItem.html +++ b/classes/SfItem.html @@ -1,5 +1,5 @@ -SfItem | @svta/common-media-library

Structured Field Item

-

Constructors

Properties

Constructors

Properties

params?: SfParameters
value: SfBareItem
\ No newline at end of file +SfItem | @svta/common-media-library

Structured Field Item

+

Constructors

Properties

Constructors

Properties

params?: SfParameters
value: SfBareItem
diff --git a/classes/SfToken.html b/classes/SfToken.html index be43fbe9..f8c48702 100644 --- a/classes/SfToken.html +++ b/classes/SfToken.html @@ -1,4 +1,4 @@ -SfToken | @svta/common-media-library

A class to represent structured field tokens when Symbol is not available.

-

Constructors

Properties

Constructors

Properties

description: string
\ No newline at end of file +SfToken | @svta/common-media-library

A class to represent structured field tokens when Symbol is not available.

+

Constructors

Properties

Constructors

Properties

description: string
diff --git a/classes/StyledUnicodeChar.html b/classes/StyledUnicodeChar.html index 23aa8548..0df4814d 100644 --- a/classes/StyledUnicodeChar.html +++ b/classes/StyledUnicodeChar.html @@ -1,11 +1,11 @@ -StyledUnicodeChar | @svta/common-media-library

Unicode character with styling and background.

-

Constructors

Properties

Methods

Constructors

Properties

penState: PenState = ...
uchar: string = ' '

Methods

\ No newline at end of file +StyledUnicodeChar | @svta/common-media-library

Unicode character with styling and background.

+

Constructors

Properties

Methods

Constructors

Properties

penState: PenState = ...
uchar: string = ' '

Methods

diff --git a/enums/CmcdEncoding.html b/enums/CmcdEncoding.html index b5a7d8e0..13197809 100644 --- a/enums/CmcdEncoding.html +++ b/enums/CmcdEncoding.html @@ -1,8 +1,8 @@ -CmcdEncoding | @svta/common-media-library

Enumeration CmcdEncodingBeta

CMCD encoding types.

-

Enumeration Members

Enumeration Members

HEADERS: "headers"

Request headers

-
JSON: "json"

JSON

-
QUERY: "query"

Query string

-
\ No newline at end of file +CmcdEncoding | @svta/common-media-library

Enumeration CmcdEncodingBeta

CMCD encoding types.

+

Enumeration Members

Enumeration Members

HEADERS

Request headers

+
JSON

JSON

+
QUERY

Query string

+
diff --git a/enums/CmcdHeaderField.html b/enums/CmcdHeaderField.html index 35632521..abbe7ef0 100644 --- a/enums/CmcdHeaderField.html +++ b/enums/CmcdHeaderField.html @@ -1,10 +1,10 @@ -CmcdHeaderField | @svta/common-media-library

Enumeration CmcdHeaderFieldBeta

CMCD header fields.

-

Enumeration Members

Enumeration Members

OBJECT: "CMCD-Object"

keys whose values vary with the object being requested.

-
REQUEST: "CMCD-Request"

keys whose values vary with each request.

-
SESSION: "CMCD-Session"

keys whose values are expected to be invariant over the life of the session.

-
STATUS: "CMCD-Status"

keys whose values do not vary with every request or object.

-
\ No newline at end of file +CmcdHeaderField | @svta/common-media-library

Enumeration CmcdHeaderFieldBeta

CMCD header fields.

+

Enumeration Members

Enumeration Members

OBJECT

keys whose values vary with the object being requested.

+
REQUEST

keys whose values vary with each request.

+
SESSION

keys whose values are expected to be invariant over the life of the session.

+
STATUS

keys whose values do not vary with every request or object.

+
diff --git a/enums/CmcdObjectType.html b/enums/CmcdObjectType.html index 38b257a3..bb885eeb 100644 --- a/enums/CmcdObjectType.html +++ b/enums/CmcdObjectType.html @@ -1,20 +1,20 @@ -CmcdObjectType | @svta/common-media-library

Enumeration CmcdObjectTypeBeta

Common Media Client Data Object Type

-

Enumeration Members

Enumeration Members

AUDIO: "a"

audio only

-
CAPTION: "c"

caption or subtitle

-
INIT: "i"

init segment

-
KEY: "k"

cryptographic key, license or certificate.

-
MANIFEST: "m"

text file, such as a manifest or playlist

-
MUXED: "av"

muxed audio and video

-
OTHER: "o"

other

-
TIMED_TEXT: "tt"

ISOBMFF timed text track

-
VIDEO: "v"

video only

-
\ No newline at end of file +CmcdObjectType | @svta/common-media-library

Enumeration CmcdObjectTypeBeta

Common Media Client Data Object Type

+

Enumeration Members

Enumeration Members

AUDIO

audio only

+
CAPTION

caption or subtitle

+
INIT

init segment

+
KEY

cryptographic key, license or certificate.

+
MANIFEST

text file, such as a manifest or playlist

+
MUXED

muxed audio and video

+
OTHER

other

+
TIMED_TEXT

ISOBMFF timed text track

+
VIDEO

video only

+
diff --git a/enums/CmcdStreamType.html b/enums/CmcdStreamType.html index e8ece9df..5c3b73a4 100644 --- a/enums/CmcdStreamType.html +++ b/enums/CmcdStreamType.html @@ -1,6 +1,6 @@ -CmcdStreamType | @svta/common-media-library

Enumeration CmcdStreamTypeBeta

Common Media Client Data Stream Type

-

Enumeration Members

Enumeration Members

LIVE: "l"

Segments become available over time – e.g., LIVE

-
VOD: "v"

All segments are available – e.g., VOD

-
\ No newline at end of file +CmcdStreamType | @svta/common-media-library

Enumeration CmcdStreamTypeBeta

Common Media Client Data Stream Type

+

Enumeration Members

Enumeration Members

LIVE

Segments become available over time – e.g., LIVE

+
VOD

All segments are available – e.g., VOD

+
diff --git a/enums/CmcdStreamingFormat.html b/enums/CmcdStreamingFormat.html index 8b44234b..84f51044 100644 --- a/enums/CmcdStreamingFormat.html +++ b/enums/CmcdStreamingFormat.html @@ -1,10 +1,10 @@ -CmcdStreamingFormat | @svta/common-media-library

Enumeration CmcdStreamingFormatBeta

Common Media Client Data Streaming Format

-

Enumeration Members

Enumeration Members

DASH: "d"

MPEG DASH

-
HLS: "h"

HTTP Live Streaming (HLS)

-
OTHER: "o"

Other

-
SMOOTH: "s"

Smooth Streaming

-
\ No newline at end of file +CmcdStreamingFormat | @svta/common-media-library

Enumeration CmcdStreamingFormatBeta

Common Media Client Data Streaming Format

+

Enumeration Members

Enumeration Members

DASH

MPEG DASH

+
HLS

HTTP Live Streaming (HLS)

+
OTHER

Other

+
SMOOTH

Smooth Streaming

+
diff --git a/enums/CmsdHeaderField.html b/enums/CmsdHeaderField.html index 2f58c662..7a307cb8 100644 --- a/enums/CmsdHeaderField.html +++ b/enums/CmsdHeaderField.html @@ -1,8 +1,8 @@ -CmsdHeaderField | @svta/common-media-library

Enumeration CmsdHeaderFieldBeta

CMSD header fields.

-

Enumeration Members

Enumeration Members

DYNAMIC: "CMSD-Dynamic"

Keys whose values apply only to the next transmission hop. Typically a +CmsdHeaderField | @svta/common-media-library

Enumeration CmsdHeaderFieldBeta

CMSD header fields.

+

Enumeration Members

Enumeration Members

DYNAMIC

Keys whose values apply only to the next transmission hop. Typically a new CMSD-Dynamic header instance will be added by each intermediary participating in the delivery.

-
STATIC: "CMSD-Static"

Keys whose values persist over multiple requests for the object.

-
\ No newline at end of file +
STATIC

Keys whose values persist over multiple requests for the object.

+
diff --git a/enums/CmsdObjectType.html b/enums/CmsdObjectType.html index 04790e3f..ac76cd9b 100644 --- a/enums/CmsdObjectType.html +++ b/enums/CmsdObjectType.html @@ -1,20 +1,20 @@ -CmsdObjectType | @svta/common-media-library

Enumeration CmsdObjectTypeBeta

Common Media Server Data Object Type

-

Enumeration Members

Enumeration Members

AUDIO: "a"

audio only

-
CAPTION: "c"

caption or subtitle

-
INIT: "i"

init segment

-
KEY: "k"

cryptographic key, license or certificate.

-
MANIFEST: "m"

text file, such as a manifest or playlist

-
MUXED: "av"

muxed audio and video

-
OTHER: "o"

other

-
TIMED_TEXT: "tt"

ISOBMFF timed text track

-
VIDEO: "v"

video only

-
\ No newline at end of file +CmsdObjectType | @svta/common-media-library

Enumeration CmsdObjectTypeBeta

Common Media Server Data Object Type

+

Enumeration Members

Enumeration Members

AUDIO

audio only

+
CAPTION

caption or subtitle

+
INIT

init segment

+
KEY

cryptographic key, license or certificate.

+
MANIFEST

text file, such as a manifest or playlist

+
MUXED

muxed audio and video

+
OTHER

other

+
TIMED_TEXT

ISOBMFF timed text track

+
VIDEO

video only

+
diff --git a/enums/CmsdStreamType.html b/enums/CmsdStreamType.html index 74654c11..c0278e9e 100644 --- a/enums/CmsdStreamType.html +++ b/enums/CmsdStreamType.html @@ -1,6 +1,6 @@ -CmsdStreamType | @svta/common-media-library

Enumeration CmsdStreamTypeBeta

Common Media Server Data Stream Type

-

Enumeration Members

Enumeration Members

LIVE: "l"

Segments become available over time – e.g., LIVE

-
VOD: "v"

All segments are available – e.g., VOD

-
\ No newline at end of file +CmsdStreamType | @svta/common-media-library

Enumeration CmsdStreamTypeBeta

Common Media Server Data Stream Type

+

Enumeration Members

Enumeration Members

LIVE

Segments become available over time – e.g., LIVE

+
VOD

All segments are available – e.g., VOD

+
diff --git a/enums/CmsdStreamingFormat.html b/enums/CmsdStreamingFormat.html index 1b8f4539..2200d233 100644 --- a/enums/CmsdStreamingFormat.html +++ b/enums/CmsdStreamingFormat.html @@ -1,10 +1,10 @@ -CmsdStreamingFormat | @svta/common-media-library

Enumeration CmsdStreamingFormatBeta

Common Media Server Data Streaming Format

-

Enumeration Members

Enumeration Members

DASH: "d"

MPEG DASH

-
HLS: "h"

HTTP Live Streaming (HLS)

-
OTHER: "o"

Other

-
SMOOTH: "s"

Smooth Streaming

-
\ No newline at end of file +CmsdStreamingFormat | @svta/common-media-library

Enumeration CmsdStreamingFormatBeta

Common Media Server Data Streaming Format

+

Enumeration Members

Enumeration Members

DASH

MPEG DASH

+
HLS

HTTP Live Streaming (HLS)

+
OTHER

Other

+
SMOOTH

Smooth Streaming

+
diff --git a/enums/VerboseLevel.html b/enums/VerboseLevel.html index 73a232bd..4b655cd0 100644 --- a/enums/VerboseLevel.html +++ b/enums/VerboseLevel.html @@ -1,8 +1,8 @@ -VerboseLevel | @svta/common-media-library

Enumeration VerboseLevelConst Beta

Logging levels for the CTA-608 parser.

-

Enumeration Members

Enumeration Members

DATA: 3
DEBUG: 3
ERROR: 0
INFO: 2
TEXT: 1
WARNING: 2
\ No newline at end of file +VerboseLevel | @svta/common-media-library

Enumeration VerboseLevelBeta

Logging levels for the CTA-608 parser.

+

Enumeration Members

Enumeration Members

DATA
DEBUG
ERROR
INFO
TEXT
WARNING
diff --git a/functions/appendCmcdHeaders.html b/functions/appendCmcdHeaders.html index d8585416..0a0a1faa 100644 --- a/functions/appendCmcdHeaders.html +++ b/functions/appendCmcdHeaders.html @@ -1,6 +1,6 @@ -appendCmcdHeaders | @svta/common-media-library
diff --git a/functions/appendCmcdQuery.html b/functions/appendCmcdQuery.html index a735dc15..7b71a523 100644 --- a/functions/appendCmcdQuery.html +++ b/functions/appendCmcdQuery.html @@ -1,6 +1,6 @@ -appendCmcdQuery | @svta/common-media-library
diff --git a/functions/base64decode.html b/functions/base64decode.html index d6255611..edb2474e 100644 --- a/functions/base64decode.html +++ b/functions/base64decode.html @@ -1,4 +1,4 @@ -base64decode | @svta/common-media-library
diff --git a/functions/base64encode.html b/functions/base64encode.html index 7792080a..803ccf9a 100644 --- a/functions/base64encode.html +++ b/functions/base64encode.html @@ -1,4 +1,4 @@ -base64encode | @svta/common-media-library
diff --git a/functions/canParseId3.html b/functions/canParseId3.html index 6565d4b6..94e2f6dd 100644 --- a/functions/canParseId3.html +++ b/functions/canParseId3.html @@ -1,5 +1,5 @@ -canParseId3 | @svta/common-media-library
diff --git a/functions/dashToHam.html b/functions/dashToHam.html index 16774c51..aaf60168 100644 --- a/functions/dashToHam.html +++ b/functions/dashToHam.html @@ -1,8 +1,9 @@ -dashToHam | @svta/common-media-library
diff --git a/functions/decodeCmcd.html b/functions/decodeCmcd.html index 9e1e279b..f6eefcff 100644 --- a/functions/decodeCmcd.html +++ b/functions/decodeCmcd.html @@ -1,4 +1,4 @@ -decodeCmcd | @svta/common-media-library
  • Beta

    Decode a CMCD string to an object.

    -

    Parameters

    • cmcd: string

      The CMCD string to decode.

      -

    Returns Cmcd

    The decoded CMCD object.

    -
\ No newline at end of file +decodeCmcd | @svta/common-media-library
  • Beta

    Decode a CMCD string to an object.

    +

    Parameters

    • cmcd: string

      The CMCD string to decode.

      +

    Returns Cmcd

    The decoded CMCD object.

    +
diff --git a/functions/decodeCmsdDynamic.html b/functions/decodeCmsdDynamic.html index 3e1fe5f8..d3aa820c 100644 --- a/functions/decodeCmsdDynamic.html +++ b/functions/decodeCmsdDynamic.html @@ -1,4 +1,4 @@ -decodeCmsdDynamic | @svta/common-media-library
\ No newline at end of file +decodeCmsdDynamic | @svta/common-media-library
diff --git a/functions/decodeCmsdStatic.html b/functions/decodeCmsdStatic.html index 32198a38..8c0748e9 100644 --- a/functions/decodeCmsdStatic.html +++ b/functions/decodeCmsdStatic.html @@ -1,4 +1,4 @@ -decodeCmsdStatic | @svta/common-media-library
\ No newline at end of file +decodeCmsdStatic | @svta/common-media-library
diff --git a/functions/decodeSfDict.html b/functions/decodeSfDict.html index 4bd321d4..aecd44f8 100644 --- a/functions/decodeSfDict.html +++ b/functions/decodeSfDict.html @@ -1,4 +1,4 @@ -decodeSfDict | @svta/common-media-library
\ No newline at end of file +decodeSfDict | @svta/common-media-library
diff --git a/functions/decodeSfItem.html b/functions/decodeSfItem.html index 876e676d..06381d53 100644 --- a/functions/decodeSfItem.html +++ b/functions/decodeSfItem.html @@ -1,4 +1,4 @@ -decodeSfItem | @svta/common-media-library
\ No newline at end of file +decodeSfItem | @svta/common-media-library
diff --git a/functions/decodeSfList.html b/functions/decodeSfList.html index 9f0919c9..683fe32d 100644 --- a/functions/decodeSfList.html +++ b/functions/decodeSfList.html @@ -1,4 +1,4 @@ -decodeSfList | @svta/common-media-library
\ No newline at end of file +decodeSfList | @svta/common-media-library
diff --git a/functions/encodeCmcd.html b/functions/encodeCmcd.html index 5653b0f4..bd9bf1cb 100644 --- a/functions/encodeCmcd.html +++ b/functions/encodeCmcd.html @@ -1,5 +1,5 @@ -encodeCmcd | @svta/common-media-library
diff --git a/functions/encodeCmsdDynamic.html b/functions/encodeCmsdDynamic.html index 4d5af774..962fe632 100644 --- a/functions/encodeCmsdDynamic.html +++ b/functions/encodeCmsdDynamic.html @@ -1,8 +1,8 @@ -encodeCmsdDynamic | @svta/common-media-library
diff --git a/functions/encodeCmsdStatic.html b/functions/encodeCmsdStatic.html index c402811a..71246384 100644 --- a/functions/encodeCmsdStatic.html +++ b/functions/encodeCmsdStatic.html @@ -1,5 +1,5 @@ -encodeCmsdStatic | @svta/common-media-library
diff --git a/functions/encodeSfDict.html b/functions/encodeSfDict.html index 536b424c..e5e7691b 100644 --- a/functions/encodeSfDict.html +++ b/functions/encodeSfDict.html @@ -1,5 +1,5 @@ -encodeSfDict | @svta/common-media-library
diff --git a/functions/encodeSfItem.html b/functions/encodeSfItem.html index c8d9cf05..92783c60 100644 --- a/functions/encodeSfItem.html +++ b/functions/encodeSfItem.html @@ -1,8 +1,8 @@ -encodeSfItem | @svta/common-media-library
diff --git a/functions/encodeSfList.html b/functions/encodeSfList.html index bb1106cf..90abb7f2 100644 --- a/functions/encodeSfList.html +++ b/functions/encodeSfList.html @@ -1,5 +1,5 @@ -encodeSfList | @svta/common-media-library
diff --git a/functions/extractCta608Data.html b/functions/extractCta608Data.html index d94ff521..3bbb276d 100644 --- a/functions/extractCta608Data.html +++ b/functions/extractCta608Data.html @@ -1,5 +1,5 @@ -extractCta608Data | @svta/common-media-library
diff --git a/functions/findCta608Nalus.html b/functions/findCta608Nalus.html index ebb312f8..1bb641fc 100644 --- a/functions/findCta608Nalus.html +++ b/functions/findCta608Nalus.html @@ -1,6 +1,6 @@ -findCta608Nalus | @svta/common-media-library
diff --git a/functions/fromCmcdHeaders.html b/functions/fromCmcdHeaders.html index adc11e40..91bdc659 100644 --- a/functions/fromCmcdHeaders.html +++ b/functions/fromCmcdHeaders.html @@ -1,4 +1,4 @@ -fromCmcdHeaders | @svta/common-media-library
  • Beta

    Decode CMCD data from request headers.

    -

    Parameters

    • headers: Record<string, string> | Headers

      The request headers to decode.

      -

    Returns Cmcd

    The decoded CMCD data.

    -
\ No newline at end of file +fromCmcdHeaders | @svta/common-media-library
  • Beta

    Decode CMCD data from request headers.

    +

    Parameters

    • headers: Record<string, string> | Headers

      The request headers to decode.

      +

    Returns Cmcd

    The decoded CMCD data.

    +
diff --git a/functions/fromCmcdQuery.html b/functions/fromCmcdQuery.html index 88d4703b..7c841dd2 100644 --- a/functions/fromCmcdQuery.html +++ b/functions/fromCmcdQuery.html @@ -1,4 +1,4 @@ -fromCmcdQuery | @svta/common-media-library
  • Beta

    Decode CMCD data from a query string.

    -

    Parameters

    • query: string | URLSearchParams

      The query string to decode.

      -

    Returns Cmcd

    The decoded CMCD data.

    -
\ No newline at end of file +fromCmcdQuery | @svta/common-media-library
  • Beta

    Decode CMCD data from a query string.

    +

    Parameters

    • query: string | URLSearchParams

      The query string to decode.

      +

    Returns Cmcd

    The decoded CMCD data.

    +
diff --git a/functions/getId3Frames.html b/functions/getId3Frames.html index ea620fd9..cc2b97fb 100644 --- a/functions/getId3Frames.html +++ b/functions/getId3Frames.html @@ -1,4 +1,4 @@ -getId3Frames | @svta/common-media-library
diff --git a/functions/getId3Timestamp.html b/functions/getId3Timestamp.html index e4afe935..e9af8b03 100644 --- a/functions/getId3Timestamp.html +++ b/functions/getId3Timestamp.html @@ -1,4 +1,4 @@ -getId3Timestamp | @svta/common-media-library
diff --git a/functions/getTracksFromPresentation.html b/functions/getTracksFromPresentation.html index dee444a5..c40612d8 100644 --- a/functions/getTracksFromPresentation.html +++ b/functions/getTracksFromPresentation.html @@ -1,5 +1,5 @@ -getTracksFromPresentation | @svta/common-media-library

Function getTracksFromPresentation

\ No newline at end of file +getTracksFromPresentation | @svta/common-media-library

Function getTracksFromPresentation

diff --git a/functions/getTracksFromSelectionSet.html b/functions/getTracksFromSelectionSet.html index ae12dd51..3450d0ab 100644 --- a/functions/getTracksFromSelectionSet.html +++ b/functions/getTracksFromSelectionSet.html @@ -1,5 +1,5 @@ -getTracksFromSelectionSet | @svta/common-media-library

Function getTracksFromSelectionSet

\ No newline at end of file +getTracksFromSelectionSet | @svta/common-media-library

Function getTracksFromSelectionSet

diff --git a/functions/getTracksFromSwitchingSet.html b/functions/getTracksFromSwitchingSet.html index 6cb9f4e2..bdff8540 100644 --- a/functions/getTracksFromSwitchingSet.html +++ b/functions/getTracksFromSwitchingSet.html @@ -1,5 +1,5 @@ -getTracksFromSwitchingSet | @svta/common-media-library

Function getTracksFromSwitchingSet

\ No newline at end of file +getTracksFromSwitchingSet | @svta/common-media-library

Function getTracksFromSwitchingSet

diff --git a/functions/hamToDash.html b/functions/hamToDash.html index 3f89231e..4db39924 100644 --- a/functions/hamToDash.html +++ b/functions/hamToDash.html @@ -1,8 +1,9 @@ -hamToDash | @svta/common-media-library
diff --git a/functions/hamToHls.html b/functions/hamToHls.html index 5c7530c8..831a17d8 100644 --- a/functions/hamToHls.html +++ b/functions/hamToHls.html @@ -1,8 +1,9 @@ -hamToHls | @svta/common-media-library
diff --git a/functions/hlsToHam.html b/functions/hlsToHam.html index abfeca72..ccd48a98 100644 --- a/functions/hlsToHam.html +++ b/functions/hlsToHam.html @@ -1,9 +1,10 @@ -hlsToHam | @svta/common-media-library
diff --git a/functions/roundToEven.html b/functions/roundToEven.html index c9427769..e4d21731 100644 --- a/functions/roundToEven.html +++ b/functions/roundToEven.html @@ -1,6 +1,6 @@ -roundToEven | @svta/common-media-library
diff --git a/functions/toCmcdHeaders.html b/functions/toCmcdHeaders.html index 771f0f19..a22e4652 100644 --- a/functions/toCmcdHeaders.html +++ b/functions/toCmcdHeaders.html @@ -1,5 +1,5 @@ -toCmcdHeaders | @svta/common-media-library
diff --git a/functions/toCmcdJson.html b/functions/toCmcdJson.html index 31d0f49f..3c5b7258 100644 --- a/functions/toCmcdJson.html +++ b/functions/toCmcdJson.html @@ -1,5 +1,5 @@ -toCmcdJson | @svta/common-media-library
diff --git a/functions/toCmcdQuery.html b/functions/toCmcdQuery.html index 5e2ad944..32cb580b 100644 --- a/functions/toCmcdQuery.html +++ b/functions/toCmcdQuery.html @@ -1,5 +1,5 @@ -toCmcdQuery | @svta/common-media-library
diff --git a/functions/urlToRelativePath.html b/functions/urlToRelativePath.html index 798c6e10..b5db4835 100644 --- a/functions/urlToRelativePath.html +++ b/functions/urlToRelativePath.html @@ -1,5 +1,5 @@ -urlToRelativePath | @svta/common-media-library
diff --git a/functions/utf8ArrayToStr.html b/functions/utf8ArrayToStr.html index b0eab55e..8a4318eb 100644 --- a/functions/utf8ArrayToStr.html +++ b/functions/utf8ArrayToStr.html @@ -1,4 +1,4 @@ -utf8ArrayToStr | @svta/common-media-library
  • Beta

    Converts a UTF-8 array to a string.

    -

    Parameters

    • array: Uint8Array

      The UTF-8 array to convert

      -
    • exitOnNull: boolean = false

    Returns string

    The string

    -
\ No newline at end of file +utf8ArrayToStr | @svta/common-media-library
  • Beta

    Converts a UTF-8 array to a string.

    +

    Parameters

    • array: Uint8Array

      The UTF-8 array to convert

      +
    • exitOnNull: boolean = false

    Returns string

    The string

    +
diff --git a/functions/uuid.html b/functions/uuid.html index b81c1b6b..a23d7baf 100644 --- a/functions/uuid.html +++ b/functions/uuid.html @@ -1,3 +1,3 @@ -uuid | @svta/common-media-library
diff --git a/functions/validatePresentation.html b/functions/validatePresentation.html index 50cf1a36..9bfa577d 100644 --- a/functions/validatePresentation.html +++ b/functions/validatePresentation.html @@ -1,12 +1,13 @@ -validatePresentation | @svta/common-media-library
diff --git a/functions/validateSegment.html b/functions/validateSegment.html index 8f53433c..be2b387b 100644 --- a/functions/validateSegment.html +++ b/functions/validateSegment.html @@ -1,11 +1,11 @@ -validateSegment | @svta/common-media-library
diff --git a/functions/validateSegments.html b/functions/validateSegments.html index 6c8eb41a..15876b08 100644 --- a/functions/validateSegments.html +++ b/functions/validateSegments.html @@ -1,9 +1,10 @@ -validateSegments | @svta/common-media-library
diff --git a/functions/validateSelectionSet.html b/functions/validateSelectionSet.html index cc369296..d223f1e3 100644 --- a/functions/validateSelectionSet.html +++ b/functions/validateSelectionSet.html @@ -1,14 +1,15 @@ -validateSelectionSet | @svta/common-media-library
diff --git a/functions/validateSelectionSets.html b/functions/validateSelectionSets.html index 5ac2b1e0..b0d82807 100644 --- a/functions/validateSelectionSets.html +++ b/functions/validateSelectionSets.html @@ -1,10 +1,11 @@ -validateSelectionSets | @svta/common-media-library
diff --git a/functions/validateSwitchingSet.html b/functions/validateSwitchingSet.html index 66429f10..5953e226 100644 --- a/functions/validateSwitchingSet.html +++ b/functions/validateSwitchingSet.html @@ -1,14 +1,15 @@ -validateSwitchingSet | @svta/common-media-library
diff --git a/functions/validateSwitchingSets.html b/functions/validateSwitchingSets.html index 935b2a27..635dfb2e 100644 --- a/functions/validateSwitchingSets.html +++ b/functions/validateSwitchingSets.html @@ -1,10 +1,11 @@ -validateSwitchingSets | @svta/common-media-library
diff --git a/functions/validateTrack.html b/functions/validateTrack.html index 754f20a2..9673bd3a 100644 --- a/functions/validateTrack.html +++ b/functions/validateTrack.html @@ -1,15 +1,16 @@ -validateTrack | @svta/common-media-library
diff --git a/functions/validateTracks.html b/functions/validateTracks.html index b55e4b8b..ea708c37 100644 --- a/functions/validateTracks.html +++ b/functions/validateTracks.html @@ -1,10 +1,11 @@ -validateTracks | @svta/common-media-library
diff --git a/index.html b/index.html index bda22dc2..1fb4b95c 100644 --- a/index.html +++ b/index.html @@ -1,16 +1,21 @@ -@svta/common-media-library

@svta/common-media-library

common-media-library

A common library for media playback in JavaScript

-

Looking at open source players like hls.js, dash.js, and shaka-player there are common pieces of functionality that have been implemented independently across the libraries. This is particularly true when looking at standards based features, like ID3 parsing, 608 parsing and CMCD. Since the functionality is shared in spirit but not implementation, they can fall out of sync where certain bugs are fixed in one player but not the others. The goal of this library is to create a single place where these utilities can be maintained and distributed.

-

Project structure

This project is a mono-repo with the following workspaces: lib, docs. The lib package contains the compiled code for the library which is published to npm. The docs package contains the documentation for the library and is published to GitHub pages.

-

Installation

npm install @svta/common-media-library
-
-

Usage

Too ensure the smallest bundle sizes possible, it is best practice to import all members and type definitions +@svta/common-media-library

@svta/common-media-library

common-media-library

A common library for media playback in JavaScript

+

Looking at open source players like hls.js, dash.js, and shaka-player there are common pieces of functionality that have been implemented independently across the libraries. This is particularly true when looking at standards based features, like ID3 parsing, 608 parsing and CMCD. Since the functionality is shared in spirit but not implementation, they can fall out of sync where certain bugs are fixed in one player but not the others. The goal of this library is to create a single place where these utilities can be maintained and distributed.

+

This project is a mono-repo with the following workspaces: lib, docs. The lib package contains the compiled code for the library which is published to npm. The docs package contains the documentation for the library and is published to GitHub pages.

+
npm install @svta/common-media-library
+
+ +

Too ensure the smallest bundle sizes possible, it is best practice to import all members and type definitions individually from the library.

-
import { appendCmcdQuery } from '@svta/common-media-library/cmcd/appendCmcdQuery';
import { CmcdObjectType } from '@svta/common-media-library/cmcd/CmcdObjectType';

const cmcd = {
sid: '4f2867f2-b0fd-4db7-a3e0-cea7dff44cfb',
cid: 'cc002fc3-d9e1-418d-9a5f-3d0eac601882',
d: 324.69,
ot: CmcdObjectType.MANIFEST,
['com.example-hello']: 'world',
};

const cmcdUrl = appendCmcdQuery('https://example.com/playlist.m3u8', cmcd);
console.log(cmcdUrl);
// https://example.com/playlist.m3u8?CMCD=cid%3D%22cc002fc3-d9e1-418d-9a5f-3d0eac601882%22%2Ccom.example-hello%3D%22world%22%2Cd%3D325%2Cot%3Dm%2Csid%3D%224f2867f2-b0fd-4db7-a3e0-cea7dff44cfb%22 -
-

If bundle size isn't a concern, all members and type definitions can also be imported from the root of the library, or from the feature namespace.

-
import { appendCmcdQuery, CmcdObjectType } from '@svta/common-media-library';
-
-
import { appendCmcdQuery, CmcdObjectType } from '@svta/common-media-library/cmcd';
-
-

Documentation

API docs can be found here.

-
\ No newline at end of file +
import { appendCmcdQuery } from '@svta/common-media-library/cmcd/appendCmcdQuery';
import { CmcdObjectType } from '@svta/common-media-library/cmcd/CmcdObjectType';

const cmcd = {
sid: '4f2867f2-b0fd-4db7-a3e0-cea7dff44cfb',
cid: 'cc002fc3-d9e1-418d-9a5f-3d0eac601882',
d: 324.69,
ot: CmcdObjectType.MANIFEST,
['com.example-hello']: 'world',
};

const cmcdUrl = appendCmcdQuery('https://example.com/playlist.m3u8', cmcd);
console.log(cmcdUrl);
// https://example.com/playlist.m3u8?CMCD=cid%3D%22cc002fc3-d9e1-418d-9a5f-3d0eac601882%22%2Ccom.example-hello%3D%22world%22%2Cd%3D325%2Cot%3Dm%2Csid%3D%224f2867f2-b0fd-4db7-a3e0-cea7dff44cfb%22 +
+ +

If bundle size isn't a concern, all members and type definitions can also be imported from the root of the library, or from the feature namespace.

+
import { appendCmcdQuery, CmcdObjectType } from '@svta/common-media-library';
+
+ +
import { appendCmcdQuery, CmcdObjectType } from '@svta/common-media-library/cmcd';
+
+ +

API docs can be found here.

+

This project builds upon the work of the open source community. Special thanks to the maintainers of hls.js, dash.js, shaka-player, and structured-field-values as well as organizations like the Streaming Video Technology Alliance, DASH Industry Forum, and the CTA WAVE Project.

+
diff --git a/interfaces/Cmcd.html b/interfaces/Cmcd.html deleted file mode 100644 index c290fcaa..00000000 --- a/interfaces/Cmcd.html +++ /dev/null @@ -1,130 +0,0 @@ -Cmcd | @svta/common-media-library

Common Media Client Data (CMCD) is a standardized set of HTTP request header fields and query string parameters.

-

See

Spec

-
interface Cmcd {
    bl?: number;
    br?: number;
    bs?: boolean;
    cid?: string;
    d?: number;
    dl?: number;
    mtp?: number;
    nor?: string;
    nrr?: string;
    ot?: CmcdObjectType;
    pr?: number;
    rtp?: number;
    sf?: CmcdStreamingFormat;
    sid?: string;
    st?: CmcdStreamType;
    su?: boolean;
    tb?: number;
    v?: number;
    [index: CmcdCustomKey]: CmcdValue;
}

Indexable

Custom key names may be used, but they MUST carry a hyphenated prefix to ensure that there will not be a namespace collision -with future revisions to this specification. Clients SHOULD use a reverse-DNS syntax when defining their own prefix.

-

Properties

Properties

bl?: number

Buffer length

-

The buffer length associated with the media object being requested. This value MUST be rounded to the nearest 100 ms. This key SHOULD only be -sent with an object type of ‘a’, ‘v’ or ‘av’.

-

Integer milliseconds

-
br?: number

Encoded bitrate

-

The encoded bitrate of the audio or video object being requested. This may not be known precisely by the player; however, -it MAY be estimated based upon playlist/manifest declarations. If the playlist declares both peak and average bitrate values, -the peak value should be transmitted.

-

Integer kbps

-
bs?: boolean

Buffer starvation

-

Key is included without a value if the buffer was starved at some point between the prior request and this object request, -resulting in the player being in a rebuffering state and the video or audio playback being stalled. This key MUST NOT be -sent if the buffer was not starved since the prior request.

-

If the object type ot key is sent along with this key, then the bs key refers to the buffer associated with the particular -object type. If no object type is communicated, then the buffer state applies to the current session.

-

Boolean

-
cid?: string

Content ID

-

A unique string identifying the current content. Maximum length is 64 characters. This value is consistent across multiple different -sessions and devices and is defined and updated at the discretion of the service provider.

-

String

-
d?: number

Object duration

-

The playback duration in milliseconds of the object being requested. If a partial segment is being requested, then this value -MUST indicate the playback duration of that part and not that of its parent segment. This value can be an approximation of the -estimated duration if the explicit value is not known.

-

Integer milliseconds

-
dl?: number

Deadline

-

Deadline from the request time until the first sample of this Segment/Object needs to be available in order to not create a buffer underrun or -any other playback problems. This value MUST be rounded to the nearest 100ms. For a playback rate of 1, this may be equivalent to the player’s -remaining buffer length.

-

Integer milliseconds

-
mtp?: number

Measured mtp CMCD throughput

-

The throughput between client and server, as measured by the client and MUST be rounded to the nearest 100 kbps. This value, however derived, -SHOULD be the value that the client is using to make its next Adaptive Bitrate switching decision. If the client is connected to multiple -servers concurrently, it must take care to report only the throughput measured against the receiving server. If the client has multiple concurrent -connections to the server, then the intent is that this value communicates the aggregate throughput the client sees across all those connections.

-

Integer kbps

-
nor?: string

Next object request

-

Relative path of the next object to be requested. This can be used to trigger pre-fetching by the CDN. This MUST be a path relative to the current -request. This string MUST be URLEncoded. The client SHOULD NOT depend upon any pre-fetch action being taken - it is merely a request for such a -pre-fetch to take place.

-

String

-
nrr?: string

Next range request

-

If the next request will be a partial object request, then this string denotes the byte range to be requested. If the ‘nor’ field is not set, then the -object is assumed to match the object currently being requested. The client SHOULD NOT depend upon any pre-fetch action being taken – it is merely a -request for such a pre-fetch to take place. Formatting is similar to the HTTP Range header, except that the unit MUST be ‘byte’, the ‘Range:’ prefix is -NOT required and specifying multiple ranges is NOT allowed. Valid combinations are:

-
    -
  • "\<range-start\>-"
  • -
  • "\<range-start\>-\<range-end\>"
  • -
  • "-\<suffix-length\>"
  • -
-

String

-

Object type

-

The media type of the current object being requested:

-
    -
  • m = text file, such as a manifest or playlist
  • -
  • a = audio only
  • -
  • v = video only
  • -
  • av = muxed audio and video
  • -
  • i = init segment
  • -
  • c = caption or subtitle
  • -
  • tt = ISOBMFF timed text track
  • -
  • k = cryptographic key, license or certificate.
  • -
  • o = other
  • -
-

If the object type being requested is unknown, then this key MUST NOT be used.

-
pr?: number

Playback rate

-

1 if real-time, 2 if double speed, 0 if not playing. SHOULD only be sent if not equal to 1.

-

Decimal

-
rtp?: number

Requested maximum throughput

-

The requested maximum throughput that the client considers sufficient for delivery of the asset. Values MUST be rounded to the -nearest 100kbps. For example, a client would indicate that the current segment, encoded at 2Mbps, is to be delivered at no more -than 10Mbps, by using rtp=10000.

-

Note: This can benefit clients by preventing buffer saturation through over-delivery and can also deliver a community benefit -through fair-share delivery. The concept is that each client receives the throughput necessary for great performance, but no more. -The CDN may not support the rtp feature.

-

Integer kbps

-

Streaming format

-

The streaming format that defines the current request.

-
    -
  • d = MPEG DASH
  • -
  • h = HTTP Live Streaming (HLS)
  • -
  • s = Smooth Streaming
  • -
  • o = other
  • -
-

If the streaming format being requested is unknown, then this key MUST NOT be used.

-
sid?: string

Session ID

-

A GUID identifying the current playback session. A playback session typically ties together segments belonging to a single media asset. -Maximum length is 64 characters. It is RECOMMENDED to conform to the UUID specification.

-

String

-

Stream type

-
    -
  • v = all segments are available – e.g., VOD
  • -
  • l = segments become available over time – e.g., LIVE
  • -
-
su?: boolean

Startup

-

Key is included without a value if the object is needed urgently due to startup, seeking or recovery after a buffer-empty event. The media SHOULD not be -rendering when this request is made. This key MUST not be sent if it is FALSE.

-

Boolean

-
tb?: number

Top bitrate

-

The highest bitrate rendition in the manifest or playlist that the client is allowed to play, given current codec, licensing and -sizing constraints.

-

Integer Kbps

-
v?: number

CMCD version

-

The version of this specification used for interpreting the defined key names and values. If this key is omitted, the client and server MUST -interpret the values as being defined by version 1. Client SHOULD omit this field if the version is 1.

-

Integer

-
\ No newline at end of file diff --git a/interfaces/CmcdEncodeOptions.html b/interfaces/CmcdEncodeOptions.html deleted file mode 100644 index a9aac49f..00000000 --- a/interfaces/CmcdEncodeOptions.html +++ /dev/null @@ -1,15 +0,0 @@ -CmcdEncodeOptions | @svta/common-media-library

Interface CmcdEncodeOptionsBeta

Options for encoding CMCD values.

-
interface CmcdEncodeOptions {
    baseUrl?: string;
    customHeaderMap?: CmcdHeadersMap;
    filter?: ((key) => boolean);
    formatters?: Record<keyof Cmcd, CmcdFormatter>;
}

Properties

baseUrl?: string

The base URL to use for relative URLs.

-
customHeaderMap?: CmcdHeadersMap

A map of CMCD header fields to custom CMCD keys.

-
filter?: ((key) => boolean)

A filter function for CMCD keys.

-

Type declaration

    • (key): boolean
    • A filter function for CMCD keys.

      -

      Parameters

      • key: keyof Cmcd

        The CMCD key to filter.

        -

      Returns boolean

      true if the key should be included, false otherwise.

      -

Param: key

The CMCD key to filter.

-

Returns

true if the key should be included, false otherwise.

-
formatters?: Record<keyof Cmcd, CmcdFormatter>

A map of CMCD keys to custom formatters.

-
\ No newline at end of file diff --git a/interfaces/CmsdDynamic.html b/interfaces/CmsdDynamic.html deleted file mode 100644 index ce77a73d..00000000 --- a/interfaces/CmsdDynamic.html +++ /dev/null @@ -1,7 +0,0 @@ -CmsdDynamic | @svta/common-media-library

Interface CmsdDynamicBeta

Common Media Server Data (CMSD) dynamic response header fields.

-

See

Spec

-
interface CmsdDynamic {
    params: CmsdDynamicParams;
    value: string;
}

Properties

Properties

The CMSD dynamic parameters.

-
value: string

The server name.

-
\ No newline at end of file diff --git a/interfaces/CmsdDynamicParams.html b/interfaces/CmsdDynamicParams.html deleted file mode 100644 index 86ccc20a..00000000 --- a/interfaces/CmsdDynamicParams.html +++ /dev/null @@ -1,40 +0,0 @@ -CmsdDynamicParams | @svta/common-media-library

Interface CmsdDynamicParamsBeta

Common Media Server Data (CMSD) dynamic response header field parameters.

-

See

Spec

-
interface CmsdDynamicParams {
    du?: boolean;
    etp?: number;
    mb?: number;
    rd?: number;
    rtt?: number;
    [index: CmsdCustomKey]: CmsdValue;
}

Indexable

Custom key names may be used, but they MUST carry a hyphenated prefix to ensure that there will not be a namespace collision -with future revisions to this specification. Clients SHOULD use a reverse-DNS syntax when defining their own prefix.

-

Properties

Properties

du?: boolean

Duress

-

Key is included without a value if the server is under duress, due to cpu, memory, disk IO, network IO or other reasons. The -thresholds for signaling duress are left to the discretion of the server operator. The intent is that the client will use this -signal to move away to an alternate server if possible. This key MUST NOT be sent if it is false.

-

Boolean

-
etp?: number

Estimated Throughput

-

The throughput between the server and the client over the currently negotiated transport as estimated by the server at the start -of the response. The value is expressed in units of kilobits per second and rounded to the nearest integer. The time window for -this estimate is expected to be the duration of the current response at most. The throughput may vary during the response and the -client SHOULD use this data as an adjunct to its own throughput estimates. As an informative example, this estimate could be -derived in this way:

-

etp = 8 * send_window / (rtt)

-

where send_window = min (cwnd * mss, rwnd) with Congestion Window (cwnd) measured in packets, Maximum Segment Size (mss) in bytes, -Receiver Window (rwnd) in bytes and rtt in milliseconds. Note that multiple client processes adjacent to the media player may pool -their requests into the same connection to the server. In this case the server estimate of throughput will be against the entirety -of the connection, not all of which will be accessible to the media player.

-

Integer Kbps

-
mb?: number

Max suggested bitrate

-

The maximum bitrate value that the player SHOULD play in its Adaptive Bit Rate (ABR) ladder. If the player is playing a bitrate higher -than this value, it SHOULD immediately switch to a bitrate lower than or equal to this value.

-

Integer Kbps

-
rd?: number

Response delay

-

The time elapsed between the receipt of the request and when the first byte of the body becomes available to send to the client. The -intention is for receivers to use this value to more accurately calculate the throughput of the connection [MHV22].

-

Integer milliseconds

-
rtt?: number

Round Trip Time

-

Estimated round trip time between client and server. This estimate may be derived from the transport handshake. For subsequent requests -over the same connection, the value can be refined to be an exponentially weighted moving average of prior instantaneous values. An -informative example algorithm for this averaging is provided by [18].

-

Integer Kbps

-
\ No newline at end of file diff --git a/interfaces/CmsdEncodeOptions.html b/interfaces/CmsdEncodeOptions.html deleted file mode 100644 index 4f808073..00000000 --- a/interfaces/CmsdEncodeOptions.html +++ /dev/null @@ -1,5 +0,0 @@ -CmsdEncodeOptions | @svta/common-media-library

Interface CmsdEncodeOptionsBeta

Options for encoding CMCD values.

-
interface CmsdEncodeOptions {
    useSymbol?: boolean;
}

Properties

Properties

useSymbol?: boolean

Use Symbol to represent token values

-

Default Value

true

-
\ No newline at end of file diff --git a/interfaces/CmsdStatic.html b/interfaces/CmsdStatic.html deleted file mode 100644 index 5a2220c7..00000000 --- a/interfaces/CmsdStatic.html +++ /dev/null @@ -1,95 +0,0 @@ -CmsdStatic | @svta/common-media-library

Interface CmsdStaticBeta

Common Media Server Data (CMSD) static response header fields.

-

See

Spec

-
interface CmsdStatic {
    at?: number;
    br?: number;
    d?: number;
    ht?: number;
    n?: string;
    nor?: string;
    nrr?: string;
    ot?: CmsdObjectType;
    sf?: CmsdStreamingFormat;
    st?: CmsdStreamType;
    su?: boolean;
    v?: number;
    [index: CmsdCustomKey]: CmsdValue;
}

Indexable

Custom key names may be used, but they MUST carry a hyphenated prefix to ensure that there will not be a namespace collision -with future revisions to this specification. Clients SHOULD use a reverse-DNS syntax when defining their own prefix.

-

Properties

at? -br? -d? -ht? -n? -nor? -nrr? -ot? -sf? -st? -su? -v? -

Properties

at?: number

Availability time

-

The wallclock time at which the first byte of this object became available at the origin for successful request. The time is -expressed as integer milliseconds since the Unix Epoch, i.e., the number of milliseconds that have elapsed since January 1, -1970 (midnight UTC/GMT), not counting leap seconds (in ISO 8601: 1970- 01-01T00:00:000Z).

-

Integer Milliseconds

-
br?: number

Encoded bitrate

-

The encoded bitrate of the audio or video object being requested. If the instantaneous bitrate varies over the duration of the -object, the average value over the duration of the object SHOULD be communicated. This key should only accompany objects that -have an implicit bitrate.

-

Integer kbps

-
d?: number

Object duration

-

The playback duration in milliseconds of the object being requested. If a partial segment is being requested, then this value -MUST indicate the playback duration of that part and not that of its parent segment. This value can be an approximation of the -estimated duration if the explicit value is not known.

-

Integer milliseconds

-
ht?: number

Held time

-

The number of milliseconds that this response was held back by an origin before returning. This is applicable to blocking responses -under LL-HLS [HLSbis].

-

Integer Milliseconds

-
n?: string

Intermediary identifier

-

An identifier for the processing server. The value SHOULD identify both the organization and the intermediary that is writing the key. -Identifiers SHOULD be as concise as possible to reduce log file and transferred size, while still remaining unique.

-

String

-
nor?: string

Next object request

-

Relative path of the next object to be requested. This can be used to trigger pre-fetching by the CDN. This MUST be a path relative to the current -request. This string MUST be URLEncoded. The client SHOULD NOT depend upon any pre-fetch action being taken - it is merely a request for such a -pre-fetch to take place.

-

String

-
nrr?: string

Next range request

-

If the next request will be a partial object request, then this string denotes the byte range to be requested. If the ‘nor’ field is not set, then the -object is assumed to match the object currently being requested. The client SHOULD NOT depend upon any pre-fetch action being taken – it is merely a -request for such a pre-fetch to take place. Formatting is similar to the HTTP Range header, except that the unit MUST be ‘byte’, the ‘Range:’ prefix is -NOT required and specifying multiple ranges is NOT allowed. Valid combinations are:

-
    -
  • "\<range-start\>-"
  • -
  • "\<range-start\>-\<range-end\>"
  • -
  • "-\<suffix-length\>"
  • -
-

String

-

Object type

-

The media type of the current object being requested:

-
    -
  • m = text file, such as a manifest or playlist
  • -
  • a = audio only
  • -
  • v = video only
  • -
  • av = muxed audio and video
  • -
  • i = init segment
  • -
  • c = caption or subtitle
  • -
  • tt = ISOBMFF timed text track
  • -
  • k = cryptographic key, license or certificate.
  • -
  • o = other
  • -
-

If the object type being requested is unknown, then this key MUST NOT be used.

-

Token

-

Streaming format

-

The streaming format that defines the current request.

-
    -
  • d = MPEG DASH
  • -
  • h = HTTP Live Streaming (HLS)
  • -
  • s = Smooth Streaming
  • -
  • o = other
  • -
-

If the streaming format being requested is unknown, then this key MUST NOT be used.

-

Token

-

Stream type

-
    -
  • v = all segments are available – e.g., VOD
  • -
  • l = segments become available over time – e.g., LIVE
  • -
-

Token

-
su?: boolean

Startup

-

Key is included without a value if the object is needed urgently due to startup, seeking or recovery after a buffer-empty event. The media SHOULD not be -rendering when this request is made. This key MUST not be sent if it is FALSE.

-

Boolean

-
v?: number

CMSD version

-

The version of this specification used for interpreting the defined key names and values. If this key is omitted, the client and server MUST -interpret the values as being defined by version 1. Client SHOULD omit this field if the version is 1.

-

Integer

-
\ No newline at end of file diff --git a/interfaces/CommonMediaRequest.html b/interfaces/CommonMediaRequest.html deleted file mode 100644 index cfef5206..00000000 --- a/interfaces/CommonMediaRequest.html +++ /dev/null @@ -1,21 +0,0 @@ -CommonMediaRequest | @svta/common-media-library

Interface CommonMediaRequestBeta

Common request API.

-
interface CommonMediaRequest {
    cmcd?: Cmcd;
    credentials?: RequestCredentials;
    customData?: any;
    headers?: Record<string, string>;
    method: string;
    mode?: RequestMode;
    responseType?: string;
    timeout?: number;
    url: string;
}

Properties

cmcd?: Cmcd

The Common Media Client Data (CMCD) that comprises media and request related information.

-
credentials?: RequestCredentials

Indicates whether the user agent should send or receive cookies from the other domain in the case of cross-origin requests.

-
customData?: any

Any custom data.

-
headers?: Record<string, string>

The headers object associated with the request.

-
method: string

The request's method (GET, POST, etc).

-
mode?: RequestMode

The mode of the request (e.g., cors, no-cors, same-origin, etc).

-
responseType?: string

The response type with which the response from the server shall be compatible.

-
timeout?: number

The number of milliseconds the request can take before automatically being terminated. -If undefined or value is 0 then there is no timeout.

-
url: string

The URL of the request.

-
\ No newline at end of file diff --git a/interfaces/CommonMediaResponse.html b/interfaces/CommonMediaResponse.html deleted file mode 100644 index cc38f662..00000000 --- a/interfaces/CommonMediaResponse.html +++ /dev/null @@ -1,20 +0,0 @@ -CommonMediaResponse | @svta/common-media-library

Interface CommonMediaResponseBeta

Common response API.

-
interface CommonMediaResponse {
    data?: any;
    headers?: Record<string, string>;
    redirected?: boolean;
    request: CommonMediaRequest;
    resourceTiming: ResourceTiming;
    status?: number;
    statusText?: string;
    type?: string;
    url?: string;
}

Properties

data?: any

The response data.

-
headers?: Record<string, string>

The response headers.

-
redirected?: boolean

Indicates whether or not the request was redirected.

-

The origin request.

-
resourceTiming: ResourceTiming

The network timing of the request/response.

-
status?: number

The HTTP status code of the response.

-
statusText?: string

The status message corresponding to the HTTP status code.

-
type?: string

The type of the response.

-
url?: string

The final URL obtained after any redirects.

-
\ No newline at end of file diff --git a/interfaces/CueHandler.html b/interfaces/CueHandler.html deleted file mode 100644 index 60a5f849..00000000 --- a/interfaces/CueHandler.html +++ /dev/null @@ -1,5 +0,0 @@ -CueHandler | @svta/common-media-library

Interface CueHandlerBeta

A handler for CTA-608 cues.

-
interface CueHandler {
    dispatchCue?(): void;
    newCue(startTime, endTime, screen): void;
    reset?(): void;
}

Methods

\ No newline at end of file diff --git a/interfaces/PACData.html b/interfaces/PACData.html deleted file mode 100644 index 8f1941ef..00000000 --- a/interfaces/PACData.html +++ /dev/null @@ -1,7 +0,0 @@ -PACData | @svta/common-media-library

Interface PACDataBeta

Represents a single PAC (Preamble Address Code) data.

-
interface PACData {
    color: null | string;
    indent: null | number;
    italics: boolean;
    row: number;
    underline: boolean;
}

Properties

Properties

color: null | string
indent: null | number
italics: boolean
row: number
underline: boolean
\ No newline at end of file diff --git a/interfaces/ResourceTiming.html b/interfaces/ResourceTiming.html deleted file mode 100644 index 3cc018d4..00000000 --- a/interfaces/ResourceTiming.html +++ /dev/null @@ -1,7 +0,0 @@ -ResourceTiming | @svta/common-media-library

Interface ResourceTimingBeta

Resource Timing.

-
interface ResourceTiming {
    duration?: number;
    encodedBodySize: number;
    responseEnd?: number;
    responseStart?: number;
    startTime: number;
}

Properties

duration?: number
encodedBodySize: number
responseEnd?: number
responseStart?: number
startTime: number
\ No newline at end of file diff --git a/modules.html b/modules.html index 94351e4b..af4eae11 100644 --- a/modules.html +++ b/modules.html @@ -1,121 +1,130 @@ -@svta/common-media-library

@svta/common-media-library

The Common Media Libray

-

Index

CMAF

CMCD

CMSD

CTA-608

ID3

Request

Structured Field

Utils

\ No newline at end of file +@svta/common-media-library

@svta/common-media-library

The Common Media Libray

+

Index

CMAF

CMCD

CMSD

CTA-608

ID3

Request

Structured Field

Utils

diff --git a/types/AlignedSwitchingSet.html b/types/AlignedSwitchingSet.html index 247a2f93..4f5ef005 100644 --- a/types/AlignedSwitchingSet.html +++ b/types/AlignedSwitchingSet.html @@ -1,2 +1,2 @@ -AlignedSwitchingSet | @svta/common-media-library

Type alias AlignedSwitchingSetAlpha

AlignedSwitchingSet: {
    switchingSets: SwitchingSet[];
}

CMAF-HAM Aligned Switching Set type

-

Type declaration

\ No newline at end of file +AlignedSwitchingSet | @svta/common-media-library

Type Alias AlignedSwitchingSetAlpha

AlignedSwitchingSet: {
    switchingSets: SwitchingSet[];
}

CMAF-HAM Aligned Switching Set type

+
diff --git a/types/AudioTrack.html b/types/AudioTrack.html index 3b243755..297037df 100644 --- a/types/AudioTrack.html +++ b/types/AudioTrack.html @@ -1,6 +1,6 @@ -AudioTrack | @svta/common-media-library

Type alias AudioTrackAlpha

AudioTrack: Track & {
    channels: number;
    sampleRate: number;
}

CMAF-HAM Audio Track type

+AudioTrack | @svta/common-media-library

Type Alias AudioTrackAlpha

AudioTrack: Track & {
    channels: number;
    sampleRate: number;
}

CMAF-HAM Audio Track type

sampleRate - The sample rate of the audio track. It defines the number of samples per second in the audio. - For example, if the sample rate is 44100, it means there are 44100 samples in each second of the audio.

+For example, if the sample rate is 44100, it means there are 44100 samples in each second of the audio.

channels - The number of channels in the audio track. It defines the number of separate audio signals that are encoded in the audio. - For example, if the channels is 2, it means the audio is stereo with a separate signal for left and right.

-

Type declaration

  • channels: number
  • sampleRate: number
\ No newline at end of file +For example, if the channels is 2, it means the audio is stereo with a separate signal for left and right.

+
diff --git a/types/CaptionModes.html b/types/CaptionModes.html index 40f1815d..93344a91 100644 --- a/types/CaptionModes.html +++ b/types/CaptionModes.html @@ -1,2 +1,2 @@ -CaptionModes | @svta/common-media-library

Type alias CaptionModesBeta

CaptionModes: "MODE_ROLL-UP" | "MODE_POP-ON" | "MODE_PAINT-ON" | "MODE_TEXT" | null

The different caption modes that can be used.

-
\ No newline at end of file +CaptionModes | @svta/common-media-library

Type Alias CaptionModesBeta

CaptionModes:
    | "MODE_ROLL-UP"
    | "MODE_POP-ON"
    | "MODE_PAINT-ON"
    | "MODE_TEXT"
    | null

The different caption modes that can be used.

+
diff --git a/types/Cmcd.html b/types/Cmcd.html new file mode 100644 index 00000000..8262526a --- /dev/null +++ b/types/Cmcd.html @@ -0,0 +1,112 @@ +Cmcd | @svta/common-media-library
Cmcd: {
    bl?: number;
    br?: number;
    bs?: boolean;
    cid?: string;
    d?: number;
    dl?: number;
    mtp?: number;
    nor?: string;
    nrr?: string;
    ot?: CmcdObjectType;
    pr?: number;
    rtp?: number;
    sf?: CmcdStreamingFormat;
    sid?: string;
    st?: CmcdStreamType;
    su?: boolean;
    tb?: number;
    v?: number;
    [index: CmcdCustomKey]: CmcdValue;
}

Common Media Client Data (CMCD) is a standardized set of HTTP request header fields and query string parameters.

+

Type declaration

  • [index: CmcdCustomKey]: CmcdValue

    Custom key names may be used, but they MUST carry a hyphenated prefix to ensure that there will not be a namespace collision +with future revisions to this specification. Clients SHOULD use a reverse-DNS syntax when defining their own prefix.

    +
  • Optional Betabl?: number

    Buffer length

    +

    The buffer length associated with the media object being requested. This value MUST be rounded to the nearest 100 ms. This key SHOULD only be +sent with an object type of ‘a’, ‘v’ or ‘av’.

    +

    Integer milliseconds

    +
  • Optional Betabr?: number

    Encoded bitrate

    +

    The encoded bitrate of the audio or video object being requested. This may not be known precisely by the player; however, +it MAY be estimated based upon playlist/manifest declarations. If the playlist declares both peak and average bitrate values, +the peak value should be transmitted.

    +

    Integer kbps

    +
  • Optional Betabs?: boolean

    Buffer starvation

    +

    Key is included without a value if the buffer was starved at some point between the prior request and this object request, +resulting in the player being in a rebuffering state and the video or audio playback being stalled. This key MUST NOT be +sent if the buffer was not starved since the prior request.

    +

    If the object type ot key is sent along with this key, then the bs key refers to the buffer associated with the particular +object type. If no object type is communicated, then the buffer state applies to the current session.

    +

    Boolean

    +
  • Optional Betacid?: string

    Content ID

    +

    A unique string identifying the current content. Maximum length is 64 characters. This value is consistent across multiple different +sessions and devices and is defined and updated at the discretion of the service provider.

    +

    String

    +
  • Optional Betad?: number

    Object duration

    +

    The playback duration in milliseconds of the object being requested. If a partial segment is being requested, then this value +MUST indicate the playback duration of that part and not that of its parent segment. This value can be an approximation of the +estimated duration if the explicit value is not known.

    +

    Integer milliseconds

    +
  • Optional Betadl?: number

    Deadline

    +

    Deadline from the request time until the first sample of this Segment/Object needs to be available in order to not create a buffer underrun or +any other playback problems. This value MUST be rounded to the nearest 100ms. For a playback rate of 1, this may be equivalent to the player’s +remaining buffer length.

    +

    Integer milliseconds

    +
  • Optional Betamtp?: number

    Measured mtp CMCD throughput

    +

    The throughput between client and server, as measured by the client and MUST be rounded to the nearest 100 kbps. This value, however derived, +SHOULD be the value that the client is using to make its next Adaptive Bitrate switching decision. If the client is connected to multiple +servers concurrently, it must take care to report only the throughput measured against the receiving server. If the client has multiple concurrent +connections to the server, then the intent is that this value communicates the aggregate throughput the client sees across all those connections.

    +

    Integer kbps

    +
  • Optional Betanor?: string

    Next object request

    +

    Relative path of the next object to be requested. This can be used to trigger pre-fetching by the CDN. This MUST be a path relative to the current +request. This string MUST be URLEncoded. The client SHOULD NOT depend upon any pre-fetch action being taken - it is merely a request for such a +pre-fetch to take place.

    +

    String

    +
  • Optional Betanrr?: string

    Next range request

    +

    If the next request will be a partial object request, then this string denotes the byte range to be requested. If the ‘nor’ field is not set, then the +object is assumed to match the object currently being requested. The client SHOULD NOT depend upon any pre-fetch action being taken – it is merely a +request for such a pre-fetch to take place. Formatting is similar to the HTTP Range header, except that the unit MUST be ‘byte’, the ‘Range:’ prefix is +NOT required and specifying multiple ranges is NOT allowed. Valid combinations are:

    +
      +
    • "\<range-start\>-"
    • +
    • "\<range-start\>-\<range-end\>"
    • +
    • "-\<suffix-length\>"
    • +
    +

    String

    +
  • Optional Betaot?: CmcdObjectType

    Object type

    +

    The media type of the current object being requested:

    +
      +
    • m = text file, such as a manifest or playlist
    • +
    • a = audio only
    • +
    • v = video only
    • +
    • av = muxed audio and video
    • +
    • i = init segment
    • +
    • c = caption or subtitle
    • +
    • tt = ISOBMFF timed text track
    • +
    • k = cryptographic key, license or certificate.
    • +
    • o = other
    • +
    +

    If the object type being requested is unknown, then this key MUST NOT be used.

    +
  • Optional Betapr?: number

    Playback rate

    +

    1 if real-time, 2 if double speed, 0 if not playing. SHOULD only be sent if not equal to 1.

    +

    Decimal

    +
  • Optional Betartp?: number

    Requested maximum throughput

    +

    The requested maximum throughput that the client considers sufficient for delivery of the asset. Values MUST be rounded to the +nearest 100kbps. For example, a client would indicate that the current segment, encoded at 2Mbps, is to be delivered at no more +than 10Mbps, by using rtp=10000.

    +

    Note: This can benefit clients by preventing buffer saturation through over-delivery and can also deliver a community benefit +through fair-share delivery. The concept is that each client receives the throughput necessary for great performance, but no more. +The CDN may not support the rtp feature.

    +

    Integer kbps

    +
  • Optional Betasf?: CmcdStreamingFormat

    Streaming format

    +

    The streaming format that defines the current request.

    +
      +
    • d = MPEG DASH
    • +
    • h = HTTP Live Streaming (HLS)
    • +
    • s = Smooth Streaming
    • +
    • o = other
    • +
    +

    If the streaming format being requested is unknown, then this key MUST NOT be used.

    +
  • Optional Betasid?: string

    Session ID

    +

    A GUID identifying the current playback session. A playback session typically ties together segments belonging to a single media asset. +Maximum length is 64 characters. It is RECOMMENDED to conform to the UUID specification.

    +

    String

    +
  • Optional Betast?: CmcdStreamType

    Stream type

    +
      +
    • v = all segments are available – e.g., VOD
    • +
    • l = segments become available over time – e.g., LIVE
    • +
    +
  • Optional Betasu?: boolean

    Startup

    +

    Key is included without a value if the object is needed urgently due to startup, seeking or recovery after a buffer-empty event. The media SHOULD not be +rendering when this request is made. This key MUST not be sent if it is FALSE.

    +

    Boolean

    +
  • Optional Betatb?: number

    Top bitrate

    +

    The highest bitrate rendition in the manifest or playlist that the client is allowed to play, given current codec, licensing and +sizing constraints.

    +

    Integer Kbps

    +
  • Optional Betav?: number

    CMCD version

    +

    The version of this specification used for interpreting the defined key names and values. If this key is omitted, the client and server MUST +interpret the values as being defined by version 1. Client SHOULD omit this field if the version is 1.

    +

    Integer

    +

Spec

+
diff --git a/types/CmcdCustomKey.html b/types/CmcdCustomKey.html index b704e2a3..376c6722 100644 --- a/types/CmcdCustomKey.html +++ b/types/CmcdCustomKey.html @@ -1,5 +1,5 @@ -CmcdCustomKey | @svta/common-media-library

Type alias CmcdCustomKeyBeta

CmcdCustomKey: `${string}-${string}`

A custom key for CMCD. Custom keys MUST carry a hyphenated prefix +CmcdCustomKey | @svta/common-media-library

Type Alias CmcdCustomKeyBeta

CmcdCustomKey: `${string}-${string}`

A custom key for CMCD. Custom keys MUST carry a hyphenated prefix to ensure that there will not be a namespace collision with future revisions to this specification. Clients SHOULD use a reverse-DNS syntax when defining their own prefix.

-
\ No newline at end of file +
diff --git a/types/CmcdEncodeOptions.html b/types/CmcdEncodeOptions.html new file mode 100644 index 00000000..9e472644 --- /dev/null +++ b/types/CmcdEncodeOptions.html @@ -0,0 +1,8 @@ +CmcdEncodeOptions | @svta/common-media-library

Type Alias CmcdEncodeOptionsBeta

CmcdEncodeOptions: {
    baseUrl?: string;
    customHeaderMap?: CmcdHeadersMap;
    filter?: ((key: CmcdKey) => boolean);
    formatters?: Record<CmcdKey, CmcdFormatter>;
}

Options for encoding CMCD values.

+

Type declaration

  • Optional BetabaseUrl?: string

    The base URL to use for relative URLs.

    +
  • Optional BetacustomHeaderMap?: CmcdHeadersMap

    A map of CMCD header fields to custom CMCD keys.

    +
  • Optionalfilter?: ((key: CmcdKey) => boolean)

    A filter function for CMCD keys.

    +
      • (key): boolean
      • Parameters

        • key: CmcdKey

          The CMCD key to filter.

          +

        Returns boolean

        true if the key should be included, false otherwise.

        +
  • Optional Betaformatters?: Record<CmcdKey, CmcdFormatter>

    A map of CMCD keys to custom formatters.

    +
diff --git a/types/CmcdFormatter.html b/types/CmcdFormatter.html index 9a425d6a..277bc2fd 100644 --- a/types/CmcdFormatter.html +++ b/types/CmcdFormatter.html @@ -1,4 +1,4 @@ -CmcdFormatter | @svta/common-media-library

Type alias CmcdFormatterBeta

CmcdFormatter: ((value, options?) => string | number)

A formatter for CMCD values.

-

Type declaration

    • (value, options?): string | number
    • Parameters

      Returns string | number

Returns

The formatted value.

-
\ No newline at end of file +CmcdFormatter | @svta/common-media-library
CmcdFormatter: ((value: CmcdValue, options?: CmcdEncodeOptions) => string | number)

A formatter for CMCD values.

+

Type declaration

    • (value, options?): string | number
    • Parameters

      Returns string | number

      The formatted value.

      +
diff --git a/types/CmcdHeadersMap.html b/types/CmcdHeadersMap.html index 808ac890..6a155269 100644 --- a/types/CmcdHeadersMap.html +++ b/types/CmcdHeadersMap.html @@ -1,2 +1,2 @@ -CmcdHeadersMap | @svta/common-media-library
\ No newline at end of file +CmcdHeadersMap | @svta/common-media-library

Type Alias CmcdHeadersMapBeta

CmcdHeadersMap: Record<CmcdHeaderField, CmcdKey[]>

A map of CMCD header fields to CMCD keys.

+
diff --git a/types/CmcdKey.html b/types/CmcdKey.html index bbf33d6e..f90d6d02 100644 --- a/types/CmcdKey.html +++ b/types/CmcdKey.html @@ -1,2 +1,2 @@ -CmcdKey | @svta/common-media-library
\ No newline at end of file +CmcdKey | @svta/common-media-library

Type Alias CmcdKeyBeta

CmcdKey: keyof Cmcd

A CMCD key.

+
diff --git a/types/CmcdValue.html b/types/CmcdValue.html index 5595496f..0590ac02 100644 --- a/types/CmcdValue.html +++ b/types/CmcdValue.html @@ -1,2 +1,2 @@ -CmcdValue | @svta/common-media-library
\ No newline at end of file +CmcdValue | @svta/common-media-library

Type Alias CmcdValueBeta

CmcdValue:
    | CmcdObjectType
    | CmcdStreamingFormat
    | CmcdStreamType
    | string
    | number
    | boolean
    | symbol
    | SfToken

CMCD Value

+
diff --git a/types/CmsdCustomKey.html b/types/CmsdCustomKey.html index f1fda5f5..3bd32e73 100644 --- a/types/CmsdCustomKey.html +++ b/types/CmsdCustomKey.html @@ -1,5 +1,5 @@ -CmsdCustomKey | @svta/common-media-library

Type alias CmsdCustomKeyBeta

CmsdCustomKey: `${string}-${string}`

A custom key for CMSD. Custom keys MUST carry a hyphenated prefix +CmsdCustomKey | @svta/common-media-library

Type Alias CmsdCustomKeyBeta

CmsdCustomKey: `${string}-${string}`

A custom key for CMSD. Custom keys MUST carry a hyphenated prefix to ensure that there will not be a namespace collision with future revisions to this specification. Clients SHOULD use a reverse-DNS syntax when defining their own prefix.

-
\ No newline at end of file +
diff --git a/types/CmsdDynamic.html b/types/CmsdDynamic.html new file mode 100644 index 00000000..cf0b4998 --- /dev/null +++ b/types/CmsdDynamic.html @@ -0,0 +1,5 @@ +CmsdDynamic | @svta/common-media-library

Type Alias CmsdDynamicBeta

CmsdDynamic: {
    params: CmsdDynamicParams;
    value: string;
}

Common Media Server Data (CMSD) dynamic response header fields.

+

Type declaration

  • Betaparams: CmsdDynamicParams

    The CMSD dynamic parameters.

    +
  • Betavalue: string

    The server name.

    +

Spec

+
diff --git a/types/CmsdDynamicParams.html b/types/CmsdDynamicParams.html new file mode 100644 index 00000000..b3556e0b --- /dev/null +++ b/types/CmsdDynamicParams.html @@ -0,0 +1,35 @@ +CmsdDynamicParams | @svta/common-media-library

Type Alias CmsdDynamicParamsBeta

CmsdDynamicParams: {
    du?: boolean;
    etp?: number;
    mb?: number;
    rd?: number;
    rtt?: number;
    [index: CmsdCustomKey]: CmsdValue;
}

Common Media Server Data (CMSD) dynamic response header field parameters.

+

Type declaration

  • [index: CmsdCustomKey]: CmsdValue

    Custom key names may be used, but they MUST carry a hyphenated prefix to ensure that there will not be a namespace collision +with future revisions to this specification. Clients SHOULD use a reverse-DNS syntax when defining their own prefix.

    +
  • Optional Betadu?: boolean

    Duress

    +

    Key is included without a value if the server is under duress, due to cpu, memory, disk IO, network IO or other reasons. The +thresholds for signaling duress are left to the discretion of the server operator. The intent is that the client will use this +signal to move away to an alternate server if possible. This key MUST NOT be sent if it is false.

    +

    Boolean

    +
  • Optional Betaetp?: number

    Estimated Throughput

    +

    The throughput between the server and the client over the currently negotiated transport as estimated by the server at the start +of the response. The value is expressed in units of kilobits per second and rounded to the nearest integer. The time window for +this estimate is expected to be the duration of the current response at most. The throughput may vary during the response and the +client SHOULD use this data as an adjunct to its own throughput estimates. As an informative example, this estimate could be +derived in this way:

    +

    etp = 8 * send_window / (rtt)

    +

    where send_window = min (cwnd * mss, rwnd) with Congestion Window (cwnd) measured in packets, Maximum Segment Size (mss) in bytes, +Receiver Window (rwnd) in bytes and rtt in milliseconds. Note that multiple client processes adjacent to the media player may pool +their requests into the same connection to the server. In this case the server estimate of throughput will be against the entirety +of the connection, not all of which will be accessible to the media player.

    +

    Integer Kbps

    +
  • Optional Betamb?: number

    Max suggested bitrate

    +

    The maximum bitrate value that the player SHOULD play in its Adaptive Bit Rate (ABR) ladder. If the player is playing a bitrate higher +than this value, it SHOULD immediately switch to a bitrate lower than or equal to this value.

    +

    Integer Kbps

    +
  • Optional Betard?: number

    Response delay

    +

    The time elapsed between the receipt of the request and when the first byte of the body becomes available to send to the client. The +intention is for receivers to use this value to more accurately calculate the throughput of the connection [MHV22].

    +

    Integer milliseconds

    +
  • Optional Betartt?: number

    Round Trip Time

    +

    Estimated round trip time between client and server. This estimate may be derived from the transport handshake. For subsequent requests +over the same connection, the value can be refined to be an exponentially weighted moving average of prior instantaneous values. An +informative example algorithm for this averaging is provided by [18].

    +

    Integer Kbps

    +

Spec

+
diff --git a/types/CmsdEncodeOptions.html b/types/CmsdEncodeOptions.html new file mode 100644 index 00000000..0d6f99bf --- /dev/null +++ b/types/CmsdEncodeOptions.html @@ -0,0 +1,4 @@ +CmsdEncodeOptions | @svta/common-media-library

Type Alias CmsdEncodeOptionsBeta

CmsdEncodeOptions: {
    useSymbol?: boolean;
}

Options for encoding CMCD values.

+

Type declaration

  • Optional BetauseSymbol?: boolean

    Use Symbol to represent token values

    +

    true

    +
diff --git a/types/CmsdStatic.html b/types/CmsdStatic.html new file mode 100644 index 00000000..5464d793 --- /dev/null +++ b/types/CmsdStatic.html @@ -0,0 +1,83 @@ +CmsdStatic | @svta/common-media-library

Type Alias CmsdStaticBeta

CmsdStatic: {
    at?: number;
    br?: number;
    d?: number;
    ht?: number;
    n?: string;
    nor?: string;
    nrr?: string;
    ot?: CmsdObjectType;
    sf?: CmsdStreamingFormat;
    st?: CmsdStreamType;
    su?: boolean;
    v?: number;
    [index: CmsdCustomKey]: CmsdValue;
}

Common Media Server Data (CMSD) static response header fields.

+

Type declaration

  • [index: CmsdCustomKey]: CmsdValue

    Custom key names may be used, but they MUST carry a hyphenated prefix to ensure that there will not be a namespace collision +with future revisions to this specification. Clients SHOULD use a reverse-DNS syntax when defining their own prefix.

    +
  • Optional Betaat?: number

    Availability time

    +

    The wallclock time at which the first byte of this object became available at the origin for successful request. The time is +expressed as integer milliseconds since the Unix Epoch, i.e., the number of milliseconds that have elapsed since January 1, +1970 (midnight UTC/GMT), not counting leap seconds (in ISO 8601: 1970- 01-01T00:00:000Z).

    +

    Integer Milliseconds

    +
  • Optional Betabr?: number

    Encoded bitrate

    +

    The encoded bitrate of the audio or video object being requested. If the instantaneous bitrate varies over the duration of the +object, the average value over the duration of the object SHOULD be communicated. This key should only accompany objects that +have an implicit bitrate.

    +

    Integer kbps

    +
  • Optional Betad?: number

    Object duration

    +

    The playback duration in milliseconds of the object being requested. If a partial segment is being requested, then this value +MUST indicate the playback duration of that part and not that of its parent segment. This value can be an approximation of the +estimated duration if the explicit value is not known.

    +

    Integer milliseconds

    +
  • Optional Betaht?: number

    Held time

    +

    The number of milliseconds that this response was held back by an origin before returning. This is applicable to blocking responses +under LL-HLS [HLSbis].

    +

    Integer Milliseconds

    +
  • Optional Betan?: string

    Intermediary identifier

    +

    An identifier for the processing server. The value SHOULD identify both the organization and the intermediary that is writing the key. +Identifiers SHOULD be as concise as possible to reduce log file and transferred size, while still remaining unique.

    +

    String

    +
  • Optional Betanor?: string

    Next object request

    +

    Relative path of the next object to be requested. This can be used to trigger pre-fetching by the CDN. This MUST be a path relative to the current +request. This string MUST be URLEncoded. The client SHOULD NOT depend upon any pre-fetch action being taken - it is merely a request for such a +pre-fetch to take place.

    +

    String

    +
  • Optional Betanrr?: string

    Next range request

    +

    If the next request will be a partial object request, then this string denotes the byte range to be requested. If the ‘nor’ field is not set, then the +object is assumed to match the object currently being requested. The client SHOULD NOT depend upon any pre-fetch action being taken – it is merely a +request for such a pre-fetch to take place. Formatting is similar to the HTTP Range header, except that the unit MUST be ‘byte’, the ‘Range:’ prefix is +NOT required and specifying multiple ranges is NOT allowed. Valid combinations are:

    +
      +
    • "\<range-start\>-"
    • +
    • "\<range-start\>-\<range-end\>"
    • +
    • "-\<suffix-length\>"
    • +
    +

    String

    +
  • Optional Betaot?: CmsdObjectType

    Object type

    +

    The media type of the current object being requested:

    +
      +
    • m = text file, such as a manifest or playlist
    • +
    • a = audio only
    • +
    • v = video only
    • +
    • av = muxed audio and video
    • +
    • i = init segment
    • +
    • c = caption or subtitle
    • +
    • tt = ISOBMFF timed text track
    • +
    • k = cryptographic key, license or certificate.
    • +
    • o = other
    • +
    +

    If the object type being requested is unknown, then this key MUST NOT be used.

    +

    Token

    +
  • Optional Betasf?: CmsdStreamingFormat

    Streaming format

    +

    The streaming format that defines the current request.

    +
      +
    • d = MPEG DASH
    • +
    • h = HTTP Live Streaming (HLS)
    • +
    • s = Smooth Streaming
    • +
    • o = other
    • +
    +

    If the streaming format being requested is unknown, then this key MUST NOT be used.

    +

    Token

    +
  • Optional Betast?: CmsdStreamType

    Stream type

    +
      +
    • v = all segments are available – e.g., VOD
    • +
    • l = segments become available over time – e.g., LIVE
    • +
    +

    Token

    +
  • Optional Betasu?: boolean

    Startup

    +

    Key is included without a value if the object is needed urgently due to startup, seeking or recovery after a buffer-empty event. The media SHOULD not be +rendering when this request is made. This key MUST not be sent if it is FALSE.

    +

    Boolean

    +
  • Optional Betav?: number

    CMSD version

    +

    The version of this specification used for interpreting the defined key names and values. If this key is omitted, the client and server MUST +interpret the values as being defined by version 1. Client SHOULD omit this field if the version is 1.

    +

    Integer

    +

Spec

+
diff --git a/types/CmsdValue.html b/types/CmsdValue.html index 03a9d15c..86fe35ae 100644 --- a/types/CmsdValue.html +++ b/types/CmsdValue.html @@ -1,2 +1,2 @@ -CmsdValue | @svta/common-media-library
\ No newline at end of file +CmsdValue | @svta/common-media-library

Type Alias CmsdValueBeta

CmsdValue:
    | CmsdObjectType
    | CmsdStreamingFormat
    | CmsdStreamType
    | string
    | number
    | boolean
    | symbol
    | SfToken

CMSD Value

+
diff --git a/types/CommonMediaRequest.html b/types/CommonMediaRequest.html new file mode 100644 index 00000000..404b9f4b --- /dev/null +++ b/types/CommonMediaRequest.html @@ -0,0 +1,12 @@ +CommonMediaRequest | @svta/common-media-library

Type Alias CommonMediaRequestBeta

CommonMediaRequest: {
    cmcd?: Cmcd;
    credentials?: RequestCredentials;
    customData?: any;
    headers?: Record<string, string>;
    method: string;
    mode?: RequestMode;
    responseType?: string;
    timeout?: number;
    url: string;
}

Common request API.

+

Type declaration

  • Optional Betacmcd?: Cmcd

    The Common Media Client Data (CMCD) that comprises media and request related information.

    +
  • Optional Betacredentials?: RequestCredentials

    Indicates whether the user agent should send or receive cookies from the other domain in the case of cross-origin requests.

    +
  • Optional BetacustomData?: any

    Any custom data.

    +
  • Optional Betaheaders?: Record<string, string>

    The headers object associated with the request.

    +
  • Betamethod: string

    The request's method (GET, POST, etc).

    +
  • Optional Betamode?: RequestMode

    The mode of the request (e.g., cors, no-cors, same-origin, etc).

    +
  • Optional BetaresponseType?: string

    The response type with which the response from the server shall be compatible.

    +
  • Optional Betatimeout?: number

    The number of milliseconds the request can take before automatically being terminated. +If undefined or value is 0 then there is no timeout.

    +
  • Betaurl: string

    The URL of the request.

    +
diff --git a/types/CommonMediaResponse.html b/types/CommonMediaResponse.html new file mode 100644 index 00000000..14e42048 --- /dev/null +++ b/types/CommonMediaResponse.html @@ -0,0 +1,11 @@ +CommonMediaResponse | @svta/common-media-library

Type Alias CommonMediaResponseBeta

CommonMediaResponse: {
    data?: any;
    headers?: Record<string, string>;
    redirected?: boolean;
    request: CommonMediaRequest;
    resourceTiming: ResourceTiming;
    status?: number;
    statusText?: string;
    type?: string;
    url?: string;
}

Common response API.

+

Type declaration

  • Optional Betadata?: any

    The response data.

    +
  • Optional Betaheaders?: Record<string, string>

    The response headers.

    +
  • Optional Betaredirected?: boolean

    Indicates whether or not the request was redirected.

    +
  • Betarequest: CommonMediaRequest

    The origin request.

    +
  • BetaresourceTiming: ResourceTiming

    The network timing of the request/response.

    +
  • Optional Betastatus?: number

    The HTTP status code of the response.

    +
  • Optional BetastatusText?: string

    The status message corresponding to the HTTP status code.

    +
  • Optional Betatype?: string

    The type of the response.

    +
  • Optional Betaurl?: string

    The final URL obtained after any redirects.

    +
diff --git a/types/CueHandler.html b/types/CueHandler.html new file mode 100644 index 00000000..65cdf5a0 --- /dev/null +++ b/types/CueHandler.html @@ -0,0 +1,2 @@ +CueHandler | @svta/common-media-library

Type Alias CueHandlerBeta

CueHandler: {
    dispatchCue?(): void;
    newCue(startTime: number, endTime: number, screen: CaptionScreen): void;
    reset?(): void;
}

A handler for CTA-608 cues.

+
diff --git a/types/DashManifest.html b/types/DashManifest.html new file mode 100644 index 00000000..0e9bf79a --- /dev/null +++ b/types/DashManifest.html @@ -0,0 +1,2 @@ +DashManifest | @svta/common-media-library

Type Alias DashManifestAlpha

DashManifest: {
    MPD: {
        $?: {
            maxSegmentDuration?: string;
            mediaPresentationDuration?: string;
            minBufferTime?: string;
            profiles?: string;
            type?: string;
            xmlns?: string;
        };
        Period: Period[];
    };
}

Json representation of the DASH Manifest

+
diff --git a/types/DecodedId3Frame.html b/types/DecodedId3Frame.html index 2552bcf4..eaa9763b 100644 --- a/types/DecodedId3Frame.html +++ b/types/DecodedId3Frame.html @@ -1,5 +1,5 @@ -DecodedId3Frame | @svta/common-media-library

Type alias DecodedId3Frame<T>Beta

DecodedId3Frame<T>: {
    data: T;
    info?: any;
    key: string;
}

Decoded ID3 frame.

-

Type Parameters

  • T

Type declaration

  • data: T

    The data payload.

    -
  • Optional info?: any

    A text description of the frame if provided.

    -
  • key: string

    The four letter frame ID.

    -
\ No newline at end of file +DecodedId3Frame | @svta/common-media-library

Type Alias DecodedId3Frame<T>Beta

DecodedId3Frame<T>: {
    data: T;
    info?: any;
    key: string;
}

Decoded ID3 frame.

+

Type Parameters

  • T

Type declaration

  • Betadata: T

    The data payload.

    +
  • Optional Betainfo?: any

    A text description of the frame if provided.

    +
  • Betakey: string

    The four letter frame ID.

    +
diff --git a/types/FrameRate.html b/types/FrameRate.html index a0c4c339..e0c812ad 100644 --- a/types/FrameRate.html +++ b/types/FrameRate.html @@ -1,5 +1,5 @@ -FrameRate | @svta/common-media-library

Type alias FrameRateAlpha

FrameRate: {
    frameRateDenominator?: number;
    frameRateNumerator: number;
}

Video Frame Rate +FrameRate | @svta/common-media-library

Type Alias FrameRateAlpha

FrameRate: {
    frameRateDenominator?: number;
    frameRateNumerator: number;
}

Video Frame Rate Used to express the framerate as numerator and denominator.

frameRateNumerator - Numerator. frameRateDenominator - Denominator.

-

Type declaration

  • Optional frameRateDenominator?: number
  • frameRateNumerator: number
\ No newline at end of file +
diff --git a/types/Ham.html b/types/Ham.html index 9d5677c8..47dbc3bd 100644 --- a/types/Ham.html +++ b/types/Ham.html @@ -1,3 +1,3 @@ -Ham | @svta/common-media-library

Type alias HamAlpha

Ham: {
    id: string;
}

CMAF-HAM base HAM type

+Ham | @svta/common-media-library
Ham: {
    id: string;
}

CMAF-HAM base HAM type

id - Identifier of the object

-

Type declaration

  • id: string
\ No newline at end of file +
diff --git a/types/HlsManifest.html b/types/HlsManifest.html new file mode 100644 index 00000000..6371e00b --- /dev/null +++ b/types/HlsManifest.html @@ -0,0 +1,2 @@ +HlsManifest | @svta/common-media-library

Type Alias HlsManifestAlpha

HlsManifest: {
    mediaGroups: MediaGroups;
    playlists: PlayList[];
    segments: SegmentHls[];
    targetDuration?: number;
}

HLS manifest

+
diff --git a/types/Id3Frame.html b/types/Id3Frame.html index 5f0ecf15..db82c2e2 100644 --- a/types/Id3Frame.html +++ b/types/Id3Frame.html @@ -1,2 +1,2 @@ -Id3Frame | @svta/common-media-library
\ No newline at end of file +Id3Frame | @svta/common-media-library

Type Alias Id3FrameBeta

Id3Frame: DecodedId3Frame<ArrayBuffer | string | number>

ID3 frame.

+
diff --git a/types/Manifest.html b/types/Manifest.html index 99b08f27..d6ef8d19 100644 --- a/types/Manifest.html +++ b/types/Manifest.html @@ -1,2 +1,2 @@ -Manifest | @svta/common-media-library

Type alias ManifestAlpha

Manifest: {
    ancillaryManifests?: Manifest[];
    fileName?: string;
    manifest: string;
    metadata?: Map<string, string>;
    type: ManifestFormat;
}

Manifest object received as an input by the conversion to HAM object

-

Type declaration

  • Optional ancillaryManifests?: Manifest[]
  • Optional fileName?: string
  • manifest: string
  • Optional metadata?: Map<string, string>
  • type: ManifestFormat
\ No newline at end of file +Manifest | @svta/common-media-library

Type Alias ManifestAlpha

Manifest: {
    ancillaryManifests?: Manifest[];
    fileName?: string;
    manifest: string;
    metadata?: Map<string, string>;
    type: ManifestFormat;
}

Manifest object received as an input by the conversion to HAM object

+
diff --git a/types/ManifestFormat.html b/types/ManifestFormat.html index 4718dc3d..b7939917 100644 --- a/types/ManifestFormat.html +++ b/types/ManifestFormat.html @@ -1,2 +1,2 @@ -ManifestFormat | @svta/common-media-library
\ No newline at end of file +ManifestFormat | @svta/common-media-library

Type Alias ManifestFormatAlpha

ManifestFormat: "hls" | "dash"

The format of the manifest.

+
diff --git a/types/PACData.html b/types/PACData.html new file mode 100644 index 00000000..6dd22ab5 --- /dev/null +++ b/types/PACData.html @@ -0,0 +1,2 @@ +PACData | @svta/common-media-library

Type Alias PACDataBeta

PACData: {
    color: string | null;
    indent: number | null;
    italics: boolean;
    row: number;
    underline: boolean;
}

Represents a single PAC (Preamble Address Code) data.

+
diff --git a/types/PenStyles.html b/types/PenStyles.html index d765c478..8087db54 100644 --- a/types/PenStyles.html +++ b/types/PenStyles.html @@ -1,2 +1,2 @@ -PenStyles | @svta/common-media-library

Type alias PenStylesBeta

PenStyles: {
    background: string;
    flash: boolean;
    foreground: string | null;
    italics: boolean;
    underline: boolean;
}

PenStyles

-

Type declaration

  • background: string
  • flash: boolean
  • foreground: string | null
  • italics: boolean
  • underline: boolean
\ No newline at end of file +PenStyles | @svta/common-media-library

Type Alias PenStylesBeta

PenStyles: {
    background: string;
    flash: boolean;
    foreground: string | null;
    italics: boolean;
    underline: boolean;
}

PenStyles

+
diff --git a/types/Presentation.html b/types/Presentation.html index e862358b..53b60e13 100644 --- a/types/Presentation.html +++ b/types/Presentation.html @@ -1,3 +1,3 @@ -Presentation | @svta/common-media-library

Type alias PresentationAlpha

Presentation: Ham & {
    selectionSets: SelectionSet[];
}

CMAF-HAM Presentation type

+Presentation | @svta/common-media-library

Type Alias PresentationAlpha

Presentation: Ham & {
    selectionSets: SelectionSet[];
}

CMAF-HAM Presentation type

selectionSets - List of SelectionSets

-

Type declaration

\ No newline at end of file +
diff --git a/types/RequestInterceptor.html b/types/RequestInterceptor.html index 7a107f0f..cfd393a9 100644 --- a/types/RequestInterceptor.html +++ b/types/RequestInterceptor.html @@ -1,4 +1,4 @@ -RequestInterceptor | @svta/common-media-library

Type alias RequestInterceptorBeta

RequestInterceptor: ((request) => Promise<CommonMediaRequest>)

Request interceptor API.

-

Type declaration

Returns

A promise with updated request that is resolved when the interceptor has completed the process of the request.

-
\ No newline at end of file +RequestInterceptor | @svta/common-media-library
RequestInterceptor: ((request: CommonMediaRequest) => Promise<CommonMediaRequest>)

Request interceptor API.

+

Type declaration

diff --git a/types/ResourceTiming.html b/types/ResourceTiming.html new file mode 100644 index 00000000..b99801ba --- /dev/null +++ b/types/ResourceTiming.html @@ -0,0 +1,2 @@ +ResourceTiming | @svta/common-media-library

Type Alias ResourceTimingBeta

ResourceTiming: {
    duration?: number;
    encodedBodySize: number;
    responseEnd?: number;
    responseStart?: number;
    startTime: number;
}

Resource Timing.

+
diff --git a/types/ResponseInterceptor.html b/types/ResponseInterceptor.html index a320f83e..81b7f55b 100644 --- a/types/ResponseInterceptor.html +++ b/types/ResponseInterceptor.html @@ -1,4 +1,4 @@ -ResponseInterceptor | @svta/common-media-library

Type alias ResponseInterceptorBeta

ResponseInterceptor: ((response) => Promise<CommonMediaResponse>)

Response interceptor API.

-

Type declaration

Returns

A promise with updated response that is resolved when the interceptor has completed the process of the response.

-
\ No newline at end of file +ResponseInterceptor | @svta/common-media-library

Type Alias ResponseInterceptor

ResponseInterceptor: ((response: CommonMediaResponse) => Promise<CommonMediaResponse>)

Response interceptor API.

+

Type declaration

diff --git a/types/Segment.html b/types/Segment.html index 3bebe455..4fc82baf 100644 --- a/types/Segment.html +++ b/types/Segment.html @@ -1,2 +1,2 @@ -Segment | @svta/common-media-library

Type alias SegmentAlpha

Segment: {
    byteRange?: string;
    duration: number;
    url: string;
}

CMAF-HAM Segment type

-

Type declaration

  • Optional byteRange?: string
  • duration: number
  • url: string
\ No newline at end of file +Segment | @svta/common-media-library

Type Alias SegmentAlpha

Segment: {
    byteRange?: string;
    duration: number;
    url: string;
}

CMAF-HAM Segment type

+
diff --git a/types/SelectionSet.html b/types/SelectionSet.html index b498c7b1..ee2c3560 100644 --- a/types/SelectionSet.html +++ b/types/SelectionSet.html @@ -1,2 +1,2 @@ -SelectionSet | @svta/common-media-library

Type alias SelectionSetAlpha

SelectionSet: Ham & {
    alignedSwitchingSets?: AlignedSwitchingSet[];
    switchingSets: SwitchingSet[];
}

CMAF-HAM SelectionSet type

-

Type declaration

\ No newline at end of file +SelectionSet | @svta/common-media-library

Type Alias SelectionSetAlpha

SelectionSet: Ham & {
    alignedSwitchingSets?: AlignedSwitchingSet[];
    switchingSets: SwitchingSet[];
}

CMAF-HAM SelectionSet type

+
diff --git a/types/SfBareItem.html b/types/SfBareItem.html index a7f31f5f..a1ca10db 100644 --- a/types/SfBareItem.html +++ b/types/SfBareItem.html @@ -1,2 +1,2 @@ -SfBareItem | @svta/common-media-library

Type alias SfBareItemBeta

SfBareItem: string | Uint8Array | boolean | number | symbol | Date | SfToken

A type to represent structured field bare items.

-
\ No newline at end of file +SfBareItem | @svta/common-media-library

Type Alias SfBareItemBeta

SfBareItem:
    | string
    | Uint8Array
    | boolean
    | number
    | symbol
    | Date
    | SfToken

A type to represent structured field bare items.

+
diff --git a/types/SfDecodeOptions.html b/types/SfDecodeOptions.html index ef8d3fe0..f9d9df1e 100644 --- a/types/SfDecodeOptions.html +++ b/types/SfDecodeOptions.html @@ -1,3 +1,3 @@ -SfDecodeOptions | @svta/common-media-library

Type alias SfDecodeOptionsBeta

SfDecodeOptions: {
    useSymbol?: boolean;
}

Options for decoding Structured Field values

-

Type declaration

  • Optional useSymbol?: boolean

    Use JS Symbol to represent token values

    -
\ No newline at end of file +SfDecodeOptions | @svta/common-media-library

Type Alias SfDecodeOptionsBeta

SfDecodeOptions: {
    useSymbol?: boolean;
}

Options for decoding Structured Field values

+

Type declaration

  • Optional BetauseSymbol?: boolean

    Use JS Symbol to represent token values

    +
diff --git a/types/SfDictionary.html b/types/SfDictionary.html index e9522e8c..a8725576 100644 --- a/types/SfDictionary.html +++ b/types/SfDictionary.html @@ -1,2 +1,2 @@ -SfDictionary | @svta/common-media-library
\ No newline at end of file +SfDictionary | @svta/common-media-library

Type Alias SfDictionaryBeta

SfDictionary: Record<string, SfMember> | Map<string, SfMember>

A dictionary of structured field members.

+
diff --git a/types/SfEncodeOptions.html b/types/SfEncodeOptions.html index 1320d0d9..d68f0739 100644 --- a/types/SfEncodeOptions.html +++ b/types/SfEncodeOptions.html @@ -1,3 +1,3 @@ -SfEncodeOptions | @svta/common-media-library

Type alias SfEncodeOptionsBeta

SfEncodeOptions: {
    whitespace?: boolean;
}

Options for encoding a structured field.

-

Type declaration

  • Optional whitespace?: boolean

    Include whitespace in the output.

    -
\ No newline at end of file +SfEncodeOptions | @svta/common-media-library

Type Alias SfEncodeOptionsBeta

SfEncodeOptions: {
    whitespace?: boolean;
}

Options for encoding a structured field.

+

Type declaration

  • Optional Betawhitespace?: boolean

    Include whitespace in the output.

    +
diff --git a/types/SfInnerList.html b/types/SfInnerList.html index 0e5309e8..8cd27446 100644 --- a/types/SfInnerList.html +++ b/types/SfInnerList.html @@ -1,2 +1,2 @@ -SfInnerList | @svta/common-media-library
\ No newline at end of file +SfInnerList | @svta/common-media-library

Type Alias SfInnerListBeta

SfInnerList: {
    params: SfParameters;
    value: SfItem[] | SfBareItem[];
}

Structured Field Inner List

+
diff --git a/types/SfMember.html b/types/SfMember.html index 2f557049..c5d6adb1 100644 --- a/types/SfMember.html +++ b/types/SfMember.html @@ -1,2 +1,2 @@ -SfMember | @svta/common-media-library
\ No newline at end of file +SfMember | @svta/common-media-library

Type Alias SfMemberBeta

A member of a structured field.

+
diff --git a/types/SfParameters.html b/types/SfParameters.html index 2bfbb5ad..321c804a 100644 --- a/types/SfParameters.html +++ b/types/SfParameters.html @@ -1,2 +1,2 @@ -SfParameters | @svta/common-media-library
\ No newline at end of file +SfParameters | @svta/common-media-library

Type Alias SfParametersBeta

SfParameters: Record<string, any>

Structured Field Parameters

+
diff --git a/types/SupportedField.html b/types/SupportedField.html index 7d5b1296..5c6e60a9 100644 --- a/types/SupportedField.html +++ b/types/SupportedField.html @@ -1,2 +1,2 @@ -SupportedField | @svta/common-media-library
\ No newline at end of file +SupportedField | @svta/common-media-library

Type Alias SupportedFieldBeta

SupportedField: 1 | 3

SupportedField

+
diff --git a/types/SwitchingSet.html b/types/SwitchingSet.html index bac37c58..e356172c 100644 --- a/types/SwitchingSet.html +++ b/types/SwitchingSet.html @@ -1,2 +1,2 @@ -SwitchingSet | @svta/common-media-library
\ No newline at end of file +SwitchingSet | @svta/common-media-library

Type Alias SwitchingSetAlpha

SwitchingSet: Ham & {
    tracks: Track[];
}

CMAF-HAM SwitchingSet type

+
diff --git a/types/TextTrack.html b/types/TextTrack.html index 976636b5..4b2e59e5 100644 --- a/types/TextTrack.html +++ b/types/TextTrack.html @@ -1,2 +1,2 @@ -TextTrack | @svta/common-media-library
\ No newline at end of file +TextTrack | @svta/common-media-library

Type Alias TextTrackAlpha

TextTrack: Track

CMAF-HAM Text Track type

+
diff --git a/types/Track.html b/types/Track.html index e2119382..88e6164b 100644 --- a/types/Track.html +++ b/types/Track.html @@ -1,4 +1,4 @@ -Track | @svta/common-media-library

Type alias TrackAlpha

Track: Ham & {
    bandwidth: number;
    byteRange?: string;
    codec: string;
    duration: number;
    fileName?: string;
    language: string;
    segments: Segment[];
    type: TrackType;
    urlInitialization?: string;
}

CMAF-HAM Track type +Track | @svta/common-media-library

Type Alias TrackAlpha

Track: Ham & {
    bandwidth: number;
    byteRange?: string;
    codec: string;
    duration: number;
    fileName?: string;
    language: string;
    segments: Segment[];
    type: TrackType;
    urlInitialization?: string;
}

CMAF-HAM Track type Used as a base for the audio, video and text tracks

type - The TrackType fileName - File name of the track. @@ -8,6 +8,6 @@ bandwidth - Bandwidth of the track. byteRange - Byte range of the track. segments - List of segments of the track.

-

Type declaration

  • bandwidth: number
  • Optional byteRange?: string
  • codec: string
  • duration: number
  • Optional fileName?: string
  • language: string
  • segments: Segment[]
  • type: TrackType

    Track type

    -
  • Optional urlInitialization?: string

    URL of the initialization segment

    -
\ No newline at end of file +

Type declaration

  • Alphabandwidth: number
  • Optional AlphabyteRange?: string
  • Alphacodec: string
  • Alphaduration: number
  • Optional AlphafileName?: string
  • Alphalanguage: string
  • Alphasegments: Segment[]
  • Alphatype: TrackType

    Track type

    +
  • Optional AlphaurlInitialization?: string

    URL of the initialization segment

    +
diff --git a/types/TrackType.html b/types/TrackType.html index 52086a20..b2778812 100644 --- a/types/TrackType.html +++ b/types/TrackType.html @@ -1,3 +1,3 @@ -TrackType | @svta/common-media-library
\ No newline at end of file +TrackType | @svta/common-media-library

Type Alias TrackTypeAlpha

TrackType: "audio" | "video" | "text"

CMAF-HAM TrackType type +This can be 'audio' or 'video' or 'text'

+
diff --git a/types/Validation.html b/types/Validation.html index 4c47c502..a7f2a3e4 100644 --- a/types/Validation.html +++ b/types/Validation.html @@ -1,2 +1,2 @@ -Validation | @svta/common-media-library

Type alias ValidationAlpha

Validation: {
    errorMessages: string[];
    status: boolean;
}

CMAF-HAM Validation type

-

Type declaration

  • errorMessages: string[]
  • status: boolean
\ No newline at end of file +Validation | @svta/common-media-library

Type Alias ValidationAlpha

Validation: {
    errorMessages: string[];
    status: boolean;
}

CMAF-HAM Validation type

+
diff --git a/types/VideoTrack.html b/types/VideoTrack.html index 8ba15e1d..a049b907 100644 --- a/types/VideoTrack.html +++ b/types/VideoTrack.html @@ -1,8 +1,8 @@ -VideoTrack | @svta/common-media-library

Type alias VideoTrackAlpha

VideoTrack: Track & {
    frameRate: FrameRate;
    height: number;
    par: string;
    sar: string;
    scanType: string;
    width: number;
}

CMAF-HAM Track type

+VideoTrack | @svta/common-media-library

Type Alias VideoTrackAlpha

VideoTrack: Track & {
    frameRate: FrameRate;
    height: number;
    par: string;
    sar: string;
    scanType: string;
    width: number;
}

CMAF-HAM Track type

width - Video width in pixels. height - Video height in pixels. frameRate - Video framerate in FrameRate type; par - Pixel Aspect Ratio of the video track as string. sar - Sample Aspect Ratio of the video track in string. scanType - The method used to display the video track.

-

Type declaration

  • frameRate: FrameRate
  • height: number
  • par: string
  • sar: string
  • scanType: string
  • width: number
\ No newline at end of file +
diff --git a/variables/CMCD_HEADERS.html b/variables/CMCD_HEADERS.html new file mode 100644 index 00000000..6ef72c08 --- /dev/null +++ b/variables/CMCD_HEADERS.html @@ -0,0 +1,2 @@ +CMCD_HEADERS | @svta/common-media-library

Variable CMCD_HEADERSConst Beta

CMCD_HEADERS: "headers" = 'headers'

CMCD headers transmission mode.

+
diff --git a/variables/CMCD_JSON.html b/variables/CMCD_JSON.html new file mode 100644 index 00000000..b8a8d132 --- /dev/null +++ b/variables/CMCD_JSON.html @@ -0,0 +1,2 @@ +CMCD_JSON | @svta/common-media-library

Variable CMCD_JSONConst Beta

CMCD_JSON: "json" = 'json'

CMCD json transmission mode.

+
diff --git a/variables/CMCD_OBJECT.html b/variables/CMCD_OBJECT.html new file mode 100644 index 00000000..259d351f --- /dev/null +++ b/variables/CMCD_OBJECT.html @@ -0,0 +1,2 @@ +CMCD_OBJECT | @svta/common-media-library

Variable CMCD_OBJECTConst Beta

CMCD_OBJECT: "CMCD-Object" = 'CMCD-Object'

CMCD object header name.

+
diff --git a/variables/CMCD_PARAM.html b/variables/CMCD_PARAM.html index da1c83db..96ee6b3b 100644 --- a/variables/CMCD_PARAM.html +++ b/variables/CMCD_PARAM.html @@ -1,2 +1,2 @@ -CMCD_PARAM | @svta/common-media-library
\ No newline at end of file +CMCD_PARAM | @svta/common-media-library

Variable CMCD_PARAMConst Beta

CMCD_PARAM: "CMCD" = 'CMCD'

CMCD parameter name.

+
diff --git a/variables/CMCD_QUERY.html b/variables/CMCD_QUERY.html new file mode 100644 index 00000000..53f105eb --- /dev/null +++ b/variables/CMCD_QUERY.html @@ -0,0 +1,2 @@ +CMCD_QUERY | @svta/common-media-library

Variable CMCD_QUERYConst Beta

CMCD_QUERY: "query" = 'query'

CMCD query transmission mode.

+
diff --git a/variables/CMCD_REQUEST.html b/variables/CMCD_REQUEST.html new file mode 100644 index 00000000..e1dd519f --- /dev/null +++ b/variables/CMCD_REQUEST.html @@ -0,0 +1,2 @@ +CMCD_REQUEST | @svta/common-media-library

Variable CMCD_REQUESTConst Beta

CMCD_REQUEST: "CMCD-Request" = 'CMCD-Request'

CMCD request header name.

+
diff --git a/variables/CMCD_SESSION.html b/variables/CMCD_SESSION.html new file mode 100644 index 00000000..43734ba9 --- /dev/null +++ b/variables/CMCD_SESSION.html @@ -0,0 +1,2 @@ +CMCD_SESSION | @svta/common-media-library

Variable CMCD_SESSIONConst Beta

CMCD_SESSION: "CMCD-Session" = 'CMCD-Session'

CMCD session header name.

+
diff --git a/variables/CMCD_STATUS.html b/variables/CMCD_STATUS.html new file mode 100644 index 00000000..451033a7 --- /dev/null +++ b/variables/CMCD_STATUS.html @@ -0,0 +1,2 @@ +CMCD_STATUS | @svta/common-media-library

Variable CMCD_STATUSConst Beta

CMCD_STATUS: "CMCD-Status" = 'CMCD-Status'

CMCD status header name.

+
diff --git a/variables/CMCD_V1.html b/variables/CMCD_V1.html index 5a1639c8..4aa0f786 100644 --- a/variables/CMCD_V1.html +++ b/variables/CMCD_V1.html @@ -1,2 +1,2 @@ -CMCD_V1 | @svta/common-media-library
\ No newline at end of file +CMCD_V1 | @svta/common-media-library

Variable CMCD_V1Const Beta

CMCD_V1 = 1

CMCD Version 1

+
diff --git a/variables/CMSD_DYNAMIC.html b/variables/CMSD_DYNAMIC.html index 5b18ba99..57dc1c01 100644 --- a/variables/CMSD_DYNAMIC.html +++ b/variables/CMSD_DYNAMIC.html @@ -1,2 +1,2 @@ -CMSD_DYNAMIC | @svta/common-media-library
\ No newline at end of file +CMSD_DYNAMIC | @svta/common-media-library

Variable CMSD_DYNAMICConst Beta

CMSD_DYNAMIC: "CMSD-Dynamic" = 'CMSD-Dynamic'

CMSD dynamic header name.

+
diff --git a/variables/CMSD_STATIC.html b/variables/CMSD_STATIC.html index 182d7a47..f343e58f 100644 --- a/variables/CMSD_STATIC.html +++ b/variables/CMSD_STATIC.html @@ -1,2 +1,2 @@ -CMSD_STATIC | @svta/common-media-library
\ No newline at end of file +CMSD_STATIC | @svta/common-media-library

Variable CMSD_STATICConst Beta

CMSD_STATIC: "CMSD-Static" = 'CMSD-Static'

CMSD static header name.

+
diff --git a/variables/CMSD_V1.html b/variables/CMSD_V1.html index 1d3d682f..f3abab9e 100644 --- a/variables/CMSD_V1.html +++ b/variables/CMSD_V1.html @@ -1,2 +1,2 @@ -CMSD_V1 | @svta/common-media-library
\ No newline at end of file +CMSD_V1 | @svta/common-media-library

Variable CMSD_V1Const Beta

CMSD_V1 = 1

CMSD Version 1

+
diff --git a/variables/CmcdFormatters.html b/variables/CmcdFormatters.html index c7353ce8..d2f3488d 100644 --- a/variables/CmcdFormatters.html +++ b/variables/CmcdFormatters.html @@ -1,2 +1,2 @@ -CmcdFormatters | @svta/common-media-library
\ No newline at end of file +CmcdFormatters | @svta/common-media-library

Variable CmcdFormattersConst Beta

CmcdFormatters: Record<string, CmcdFormatter> = ...

The default formatters for CMCD values.

+