hyper-html-api 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +4 -1
  2. package/conformance/MANIFEST.json +2 -2
  3. package/conformance/cases/all-matches-read-quoted.expected.json +3 -0
  4. package/conformance/cases/all-matches-read-quoted.html +5 -0
  5. package/conformance/cases/all-matches-read-quoted.meta +7 -0
  6. package/conformance/cases/all-matches-read-quoted.parsed.json +3 -0
  7. package/conformance/cases/all-matches-read.expected.json +3 -0
  8. package/conformance/cases/all-matches-read.html +6 -0
  9. package/conformance/cases/all-matches-read.meta +7 -0
  10. package/conformance/cases/all-matches-read.parsed.json +3 -0
  11. package/conformance/cases/write-all-matches-attr.after.html +1 -0
  12. package/conformance/cases/write-all-matches-attr.after.json +3 -0
  13. package/conformance/cases/write-all-matches-attr.data.json +1 -0
  14. package/conformance/cases/write-all-matches-attr.html +1 -0
  15. package/conformance/cases/write-all-matches-attr.meta +6 -0
  16. package/conformance/cases/write-all-matches-attr.write.json +4 -0
  17. package/conformance/cases/write-all-matches-group.after.html +1 -0
  18. package/conformance/cases/write-all-matches-group.after.json +3 -0
  19. package/conformance/cases/write-all-matches-group.data.json +1 -0
  20. package/conformance/cases/write-all-matches-group.html +1 -0
  21. package/conformance/cases/write-all-matches-group.meta +6 -0
  22. package/conformance/cases/write-all-matches-group.write.json +4 -0
  23. package/conformance/cases/write-all-matches-text.after.html +1 -0
  24. package/conformance/cases/write-all-matches-text.after.json +3 -0
  25. package/conformance/cases/write-all-matches-text.data.json +1 -0
  26. package/conformance/cases/write-all-matches-text.html +1 -0
  27. package/conformance/cases/write-all-matches-text.meta +6 -0
  28. package/conformance/cases/write-all-matches-text.write.json +4 -0
  29. package/conformance/cases/write-all-matches-unmatched.data.json +1 -0
  30. package/conformance/cases/write-all-matches-unmatched.error.json +14 -0
  31. package/conformance/cases/write-all-matches-unmatched.html +1 -0
  32. package/conformance/cases/write-all-matches-unmatched.meta +6 -0
  33. package/dist/hyper-html-api.engine.esm.js +1 -1
  34. package/dist/hyper-html-api.engine.min.js +1 -1
  35. package/dist/hyper-html-api.min.js +8 -8
  36. package/dist/hyper-html-api.upgrade.min.js +2 -2
  37. package/package.json +3 -2
  38. package/src/engine/apply.js +6 -7
  39. package/src/engine/extract.js +6 -3
  40. package/src/engine/round-trip.js +9 -1
  41. package/src/engine/rule-syntax.js +13 -3
  42. package/src/engine/write-plan.js +2 -3
  43. package/src/page.js +15 -5
  44. package/src/site.js +164 -0
  45. package/src/upgrade/migrate.js +2 -1
  46. package/src/upgrade/shape-match.js +32 -13
  47. package/src/write.js +1 -1
package/README.md CHANGED
@@ -91,7 +91,10 @@ HyperHtmlApi.upgrade.run({ sourceUrl?, dataByName?, fromVersion? })
91
91
 
92
92
  The join is name-match per rules tag: fields present in both carry over, fields
93
93
  only in the old data are discarded (and counted in `summary`), fields only in
94
- the new template keep its defaults, and list counts follow the old data. For
94
+ the new template keep its defaults, and list counts follow the old data. A list
95
+ item is the exception to defaults: it is the owner's own row, so a field the new
96
+ template adds inside a list item starts empty (a list starts with no items)
97
+ instead of taking the value of the template's sample item. For
95
98
  richer migrations (renames, splits, computed fields) the source declares a
96
99
  transform as a non-executing script tag in its own HTML:
97
100
 
@@ -1,6 +1,6 @@
1
1
  {
2
- "engine": "0.12.0",
2
+ "engine": "0.13.0",
3
3
  "cheerio": "1.2.0",
4
- "cases": 83,
4
+ "cases": 89,
5
5
  "note": "Versions the expectations were generated against. Parity means parity with THIS pair; regenerate deliberately, never as a side effect of an install."
6
6
  }
