diff --git a/docs/assets/index-KxHK2qzb.js b/docs/assets/index-QZ5B-L_n.js similarity index 74% rename from docs/assets/index-KxHK2qzb.js rename to docs/assets/index-QZ5B-L_n.js index 583a5bb..787ce60 100644 --- a/docs/assets/index-KxHK2qzb.js +++ b/docs/assets/index-QZ5B-L_n.js @@ -1,5 +1,5 @@ -var mt=Object.defineProperty;var bt=(s,t,e)=>t in s?mt(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e;var y=(s,t,e)=>(bt(s,typeof t!="symbol"?t+"":t,e),e);(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))e(i);new MutationObserver(i=>{for(const n of i)if(n.type==="childList")for(const r of n.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&e(r)}).observe(document,{childList:!0,subtree:!0});function t(i){const n={};return i.integrity&&(n.integrity=i.integrity),i.referrerPolicy&&(n.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?n.credentials="include":i.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function e(i){if(i.ep)return;i.ep=!0;const n=t(i);fetch(i.href,n)}})();function I(s){return Array.isArray?Array.isArray(s):at(s)==="[object Array]"}const Lt=1/0;function Et(s){if(typeof s=="string")return s;let t=s+"";return t=="0"&&1/s==-Lt?"-0":t}function yt(s){return s==null?"":Et(s)}function x(s){return typeof s=="string"}function ot(s){return typeof s=="number"}function xt(s){return s===!0||s===!1||Mt(s)&&at(s)=="[object Boolean]"}function ht(s){return typeof s=="object"}function Mt(s){return ht(s)&&s!==null}function _(s){return s!=null}function H(s){return!s.trim().length}function at(s){return s==null?s===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(s)}const It="Incorrect 'index' type",At=s=>`Invalid value for key ${s}`,vt=s=>`Pattern length exceeds max of ${s}.`,wt=s=>`Missing ${s} property in key`,kt=s=>`Property 'weight' in key '${s}' must be a positive integer`,Z=Object.prototype.hasOwnProperty;class St{constructor(t){this._keys=[],this._keyMap={};let e=0;t.forEach(i=>{let n=lt(i);this._keys.push(n),this._keyMap[n.id]=n,e+=n.weight}),this._keys.forEach(i=>{i.weight/=e})}get(t){return this._keyMap[t]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function lt(s){let t=null,e=null,i=null,n=1,r=null;if(x(s)||I(s))i=s,t=q(s),e=V(s);else{if(!Z.call(s,"name"))throw new Error(wt("name"));const o=s.name;if(i=o,Z.call(s,"weight")&&(n=s.weight,n<=0))throw new Error(kt(o));t=q(o),e=V(o),r=s.getFn}return{path:t,id:e,weight:n,src:i,getFn:r}}function q(s){return I(s)?s:s.split(".")}function V(s){return I(s)?s.join("."):s}function Nt(s,t){let e=[],i=!1;const n=(r,o,c)=>{if(_(r))if(!o[c])e.push(r);else{let h=o[c];const a=r[h];if(!_(a))return;if(c===o.length-1&&(x(a)||ot(a)||xt(a)))e.push(yt(a));else if(I(a)){i=!0;for(let l=0,f=a.length;ls.score===t.score?s.idx{this._keysMap[e.id]=i})}create(){this.isCreated||!this.docs.length||(this.isCreated=!0,x(this.docs[0])?this.docs.forEach((t,e)=>{this._addString(t,e)}):this.docs.forEach((t,e)=>{this._addObject(t,e)}),this.norm.clear())}add(t){const e=this.size();x(t)?this._addString(t,e):this._addObject(t,e)}removeAt(t){this.records.splice(t,1);for(let e=t,i=this.size();e{let o=n.getFn?n.getFn(t):this.getFn(t,n.path);if(_(o)){if(I(o)){let c=[];const h=[{nestedArrIndex:-1,value:o}];for(;h.length;){const{nestedArrIndex:a,value:l}=h.pop();if(_(l))if(x(l)&&!H(l)){let f={v:l,i:a,n:this.norm.get(l)};c.push(f)}else I(l)&&l.forEach((f,d)=>{h.push({nestedArrIndex:d,value:f})})}i.$[r]=c}else if(x(o)&&!H(o)){let c={v:o,n:this.norm.get(o)};i.$[r]=c}}}),this.records.push(i)}toJSON(){return{keys:this.keys,records:this.records}}}function ut(s,t,{getFn:e=u.getFn,fieldNormWeight:i=u.fieldNormWeight}={}){const n=new X({getFn:e,fieldNormWeight:i});return n.setKeys(s.map(lt)),n.setSources(t),n.create(),n}function Ft(s,{getFn:t=u.getFn,fieldNormWeight:e=u.fieldNormWeight}={}){const{keys:i,records:n}=s,r=new X({getFn:t,fieldNormWeight:e});return r.setKeys(i),r.setIndexRecords(n),r}function F(s,{errors:t=0,currentLocation:e=0,expectedLocation:i=0,distance:n=u.distance,ignoreLocation:r=u.ignoreLocation}={}){const o=t/s.length;if(r)return o;const c=Math.abs(i-e);return n?o+c/n:c?1:o}function Dt(s=[],t=u.minMatchCharLength){let e=[],i=-1,n=-1,r=0;for(let o=s.length;r=t&&e.push([i,n]),i=-1)}return s[r-1]&&r-i>=t&&e.push([i,r-1]),e}const O=32;function jt(s,t,e,{location:i=u.location,distance:n=u.distance,threshold:r=u.threshold,findAllMatches:o=u.findAllMatches,minMatchCharLength:c=u.minMatchCharLength,includeMatches:h=u.includeMatches,ignoreLocation:a=u.ignoreLocation}={}){if(t.length>O)throw new Error(vt(O));const l=t.length,f=s.length,d=Math.max(0,Math.min(i,f));let p=r,g=d;const m=c>1||h,S=m?Array(f):[];let M;for(;(M=s.indexOf(t,g))>-1;){let b=F(t,{currentLocation:M,expectedLocation:d,distance:n,ignoreLocation:a});if(p=Math.min(b,p),g=M+l,m){let A=0;for(;A=J;L-=1){let P=L-1,Q=e[s.charAt(P)];if(m&&(S[P]=+!!Q),C[L]=(C[L+1]<<1|1)&Q,b&&(C[L]|=(R[L+1]|R[L])<<1|1|R[L+1]),C[L]&_t&&(N=F(t,{errors:b,currentLocation:P,expectedLocation:d,distance:n,ignoreLocation:a}),N<=p)){if(p=N,g=P,g<=d)break;J=Math.max(1,2*d-g)}}if(F(t,{errors:b+1,currentLocation:d,expectedLocation:d,distance:n,ignoreLocation:a})>p)break;R=C}const K={isMatch:g>=0,score:Math.max(.001,N)};if(m){const b=Dt(S,c);b.length?h&&(K.indices=b):K.isMatch=!1}return K}function Kt(s){let t={};for(let e=0,i=s.length;e{this.chunks.push({pattern:d,alphabet:Kt(d),startIndex:p})},f=this.pattern.length;if(f>O){let d=0;const p=f%O,g=f-p;for(;d{const{isMatch:M,score:R,indices:N}=jt(t,g,m,{location:n+S,distance:r,threshold:o,findAllMatches:c,minMatchCharLength:h,includeMatches:i,ignoreLocation:a});M&&(d=!0),f+=R,M&&N&&(l=[...l,...N])});let p={isMatch:d,score:d?f/this.chunks.length:1};return d&&i&&(p.indices=l),p}}class k{constructor(t){this.pattern=t}static isMultiMatch(t){return tt(t,this.multiRegex)}static isSingleMatch(t){return tt(t,this.singleRegex)}search(){}}function tt(s,t){const e=s.match(t);return e?e[1]:null}class Bt extends k{constructor(t){super(t)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(t){const e=t===this.pattern;return{isMatch:e,score:e?0:1,indices:[0,this.pattern.length-1]}}}class Ht extends k{constructor(t){super(t)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(t){const i=t.indexOf(this.pattern)===-1;return{isMatch:i,score:i?0:1,indices:[0,t.length-1]}}}class Vt extends k{constructor(t){super(t)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(t){const e=t.startsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,this.pattern.length-1]}}}class Wt extends k{constructor(t){super(t)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(t){const e=!t.startsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,t.length-1]}}}class Ut extends k{constructor(t){super(t)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(t){const e=t.endsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[t.length-this.pattern.length,t.length-1]}}}class zt extends k{constructor(t){super(t)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(t){const e=!t.endsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,t.length-1]}}}class dt extends k{constructor(t,{location:e=u.location,threshold:i=u.threshold,distance:n=u.distance,includeMatches:r=u.includeMatches,findAllMatches:o=u.findAllMatches,minMatchCharLength:c=u.minMatchCharLength,isCaseSensitive:h=u.isCaseSensitive,ignoreLocation:a=u.ignoreLocation}={}){super(t),this._bitapSearch=new ft(t,{location:e,threshold:i,distance:n,includeMatches:r,findAllMatches:o,minMatchCharLength:c,isCaseSensitive:h,ignoreLocation:a})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(t){return this._bitapSearch.searchIn(t)}}class pt extends k{constructor(t){super(t)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(t){let e=0,i;const n=[],r=this.pattern.length;for(;(i=t.indexOf(this.pattern,e))>-1;)e=i+r,n.push([i,e-1]);const o=!!n.length;return{isMatch:o,score:o?0:1,indices:n}}}const W=[Bt,pt,Vt,Wt,zt,Ut,Ht,dt],et=W.length,Gt=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,Yt="|";function Xt(s,t={}){return s.split(Yt).map(e=>{let i=e.trim().split(Gt).filter(r=>r&&!!r.trim()),n=[];for(let r=0,o=i.length;r!!(s[j.AND]||s[j.OR]),qt=s=>!!s[G.PATH],te=s=>!I(s)&&ht(s)&&!Y(s),st=s=>({[j.AND]:Object.keys(s).map(t=>({[t]:s[t]}))});function gt(s,t,{auto:e=!0}={}){const i=n=>{let r=Object.keys(n);const o=qt(n);if(!o&&r.length>1&&!Y(n))return i(st(n));if(te(n)){const h=o?n[G.PATH]:r[0],a=o?n[G.PATTERN]:n[h];if(!x(a))throw new Error(At(h));const l={keyId:V(h),pattern:a};return e&&(l.searcher=z(a,t)),l}let c={children:[],operator:r[0]};return r.forEach(h=>{const a=n[h];I(a)&&a.forEach(l=>{c.children.push(i(l))})}),c};return Y(s)||(s=st(s)),i(s)}function ee(s,{ignoreFieldNorm:t=u.ignoreFieldNorm}){s.forEach(e=>{let i=1;e.matches.forEach(({key:n,norm:r,score:o})=>{const c=n?n.weight:null;i*=Math.pow(o===0&&c?Number.EPSILON:o,(c||1)*(t?1:r))}),e.score=i})}function se(s,t){const e=s.matches;t.matches=[],_(e)&&e.forEach(i=>{if(!_(i.indices)||!i.indices.length)return;const{indices:n,value:r}=i;let o={indices:n,value:r};i.key&&(o.key=i.key.src),i.idx>-1&&(o.refIndex=i.idx),t.matches.push(o)})}function ie(s,t){t.score=s.score}function ne(s,t,{includeMatches:e=u.includeMatches,includeScore:i=u.includeScore}={}){const n=[];return e&&n.push(se),i&&n.push(ie),s.map(r=>{const{idx:o}=r,c={item:t[o],refIndex:o};return n.length&&n.forEach(h=>{h(r,c)}),c})}class T{constructor(t,e={},i){this.options={...u,...e},this.options.useExtendedSearch,this._keyStore=new St(this.options.keys),this.setCollection(t,i)}setCollection(t,e){if(this._docs=t,e&&!(e instanceof X))throw new Error(It);this._myIndex=e||ut(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(t){_(t)&&(this._docs.push(t),this._myIndex.add(t))}remove(t=()=>!1){const e=[];for(let i=0,n=this._docs.length;i-1&&(h=h.slice(0,e)),ne(h,this._docs,{includeMatches:i,includeScore:n})}_searchStringList(t){const e=z(t,this.options),{records:i}=this._myIndex,n=[];return i.forEach(({v:r,i:o,n:c})=>{if(!_(r))return;const{isMatch:h,score:a,indices:l}=e.searchIn(r);h&&n.push({item:r,idx:o,matches:[{score:a,value:r,norm:c,indices:l}]})}),n}_searchLogical(t){const e=gt(t,this.options),i=(c,h,a)=>{if(!c.children){const{keyId:f,searcher:d}=c,p=this._findMatches({key:this._keyStore.get(f),value:this._myIndex.getValueForItemAtKeyId(h,f),searcher:d});return p&&p.length?[{idx:a,item:h,matches:p}]:[]}const l=[];for(let f=0,d=c.children.length;f{if(_(c)){let a=i(e,c,h);a.length&&(r[h]||(r[h]={idx:h,item:c,matches:[]},o.push(r[h])),a.forEach(({matches:l})=>{r[h].matches.push(...l)}))}}),o}_searchObjectList(t){const e=z(t,this.options),{keys:i,records:n}=this._myIndex,r=[];return n.forEach(({$:o,i:c})=>{if(!_(o))return;let h=[];i.forEach((a,l)=>{h.push(...this._findMatches({key:a,value:o[l],searcher:e}))}),h.length&&r.push({idx:c,item:o,matches:h})}),r}_findMatches({key:t,value:e,searcher:i}){if(!_(e))return[];let n=[];if(I(e))e.forEach(({v:r,i:o,n:c})=>{if(!_(r))return;const{isMatch:h,score:a,indices:l}=i.searchIn(r);h&&n.push({score:a,key:t,value:r,idx:o,norm:c,indices:l})});else{const{v:r,n:o}=e,{isMatch:c,score:h,indices:a}=i.searchIn(r);c&&n.push({score:h,key:t,value:r,norm:o,indices:a})}return n}}T.version="7.0.0";T.createIndex=ut;T.parseIndex=Ft;T.config=u;T.parseQuery=gt;Zt(Qt);function E(){if(this._list)return;let s=this.querySelector('[slot="list"] [data-list]');if(s||(s=this.querySelector('[slot="list"]')),!s)throw new Error("List element not found");this._list=s}function w(){if(this._input)return;const s=this.querySelector('[slot="input"]');if(!s)throw new Error("Input element not found");this._input=s}function it(){if(!this._originalList){if(this._list){this._originalList=this._list.cloneNode(!0);return}E.call(this),this._originalList=this._list.cloneNode(!0)}}function re(){this._input.id=this._input.id.length!==0?this._input.id:`input-${crypto.randomUUID()}`,this._list.id=this._list.id.length!==0?this._list.id:`list-${crypto.randomUUID()}`,this._input.setAttribute("role","combobox"),this._input.setAttribute("aria-controls",this._list.id),this._input.setAttribute("aria-expanded","false"),this._input.setAttribute("aria-autocomplete","list"),this._input.setAttribute("autocomplete","off"),this._list.setAttribute("role","listbox"),this._list.setAttribute("aria-multiselectable","false"),this._list.setAttribute("anchor",this._input.id),this._list.tabIndex=-1;const s=this._list.children;for(let t=0;t{this.querySelector(":focus")||(this.forceValue(),this.toggleList(!1))},0)}class ce extends HTMLElement{constructor(){super(...arguments);y(this,"_input",null);y(this,"_list",null);y(this,"_originalList",null);y(this,"_isAltModifierPressed",!1);y(this,"_forceValue",!1);y(this,"_lastValue");y(this,"_limit",1/0);y(this,"_fuse",null);y(this,"_fuseOptions",{includeScore:!0,keys:["dataset.display","dataset.value","innerText"]})}static get observedAttributes(){return["data-value","data-fuse-options","data-listbox","data-limit"]}attributeChangedCallback(e,i,n){if(i!==n)switch(e){case"data-value":this.selectItemByValue(n,!1);break;case"data-fuse-options":this._originalList||it.call(this),this._fuseOptions=JSON.parse(n),this._fuse=new T(Array.from(this._originalList.cloneNode(!0).children),this._fuseOptions),this.searchList();break;case"data-listbox":this._forceValue=!!n;break;case"data-limit":this._limit=parseInt(n);break}}connectedCallback(){const e=this.attachShadow({mode:"open"});e.innerHTML=` +var mt=Object.defineProperty;var bt=(s,t,e)=>t in s?mt(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e;var y=(s,t,e)=>(bt(s,typeof t!="symbol"?t+"":t,e),e);(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))e(i);new MutationObserver(i=>{for(const n of i)if(n.type==="childList")for(const r of n.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&e(r)}).observe(document,{childList:!0,subtree:!0});function t(i){const n={};return i.integrity&&(n.integrity=i.integrity),i.referrerPolicy&&(n.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?n.credentials="include":i.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function e(i){if(i.ep)return;i.ep=!0;const n=t(i);fetch(i.href,n)}})();function I(s){return Array.isArray?Array.isArray(s):at(s)==="[object Array]"}const Et=1/0;function Lt(s){if(typeof s=="string")return s;let t=s+"";return t=="0"&&1/s==-Et?"-0":t}function yt(s){return s==null?"":Lt(s)}function x(s){return typeof s=="string"}function ot(s){return typeof s=="number"}function xt(s){return s===!0||s===!1||Mt(s)&&at(s)=="[object Boolean]"}function ht(s){return typeof s=="object"}function Mt(s){return ht(s)&&s!==null}function _(s){return s!=null}function H(s){return!s.trim().length}function at(s){return s==null?s===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(s)}const It="Incorrect 'index' type",At=s=>`Invalid value for key ${s}`,vt=s=>`Pattern length exceeds max of ${s}.`,wt=s=>`Missing ${s} property in key`,kt=s=>`Property 'weight' in key '${s}' must be a positive integer`,Z=Object.prototype.hasOwnProperty;class St{constructor(t){this._keys=[],this._keyMap={};let e=0;t.forEach(i=>{let n=lt(i);this._keys.push(n),this._keyMap[n.id]=n,e+=n.weight}),this._keys.forEach(i=>{i.weight/=e})}get(t){return this._keyMap[t]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function lt(s){let t=null,e=null,i=null,n=1,r=null;if(x(s)||I(s))i=s,t=q(s),e=W(s);else{if(!Z.call(s,"name"))throw new Error(wt("name"));const o=s.name;if(i=o,Z.call(s,"weight")&&(n=s.weight,n<=0))throw new Error(kt(o));t=q(o),e=W(o),r=s.getFn}return{path:t,id:e,weight:n,src:i,getFn:r}}function q(s){return I(s)?s:s.split(".")}function W(s){return I(s)?s.join("."):s}function Nt(s,t){let e=[],i=!1;const n=(r,o,c)=>{if(_(r))if(!o[c])e.push(r);else{let h=o[c];const a=r[h];if(!_(a))return;if(c===o.length-1&&(x(a)||ot(a)||xt(a)))e.push(yt(a));else if(I(a)){i=!0;for(let l=0,f=a.length;ls.score===t.score?s.idx{this._keysMap[e.id]=i})}create(){this.isCreated||!this.docs.length||(this.isCreated=!0,x(this.docs[0])?this.docs.forEach((t,e)=>{this._addString(t,e)}):this.docs.forEach((t,e)=>{this._addObject(t,e)}),this.norm.clear())}add(t){const e=this.size();x(t)?this._addString(t,e):this._addObject(t,e)}removeAt(t){this.records.splice(t,1);for(let e=t,i=this.size();e{let o=n.getFn?n.getFn(t):this.getFn(t,n.path);if(_(o)){if(I(o)){let c=[];const h=[{nestedArrIndex:-1,value:o}];for(;h.length;){const{nestedArrIndex:a,value:l}=h.pop();if(_(l))if(x(l)&&!H(l)){let f={v:l,i:a,n:this.norm.get(l)};c.push(f)}else I(l)&&l.forEach((f,d)=>{h.push({nestedArrIndex:d,value:f})})}i.$[r]=c}else if(x(o)&&!H(o)){let c={v:o,n:this.norm.get(o)};i.$[r]=c}}}),this.records.push(i)}toJSON(){return{keys:this.keys,records:this.records}}}function ut(s,t,{getFn:e=u.getFn,fieldNormWeight:i=u.fieldNormWeight}={}){const n=new J({getFn:e,fieldNormWeight:i});return n.setKeys(s.map(lt)),n.setSources(t),n.create(),n}function Ft(s,{getFn:t=u.getFn,fieldNormWeight:e=u.fieldNormWeight}={}){const{keys:i,records:n}=s,r=new J({getFn:t,fieldNormWeight:e});return r.setKeys(i),r.setIndexRecords(n),r}function F(s,{errors:t=0,currentLocation:e=0,expectedLocation:i=0,distance:n=u.distance,ignoreLocation:r=u.ignoreLocation}={}){const o=t/s.length;if(r)return o;const c=Math.abs(i-e);return n?o+c/n:c?1:o}function Dt(s=[],t=u.minMatchCharLength){let e=[],i=-1,n=-1,r=0;for(let o=s.length;r=t&&e.push([i,n]),i=-1)}return s[r-1]&&r-i>=t&&e.push([i,r-1]),e}const O=32;function jt(s,t,e,{location:i=u.location,distance:n=u.distance,threshold:r=u.threshold,findAllMatches:o=u.findAllMatches,minMatchCharLength:c=u.minMatchCharLength,includeMatches:h=u.includeMatches,ignoreLocation:a=u.ignoreLocation}={}){if(t.length>O)throw new Error(vt(O));const l=t.length,f=s.length,d=Math.max(0,Math.min(i,f));let p=r,g=d;const m=c>1||h,S=m?Array(f):[];let M;for(;(M=s.indexOf(t,g))>-1;){let b=F(t,{currentLocation:M,expectedLocation:d,distance:n,ignoreLocation:a});if(p=Math.min(b,p),g=M+l,m){let A=0;for(;A=X;E-=1){let P=E-1,Q=e[s.charAt(P)];if(m&&(S[P]=+!!Q),C[E]=(C[E+1]<<1|1)&Q,b&&(C[E]|=(R[E+1]|R[E])<<1|1|R[E+1]),C[E]&_t&&(N=F(t,{errors:b,currentLocation:P,expectedLocation:d,distance:n,ignoreLocation:a}),N<=p)){if(p=N,g=P,g<=d)break;X=Math.max(1,2*d-g)}}if(F(t,{errors:b+1,currentLocation:d,expectedLocation:d,distance:n,ignoreLocation:a})>p)break;R=C}const K={isMatch:g>=0,score:Math.max(.001,N)};if(m){const b=Dt(S,c);b.length?h&&(K.indices=b):K.isMatch=!1}return K}function Kt(s){let t={};for(let e=0,i=s.length;e{this.chunks.push({pattern:d,alphabet:Kt(d),startIndex:p})},f=this.pattern.length;if(f>O){let d=0;const p=f%O,g=f-p;for(;d{const{isMatch:M,score:R,indices:N}=jt(t,g,m,{location:n+S,distance:r,threshold:o,findAllMatches:c,minMatchCharLength:h,includeMatches:i,ignoreLocation:a});M&&(d=!0),f+=R,M&&N&&(l=[...l,...N])});let p={isMatch:d,score:d?f/this.chunks.length:1};return d&&i&&(p.indices=l),p}}class k{constructor(t){this.pattern=t}static isMultiMatch(t){return tt(t,this.multiRegex)}static isSingleMatch(t){return tt(t,this.singleRegex)}search(){}}function tt(s,t){const e=s.match(t);return e?e[1]:null}class Bt extends k{constructor(t){super(t)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(t){const e=t===this.pattern;return{isMatch:e,score:e?0:1,indices:[0,this.pattern.length-1]}}}class Ht extends k{constructor(t){super(t)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(t){const i=t.indexOf(this.pattern)===-1;return{isMatch:i,score:i?0:1,indices:[0,t.length-1]}}}class Wt extends k{constructor(t){super(t)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(t){const e=t.startsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,this.pattern.length-1]}}}class Ut extends k{constructor(t){super(t)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(t){const e=!t.startsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,t.length-1]}}}class Vt extends k{constructor(t){super(t)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(t){const e=t.endsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[t.length-this.pattern.length,t.length-1]}}}class zt extends k{constructor(t){super(t)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(t){const e=!t.endsWith(this.pattern);return{isMatch:e,score:e?0:1,indices:[0,t.length-1]}}}class dt extends k{constructor(t,{location:e=u.location,threshold:i=u.threshold,distance:n=u.distance,includeMatches:r=u.includeMatches,findAllMatches:o=u.findAllMatches,minMatchCharLength:c=u.minMatchCharLength,isCaseSensitive:h=u.isCaseSensitive,ignoreLocation:a=u.ignoreLocation}={}){super(t),this._bitapSearch=new ft(t,{location:e,threshold:i,distance:n,includeMatches:r,findAllMatches:o,minMatchCharLength:c,isCaseSensitive:h,ignoreLocation:a})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(t){return this._bitapSearch.searchIn(t)}}class pt extends k{constructor(t){super(t)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(t){let e=0,i;const n=[],r=this.pattern.length;for(;(i=t.indexOf(this.pattern,e))>-1;)e=i+r,n.push([i,e-1]);const o=!!n.length;return{isMatch:o,score:o?0:1,indices:n}}}const U=[Bt,pt,Wt,Ut,zt,Vt,Ht,dt],et=U.length,Gt=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,Yt="|";function Jt(s,t={}){return s.split(Yt).map(e=>{let i=e.trim().split(Gt).filter(r=>r&&!!r.trim()),n=[];for(let r=0,o=i.length;r!!(s[j.AND]||s[j.OR]),qt=s=>!!s[G.PATH],te=s=>!I(s)&&ht(s)&&!Y(s),st=s=>({[j.AND]:Object.keys(s).map(t=>({[t]:s[t]}))});function gt(s,t,{auto:e=!0}={}){const i=n=>{let r=Object.keys(n);const o=qt(n);if(!o&&r.length>1&&!Y(n))return i(st(n));if(te(n)){const h=o?n[G.PATH]:r[0],a=o?n[G.PATTERN]:n[h];if(!x(a))throw new Error(At(h));const l={keyId:W(h),pattern:a};return e&&(l.searcher=z(a,t)),l}let c={children:[],operator:r[0]};return r.forEach(h=>{const a=n[h];I(a)&&a.forEach(l=>{c.children.push(i(l))})}),c};return Y(s)||(s=st(s)),i(s)}function ee(s,{ignoreFieldNorm:t=u.ignoreFieldNorm}){s.forEach(e=>{let i=1;e.matches.forEach(({key:n,norm:r,score:o})=>{const c=n?n.weight:null;i*=Math.pow(o===0&&c?Number.EPSILON:o,(c||1)*(t?1:r))}),e.score=i})}function se(s,t){const e=s.matches;t.matches=[],_(e)&&e.forEach(i=>{if(!_(i.indices)||!i.indices.length)return;const{indices:n,value:r}=i;let o={indices:n,value:r};i.key&&(o.key=i.key.src),i.idx>-1&&(o.refIndex=i.idx),t.matches.push(o)})}function ie(s,t){t.score=s.score}function ne(s,t,{includeMatches:e=u.includeMatches,includeScore:i=u.includeScore}={}){const n=[];return e&&n.push(se),i&&n.push(ie),s.map(r=>{const{idx:o}=r,c={item:t[o],refIndex:o};return n.length&&n.forEach(h=>{h(r,c)}),c})}class T{constructor(t,e={},i){this.options={...u,...e},this.options.useExtendedSearch,this._keyStore=new St(this.options.keys),this.setCollection(t,i)}setCollection(t,e){if(this._docs=t,e&&!(e instanceof J))throw new Error(It);this._myIndex=e||ut(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(t){_(t)&&(this._docs.push(t),this._myIndex.add(t))}remove(t=()=>!1){const e=[];for(let i=0,n=this._docs.length;i-1&&(h=h.slice(0,e)),ne(h,this._docs,{includeMatches:i,includeScore:n})}_searchStringList(t){const e=z(t,this.options),{records:i}=this._myIndex,n=[];return i.forEach(({v:r,i:o,n:c})=>{if(!_(r))return;const{isMatch:h,score:a,indices:l}=e.searchIn(r);h&&n.push({item:r,idx:o,matches:[{score:a,value:r,norm:c,indices:l}]})}),n}_searchLogical(t){const e=gt(t,this.options),i=(c,h,a)=>{if(!c.children){const{keyId:f,searcher:d}=c,p=this._findMatches({key:this._keyStore.get(f),value:this._myIndex.getValueForItemAtKeyId(h,f),searcher:d});return p&&p.length?[{idx:a,item:h,matches:p}]:[]}const l=[];for(let f=0,d=c.children.length;f{if(_(c)){let a=i(e,c,h);a.length&&(r[h]||(r[h]={idx:h,item:c,matches:[]},o.push(r[h])),a.forEach(({matches:l})=>{r[h].matches.push(...l)}))}}),o}_searchObjectList(t){const e=z(t,this.options),{keys:i,records:n}=this._myIndex,r=[];return n.forEach(({$:o,i:c})=>{if(!_(o))return;let h=[];i.forEach((a,l)=>{h.push(...this._findMatches({key:a,value:o[l],searcher:e}))}),h.length&&r.push({idx:c,item:o,matches:h})}),r}_findMatches({key:t,value:e,searcher:i}){if(!_(e))return[];let n=[];if(I(e))e.forEach(({v:r,i:o,n:c})=>{if(!_(r))return;const{isMatch:h,score:a,indices:l}=i.searchIn(r);h&&n.push({score:a,key:t,value:r,idx:o,norm:c,indices:l})});else{const{v:r,n:o}=e,{isMatch:c,score:h,indices:a}=i.searchIn(r);c&&n.push({score:h,key:t,value:r,norm:o,indices:a})}return n}}T.version="7.0.0";T.createIndex=ut;T.parseIndex=Ft;T.config=u;T.parseQuery=gt;Zt(Qt);function L(){if(!this._list&&(this._list=this.querySelector('[slot="list"] [data-list]'),this._list||(this._list=this.querySelector('[slot="list"]')),!this._list))throw new Error("List element not found")}function w(){if(this._input)return;const s=this.querySelector('[slot="input"]');if(!s)throw new Error("Input element not found");this._input=s}function it(){this._originalList||(L.call(this),this._originalList=this._list.cloneNode(!0))}function re(){this._input.id=this._input.id.length!==0?this._input.id:`input-${crypto.randomUUID()}`,this._list.id=this._list.id.length!==0?this._list.id:`list-${crypto.randomUUID()}`,this._input.setAttribute("role","combobox"),this._input.setAttribute("aria-controls",this._list.id),this._input.setAttribute("aria-expanded","false"),this._input.setAttribute("aria-autocomplete","list"),this._input.setAttribute("autocomplete","off"),this._list.setAttribute("role","listbox"),this._list.setAttribute("aria-multiselectable","false"),this._list.setAttribute("anchor",this._input.id),this._list.tabIndex=-1;const s=this._list.children;for(let t=0;t{this.querySelector(":focus")||(this.forceValue(),this.toggleList(!1))},0)}class ce extends HTMLElement{constructor(){super(...arguments);y(this,"_input",null);y(this,"_list",null);y(this,"_originalList",null);y(this,"_isAltModifierPressed",!1);y(this,"_forceValue",!1);y(this,"_lastValue");y(this,"_limit",1/0);y(this,"_fuse",null);y(this,"_fuseOptions",{includeScore:!0,keys:["dataset.display","dataset.value","innerText"]})}static get observedAttributes(){return["data-value","data-fuse-options","data-listbox","data-limit"]}attributeChangedCallback(e,i,n){if(i!==n)switch(e){case"data-value":this.selectItemByValue(n,!1);break;case"data-fuse-options":if(!this._fuse){this._fuseOptions=JSON.parse(n);return}it.call(this),this._fuseOptions=JSON.parse(n),this._fuse=new T(Array.from(this._originalList.cloneNode(!0).children),this._fuseOptions),this.searchList();break;case"data-listbox":this._forceValue=!!n;break;case"data-limit":this._limit=parseInt(n);break}}connectedCallback(){const e=this.attachShadow({mode:"open"});e.innerHTML=` - `,w.call(this),E.call(this),re.call(this),it.call(this),this._fuse=new T(Array.from(this._originalList.cloneNode(!0).children),this._fuseOptions),this.searchList(),this.addEventListeners(),this.forceValue()}disconnectedCallback(){this.removeEventListener("focusout",ct.bind(this)),this._input||E.call(this),this._input.removeEventListener("input",this.searchList.bind(this,!0,!0)),this._input.removeEventListener("focus",this.toggleList.bind(this,!0)),this._input.removeEventListener("keydown",nt.bind(this)),this._input.removeEventListener("keyup",D.bind(this)),this.removeEventListenersFromListItems()}addEventListeners(){this.addEventListener("focusout",ct.bind(this)),this._input||w.call(this),this._input.addEventListener("input",this.searchList.bind(this,!0,!0)),this._input.addEventListener("focus",this.toggleList.bind(this,!0)),this._input.addEventListener("keydown",nt.bind(this)),this._input.addEventListener("keyup",D.bind(this)),this.addEventListenersToListItems()}addEventListenersToListItems(){this._list||E.call(this);const e=this._list.children;for(let i=0;iNumber(h.dataset.weight)-Number(c.dataset.weight))),this.addEventListenersToListItems();return}let n=this._fuse.search(this._input.value).slice(0,this._limit);n=n.map(c=>({item:c.item,score:c.score??1,weight:Number(c.item.dataset.weight??1),refIndex:c.refIndex})).sort((c,h)=>c.score*(h.weight/c.weight)-h.score*(c.weight/h.weight)).map(c=>({item:c.item,score:c.score,weight:c.weight,refIndex:c.refIndex}));const r=n.map(c=>c.item);this._list.innerHTML="",this._list.append(...r.map(c=>c.cloneNode(!0)));const o=c=>{var h,a;if(c.nodeType===Node.TEXT_NODE&&((h=c.textContent)==null?void 0:h.trim())!==""&&((a=c.textContent)==null?void 0:a.trim())!==` -`){const l=c.textContent??"",f=document.createElement("template");f.innerHTML=this.highlightText(l,this._input.value),c.replaceWith(f.content)}else for(const l of c.childNodes)o(l)};for(const c of this._list.children)o(c);this.addEventListenersToListItems(),this.toggleList(e)}highlightText(e,i){const n=new RegExp(`[${i}]+`,"gmi");return e.replace(n,"$&")}toggleList(e=this._input.getAttribute("aria-expanded")!=="true"){this._input.setAttribute("aria-expanded",`${e}`),e||this.unfocusAllItems()}focusItem(e){e&&(e.focus(),this.unfocusAllItems(),e.setAttribute("aria-selected","true"))}unfocusAllItems(){this._list||E.call(this);for(const e of this._list.querySelectorAll("[aria-selected]"))e.removeAttribute("aria-selected")}selectItem(e,i=!0){this._input||w.call(this),e.dataset.display?this._input.value=e.dataset.display:e.children.length||Array.from(e.children).every(n=>n.nodeName==="STRONG")?this._input.value=e.innerText:e.dataset.value?this._input.value=e.dataset.value:this._input.value="",e.dataset.value&&(this.dataset.value=e.dataset.value),i&&this._input.focus(),this.toggleList(!1),this.searchList(!1,!1),this.sendChangeEvent()}selectItemByValue(e,i=!0){if(!e)return;this._list||E.call(this);const n=this._list.querySelector(`[data-value="${e}"]`);n&&this.selectItem(n,i)}clearInput(e=!0){this._input||w.call(this),this._input.value="",e&&this._input.focus(),this.toggleList(!1)}forceValue(){var e;if(this._input||w.call(this),this._list||E.call(this),this._forceValue&&((e=this._input)!=null&&e.value)&&!this.dataset.value){const i=this._list.children[0];i?this.selectItem(i,!1):(this.clearInput(!1),this.dataset.value="",this.sendChangeEvent())}}sendChangeEvent(){if(this.dataset.value===this._lastValue)return;const e=new Event("change");this.dispatchEvent(e),this._lastValue=this.dataset.value}}customElements.define("combobox-framework",ce); + `,w.call(this),L.call(this),re.call(this),it.call(this),this._fuse=new T(Array.from(this._originalList.cloneNode(!0).children),this._fuseOptions),this.searchList(),this.addEventListeners(),this.forceValue()}disconnectedCallback(){this.removeEventListener("focusout",ct.bind(this)),this._input||L.call(this),this._input.removeEventListener("input",this.searchList.bind(this,!0,!0)),this._input.removeEventListener("focus",this.toggleList.bind(this,!0)),this._input.removeEventListener("keydown",nt.bind(this)),this._input.removeEventListener("keyup",D.bind(this)),this.removeEventListenersFromListItems()}addEventListeners(){this.addEventListener("focusout",ct.bind(this)),this._input||w.call(this),this._input.addEventListener("input",this.searchList.bind(this,!0,!0)),this._input.addEventListener("focus",this.toggleList.bind(this,!0)),this._input.addEventListener("keydown",nt.bind(this)),this._input.addEventListener("keyup",D.bind(this)),this.addEventListenersToListItems()}addEventListenersToListItems(){this._list||L.call(this);const e=this._list.children;for(let i=0;iNumber(h.dataset.weight)-Number(c.dataset.weight))),this.addEventListenersToListItems();return}let n=this._fuse.search(this._input.value).slice(0,this._limit);n=n.map(c=>({item:c.item,score:c.score??1,weight:Number(c.item.dataset.weight??1),refIndex:c.refIndex})).sort((c,h)=>c.score*(h.weight/c.weight)-h.score*(c.weight/h.weight)).map(c=>({item:c.item,score:c.score,weight:c.weight,refIndex:c.refIndex}));const r=n.map(c=>c.item);this._list.innerHTML="",this._list.append(...r.map(c=>c.cloneNode(!0)));const o=c=>{var h,a;if(c.nodeType===Node.TEXT_NODE&&((h=c.textContent)==null?void 0:h.trim())!==""&&((a=c.textContent)==null?void 0:a.trim())!==` +`){const l=c.textContent??"",f=document.createElement("template");f.innerHTML=this.highlightText(l,this._input.value),c.replaceWith(f.content)}else for(const l of c.childNodes)o(l)};for(const c of this._list.children)o(c);this.addEventListenersToListItems(),this.toggleList(e)}highlightText(e,i){const n=new RegExp(`[${i}]+`,"gmi");return e.replace(n,"$&")}toggleList(e=this._input.getAttribute("aria-expanded")!=="true"){this._input.setAttribute("aria-expanded",`${e}`),e||this.unfocusAllItems()}focusItem(e){e&&(this.unfocusAllItems(),e.focus(),e.setAttribute("aria-selected","true"))}unfocusAllItems(){this._list||L.call(this);for(const e of this._list.querySelectorAll("[aria-selected]"))e.removeAttribute("aria-selected")}selectItem(e,i=!0){this._input||w.call(this),e.dataset.display?this._input.value=e.dataset.display:e.children.length||Array.from(e.children).every(n=>n.nodeName==="STRONG")?this._input.value=e.innerText:e.dataset.value?this._input.value=e.dataset.value:this._input.value="",e.dataset.value&&(this.dataset.value=e.dataset.value),i&&this._input.focus(),this.toggleList(!1),this.searchList(!1,!1),this.sendChangeEvent()}selectItemByValue(e,i=!0){if(!e)return;this._list||L.call(this);const n=this._list.querySelector(`[data-value="${e}"]`);n&&this.selectItem(n,i)}clearInput(e=!0){this._input||w.call(this),this._input.value="",e&&this._input.focus(),this.toggleList(!1)}forceValue(){var e;if(this._input||w.call(this),this._list||L.call(this),this._forceValue&&((e=this._input)!=null&&e.value)&&!this.dataset.value){const i=this._list.children[0];i?this.selectItem(i,!1):(this.clearInput(!1),this.dataset.value="",this.sendChangeEvent())}}sendChangeEvent(){if(this.dataset.value===this._lastValue)return;const e=new Event("change");this.dispatchEvent(e),this._lastValue=this.dataset.value}}customElements.define("combobox-framework",ce); diff --git a/docs/index.html b/docs/index.html index 32f6d6e..b76198d 100644 --- a/docs/index.html +++ b/docs/index.html @@ -20,7 +20,7 @@ - + @@ -99,7 +99,7 @@

Demo

- + @@ -110,367 +110,367 @@

Demo

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -800,6 +800,10 @@

Styling

combobox-framework input:not([aria-expanded]) + [slot="list"] { display: none; } + + *:focus { + background: red; + } diff --git a/package.json b/package.json index 4d38fe3..fbf8812 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "0.4.0", + "version": "1.0.0", "name": "combobox-framework", "description": "A framework for building comboboxes", "keywords": [
Tim Robbins Andy Dufresne
Morgan Freeman Ellis Boyd "Red" Redding
Bob Gunton Warden Samuel Norton
William Sadler Heywood
Clancy Brown Byron Hadley
Gil Bellows Tommy Williams
James Whitmore Brooks Hatlen
Mark Rolston Bogs Diamond
Jeffrey DeMunn 1946 D.A.
Larry Brandenburg Skeet
Neil Giuntoli Jigger
Brian Libby Floyd
David Proval Snooze
Joseph Ragno Ernie
Jude Ciccolella Guard Mert
Paul McCrane Guard Trout
Renee Blaine Linda Dufresne (Andy Dufresne's Wife)
Scott Mann Glenn Quentin
John Horton Lloyd Henreid (Judge)
Gordon Greene 1947 Parole Hearings Man
Alfonso Freeman Fresh Fish Con
V.J. Foster Hungry Fish Con (as V.J. Foster)
John E. Summers New Fish Guard
Frank Medrano Fat Ass
Mack Miles Tyrell
Alan R. Kessler Laundry Bob
Morgan Lund Laundry Truck Driver
Cornell Wallace Laundry Leonard
Gary Lee Davis Rooster
Neil Summers Pete
Ned Bellamy Guard Youngblood
Joe Pecoraro Projectionist
Harold E. Cope Jr. Hole Guard
Brian Delate Guard Dekins
Don McManus Guard Wiley
Dorothy Silver Landlady
Donald Zinn Moresby Batter
Robert Haley 1954 Food-Way Manager
Dana Snyder 1954 Food-Way Proprietor
John D. Craig 1954 Food-Way Customer
Ken Magee Ned Grimes
Eugene C. DePasquale Mail Caller
Bill Bolender Elmo Blatch
Ron Newell Elderly Hole Guard
John R. Woodward Bullhorn Tower Guard
Chuck Brauchler Man Missing Guard
Dion Anderson Head Bull Haig
Claire Slemmer Bank Teller
James Kisicki Bank Manager
Rohn Thomas Bugle Editor
Charlie Kearns 1966 D.A
Rob Reider Duty Guard
Brian Brophy 1967 Parole Hearings Man
Paul Kennedy1967 1967 Food-Way Manager1967 Food-Way Manager
John D. Craig Old Man on Bus (uncredited)
Fred Culbertson Police Officer (uncredited)
Richard Doone Con (uncredited)
Samantha Goldberg Bank Employee (uncredited)
Shane Grove Inmate (uncredited)
Rita Hayworth Gilda Mundson Farrell (archive footage) (uncredited)
Bill McKinney Bank Teller
Alonzo F. Jones Inmate (uncredited)
Gary Jones Convict (uncredited)
Sergio Kato Inmate II (uncredited)
Michael Lightsey Con (uncredited)
Tracy Love Court Spectator (uncredited)
George Macready Ballin Mundson (archive footage) (uncredited)
Christopher Page Traffic (driver) (uncredited)
Neil Riddaway Con (uncredited)
Brad Spencer 1957 Parole Hearings Guard (uncredited)
Jodiviah Stepp New Fish Con (uncredited)
Mark A. Strain Yard Inmate (uncredited)
James Babson Con (uncredited)
Dennis Baker Old Man on Bus (uncredited)
Fred Culbertson Police Officer (uncredited)
Richard Doone Con (uncredited)
Samantha Goldberg Bank Employee (uncredited)
Shane Grove Inmate (uncredited)
Rita Hayworth Gilda Mundson Farrell (archive footage) (uncredited)
David Hecht Bank Teller
Alonzo F. Jones Inmate (uncredited)
Gary Jones Convict (uncredited)
Sergio Kato Inmate II (uncredited)
Michael Lightsey Con (uncredited)
Tracy Love Court Spectator (uncredited)
George Macready Ballin Mundson (archive footage) (uncredited)
Christopher Page Traffic (driver) (uncredited)
Neil Riddaway Con (uncredited)
Brad Spencer 1957 Parole Hearings Guard (uncredited)
Jodiviah Stepp New Fish Con (uncredited)
Mark A. Strain Yard Inmate (uncredited)