@@ -0,0 +1,3 @@
1
+ {
2
+ "name": "Hyper"
3
+ }
@@ -0,0 +1,5 @@
1
+ <!doctype html><html><body>
2
+ <header><span class="site-name">Hyper</span></header>
3
+ <footer><span class="site-name">Old Hyper</span></footer>
4
+ <script data-rules-name="api" data-rules-version="1">{"name": "span.site-name[*]"}</script>
5
+ </body></html>
@@ -0,0 +1,7 @@
1
+ tier: 1
2
+ face: tag
3
+ token: api
4
+ expect: ok
5
+ skip: htmlclay=all-matches form not ported yet (multi-page sites release 1, step G1)
6
+ note: The [*] marker is not a quote-level token: a strict JSON quoted rule value lands on the
7
+ note: same parse tree as the relaxed unquoted spelling in all-matches-read.
@@ -0,0 +1,3 @@
1
+ {
2
+ "name": "span.site-name[*]"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "name": "Hyper"
3
+ }
@@ -0,0 +1,6 @@
1
+ <!doctype html><html><body>
2
+ <header><span class="site-name">Hyper</span></header>
3
+ <main><h1>Hello</h1></main>
4
+ <footer><span class="site-name">Old Hyper</span></footer>
5
+ <script data-rules-name="api" data-rules-version="1">{name:"span.site-name[*]"}</script>
6
+ </body></html>
@@ -0,0 +1,7 @@
1
+ tier: 1
2
+ face: tag
3
+ token: api
4
+ expect: ok
5
+ skip: htmlclay=all-matches form not ported yet (multi-page sites release 1, step G1)
6
+ note: The [*] marker belongs to the write face: extraction still reports the first match under
7
+ note: an ordinary key, so a [*] rule reads like the same rule without the marker.
@@ -0,0 +1,3 @@
1
+ {
2
+ "name": "span.site-name[*]"
3
+ }
@@ -0,0 +1 @@
1
+ <script data-rules-name="api" data-rules-version="1">{home:"a.home[*]@href"}</script><nav><a class="home" href="/start">Home</a><a class="home" href="/start">About</a></nav>
@@ -0,0 +1,3 @@
1
+ {
2
+ "home": "/start"
3
+ }
@@ -0,0 +1 @@
1
+ {"home":"/start"}
@@ -0,0 +1 @@
1
+ <script data-rules-name="api" data-rules-version="1">{home:"a.home[*]@href"}</script><nav><a class="home" href="/">Home</a><a class="home" href="/about">About</a></nav>
@@ -0,0 +1,6 @@
1
+ tier: 1
2
+ face: write
3
+ expect: ok
4
+ skip: htmlclay=all-matches form not ported yet (multi-page sites release 1, step G1)
5
+ note: The marker goes on the selector, before the @prop separator, and every match's attribute
6
+ note: is written.
@@ -0,0 +1,4 @@
1
+ {
2
+ "changed": true,
3
+ "spliced": true
4
+ }
@@ -0,0 +1 @@
1
+ <script data-rules-name="api" data-rules-version="1">{title:"title, span.site-name[*]"}</script><title>New title</title><header><span class="site-name">New title</span></header><footer><span class="site-name">New title</span></footer>
@@ -0,0 +1,3 @@
1
+ {
2
+ "title": "New title"
3
+ }
@@ -0,0 +1 @@
1
+ {"title":"New title"}
@@ -0,0 +1 @@
1
+ <script data-rules-name="api" data-rules-version="1">{title:"title, span.site-name[*]"}</script><title>Old title</title><header><span class="site-name">Old name</span></header><footer><span class="site-name">Old name</span></footer>
@@ -0,0 +1,6 @@
1
+ tier: 1
2
+ face: write
3
+ expect: ok
4
+ skip: htmlclay=all-matches form not ported yet (multi-page sites release 1, step G1)
5
+ note: The marker does not cover the whole group: it covers only the last selector in it, so
6
+ note: title is written once and both .site-name matches are written.
@@ -0,0 +1,4 @@
1
+ {
2
+ "changed": true,
3
+ "spliced": true
4
+ }
@@ -0,0 +1 @@
1
+ <script data-rules-name="api" data-rules-version="1">{name:"span.site-name[*]"}</script><header><span class="site-name">Hyper</span></header><footer><span class="site-name">Hyper</span></footer>
@@ -0,0 +1,3 @@
1
+ {
2
+ "name": "Hyper"
3
+ }
@@ -0,0 +1 @@
1
+ {"name":"Hyper"}
@@ -0,0 +1 @@
1
+ <script data-rules-name="api" data-rules-version="1">{name:"span.site-name[*]"}</script><header><span class="site-name">Old name</span></header><footer><span class="site-name">Old name</span></footer>
@@ -0,0 +1,6 @@
1
+ tier: 1
2
+ face: write
3
+ expect: ok
4
+ skip: htmlclay=all-matches form not ported yet (multi-page sites release 1, step G1)
5
+ note: A [*] text rule writes every match of its selector, not just the first: this is how a
6
+ note: site's shared value reaches every page element that shows it.
@@ -0,0 +1,4 @@
1
+ {
2
+ "changed": true,
3
+ "spliced": true
4
+ }
@@ -0,0 +1 @@
1
+ {"name":"Hyper"}
@@ -0,0 +1,14 @@
1
+ {
2
+ "type": "WriteRejected",
3
+ "message": "write rejected: 0 unknown key(s), 1 rule(s) with no matching element",
4
+ "status": 400,
5
+ "details": {
6
+ "unknownKeys": [],
7
+ "unmatched": [
8
+ {
9
+ "path": "name",
10
+ "selector": ".missing"
11
+ }
12
+ ]
13
+ }
14
+ }
@@ -0,0 +1 @@
1
+ <script data-rules-name="api" data-rules-version="1">{name:".missing[*]"}</script><header><span class="site-name">Old name</span></header>
@@ -0,0 +1,6 @@
1
+ tier: 1
2
+ face: write
3
+ expect: error
4
+ skip: htmlclay=all-matches form not ported yet (multi-page sites release 1, step G1)
5
+ note: Zero matches is still zero matches: the marker says "all of them", not "at least one",
6
+ note: and the rejection reports the selector without the marker.
@@ -1 +1 @@
1
- var st=Object.defineProperty;var lt=(e,t)=>{for(var n in t)st(e,n,{get:t[n],enumerable:!0})};var Z=["textContent","innerText","innerHTML","outerHTML","value","checked","selected","disabled","readOnly","type","tagName","nodeName","nodeType","nodeValue","childElementCount","id","className","classList","baseURI","offsetWidth","offsetHeight","clientWidth","clientHeight","scrollWidth","scrollHeight","dataset","currentSrc","duration","paused","title","documentURI","contentType"],Q=new Set(Z),le=new Set(["textContent","innerText","innerHTML","value","checked","selected","disabled","readOnly","type","id","className","title"]),v=new Set(["tagName","nodeName","nodeType","nodeValue","childElementCount","classList","baseURI","documentURI","contentType","offsetWidth","offsetHeight","clientWidth","clientHeight","scrollWidth","scrollHeight","currentSrc","duration","paused","dataset"]),xe=new Set(["checked","selected","disabled","readOnly","paused"]);function ce(e,t){return t==null?xe.has(e)?!1:"":xe.has(e)?t==="false"?!1:!!t:t}var R={};lt(R,{EmptyListInsert:()=>N,MAX_RULE_DEPTH:()=>j,MaxRuleDepthExceeded:()=>k,NoRulesTag:()=>fe,RuleTargetReadOnly:()=>q,RulesParseError:()=>I,ShapeMismatch:()=>H,UnknownRulesVersion:()=>B,WriteNotRoundTripped:()=>ee,WriteRefused:()=>V,WriteRejected:()=>ue});var I=class extends Error{constructor(t,n){super(t),this.name="RulesParseError",this.cause=n}},B=class extends Error{constructor(t){super(`unknown rules version: ${t}. Library supports "1".`),this.name="UnknownRulesVersion",this.version=t}},j=20,k=class extends Error{constructor(t){super(`rule depth exceeded ${j} at path: ${t.join(".")}`),this.name="MaxRuleDepthExceeded",this.path=t}},H=class extends Error{constructor(t){super(`shape mismatch: ${t.length} field(s) failed validation`),this.name="ShapeMismatch",this.mismatches=t}},N=class extends Error{constructor(t,n){super(n?`cannot add items to empty list at "${t.join(".")}" \u2014 ${n}`:`cannot add items to empty list at "${t.join(".")}" \u2014 no sibling to clone as template. Seed the list with a hidden item first.`),this.name="EmptyListInsert",this.path=t}},q=class extends Error{constructor(t){super(`cannot write to read-only DOM property "${t}"`),this.name="RuleTargetReadOnly",this.target=t}},V=class extends Error{constructor(t){super(`write refused: ${t.length} write(s) broke the content-only policy`),this.name="WriteRefused",this.refusals=t}};function ct(e){return e.reduce((n,r)=>typeof r=="number"?`${n}[${r}]`:n?`${n}.${r}`:String(r),"")||"(root)"}var ee=class extends Error{constructor(t){super(`write did not round-trip at "${ct(t)}"`),this.name="WriteNotRoundTripped",this.path=t}},fe=class extends Error{constructor(t){super(`no <script data-rules-name~="${t}"> rules tag in this document`),this.name="NoRulesTag",this.token=t}},ue=class extends Error{constructor(t,n){super(`write rejected: ${t.length} unknown key(s), ${n.length} rule(s) with no matching element`),this.name="WriteRejected",this.unknownKeys=t,this.unmatched=n}};function b(e){let t=0,n=null,r=-1;for(let i=0;i<e.length;i++){let o=e[i];o==="\\"?i++:n?o===n&&(n=null):o==='"'||o==="'"?n=o:o==="["||o==="("?t++:o==="]"||o===")"?t>0&&t--:o==="@"&&t===0&&(r=i)}return r}function ae(e){let t=b(e);return t===-1?{selector:e,prop:null}:{selector:e.slice(0,t),prop:e.slice(t+1)||null}}function he(e){let t=0,n=null,r=-1,i=!1;for(let o=0;o<e.length;o++){let l=e[o];l==="\\"?o++:n?l===n&&(n=null):l==='"'||l==="'"?n=l:l==="["||l==="("?t++:l==="]"||l===")"?t>0&&t--:t===0&&l===">"?r=o:t===0&&l===","&&(i=!0)}return i||r===-1||!ft(e,r+1)?null:e.slice(0,r).trim()||null}function ft(e,t){let n=t,r=e.replace(/\s+$/,"").length;for(;n<r&&/\s/.test(e[n]);)n++;let i=0,o=null;for(;n<r;n++){let l=e[n];if(l==="\\")n++;else if(o)l===o&&(o=null);else if(l==='"'||l==="'")o=l;else if(l==="["||l==="(")i++;else if(l==="]"||l===")")i>0&&i--;else if(i===0&&(l==="+"||l==="~"||/\s/.test(l)))return!1}return!0}var ut=/^--[A-Za-z0-9_-]+$/;function C(e){return typeof e=="string"&&ut.test(e)}function be(e){let t=[],n=[],r=null,i=0;for(let o=0;o<e.length;o++){let l=e[o];if(r){l==="\\"?o++:l===r&&(r=null);continue}if(l==="/"&&e[o+1]==="*"){let c=e.indexOf("*/",o+2);o=c===-1?e.length:c+1;continue}l==='"'||l==="'"?r=l:l==="("?n.push(")"):l==="["?n.push("]"):l==="{"?n.push("}"):(l===")"||l==="]"||l==="}")&&n[n.length-1]===l?n.pop():l===";"&&n.length===0&&(t.push(e.slice(i,o)),i=o+1)}return t.push(e.slice(i)),t}function at(e){let t="",n=null;for(let r=0;r<e.length;r++){let i=e[r];if(n){t+=i,i==="\\"&&r+1<e.length?t+=e[++r]:i===n&&(n=null);continue}if(i==="/"&&e[r+1]==="*"){let o=e.indexOf("*/",r+2);r=o===-1?e.length:o+1,t+=" ";continue}(i==='"'||i==="'")&&(n=i),t+=i}return t}function Re(e){e=at(e);let t=e.indexOf(":");if(t===-1)return null;let n=e.slice(0,t).trim(),r=e.slice(t+1).trim(),i=/!\s*important\s*$/i.exec(r);return i&&(r=r.slice(0,i.index).trim()),{name:n,value:r,important:!!i}}function $(e,t){if(e==null)return null;let n=null;for(let r of be(String(e))){let i=Re(r);!i||i.name!==t||(!n||i.important||!n.important)&&(n=i)}return n?n.value:null}function Ne(e,t,n){let r=e==null?"":String(e),i=n==null||n==="",o=be(r),l=o.map(Re),c=l.some(d=>d&&d.name===t&&d.important),s=[],f=!1;o.forEach((d,p)=>{let w=l[p];if(!w||w.name!==t){s.push(d);return}if(i||f)return;let a=/^\s*/.exec(d)[0];s.push(`${a}${t}: ${n}${c?" !important":""}`),f=!0});let u=s.join(";");if(!i&&!f){let d=u.trimEnd();u=d===""?`${t}: ${n}`:`${d}${d.endsWith(";")?" ":"; "}${t}: ${n}`}return u.trim()===""?null:u}function te(e,t,n,r){let i=e.attr(t,"style");if(($(i,n)??"")===r)return;let o=Ne(i,n,r);o==null?e.removeAttr(t,"style"):e.attr(t,"style",o)}function P(e,t,n,r={}){if(Object.prototype.hasOwnProperty.call(r,"exclude")&&e.semanticExclude===!1)throw new Error("This adapter does not support semantic exclude queries; omit exclude or use the DOM adapter.");return de(e,t,n,{depth:0,path:[]},r)}function de(e,t,n,r,i){if(r.depth>j)throw new k(r.path);if(typeof n=="string")return ht(e,t,n,r,i);if(Array.isArray(n)){let[o,l]=n,c=e.find(t,o,i);return Pe(i,r,c),c.map((s,f)=>de(e,s,l,{depth:r.depth+1,path:[...r.path,f]},i))}if(typeof n=="object"&&n!==null){let o={};for(let[l,c]of Object.entries(n))o[l]=de(e,t,c,{depth:r.depth+1,path:[...r.path,l]},i);return o}return null}function ht(e,t,n,r,i){if(n.endsWith("[]")){let c=n.slice(0,-2),s=e.find(t,c,i);return Pe(i,r,s),s.map(f=>e.text(f))}if(n.startsWith("@"))return Ce(e,t,n.slice(1));let o=b(n);if(o!==-1){let c=n.slice(0,o),s=n.slice(o+1),f=c?e.find(t,c,i):[t];return f.length===0?null:Ce(e,f[0],s)}if(n===".")return e.text(t);let l=e.find(t,n,i);return l.length===0?null:e.text(l[0])}function Pe(e,t,n){if(typeof e.onRowsRead=="function")try{e.onRowsRead(t.path.slice(),n)}catch(r){console.warn(`[hyper-html-api] onRowsRead threw at "${t.path.join(".")||"(root)"}"`,r)}}function Ce(e,t,n){if(C(n))return $(e.attr(t,"style"),n);if(Q.has(n)){let i=e.prop(t,n);return i==null?null:String(i)}let r=e.attr(t,n);return r??null}function Le(e,t,n,r){let i=e.length,o=t.length,l=new Array(i).fill(-1);if(r){let h=new Set;for(let y=0;y<i;y++){let A=r[y];!(A>=0&&A<o)||h.has(A)||(l[y]=A,h.add(A))}}if(i===0||o===0)return l;let c=e.map(h=>Me(h,n)),s=t.map(h=>Me(h,n)),f=new Array(o).fill(!1);for(let h of l)h>=0&&(f[h]=!0);let u=new Map;s.forEach((h,y)=>{f[y]||u.set(h,u.has(h)?-1:y)});let d=new Map;c.forEach((h,y)=>{l[y]>=0||d.set(h,(d.get(h)||0)+1)}),c.forEach((h,y)=>{if(l[y]>=0||d.get(h)!==1)return;let A=u.get(h);A===void 0||A===-1||f[A]||(l[y]=A,f[A]=!0)});let p=[];for(let h=0;h<i;h++)l[h]<0&&p.push(h);let w=[];for(let h=0;h<o;h++)f[h]||w.push(h);if(p.length===0||w.length===0)return l;let a=i*o+1,m=dt(e,t,n),g=(h,y)=>m(h,y)*a+Math.abs(h-y);for(let[h,y]of pt(p,w,g))l[h]=y;return l}var Ie=e=>typeof e=="object"&&e!==null;function Me(e,t){if(!Ie(t))return e==null?" null":String(e);let n=Object.keys(t);return JSON.stringify(n.map(r=>{let i=JSON.stringify(e?.[r]);return i===void 0?" undef":i}))}function dt(e,t,n){if(!Ie(n))return(c,s)=>e[c]===t[s]?0:1;let r=Object.keys(n),i=c=>r.map(s=>JSON.stringify(c?.[s])),o=e.map(i),l=t.map(i);return(c,s)=>{let f=o[c],u=l[s],d=0;for(let p=0;p<r.length;p++)f[p]!==u[p]&&d++;return d}}function pt(e,t,n){return e.length<=t.length?ke(e,t,n,!1):ke(t,e,(r,i)=>n(i,r),!0)}function ke(e,t,n,r){let i=e.length,o=t.length,l=[];for(let d=0;d<=i;d++)l.push(new Float64Array(o+1).fill(1/0));let c=[];for(let d=0;d<=i;d++)c.push(new Uint8Array(o+1));for(let d=0;d<=o;d++)l[i][d]=0;for(let d=i-1;d>=0;d--)for(let p=o-1;p>=0;p--){let w=n(e[d],t[p])+l[d+1][p+1],a=l[d][p+1];w<=a?(l[d][p]=w,c[d][p]=1):l[d][p]=a}let s=[],f=0,u=0;for(;f<i&&u<o;)c[f][u]&&(s.push(r?[t[u],e[f]]:[e[f],t[u]]),f++),u++;return s}function me(e,t,n,r,i,o,l,c={}){let s=e.find(t,n,c);if(i.length===0){s.forEach(T=>e.remove(T)),pe(c,"onRowsApplied",o.path,[]);return}let f=i.length>s.length,u=s[0]||null;if(f&&!u&&(u=At(e,t,n,c),!u))throw new N(o.path);let d=s.map(T=>gt(e,T,r,c)),p=null;if(f&&u){p=e.clone(u),c.templateAttr&&e.removeAttr(p,c.templateAttr);let T=e.stripIds(p);T>0&&console.warn(`[hyper-html-api] stripped ${T} id attribute(s) from cloned template at "${o.path.join(".")||"(root)"}"`)}let w=Le(i,d,r,mt(e,s,i,o,c)),a=s.length>0?e.parent(s[0]):Ot(e,t,n,u,o,c),m=s.length>0?We(e,a,s[0]):0,g=bt(e,s),h=new Set,y=[],A=i.map((T,x)=>{let O=w[x];if(O>=0)return h.add(O),y.push(!1),s[O];y.push(!0);let E=e.clone(p);return e.stripIds(E),E});s.forEach((T,x)=>{h.has(x)||e.remove(T)}),g?xt(e,a,m,A,y):Rt(e,A,y,a,m),yt(e,A,r,i,o,l,c),pe(c,"onRowsApplied",o.path,A)}function pe(e,t,n,r){if(typeof e[t]=="function")try{return e[t](n.slice(),r)}catch(i){console.warn(`[hyper-html-api] ${t} threw at "${n.join(".")||"(root)"}"`,i);return}}function mt(e,t,n,r,i){let o=pe(i,"identifyRows",r.path,n);if(!Array.isArray(o))return null;let l=new Array(n.length).fill(-1),c=new Set,s=new Map(t.map((f,u)=>[e.identity(f),u]));for(let f=0;f<n.length;f++){if(!o[f])continue;let u=s.get(e.identity(o[f]));u===void 0||c.has(u)||(l[f]=u,c.add(u))}return l}function yt(e,t,n,r,i,o,l){t.forEach((c,s)=>{if(n===null){let f=r[s],u=f==null?"":String(f);e.text(c)!==u&&e.text(c,u)}else{let f=o(e,c,n,r[s],{depth:i.depth+1,path:[...i.path,s]},l);f&&f!==c&&(t[s]=f)}})}function gt(e,t,n,r){return n===null?e.text(t):P(e,t,n,r.onRowsRead?{...r,onRowsRead:void 0}:r)}function We(e,t,n){let r=e.children(t);for(let i=0;i<r.length;i++)if(e.sameNode(r[i],n))return i;return-1}function At(e,t,n,r){if(!r.templateAttr)return null;let i=/^\s*:scope\s*>\s*/.test(n),o=new RegExp(":not\\(\\["+r.templateAttr.replace(/[.*+?^${}()|[\]\\-]/g,"\\$&")+"\\]\\)","g"),l=n.replace(/^\s*:scope\s*>\s*/,"").replace(o,""),c=i?Tt(l):0,s=he(l),f=t;for(;f;){let u=e.find(f,l,{includeRulesTag:!1,templateAttr:null});for(let d of u)if(e.attr(d,r.templateAttr)!=null&&!(i&&!Et(e,t,d,c))&&!(s&&!e.matches(e.parent(d),s)))return d;f=e.parent(f)}return null}function Tt(e){let t=0,n=null,r=1;for(let i=0;i<e.length;i++){let o=e[i];if(o==="\\")i++;else if(n)o===n&&(n=null);else if(o==='"'||o==="'")n=o;else if(o==="["||o==="(")t++;else if(o==="]"||o===")")t>0&&t--;else if(t===0&&o===">")r++;else{if(t===0&&(o==="+"||o==="~"))return null;if(t===0&&/\s/.test(o)){if(!wt(e,i))return null;for(;i+1<e.length&&/\s/.test(e[i+1]);)i++}}}return r}function wt(e,t){let n=t;for(;n<e.length&&/\s/.test(e[n]);)n++;let r=t>0?e[t-1]:"",i=n<e.length?e[n]:"";return je(r)||je(i)}function je(e){return e===">"||e==="+"||e==="~"}function Et(e,t,n,r){if(r===null)return!0;let i=n;for(let s=0;s<r;s++)if(i=e.parent(i),!i)return!1;let o=e.prop(t,"tagName");if(!o)return!0;let l=e.prop(i,"tagName");if(!l||String(l).toLowerCase()!==String(o).toLowerCase())return!1;let c=new Set($e(e,i));return $e(e,t).every(s=>c.has(s))}function $e(e,t){let n=e.attr(t,"class");return n?String(n).split(/\s+/).filter(Boolean):[]}function Ot(e,t,n,r,i,o){let l=e.parent(r);if(l&&St(e,t,l)&&!De(e,l,o))return l;let c=he(n);if(!c)throw new N(i.path,`the list selector "${n}" names no container to hold the new rows \u2014 write it as "container > row" (for example "ol.comments > li") so the cloned row lands in the list`);let f=(c===":scope"?e.prop(t,"tagName")?[t]:[]:e.find(t,c,o)).filter(u=>!De(e,u,o));if(f.length===0)throw new N(i.path,`no container matching "${c}" inside this context to hold the new rows`);if(f.length>1)throw new N(i.path,`"${c}" matches ${f.length} containers inside this context, so the new rows have no single destination`);return f[0]}function St(e,t,n){let r=n;for(;r;){if(e.sameNode(r,t))return!0;r=e.parent(r)}return e.parent(t)?!1:e.find(t,"*",{includeRulesTag:!0,templateAttr:null}).some(i=>e.sameNode(i,n))}var _e=["no-data","editor-ui"];function De(e,t,n){let r=t;for(;r;){if(n.templateAttr&&e.attr(r,n.templateAttr)!=null||_e.some(o=>e.attr(r,o)!=null))return!0;let i=e.attr(r,"clay");if(i&&i.split(/\s+/).some(o=>_e.includes(o)))return!0;r=e.parent(r)}return!1}function xt(e,t,n,r,i){let o=e.children(t),l=o.map(s=>e.identity(s)),c=!1;r.forEach((s,f)=>{let u=e.identity(s),d=n+f;if(l[d]===u)return;if(!i[f]){let w=l.indexOf(u);w!==-1&&(l.splice(w,1),o.splice(w,1))}let p=Math.min(d,o.length);p<o.length?e.insertBefore(o[p],s):o.length?c?e.insertAfter(o[o.length-1],s):(e.insertAt(t,s,d),c=!0):e.insertAt(t,s,0),l.splice(p,0,u),o.splice(p,0,s)})}function bt(e,t){if(t.length<=1)return!0;let n=e.parent(t[0]);if(!n)return!1;let r=new Map(e.children(n).map((o,l)=>[e.identity(o),l])),i=[];for(let o of t){let l=r.get(e.identity(o));if(l===void 0)return!1;i.push(l)}return i.sort((o,l)=>o-l),i[i.length-1]-i[0]===i.length-1}function Rt(e,t,n,r,i){let o=null,l=i;for(let c=0;c<t.length;c++){if(!n[c]){o=t[c];continue}let s=o?e.parent(o):r;if(!s)continue;let f=o?We(e,s,o)+1:l++;e.insertAt(s,t[c],f),o=t[c]}}function L(e,t,n,r,i={}){if(Object.prototype.hasOwnProperty.call(i,"exclude")&&e.semanticExclude===!1)throw new Error("This adapter does not support semantic exclude queries; omit exclude or use the DOM adapter.");let o=[];if(ye(n,r,[],o),o.length)throw new H(o);ne(e,t,n,r,{depth:0,path:[]},i)}function ne(e,t,n,r,i,o={}){if(i.depth>j)throw new k(i.path);if(r===void 0)return t;if(typeof n=="string")return Nt(e,t,n,r,i,o);if(Array.isArray(n)){let[l,c]=n;return me(e,t,l,c,r,i,ne,o),t}if(typeof n=="object"&&n!==null){for(let[l,c]of Object.entries(n)){let s=ne(e,t,c,r==null?r:r[l],{depth:i.depth+1,path:[...i.path,l]},o);s&&s!==t&&(t=s)}return t}return t}function Nt(e,t,n,r,i,o){if(n.endsWith("[]")){let s=n.slice(0,-2);return me(e,t,s,null,r,i,ne,o),t}if(n.startsWith("@"))return Be(e,t,n.slice(1),r);let l=b(n);if(l!==-1){let s=n.slice(0,l),f=n.slice(l+1),u=s?e.find(t,s,o):[t];return u.length===0||Be(e,u[0],f,r),t}if(n===".")return ve(e,t,r),t;let c=e.find(t,n,o);return c.length===0||ve(e,c[0],r),t}function ve(e,t,n){let r=n==null?"":String(n);e.text(t)!==r&&e.text(t,r)}function Ct(e,t,n,r){if(e.styleVar){e.styleVar(t,n,r);return}te(e,t,n,r)}function Be(e,t,n,r){if(C(n))return Ct(e,t,n,r==null?"":String(r).trim()),t;if(v.has(n)){let i=e.prop(t,n);if(i===r||i!=null&&r!=null&&String(i)===String(r))return t;throw new q(n)}if(n==="outerHTML"){let i=r==null?"":String(r);return e.replaceWith(t,i)}if(le.has(n)){let i=ce(n,r);return e.prop(t,n)!==i&&e.prop(t,n,i),t}if(r==null)e.attr(t,n)!=null&&e.removeAttr(t,n);else{let i=String(r);e.attr(t,n)!==i&&e.attr(t,n,i)}return t}function ye(e,t,n,r){if(t!==void 0){if(typeof e=="string"){if(e.endsWith("[]")){Array.isArray(t)?t.forEach((i,o)=>{typeof i=="object"&&i!==null&&r.push({path:z([...n,o]),expected:"scalar",got:U(i)})}):r.push({path:z(n),expected:"array",got:U(t)});return}t!==null&&typeof t=="object"&&r.push({path:z(n),expected:"scalar",got:U(t)});return}if(Array.isArray(e)){if(!Array.isArray(t)){r.push({path:z(n),expected:"array",got:U(t)});return}let i=e[1];t.forEach((o,l)=>ye(i,o,[...n,l],r));return}if(typeof e=="object"&&e!==null){if(t===null||Array.isArray(t)||typeof t!="object"){r.push({path:z(n),expected:"object",got:U(t)});return}for(let[i,o]of Object.entries(e))ye(o,t[i],[...n,i],r)}}}function U(e){return e===null?"null":Array.isArray(e)?"array":typeof e}function z(e){return e.join(".")}function ge(e){try{return JSON.parse(e)}catch(t){throw new I(`Invalid strict JSON: ${t.message}`,t)}}function F(e){try{return JSON.parse(e)}catch{}let t={BRACE_OPEN:"{",BRACE_CLOSE:"}",BRACKET_OPEN:"[",BRACKET_CLOSE:"]",COLON:":",COMMA:",",STRING:"STRING",SELECTOR:"SELECTOR",IDENTIFIER:"IDENTIFIER",NUMBER:"NUMBER",BOOLEAN:"BOOLEAN"};function n(i){let o=[],l=0;for(;l<i.length;){let c=i[l];if(/\s/.test(c)){l++;continue}if("{}".includes(c)){o.push({type:c,value:c}),l++;continue}if(c==="["){let d=!1,p=l+1;for(;p<i.length&&/\s/.test(i[p]);)p++;if(p<i.length&&/[a-zA-Z_]/.test(i[p])&&(d=!0),!d){o.push({type:c,value:c}),l++;continue}}if(c==="]"){o.push({type:c,value:c}),l++;continue}if(c===":"){o.push({type:t.COLON,value:c}),l++;continue}if(c===","){o.push({type:t.COMMA,value:c}),l++;continue}if(c==='"'||c==="'"){let d=c,p=l+1;for(;p<i.length&&i[p]!==d;)i[p]==="\\"&&p++,p++;o.push({type:t.STRING,value:i.substring(l+1,p),quoted:!0,sourceQuote:d}),l=p+1;continue}let s=l,f;for(;s<i.length&&!/[{},]/.test(i[s]);)if(i[s]===":"){let d=[":first",":last",":nth-child",":nth-of-type",":first-child",":last-child",":first-of-type",":last-of-type",":only-child",":only-of-type",":hover",":focus",":active",":visited",":disabled",":enabled",":checked",":empty",":root",":target",":not",":before",":after",":nth-last-child",":nth-last-of-type"],p=!1;for(let w of d){let a=w.substring(1);if(i.substring(s+1,s+1+a.length)===a){p=!0,s+=a.length;break}}if(!p)break}else if(i[s]==="["){for(s++;s<i.length&&i[s]!=="]";){if(i[s]==='"'||i[s]==="'"){let d=i[s];for(s++;s<i.length&&i[s]!==d;)i[s]==="\\"&&s++,s++}s++}s<i.length&&i[s]==="]"&&s++}else s++;f=i.substring(l,s);let u=t.IDENTIFIER;/^-?\d+(\.\d+)?$/.test(f)?u=t.NUMBER:f==="true"||f==="false"||f==="null"?u=t.BOOLEAN:/^[.#@\[]|[.#@\[]| /.test(f)&&(u=t.SELECTOR),o.push({type:u,value:f,quoted:!1}),l=s}return o}function r(i){let o="";for(let l=0;l<i.length;l++){let c=i[l];if("{}".includes(c.type)||"[]".includes(c.type)){o+=c.value;continue}if(c.type===t.COLON){o+=c.value;continue}if(c.type===t.COMMA){let s=i[l+1];if(s&&(s.type==="}"||s.type==="]"))continue;o+=c.value;continue}if(c.type===t.STRING&&c.quoted){let s=c.value;c.sourceQuote==="'"&&(s=s.replace(/\\'/g,"'"),s=s.replace(/(\\*)"/g,(f,u)=>u.length%2===0?u+'\\"':f)),o+=`"${s}"`;continue}if(c.type===t.NUMBER||c.type===t.BOOLEAN){o+=c.value;continue}if(c.type===t.SELECTOR||c.type===t.IDENTIFIER){o+=`"${c.value}"`;continue}o+=`"${c.value}"`}return o}try{let i=n(e),o=r(i);return JSON.parse(o)}catch(i){throw new I("Invalid extraction rules syntax: "+i.message,i)}}var Pt="1",He=/^[a-zA-Z0-9_-]+$/;function _(e,t,n){let r;if(n===void 0)r="script[data-rules-name]";else{if(typeof n!="string"||!He.test(n))throw new Error(`hyper-html-api: invalid rules token ${JSON.stringify(n)} (must match ${He})`);r=`script[data-rules-name~="${n}"]`}let i=e.find(t,r,{includeRulesTag:!0});if(i.length===0)return null;n!==void 0&&i.length>1&&console.warn(`hyper-html-api: ${i.length} rules tags match data-rules-name~="${n}"; using the first.`);let o=i[0],l=e.attr(o,"data-rules-version");if(l!==Pt)throw new B(l);return{rules:F(e.text(o)),tagNode:o}}var re=Object.freeze({data:Object.freeze({tokens:["no-data"],bundles:["editor-ui"]}),save:Object.freeze({tokens:["no-save"],bundles:["editor-ui"]}),snapshot:Object.freeze({tokens:["no-snapshot"],bundles:["editor-ui"]}),watch:Object.freeze({tokens:["no-watch"],bundles:["editor-ui"]}),undo:Object.freeze({tokens:["no-undo"],bundles:["editor-ui"]}),history:Object.freeze({tokens:[],bundles:["editor-ui"]})}),Mt=Object.freeze({"editor-ui":Object.freeze(["no-data","no-save","no-snapshot","no-watch","no-undo"])}),qe=Object.freeze(["no-save","no-snapshot","no-trigger-autosave","no-dirty","no-watch","no-undo","no-data","freeze","editor-ui","live"]);function K(e,t){if(!e||e.nodeType!==1)return!1;let n=e.getAttribute?.("clay");return!!(n&&n.split(/\s+/).includes(t)||e.hasAttribute?.(t))}function Ae(e,t){if(K(e,t))return!0;for(let[n,r]of Object.entries(Mt))if(r.includes(t)&&K(e,n))return!0;return!1}function J(e){let t=re[e];if(!t)throw new Error(`Unknown region capability: ${e}`);return[...t.tokens,...t.bundles].flatMap(n=>[`[clay~="${n}"]`,`[${n}]`]).join(", ")}function kt(e,t){let n=e&&e.nodeType===1?e:e?.parentElement;for(;n&&n.nodeType===1;){let r=re[t];if(!r)throw new Error(`Unknown region capability: ${t}`);if(r.tokens.some(i=>Ae(n,i))||r.bundles.some(i=>K(n,i)))return n;n=n.parentElement}return null}function Ve(e,t){return!!kt(e,t)}var ie=Object.freeze({refusedRuleForms:["innerHTML","outerHTML"],refusedTargets:["script","style","template","noscript","iframe","object","embed","xmp","plaintext","noembed","noframes","meta","link","base","animate","set","animatemotion","animatetransform"],refusedAttributes:["style","srcdoc","is","http-equiv","sandbox","allow","nonce","integrity","charset","htmlclaytoken","htmlclayid","data-rules-name","data-rules-version","clay","contenteditable",...qe],refusedAttributePrefixes:["on"],urlAttributes:["href","src","srcset","action","formaction","poster","cite","data","ping","background","longdesc","usemap","xlink:href","manifest","codebase","icon"],refusedSchemes:["javascript","vbscript","data"],customPropertyValues:Object.freeze({maxLength:200,refusedCharacters:[";","{","}","<",">","\\"],refusedFunctions:["url","src","image","image-set","-webkit-image-set","cross-fade","element","expression","paint"]})}),Lt=new Set(["textContent","innerText"]);function Ue(e){let n=String(e).replace(/^[\u0000- ]+|[\u0000- ]+$/g,"").replace(/[\t\n\r]/g,"").match(/^([a-zA-Z][a-zA-Z0-9+.-]*):/);return n?n[1].toLowerCase():null}var It=/^[^\t\n\f\r "'>/=\u0000-\u001f\u007f]+$/;function ze(e,t,n=ie){if(!It.test(String(e)))return`attribute name ${JSON.stringify(String(e))} is not valid`;let r=String(e).toLowerCase();if(n.refusedAttributePrefixes.some(i=>r.startsWith(i)))return`attribute "${r}" can run script`;if(n.refusedAttributes.includes(r))return`attribute "${r}" is not content`;if(n.urlAttributes.includes(r)&&t!=null){let i=r==="srcset"?String(t).split(",").map(o=>o.trim().split(/\s+/)[0]).filter(Boolean):[String(t)];for(let o of i){let l=Ue(o);if(l&&n.refusedSchemes.includes(l))return`"${l}:" URLs are not allowed in "${r}"`}}return null}function Te(e,t){let n=e.prop(t,"tagName");return n?String(n).toLowerCase():""}function jt(e,t){let n=Te(e,t)||"node",r=e.attr(t,"id");return r?`<${n}#${r}>`:`<${n}>`}function $t(e,t,n){let r=t;for(;r;){let i=Te(e,r);if(i&&n.refusedTargets.includes(i))return i;r=e.parent(r)}return null}function Fe(e,t){return e.find(t,"script[data-rules-name]",{includeRulesTag:!0,templateAttr:null}).length>0}function _t(e,t){return Te(e,t)==="script"&&e.attr(t,"data-rules-name")!=null?!0:Fe(e,t)}function Dt(e){if(/[\u0000-\u001f\u007f]/.test(e))return"control characters are not allowed in a custom property value";let t=[],n=null;for(let r=0;r<e.length;r++){let i=e[r];if(n){i===n&&(n=null);continue}if(i==='"'||i==="'")n=i;else{if(i==="/"&&e[r+1]==="*")return"comments are not allowed in a custom property value";if(i==="(")t.push(")");else if(i==="[")t.push("]");else if((i===")"||i==="]")&&t.pop()!==i)return`"${i}" does not close anything in this custom property value`}}return n?"a custom property value must close its quotes":t.length?"a custom property value must close its brackets":null}function Ke(e,t=ie){let n=t.customPropertyValues,r=String(e);if(r.length>n.maxLength)return`custom property values are limited to ${n.maxLength} characters`;let i=n.refusedCharacters.find(s=>r.includes(s));if(i)return`${JSON.stringify(i)} is not allowed in a custom property value`;let o=Dt(r);if(o)return o;let l=r.toLowerCase(),c=n.refusedFunctions.find(s=>new RegExp(`(^|[^a-z0-9_-])${s.replace(/[-]/g,"\\-")}\\s*\\(`).test(l));return c?`"${c}()" is not allowed in a custom property value`:null}function oe(e,t=ie){let n=[],r=(s,f)=>(n.push({target:jt(e,s),reason:f}),!1),i=s=>{let f=$t(e,s,t);return f?r(s,`inside <${f}>, which is not content`):!0},o=s=>i(s)?Fe(e,s)?r(s,"a text write here would delete the data rules tag"):!0:!1,l=(s,f,u)=>{if(!i(s))return!1;let d=ze(f,u,t);return d?r(s,d):!0};return{...e,text(s,f){if(f===void 0)return e.text(s);o(s)&&e.text(s,f)},attr(s,f,u){if(u===void 0)return e.attr(s,f);l(s,f,u)&&e.attr(s,f,u)},removeAttr(s,f){l(s,f,null)&&e.removeAttr(s,f)},styleVar(s,f,u){if(($(e.attr(s,"style"),f)??"")!==u&&i(s)){if(!C(f))return r(s,`"${f}" is not a custom property`);if(u!==""){let d=Ke(u,t);if(d)return r(s,d)}te(e,s,f,u)}},prop(s,f,u){if(u===void 0)return e.prop(s,f);if(t.refusedRuleForms.includes(f))return r(s,`"@${f}" writes HTML, only text is allowed`);if(Lt.has(f)){o(s)&&e.prop(s,f,u);return}l(s,f==="className"?"class":f,u)&&e.prop(s,f,u)},remove(s){if(_t(e,s)){r(s,"removing this would delete the data rules tag");return}e.remove(s)},replaceWith(s,f){return f===e.prop(s,"outerHTML")||r(s,'"@outerHTML" writes HTML, only text is allowed'),s},refusals:n,assertClean(){if(n.length)throw new V(n.slice())}}}function X(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Je(e){return e.reduce((t,n)=>typeof n=="number"?`${t}[${n}]`:t?`${t}.${n}`:n,"")}function we(e,t,n,r,i={}){let o=[],l=[];function c(f,u,d){if(Array.isArray(f)){let[,p]=f;if(!Array.isArray(u)||!X(p))return;u.forEach((w,a)=>c(p,w,[...d,a]));return}if(!(!X(f)||!X(u)))for(let p of Object.keys(u))Object.prototype.hasOwnProperty.call(f,p)?c(f[p],u[p],[...d,p]):o.push(Je([...d,p]))}function s(f,u,d,p){if(d!==void 0){if(typeof u=="string"){if(u.endsWith("[]")||u==="."||u.startsWith("@"))return;let w=b(u),a=w===-1?u:u.slice(0,w);if(!a)return;e.find(f,a,i).length===0&&l.push({path:Je(p),selector:a});return}if(!Array.isArray(u)&&X(u)&&X(d))for(let[w,a]of Object.entries(u))s(f,a,d[w],[...p,w])}}return c(n,r,[]),s(t,n,r,[]),{unknownKeys:o,unmatched:l}}function Ee(e,t,n){if(n&&typeof n=="object")return{rules:n,tagNode:null};if(typeof n=="string"){let r=t&&t.ownerDocument?t.ownerDocument:t;return _(e,r,n)}return null}var vt=/:(?:focus(?:-within|-visible)?|hover|active|visited|defined)\b/i;function Bt(e,t){if(!/^(INPUT|TEXTAREA|SELECT|OPTION)$/.test(e.tagName||""))return;let n=(e.getAttribute?.("type")||"").toLowerCase();"value"in e&&"value"in t&&e.tagName!=="OPTION"&&n!=="checkbox"&&n!=="radio"&&n!=="file"&&(t.value=e.value),e.tagName==="INPUT"&&(n==="checkbox"||n==="radio")&&(t.checked=e.checked),e.tagName==="OPTION"&&(t.selected=e.selected),"indeterminate"in e&&"indeterminate"in t&&(t.indeterminate=e.indeterminate)}function Xe(e,t,n,r){if(r)return!!e.closest?.(t);let i=e;for(;i?.nodeType===1;){if(i.matches(t))return!0;if(i===n)break;i=i.parentElement}return!1}function Ye(e,t,n,r,i,o){return(o?Ve(e,t):Xe(e,n,i,!1))||!!(r&&(o&&e!==i?e.matches(r):Xe(e,r,i,o)))}function Ht(e,t){let n=re[t];return n.tokens.some(r=>Ae(e,r))||n.bundles.some(r=>K(e,r))}var qt=new Set(["INPUT","TEXTAREA","SELECT","OPTION"]);function Ge(e,t,n,r){if(e.nodeType===1&&r(e)){n.dropped.push(t);return}n.cloneToLive.set(t,e),n.liveToClone.set(e,t);let i=e,o=t;if(e.nodeType===1){if(qt.has(e.tagName)&&n.controls.push(e,t),e.tagName==="TEMPLATE"){for(;t.firstChild;)t.removeChild(t.firstChild);i=e.content,o=t.content,n.cloneToLive.set(o,i),n.liveToClone.set(i,o)}}else if(e.nodeType!==11)return;let l=o.firstChild;for(let c=i.firstChild;c&&l;c=c.nextSibling)Ge(c,l,n,r),l=l.nextSibling}function Y(e,{capability:t="data",exclude:n=null,inherit:r=!0,provenance:i=null}={}){if(!e)throw new TypeError("createContentView requires a DOM context");let o=e.nodeType===9?e:e.ownerDocument;if(!o?.implementation?.createHTMLDocument)throw new TypeError("createContentView requires an HTML DOM implementation");let l=o.implementation.createHTMLDocument(""),c=i||new WeakMap,s=new WeakMap,f=e.nodeType===9?e.documentElement:e;n&&l.documentElement.matches(n);let u=J(t),d=r?a=>Ht(a,t)||!!(n&&a.matches(n)):a=>Ye(a,t,u,n,f,!1),p=null;if(f.nodeType!==1||!Ye(f,t,u,n,f,r)){p=l.importNode(f,!0);let a={cloneToLive:c,liveToClone:s,dropped:[],controls:[]};Ge(f,p,a,d);for(let m of a.dropped)m.remove();for(let m=0;m<a.controls.length;m+=2)Bt(a.controls[m],a.controls[m+1])}e.nodeType===9&&p&&(l.replaceChild(p,l.documentElement),s.set(e,l),c.set(l,e));let w=a=>{if(vt.test(a))throw new Error(`Filtered content queries do not support stateful selector: ${a}`)};return{root:p,document:l,capability:t,selector:J(t),cloneToLive:c,liveToClone:s,original(a){return c.get(a)||null},cloneOf(a){return s.get(a)||null},query(a,m=p){return w(a),Array.from(m.querySelectorAll(a),g=>c.get(g)||g)},text(a=p){return(a===p?p:s.get(a))?.textContent||""},html(a=p){return(a===p?p:s.get(a))?.innerHTML??""},clone(a=p){let m=a===p?p:s.get(a);return m?l.importNode(m,!0):null}}}function Qe(e){return e&&e.nodeType===1&&e.tagName==="SCRIPT"&&e.hasAttribute&&e.hasAttribute("data-rules-name")}function Vt(e){return e?(e.nodeType===9||e.nodeType===11,e):null}function Ze(e,t,n){!e||e.nodeType!==1||(t==="value"&&e.tagName==="INPUT"?e.value=n===null?"":n:t==="checked"&&e.tagName==="INPUT"?e.checked=n!==null:t==="selected"&&e.tagName==="OPTION"&&(e.selected=n!==null))}function et(e,t){e&&e.tagName==="TEXTAREA"&&(e.value=t)}function tt(e){if(!e||e.nodeType!==1)return;let t=[e,...e.querySelectorAll?e.querySelectorAll("textarea, input, option"):[]];for(let n of t)if(n.tagName==="TEXTAREA")n.value=n.defaultValue;else if(n.tagName==="INPUT"){let r=n.type;r!=="file"&&r!=="checkbox"&&r!=="radio"&&(n.value=n.defaultValue),n.checked=n.defaultChecked}else n.tagName==="OPTION"&&(n.selected=n.defaultSelected)}var S={semanticExclude:!0,find(e,t,n={}){let r=Vt(e);if(!r||!r.querySelectorAll)return[];let i=Array.from(r.querySelectorAll(t));n.includeRulesTag||(i=i.filter(c=>!Qe(c)));let o=[];n.skip&&o.push(n.skip);let l=n.templateAttr===null?null:n.templateAttr||"cms-template";if(l&&o.push("["+l+"]"),o.length){let c=o.join(", ");i=i.filter(s=>!s.closest||!s.closest(c))}return i},parent(e){return e?e.parentElement:null},children(e){return e?Array.from(e.children):[]},matches(e,t){return!!(e&&e.matches)&&e.matches(t)},text(e,t){if(t===void 0)return(e.textContent||"").trim();e.textContent=t,et(e,t)},attr(e,t,n){if(n===void 0)return e.hasAttribute&&e.hasAttribute(t)?e.getAttribute(t):null;e.setAttribute(t,n),Ze(e,t,n)},removeAttr(e,t){e&&e.removeAttribute&&e.removeAttribute(t),Ze(e,t,null)},prop(e,t,n){if(n===void 0){let r=e?e[t]:void 0;return r!==void 0?r:null}e[t]=n},clone(e){let t=e.cloneNode(!0);return tt(t),t},insertAt(e,t,n){let r=e.children[n]||null;e.insertBefore(t,r)},insertBefore(e,t){e.parentNode.insertBefore(t,e)},insertAfter(e,t){e.parentNode.insertBefore(t,e.nextSibling)},identity(e){return e||null},remove(e){e&&e.parentNode&&e.parentNode.removeChild(e)},replaceWith(e,t){if(!e||!e.parentNode)throw new Error("dom.replaceWith: node has no parent");let r=e.ownerDocument.createElement("template");r.innerHTML=t;let i=r.content.firstElementChild;if(!i)throw new Error("dom.replaceWith: html did not parse to an element");return e.parentNode.replaceChild(i,e),i},stripIds(e){let t=0;return e.id&&(e.removeAttribute("id"),t++),(e.querySelectorAll?e.querySelectorAll("[id]"):[]).forEach(r=>{r.removeAttribute("id"),t++}),t},sameNode(e,t){return e===t}};function M(e,t={}){if(t.exclude===null)return S;let n=[J("data"),t.exclude].filter(Boolean).join(", "),r=e.nodeType===9?e:e.ownerDocument||e,i=e.nodeType===9?e.documentElement:e;if(!t._write&&!i?.matches?.(n)&&!i?.querySelector?.(n)&&!r?.querySelector?.(n))return S;let o=e.nodeType===9||!e.isConnected?e:e.ownerDocument,l=e.nodeType===9?e:e.ownerDocument,c=null,s=()=>c||(c=Y(o,{capability:"data",exclude:t.exclude||null})),f=a=>{let m=s();return a===e?m.cloneOf(e):m.cloneOf(a)||a},u=a=>c?.original(a)||a,d=(a,m)=>{s().liveToClone.set(a,m),s().cloneToLive.set(m,a);let g=a.childNodes||[],h=m.childNodes||[];for(let y=0;y<Math.min(g.length,h.length);y++)d(g[y],h[y])},p=(a,m,g,h)=>{let y=Array.from(a.childNodes).filter(E=>c.cloneOf(E)),T=y[0];for(;T&&y.includes(T);)T=T.nextSibling;for(let E of y)E.remove();if(g==="innerHTML"){let E=l.createElement("template");E.innerHTML=h;for(let W of Array.from(E.content.childNodes))a.insertBefore(W,T||null)}else a.insertBefore(l.createTextNode(h),T||null),et(a,h);let x=Y(a,{capability:"data",exclude:t.exclude||null});m.replaceChildren(...Array.from(x.root?.childNodes||[]));let O=E=>{let W=x.original(E);W&&(c.liveToClone.set(W,E),c.cloneToLive.set(E,W));for(let ot of Array.from(E.childNodes||[]))O(ot)};for(let E of Array.from(m.childNodes))O(E)},w={...S,find(a,m,g={}){let h=f(a);if(!h?.querySelectorAll)return[];let y=s().query(m,h);g.includeRulesTag||(y=y.filter(x=>!Qe(x)));let A=[];g.skip&&A.push(g.skip);let T=g.templateAttr===null?null:g.templateAttr||"cms-template";if(T&&A.push(`[${T}]`),A.length){let x=A.join(", ");y=y.filter(O=>!O.closest?.(x))}return y},parent(a){let m=f(a)?.parentElement;return m?u(m):null},children(a){return Array.from(f(a)?.children||[],u)},text(a,m){if(m===void 0){let y=u(a);return!y?.matches?.(n)&&!y?.querySelector?.(n)?S.text(y):(f(a)?.textContent||"").trim()}let g=u(a);if(!g?.matches?.(n)&&!g?.querySelector?.(n)&&!c){S.text(g,m);return}let h=s().cloneOf(g);h?p(g,h,"textContent",m):S.text(g,m)},attr(a,m,g){let h=u(a);if(g===void 0)return S.attr(h,m);S.attr(h,m,g);let y=c?.cloneOf(h);y&&(S.attr(y,m,g),Y(h,{capability:"data",exclude:t.exclude||null}).root===null&&(y.remove(),c.liveToClone.delete(h),c.cloneToLive.delete(y)))},removeAttr(a,m){let g=u(a);S.removeAttr(g,m);let h=c?.cloneOf(g);h&&S.removeAttr(h,m)},prop(a,m,g){let h=u(a);if(g===void 0)return m==="innerHTML"||m==="outerHTML"||m==="textContent"||m==="innerText"?S.prop(f(h),m):S.prop(h,m);let y=m==="innerHTML"||m==="textContent"||m==="innerText",A=y?s().cloneOf(h):c?.cloneOf(h);A&&y?p(h,A,m,g):(S.prop(h,m,g),A&&S.prop(A,m,g))},clone(a){let m=f(a);if(m===a)return S.clone(a);let g=l.importNode(m,!0);return tt(g),g},insertAt(a,m,g){let h=u(a),A=w.children(h)[g]||(()=>{for(let O=h.children.length-1;O>=0;O--){let E=h.children[O];if(s().cloneOf(E))return E.nextElementSibling}return h.firstElementChild})(),T=u(m);h.insertBefore(T,A||null);let x=s().cloneOf(h);if(x){let O=s().cloneOf(T);O||(O=l.importNode(T,!0),d(T,O));let E=Array.from(x.children);x.insertBefore(O,E[g]||null)}},insertBefore(a,m){let g=u(a),h=u(m);g.parentNode.insertBefore(h,g);let y=s().cloneOf(g.parentNode);if(y){let A=s().cloneOf(h);A||(A=l.importNode(h,!0),d(h,A));let T=s().cloneOf(g);T?T.before(A):y.appendChild(A)}},insertAfter(a,m){let g=u(a),h=u(m);g.parentNode.insertBefore(h,g.nextSibling);let y=s().cloneOf(g.parentNode);if(y){let A=s().cloneOf(h);A||(A=l.importNode(h,!0),d(h,A));let T=s().cloneOf(g);T?T.after(A):y.appendChild(A)}},identity(a){return u(a)||null},remove(a){let m=u(a),g=s().cloneOf(m);S.remove(m),g&&S.remove(g)},replaceWith(a,m){let g=u(a),h=s().cloneOf(g),y=S.replaceWith(g,m);if(h){let A=Y(y,{capability:"data",exclude:t.exclude||null});if(!A.root)h.remove();else{h.replaceWith(A.root);let T=x=>{let O=A.original(x);O&&(c.liveToClone.set(O,x),c.cloneToLive.set(x,O));for(let E of Array.from(x.childNodes||[]))T(E)};T(A.root)}}return y}};return w}var G=S;var se={extract:(e,t,n={})=>P(M(e,n),e,t,n),apply:(e,t,n,r={})=>L(M(e,{...r,_write:!0}),e,t,n,r),findRulesIn:(e,t)=>_(G,e,t),findRules:(e,t)=>Ee(G,e,t),bind:(e,t,n={})=>{let r=Ee(G,e,t);if(!r){let i=typeof t=="string"?`data-rules-name~="${t}"`:"the provided rules object";throw new Error(`hyper-html-api: could not resolve rules for ${i}`)}return{...r,get:()=>P(M(e,n),e,r.rules,n),set:i=>L(M(e,{...n,_write:!0}),e,r.rules,i,n)}},parseStrict:ge,parseRelaxed:F,ruleAttrIndex:b,splitRule:ae,errors:R,DOM_PROPERTIES:Z},Oe=e=>!!e&&typeof e.nodeType=="number";function nt(e){let t=e&&e.ownerDocument?e.ownerDocument:e,n=_(G,t,"api");if(!n)throw new R.NoRulesTag("api");return n.rules}function Ut(e){if(e.nodeType===9)return e;let t=e.ownerDocument?.documentElement;if(t?.contains(e))return t;let n=e;for(;n.parentNode;)n=n.parentNode;return n}function zt(e){if(e.nodeType!==11||!e.host)return e.cloneNode(!0);let t=e.ownerDocument.createDocumentFragment();for(let n of e.childNodes)t.appendChild(n.cloneNode(!0));return t}function Ft(e,t){let n=[];for(;t!==e;){let r=t.parentNode;n.push(Array.prototype.indexOf.call(r.childNodes,t)),t=r}return n.reverse()}function Kt(e,t){return t.reduce((n,r)=>n.childNodes[r],e)}function D(e,t){let n=e.querySelectorAll?Array.from(e.querySelectorAll(t)):[];return e.matches?.(t)&&n.unshift(e),n}function Jt(e,t){let n=D(e,"option"),r=D(t,"option");n.forEach((s,f)=>r[f].selected=s.selected);let i=D(e,"input"),o=D(t,"input");i.forEach((s,f)=>{let u=s.type.toLowerCase();u!=="file"&&(o[f].value=s.value),(u==="checkbox"||u==="radio")&&(o[f].checked=s.checked)});let l=D(e,"textarea"),c=D(t,"textarea");l.forEach((s,f)=>c[f].value=s.value)}function Se(e,t){if(t!==void 0){if(typeof e=="string"){if(e.endsWith("[]"))return;let n=e.startsWith("@")?0:b(e);if(n===-1)return;let r=e.slice(n+1);if(v.has(r))throw new R.RuleTargetReadOnly(r);return}if(Array.isArray(e)){if(!Array.isArray(t))return;t.forEach(n=>Se(e[1],n));return}if(e&&typeof e=="object"&&t&&typeof t=="object"&&!Array.isArray(t))for(let[n,r]of Object.entries(e))Se(r,t[n])}}function Xt(e,t,n){let r={templateAttr:"cms-template"},i=Ut(e),o=Ft(i,e),l=zt(i);Jt(i,l);let c=Kt(l,o),s=M(l,{...r,_write:!0}),f=we(s,c,t,n,r);if(f.unknownKeys.length||f.unmatched.length)throw new R.WriteRejected(f.unknownKeys,f.unmatched);let u=oe(s);L(u,c,t,n,r),u.assertClean(),Se(t,n);let d=oe(M(i,{...r,_write:!0}));L(d,e,t,n,r),d.assertClean()}function Yt(e){if(!(e instanceof Error))return e;let t=e.name||"Error";try{e.code=t}catch{Object.defineProperty(e,"code",{value:t,configurable:!0,enumerable:!0})}return e instanceof R.WriteRefused?e.details=e.refusals:e instanceof R.WriteRejected?e.details={unknownKeys:e.unknownKeys,unmatched:e.unmatched}:e instanceof R.ShapeMismatch?e.details=e.mismatches:Array.isArray(e.path)?e.details={path:e.path}:typeof e.target=="string"?e.details={target:e.target}:e.token!==void 0?e.details={token:e.token}:e.version!==void 0?e.details={version:e.version}:e.details={},e}function rt(e,t){let n=Oe(e)?e:document,r=Oe(e)?t:e;return r===void 0?P(M(n),n,nt(n)):se.bind(n,r).get()}function it(e,t,n){try{if(!Oe(e))throw new Error("hyper-html-api: applyData(root, data, source?) needs a DOM root as the first argument.");let r=n===void 0?nt(e):se.bind(e,n).rules;Xt(e,r,t)}catch(r){throw Yt(r)}return e}var Gt={engine:se,extractData:rt,applyData:it},fr=Gt;export{it as applyData,fr as default,se as engine,rt as extractData};
1
+ var lt=Object.defineProperty;var ct=(e,t)=>{for(var n in t)lt(e,n,{get:t[n],enumerable:!0})};var Q=["textContent","innerText","innerHTML","outerHTML","value","checked","selected","disabled","readOnly","type","tagName","nodeName","nodeType","nodeValue","childElementCount","id","className","classList","baseURI","offsetWidth","offsetHeight","clientWidth","clientHeight","scrollWidth","scrollHeight","dataset","currentSrc","duration","paused","title","documentURI","contentType"],ee=new Set(Q),ce=new Set(["textContent","innerText","innerHTML","value","checked","selected","disabled","readOnly","type","id","className","title"]),B=new Set(["tagName","nodeName","nodeType","nodeValue","childElementCount","classList","baseURI","documentURI","contentType","offsetWidth","offsetHeight","clientWidth","clientHeight","scrollWidth","scrollHeight","currentSrc","duration","paused","dataset"]),be=new Set(["checked","selected","disabled","readOnly","paused"]);function fe(e,t){return t==null?be.has(e)?!1:"":be.has(e)?t==="false"?!1:!!t:t}var R={};ct(R,{EmptyListInsert:()=>C,MAX_RULE_DEPTH:()=>$,MaxRuleDepthExceeded:()=>L,NoRulesTag:()=>ue,RuleTargetReadOnly:()=>V,RulesParseError:()=>j,ShapeMismatch:()=>q,UnknownRulesVersion:()=>H,WriteNotRoundTripped:()=>te,WriteRefused:()=>U,WriteRejected:()=>ae});var j=class extends Error{constructor(t,n){super(t),this.name="RulesParseError",this.cause=n}},H=class extends Error{constructor(t){super(`unknown rules version: ${t}. Library supports "1".`),this.name="UnknownRulesVersion",this.version=t}},$=20,L=class extends Error{constructor(t){super(`rule depth exceeded ${$} at path: ${t.join(".")}`),this.name="MaxRuleDepthExceeded",this.path=t}},q=class extends Error{constructor(t){super(`shape mismatch: ${t.length} field(s) failed validation`),this.name="ShapeMismatch",this.mismatches=t}},C=class extends Error{constructor(t,n){super(n?`cannot add items to empty list at "${t.join(".")}" \u2014 ${n}`:`cannot add items to empty list at "${t.join(".")}" \u2014 no sibling to clone as template. Seed the list with a hidden item first.`),this.name="EmptyListInsert",this.path=t}},V=class extends Error{constructor(t){super(`cannot write to read-only DOM property "${t}"`),this.name="RuleTargetReadOnly",this.target=t}},U=class extends Error{constructor(t){super(`write refused: ${t.length} write(s) broke the content-only policy`),this.name="WriteRefused",this.refusals=t}};function ft(e){return e.reduce((n,i)=>typeof i=="number"?`${n}[${i}]`:n?`${n}.${i}`:String(i),"")||"(root)"}var te=class extends Error{constructor(t){super(`write did not round-trip at "${ft(t)}"`),this.name="WriteNotRoundTripped",this.path=t}},ue=class extends Error{constructor(t){super(`no <script data-rules-name~="${t}"> rules tag in this document`),this.name="NoRulesTag",this.token=t}},ae=class extends Error{constructor(t,n){super(`write rejected: ${t.length} unknown key(s), ${n.length} rule(s) with no matching element`),this.name="WriteRejected",this.unknownKeys=t,this.unmatched=n}};function N(e){let t=0,n=null,i=-1;for(let r=0;r<e.length;r++){let o=e[r];o==="\\"?r++:n?o===n&&(n=null):o==='"'||o==="'"?n=o:o==="["||o==="("?t++:o==="]"||o===")"?t>0&&t--:o==="@"&&t===0&&(i=r)}return i}var Re="[*]";function b(e){let t=N(e),n=t===-1?e:e.slice(0,t),i=n.endsWith(Re),r={selector:i?n.slice(0,-Re.length):n,prop:t===-1?null:e.slice(t+1)||null};return i&&(r.all=!0),r}function he(e){let t=0,n=null,i=-1,r=!1;for(let o=0;o<e.length;o++){let l=e[o];l==="\\"?o++:n?l===n&&(n=null):l==='"'||l==="'"?n=l:l==="["||l==="("?t++:l==="]"||l===")"?t>0&&t--:t===0&&l===">"?i=o:t===0&&l===","&&(r=!0)}return r||i===-1||!ut(e,i+1)?null:e.slice(0,i).trim()||null}function ut(e,t){let n=t,i=e.replace(/\s+$/,"").length;for(;n<i&&/\s/.test(e[n]);)n++;let r=0,o=null;for(;n<i;n++){let l=e[n];if(l==="\\")n++;else if(o)l===o&&(o=null);else if(l==='"'||l==="'")o=l;else if(l==="["||l==="(")r++;else if(l==="]"||l===")")r>0&&r--;else if(r===0&&(l==="+"||l==="~"||/\s/.test(l)))return!1}return!0}var at=/^--[A-Za-z0-9_-]+$/;function P(e){return typeof e=="string"&&at.test(e)}function Ne(e){let t=[],n=[],i=null,r=0;for(let o=0;o<e.length;o++){let l=e[o];if(i){l==="\\"?o++:l===i&&(i=null);continue}if(l==="/"&&e[o+1]==="*"){let c=e.indexOf("*/",o+2);o=c===-1?e.length:c+1;continue}l==='"'||l==="'"?i=l:l==="("?n.push(")"):l==="["?n.push("]"):l==="{"?n.push("}"):(l===")"||l==="]"||l==="}")&&n[n.length-1]===l?n.pop():l===";"&&n.length===0&&(t.push(e.slice(r,o)),r=o+1)}return t.push(e.slice(r)),t}function ht(e){let t="",n=null;for(let i=0;i<e.length;i++){let r=e[i];if(n){t+=r,r==="\\"&&i+1<e.length?t+=e[++i]:r===n&&(n=null);continue}if(r==="/"&&e[i+1]==="*"){let o=e.indexOf("*/",i+2);i=o===-1?e.length:o+1,t+=" ";continue}(r==='"'||r==="'")&&(n=r),t+=r}return t}function Ce(e){e=ht(e);let t=e.indexOf(":");if(t===-1)return null;let n=e.slice(0,t).trim(),i=e.slice(t+1).trim(),r=/!\s*important\s*$/i.exec(i);return r&&(i=i.slice(0,r.index).trim()),{name:n,value:i,important:!!r}}function _(e,t){if(e==null)return null;let n=null;for(let i of Ne(String(e))){let r=Ce(i);!r||r.name!==t||(!n||r.important||!n.important)&&(n=r)}return n?n.value:null}function Pe(e,t,n){let i=e==null?"":String(e),r=n==null||n==="",o=Ne(i),l=o.map(Ce),c=l.some(h=>h&&h.name===t&&h.important),s=[],f=!1;o.forEach((h,p)=>{let T=l[p];if(!T||T.name!==t){s.push(h);return}if(r||f)return;let a=/^\s*/.exec(h)[0];s.push(`${a}${t}: ${n}${c?" !important":""}`),f=!0});let u=s.join(";");if(!r&&!f){let h=u.trimEnd();u=h===""?`${t}: ${n}`:`${h}${h.endsWith(";")?" ":"; "}${t}: ${n}`}return u.trim()===""?null:u}function ne(e,t,n,i){let r=e.attr(t,"style");if((_(r,n)??"")===i)return;let o=Pe(r,n,i);o==null?e.removeAttr(t,"style"):e.attr(t,"style",o)}function M(e,t,n,i={}){if(Object.prototype.hasOwnProperty.call(i,"exclude")&&e.semanticExclude===!1)throw new Error("This adapter does not support semantic exclude queries; omit exclude or use the DOM adapter.");return pe(e,t,n,{depth:0,path:[]},i)}function pe(e,t,n,i,r){if(i.depth>$)throw new L(i.path);if(typeof n=="string")return dt(e,t,n,i,r);if(Array.isArray(n)){let[o,l]=n,c=e.find(t,o,r);return Me(r,i,c),c.map((s,f)=>pe(e,s,l,{depth:i.depth+1,path:[...i.path,f]},r))}if(typeof n=="object"&&n!==null){let o={};for(let[l,c]of Object.entries(n))o[l]=pe(e,t,c,{depth:i.depth+1,path:[...i.path,l]},r);return o}return null}function dt(e,t,n,i,r){if(n.endsWith("[]")){let f=n.slice(0,-2),u=e.find(t,f,r);return Me(r,i,u),u.map(h=>e.text(h))}if(n.startsWith("@"))return de(e,t,n.slice(1));let o=N(n);if(o!==-1){let{selector:f,all:u}=b(n),h=n.slice(o+1),p=f?e.find(t,f,r):[t];return u&&r.allMatches?p.map(T=>de(e,T,h)):p.length===0?null:de(e,p[0],h)}if(n===".")return e.text(t);let{selector:l,all:c}=b(n),s=e.find(t,l,r);return c&&r.allMatches?s.map(f=>e.text(f)):s.length===0?null:e.text(s[0])}function Me(e,t,n){if(typeof e.onRowsRead=="function")try{e.onRowsRead(t.path.slice(),n)}catch(i){console.warn(`[hyper-html-api] onRowsRead threw at "${t.path.join(".")||"(root)"}"`,i)}}function de(e,t,n){if(P(n))return _(e.attr(t,"style"),n);if(ee.has(n)){let r=e.prop(t,n);return r==null?null:String(r)}let i=e.attr(t,n);return i??null}function Ie(e,t,n,i){let r=e.length,o=t.length,l=new Array(r).fill(-1);if(i){let d=new Set;for(let y=0;y<r;y++){let A=i[y];!(A>=0&&A<o)||d.has(A)||(l[y]=A,d.add(A))}}if(r===0||o===0)return l;let c=e.map(d=>ke(d,n)),s=t.map(d=>ke(d,n)),f=new Array(o).fill(!1);for(let d of l)d>=0&&(f[d]=!0);let u=new Map;s.forEach((d,y)=>{f[y]||u.set(d,u.has(d)?-1:y)});let h=new Map;c.forEach((d,y)=>{l[y]>=0||h.set(d,(h.get(d)||0)+1)}),c.forEach((d,y)=>{if(l[y]>=0||h.get(d)!==1)return;let A=u.get(d);A===void 0||A===-1||f[A]||(l[y]=A,f[A]=!0)});let p=[];for(let d=0;d<r;d++)l[d]<0&&p.push(d);let T=[];for(let d=0;d<o;d++)f[d]||T.push(d);if(p.length===0||T.length===0)return l;let a=r*o+1,m=pt(e,t,n),g=(d,y)=>m(d,y)*a+Math.abs(d-y);for(let[d,y]of mt(p,T,g))l[d]=y;return l}var je=e=>typeof e=="object"&&e!==null;function ke(e,t){if(!je(t))return e==null?" null":String(e);let n=Object.keys(t);return JSON.stringify(n.map(i=>{let r=JSON.stringify(e?.[i]);return r===void 0?" undef":r}))}function pt(e,t,n){if(!je(n))return(c,s)=>e[c]===t[s]?0:1;let i=Object.keys(n),r=c=>i.map(s=>JSON.stringify(c?.[s])),o=e.map(r),l=t.map(r);return(c,s)=>{let f=o[c],u=l[s],h=0;for(let p=0;p<i.length;p++)f[p]!==u[p]&&h++;return h}}function mt(e,t,n){return e.length<=t.length?Le(e,t,n,!1):Le(t,e,(i,r)=>n(r,i),!0)}function Le(e,t,n,i){let r=e.length,o=t.length,l=[];for(let h=0;h<=r;h++)l.push(new Float64Array(o+1).fill(1/0));let c=[];for(let h=0;h<=r;h++)c.push(new Uint8Array(o+1));for(let h=0;h<=o;h++)l[r][h]=0;for(let h=r-1;h>=0;h--)for(let p=o-1;p>=0;p--){let T=n(e[h],t[p])+l[h+1][p+1],a=l[h][p+1];T<=a?(l[h][p]=T,c[h][p]=1):l[h][p]=a}let s=[],f=0,u=0;for(;f<r&&u<o;)c[f][u]&&(s.push(i?[t[u],e[f]]:[e[f],t[u]]),f++),u++;return s}function ye(e,t,n,i,r,o,l,c={}){let s=e.find(t,n,c);if(r.length===0){s.forEach(w=>e.remove(w)),me(c,"onRowsApplied",o.path,[]);return}let f=r.length>s.length,u=s[0]||null;if(f&&!u&&(u=Tt(e,t,n,c),!u))throw new C(o.path);let h=s.map(w=>At(e,w,i,c)),p=null;if(f&&u){p=e.clone(u),c.templateAttr&&e.removeAttr(p,c.templateAttr);let w=e.stripIds(p);w>0&&console.warn(`[hyper-html-api] stripped ${w} id attribute(s) from cloned template at "${o.path.join(".")||"(root)"}"`)}let T=Ie(r,h,i,yt(e,s,r,o,c)),a=s.length>0?e.parent(s[0]):St(e,t,n,u,o,c),m=s.length>0?ve(e,a,s[0]):0,g=Rt(e,s),d=new Set,y=[],A=r.map((w,x)=>{let O=T[x];if(O>=0)return d.add(O),y.push(!1),s[O];y.push(!0);let E=e.clone(p);return e.stripIds(E),E});s.forEach((w,x)=>{d.has(x)||e.remove(w)}),g?bt(e,a,m,A,y):Nt(e,A,y,a,m),gt(e,A,i,r,o,l,c),me(c,"onRowsApplied",o.path,A)}function me(e,t,n,i){if(typeof e[t]=="function")try{return e[t](n.slice(),i)}catch(r){console.warn(`[hyper-html-api] ${t} threw at "${n.join(".")||"(root)"}"`,r);return}}function yt(e,t,n,i,r){let o=me(r,"identifyRows",i.path,n);if(!Array.isArray(o))return null;let l=new Array(n.length).fill(-1),c=new Set,s=new Map(t.map((f,u)=>[e.identity(f),u]));for(let f=0;f<n.length;f++){if(!o[f])continue;let u=s.get(e.identity(o[f]));u===void 0||c.has(u)||(l[f]=u,c.add(u))}return l}function gt(e,t,n,i,r,o,l){t.forEach((c,s)=>{if(n===null){let f=i[s],u=f==null?"":String(f);e.text(c)!==u&&e.text(c,u)}else{let f=o(e,c,n,i[s],{depth:r.depth+1,path:[...r.path,s]},l);f&&f!==c&&(t[s]=f)}})}function At(e,t,n,i){return n===null?e.text(t):M(e,t,n,i.onRowsRead?{...i,onRowsRead:void 0}:i)}function ve(e,t,n){let i=e.children(t);for(let r=0;r<i.length;r++)if(e.sameNode(i[r],n))return r;return-1}function Tt(e,t,n,i){if(!i.templateAttr)return null;let r=/^\s*:scope\s*>\s*/.test(n),o=new RegExp(":not\\(\\["+i.templateAttr.replace(/[.*+?^${}()|[\]\\-]/g,"\\$&")+"\\]\\)","g"),l=n.replace(/^\s*:scope\s*>\s*/,"").replace(o,""),c=r?wt(l):0,s=he(l),f=t;for(;f;){let u=e.find(f,l,{includeRulesTag:!1,templateAttr:null});for(let h of u)if(e.attr(h,i.templateAttr)!=null&&!(r&&!Ot(e,t,h,c))&&!(s&&!e.matches(e.parent(h),s)))return h;f=e.parent(f)}return null}function wt(e){let t=0,n=null,i=1;for(let r=0;r<e.length;r++){let o=e[r];if(o==="\\")r++;else if(n)o===n&&(n=null);else if(o==='"'||o==="'")n=o;else if(o==="["||o==="(")t++;else if(o==="]"||o===")")t>0&&t--;else if(t===0&&o===">")i++;else{if(t===0&&(o==="+"||o==="~"))return null;if(t===0&&/\s/.test(o)){if(!Et(e,r))return null;for(;r+1<e.length&&/\s/.test(e[r+1]);)r++}}}return i}function Et(e,t){let n=t;for(;n<e.length&&/\s/.test(e[n]);)n++;let i=t>0?e[t-1]:"",r=n<e.length?e[n]:"";return $e(i)||$e(r)}function $e(e){return e===">"||e==="+"||e==="~"}function Ot(e,t,n,i){if(i===null)return!0;let r=n;for(let s=0;s<i;s++)if(r=e.parent(r),!r)return!1;let o=e.prop(t,"tagName");if(!o)return!0;let l=e.prop(r,"tagName");if(!l||String(l).toLowerCase()!==String(o).toLowerCase())return!1;let c=new Set(_e(e,r));return _e(e,t).every(s=>c.has(s))}function _e(e,t){let n=e.attr(t,"class");return n?String(n).split(/\s+/).filter(Boolean):[]}function St(e,t,n,i,r,o){let l=e.parent(i);if(l&&xt(e,t,l)&&!We(e,l,o))return l;let c=he(n);if(!c)throw new C(r.path,`the list selector "${n}" names no container to hold the new rows \u2014 write it as "container > row" (for example "ol.comments > li") so the cloned row lands in the list`);let f=(c===":scope"?e.prop(t,"tagName")?[t]:[]:e.find(t,c,o)).filter(u=>!We(e,u,o));if(f.length===0)throw new C(r.path,`no container matching "${c}" inside this context to hold the new rows`);if(f.length>1)throw new C(r.path,`"${c}" matches ${f.length} containers inside this context, so the new rows have no single destination`);return f[0]}function xt(e,t,n){let i=n;for(;i;){if(e.sameNode(i,t))return!0;i=e.parent(i)}return e.parent(t)?!1:e.find(t,"*",{includeRulesTag:!0,templateAttr:null}).some(r=>e.sameNode(r,n))}var De=["no-data","editor-ui"];function We(e,t,n){let i=t;for(;i;){if(n.templateAttr&&e.attr(i,n.templateAttr)!=null||De.some(o=>e.attr(i,o)!=null))return!0;let r=e.attr(i,"clay");if(r&&r.split(/\s+/).some(o=>De.includes(o)))return!0;i=e.parent(i)}return!1}function bt(e,t,n,i,r){let o=e.children(t),l=o.map(s=>e.identity(s)),c=!1;i.forEach((s,f)=>{let u=e.identity(s),h=n+f;if(l[h]===u)return;if(!r[f]){let T=l.indexOf(u);T!==-1&&(l.splice(T,1),o.splice(T,1))}let p=Math.min(h,o.length);p<o.length?e.insertBefore(o[p],s):o.length?c?e.insertAfter(o[o.length-1],s):(e.insertAt(t,s,h),c=!0):e.insertAt(t,s,0),l.splice(p,0,u),o.splice(p,0,s)})}function Rt(e,t){if(t.length<=1)return!0;let n=e.parent(t[0]);if(!n)return!1;let i=new Map(e.children(n).map((o,l)=>[e.identity(o),l])),r=[];for(let o of t){let l=i.get(e.identity(o));if(l===void 0)return!1;r.push(l)}return r.sort((o,l)=>o-l),r[r.length-1]-r[0]===r.length-1}function Nt(e,t,n,i,r){let o=null,l=r;for(let c=0;c<t.length;c++){if(!n[c]){o=t[c];continue}let s=o?e.parent(o):i;if(!s)continue;let f=o?ve(e,s,o)+1:l++;e.insertAt(s,t[c],f),o=t[c]}}function I(e,t,n,i,r={}){if(Object.prototype.hasOwnProperty.call(r,"exclude")&&e.semanticExclude===!1)throw new Error("This adapter does not support semantic exclude queries; omit exclude or use the DOM adapter.");let o=[];if(ge(n,i,[],o),o.length)throw new q(o);re(e,t,n,i,{depth:0,path:[]},r)}function re(e,t,n,i,r,o={}){if(r.depth>$)throw new L(r.path);if(i===void 0)return t;if(typeof n=="string")return Ct(e,t,n,i,r,o);if(Array.isArray(n)){let[l,c]=n;return ye(e,t,l,c,i,r,re,o),t}if(typeof n=="object"&&n!==null){for(let[l,c]of Object.entries(n)){let s=re(e,t,c,i==null?i:i[l],{depth:r.depth+1,path:[...r.path,l]},o);s&&s!==t&&(t=s)}return t}return t}function Ct(e,t,n,i,r,o){if(n.endsWith("[]")){let u=n.slice(0,-2);return ye(e,t,u,null,i,r,re,o),t}if(n.startsWith("@"))return He(e,t,n.slice(1),i);let l=N(n);if(l!==-1){let{selector:u,all:h}=b(n),p=n.slice(l+1),T=u?e.find(t,u,o):[t];for(let a of h?T:T.slice(0,1))He(e,a,p,i);return t}if(n===".")return Be(e,t,i),t;let{selector:c,all:s}=b(n),f=e.find(t,c,o);for(let u of s?f:f.slice(0,1))Be(e,u,i);return t}function Be(e,t,n){let i=n==null?"":String(n);e.text(t)!==i&&e.text(t,i)}function Pt(e,t,n,i){if(e.styleVar){e.styleVar(t,n,i);return}ne(e,t,n,i)}function He(e,t,n,i){if(P(n))return Pt(e,t,n,i==null?"":String(i).trim()),t;if(B.has(n)){let r=e.prop(t,n);if(r===i||r!=null&&i!=null&&String(r)===String(i))return t;throw new V(n)}if(n==="outerHTML"){let r=i==null?"":String(i);return e.replaceWith(t,r)}if(ce.has(n)){let r=fe(n,i);return e.prop(t,n)!==r&&e.prop(t,n,r),t}if(i==null)e.attr(t,n)!=null&&e.removeAttr(t,n);else{let r=String(i);e.attr(t,n)!==r&&e.attr(t,n,r)}return t}function ge(e,t,n,i){if(t!==void 0){if(typeof e=="string"){if(e.endsWith("[]")){Array.isArray(t)?t.forEach((r,o)=>{typeof r=="object"&&r!==null&&i.push({path:F([...n,o]),expected:"scalar",got:z(r)})}):i.push({path:F(n),expected:"array",got:z(t)});return}t!==null&&typeof t=="object"&&i.push({path:F(n),expected:"scalar",got:z(t)});return}if(Array.isArray(e)){if(!Array.isArray(t)){i.push({path:F(n),expected:"array",got:z(t)});return}let r=e[1];t.forEach((o,l)=>ge(r,o,[...n,l],i));return}if(typeof e=="object"&&e!==null){if(t===null||Array.isArray(t)||typeof t!="object"){i.push({path:F(n),expected:"object",got:z(t)});return}for(let[r,o]of Object.entries(e))ge(o,t[r],[...n,r],i)}}}function z(e){return e===null?"null":Array.isArray(e)?"array":typeof e}function F(e){return e.join(".")}function Ae(e){try{return JSON.parse(e)}catch(t){throw new j(`Invalid strict JSON: ${t.message}`,t)}}function K(e){try{return JSON.parse(e)}catch{}let t={BRACE_OPEN:"{",BRACE_CLOSE:"}",BRACKET_OPEN:"[",BRACKET_CLOSE:"]",COLON:":",COMMA:",",STRING:"STRING",SELECTOR:"SELECTOR",IDENTIFIER:"IDENTIFIER",NUMBER:"NUMBER",BOOLEAN:"BOOLEAN"};function n(r){let o=[],l=0;for(;l<r.length;){let c=r[l];if(/\s/.test(c)){l++;continue}if("{}".includes(c)){o.push({type:c,value:c}),l++;continue}if(c==="["){let h=!1,p=l+1;for(;p<r.length&&/\s/.test(r[p]);)p++;if(p<r.length&&/[a-zA-Z_]/.test(r[p])&&(h=!0),!h){o.push({type:c,value:c}),l++;continue}}if(c==="]"){o.push({type:c,value:c}),l++;continue}if(c===":"){o.push({type:t.COLON,value:c}),l++;continue}if(c===","){o.push({type:t.COMMA,value:c}),l++;continue}if(c==='"'||c==="'"){let h=c,p=l+1;for(;p<r.length&&r[p]!==h;)r[p]==="\\"&&p++,p++;o.push({type:t.STRING,value:r.substring(l+1,p),quoted:!0,sourceQuote:h}),l=p+1;continue}let s=l,f;for(;s<r.length&&!/[{},]/.test(r[s]);)if(r[s]===":"){let h=[":first",":last",":nth-child",":nth-of-type",":first-child",":last-child",":first-of-type",":last-of-type",":only-child",":only-of-type",":hover",":focus",":active",":visited",":disabled",":enabled",":checked",":empty",":root",":target",":not",":before",":after",":nth-last-child",":nth-last-of-type"],p=!1;for(let T of h){let a=T.substring(1);if(r.substring(s+1,s+1+a.length)===a){p=!0,s+=a.length;break}}if(!p)break}else if(r[s]==="["){for(s++;s<r.length&&r[s]!=="]";){if(r[s]==='"'||r[s]==="'"){let h=r[s];for(s++;s<r.length&&r[s]!==h;)r[s]==="\\"&&s++,s++}s++}s<r.length&&r[s]==="]"&&s++}else s++;f=r.substring(l,s);let u=t.IDENTIFIER;/^-?\d+(\.\d+)?$/.test(f)?u=t.NUMBER:f==="true"||f==="false"||f==="null"?u=t.BOOLEAN:/^[.#@\[]|[.#@\[]| /.test(f)&&(u=t.SELECTOR),o.push({type:u,value:f,quoted:!1}),l=s}return o}function i(r){let o="";for(let l=0;l<r.length;l++){let c=r[l];if("{}".includes(c.type)||"[]".includes(c.type)){o+=c.value;continue}if(c.type===t.COLON){o+=c.value;continue}if(c.type===t.COMMA){let s=r[l+1];if(s&&(s.type==="}"||s.type==="]"))continue;o+=c.value;continue}if(c.type===t.STRING&&c.quoted){let s=c.value;c.sourceQuote==="'"&&(s=s.replace(/\\'/g,"'"),s=s.replace(/(\\*)"/g,(f,u)=>u.length%2===0?u+'\\"':f)),o+=`"${s}"`;continue}if(c.type===t.NUMBER||c.type===t.BOOLEAN){o+=c.value;continue}if(c.type===t.SELECTOR||c.type===t.IDENTIFIER){o+=`"${c.value}"`;continue}o+=`"${c.value}"`}return o}try{let r=n(e),o=i(r);return JSON.parse(o)}catch(r){throw new j("Invalid extraction rules syntax: "+r.message,r)}}var Mt="1",qe=/^[a-zA-Z0-9_-]+$/;function D(e,t,n){let i;if(n===void 0)i="script[data-rules-name]";else{if(typeof n!="string"||!qe.test(n))throw new Error(`hyper-html-api: invalid rules token ${JSON.stringify(n)} (must match ${qe})`);i=`script[data-rules-name~="${n}"]`}let r=e.find(t,i,{includeRulesTag:!0});if(r.length===0)return null;n!==void 0&&r.length>1&&console.warn(`hyper-html-api: ${r.length} rules tags match data-rules-name~="${n}"; using the first.`);let o=r[0],l=e.attr(o,"data-rules-version");if(l!==Mt)throw new H(l);return{rules:K(e.text(o)),tagNode:o}}var ie=Object.freeze({data:Object.freeze({tokens:["no-data"],bundles:["editor-ui"]}),save:Object.freeze({tokens:["no-save"],bundles:["editor-ui"]}),snapshot:Object.freeze({tokens:["no-snapshot"],bundles:["editor-ui"]}),watch:Object.freeze({tokens:["no-watch"],bundles:["editor-ui"]}),undo:Object.freeze({tokens:["no-undo"],bundles:["editor-ui"]}),history:Object.freeze({tokens:[],bundles:["editor-ui"]})}),kt=Object.freeze({"editor-ui":Object.freeze(["no-data","no-save","no-snapshot","no-watch","no-undo"])}),Ve=Object.freeze(["no-save","no-snapshot","no-trigger-autosave","no-dirty","no-watch","no-undo","no-data","freeze","editor-ui","live"]);function J(e,t){if(!e||e.nodeType!==1)return!1;let n=e.getAttribute?.("clay");return!!(n&&n.split(/\s+/).includes(t)||e.hasAttribute?.(t))}function Te(e,t){if(J(e,t))return!0;for(let[n,i]of Object.entries(kt))if(i.includes(t)&&J(e,n))return!0;return!1}function X(e){let t=ie[e];if(!t)throw new Error(`Unknown region capability: ${e}`);return[...t.tokens,...t.bundles].flatMap(n=>[`[clay~="${n}"]`,`[${n}]`]).join(", ")}function Lt(e,t){let n=e&&e.nodeType===1?e:e?.parentElement;for(;n&&n.nodeType===1;){let i=ie[t];if(!i)throw new Error(`Unknown region capability: ${t}`);if(i.tokens.some(r=>Te(n,r))||i.bundles.some(r=>J(n,r)))return n;n=n.parentElement}return null}function Ue(e,t){return!!Lt(e,t)}var oe=Object.freeze({refusedRuleForms:["innerHTML","outerHTML"],refusedTargets:["script","style","template","noscript","iframe","object","embed","xmp","plaintext","noembed","noframes","meta","link","base","animate","set","animatemotion","animatetransform"],refusedAttributes:["style","srcdoc","is","http-equiv","sandbox","allow","nonce","integrity","charset","htmlclaytoken","htmlclayid","data-rules-name","data-rules-version","clay","contenteditable",...Ve],refusedAttributePrefixes:["on"],urlAttributes:["href","src","srcset","action","formaction","poster","cite","data","ping","background","longdesc","usemap","xlink:href","manifest","codebase","icon"],refusedSchemes:["javascript","vbscript","data"],customPropertyValues:Object.freeze({maxLength:200,refusedCharacters:[";","{","}","<",">","\\"],refusedFunctions:["url","src","image","image-set","-webkit-image-set","cross-fade","element","expression","paint"]})}),It=new Set(["textContent","innerText"]);function ze(e){let n=String(e).replace(/^[\u0000- ]+|[\u0000- ]+$/g,"").replace(/[\t\n\r]/g,"").match(/^([a-zA-Z][a-zA-Z0-9+.-]*):/);return n?n[1].toLowerCase():null}var jt=/^[^\t\n\f\r "'>/=\u0000-\u001f\u007f]+$/;function Fe(e,t,n=oe){if(!jt.test(String(e)))return`attribute name ${JSON.stringify(String(e))} is not valid`;let i=String(e).toLowerCase();if(n.refusedAttributePrefixes.some(r=>i.startsWith(r)))return`attribute "${i}" can run script`;if(n.refusedAttributes.includes(i))return`attribute "${i}" is not content`;if(n.urlAttributes.includes(i)&&t!=null){let r=i==="srcset"?String(t).split(",").map(o=>o.trim().split(/\s+/)[0]).filter(Boolean):[String(t)];for(let o of r){let l=ze(o);if(l&&n.refusedSchemes.includes(l))return`"${l}:" URLs are not allowed in "${i}"`}}return null}function we(e,t){let n=e.prop(t,"tagName");return n?String(n).toLowerCase():""}function $t(e,t){let n=we(e,t)||"node",i=e.attr(t,"id");return i?`<${n}#${i}>`:`<${n}>`}function _t(e,t,n){let i=t;for(;i;){let r=we(e,i);if(r&&n.refusedTargets.includes(r))return r;i=e.parent(i)}return null}function Ke(e,t){return e.find(t,"script[data-rules-name]",{includeRulesTag:!0,templateAttr:null}).length>0}function Dt(e,t){return we(e,t)==="script"&&e.attr(t,"data-rules-name")!=null?!0:Ke(e,t)}function Wt(e){if(/[\u0000-\u001f\u007f]/.test(e))return"control characters are not allowed in a custom property value";let t=[],n=null;for(let i=0;i<e.length;i++){let r=e[i];if(n){r===n&&(n=null);continue}if(r==='"'||r==="'")n=r;else{if(r==="/"&&e[i+1]==="*")return"comments are not allowed in a custom property value";if(r==="(")t.push(")");else if(r==="[")t.push("]");else if((r===")"||r==="]")&&t.pop()!==r)return`"${r}" does not close anything in this custom property value`}}return n?"a custom property value must close its quotes":t.length?"a custom property value must close its brackets":null}function Je(e,t=oe){let n=t.customPropertyValues,i=String(e);if(i.length>n.maxLength)return`custom property values are limited to ${n.maxLength} characters`;let r=n.refusedCharacters.find(s=>i.includes(s));if(r)return`${JSON.stringify(r)} is not allowed in a custom property value`;let o=Wt(i);if(o)return o;let l=i.toLowerCase(),c=n.refusedFunctions.find(s=>new RegExp(`(^|[^a-z0-9_-])${s.replace(/[-]/g,"\\-")}\\s*\\(`).test(l));return c?`"${c}()" is not allowed in a custom property value`:null}function se(e,t=oe){let n=[],i=(s,f)=>(n.push({target:$t(e,s),reason:f}),!1),r=s=>{let f=_t(e,s,t);return f?i(s,`inside <${f}>, which is not content`):!0},o=s=>r(s)?Ke(e,s)?i(s,"a text write here would delete the data rules tag"):!0:!1,l=(s,f,u)=>{if(!r(s))return!1;let h=Fe(f,u,t);return h?i(s,h):!0};return{...e,text(s,f){if(f===void 0)return e.text(s);o(s)&&e.text(s,f)},attr(s,f,u){if(u===void 0)return e.attr(s,f);l(s,f,u)&&e.attr(s,f,u)},removeAttr(s,f){l(s,f,null)&&e.removeAttr(s,f)},styleVar(s,f,u){if((_(e.attr(s,"style"),f)??"")!==u&&r(s)){if(!P(f))return i(s,`"${f}" is not a custom property`);if(u!==""){let h=Je(u,t);if(h)return i(s,h)}ne(e,s,f,u)}},prop(s,f,u){if(u===void 0)return e.prop(s,f);if(t.refusedRuleForms.includes(f))return i(s,`"@${f}" writes HTML, only text is allowed`);if(It.has(f)){o(s)&&e.prop(s,f,u);return}l(s,f==="className"?"class":f,u)&&e.prop(s,f,u)},remove(s){if(Dt(e,s)){i(s,"removing this would delete the data rules tag");return}e.remove(s)},replaceWith(s,f){return f===e.prop(s,"outerHTML")||i(s,'"@outerHTML" writes HTML, only text is allowed'),s},refusals:n,assertClean(){if(n.length)throw new U(n.slice())}}}function Y(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Xe(e){return e.reduce((t,n)=>typeof n=="number"?`${t}[${n}]`:t?`${t}.${n}`:n,"")}function Ee(e,t,n,i,r={}){let o=[],l=[];function c(f,u,h){if(Array.isArray(f)){let[,p]=f;if(!Array.isArray(u)||!Y(p))return;u.forEach((T,a)=>c(p,T,[...h,a]));return}if(!(!Y(f)||!Y(u)))for(let p of Object.keys(u))Object.prototype.hasOwnProperty.call(f,p)?c(f[p],u[p],[...h,p]):o.push(Xe([...h,p]))}function s(f,u,h,p){if(h!==void 0){if(typeof u=="string"){if(u.endsWith("[]")||u==="."||u.startsWith("@"))return;let{selector:T}=b(u);if(!T)return;e.find(f,T,r).length===0&&l.push({path:Xe(p),selector:T});return}if(!Array.isArray(u)&&Y(u)&&Y(h))for(let[T,a]of Object.entries(u))s(f,a,h[T],[...p,T])}}return c(n,i,[]),s(t,n,i,[]),{unknownKeys:o,unmatched:l}}function Oe(e,t,n){if(n&&typeof n=="object")return{rules:n,tagNode:null};if(typeof n=="string"){let i=t&&t.ownerDocument?t.ownerDocument:t;return D(e,i,n)}return null}var Bt=/:(?:focus(?:-within|-visible)?|hover|active|visited|defined)\b/i;function Ht(e,t){if(!/^(INPUT|TEXTAREA|SELECT|OPTION)$/.test(e.tagName||""))return;let n=(e.getAttribute?.("type")||"").toLowerCase();"value"in e&&"value"in t&&e.tagName!=="OPTION"&&n!=="checkbox"&&n!=="radio"&&n!=="file"&&(t.value=e.value),e.tagName==="INPUT"&&(n==="checkbox"||n==="radio")&&(t.checked=e.checked),e.tagName==="OPTION"&&(t.selected=e.selected),"indeterminate"in e&&"indeterminate"in t&&(t.indeterminate=e.indeterminate)}function Ye(e,t,n,i){if(i)return!!e.closest?.(t);let r=e;for(;r?.nodeType===1;){if(r.matches(t))return!0;if(r===n)break;r=r.parentElement}return!1}function Ge(e,t,n,i,r,o){return(o?Ue(e,t):Ye(e,n,r,!1))||!!(i&&(o&&e!==r?e.matches(i):Ye(e,i,r,o)))}function qt(e,t){let n=ie[t];return n.tokens.some(i=>Te(e,i))||n.bundles.some(i=>J(e,i))}var Vt=new Set(["INPUT","TEXTAREA","SELECT","OPTION"]);function Ze(e,t,n,i){if(e.nodeType===1&&i(e)){n.dropped.push(t);return}n.cloneToLive.set(t,e),n.liveToClone.set(e,t);let r=e,o=t;if(e.nodeType===1){if(Vt.has(e.tagName)&&n.controls.push(e,t),e.tagName==="TEMPLATE"){for(;t.firstChild;)t.removeChild(t.firstChild);r=e.content,o=t.content,n.cloneToLive.set(o,r),n.liveToClone.set(r,o)}}else if(e.nodeType!==11)return;let l=o.firstChild;for(let c=r.firstChild;c&&l;c=c.nextSibling)Ze(c,l,n,i),l=l.nextSibling}function G(e,{capability:t="data",exclude:n=null,inherit:i=!0,provenance:r=null}={}){if(!e)throw new TypeError("createContentView requires a DOM context");let o=e.nodeType===9?e:e.ownerDocument;if(!o?.implementation?.createHTMLDocument)throw new TypeError("createContentView requires an HTML DOM implementation");let l=o.implementation.createHTMLDocument(""),c=r||new WeakMap,s=new WeakMap,f=e.nodeType===9?e.documentElement:e;n&&l.documentElement.matches(n);let u=X(t),h=i?a=>qt(a,t)||!!(n&&a.matches(n)):a=>Ge(a,t,u,n,f,!1),p=null;if(f.nodeType!==1||!Ge(f,t,u,n,f,i)){p=l.importNode(f,!0);let a={cloneToLive:c,liveToClone:s,dropped:[],controls:[]};Ze(f,p,a,h);for(let m of a.dropped)m.remove();for(let m=0;m<a.controls.length;m+=2)Ht(a.controls[m],a.controls[m+1])}e.nodeType===9&&p&&(l.replaceChild(p,l.documentElement),s.set(e,l),c.set(l,e));let T=a=>{if(Bt.test(a))throw new Error(`Filtered content queries do not support stateful selector: ${a}`)};return{root:p,document:l,capability:t,selector:X(t),cloneToLive:c,liveToClone:s,original(a){return c.get(a)||null},cloneOf(a){return s.get(a)||null},query(a,m=p){return T(a),Array.from(m.querySelectorAll(a),g=>c.get(g)||g)},text(a=p){return(a===p?p:s.get(a))?.textContent||""},html(a=p){return(a===p?p:s.get(a))?.innerHTML??""},clone(a=p){let m=a===p?p:s.get(a);return m?l.importNode(m,!0):null}}}function et(e){return e&&e.nodeType===1&&e.tagName==="SCRIPT"&&e.hasAttribute&&e.hasAttribute("data-rules-name")}function Ut(e){return e?(e.nodeType===9||e.nodeType===11,e):null}function Qe(e,t,n){!e||e.nodeType!==1||(t==="value"&&e.tagName==="INPUT"?e.value=n===null?"":n:t==="checked"&&e.tagName==="INPUT"?e.checked=n!==null:t==="selected"&&e.tagName==="OPTION"&&(e.selected=n!==null))}function tt(e,t){e&&e.tagName==="TEXTAREA"&&(e.value=t)}function nt(e){if(!e||e.nodeType!==1)return;let t=[e,...e.querySelectorAll?e.querySelectorAll("textarea, input, option"):[]];for(let n of t)if(n.tagName==="TEXTAREA")n.value=n.defaultValue;else if(n.tagName==="INPUT"){let i=n.type;i!=="file"&&i!=="checkbox"&&i!=="radio"&&(n.value=n.defaultValue),n.checked=n.defaultChecked}else n.tagName==="OPTION"&&(n.selected=n.defaultSelected)}var S={semanticExclude:!0,find(e,t,n={}){let i=Ut(e);if(!i||!i.querySelectorAll)return[];let r=Array.from(i.querySelectorAll(t));n.includeRulesTag||(r=r.filter(c=>!et(c)));let o=[];n.skip&&o.push(n.skip);let l=n.templateAttr===null?null:n.templateAttr||"cms-template";if(l&&o.push("["+l+"]"),o.length){let c=o.join(", ");r=r.filter(s=>!s.closest||!s.closest(c))}return r},parent(e){return e?e.parentElement:null},children(e){return e?Array.from(e.children):[]},matches(e,t){return!!(e&&e.matches)&&e.matches(t)},text(e,t){if(t===void 0)return(e.textContent||"").trim();e.textContent=t,tt(e,t)},attr(e,t,n){if(n===void 0)return e.hasAttribute&&e.hasAttribute(t)?e.getAttribute(t):null;e.setAttribute(t,n),Qe(e,t,n)},removeAttr(e,t){e&&e.removeAttribute&&e.removeAttribute(t),Qe(e,t,null)},prop(e,t,n){if(n===void 0){let i=e?e[t]:void 0;return i!==void 0?i:null}e[t]=n},clone(e){let t=e.cloneNode(!0);return nt(t),t},insertAt(e,t,n){let i=e.children[n]||null;e.insertBefore(t,i)},insertBefore(e,t){e.parentNode.insertBefore(t,e)},insertAfter(e,t){e.parentNode.insertBefore(t,e.nextSibling)},identity(e){return e||null},remove(e){e&&e.parentNode&&e.parentNode.removeChild(e)},replaceWith(e,t){if(!e||!e.parentNode)throw new Error("dom.replaceWith: node has no parent");let i=e.ownerDocument.createElement("template");i.innerHTML=t;let r=i.content.firstElementChild;if(!r)throw new Error("dom.replaceWith: html did not parse to an element");return e.parentNode.replaceChild(r,e),r},stripIds(e){let t=0;return e.id&&(e.removeAttribute("id"),t++),(e.querySelectorAll?e.querySelectorAll("[id]"):[]).forEach(i=>{i.removeAttribute("id"),t++}),t},sameNode(e,t){return e===t}};function k(e,t={}){if(t.exclude===null)return S;let n=[X("data"),t.exclude].filter(Boolean).join(", "),i=e.nodeType===9?e:e.ownerDocument||e,r=e.nodeType===9?e.documentElement:e;if(!t._write&&!r?.matches?.(n)&&!r?.querySelector?.(n)&&!i?.querySelector?.(n))return S;let o=e.nodeType===9||!e.isConnected?e:e.ownerDocument,l=e.nodeType===9?e:e.ownerDocument,c=null,s=()=>c||(c=G(o,{capability:"data",exclude:t.exclude||null})),f=a=>{let m=s();return a===e?m.cloneOf(e):m.cloneOf(a)||a},u=a=>c?.original(a)||a,h=(a,m)=>{s().liveToClone.set(a,m),s().cloneToLive.set(m,a);let g=a.childNodes||[],d=m.childNodes||[];for(let y=0;y<Math.min(g.length,d.length);y++)h(g[y],d[y])},p=(a,m,g,d)=>{let y=Array.from(a.childNodes).filter(E=>c.cloneOf(E)),w=y[0];for(;w&&y.includes(w);)w=w.nextSibling;for(let E of y)E.remove();if(g==="innerHTML"){let E=l.createElement("template");E.innerHTML=d;for(let v of Array.from(E.content.childNodes))a.insertBefore(v,w||null)}else a.insertBefore(l.createTextNode(d),w||null),tt(a,d);let x=G(a,{capability:"data",exclude:t.exclude||null});m.replaceChildren(...Array.from(x.root?.childNodes||[]));let O=E=>{let v=x.original(E);v&&(c.liveToClone.set(v,E),c.cloneToLive.set(E,v));for(let st of Array.from(E.childNodes||[]))O(st)};for(let E of Array.from(m.childNodes))O(E)},T={...S,find(a,m,g={}){let d=f(a);if(!d?.querySelectorAll)return[];let y=s().query(m,d);g.includeRulesTag||(y=y.filter(x=>!et(x)));let A=[];g.skip&&A.push(g.skip);let w=g.templateAttr===null?null:g.templateAttr||"cms-template";if(w&&A.push(`[${w}]`),A.length){let x=A.join(", ");y=y.filter(O=>!O.closest?.(x))}return y},parent(a){let m=f(a)?.parentElement;return m?u(m):null},children(a){return Array.from(f(a)?.children||[],u)},text(a,m){if(m===void 0){let y=u(a);return!y?.matches?.(n)&&!y?.querySelector?.(n)?S.text(y):(f(a)?.textContent||"").trim()}let g=u(a);if(!g?.matches?.(n)&&!g?.querySelector?.(n)&&!c){S.text(g,m);return}let d=s().cloneOf(g);d?p(g,d,"textContent",m):S.text(g,m)},attr(a,m,g){let d=u(a);if(g===void 0)return S.attr(d,m);S.attr(d,m,g);let y=c?.cloneOf(d);y&&(S.attr(y,m,g),G(d,{capability:"data",exclude:t.exclude||null}).root===null&&(y.remove(),c.liveToClone.delete(d),c.cloneToLive.delete(y)))},removeAttr(a,m){let g=u(a);S.removeAttr(g,m);let d=c?.cloneOf(g);d&&S.removeAttr(d,m)},prop(a,m,g){let d=u(a);if(g===void 0)return m==="innerHTML"||m==="outerHTML"||m==="textContent"||m==="innerText"?S.prop(f(d),m):S.prop(d,m);let y=m==="innerHTML"||m==="textContent"||m==="innerText",A=y?s().cloneOf(d):c?.cloneOf(d);A&&y?p(d,A,m,g):(S.prop(d,m,g),A&&S.prop(A,m,g))},clone(a){let m=f(a);if(m===a)return S.clone(a);let g=l.importNode(m,!0);return nt(g),g},insertAt(a,m,g){let d=u(a),A=T.children(d)[g]||(()=>{for(let O=d.children.length-1;O>=0;O--){let E=d.children[O];if(s().cloneOf(E))return E.nextElementSibling}return d.firstElementChild})(),w=u(m);d.insertBefore(w,A||null);let x=s().cloneOf(d);if(x){let O=s().cloneOf(w);O||(O=l.importNode(w,!0),h(w,O));let E=Array.from(x.children);x.insertBefore(O,E[g]||null)}},insertBefore(a,m){let g=u(a),d=u(m);g.parentNode.insertBefore(d,g);let y=s().cloneOf(g.parentNode);if(y){let A=s().cloneOf(d);A||(A=l.importNode(d,!0),h(d,A));let w=s().cloneOf(g);w?w.before(A):y.appendChild(A)}},insertAfter(a,m){let g=u(a),d=u(m);g.parentNode.insertBefore(d,g.nextSibling);let y=s().cloneOf(g.parentNode);if(y){let A=s().cloneOf(d);A||(A=l.importNode(d,!0),h(d,A));let w=s().cloneOf(g);w?w.after(A):y.appendChild(A)}},identity(a){return u(a)||null},remove(a){let m=u(a),g=s().cloneOf(m);S.remove(m),g&&S.remove(g)},replaceWith(a,m){let g=u(a),d=s().cloneOf(g),y=S.replaceWith(g,m);if(d){let A=G(y,{capability:"data",exclude:t.exclude||null});if(!A.root)d.remove();else{d.replaceWith(A.root);let w=x=>{let O=A.original(x);O&&(c.liveToClone.set(O,x),c.cloneToLive.set(x,O));for(let E of Array.from(x.childNodes||[]))w(E)};w(A.root)}}return y}};return T}var Z=S;var le={extract:(e,t,n={})=>M(k(e,n),e,t,n),apply:(e,t,n,i={})=>I(k(e,{...i,_write:!0}),e,t,n,i),findRulesIn:(e,t)=>D(Z,e,t),findRules:(e,t)=>Oe(Z,e,t),bind:(e,t,n={})=>{let i=Oe(Z,e,t);if(!i){let r=typeof t=="string"?`data-rules-name~="${t}"`:"the provided rules object";throw new Error(`hyper-html-api: could not resolve rules for ${r}`)}return{...i,get:()=>M(k(e,n),e,i.rules,n),set:r=>I(k(e,{...n,_write:!0}),e,i.rules,r,n)}},parseStrict:Ae,parseRelaxed:K,ruleAttrIndex:N,splitRule:b,errors:R,DOM_PROPERTIES:Q},Se=e=>!!e&&typeof e.nodeType=="number";function rt(e){let t=e&&e.ownerDocument?e.ownerDocument:e,n=D(Z,t,"api");if(!n)throw new R.NoRulesTag("api");return n.rules}function zt(e){if(e.nodeType===9)return e;let t=e.ownerDocument?.documentElement;if(t?.contains(e))return t;let n=e;for(;n.parentNode;)n=n.parentNode;return n}function Ft(e){if(e.nodeType!==11||!e.host)return e.cloneNode(!0);let t=e.ownerDocument.createDocumentFragment();for(let n of e.childNodes)t.appendChild(n.cloneNode(!0));return t}function Kt(e,t){let n=[];for(;t!==e;){let i=t.parentNode;n.push(Array.prototype.indexOf.call(i.childNodes,t)),t=i}return n.reverse()}function Jt(e,t){return t.reduce((n,i)=>n.childNodes[i],e)}function W(e,t){let n=e.querySelectorAll?Array.from(e.querySelectorAll(t)):[];return e.matches?.(t)&&n.unshift(e),n}function Xt(e,t){let n=W(e,"option"),i=W(t,"option");n.forEach((s,f)=>i[f].selected=s.selected);let r=W(e,"input"),o=W(t,"input");r.forEach((s,f)=>{let u=s.type.toLowerCase();u!=="file"&&(o[f].value=s.value),(u==="checkbox"||u==="radio")&&(o[f].checked=s.checked)});let l=W(e,"textarea"),c=W(t,"textarea");l.forEach((s,f)=>c[f].value=s.value)}function xe(e,t){if(t!==void 0){if(typeof e=="string"){if(e.endsWith("[]"))return;let n=e.startsWith("@")?0:N(e);if(n===-1)return;let i=e.slice(n+1);if(B.has(i))throw new R.RuleTargetReadOnly(i);return}if(Array.isArray(e)){if(!Array.isArray(t))return;t.forEach(n=>xe(e[1],n));return}if(e&&typeof e=="object"&&t&&typeof t=="object"&&!Array.isArray(t))for(let[n,i]of Object.entries(e))xe(i,t[n])}}function Yt(e,t,n){let i={templateAttr:"cms-template"},r=zt(e),o=Kt(r,e),l=Ft(r);Xt(r,l);let c=Jt(l,o),s=k(l,{...i,_write:!0}),f=Ee(s,c,t,n,i);if(f.unknownKeys.length||f.unmatched.length)throw new R.WriteRejected(f.unknownKeys,f.unmatched);let u=se(s);I(u,c,t,n,i),u.assertClean(),xe(t,n);let h=se(k(r,{...i,_write:!0}));I(h,e,t,n,i),h.assertClean()}function Gt(e){if(!(e instanceof Error))return e;let t=e.name||"Error";try{e.code=t}catch{Object.defineProperty(e,"code",{value:t,configurable:!0,enumerable:!0})}return e instanceof R.WriteRefused?e.details=e.refusals:e instanceof R.WriteRejected?e.details={unknownKeys:e.unknownKeys,unmatched:e.unmatched}:e instanceof R.ShapeMismatch?e.details=e.mismatches:Array.isArray(e.path)?e.details={path:e.path}:typeof e.target=="string"?e.details={target:e.target}:e.token!==void 0?e.details={token:e.token}:e.version!==void 0?e.details={version:e.version}:e.details={},e}function it(e,t){let n=Se(e)?e:document,i=Se(e)?t:e;return i===void 0?M(k(n),n,rt(n)):le.bind(n,i).get()}function ot(e,t,n){try{if(!Se(e))throw new Error("hyper-html-api: applyData(root, data, source?) needs a DOM root as the first argument.");let i=n===void 0?rt(e):le.bind(e,n).rules;Yt(e,i,t)}catch(i){throw Gt(i)}return e}var Zt={engine:le,extractData:it,applyData:ot},ur=Zt;export{ot as applyData,ur as default,le as engine,it as extractData};