hyperclayjs 1.28.3 → 1.29.1

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.
package/README.md CHANGED
@@ -65,7 +65,7 @@ import 'hyperclayjs/presets/standard.js';
65
65
  | save-core | 11.5KB | Basic save function only - hyperclay.savePage() |
66
66
  | save-system | 15.4KB | CMD+S, [trigger-save] button, savestatus attribute |
67
67
  | save-toast | 0.9KB | Toast notifications for save events |
68
- | snapshot | 11KB | Source of truth for page state - captures DOM snapshots for save and sync |
68
+ | snapshot | 11.5KB | Source of truth for page state - captures DOM snapshots for save and sync |
69
69
  | unsaved-warning | 1.3KB | Warn before leaving page with unsaved changes |
70
70
 
71
71
  ### Custom Attributes (HTML enhancements)
@@ -97,7 +97,7 @@ import 'hyperclayjs/presets/standard.js';
97
97
  | cache-bust | 0.6KB | Cache-bust href/src attributes |
98
98
  | cookie | 1.4KB | Cookie management (often auto-included) |
99
99
  | debounce | 0.7KB | Function debouncing |
100
- | mutation | 14.7KB | DOM mutation observation (often auto-included) |
100
+ | mutation | 15.6KB | DOM mutation observation (often auto-included) |
101
101
  | nearest | 3.4KB | Find nearest elements (often auto-included) |
102
102
  | throttle | 1.3KB | Function throttling |
103
103
 
@@ -130,22 +130,22 @@ import 'hyperclayjs/presets/standard.js';
130
130
 
131
131
  | Module | Size | Description |
132
132
  |--------|------|-------------|
133
- | hyper-morph | 18.7KB | DOM morphing with content-based element matching |
134
- | hypercms | 88.7KB | Live edit-in-place CMS sidebar driven by a hyper-html-api rules tag. Pairs with [sortable] and [hyper-morph]. |
133
+ | hyper-morph | 18.8KB | DOM morphing with content-based element matching |
134
+ | hypercms | 72.4KB | Live edit-in-place CMS sidebar driven by a hyper-html-api rules tag. Pairs with [sortable] and [hyper-morph]. |
135
135
 
136
136
  ## Presets
137
137
 
138
- ### Minimal (~61.8KB)
138
+ ### Minimal (~62.3KB)
139
139
  Essential features for basic editing
140
140
 
141
141
  **Modules:** `save-core`, `snapshot`, `save-system`, `edit-mode-helpers`, `toast`, `save-toast`, `export-to-window`, `view-mode-excludes-edit-modules`
142
142
 
143
- ### Standard (~88.7KB)
143
+ ### Standard (~89.2KB)
144
144
  Standard feature set for most use cases
145
145
 
146
146
  **Modules:** `save-core`, `snapshot`, `save-system`, `unsaved-warning`, `edit-mode-helpers`, `persist`, `option-visibility`, `event-attrs`, `dom-helpers`, `toast`, `save-toast`, `export-to-window`, `view-mode-excludes-edit-modules`
147
147
 
148
- ### Everything (~337.5KB)
148
+ ### Everything (~323.5KB)
149
149
  All available features
150
150
 
151
151
  Includes all available modules across all categories.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hyperclayjs",
3
- "version": "1.28.3",
3
+ "version": "1.29.1",
4
4
  "description": "Modular JavaScript library for building interactive malleable HTML files with Hyperclay",
5
5
  "type": "module",
6
6
  "main": "src/hyperclay.js",
@@ -86,6 +86,15 @@ function clonePreventingOnclone(node) {
86
86
  }
87
87
 
88
88
  export function captureSnapshot() {
89
+ // Force-close any pending undo idle batch BEFORE cloning the DOM, so the
90
+ // snapshot reflects a clean undo boundary. Without this, a save that fires
91
+ // mid-typing would leave the idle batch open across the save boundary, and
92
+ // Cmd+Z after save would restore to a state earlier than the last save.
93
+ // No-op when undo isn't loaded or no batch is pending.
94
+ if (typeof window !== 'undefined' && window.hyperclay && window.hyperclay.undo && window.hyperclay.undo.flush) {
95
+ window.hyperclay.undo.flush();
96
+ }
97
+
89
98
  const clone = clonePreventingOnclone(document.documentElement);
90
99
 
91
100
  for (const hook of snapshotHooks) {
package/src/hyperclay.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * DO NOT EDIT THIS FILE DIRECTLY — it is generated from build/hyperclay.template.js
3
3
  *
4
- * HyperclayJS v1.28.3 - Minimal Browser-Native Loader
4
+ * HyperclayJS v1.29.1 - Minimal Browser-Native Loader
5
5
  *
6
6
  * Modules auto-init when imported (no separate init call needed).
7
7
  * Include `export-to-window` feature to export to window.hyperclay.
@@ -62,6 +62,7 @@ const MODULE_PATHS = {
62
62
  "form-data": "./dom-utilities/getDataFromForm.js",
63
63
  "hyper-morph": "./vendor/hyper-morph.vendor.js",
64
64
  "hypercms": "./vendor/hypercms.vendor.js",
65
+ "undo": "./undo.js",
65
66
  "slugify": "./string-utilities/slugify.js",
66
67
  "copy-to-clipboard": "./string-utilities/copy-to-clipboard.js",
67
68
  "query-params": "./string-utilities/query.js",
@@ -141,6 +142,7 @@ const PRESETS = {
141
142
  "style-injection",
142
143
  "form-data",
143
144
  "hypercms",
145
+ "undo",
144
146
  "slugify",
145
147
  "copy-to-clipboard",
146
148
  "query-params",
@@ -190,6 +192,7 @@ const PRESETS = {
190
192
  "form-data",
191
193
  "hyper-morph",
192
194
  "hypercms",
195
+ "undo",
193
196
  "slugify",
194
197
  "copy-to-clipboard",
195
198
  "query-params",
@@ -218,6 +221,7 @@ const EDIT_MODE_ONLY = new Set([
218
221
  "save-freeze",
219
222
  "cache-bust",
220
223
  "hyper-morph",
224
+ "undo",
221
225
  "file-upload",
222
226
  "live-sync",
223
227
  "refetch-on-save"
@@ -341,6 +345,7 @@ export const getDataFromForm = window.hyperclayModules['form-data']?.getDataFrom
341
345
  export const HyperMorph = window.hyperclayModules['hyper-morph']?.HyperMorph ?? window.hyperclayModules['hyper-morph']?.default;
342
346
  export const morph = window.hyperclayModules['hyper-morph']?.morph ?? window.hyperclayModules['hyper-morph']?.default;
343
347
  export const cms = window.hyperclayModules['hypercms']?.cms ?? window.hyperclayModules['hypercms']?.default;
348
+ export const undo = window.hyperclayModules['undo']?.undo ?? window.hyperclayModules['undo']?.default;
344
349
  export const slugify = window.hyperclayModules['slugify']?.slugify ?? window.hyperclayModules['slugify']?.default;
345
350
  export const copyToClipboard = window.hyperclayModules['copy-to-clipboard']?.copyToClipboard ?? window.hyperclayModules['copy-to-clipboard']?.default;
346
351
  export const query = window.hyperclayModules['query-params']?.query ?? window.hyperclayModules['query-params']?.default;
package/src/undo.js ADDED
@@ -0,0 +1,23 @@
1
+ // Re-exports the vendored hyper-undo as window.hyperclay.undo, and
2
+ // auto-starts the singleton in edit mode so smooth-sailing apps "just work".
3
+ // The vendor file's wrapper attaches the public API to window.hyperclay.undo
4
+ // during evaluation (see hyper-undo/scripts/copy-to-hyperclayjs.js).
5
+
6
+ import { undo } from './vendor/hyper-undo.vendor.js'
7
+ import { isEditMode } from './core/isAdminOfCurrentResource.js'
8
+
9
+ function init() {
10
+ if (!isEditMode) return
11
+ // Defer until the body exists so the default scope (document.body) is valid.
12
+ if (typeof document === 'undefined') return
13
+ if (document.readyState === 'loading') {
14
+ document.addEventListener('DOMContentLoaded', () => undo.start({ bindKeys: true }))
15
+ } else {
16
+ undo.start({ bindKeys: true })
17
+ }
18
+ }
19
+
20
+ init()
21
+
22
+ export { undo }
23
+ export default undo
@@ -67,7 +67,7 @@ const Mutation = {
67
67
  },
68
68
 
69
69
  _observing: false,
70
- _paused: false,
70
+ _pauseDepth: 0,
71
71
  debug: false,
72
72
 
73
73
  /**
@@ -76,21 +76,34 @@ const Mutation = {
76
76
  * Always pair with resume() in a try/finally block.
77
77
  */
78
78
  pause() {
79
- this._paused = true;
80
- this._log('Paused');
79
+ // Reference-counted so nested pauses (e.g. a programmatic pause wrapping a
80
+ // live-sync morph that also pauses) only resume on the outermost release.
81
+ this._pauseDepth++;
82
+ // Bridge: pause undo recorder too. Live-sync calls Mutation.pause()
83
+ // before morphing remote HTML in, and we want those mutations excluded
84
+ // from the local undo stack as well. undo.pause() is itself reference-counted.
85
+ if (typeof window !== 'undefined' && window.hyperclay && window.hyperclay.undo && window.hyperclay.undo.pause) {
86
+ window.hyperclay.undo.pause();
87
+ }
88
+ this._log('Paused', this._pauseDepth);
81
89
  },
82
90
 
83
91
  /**
84
92
  * Resume mutation observation after a pause.
85
93
  */
86
94
  resume() {
87
- // Drain pending mutation records observer stays connected during pause,
88
- // so morph mutations are recorded and would fire async after _paused=false
89
- if (this._observer) {
95
+ if (this._pauseDepth === 0) return; // underflow guard
96
+ this._pauseDepth--;
97
+ // Drain pending mutation records only on the outermost release — observer
98
+ // stays connected during pause, so morph mutations are recorded and would
99
+ // fire async once the depth returns to zero.
100
+ if (this._pauseDepth === 0 && this._observer) {
90
101
  this._observer.takeRecords();
91
102
  }
92
- this._paused = false;
93
- this._log('Resumed');
103
+ if (typeof window !== 'undefined' && window.hyperclay && window.hyperclay.undo && window.hyperclay.undo.resume) {
104
+ window.hyperclay.undo.resume();
105
+ }
106
+ this._log('Resumed', this._pauseDepth);
94
107
  },
95
108
 
96
109
  _log(message, data = null, type = 'log') {
@@ -215,7 +228,7 @@ const Mutation = {
215
228
 
216
229
  _handleMutations(mutations) {
217
230
  // Skip all mutations while paused (e.g., during live-sync morph)
218
- if (this._paused) {
231
+ if (this._pauseDepth > 0) {
219
232
  this._log(`Skipping ${mutations.length} mutations (paused)`);
220
233
  return;
221
234
  }
@@ -1,4 +1,4 @@
1
- var HyperMorph=(()=>{var z=Object.defineProperty;var ne=Object.getOwnPropertyDescriptor;var re=Object.getOwnPropertyNames;var se=Object.prototype.hasOwnProperty;var ie=(s,c)=>{for(var a in c)z(s,a,{get:c[a],enumerable:!0})},ae=(s,c,a,d)=>{if(c&&typeof c=="object"||typeof c=="function")for(let h of re(c))!se.call(s,h)&&h!==a&&z(s,h,{get:()=>c[h],enumerable:!(d=ne(c,h))||d.enumerable});return s};var oe=s=>ae(z({},"__esModule",{value:!0}),s);var we={};ie(we,{HyperMorph:()=>W,default:()=>ke,defaults:()=>Se,morph:()=>ye});var J={includeClasses:!0,includeAttributes:["href","src","name","type","role","aria-label","alt","title"],excludeAttributePrefixes:["data-morph-","data-hyper-","data-im-"],textHintLength:64,excludeIds:!0,maxPathDepth:4,landmarks:["HEADER","NAV","MAIN","ASIDE","FOOTER","SECTION","ARTICLE"],weights:{signature:100,pathSegment:10,textMatch:20,textMismatch:25,uniqueCandidate:50,positionPenalty:1,slotMatch:30},minConfidence:101};function ce(s){let c=5381;for(let a=0;a<s.length;a++)c=(c<<5)+c^s.charCodeAt(a);return Math.abs(c).toString(36)}function ue(s){if(s.classList&&s.classList.length>0)return Array.from(s.classList).sort().join(" ");let c=s.getAttribute?.("class");return c?c.split(/\s+/).filter(Boolean).sort().join(" "):""}function le(s,c){let a=[];for(let d of s.attributes||[]){let h=d.name;h==="id"||h==="class"||c.excludeAttributePrefixes.some(w=>h.startsWith(w))||c.includeAttributes.includes(h)&&a.push(`${h}=${d.value}`)}return a.sort().join("|")}function de(s,c){return(s.textContent||"").replace(/\s+/g," ").trim().slice(0,c.textHintLength)}function fe(s,c){let a=[s.tagName];return c.includeClasses&&a.push(ue(s)),a.push(le(s,c)),ce(a.join("|"))}function he(s){let c=s.tagName,a=1,d=s.previousElementSibling;for(;d;)d.tagName===c&&a++,d=d.previousElementSibling;return a}function pe(s,c){return s.id||s.getAttribute?.("role")?!0:c.landmarks.includes(s.tagName)}function me(s){if(s.id)return`#${s.id}`;let c=s.getAttribute?.("role");return c?`@${c}`:s.tagName}function ge(s,c){let a=[],d=s;for(;d&&d.tagName&&a.length<c.maxPathDepth;){let h=`${d.tagName}:${he(d)}`;if(a.unshift(h),d!==s&&pe(d,c)){a.unshift(me(d));break}d=d.parentElement}return a}function be(s,c){let a=0,d=s.length-1,h=c.length-1;for(;d>=0&&h>=0&&s[d]===c[h];)a++,d--,h--;return a}function q(s,c,a){if(a.has(s))return a.get(s);let d={signature:fe(s,c),path:ge(s,c),textHint:de(s,c)};return a.set(s,d),d}function ee(s,c,a,d){if(d.has(s))return d.get(s);let h=new Map,w=s.querySelectorAll("*"),E=0;for(let S of w){let H=q(S,c,a);H.domIndex=E++,h.has(H.signature)||h.set(H.signature,[]),h.get(H.signature).push(S)}return d.set(s,h),h}function Me(s,c,a){a.delete(s),c.delete(s);let d=s.querySelectorAll("*");for(let h of d)c.delete(h)}function U(s,c,a,d,h){let w=q(s,a,d),E=q(c,a,d),S=a.weights,H={},T=0;if(w.signature!==E.signature)return{score:0,breakdown:{rejected:"signature mismatch"}};T+=S.signature,H.signature=S.signature;let k=be(w.path,E.path)*S.pathSegment;T+=k,H.path=k;let v=!0;if(w.textHint&&E.textHint?w.textHint===E.textHint?(T+=S.textMatch,H.text=S.textMatch):(T-=S.textMismatch,H.text=-S.textMismatch,v=!1):w.textHint!==E.textHint&&(T-=S.textMismatch,H.text=-S.textMismatch,v=!1),h.candidateCount===1&&v&&(T+=S.uniqueCandidate,H.unique=S.uniqueCandidate),typeof w.domIndex=="number"&&typeof E.domIndex=="number"){let I=Math.abs(w.domIndex-E.domIndex),L=Math.min(I*S.positionPenalty,20);T-=L,H.drift=-L}return{score:T,breakdown:H}}function Q(s,c,a,d,h){if(a.excludeIds&&s.id)return null;let w=ee(c,a,d,h),E=q(s,a,d);if(typeof E.domIndex!="number"){let v=0,I=s.previousElementSibling;for(;I;)v++,I=I.previousElementSibling;E.domIndex=v}let S=w.get(E.signature)||[],H=a.excludeIds?S.filter(v=>!v.id):S;if(H.length===0)return null;let T=null,O=0,k=null;for(let v of H){let{score:I,breakdown:L}=U(s,v,a,d,{candidateCount:H.length});I>O&&(O=I,T=v,k=L)}return O<a.minConfidence?null:{element:T,confidence:O,breakdown:k}}function ve(s,c,a,d){let h=[],w=a.weights.signature+a.weights.slotMatch,E={slot:w};function S(k){if(k.children)return k.children;let v=k.childNodes;if(!v)return[];let I=[];for(let L=0;L<v.length;L++)v[L].nodeType===1&&I.push(v[L]);return I}function H(k,v){let I=S(k),L=S(v);if(I.length===L.length)for(let C=0;C<I.length;C++){let u=I[C],M=L[C];if(a.excludeIds&&(u.id||M.id)||u.tagName!==M.tagName)continue;let p=q(u,a,d).signature,A=q(M,a,d).signature;p!==A&&h.push({newEl:u,oldEl:M,score:w,breakdown:E}),H(u,M)}}function T(k,v){for(;;){if(k.tagName===v.tagName)return[k,v];let I=S(k);if(!k.tagName&&I.length===1){k=I[0];continue}let L=S(v);if(L.length===1&&L[0].tagName===k.tagName){v=L[0];continue}return null}}let O=T(s,c);return O&&H(O[0],O[1]),h}function X(s,c,a,d,h){let w=c.querySelectorAll("*"),E=ee(s,a,d,h),S=0;for(let k of w){let v=q(k,a,d);v.domIndex=S++}let H=[];for(let k of w){if(a.excludeIds&&k.id)continue;let v=q(k,a,d),I=E.get(v.signature)||[],L=a.excludeIds?I.filter(C=>!C.id):I;for(let C of L){let{score:u,breakdown:M}=U(k,C,a,d,{candidateCount:L.length});u>=a.minConfidence&&H.push({newEl:k,oldEl:C,score:u,breakdown:M})}}if(a.weights.slotMatch>0){let k=ve(c,s,a,d);for(let v of k)H.push(v)}H.sort((k,v)=>v.score-k.score);let T=new Map,O=new Set;for(let{newEl:k,oldEl:v}of H)T.has(k)||O.has(v)||(T.set(k,v),O.add(v));return T}function Z(s,c,a,d){let h=q(s,a,d),w=q(c,a,d),{score:E,breakdown:S}=U(s,c,a,d,{candidateCount:1});return{matches:E>=a.minConfidence,score:E,breakdown:S,newMeta:{signature:h.signature,path:h.path,textHint:h.textHint},oldMeta:{signature:w.signature,path:w.path,textHint:w.textHint}}}function te(s={}){let c={...J,...s,weights:{...J.weights,...s.weights}},a=new WeakMap,d=new WeakMap;return{findMatch:(h,w)=>Q(h,w,c,a,d),computeMatches:(h,w)=>X(h,w,c,a,d),explain:(h,w)=>Z(h,w,c,a),invalidate:h=>Me(h,a,d),session:()=>{let h=new WeakMap,w=new WeakMap;return{findMatch:(E,S)=>Q(E,S,c,h,w),computeMatches:(E,S)=>X(E,S,c,h,w),explain:(E,S)=>Z(E,S,c,h)}},getConfig:()=>({...c})}}var Ae=te(),W=(function(){"use strict";let s=()=>{};function c(u){if(!(u instanceof Element))return!1;if(u.hasAttribute("save-ignore"))return!0;if(u.tagName==="LINK"||u.tagName==="SCRIPT"){let M=u.getAttribute("src")||u.getAttribute("href")||"";if(M.startsWith("chrome-extension://")||M.startsWith("moz-extension://")||M.startsWith("safari-web-extension://"))return!0}return!1}function a(u,M){if(M!=="smart")return u.outerHTML;let p=u.getAttribute("src"),A=u.getAttribute("type")||"text/javascript";if(p)try{let b=new URL(p,window.location.href);return`ext:${A}:${b.origin}${b.pathname}${b.search}`}catch{return`ext:${A}:${p}`}else{let b=u.textContent.trim(),g=5381;for(let r=0;r<b.length;r++)g=(g<<5)+g^b.charCodeAt(r);return`inline:${A}:${Math.abs(g).toString(36)}`}}let d={morphStyle:"outerHTML",callbacks:{beforeNodeAdded:s,afterNodeAdded:s,beforeNodeMorphed:s,afterNodeMorphed:s,beforeNodeRemoved:s,afterNodeRemoved:s,beforeAttributeUpdated:s},head:{style:"merge",shouldPreserve:u=>u.getAttribute("im-preserve")==="true",shouldReAppend:u=>u.getAttribute("im-re-append")==="true",shouldRemove:s,afterHeadMorphed:s},scripts:{handle:!1,matchMode:"outerHTML",shouldPreserve:u=>u.getAttribute("im-preserve")==="true",shouldReAppend:u=>u.getAttribute("im-re-append")==="true",shouldRemove:s,afterScriptsHandled:s},restoreFocus:!0},h={computeMatches(u,M){let{computeMatches:p}=Ae.session();return p(u,M)}};function w(u,M,p={}){u=L(u);let A=C(M),b=I(u,A,p),g=b.scripts.matchMode,r=new Set(Array.from(u.querySelectorAll("script")).map(n=>a(n,g))),l=S(b,()=>O(b,u,A,n=>n.morphStyle==="innerHTML"?(H(n,u,A),Array.from(u.childNodes)):E(n,u,A)));b.pantry.remove();let e=v(u,r,b);return e.length>0?l instanceof Promise?l.then(n=>Promise.all(e).then(()=>n)):Promise.all(e).then(()=>l):l}function E(u,M,p){let A=C(M);return H(u,A,p,M,M.nextSibling),Array.from(A.childNodes)}function S(u,M){if(!u.config.restoreFocus)return M();let p=document.activeElement;if(!(p instanceof HTMLInputElement||p instanceof HTMLTextAreaElement))return M();let{id:A,selectionStart:b,selectionEnd:g}=p,r=M();return A&&A!==document.activeElement?.getAttribute("id")&&(p=u.target.querySelector(`[id="${A}"]`),p?.focus()),p&&!p.selectionEnd&&g!=null&&p.setSelectionRange(b,g),r}let H=(function(){function u(e,n,i,t=null,o=null){n instanceof HTMLTemplateElement&&i instanceof HTMLTemplateElement&&(n=n.content,i=i.content),t||=n.firstChild;for(let f of i.childNodes){if(c(f))continue;if(t&&t!=o){let y=p(e,f,t,o);if(y){y!==t&&b(e,t,y),T(y,f,e),t=y.nextSibling;continue}}if(f instanceof Element){let y=f.getAttribute("id");if(e.persistentIds.has(y)){let N=g(n,y,t,e);T(N,f,e),t=N.nextSibling;continue}if(!e.idMap.has(f)){let N=e.hyperMatches.get(f);if(N&&!e.idMap.has(N)){l(n,N,t),T(N,f,e),t=N.nextSibling;continue}}}let m=M(n,f,t,e);m&&(t=m.nextSibling)}for(;t&&t!=o;){let f=t;t=t.nextSibling,c(f)||A(e,f)}}function M(e,n,i,t){if(t.callbacks.beforeNodeAdded(n)===!1)return null;if(t.idMap.has(n)){let o=document.createElement(n.tagName);return e.insertBefore(o,i),T(o,n,t),t.callbacks.afterNodeAdded(o),o}else{let o=document.importNode(n,!0);return e.insertBefore(o,i),t.callbacks.afterNodeAdded(o),o}}let p=(function(){function e(t,o,f,m){let y=o instanceof Element&&!t.idMap.has(o)?t.hyperMatches.get(o):null,N=null,$=o.nextSibling,D=0,x=f;for(;x&&x!=m;){if(i(x,o)){if(n(t,x,o)||x===y&&!t.idMap.has(x))return x;if(N===null){let V=x instanceof Element&&t.hyperMatchedOldElements.has(x);!t.idMap.has(x)&&!V&&(N=x)}}if(N===null&&$&&i(x,$)&&(D++,$=$.nextSibling,D>=2&&(N=void 0)),t.activeElementAndParents.includes(x))break;x=x.nextSibling}return N||null}function n(t,o,f){let m=t.idMap.get(o),y=t.idMap.get(f);if(!y||!m)return!1;for(let N of m)if(y.has(N))return!0;return!1}function i(t,o){let f=t,m=o;return f.nodeType===m.nodeType&&f.tagName===m.tagName&&(!f.getAttribute?.("id")||f.getAttribute?.("id")===m.getAttribute?.("id"))}return e})();function A(e,n){let i=n instanceof Element&&e.hyperMatchedOldElements.has(n)&&!e.idMap.has(n);if(e.idMap.has(n)||i)l(e.pantry,n,null);else{if(e.callbacks.beforeNodeRemoved(n)===!1)return;n.parentNode?.removeChild(n),e.callbacks.afterNodeRemoved(n)}}function b(e,n,i){let t=n;for(;t&&t!==i;){let o=t;t=t.nextSibling,c(o)||A(e,o)}return t}function g(e,n,i,t){let o=t.target.getAttribute?.("id")===n&&t.target||t.target.querySelector(`[id="${n}"]`)||t.pantry.querySelector(`[id="${n}"]`);return r(o,t),l(e,o,i),o}function r(e,n){let i=e.getAttribute("id");for(;e=e.parentNode;){let t=n.idMap.get(e);t&&(t.delete(i),t.size||n.idMap.delete(e))}}function l(e,n,i){if(e.moveBefore)try{e.moveBefore(n,i)}catch{e.insertBefore(n,i)}else e.insertBefore(n,i)}return u})(),T=(function(){function u(r,l,e){return e.ignoreActive&&r===document.activeElement?null:(e.callbacks.beforeNodeMorphed(r,l)===!1||(r instanceof HTMLHeadElement&&e.head.ignore||(r instanceof HTMLHeadElement&&e.head.style!=="morph"?k(r,l,e):(M(r,l,e),g(r,e)||H(e,r,l))),e.callbacks.afterNodeMorphed(r,l)),r)}function M(r,l,e){let n=l.nodeType;if(n===1){let i=r,t=l,o=i.attributes,f=t.attributes;for(let m of f)b(m.name,i,"update",e)||i.getAttribute(m.name)!==m.value&&i.setAttribute(m.name,m.value);for(let m=o.length-1;0<=m;m--){let y=o[m];if(y&&!t.hasAttribute(y.name)){if(b(y.name,i,"remove",e))continue;i.removeAttribute(y.name)}}g(i,e)||p(i,t,e)}(n===8||n===3)&&r.nodeValue!==l.nodeValue&&(r.nodeValue=l.nodeValue)}function p(r,l,e){if(r instanceof HTMLInputElement&&l instanceof HTMLInputElement&&l.type!=="file"){let n=l.value,i=r.value;A(r,l,"checked",e),A(r,l,"disabled",e),l.hasAttribute("value")?i!==n&&(b("value",r,"update",e)||(r.setAttribute("value",n),r.value=n)):b("value",r,"remove",e)||(r.value="",r.removeAttribute("value"))}else if(r instanceof HTMLOptionElement&&l instanceof HTMLOptionElement)A(r,l,"selected",e);else if(r instanceof HTMLTextAreaElement&&l instanceof HTMLTextAreaElement){let n=l.value,i=r.value;if(b("value",r,"update",e))return;n!==i&&(r.value=n),r.firstChild&&r.firstChild.nodeValue!==n&&(r.firstChild.nodeValue=n)}}function A(r,l,e,n){let i=l[e],t=r[e];if(i!==t){let o=b(e,r,"update",n);o||(r[e]=l[e]),i?o||r.setAttribute(e,""):b(e,r,"remove",n)||r.removeAttribute(e)}}function b(r,l,e,n){return r==="value"&&n.ignoreActiveValue&&l===document.activeElement?!0:n.callbacks.beforeAttributeUpdated(r,l,e)===!1}function g(r,l){return!!l.ignoreActiveValue&&r===document.activeElement&&r!==document.body}return u})();function O(u,M,p,A){if(u.head.block){let b=M.querySelector("head"),g=p.querySelector("head");if(b&&g){let r=k(b,g,u);return Promise.all(r).then(()=>{let l=Object.assign(u,{head:{block:!1,ignore:!0}});return A(l)})}}return A(u)}function k(u,M,p){let A=[],b=[],g=[],r=[],l=p.scripts.matchMode,e=t=>{if(t.tagName==="SCRIPT")return a(t,l);if(t.tagName==="LINK"&&l==="smart"){let o=t.getAttribute("href");if(o)try{let f=new URL(o,window.location.href);return`link:${t.getAttribute("rel")||""}:${f.origin}${f.pathname}${f.search}`}catch{}}return t.outerHTML},n=new Map;for(let t of M.children)c(t)||n.set(e(t),t);for(let t of u.children){let o=e(t),f=n.has(o),m=p.head.shouldReAppend(t),y=p.head.shouldPreserve(t);f||y?m?b.push(t):(n.delete(o),g.push(t)):p.head.style==="append"?m&&(b.push(t),r.push(t)):p.head.shouldRemove(t)!==!1&&!c(t)&&b.push(t)}r.push(...n.values());let i=[];for(let t of r){let o=document.createRange().createContextualFragment(t.outerHTML).firstChild;if(p.callbacks.beforeNodeAdded(o)!==!1){if("href"in o&&o.href||"src"in o&&o.src){let f,m=new Promise(function(y){f=y});o.addEventListener("load",function(){f()}),i.push(m)}u.appendChild(o),p.callbacks.afterNodeAdded(o),A.push(o)}}for(let t of b)p.callbacks.beforeNodeRemoved(t)!==!1&&(u.removeChild(t),p.callbacks.afterNodeRemoved(t));return p.head.afterHeadMorphed(u,{added:A,kept:g,removed:b}),i}function v(u,M,p){if(!p.scripts.handle)return[];let A=[],b=[],g=[],r=[],l=p.scripts.matchMode,e=Array.from(u.querySelectorAll("script"));for(let i of e){let t=a(i,l),o=M.has(t),f=p.scripts.shouldPreserve(i),m=p.scripts.shouldReAppend(i);o||f?m?(b.push(i),r.push(i)):g.push(i):r.push(i)}for(let i of M){let t=e.some(o=>o.outerHTML===i)}let n=[];for(let i of r){if(p.callbacks.beforeNodeAdded(i)===!1)continue;let t=document.createRange().createContextualFragment(i.outerHTML).firstChild;if(t.src){let o,f=new Promise(function(m){o=m});t.addEventListener("load",function(){o()}),t.addEventListener("error",function(){o()}),n.push(f)}i.replaceWith(t),p.callbacks.afterNodeAdded(t),A.push(t)}return p.scripts.afterScriptsHandled(u,{added:A,kept:g,removed:b}),n}let I=(function(){function u(e,n,i){let{persistentIds:t,idMap:o}=r(e,n),f=h.computeMatches(e,n);if(typeof i.key=="function"){let $=new Map,D=new Set,x=R=>{let B=i.key(R);B!=null&&($.has(B)?D.add(B):$.set(B,R))};e instanceof Element&&x(e);for(let R of e.querySelectorAll("*"))x(R);for(let R of D)$.delete(R);let V=new Map;for(let[R,B]of f)V.set(B,R);let P=n.__hyperMorphRoot||n,F=new Map,G=new Set,Y=R=>{let B=i.key(R);B!=null&&(F.has(B)?G.add(B):F.set(B,R))};P instanceof Element&&Y(P);for(let R of P.querySelectorAll("*"))Y(R);for(let R of G)F.delete(R);for(let[R,B]of F){let j=$.get(R);if(!j||j.tagName!==B.tagName)continue;let K=V.get(j);K&&K!==B&&f.delete(K);let _=f.get(B);_&&_!==j&&V.delete(_),f.set(B,j),V.set(j,B)}}let m=new Set;for(let $ of f.values())m.add($);let y=M(i),N=y.morphStyle||"outerHTML";if(!["innerHTML","outerHTML"].includes(N))throw`Do not understand how to morph style ${N}`;return{target:e,newContent:n,config:y,morphStyle:N,ignoreActive:y.ignoreActive,ignoreActiveValue:y.ignoreActiveValue,restoreFocus:y.restoreFocus,idMap:o,persistentIds:t,hyperMatches:f,hyperMatchedOldElements:m,pantry:p(),activeElementAndParents:A(e),callbacks:y.callbacks,head:y.head,scripts:y.scripts}}function M(e){let n=Object.assign({},d);return Object.assign(n,e),n.callbacks=Object.assign({},d.callbacks,e.callbacks),n.head=Object.assign({},d.head,e.head),n.scripts=Object.assign({},d.scripts,e.scripts),n}function p(){let e=document.createElement("div");return e.hidden=!0,document.body.insertAdjacentElement("afterend",e),e}function A(e){let n=[],i=document.activeElement;if(i?.tagName!=="BODY"&&e.contains(i))for(;i&&(n.push(i),i!==e);)i=i.parentElement;return n}function b(e){let n=Array.from(e.querySelectorAll("[id]"));return e.getAttribute?.("id")&&n.push(e),n}function g(e,n,i,t){for(let o of t){let f=o.getAttribute("id");if(n.has(f)){let m=o;for(;m;){let y=e.get(m);if(y==null&&(y=new Set,e.set(m,y)),y.add(f),m===i)break;m=m.parentElement}}}}function r(e,n){let i=b(e),t=b(n),o=l(i,t),f=new Map;g(f,o,e,i);let m=n.__hyperMorphRoot||n;return g(f,o,m,t),{persistentIds:o,idMap:f}}function l(e,n){let i=new Set,t=new Map;for(let{id:f,tagName:m}of e)t.has(f)?i.add(f):t.set(f,m);let o=new Set;for(let{id:f,tagName:m}of n)o.has(f)?i.add(f):t.get(f)===m&&o.add(f);for(let f of i)o.delete(f);return o}return u})(),{normalizeElement:L,normalizeParent:C}=(function(){let u=new WeakSet;function M(g){return g instanceof Document?g.documentElement:g}function p(g){if(g==null)return document.createElement("div");if(typeof g=="string")return p(b(g));if(u.has(g))return g;if(g instanceof Node){if(g.parentNode)return new A(g);{let r=document.createElement("div");return r.append(g),r}}else{let r=document.createElement("div");for(let l of[...g])r.append(l);return r}}class A{constructor(r){this.originalNode=r,this.realParentNode=r.parentNode,this.previousSibling=r.previousSibling,this.nextSibling=r.nextSibling}get childNodes(){let r=[],l=this.previousSibling?this.previousSibling.nextSibling:this.realParentNode.firstChild;for(;l&&l!=this.nextSibling;)r.push(l),l=l.nextSibling;return r}querySelectorAll(r){return this.childNodes.reduce((l,e)=>{if(e instanceof Element){e.matches(r)&&l.push(e);let n=e.querySelectorAll(r);for(let i=0;i<n.length;i++)l.push(n[i])}return l},[])}insertBefore(r,l){return this.realParentNode.insertBefore(r,l)}moveBefore(r,l){return this.realParentNode.moveBefore(r,l)}get __hyperMorphRoot(){return this.originalNode}}function b(g){let r=new DOMParser,l=g.replace(/<svg(\s[^>]*>|>)([\s\S]*?)<\/svg>/gim,"");if(l.match(/<\/html>/)||l.match(/<\/head>/)||l.match(/<\/body>/)){let e=r.parseFromString(g,"text/html");if(l.match(/<\/html>/))return u.add(e),e;{let n=e.firstChild;return n&&u.add(n),n}}else{let n=r.parseFromString("<body><template>"+g+"</template></body>","text/html").body.querySelector("template").content;return u.add(n),n}}return{normalizeElement:M,normalizeParent:p}})();return{morph:w,defaults:d}})();var ye=W.morph,Se=W.defaults,ke=W;return oe(we);})();
1
+ var HyperMorph=(()=>{var z=Object.defineProperty;var ne=Object.getOwnPropertyDescriptor;var re=Object.getOwnPropertyNames;var se=Object.prototype.hasOwnProperty;var ie=(s,u)=>{for(var a in u)z(s,a,{get:u[a],enumerable:!0})},ae=(s,u,a,f)=>{if(u&&typeof u=="object"||typeof u=="function")for(let h of re(u))!se.call(s,h)&&h!==a&&z(s,h,{get:()=>u[h],enumerable:!(f=ne(u,h))||f.enumerable});return s};var oe=s=>ae(z({},"__esModule",{value:!0}),s);var we={};ie(we,{HyperMorph:()=>W,default:()=>ke,defaults:()=>Se,morph:()=>Ae});var J={includeClasses:!0,includeAttributes:["href","src","name","type","role","aria-label","alt","title"],excludeAttributePrefixes:["data-morph-","data-hyper-","data-im-"],textHintLength:64,excludeIds:!0,maxPathDepth:4,landmarks:["HEADER","NAV","MAIN","ASIDE","FOOTER","SECTION","ARTICLE"],weights:{signature:100,pathSegment:10,textMatch:20,textMismatch:25,uniqueCandidate:50,positionPenalty:1,slotMatch:30},minConfidence:101};function ue(s){let u=5381;for(let a=0;a<s.length;a++)u=(u<<5)+u^s.charCodeAt(a);return Math.abs(u).toString(36)}function ce(s){if(s.classList&&s.classList.length>0)return Array.from(s.classList).sort().join(" ");let u=s.getAttribute?.("class");return u?u.split(/\s+/).filter(Boolean).sort().join(" "):""}function le(s,u){let a=[];for(let f of s.attributes||[]){let h=f.name;h==="id"||h==="class"||u.excludeAttributePrefixes.some(w=>h.startsWith(w))||u.includeAttributes.includes(h)&&a.push(`${h}=${f.value}`)}return a.sort().join("|")}function fe(s,u){return(s.textContent||"").replace(/\s+/g," ").trim().slice(0,u.textHintLength)}function de(s,u){let a=[s.tagName];return u.includeClasses&&a.push(ce(s)),a.push(le(s,u)),ue(a.join("|"))}function he(s){let u=s.tagName,a=1,f=s.previousElementSibling;for(;f;)f.tagName===u&&a++,f=f.previousElementSibling;return a}function pe(s,u){return s.id||s.getAttribute?.("role")?!0:u.landmarks.includes(s.tagName)}function me(s){if(s.id)return`#${s.id}`;let u=s.getAttribute?.("role");return u?`@${u}`:s.tagName}function ge(s,u){let a=[],f=s;for(;f&&f.tagName&&a.length<u.maxPathDepth;){let h=`${f.tagName}:${he(f)}`;if(a.unshift(h),f!==s&&pe(f,u)){a.unshift(me(f));break}f=f.parentElement}return a}function be(s,u){let a=0,f=s.length-1,h=u.length-1;for(;f>=0&&h>=0&&s[f]===u[h];)a++,f--,h--;return a}function q(s,u,a){if(a.has(s))return a.get(s);let f={signature:de(s,u),path:ge(s,u),textHint:fe(s,u)};return a.set(s,f),f}function ee(s,u,a,f){if(f.has(s))return f.get(s);let h=new Map,w=s.querySelectorAll("*"),E=0;for(let S of w){let H=q(S,u,a);H.domIndex=E++,h.has(H.signature)||h.set(H.signature,[]),h.get(H.signature).push(S)}return f.set(s,h),h}function Me(s,u,a){a.delete(s),u.delete(s);let f=s.querySelectorAll("*");for(let h of f)u.delete(h)}function U(s,u,a,f,h){let w=q(s,a,f),E=q(u,a,f),S=a.weights,H={},T=0;if(w.signature!==E.signature)return{score:0,breakdown:{rejected:"signature mismatch"}};T+=S.signature,H.signature=S.signature;let k=be(w.path,E.path)*S.pathSegment;T+=k,H.path=k;let v=!0;if(w.textHint&&E.textHint?w.textHint===E.textHint?(T+=S.textMatch,H.text=S.textMatch):(T-=S.textMismatch,H.text=-S.textMismatch,v=!1):w.textHint!==E.textHint&&(T-=S.textMismatch,H.text=-S.textMismatch,v=!1),h.candidateCount===1&&v&&(T+=S.uniqueCandidate,H.unique=S.uniqueCandidate),typeof w.domIndex=="number"&&typeof E.domIndex=="number"){let I=Math.abs(w.domIndex-E.domIndex),L=Math.min(I*S.positionPenalty,20);T-=L,H.drift=-L}return{score:T,breakdown:H}}function Q(s,u,a,f,h){if(a.excludeIds&&s.id)return null;let w=ee(u,a,f,h),E=q(s,a,f);if(typeof E.domIndex!="number"){let v=0,I=s.previousElementSibling;for(;I;)v++,I=I.previousElementSibling;E.domIndex=v}let S=w.get(E.signature)||[],H=a.excludeIds?S.filter(v=>!v.id):S;if(H.length===0)return null;let T=null,O=0,k=null;for(let v of H){let{score:I,breakdown:L}=U(s,v,a,f,{candidateCount:H.length});I>O&&(O=I,T=v,k=L)}return O<a.minConfidence?null:{element:T,confidence:O,breakdown:k}}function ve(s,u,a,f){let h=[],w=a.weights.signature+a.weights.slotMatch,E={slot:w};function S(k){if(k.children)return k.children;let v=k.childNodes;if(!v)return[];let I=[];for(let L=0;L<v.length;L++)v[L].nodeType===1&&I.push(v[L]);return I}function H(k,v){let I=S(k),L=S(v);if(I.length===L.length)for(let C=0;C<I.length;C++){let c=I[C],M=L[C];if(a.excludeIds&&(c.id||M.id)||c.tagName!==M.tagName)continue;let p=q(c,a,f).signature,y=q(M,a,f).signature;p!==y&&h.push({newEl:c,oldEl:M,score:w,breakdown:E}),H(c,M)}}function T(k,v){for(;;){if(k.tagName===v.tagName)return[k,v];let I=S(k);if(!k.tagName&&I.length===1){k=I[0];continue}let L=S(v);if(L.length===1&&L[0].tagName===k.tagName){v=L[0];continue}return null}}let O=T(s,u);return O&&H(O[0],O[1]),h}function X(s,u,a,f,h){let w=u.querySelectorAll("*"),E=ee(s,a,f,h),S=0;for(let k of w){let v=q(k,a,f);v.domIndex=S++}let H=[];for(let k of w){if(a.excludeIds&&k.id)continue;let v=q(k,a,f),I=E.get(v.signature)||[],L=a.excludeIds?I.filter(C=>!C.id):I;for(let C of L){let{score:c,breakdown:M}=U(k,C,a,f,{candidateCount:L.length});c>=a.minConfidence&&H.push({newEl:k,oldEl:C,score:c,breakdown:M})}}if(a.weights.slotMatch>0){let k=ve(u,s,a,f);for(let v of k)H.push(v)}H.sort((k,v)=>v.score-k.score);let T=new Map,O=new Set;for(let{newEl:k,oldEl:v}of H)T.has(k)||O.has(v)||(T.set(k,v),O.add(v));return T}function Z(s,u,a,f){let h=q(s,a,f),w=q(u,a,f),{score:E,breakdown:S}=U(s,u,a,f,{candidateCount:1});return{matches:E>=a.minConfidence,score:E,breakdown:S,newMeta:{signature:h.signature,path:h.path,textHint:h.textHint},oldMeta:{signature:w.signature,path:w.path,textHint:w.textHint}}}function te(s={}){let u={...J,...s,weights:{...J.weights,...s.weights}},a=new WeakMap,f=new WeakMap;return{findMatch:(h,w)=>Q(h,w,u,a,f),computeMatches:(h,w)=>X(h,w,u,a,f),explain:(h,w)=>Z(h,w,u,a),invalidate:h=>Me(h,a,f),session:()=>{let h=new WeakMap,w=new WeakMap;return{findMatch:(E,S)=>Q(E,S,u,h,w),computeMatches:(E,S)=>X(E,S,u,h,w),explain:(E,S)=>Z(E,S,u,h)}},getConfig:()=>({...u})}}var ye=te(),W=(function(){"use strict";let s=()=>{};function u(c){if(!(c instanceof Element))return!1;if(c.hasAttribute("save-ignore"))return!0;if(c.tagName==="LINK"||c.tagName==="SCRIPT"){let M=c.getAttribute("src")||c.getAttribute("href")||"";if(M.startsWith("chrome-extension://")||M.startsWith("moz-extension://")||M.startsWith("safari-web-extension://"))return!0}return!1}function a(c,M){if(M!=="smart")return c.outerHTML;let p=c.getAttribute("src"),y=c.getAttribute("type")||"text/javascript";if(p)try{let b=new URL(p,window.location.href);return`ext:${y}:${b.origin}${b.pathname}${b.search}`}catch{return`ext:${y}:${p}`}else{let b=c.textContent.trim(),g=5381;for(let r=0;r<b.length;r++)g=(g<<5)+g^b.charCodeAt(r);return`inline:${y}:${Math.abs(g).toString(36)}`}}let f={morphStyle:"outerHTML",callbacks:{beforeNodeAdded:s,afterNodeAdded:s,beforeNodeMorphed:s,afterNodeMorphed:s,beforeNodeRemoved:s,afterNodeRemoved:s,beforeAttributeUpdated:s},head:{style:"merge",shouldPreserve:c=>c.getAttribute("im-preserve")==="true",shouldReAppend:c=>c.getAttribute("im-re-append")==="true",shouldRemove:s,afterHeadMorphed:s},scripts:{handle:!1,matchMode:"outerHTML",shouldPreserve:c=>c.getAttribute("im-preserve")==="true",shouldReAppend:c=>c.getAttribute("im-re-append")==="true",shouldRemove:s,afterScriptsHandled:s},restoreFocus:!0},h={computeMatches(c,M){let{computeMatches:p}=ye.session();return p(c,M)}};function w(c,M,p={}){c=L(c);let y=C(M),b=I(c,y,p),g=b.scripts.matchMode,r=new Set(Array.from(c.querySelectorAll("script")).map(t=>a(t,g))),l=S(b,()=>O(b,c,y,t=>t.morphStyle==="innerHTML"?(H(t,c,y),Array.from(c.childNodes)):E(t,c,y)));b.pantry.remove();let e=v(c,r,b);return e.length>0?l instanceof Promise?l.then(t=>Promise.all(e).then(()=>t)):Promise.all(e).then(()=>l):l}function E(c,M,p){let y=C(M);return H(c,y,p,M,M.nextSibling),Array.from(y.childNodes)}function S(c,M){if(!c.config.restoreFocus)return M();let p=document.activeElement;if(!(p instanceof HTMLInputElement||p instanceof HTMLTextAreaElement))return M();let{id:y,selectionStart:b,selectionEnd:g}=p,r=M();return y&&y!==document.activeElement?.getAttribute("id")&&(p=c.target.querySelector(`[id="${y}"]`),p?.focus()),p&&!p.selectionEnd&&g!=null&&p.setSelectionRange(b,g),r}let H=(function(){function c(e,t,i,n=null,o=null){t instanceof HTMLTemplateElement&&i instanceof HTMLTemplateElement&&(t=t.content,i=i.content),n||=t.firstChild;for(let d of i.childNodes){if(u(d))continue;if(n&&n!=o){let A=p(e,d,n,o);if(A){A!==n&&b(e,n,A),T(A,d,e),n=A.nextSibling;continue}}if(d instanceof Element){let A=d.getAttribute("id");if(e.persistentIds.has(A)){let N=g(t,A,n,e);T(N,d,e),n=N.nextSibling;continue}if(!e.idMap.has(d)){let N=e.hyperMatches.get(d);if(N&&!e.idMap.has(N)){l(t,N,n),T(N,d,e),n=N.nextSibling;continue}}}let m=M(t,d,n,e);m&&(n=m.nextSibling)}for(;n&&n!=o;){let d=n;n=n.nextSibling,u(d)||y(e,d)}}function M(e,t,i,n){if(n.callbacks.beforeNodeAdded(t)===!1)return null;if(n.idMap.has(t)){let o=document.createElement(t.tagName);return e.insertBefore(o,i),T(o,t,n),n.callbacks.afterNodeAdded(o),o}else{let o=document.importNode(t,!0);return e.insertBefore(o,i),n.callbacks.afterNodeAdded(o),o}}let p=(function(){function e(n,o,d,m){let A=o instanceof Element&&!n.idMap.has(o)?n.hyperMatches.get(o):null,N=null,$=o.nextSibling,D=0,R=d;for(;R&&R!=m;){if(i(R,o)){if(t(n,R,o)||R===A&&!n.idMap.has(R))return R;if(N===null){let V=R instanceof Element&&n.hyperMatchedOldElements.has(R);!n.idMap.has(R)&&!V&&(N=R)}}if(N===null&&$&&i(R,$)&&(D++,$=$.nextSibling,D>=2&&(N=void 0)),n.activeElementAndParents.includes(R))break;R=R.nextSibling}return N||null}function t(n,o,d){let m=n.idMap.get(o),A=n.idMap.get(d);if(!A||!m)return!1;for(let N of m)if(A.has(N))return!0;return!1}function i(n,o){let d=n,m=o;return d.nodeType===m.nodeType&&d.tagName===m.tagName&&(!d.getAttribute?.("id")||d.getAttribute?.("id")===m.getAttribute?.("id"))}return e})();function y(e,t){let i=t instanceof Element&&e.hyperMatchedOldElements.has(t)&&!e.idMap.has(t);if(e.idMap.has(t)||i)l(e.pantry,t,null);else{if(e.callbacks.beforeNodeRemoved(t)===!1)return;t.parentNode?.removeChild(t),e.callbacks.afterNodeRemoved(t)}}function b(e,t,i){let n=t;for(;n&&n!==i;){let o=n;n=n.nextSibling,u(o)||y(e,o)}return n}function g(e,t,i,n){let o=n.target.getAttribute?.("id")===t&&n.target||n.target.querySelector(`[id="${t}"]`)||n.pantry.querySelector(`[id="${t}"]`);return r(o,n),l(e,o,i),o}function r(e,t){let i=e.getAttribute("id");for(;e=e.parentNode;){let n=t.idMap.get(e);n&&(n.delete(i),n.size||t.idMap.delete(e))}}function l(e,t,i){if(e.moveBefore)try{e.moveBefore(t,i)}catch{e.insertBefore(t,i)}else e.insertBefore(t,i)}return c})(),T=(function(){function c(r,l,e){return e.ignoreActive&&r===document.activeElement?null:(e.callbacks.beforeNodeMorphed(r,l)===!1||(r instanceof HTMLHeadElement&&e.head.ignore||(r instanceof HTMLHeadElement&&e.head.style!=="morph"?k(r,l,e):(M(r,l,e),g(r,e)||H(e,r,l))),e.callbacks.afterNodeMorphed(r,l)),r)}function M(r,l,e){let t=l.nodeType;if(t===1){let i=r,n=l,o=i.attributes,d=n.attributes;for(let m of d)b(m.name,i,"update",e)||i.getAttribute(m.name)!==m.value&&i.setAttribute(m.name,m.value);for(let m=o.length-1;0<=m;m--){let A=o[m];if(A&&!n.hasAttribute(A.name)){if(b(A.name,i,"remove",e))continue;i.removeAttribute(A.name)}}g(i,e)||p(i,n,e)}(t===8||t===3)&&r.nodeValue!==l.nodeValue&&(r.nodeValue=l.nodeValue)}function p(r,l,e){if(r instanceof HTMLInputElement&&l instanceof HTMLInputElement&&l.type!=="file"){let t=l.value,i=r.value;y(r,l,"checked",e),y(r,l,"disabled",e),e.formStateSync==="property"?i!==t&&(b("value",r,"update",e)||(r.value=t)):l.hasAttribute("value")?i!==t&&(b("value",r,"update",e)||(r.setAttribute("value",t),r.value=t)):b("value",r,"remove",e)||(r.value="",r.removeAttribute("value"))}else if(r instanceof HTMLOptionElement&&l instanceof HTMLOptionElement)y(r,l,"selected",e);else if(r instanceof HTMLTextAreaElement&&l instanceof HTMLTextAreaElement){let t=l.value,i=r.value;if(b("value",r,"update",e))return;t!==i&&(r.value=t),r.firstChild&&r.firstChild.nodeValue!==t&&(r.firstChild.nodeValue=t)}}function y(r,l,e,t){let i=l[e],n=r[e];if(i!==n){let o=b(e,r,"update",t);if(o||(r[e]=l[e]),t.formStateSync==="property")return;i?o||r.setAttribute(e,""):b(e,r,"remove",t)||r.removeAttribute(e)}}function b(r,l,e,t){return r==="value"&&t.ignoreActiveValue&&l===document.activeElement?!0:t.callbacks.beforeAttributeUpdated(r,l,e)===!1}function g(r,l){return!!l.ignoreActiveValue&&r===document.activeElement&&r!==document.body}return c})();function O(c,M,p,y){if(c.head.block){let b=M.querySelector("head"),g=p.querySelector("head");if(b&&g){let r=k(b,g,c);return Promise.all(r).then(()=>{let l=Object.assign(c,{head:{block:!1,ignore:!0}});return y(l)})}}return y(c)}function k(c,M,p){let y=[],b=[],g=[],r=[],l=p.scripts.matchMode,e=n=>{if(n.tagName==="SCRIPT")return a(n,l);if(n.tagName==="LINK"&&l==="smart"){let o=n.getAttribute("href");if(o)try{let d=new URL(o,window.location.href);return`link:${n.getAttribute("rel")||""}:${d.origin}${d.pathname}${d.search}`}catch{}}return n.outerHTML},t=new Map;for(let n of M.children)u(n)||t.set(e(n),n);for(let n of c.children){let o=e(n),d=t.has(o),m=p.head.shouldReAppend(n),A=p.head.shouldPreserve(n);d||A?m?b.push(n):(t.delete(o),g.push(n)):p.head.style==="append"?m&&(b.push(n),r.push(n)):p.head.shouldRemove(n)!==!1&&!u(n)&&b.push(n)}r.push(...t.values());let i=[];for(let n of r){let o=document.createRange().createContextualFragment(n.outerHTML).firstChild;if(p.callbacks.beforeNodeAdded(o)!==!1){if("href"in o&&o.href||"src"in o&&o.src){let d,m=new Promise(function(A){d=A});o.addEventListener("load",function(){d()}),i.push(m)}c.appendChild(o),p.callbacks.afterNodeAdded(o),y.push(o)}}for(let n of b)p.callbacks.beforeNodeRemoved(n)!==!1&&(c.removeChild(n),p.callbacks.afterNodeRemoved(n));return p.head.afterHeadMorphed(c,{added:y,kept:g,removed:b}),i}function v(c,M,p){if(!p.scripts.handle)return[];let y=[],b=[],g=[],r=[],l=p.scripts.matchMode,e=Array.from(c.querySelectorAll("script"));for(let i of e){let n=a(i,l),o=M.has(n),d=p.scripts.shouldPreserve(i),m=p.scripts.shouldReAppend(i);o||d?m?(b.push(i),r.push(i)):g.push(i):r.push(i)}for(let i of M){let n=e.some(o=>o.outerHTML===i)}let t=[];for(let i of r){if(p.callbacks.beforeNodeAdded(i)===!1)continue;let n=document.createRange().createContextualFragment(i.outerHTML).firstChild;if(n.src){let o,d=new Promise(function(m){o=m});n.addEventListener("load",function(){o()}),n.addEventListener("error",function(){o()}),t.push(d)}i.replaceWith(n),p.callbacks.afterNodeAdded(n),y.push(n)}return p.scripts.afterScriptsHandled(c,{added:y,kept:g,removed:b}),t}let I=(function(){function c(e,t,i){let{persistentIds:n,idMap:o}=r(e,t),d=h.computeMatches(e,t);if(typeof i.key=="function"){let $=new Map,D=new Set,R=x=>{let B=i.key(x);B!=null&&($.has(B)?D.add(B):$.set(B,x))};e instanceof Element&&R(e);for(let x of e.querySelectorAll("*"))R(x);for(let x of D)$.delete(x);let V=new Map;for(let[x,B]of d)V.set(B,x);let P=t.__hyperMorphRoot||t,F=new Map,G=new Set,Y=x=>{let B=i.key(x);B!=null&&(F.has(B)?G.add(B):F.set(B,x))};P instanceof Element&&Y(P);for(let x of P.querySelectorAll("*"))Y(x);for(let x of G)F.delete(x);for(let[x,B]of F){let j=$.get(x);if(!j||j.tagName!==B.tagName)continue;let K=V.get(j);K&&K!==B&&d.delete(K);let _=d.get(B);_&&_!==j&&V.delete(_),d.set(B,j),V.set(j,B)}}let m=new Set;for(let $ of d.values())m.add($);let A=M(i),N=A.morphStyle||"outerHTML";if(!["innerHTML","outerHTML"].includes(N))throw`Do not understand how to morph style ${N}`;return{target:e,newContent:t,config:A,morphStyle:N,ignoreActive:A.ignoreActive,ignoreActiveValue:A.ignoreActiveValue,restoreFocus:A.restoreFocus,formStateSync:A.formStateSync||"attribute",idMap:o,persistentIds:n,hyperMatches:d,hyperMatchedOldElements:m,pantry:p(),activeElementAndParents:y(e),callbacks:A.callbacks,head:A.head,scripts:A.scripts}}function M(e){let t=Object.assign({},f);return Object.assign(t,e),t.callbacks=Object.assign({},f.callbacks,e.callbacks),t.head=Object.assign({},f.head,e.head),t.scripts=Object.assign({},f.scripts,e.scripts),t}function p(){let e=document.createElement("div");return e.hidden=!0,document.body.insertAdjacentElement("afterend",e),e}function y(e){let t=[],i=document.activeElement;if(i?.tagName!=="BODY"&&e.contains(i))for(;i&&(t.push(i),i!==e);)i=i.parentElement;return t}function b(e){let t=Array.from(e.querySelectorAll("[id]"));return e.getAttribute?.("id")&&t.push(e),t}function g(e,t,i,n){for(let o of n){let d=o.getAttribute("id");if(t.has(d)){let m=o;for(;m;){let A=e.get(m);if(A==null&&(A=new Set,e.set(m,A)),A.add(d),m===i)break;m=m.parentElement}}}}function r(e,t){let i=b(e),n=b(t),o=l(i,n),d=new Map;g(d,o,e,i);let m=t.__hyperMorphRoot||t;return g(d,o,m,n),{persistentIds:o,idMap:d}}function l(e,t){let i=new Set,n=new Map;for(let{id:d,tagName:m}of e)n.has(d)?i.add(d):n.set(d,m);let o=new Set;for(let{id:d,tagName:m}of t)o.has(d)?i.add(d):n.get(d)===m&&o.add(d);for(let d of i)o.delete(d);return o}return c})(),{normalizeElement:L,normalizeParent:C}=(function(){let c=new WeakSet;function M(g){return g instanceof Document?g.documentElement:g}function p(g){if(g==null)return document.createElement("div");if(typeof g=="string")return p(b(g));if(c.has(g))return g;if(g instanceof Node){if(g.parentNode)return new y(g);{let r=document.createElement("div");return r.append(g),r}}else{let r=document.createElement("div");for(let l of[...g])r.append(l);return r}}class y{constructor(r){this.originalNode=r,this.realParentNode=r.parentNode,this.previousSibling=r.previousSibling,this.nextSibling=r.nextSibling}get childNodes(){let r=[],l=this.previousSibling?this.previousSibling.nextSibling:this.realParentNode.firstChild;for(;l&&l!=this.nextSibling;)r.push(l),l=l.nextSibling;return r}querySelectorAll(r){return this.childNodes.reduce((l,e)=>{if(e instanceof Element){e.matches(r)&&l.push(e);let t=e.querySelectorAll(r);for(let i=0;i<t.length;i++)l.push(t[i])}return l},[])}insertBefore(r,l){return this.realParentNode.insertBefore(r,l)}moveBefore(r,l){return this.realParentNode.moveBefore(r,l)}get __hyperMorphRoot(){return this.originalNode}}function b(g){let r=new DOMParser,l=g.replace(/<svg(\s[^>]*>|>)([\s\S]*?)<\/svg>/gim,"");if(l.match(/<\/html>/)||l.match(/<\/head>/)||l.match(/<\/body>/)){let e=r.parseFromString(g,"text/html");if(l.match(/<\/html>/))return c.add(e),e;{let t=e.firstChild;return t&&c.add(t),t}}else{let t=r.parseFromString("<body><template>"+g+"</template></body>","text/html").body.querySelector("template").content;return c.add(t),t}}return{normalizeElement:M,normalizeParent:p}})();return{morph:w,defaults:f}})();var Ae=W.morph,Se=W.defaults,ke=W;return oe(we);})();
2
2
 
3
3
  // Convenience morph wrapper with data-id support
4
4
  var morph = function(oldEl, newEl, options = {}) {
@@ -0,0 +1,11 @@
1
+ var hyperundo=(()=>{var x=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var Q=Object.getOwnPropertyNames;var X=Object.prototype.hasOwnProperty;var Y=(e,r)=>{for(var o in r)x(e,o,{get:r[o],enumerable:!0})},$=(e,r,o,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of Q(r))!X.call(e,n)&&n!==o&&x(e,n,{get:()=>r[n],enumerable:!(t=J(r,n))||t.enumerable});return e};var ee=e=>$(x({},"__esModule",{value:!0}),e);var ie={};Y(ie,{default:()=>oe,undo:()=>V});function te(e,r=null){let o=[];if(e.type==="attributes"){let t=e.target,n=e.attributeName,i=e.oldValue,a=t.getAttribute(n);return i==null&&a!=null?o.push({kind:"attr-add",target:t,name:n,newValue:a}):i!=null&&a==null?o.push({kind:"attr-remove",target:t,name:n,oldValue:i}):i!==a&&o.push({kind:"attr-set",target:t,name:n,oldValue:i,newValue:a}),o}if(e.type==="characterData")return o.push({kind:"text",target:e.target,oldValue:e.oldValue,newValue:e.target.data}),o;if(e.type==="childList"){let t=e.target,n=e.nextSibling,i=r?Array.from(e.addedNodes).filter(u=>!r(u)):Array.from(e.addedNodes),a=r?Array.from(e.removedNodes).filter(u=>!r(u)):Array.from(e.removedNodes);return i.length>0&&o.push({kind:"add",parent:t,nodes:i,before:n}),a.length>0&&o.push({kind:"remove",parent:t,nodes:a,before:n}),o}return o}function S(e,r=null){let o=[],t=new Map;for(let n of e){if(n.type==="attributes"){let i=n.target,a=n.attributeName,u=t.get(i);u||(u=new Map,t.set(i,u)),u.has(a)||(u.set(a,{idx:o.length,oldValue:n.oldValue}),o.push(null));continue}for(let i of te(n,r))o.push(i)}for(let[n,i]of t)for(let[a,u]of i){let l=u.oldValue,p=n.getAttribute(a),f=null;l===p?f=null:l==null?f={kind:"attr-add",target:n,name:a,newValue:p}:p==null?f={kind:"attr-remove",target:n,name:a,oldValue:l}:f={kind:"attr-set",target:n,name:a,oldValue:l,newValue:p},o[u.idx]=f}return o.filter(n=>n!=null)}function D(e){switch(e.kind){case"attr-set":case"attr-add":e.target.setAttribute(e.name,e.newValue);return;case"attr-remove":e.target.removeAttribute(e.name);return;case"text":e.target.data=e.newValue;return;case"add":for(let r of e.nodes)e.before&&e.before.parentNode===e.parent?e.parent.insertBefore(r,e.before):e.parent.appendChild(r);return;case"remove":for(let r of e.nodes)r.parentNode===e.parent&&e.parent.removeChild(r);return}}function N(e){switch(e.kind){case"attr-set":e.target.setAttribute(e.name,e.oldValue);return;case"attr-add":e.target.removeAttribute(e.name);return;case"attr-remove":e.target.setAttribute(e.name,e.oldValue);return;case"text":e.target.data=e.oldValue;return;case"add":for(let r of e.nodes)r.parentNode===e.parent&&e.parent.removeChild(r);return;case"remove":for(let r of e.nodes)e.before&&e.before.parentNode===e.parent?e.parent.insertBefore(r,e.before):e.parent.appendChild(r);return}}var re=["mutations-ignore","save-remove","save-ignore","save-freeze"];function C(e,r,o){let t=e&&e.nodeType!==1?e.parentElement:e;for(;t&&t.nodeType===1;){for(let n of re)if(t.hasAttribute&&t.hasAttribute(n))return!0;t=t.parentElement}if(r&&o&&o.type==="attributes")try{if(r(o.attributeName,o.target))return!0}catch{}return!1}function L(){let e=new Map;function r(n,i){let a=e.get(n);return a||(a=new Set,e.set(n,a)),a.add(i),()=>o(n,i)}function o(n,i){let a=e.get(n);a&&a.delete(i)}function t(n,i){let a=e.get(n);if(a)for(let u of Array.from(a))try{u(i)}catch(l){console.error("[hyper-undo] listener threw",l)}}return{on:r,off:o,emit:t}}var ne={maxHistory:100,idleWindowMs:500,idleLabel:"Edit",ignoreAttribute:null,debug:!1};function E(e){let r={...ne,...e};if(!r.scope)throw new Error("hyper-undo: scope is required");let o=L(),t=[],n=[],i=[],a=null,u=null,l=0,p=!1;function f(...d){r.debug&&console.log("[hyper-undo]",...d)}function F(){p||(p=!0,u=new MutationObserver(y),u.observe(r.scope,{childList:!0,attributes:!0,characterData:!0,subtree:!0,attributeOldValue:!0,characterDataOldValue:!0}),f("started"))}function b(){p&&(p=!1,u&&(u.disconnect(),u=null),g(),t.length=0,n.length=0,i=[],l=0,f("stopped"))}function T(){let d=r.scope;return!!(d&&d.nodeType===1&&d.isConnected===!1)}function y(d){if(l>0)return;let c=I(d);if(c.length>0){for(let m of c)i.push(m);z()}}function I(d){let c=d.filter(m=>!C(m.target,r.ignoreAttribute,m));return S(c,m=>C(m,r.ignoreAttribute))}function z(){g(),a=setTimeout(P,r.idleWindowMs)}function g(){a!=null&&(clearTimeout(a),a=null)}function P(){if(a=null,i.length===0)return;let d=i;i=[],v(r.idleLabel,d)}function v(d,c){for(t.push({label:d,timestamp:Date.now(),primitives:c}),n.length=0;t.length>r.maxHistory;)t.shift();f("commit",d,"primitives:",c.length),o.emit("change")}function B(d,c){if(!p)throw new Error("hyper-undo: scope not started");y(u.takeRecords()),w();let m=c();if(m&&typeof m.then=="function")throw new Error("hyper-undo: commit() fn must be synchronous; returned a Promise");if(y(u.takeRecords()),i.length===0){o.emit("change");return}g();let j=i;i=[],v(d,j)}function H(d){if(!p)throw new Error("hyper-undo: scope not started");if(!u)return;if(l>1){u.takeRecords();return}w();let c=I(u.takeRecords());c.length!==0&&(g(),v(d,c))}function W(){u&&u.takeRecords()}function w(){l===0&&u&&y(u.takeRecords()),i.length!==0&&(g(),P())}function k(){l===0&&u&&y(u.takeRecords()),l++,f("paused",l)}function A(){l!==0&&(l--,l===0&&u&&u.takeRecords(),f("resumed",l))}function q(){if(T()){b();return}w();let d=t.pop();if(d){k();try{for(let c=d.primitives.length-1;c>=0;c--)try{N(d.primitives[c])}catch(m){f("undo primitive failed (continuing)",m)}}finally{A()}n.push(d),f("undo",d.label),o.emit("change")}}function G(){if(T()){b();return}w();let d=n.pop();if(d){k();try{for(let c of d.primitives)try{D(c)}catch(m){f("redo primitive failed (continuing)",m)}}finally{A()}t.push(d),f("redo",d.label),o.emit("change")}}function Z(){u&&u.takeRecords(),t.length=0,n.length=0,i=[],g(),f("cleared"),o.emit("change")}return{_config:r,start:F,stop:b,commit:B,commitCaptured:H,discardCaptured:W,flush:w,undo:q,redo:G,clear:Z,pause:k,resume:A,on:o.on,off:o.off,get canUndo(){return t.length>0},get canRedo(){return n.length>0},get isPaused(){return l>0},get history(){return t.map(d=>({label:d.label,timestamp:d.timestamp}))},get scope(){return r.scope}}}function _(e,r){let o=t=>{let n=e.scope;if(n&&n.nodeType===1&&n.isConnected===!1){r&&r();return}let i=t.target,a=e._config.shadowKeydownIn;if(i&&i.closest&&Array.isArray(a))for(let p of a)try{if(i.closest(p))return}catch{}if(!(t.metaKey||t.ctrlKey))return;let l=(t.key||"").toLowerCase();if(l==="z"&&!t.shiftKey){t.preventDefault(),t.stopPropagation(),e.undo();return}if(l==="z"&&t.shiftKey){t.preventDefault(),t.stopPropagation(),e.redo();return}if(l==="y"&&!t.shiftKey){t.preventDefault(),t.stopPropagation(),e.redo();return}};return window.addEventListener("keydown",o,!0),()=>window.removeEventListener("keydown",o,!0)}var K=[".CodeMirror",".cm-editor",".monaco-editor",".ace_editor",".ql-editor",".tiptap",".ProseMirror"],s=null,R=null,M=null,h=null;function U(e,r){if(h){if(h.inst===e)return h.cleanup;throw new Error("hyper-undo: another scope already owns the global Cmd+Z binding (bindKeys: true). Stop it first, or use bindKeys: false for additional scopes.")}let o=_(e,r);return h={inst:e,cleanup:o},o}function O(e){h&&h.inst===e&&(h.cleanup(),h=null)}var V={defaults:{shadowKeydownIn:K},start(e={}){let r=e.scope||(typeof document<"u"?document.body:null);if(!r)throw new Error("hyper-undo: no scope (need document.body or explicit { scope })");if(s){if(R===r)return console.warn("[hyper-undo] start() called again on existing singleton; ignoring new options"),s;throw new Error("hyper-undo: start() called with a different scope while the singleton is already started. Use undo.create({ scope }) for additional scopes, or call undo.stop() first.")}let o={...e,scope:r,shadowKeydownIn:e.shadowKeydownIn||K};return s=E(o),s.start(),R=r,e.bindKeys!==!1&&(M=U(s,()=>V.stop())),s},stop(){s&&(O(s),M=null,s.stop(),s=null,R=null)},create(e={}){let r=e.scope||(typeof document<"u"?document.body:null);if(!r)throw new Error("hyper-undo: no scope (need document.body or explicit { scope })");let o={...e,scope:r,shadowKeydownIn:e.shadowKeydownIn||K},t=E(o),n=null,i={_config:t._config,commit:t.commit,commitCaptured:t.commitCaptured,discardCaptured:t.discardCaptured,flush:t.flush,undo:t.undo,redo:t.redo,clear:t.clear,pause:t.pause,resume:t.resume,on:t.on,off:t.off,get canUndo(){return t.canUndo},get canRedo(){return t.canRedo},get isPaused(){return t.isPaused},get history(){return t.history},get scope(){return t.scope},start(){e.bindKeys&&(n=U(t,()=>i.stop())),t.start()},stop(){O(t),n=null,t.stop()}};return i},commit(e,r){return s?s.commit(e,r):void 0},commitCaptured(e){return s?s.commitCaptured(e):void 0},discardCaptured(){return s?s.discardCaptured():void 0},undo(){return s?s.undo():void 0},redo(){return s?s.redo():void 0},clear(){return s?s.clear():void 0},pause(){return s?s.pause():void 0},resume(){return s?s.resume():void 0},flush(){return s?s.flush():void 0},on(e,r){return s?s.on(e,r):void 0},off(e,r){return s?s.off(e,r):void 0},get canUndo(){return s?s.canUndo:!1},get canRedo(){return s?s.canRedo:!1},get history(){return s?s.history:[]},get isPaused(){return s?s.isPaused:!1}};var oe=V;return ee(ie);})();
2
+
3
+ // Auto-export to window unless suppressed by loader.
4
+ if (!window.__hyperclayNoAutoExport) {
5
+ window.hyperclay = window.hyperclay || {};
6
+ window.hyperclay.undo = hyperundo.undo;
7
+ window.h = window.hyperclay;
8
+ }
9
+
10
+ export const undo = hyperundo.undo;
11
+ export default hyperundo;
@@ -1,5 +1,5 @@
1
- var hypercms=(()=>{var De=Object.defineProperty;var Sr=Object.getOwnPropertyDescriptor;var Ar=Object.getOwnPropertyNames;var vr=Object.prototype.hasOwnProperty;var Be=(e,t)=>{for(var r in t)De(e,r,{get:t[r],enumerable:!0})},Er=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Ar(t))!vr.call(e,s)&&s!==r&&De(e,s,{get:()=>t[s],enumerable:!(n=Sr(t,s))||n.enumerable});return e};var Mr=e=>Er(De({},"__esModule",{value:!0}),e);var As={};Be(As,{cms:()=>bs,default:()=>Ss});var xe=["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"],Ue=new Set(xe),At=new Set(["textContent","innerText","innerHTML","value","checked","selected","disabled","readOnly","type","id","className","title"]),vt=new Set(["tagName","nodeName","nodeType","nodeValue","childElementCount","classList","baseURI","documentURI","contentType","offsetWidth","offsetHeight","clientWidth","clientHeight","scrollWidth","scrollHeight","currentSrc","duration","paused","dataset"]);var Te={};Be(Te,{EmptyListInsert:()=>he,MAX_RULE_DEPTH:()=>se,MaxRuleDepthExceeded:()=>ee,RuleTargetReadOnly:()=>me,RulesParseError:()=>ne,ShapeMismatch:()=>fe,UnknownRulesVersion:()=>de,UpgradeAlreadyRegistered:()=>we});var ne=class extends Error{constructor(t,r){super(t),this.name="RulesParseError",this.cause=r}},de=class extends Error{constructor(t){super(`unknown rules version: ${t}. Library supports "1".`),this.name="UnknownRulesVersion",this.version=t}},se=20,ee=class extends Error{constructor(t){super(`rule depth exceeded ${se} at path: ${t.join(".")}`),this.name="MaxRuleDepthExceeded",this.path=t}},fe=class extends Error{constructor(t){super(`shape mismatch: ${t.length} field(s) failed validation`),this.name="ShapeMismatch",this.mismatches=t}},he=class extends Error{constructor(t){super(`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}},me=class extends Error{constructor(t){super(`cannot write to read-only DOM property "${t}"`),this.name="RuleTargetReadOnly",this.target=t}},we=class extends Error{constructor(){super("upgrade transform already registered; only one registration is allowed per page."),this.name="UpgradeAlreadyRegistered"}};function te(e,t,r,n={}){return We(e,t,r,{depth:0,path:[]},n)}function We(e,t,r,n,s){if(n.depth>se)throw new ee(n.path);if(typeof r=="string")return xr(e,t,r,s);if(Array.isArray(r)){let[o,u]=r;return e.find(t,o,s).map((f,y)=>We(e,f,u,{depth:n.depth+1,path:[...n.path,y]},s))}if(typeof r=="object"&&r!==null){let o={};for(let[u,l]of Object.entries(r))o[u]=We(e,t,l,{depth:n.depth+1,path:[...n.path,u]},s);return o}return null}function xr(e,t,r,n){if(r.endsWith("[]")){let o=r.slice(0,-2);return e.find(t,o,n).map(u=>e.text(u))}if(r.startsWith("@"))return Et(e,t,r.slice(1));if(r.includes("@")){let o=r.lastIndexOf("@"),u=r.slice(0,o),l=r.slice(o+1),f=u?e.find(t,u,n):[t];return f.length===0?null:Et(e,f[0],l)}if(r===".")return e.text(t);let s=e.find(t,r,n);return s.length===0?null:e.text(s[0])}function Et(e,t,r){if(Ue.has(r)){let s=e.prop(t,r);return s==null?null:String(s)}let n=e.attr(t,r);return n||null}var wr=.5;function Ve(e,t,r,n,s,o,u,l={}){let f=e.find(t,r,l);if(s.length===0){f.forEach(T=>e.remove(T));return}let y=s.length>f.length,v=f[0]||null;if(y&&!v&&(v=Cr(e,t,r,l),!v))throw new he(o.path);let b=f.map(T=>Tr(e,T,n,l)),S=null;if(v){S=e.clone(v),l.templateAttr&&e.removeAttr(S,l.templateAttr);let T=e.stripIds(S);T>0&&console.warn(`[hyper-html-api] stripped ${T} id attribute(s) from cloned template at "${o.path.join(".")||"(root)"}"`)}let R=kr(s,b,n),I=f[0]||v,N=e.parent(I),m=f.length>0?Ir(e,N,I):0,k=new Set,M=s.map((T,x)=>{let E=R[x];if(E>=0)return k.add(E),f[E];let d=e.clone(S);return e.stripIds(d),d});f.forEach((T,x)=>{k.has(x)||e.remove(T)}),M.forEach((T,x)=>{let E=m+x;e.children(N).findIndex(i=>e.sameNode(i,T))!==E&&e.insertAt(N,T,E)}),M.forEach((T,x)=>{if(n===null){let E=s[x],d=E==null?"":String(E);e.text(T)!==d&&e.text(T,d)}else{let E=u(e,T,n,s[x],{depth:o.depth+1,path:[...o.path,x]},l);E&&E!==T&&(M[x]=E)}})}function Tr(e,t,r,n){return r===null?e.text(t):te(e,t,r,n)}function kr(e,t,r){let n=new Array(e.length).fill(-1),s=new Set;return e.forEach((o,u)=>{let l=-1,f=-1;t.forEach((y,v)=>{if(s.has(v))return;let b=Rr(o,y,r),S=b===f&&l>=0?Math.abs(v-u)<Math.abs(l-u):!1;(b>f||S)&&(f=b,l=v)}),f>=wr&&(n[u]=l,s.add(l))}),n}function Rr(e,t,r){if(r===null)return e===t?1:0;let n=Object.keys(r||{});if(n.length===0)return 0;let s=0;for(let o of n)JSON.stringify(e?.[o])===JSON.stringify(t?.[o])&&s++;return s/n.length}function Ir(e,t,r){let n=e.children(t);for(let s=0;s<n.length;s++)if(e.sameNode(n[s],r))return s;return-1}function Cr(e,t,r,n){if(!n.templateAttr)return null;let s=t;for(;s;){let o=e.find(s,r,{includeRulesTag:!1});for(let u of o)if(e.attr(u,n.templateAttr)!=null)return u;s=e.parent(s)}return null}var Mt=new Set(["checked","selected","disabled","readOnly","paused"]);function ge(e,t,r,n,s={}){let o=[];if(Ke(r,n,[],o),o.length)throw new fe(o);ke(e,t,r,n,{depth:0,path:[]},s)}function ke(e,t,r,n,s,o={}){if(s.depth>se)throw new ee(s.path);if(n===void 0)return t;if(typeof r=="string")return Nr(e,t,r,n,s,o);if(Array.isArray(r)){let[u,l]=r;return Ve(e,t,u,l,n,s,ke,o),t}if(typeof r=="object"&&r!==null){for(let[u,l]of Object.entries(r)){let f=ke(e,t,l,n==null?n:n[u],{depth:s.depth+1,path:[...s.path,u]},o);f&&f!==t&&(t=f)}return t}return t}function Nr(e,t,r,n,s,o){if(r.endsWith("[]")){let l=r.slice(0,-2);return Ve(e,t,l,null,n,s,ke,o),t}if(r.startsWith("@"))return xt(e,t,r.slice(1),n);if(r.includes("@")){let l=r.lastIndexOf("@"),f=r.slice(0,l),y=r.slice(l+1),v=f?e.find(t,f,o):[t];return v.length===0||xt(e,v[0],y,n),t}if(r===".")return e.text(t,n==null?"":String(n)),t;let u=e.find(t,r,o);return u.length===0||e.text(u[0],n==null?"":String(n)),t}function xt(e,t,r,n){if(vt.has(r))throw new me(r);if(r==="outerHTML"){let s=n==null?"":String(n);return e.replaceWith(t,s)}return At.has(r)?(e.prop(t,r,Lr(r,n)),t):(e.attr(t,r,n==null?"":String(n)),t)}function Lr(e,t){return t==null?Mt.has(e)?!1:"":Mt.has(e)?!!t:t}function Ke(e,t,r,n){if(t!==void 0){if(typeof e=="string"){if(e.endsWith("[]")){Array.isArray(t)?t.forEach((s,o)=>{typeof s=="object"&&s!==null&&n.push({path:ye([...r,o]),expected:"scalar",got:pe(s)})}):n.push({path:ye(r),expected:"array",got:pe(t)});return}t!==null&&typeof t=="object"&&n.push({path:ye(r),expected:"scalar",got:pe(t)});return}if(Array.isArray(e)){if(!Array.isArray(t)){n.push({path:ye(r),expected:"array",got:pe(t)});return}let s=e[1];t.forEach((o,u)=>Ke(s,o,[...r,u],n));return}if(typeof e=="object"&&e!==null){if(t===null||Array.isArray(t)||typeof t!="object"){n.push({path:ye(r),expected:"object",got:pe(t)});return}for(let[s,o]of Object.entries(e))Ke(o,t[s],[...r,s],n)}}}function pe(e){return e===null?"null":Array.isArray(e)?"array":typeof e}function ye(e){return e.join(".")}function ze(e){try{return JSON.parse(e)}catch(t){throw new ne(`Invalid strict JSON: ${t.message}`,t)}}function be(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 r(s){let o=[],u=0;for(;u<s.length;){let l=s[u];if(/\s/.test(l)){u++;continue}if("{}".includes(l)){o.push({type:l,value:l}),u++;continue}if(l==="["){let b=!1,S=u+1;for(;S<s.length&&/\s/.test(s[S]);)S++;if(S<s.length&&/[a-zA-Z_]/.test(s[S])&&(b=!0),!b){o.push({type:l,value:l}),u++;continue}}if(l==="]"){o.push({type:l,value:l}),u++;continue}if(l===":"){o.push({type:t.COLON,value:l}),u++;continue}if(l===","){o.push({type:t.COMMA,value:l}),u++;continue}if(l==='"'||l==="'"){let b=l,S=u+1;for(;S<s.length&&s[S]!==b;)s[S]==="\\"&&S++,S++;o.push({type:t.STRING,value:s.substring(u+1,S),quoted:!0,sourceQuote:b}),u=S+1;continue}let f=u,y;for(;f<s.length&&!/[{},]/.test(s[f]);)if(s[f]===":"){let b=[":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"],S=!1;for(let R of b){let I=R.substring(1);if(s.substring(f+1,f+1+I.length)===I){S=!0,f+=I.length;break}}if(!S)break}else if(s[f]==="["){for(f++;f<s.length&&s[f]!=="]";){if(s[f]==='"'||s[f]==="'"){let b=s[f];for(f++;f<s.length&&s[f]!==b;)s[f]==="\\"&&f++,f++}f++}f<s.length&&s[f]==="]"&&f++}else f++;y=s.substring(u,f);let v=t.IDENTIFIER;/^-?\d+(\.\d+)?$/.test(y)?v=t.NUMBER:y==="true"||y==="false"||y==="null"?v=t.BOOLEAN:/^[.#@\[]|[.#@\[]| /.test(y)&&(v=t.SELECTOR),o.push({type:v,value:y,quoted:!1}),u=f}return o}function n(s){let o="";for(let u=0;u<s.length;u++){let l=s[u];if("{}".includes(l.type)||"[]".includes(l.type)){o+=l.value;continue}if(l.type===t.COLON){o+=l.value;continue}if(l.type===t.COMMA){let f=s[u+1];if(f&&(f.type==="}"||f.type==="]"))continue;o+=l.value;continue}if(l.type===t.STRING&&l.quoted){let f=l.value;l.sourceQuote==="'"&&(f=f.replace(/\\'/g,"'"),f=f.replace(/(\\*)"/g,(y,v)=>v.length%2===0?v+'\\"':y)),o+=`"${f}"`;continue}if(l.type===t.NUMBER||l.type===t.BOOLEAN){o+=l.value;continue}if(l.type===t.SELECTOR||l.type===t.IDENTIFIER){o+=`"${l.value}"`;continue}o+=`"${l.value}"`}return o}try{let s=r(e),o=n(s);return JSON.parse(o)}catch(s){throw new ne("Invalid extraction rules syntax: "+s.message,s)}}var Or="hyper-html-api",jr="1";function Se(e,t){let r=e.find(t,`script#${Or}`,{includeRulesTag:!0});if(r.length===0)return null;let n=r[0],s=e.attr(n,"data-rules-version");if(s!==jr)throw new de(s);let o=e.text(n);return{rules:be(o),tagNode:n}}var kt={includeClasses:!0,includeAttributes:["href","src","name","type","role","aria-label","alt","title"],excludeAttributePrefixes:["data-morph-","data-hyper-","data-im-"],textHintLength:64,excludeIds:!0,maxPathDepth:4,landmarks:["HEADER","NAV","MAIN","ASIDE","FOOTER","SECTION","ARTICLE"],weights:{signature:100,pathSegment:10,textMatch:20,textMismatch:25,uniqueCandidate:50,positionPenalty:1,slotMatch:30},minConfidence:101};function qr(e){let t=5381;for(let r=0;r<e.length;r++)t=(t<<5)+t^e.charCodeAt(r);return Math.abs(t).toString(36)}function Fr(e){if(e.classList&&e.classList.length>0)return Array.from(e.classList).sort().join(" ");let t=e.getAttribute?.("class");return t?t.split(/\s+/).filter(Boolean).sort().join(" "):""}function Pr(e,t){let r=[];for(let n of e.attributes||[]){let s=n.name;s==="id"||s==="class"||t.excludeAttributePrefixes.some(o=>s.startsWith(o))||t.includeAttributes.includes(s)&&r.push(`${s}=${n.value}`)}return r.sort().join("|")}function _r(e,t){return(e.textContent||"").replace(/\s+/g," ").trim().slice(0,t.textHintLength)}function Dr(e,t){let r=[e.tagName];return t.includeClasses&&r.push(Fr(e)),r.push(Pr(e,t)),qr(r.join("|"))}function Br(e){let t=e.tagName,r=1,n=e.previousElementSibling;for(;n;)n.tagName===t&&r++,n=n.previousElementSibling;return r}function Ur(e,t){return e.id||e.getAttribute?.("role")?!0:t.landmarks.includes(e.tagName)}function Wr(e){if(e.id)return`#${e.id}`;let t=e.getAttribute?.("role");return t?`@${t}`:e.tagName}function Vr(e,t){let r=[],n=e;for(;n&&n.tagName&&r.length<t.maxPathDepth;){let s=`${n.tagName}:${Br(n)}`;if(r.unshift(s),n!==e&&Ur(n,t)){r.unshift(Wr(n));break}n=n.parentElement}return r}function Kr(e,t){let r=0,n=e.length-1,s=t.length-1;for(;n>=0&&s>=0&&e[n]===t[s];)r++,n--,s--;return r}function U(e,t,r){if(r.has(e))return r.get(e);let n={signature:Dr(e,t),path:Vr(e,t),textHint:_r(e,t)};return r.set(e,n),n}function Nt(e,t,r,n){if(n.has(e))return n.get(e);let s=new Map,o=e.querySelectorAll("*"),u=0;for(let l of o){let f=U(l,t,r);f.domIndex=u++,s.has(f.signature)||s.set(f.signature,[]),s.get(f.signature).push(l)}return n.set(e,s),s}function zr(e,t,r){r.delete(e),t.delete(e);let n=e.querySelectorAll("*");for(let s of n)t.delete(s)}function Ge(e,t,r,n,s){let o=U(e,r,n),u=U(t,r,n),l=r.weights,f={},y=0;if(o.signature!==u.signature)return{score:0,breakdown:{rejected:"signature mismatch"}};y+=l.signature,f.signature=l.signature;let b=Kr(o.path,u.path)*l.pathSegment;y+=b,f.path=b;let S=!0;if(o.textHint&&u.textHint?o.textHint===u.textHint?(y+=l.textMatch,f.text=l.textMatch):(y-=l.textMismatch,f.text=-l.textMismatch,S=!1):o.textHint!==u.textHint&&(y-=l.textMismatch,f.text=-l.textMismatch,S=!1),s.candidateCount===1&&S&&(y+=l.uniqueCandidate,f.unique=l.uniqueCandidate),typeof o.domIndex=="number"&&typeof u.domIndex=="number"){let R=Math.abs(o.domIndex-u.domIndex),I=Math.min(R*l.positionPenalty,20);y-=I,f.drift=-I}return{score:y,breakdown:f}}function Rt(e,t,r,n,s){if(r.excludeIds&&e.id)return null;let o=Nt(t,r,n,s),u=U(e,r,n);if(typeof u.domIndex!="number"){let S=0,R=e.previousElementSibling;for(;R;)S++,R=R.previousElementSibling;u.domIndex=S}let l=o.get(u.signature)||[],f=r.excludeIds?l.filter(S=>!S.id):l;if(f.length===0)return null;let y=null,v=0,b=null;for(let S of f){let{score:R,breakdown:I}=Ge(e,S,r,n,{candidateCount:f.length});R>v&&(v=R,y=S,b=I)}return v<r.minConfidence?null:{element:y,confidence:v,breakdown:b}}function Gr(e,t,r,n){let s=[],o=r.weights.signature+r.weights.slotMatch,u={slot:o};function l(b){if(b.children)return b.children;let S=b.childNodes;if(!S)return[];let R=[];for(let I=0;I<S.length;I++)S[I].nodeType===1&&R.push(S[I]);return R}function f(b,S){let R=l(b),I=l(S);if(R.length===I.length)for(let N=0;N<R.length;N++){let m=R[N],k=I[N];if(r.excludeIds&&(m.id||k.id)||m.tagName!==k.tagName)continue;let M=U(m,r,n).signature,T=U(k,r,n).signature;M!==T&&s.push({newEl:m,oldEl:k,score:o,breakdown:u}),f(m,k)}}function y(b,S){for(;;){if(b.tagName===S.tagName)return[b,S];let R=l(b);if(!b.tagName&&R.length===1){b=R[0];continue}let I=l(S);if(I.length===1&&I[0].tagName===b.tagName){S=I[0];continue}return null}}let v=y(e,t);return v&&f(v[0],v[1]),s}function It(e,t,r,n,s){let o=t.querySelectorAll("*"),u=Nt(e,r,n,s),l=0;for(let b of o){let S=U(b,r,n);S.domIndex=l++}let f=[];for(let b of o){if(r.excludeIds&&b.id)continue;let S=U(b,r,n),R=u.get(S.signature)||[],I=r.excludeIds?R.filter(N=>!N.id):R;for(let N of I){let{score:m,breakdown:k}=Ge(b,N,r,n,{candidateCount:I.length});m>=r.minConfidence&&f.push({newEl:b,oldEl:N,score:m,breakdown:k})}}if(r.weights.slotMatch>0){let b=Gr(t,e,r,n);for(let S of b)f.push(S)}f.sort((b,S)=>S.score-b.score);let y=new Map,v=new Set;for(let{newEl:b,oldEl:S}of f)y.has(b)||v.has(S)||(y.set(b,S),v.add(S));return y}function Ct(e,t,r,n){let s=U(e,r,n),o=U(t,r,n),{score:u,breakdown:l}=Ge(e,t,r,n,{candidateCount:1});return{matches:u>=r.minConfidence,score:u,breakdown:l,newMeta:{signature:s.signature,path:s.path,textHint:s.textHint},oldMeta:{signature:o.signature,path:o.path,textHint:o.textHint}}}function Lt(e={}){let t={...kt,...e,weights:{...kt.weights,...e.weights}},r=new WeakMap,n=new WeakMap;return{findMatch:(s,o)=>Rt(s,o,t,r,n),computeMatches:(s,o)=>It(s,o,t,r,n),explain:(s,o)=>Ct(s,o,t,r),invalidate:s=>zr(s,r,n),session:()=>{let s=new WeakMap,o=new WeakMap;return{findMatch:(u,l)=>Rt(u,l,t,s,o),computeMatches:(u,l)=>It(u,l,t,s,o),explain:(u,l)=>Ct(u,l,t,s)}},getConfig:()=>({...t})}}var Yr=Lt(),Ot=(function(){"use strict";let e=()=>{};function t(m){if(!(m instanceof Element))return!1;if(m.hasAttribute("save-ignore"))return!0;if(m.tagName==="LINK"||m.tagName==="SCRIPT"){let k=m.getAttribute("src")||m.getAttribute("href")||"";if(k.startsWith("chrome-extension://")||k.startsWith("moz-extension://")||k.startsWith("safari-web-extension://"))return!0}return!1}function r(m,k){if(k!=="smart")return m.outerHTML;let M=m.getAttribute("src"),T=m.getAttribute("type")||"text/javascript";if(M)try{let x=new URL(M,window.location.href);return`ext:${T}:${x.origin}${x.pathname}${x.search}`}catch{return`ext:${T}:${M}`}else{let x=m.textContent.trim(),E=5381;for(let d=0;d<x.length;d++)E=(E<<5)+E^x.charCodeAt(d);return`inline:${T}:${Math.abs(E).toString(36)}`}}let n={morphStyle:"outerHTML",callbacks:{beforeNodeAdded:e,afterNodeAdded:e,beforeNodeMorphed:e,afterNodeMorphed:e,beforeNodeRemoved:e,afterNodeRemoved:e,beforeAttributeUpdated:e},head:{style:"merge",shouldPreserve:m=>m.getAttribute("im-preserve")==="true",shouldReAppend:m=>m.getAttribute("im-re-append")==="true",shouldRemove:e,afterHeadMorphed:e},scripts:{handle:!1,matchMode:"outerHTML",shouldPreserve:m=>m.getAttribute("im-preserve")==="true",shouldReAppend:m=>m.getAttribute("im-re-append")==="true",shouldRemove:e,afterScriptsHandled:e},restoreFocus:!0},s={computeMatches(m,k){let{computeMatches:M}=Yr.session();return M(m,k)}};function o(m,k,M={}){m=I(m);let T=N(k),x=R(m,T,M),E=x.scripts.matchMode,d=new Set(Array.from(m.querySelectorAll("script")).map(a=>r(a,E))),g=l(x,()=>v(x,m,T,a=>a.morphStyle==="innerHTML"?(f(a,m,T),Array.from(m.childNodes)):u(a,m,T)));x.pantry.remove();let i=S(m,d,x);return i.length>0?g instanceof Promise?g.then(a=>Promise.all(i).then(()=>a)):Promise.all(i).then(()=>g):g}function u(m,k,M){let T=N(k);return f(m,T,M,k,k.nextSibling),Array.from(T.childNodes)}function l(m,k){if(!m.config.restoreFocus)return k();let M=document.activeElement;if(!(M instanceof HTMLInputElement||M instanceof HTMLTextAreaElement))return k();let{id:T,selectionStart:x,selectionEnd:E}=M,d=k();return T&&T!==document.activeElement?.getAttribute("id")&&(M=m.target.querySelector(`[id="${T}"]`),M?.focus()),M&&!M.selectionEnd&&E!=null&&M.setSelectionRange(x,E),d}let f=(function(){function m(i,a,h,c=null,p=null){a instanceof HTMLTemplateElement&&h instanceof HTMLTemplateElement&&(a=a.content,h=h.content),c||=a.firstChild;for(let A of h.childNodes){if(t(A))continue;if(c&&c!=p){let C=M(i,A,c,p);if(C){C!==c&&x(i,c,C),y(C,A,i),c=C.nextSibling;continue}}if(A instanceof Element){let C=A.getAttribute("id");if(i.persistentIds.has(C)){let L=E(a,C,c,i);y(L,A,i),c=L.nextSibling;continue}if(!i.idMap.has(A)){let L=i.hyperMatches.get(A);if(L&&!i.idMap.has(L)){g(a,L,c),y(L,A,i),c=L.nextSibling;continue}}}let w=k(a,A,c,i);w&&(c=w.nextSibling)}for(;c&&c!=p;){let A=c;c=c.nextSibling,t(A)||T(i,A)}}function k(i,a,h,c){if(c.callbacks.beforeNodeAdded(a)===!1)return null;if(c.idMap.has(a)){let p=document.createElement(a.tagName);return i.insertBefore(p,h),y(p,a,c),c.callbacks.afterNodeAdded(p),p}else{let p=document.importNode(a,!0);return i.insertBefore(p,h),c.callbacks.afterNodeAdded(p),p}}let M=(function(){function i(c,p,A,w){let C=p instanceof Element&&!c.idMap.has(p)?c.hyperMatches.get(p):null,L=null,q=p.nextSibling,D=0,O=A;for(;O&&O!=w;){if(h(O,p)){if(a(c,O,p)||O===C&&!c.idMap.has(O))return O;if(L===null){let P=O instanceof Element&&c.hyperMatchedOldElements.has(O);!c.idMap.has(O)&&!P&&(L=O)}}if(L===null&&q&&h(O,q)&&(D++,q=q.nextSibling,D>=2&&(L=void 0)),c.activeElementAndParents.includes(O))break;O=O.nextSibling}return L||null}function a(c,p,A){let w=c.idMap.get(p),C=c.idMap.get(A);if(!C||!w)return!1;for(let L of w)if(C.has(L))return!0;return!1}function h(c,p){let A=c,w=p;return A.nodeType===w.nodeType&&A.tagName===w.tagName&&(!A.getAttribute?.("id")||A.getAttribute?.("id")===w.getAttribute?.("id"))}return i})();function T(i,a){let h=a instanceof Element&&i.hyperMatchedOldElements.has(a)&&!i.idMap.has(a);if(i.idMap.has(a)||h)g(i.pantry,a,null);else{if(i.callbacks.beforeNodeRemoved(a)===!1)return;a.parentNode?.removeChild(a),i.callbacks.afterNodeRemoved(a)}}function x(i,a,h){let c=a;for(;c&&c!==h;){let p=c;c=c.nextSibling,t(p)||T(i,p)}return c}function E(i,a,h,c){let p=c.target.getAttribute?.("id")===a&&c.target||c.target.querySelector(`[id="${a}"]`)||c.pantry.querySelector(`[id="${a}"]`);return d(p,c),g(i,p,h),p}function d(i,a){let h=i.getAttribute("id");for(;i=i.parentNode;){let c=a.idMap.get(i);c&&(c.delete(h),c.size||a.idMap.delete(i))}}function g(i,a,h){if(i.moveBefore)try{i.moveBefore(a,h)}catch{i.insertBefore(a,h)}else i.insertBefore(a,h)}return m})(),y=(function(){function m(d,g,i){return i.ignoreActive&&d===document.activeElement?null:(i.callbacks.beforeNodeMorphed(d,g)===!1||(d instanceof HTMLHeadElement&&i.head.ignore||(d instanceof HTMLHeadElement&&i.head.style!=="morph"?b(d,g,i):(k(d,g,i),E(d,i)||f(i,d,g))),i.callbacks.afterNodeMorphed(d,g)),d)}function k(d,g,i){let a=g.nodeType;if(a===1){let h=d,c=g,p=h.attributes,A=c.attributes;for(let w of A)x(w.name,h,"update",i)||h.getAttribute(w.name)!==w.value&&h.setAttribute(w.name,w.value);for(let w=p.length-1;0<=w;w--){let C=p[w];if(C&&!c.hasAttribute(C.name)){if(x(C.name,h,"remove",i))continue;h.removeAttribute(C.name)}}E(h,i)||M(h,c,i)}(a===8||a===3)&&d.nodeValue!==g.nodeValue&&(d.nodeValue=g.nodeValue)}function M(d,g,i){if(d instanceof HTMLInputElement&&g instanceof HTMLInputElement&&g.type!=="file"){let a=g.value,h=d.value;T(d,g,"checked",i),T(d,g,"disabled",i),i.formStateSync==="property"?h!==a&&(x("value",d,"update",i)||(d.value=a)):g.hasAttribute("value")?h!==a&&(x("value",d,"update",i)||(d.setAttribute("value",a),d.value=a)):x("value",d,"remove",i)||(d.value="",d.removeAttribute("value"))}else if(d instanceof HTMLOptionElement&&g instanceof HTMLOptionElement)T(d,g,"selected",i);else if(d instanceof HTMLTextAreaElement&&g instanceof HTMLTextAreaElement){let a=g.value,h=d.value;if(x("value",d,"update",i))return;a!==h&&(d.value=a),d.firstChild&&d.firstChild.nodeValue!==a&&(d.firstChild.nodeValue=a)}}function T(d,g,i,a){let h=g[i],c=d[i];if(h!==c){let p=x(i,d,"update",a);if(p||(d[i]=g[i]),a.formStateSync==="property")return;h?p||d.setAttribute(i,""):x(i,d,"remove",a)||d.removeAttribute(i)}}function x(d,g,i,a){return d==="value"&&a.ignoreActiveValue&&g===document.activeElement?!0:a.callbacks.beforeAttributeUpdated(d,g,i)===!1}function E(d,g){return!!g.ignoreActiveValue&&d===document.activeElement&&d!==document.body}return m})();function v(m,k,M,T){if(m.head.block){let x=k.querySelector("head"),E=M.querySelector("head");if(x&&E){let d=b(x,E,m);return Promise.all(d).then(()=>{let g=Object.assign(m,{head:{block:!1,ignore:!0}});return T(g)})}}return T(m)}function b(m,k,M){let T=[],x=[],E=[],d=[],g=M.scripts.matchMode,i=c=>{if(c.tagName==="SCRIPT")return r(c,g);if(c.tagName==="LINK"&&g==="smart"){let p=c.getAttribute("href");if(p)try{let A=new URL(p,window.location.href);return`link:${c.getAttribute("rel")||""}:${A.origin}${A.pathname}${A.search}`}catch{}}return c.outerHTML},a=new Map;for(let c of k.children)t(c)||a.set(i(c),c);for(let c of m.children){let p=i(c),A=a.has(p),w=M.head.shouldReAppend(c),C=M.head.shouldPreserve(c);A||C?w?x.push(c):(a.delete(p),E.push(c)):M.head.style==="append"?w&&(x.push(c),d.push(c)):M.head.shouldRemove(c)!==!1&&!t(c)&&x.push(c)}d.push(...a.values());let h=[];for(let c of d){let p=document.createRange().createContextualFragment(c.outerHTML).firstChild;if(M.callbacks.beforeNodeAdded(p)!==!1){if("href"in p&&p.href||"src"in p&&p.src){let A,w=new Promise(function(C){A=C});p.addEventListener("load",function(){A()}),h.push(w)}m.appendChild(p),M.callbacks.afterNodeAdded(p),T.push(p)}}for(let c of x)M.callbacks.beforeNodeRemoved(c)!==!1&&(m.removeChild(c),M.callbacks.afterNodeRemoved(c));return M.head.afterHeadMorphed(m,{added:T,kept:E,removed:x}),h}function S(m,k,M){if(!M.scripts.handle)return[];let T=[],x=[],E=[],d=[],g=M.scripts.matchMode,i=Array.from(m.querySelectorAll("script"));for(let h of i){let c=r(h,g),p=k.has(c),A=M.scripts.shouldPreserve(h),w=M.scripts.shouldReAppend(h);p||A?w?(x.push(h),d.push(h)):E.push(h):d.push(h)}for(let h of k){let c=i.some(p=>p.outerHTML===h)}let a=[];for(let h of d){if(M.callbacks.beforeNodeAdded(h)===!1)continue;let c=document.createRange().createContextualFragment(h.outerHTML).firstChild;if(c.src){let p,A=new Promise(function(w){p=w});c.addEventListener("load",function(){p()}),c.addEventListener("error",function(){p()}),a.push(A)}h.replaceWith(c),M.callbacks.afterNodeAdded(c),T.push(c)}return M.scripts.afterScriptsHandled(m,{added:T,kept:E,removed:x}),a}let R=(function(){function m(i,a,h){let{persistentIds:c,idMap:p}=d(i,a),A=s.computeMatches(i,a);if(typeof h.key=="function"){let q=new Map,D=new Set,O=j=>{let H=h.key(j);H!=null&&(q.has(H)?D.add(H):q.set(H,j))};i instanceof Element&&O(i);for(let j of i.querySelectorAll("*"))O(j);for(let j of D)q.delete(j);let P=new Map;for(let[j,H]of A)P.set(H,j);let J=a.__hyperMorphRoot||a,K=new Map,le=new Set,ue=j=>{let H=h.key(j);H!=null&&(K.has(H)?le.add(H):K.set(H,j))};J instanceof Element&&ue(J);for(let j of J.querySelectorAll("*"))ue(j);for(let j of le)K.delete(j);for(let[j,H]of K){let _=q.get(j);if(!_||_.tagName!==H.tagName)continue;let X=P.get(_);X&&X!==H&&A.delete(X);let Q=A.get(H);Q&&Q!==_&&P.delete(Q),A.set(H,_),P.set(_,H)}}let w=new Set;for(let q of A.values())w.add(q);let C=k(h),L=C.morphStyle||"outerHTML";if(!["innerHTML","outerHTML"].includes(L))throw`Do not understand how to morph style ${L}`;return{target:i,newContent:a,config:C,morphStyle:L,ignoreActive:C.ignoreActive,ignoreActiveValue:C.ignoreActiveValue,restoreFocus:C.restoreFocus,formStateSync:C.formStateSync||"attribute",idMap:p,persistentIds:c,hyperMatches:A,hyperMatchedOldElements:w,pantry:M(),activeElementAndParents:T(i),callbacks:C.callbacks,head:C.head,scripts:C.scripts}}function k(i){let a=Object.assign({},n);return Object.assign(a,i),a.callbacks=Object.assign({},n.callbacks,i.callbacks),a.head=Object.assign({},n.head,i.head),a.scripts=Object.assign({},n.scripts,i.scripts),a}function M(){let i=document.createElement("div");return i.hidden=!0,document.body.insertAdjacentElement("afterend",i),i}function T(i){let a=[],h=document.activeElement;if(h?.tagName!=="BODY"&&i.contains(h))for(;h&&(a.push(h),h!==i);)h=h.parentElement;return a}function x(i){let a=Array.from(i.querySelectorAll("[id]"));return i.getAttribute?.("id")&&a.push(i),a}function E(i,a,h,c){for(let p of c){let A=p.getAttribute("id");if(a.has(A)){let w=p;for(;w;){let C=i.get(w);if(C==null&&(C=new Set,i.set(w,C)),C.add(A),w===h)break;w=w.parentElement}}}}function d(i,a){let h=x(i),c=x(a),p=g(h,c),A=new Map;E(A,p,i,h);let w=a.__hyperMorphRoot||a;return E(A,p,w,c),{persistentIds:p,idMap:A}}function g(i,a){let h=new Set,c=new Map;for(let{id:A,tagName:w}of i)c.has(A)?h.add(A):c.set(A,w);let p=new Set;for(let{id:A,tagName:w}of a)p.has(A)?h.add(A):c.get(A)===w&&p.add(A);for(let A of h)p.delete(A);return p}return m})(),{normalizeElement:I,normalizeParent:N}=(function(){let m=new WeakSet;function k(E){return E instanceof Document?E.documentElement:E}function M(E){if(E==null)return document.createElement("div");if(typeof E=="string")return M(x(E));if(m.has(E))return E;if(E instanceof Node){if(E.parentNode)return new T(E);{let d=document.createElement("div");return d.append(E),d}}else{let d=document.createElement("div");for(let g of[...E])d.append(g);return d}}class T{constructor(d){this.originalNode=d,this.realParentNode=d.parentNode,this.previousSibling=d.previousSibling,this.nextSibling=d.nextSibling}get childNodes(){let d=[],g=this.previousSibling?this.previousSibling.nextSibling:this.realParentNode.firstChild;for(;g&&g!=this.nextSibling;)d.push(g),g=g.nextSibling;return d}querySelectorAll(d){return this.childNodes.reduce((g,i)=>{if(i instanceof Element){i.matches(d)&&g.push(i);let a=i.querySelectorAll(d);for(let h=0;h<a.length;h++)g.push(a[h])}return g},[])}insertBefore(d,g){return this.realParentNode.insertBefore(d,g)}moveBefore(d,g){return this.realParentNode.moveBefore(d,g)}get __hyperMorphRoot(){return this.originalNode}}function x(E){let d=new DOMParser,g=E.replace(/<svg(\s[^>]*>|>)([\s\S]*?)<\/svg>/gim,"");if(g.match(/<\/html>/)||g.match(/<\/head>/)||g.match(/<\/body>/)){let i=d.parseFromString(E,"text/html");if(g.match(/<\/html>/))return m.add(i),i;{let a=i.firstChild;return a&&m.add(a),a}}else{let a=d.parseFromString("<body><template>"+E+"</template></body>","text/html").body.querySelector("template").content;return m.add(a),a}}return{normalizeElement:k,normalizeParent:M}})();return{morph:o,defaults:n}})();var ro=Ot.morph,no=Ot.defaults;var en=null;function Re(){return en}function Ce(e,t){let r={carriedOver:0,discarded:0,listItems:0},n=Ye(t,e,r);return Ze(t,e,r),{data:n,summary:r}}function Ye(e,t,r){if(typeof e=="string")return e.endsWith("[]")?Array.isArray(t)?(r.listItems+=t.length,r.carriedOver+=t.length,t):void 0:t==null?void 0:(r.carriedOver++,t);if(Array.isArray(e)){let[,n]=e;return Array.isArray(t)?(r.listItems+=t.length,t.map(s=>Ye(n,s,r))):void 0}if(typeof e=="object"&&e!==null){let n={};for(let[s,o]of Object.entries(e)){let u=Ye(o,t?.[s],r);u!==void 0&&(n[s]=u)}return n}}function Ze(e,t,r){if(t!=null){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(typeof t!="object"||Array.isArray(t))return;let n=new Set(Object.keys(e));for(let s of Object.keys(t))n.has(s)?Ze(e[s],t[s],r):r.discarded+=Ie(t[s]);return}if(Array.isArray(e)&&Array.isArray(t)){let n=e[1];t.forEach(s=>Ze(n,s,r));return}typeof e=="string"&&!e.endsWith("[]")&&typeof t=="object"&&t!==null&&(r.discarded+=Ie(t))}}function Ie(e){return e==null?0:Array.isArray(e)?e.reduce((t,r)=>t+Ie(r),0):typeof e=="object"?Object.values(e).reduce((t,r)=>t+Ie(r),0):1}var tn="hyper-html-api";function rn(e){return e&&e.nodeType===1&&e.id===tn&&e.tagName==="SCRIPT"}function nn(e){return e?(e.nodeType===9||e.nodeType===11,e):null}var sn={find(e,t,r={}){let n=nn(e);if(!n||!n.querySelectorAll)return[];let s=Array.from(n.querySelectorAll(t));r.includeRulesTag||(s=s.filter(u=>!rn(u)));let o=[];if(r.skip&&o.push(r.skip),r.templateAttr&&o.push("["+r.templateAttr+"]"),o.length){let u=o.join(", ");s=s.filter(l=>!l.closest||!l.closest(u))}return s},parent(e){return e?e.parentElement:null},children(e){return e?Array.from(e.children):[]},text(e,t){if(t===void 0)return(e.textContent||"").trim();e.textContent=t},attr(e,t,r){if(r===void 0)return e.hasAttribute&&e.hasAttribute(t)?e.getAttribute(t):null;e.setAttribute(t,r)},removeAttr(e,t){e&&e.removeAttribute&&e.removeAttribute(t)},prop(e,t,r){if(r===void 0){let n=e?e[t]:void 0;return n!==void 0?n:null}e[t]=r},clone(e){return e.cloneNode(!0)},insertAt(e,t,r){let n=e.children[r]||null;e.insertBefore(t,n)},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 n=e.ownerDocument.createElement("template");n.innerHTML=t;let s=n.content.firstElementChild;if(!s)throw new Error("dom.replaceWith: html did not parse to an element");return e.parentNode.replaceChild(s,e),s},stripIds(e){let t=0;return e.id&&(e.removeAttribute("id"),t++),(e.querySelectorAll?e.querySelectorAll("[id]"):[]).forEach(n=>{n.removeAttribute("id"),t++}),t},sameNode(e,t){return e===t}},G=sn;var on="_hyperHtmlApi",an="upgrade-helper",cn="parentOrigin";function Qe(e=typeof location<"u"?location:null){if(!e)return!1;try{return new URLSearchParams(e.search).get(on)===an}catch{return!1}}function jt(e=typeof location<"u"?location:null){return e?new URLSearchParams(e.search).get(cn):null}function et({win:e,doc:t,parentOrigin:r}={}){if(e=e||(typeof window<"u"?window:null),t=t||(typeof document<"u"?document:null),!e||!t||(r=r||jt(e.location),!r))return;let n=()=>ln({win:e,doc:t,parentOrigin:r});t.readyState==="loading"?t.addEventListener("DOMContentLoaded",n,{once:!0}):n()}function ln({win:e,doc:t,parentOrigin:r}){let n;try{n=Se(G,t.body)}catch(f){return Je(e,r,f)}if(!n)return Je(e,r,new Error("helper-mode: no rules tag in v2 document"));let s=n.rules,o=dn(t,"hyper-version"),u=!!Re(),l=f=>{if(f.source!==e.parent||f.origin!==r)return;let y=f.data;if(!(!y||y.type!=="hha:upgrade-data")){e.removeEventListener("message",l);try{let v=un({doc:t,rules:s,v1Data:y.v1Data});e.parent.postMessage({type:"hha:upgrade-result",html:v.html,summary:v.summary},r)}catch(v){Je(e,r,v)}}};e.addEventListener("message",l),e.parent.postMessage({type:"hha:upgrade-ready",rules:s,version:o,hasTransform:u},r)}function un({doc:e,rules:t,v1Data:r}){let n=Re(),s=r,o=!1;n&&(s=n(r),o=!0);let{data:u,summary:l}=Ce(s,t);ge(G,e.body,t,u);let f=te(G,e.body,t);return{html:`<!DOCTYPE html>
2
- `+e.documentElement.outerHTML,summary:{...l,transformApplied:o,appliedFieldCount:Xe(f)}}}function Je(e,t,r){e.parent.postMessage({type:"hha:upgrade-error",name:r?.name||"Error",message:r?.message||String(r)},t)}function dn(e,t){let r=e.querySelector(`meta[name="${t}"]`);return r?r.getAttribute("content"):null}function Xe(e){return e==null?0:Array.isArray(e)?e.reduce((t,r)=>t+Xe(r),0):typeof e=="object"?Object.values(e).reduce((t,r)=>t+Xe(r),0):1}var F={extract:(e,t,r)=>te(G,e,t,r),apply:(e,t,r,n)=>ge(G,e,t,r,n),findRulesIn:e=>Se(G,e),parseStrict:ze,parseRelaxed:be,errors:Te,DOM_PROPERTIES:xe};typeof window<"u"&&Qe(window.location)&&et({win:window,doc:document});var rt={};Be(rt,{fromString:()=>Y,getRuleAtPath:()=>Ae,getValueAtPath:()=>yn,setAtPath:()=>tt,toString:()=>pn});function pn(e){return e.map(String).join(".")}function Y(e){return e===""?[]:e.split(".").map(t=>/^\d+$/.test(t)?Number(t):t)}function Ae(e,t){let r=e;for(let n of t){if(r==null)return;if(typeof r=="string"){if(r.endsWith("[]")&&(typeof n=="number"||n==="*")){r=r.slice(0,-2);continue}return}if(Array.isArray(r)){if(typeof n!="number"&&n!=="*")return;r=r[1];continue}if(typeof r=="object"){if(typeof n=="number"||!(n in r))return;r=r[n];continue}return}return r}function yn(e,t){let r=e;for(let n of t){if(r==null)return;r=r[n]}return r}function tt(e,t,r){if(t.length===0)return r;let[n,...s]=t;if(typeof n=="number"){let o=Array.isArray(e)?[...e]:[];return o[n]=tt(o[n],s,r),o}return{...e&&typeof e=="object"?e:{},[n]:tt((e||{})[n],s,r)}}function ve(e){if(typeof e=="string")return e.endsWith("[]")?[]:"";if(Array.isArray(e))return[];if(typeof e=="object"&&e!==null){let t={};for(let[r,n]of Object.entries(e))t[r]=ve(n);return t}return""}var Ht={includeClasses:!0,includeAttributes:["href","src","name","type","role","aria-label","alt","title"],excludeAttributePrefixes:["data-morph-","data-hyper-","data-im-"],textHintLength:64,excludeIds:!0,maxPathDepth:4,landmarks:["HEADER","NAV","MAIN","ASIDE","FOOTER","SECTION","ARTICLE"],weights:{signature:100,pathSegment:10,textMatch:20,textMismatch:25,uniqueCandidate:50,positionPenalty:1,slotMatch:30},minConfidence:101};function gn(e){let t=5381;for(let r=0;r<e.length;r++)t=(t<<5)+t^e.charCodeAt(r);return Math.abs(t).toString(36)}function bn(e){if(e.classList&&e.classList.length>0)return Array.from(e.classList).sort().join(" ");let t=e.getAttribute?.("class");return t?t.split(/\s+/).filter(Boolean).sort().join(" "):""}function Sn(e,t){let r=[];for(let n of e.attributes||[]){let s=n.name;s==="id"||s==="class"||t.excludeAttributePrefixes.some(o=>s.startsWith(o))||t.includeAttributes.includes(s)&&r.push(`${s}=${n.value}`)}return r.sort().join("|")}function An(e,t){return(e.textContent||"").replace(/\s+/g," ").trim().slice(0,t.textHintLength)}function vn(e,t){let r=[e.tagName];return t.includeClasses&&r.push(bn(e)),r.push(Sn(e,t)),gn(r.join("|"))}function En(e){let t=e.tagName,r=1,n=e.previousElementSibling;for(;n;)n.tagName===t&&r++,n=n.previousElementSibling;return r}function Mn(e,t){return e.id||e.getAttribute?.("role")?!0:t.landmarks.includes(e.tagName)}function xn(e){if(e.id)return`#${e.id}`;let t=e.getAttribute?.("role");return t?`@${t}`:e.tagName}function wn(e,t){let r=[],n=e;for(;n&&n.tagName&&r.length<t.maxPathDepth;){let s=`${n.tagName}:${En(n)}`;if(r.unshift(s),n!==e&&Mn(n,t)){r.unshift(xn(n));break}n=n.parentElement}return r}function Tn(e,t){let r=0,n=e.length-1,s=t.length-1;for(;n>=0&&s>=0&&e[n]===t[s];)r++,n--,s--;return r}function W(e,t,r){if(r.has(e))return r.get(e);let n={signature:vn(e,t),path:wn(e,t),textHint:An(e,t)};return r.set(e,n),n}function Pt(e,t,r,n){if(n.has(e))return n.get(e);let s=new Map,o=e.querySelectorAll("*"),u=0;for(let l of o){let f=W(l,t,r);f.domIndex=u++,s.has(f.signature)||s.set(f.signature,[]),s.get(f.signature).push(l)}return n.set(e,s),s}function kn(e,t,r){r.delete(e),t.delete(e);let n=e.querySelectorAll("*");for(let s of n)t.delete(s)}function nt(e,t,r,n,s){let o=W(e,r,n),u=W(t,r,n),l=r.weights,f={},y=0;if(o.signature!==u.signature)return{score:0,breakdown:{rejected:"signature mismatch"}};y+=l.signature,f.signature=l.signature;let b=Tn(o.path,u.path)*l.pathSegment;y+=b,f.path=b;let S=!0;if(o.textHint&&u.textHint?o.textHint===u.textHint?(y+=l.textMatch,f.text=l.textMatch):(y-=l.textMismatch,f.text=-l.textMismatch,S=!1):o.textHint!==u.textHint&&(y-=l.textMismatch,f.text=-l.textMismatch,S=!1),s.candidateCount===1&&S&&(y+=l.uniqueCandidate,f.unique=l.uniqueCandidate),typeof o.domIndex=="number"&&typeof u.domIndex=="number"){let R=Math.abs(o.domIndex-u.domIndex),I=Math.min(R*l.positionPenalty,20);y-=I,f.drift=-I}return{score:y,breakdown:f}}function $t(e,t,r,n,s){if(r.excludeIds&&e.id)return null;let o=Pt(t,r,n,s),u=W(e,r,n);if(typeof u.domIndex!="number"){let S=0,R=e.previousElementSibling;for(;R;)S++,R=R.previousElementSibling;u.domIndex=S}let l=o.get(u.signature)||[],f=r.excludeIds?l.filter(S=>!S.id):l;if(f.length===0)return null;let y=null,v=0,b=null;for(let S of f){let{score:R,breakdown:I}=nt(e,S,r,n,{candidateCount:f.length});R>v&&(v=R,y=S,b=I)}return v<r.minConfidence?null:{element:y,confidence:v,breakdown:b}}function Rn(e,t,r,n){let s=[],o=r.weights.signature+r.weights.slotMatch,u={slot:o};function l(b){if(b.children)return b.children;let S=b.childNodes;if(!S)return[];let R=[];for(let I=0;I<S.length;I++)S[I].nodeType===1&&R.push(S[I]);return R}function f(b,S){let R=l(b),I=l(S);if(R.length===I.length)for(let N=0;N<R.length;N++){let m=R[N],k=I[N];if(r.excludeIds&&(m.id||k.id)||m.tagName!==k.tagName)continue;let M=W(m,r,n).signature,T=W(k,r,n).signature;M!==T&&s.push({newEl:m,oldEl:k,score:o,breakdown:u}),f(m,k)}}function y(b,S){for(;;){if(b.tagName===S.tagName)return[b,S];let R=l(b);if(!b.tagName&&R.length===1){b=R[0];continue}let I=l(S);if(I.length===1&&I[0].tagName===b.tagName){S=I[0];continue}return null}}let v=y(e,t);return v&&f(v[0],v[1]),s}function qt(e,t,r,n,s){let o=t.querySelectorAll("*"),u=Pt(e,r,n,s),l=0;for(let b of o){let S=W(b,r,n);S.domIndex=l++}let f=[];for(let b of o){if(r.excludeIds&&b.id)continue;let S=W(b,r,n),R=u.get(S.signature)||[],I=r.excludeIds?R.filter(N=>!N.id):R;for(let N of I){let{score:m,breakdown:k}=nt(b,N,r,n,{candidateCount:I.length});m>=r.minConfidence&&f.push({newEl:b,oldEl:N,score:m,breakdown:k})}}if(r.weights.slotMatch>0){let b=Rn(t,e,r,n);for(let S of b)f.push(S)}f.sort((b,S)=>S.score-b.score);let y=new Map,v=new Set;for(let{newEl:b,oldEl:S}of f)y.has(b)||v.has(S)||(y.set(b,S),v.add(S));return y}function Ft(e,t,r,n){let s=W(e,r,n),o=W(t,r,n),{score:u,breakdown:l}=nt(e,t,r,n,{candidateCount:1});return{matches:u>=r.minConfidence,score:u,breakdown:l,newMeta:{signature:s.signature,path:s.path,textHint:s.textHint},oldMeta:{signature:o.signature,path:o.path,textHint:o.textHint}}}function _t(e={}){let t={...Ht,...e,weights:{...Ht.weights,...e.weights}},r=new WeakMap,n=new WeakMap;return{findMatch:(s,o)=>$t(s,o,t,r,n),computeMatches:(s,o)=>qt(s,o,t,r,n),explain:(s,o)=>Ft(s,o,t,r),invalidate:s=>kn(s,r,n),session:()=>{let s=new WeakMap,o=new WeakMap;return{findMatch:(u,l)=>$t(u,l,t,s,o),computeMatches:(u,l)=>qt(u,l,t,s,o),explain:(u,l)=>Ft(u,l,t,s)}},getConfig:()=>({...t})}}var In=_t(),st=(function(){"use strict";let e=()=>{};function t(m){if(!(m instanceof Element))return!1;if(m.hasAttribute("save-ignore"))return!0;if(m.tagName==="LINK"||m.tagName==="SCRIPT"){let k=m.getAttribute("src")||m.getAttribute("href")||"";if(k.startsWith("chrome-extension://")||k.startsWith("moz-extension://")||k.startsWith("safari-web-extension://"))return!0}return!1}function r(m,k){if(k!=="smart")return m.outerHTML;let M=m.getAttribute("src"),T=m.getAttribute("type")||"text/javascript";if(M)try{let x=new URL(M,window.location.href);return`ext:${T}:${x.origin}${x.pathname}${x.search}`}catch{return`ext:${T}:${M}`}else{let x=m.textContent.trim(),E=5381;for(let d=0;d<x.length;d++)E=(E<<5)+E^x.charCodeAt(d);return`inline:${T}:${Math.abs(E).toString(36)}`}}let n={morphStyle:"outerHTML",callbacks:{beforeNodeAdded:e,afterNodeAdded:e,beforeNodeMorphed:e,afterNodeMorphed:e,beforeNodeRemoved:e,afterNodeRemoved:e,beforeAttributeUpdated:e},head:{style:"merge",shouldPreserve:m=>m.getAttribute("im-preserve")==="true",shouldReAppend:m=>m.getAttribute("im-re-append")==="true",shouldRemove:e,afterHeadMorphed:e},scripts:{handle:!1,matchMode:"outerHTML",shouldPreserve:m=>m.getAttribute("im-preserve")==="true",shouldReAppend:m=>m.getAttribute("im-re-append")==="true",shouldRemove:e,afterScriptsHandled:e},restoreFocus:!0},s={computeMatches(m,k){let{computeMatches:M}=In.session();return M(m,k)}};function o(m,k,M={}){m=I(m);let T=N(k),x=R(m,T,M),E=x.scripts.matchMode,d=new Set(Array.from(m.querySelectorAll("script")).map(a=>r(a,E))),g=l(x,()=>v(x,m,T,a=>a.morphStyle==="innerHTML"?(f(a,m,T),Array.from(m.childNodes)):u(a,m,T)));x.pantry.remove();let i=S(m,d,x);return i.length>0?g instanceof Promise?g.then(a=>Promise.all(i).then(()=>a)):Promise.all(i).then(()=>g):g}function u(m,k,M){let T=N(k);return f(m,T,M,k,k.nextSibling),Array.from(T.childNodes)}function l(m,k){if(!m.config.restoreFocus)return k();let M=document.activeElement;if(!(M instanceof HTMLInputElement||M instanceof HTMLTextAreaElement))return k();let{id:T,selectionStart:x,selectionEnd:E}=M,d=k();return T&&T!==document.activeElement?.getAttribute("id")&&(M=m.target.querySelector(`[id="${T}"]`),M?.focus()),M&&!M.selectionEnd&&E!=null&&M.setSelectionRange(x,E),d}let f=(function(){function m(i,a,h,c=null,p=null){a instanceof HTMLTemplateElement&&h instanceof HTMLTemplateElement&&(a=a.content,h=h.content),c||=a.firstChild;for(let A of h.childNodes){if(t(A))continue;if(c&&c!=p){let C=M(i,A,c,p);if(C){C!==c&&x(i,c,C),y(C,A,i),c=C.nextSibling;continue}}if(A instanceof Element){let C=A.getAttribute("id");if(i.persistentIds.has(C)){let L=E(a,C,c,i);y(L,A,i),c=L.nextSibling;continue}if(!i.idMap.has(A)){let L=i.hyperMatches.get(A);if(L&&!i.idMap.has(L)){g(a,L,c),y(L,A,i),c=L.nextSibling;continue}}}let w=k(a,A,c,i);w&&(c=w.nextSibling)}for(;c&&c!=p;){let A=c;c=c.nextSibling,t(A)||T(i,A)}}function k(i,a,h,c){if(c.callbacks.beforeNodeAdded(a)===!1)return null;if(c.idMap.has(a)){let p=document.createElement(a.tagName);return i.insertBefore(p,h),y(p,a,c),c.callbacks.afterNodeAdded(p),p}else{let p=document.importNode(a,!0);return i.insertBefore(p,h),c.callbacks.afterNodeAdded(p),p}}let M=(function(){function i(c,p,A,w){let C=p instanceof Element&&!c.idMap.has(p)?c.hyperMatches.get(p):null,L=null,q=p.nextSibling,D=0,O=A;for(;O&&O!=w;){if(h(O,p)){if(a(c,O,p)||O===C&&!c.idMap.has(O))return O;if(L===null){let P=O instanceof Element&&c.hyperMatchedOldElements.has(O);!c.idMap.has(O)&&!P&&(L=O)}}if(L===null&&q&&h(O,q)&&(D++,q=q.nextSibling,D>=2&&(L=void 0)),c.activeElementAndParents.includes(O))break;O=O.nextSibling}return L||null}function a(c,p,A){let w=c.idMap.get(p),C=c.idMap.get(A);if(!C||!w)return!1;for(let L of w)if(C.has(L))return!0;return!1}function h(c,p){let A=c,w=p;return A.nodeType===w.nodeType&&A.tagName===w.tagName&&(!A.getAttribute?.("id")||A.getAttribute?.("id")===w.getAttribute?.("id"))}return i})();function T(i,a){let h=a instanceof Element&&i.hyperMatchedOldElements.has(a)&&!i.idMap.has(a);if(i.idMap.has(a)||h)g(i.pantry,a,null);else{if(i.callbacks.beforeNodeRemoved(a)===!1)return;a.parentNode?.removeChild(a),i.callbacks.afterNodeRemoved(a)}}function x(i,a,h){let c=a;for(;c&&c!==h;){let p=c;c=c.nextSibling,t(p)||T(i,p)}return c}function E(i,a,h,c){let p=c.target.getAttribute?.("id")===a&&c.target||c.target.querySelector(`[id="${a}"]`)||c.pantry.querySelector(`[id="${a}"]`);return d(p,c),g(i,p,h),p}function d(i,a){let h=i.getAttribute("id");for(;i=i.parentNode;){let c=a.idMap.get(i);c&&(c.delete(h),c.size||a.idMap.delete(i))}}function g(i,a,h){if(i.moveBefore)try{i.moveBefore(a,h)}catch{i.insertBefore(a,h)}else i.insertBefore(a,h)}return m})(),y=(function(){function m(d,g,i){return i.ignoreActive&&d===document.activeElement?null:(i.callbacks.beforeNodeMorphed(d,g)===!1||(d instanceof HTMLHeadElement&&i.head.ignore||(d instanceof HTMLHeadElement&&i.head.style!=="morph"?b(d,g,i):(k(d,g,i),E(d,i)||f(i,d,g))),i.callbacks.afterNodeMorphed(d,g)),d)}function k(d,g,i){let a=g.nodeType;if(a===1){let h=d,c=g,p=h.attributes,A=c.attributes;for(let w of A)x(w.name,h,"update",i)||h.getAttribute(w.name)!==w.value&&h.setAttribute(w.name,w.value);for(let w=p.length-1;0<=w;w--){let C=p[w];if(C&&!c.hasAttribute(C.name)){if(x(C.name,h,"remove",i))continue;h.removeAttribute(C.name)}}E(h,i)||M(h,c,i)}(a===8||a===3)&&d.nodeValue!==g.nodeValue&&(d.nodeValue=g.nodeValue)}function M(d,g,i){if(d instanceof HTMLInputElement&&g instanceof HTMLInputElement&&g.type!=="file"){let a=g.value,h=d.value;T(d,g,"checked",i),T(d,g,"disabled",i),i.formStateSync==="property"?h!==a&&(x("value",d,"update",i)||(d.value=a)):g.hasAttribute("value")?h!==a&&(x("value",d,"update",i)||(d.setAttribute("value",a),d.value=a)):x("value",d,"remove",i)||(d.value="",d.removeAttribute("value"))}else if(d instanceof HTMLOptionElement&&g instanceof HTMLOptionElement)T(d,g,"selected",i);else if(d instanceof HTMLTextAreaElement&&g instanceof HTMLTextAreaElement){let a=g.value,h=d.value;if(x("value",d,"update",i))return;a!==h&&(d.value=a),d.firstChild&&d.firstChild.nodeValue!==a&&(d.firstChild.nodeValue=a)}}function T(d,g,i,a){let h=g[i],c=d[i];if(h!==c){let p=x(i,d,"update",a);if(p||(d[i]=g[i]),a.formStateSync==="property")return;h?p||d.setAttribute(i,""):x(i,d,"remove",a)||d.removeAttribute(i)}}function x(d,g,i,a){return d==="value"&&a.ignoreActiveValue&&g===document.activeElement?!0:a.callbacks.beforeAttributeUpdated(d,g,i)===!1}function E(d,g){return!!g.ignoreActiveValue&&d===document.activeElement&&d!==document.body}return m})();function v(m,k,M,T){if(m.head.block){let x=k.querySelector("head"),E=M.querySelector("head");if(x&&E){let d=b(x,E,m);return Promise.all(d).then(()=>{let g=Object.assign(m,{head:{block:!1,ignore:!0}});return T(g)})}}return T(m)}function b(m,k,M){let T=[],x=[],E=[],d=[],g=M.scripts.matchMode,i=c=>{if(c.tagName==="SCRIPT")return r(c,g);if(c.tagName==="LINK"&&g==="smart"){let p=c.getAttribute("href");if(p)try{let A=new URL(p,window.location.href);return`link:${c.getAttribute("rel")||""}:${A.origin}${A.pathname}${A.search}`}catch{}}return c.outerHTML},a=new Map;for(let c of k.children)t(c)||a.set(i(c),c);for(let c of m.children){let p=i(c),A=a.has(p),w=M.head.shouldReAppend(c),C=M.head.shouldPreserve(c);A||C?w?x.push(c):(a.delete(p),E.push(c)):M.head.style==="append"?w&&(x.push(c),d.push(c)):M.head.shouldRemove(c)!==!1&&!t(c)&&x.push(c)}d.push(...a.values());let h=[];for(let c of d){let p=document.createRange().createContextualFragment(c.outerHTML).firstChild;if(M.callbacks.beforeNodeAdded(p)!==!1){if("href"in p&&p.href||"src"in p&&p.src){let A,w=new Promise(function(C){A=C});p.addEventListener("load",function(){A()}),h.push(w)}m.appendChild(p),M.callbacks.afterNodeAdded(p),T.push(p)}}for(let c of x)M.callbacks.beforeNodeRemoved(c)!==!1&&(m.removeChild(c),M.callbacks.afterNodeRemoved(c));return M.head.afterHeadMorphed(m,{added:T,kept:E,removed:x}),h}function S(m,k,M){if(!M.scripts.handle)return[];let T=[],x=[],E=[],d=[],g=M.scripts.matchMode,i=Array.from(m.querySelectorAll("script"));for(let h of i){let c=r(h,g),p=k.has(c),A=M.scripts.shouldPreserve(h),w=M.scripts.shouldReAppend(h);p||A?w?(x.push(h),d.push(h)):E.push(h):d.push(h)}for(let h of k){let c=i.some(p=>p.outerHTML===h)}let a=[];for(let h of d){if(M.callbacks.beforeNodeAdded(h)===!1)continue;let c=document.createRange().createContextualFragment(h.outerHTML).firstChild;if(c.src){let p,A=new Promise(function(w){p=w});c.addEventListener("load",function(){p()}),c.addEventListener("error",function(){p()}),a.push(A)}h.replaceWith(c),M.callbacks.afterNodeAdded(c),T.push(c)}return M.scripts.afterScriptsHandled(m,{added:T,kept:E,removed:x}),a}let R=(function(){function m(i,a,h){let{persistentIds:c,idMap:p}=d(i,a),A=s.computeMatches(i,a);if(typeof h.key=="function"){let q=new Map,D=new Set,O=j=>{let H=h.key(j);H!=null&&(q.has(H)?D.add(H):q.set(H,j))};i instanceof Element&&O(i);for(let j of i.querySelectorAll("*"))O(j);for(let j of D)q.delete(j);let P=new Map;for(let[j,H]of A)P.set(H,j);let J=a.__hyperMorphRoot||a,K=new Map,le=new Set,ue=j=>{let H=h.key(j);H!=null&&(K.has(H)?le.add(H):K.set(H,j))};J instanceof Element&&ue(J);for(let j of J.querySelectorAll("*"))ue(j);for(let j of le)K.delete(j);for(let[j,H]of K){let _=q.get(j);if(!_||_.tagName!==H.tagName)continue;let X=P.get(_);X&&X!==H&&A.delete(X);let Q=A.get(H);Q&&Q!==_&&P.delete(Q),A.set(H,_),P.set(_,H)}}let w=new Set;for(let q of A.values())w.add(q);let C=k(h),L=C.morphStyle||"outerHTML";if(!["innerHTML","outerHTML"].includes(L))throw`Do not understand how to morph style ${L}`;return{target:i,newContent:a,config:C,morphStyle:L,ignoreActive:C.ignoreActive,ignoreActiveValue:C.ignoreActiveValue,restoreFocus:C.restoreFocus,formStateSync:C.formStateSync||"attribute",idMap:p,persistentIds:c,hyperMatches:A,hyperMatchedOldElements:w,pantry:M(),activeElementAndParents:T(i),callbacks:C.callbacks,head:C.head,scripts:C.scripts}}function k(i){let a=Object.assign({},n);return Object.assign(a,i),a.callbacks=Object.assign({},n.callbacks,i.callbacks),a.head=Object.assign({},n.head,i.head),a.scripts=Object.assign({},n.scripts,i.scripts),a}function M(){let i=document.createElement("div");return i.hidden=!0,document.body.insertAdjacentElement("afterend",i),i}function T(i){let a=[],h=document.activeElement;if(h?.tagName!=="BODY"&&i.contains(h))for(;h&&(a.push(h),h!==i);)h=h.parentElement;return a}function x(i){let a=Array.from(i.querySelectorAll("[id]"));return i.getAttribute?.("id")&&a.push(i),a}function E(i,a,h,c){for(let p of c){let A=p.getAttribute("id");if(a.has(A)){let w=p;for(;w;){let C=i.get(w);if(C==null&&(C=new Set,i.set(w,C)),C.add(A),w===h)break;w=w.parentElement}}}}function d(i,a){let h=x(i),c=x(a),p=g(h,c),A=new Map;E(A,p,i,h);let w=a.__hyperMorphRoot||a;return E(A,p,w,c),{persistentIds:p,idMap:A}}function g(i,a){let h=new Set,c=new Map;for(let{id:A,tagName:w}of i)c.has(A)?h.add(A):c.set(A,w);let p=new Set;for(let{id:A,tagName:w}of a)p.has(A)?h.add(A):c.get(A)===w&&p.add(A);for(let A of h)p.delete(A);return p}return m})(),{normalizeElement:I,normalizeParent:N}=(function(){let m=new WeakSet;function k(E){return E instanceof Document?E.documentElement:E}function M(E){if(E==null)return document.createElement("div");if(typeof E=="string")return M(x(E));if(m.has(E))return E;if(E instanceof Node){if(E.parentNode)return new T(E);{let d=document.createElement("div");return d.append(E),d}}else{let d=document.createElement("div");for(let g of[...E])d.append(g);return d}}class T{constructor(d){this.originalNode=d,this.realParentNode=d.parentNode,this.previousSibling=d.previousSibling,this.nextSibling=d.nextSibling}get childNodes(){let d=[],g=this.previousSibling?this.previousSibling.nextSibling:this.realParentNode.firstChild;for(;g&&g!=this.nextSibling;)d.push(g),g=g.nextSibling;return d}querySelectorAll(d){return this.childNodes.reduce((g,i)=>{if(i instanceof Element){i.matches(d)&&g.push(i);let a=i.querySelectorAll(d);for(let h=0;h<a.length;h++)g.push(a[h])}return g},[])}insertBefore(d,g){return this.realParentNode.insertBefore(d,g)}moveBefore(d,g){return this.realParentNode.moveBefore(d,g)}get __hyperMorphRoot(){return this.originalNode}}function x(E){let d=new DOMParser,g=E.replace(/<svg(\s[^>]*>|>)([\s\S]*?)<\/svg>/gim,"");if(g.match(/<\/html>/)||g.match(/<\/head>/)||g.match(/<\/body>/)){let i=d.parseFromString(E,"text/html");if(g.match(/<\/html>/))return m.add(i),i;{let a=i.firstChild;return a&&m.add(a),a}}else{let a=d.parseFromString("<body><template>"+E+"</template></body>","text/html").body.querySelector("template").content;return m.add(a),a}}return{normalizeElement:k,normalizeParent:M}})();return{morph:o,defaults:n}})();var Ho=st.morph,$o=st.defaults,Dt=st;function Ne(e,t){Dt.morph(e,t,{morphStyle:"innerHTML",ignoreActiveValue:!0,restoreFocus:!0,formStateSync:"property"})}function Bt(e){return e.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/[-_]/g," ").replace(/\s+/g," ").trim().replace(/^./,t=>t.toUpperCase())}var Ut={"@scalar":`
1
+ var hypercms=(()=>{var _e=Object.defineProperty;var pr=Object.getOwnPropertyDescriptor;var yr=Object.getOwnPropertyNames;var gr=Object.prototype.hasOwnProperty;var Pe=(e,t)=>{for(var r in t)_e(e,r,{get:t[r],enumerable:!0})},br=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of yr(t))!gr.call(e,o)&&o!==r&&_e(e,o,{get:()=>t[o],enumerable:!(n=pr(t,o))||n.enumerable});return e};var Sr=e=>br(_e({},"__esModule",{value:!0}),e);var to={};Pe(to,{cms:()=>Qn,default:()=>eo});var Se=["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"],De=new Set(Se),xt=new Set(["textContent","innerText","innerHTML","value","checked","selected","disabled","readOnly","type","id","className","title"]),Et=new Set(["tagName","nodeName","nodeType","nodeValue","childElementCount","classList","baseURI","documentURI","contentType","offsetWidth","offsetHeight","clientWidth","clientHeight","scrollWidth","scrollHeight","currentSrc","duration","paused","dataset"]);var ve={};Pe(ve,{EmptyListInsert:()=>le,MAX_RULE_DEPTH:()=>ee,MaxRuleDepthExceeded:()=>z,RuleTargetReadOnly:()=>ue,RulesParseError:()=>Q,ShapeMismatch:()=>ce,UnknownRulesVersion:()=>ae,UpgradeAlreadyRegistered:()=>Ae});var Q=class extends Error{constructor(t,r){super(t),this.name="RulesParseError",this.cause=r}},ae=class extends Error{constructor(t){super(`unknown rules version: ${t}. Library supports "1".`),this.name="UnknownRulesVersion",this.version=t}},ee=20,z=class extends Error{constructor(t){super(`rule depth exceeded ${ee} at path: ${t.join(".")}`),this.name="MaxRuleDepthExceeded",this.path=t}},ce=class extends Error{constructor(t){super(`shape mismatch: ${t.length} field(s) failed validation`),this.name="ShapeMismatch",this.mismatches=t}},le=class extends Error{constructor(t){super(`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}},ue=class extends Error{constructor(t){super(`cannot write to read-only DOM property "${t}"`),this.name="RuleTargetReadOnly",this.target=t}},Ae=class extends Error{constructor(){super("upgrade transform already registered; only one registration is allowed per page."),this.name="UpgradeAlreadyRegistered"}};function B(e,t,r,n={}){return Ue(e,t,r,{depth:0,path:[]},n)}function Ue(e,t,r,n,o){if(n.depth>ee)throw new z(n.path);if(typeof r=="string")return Ar(e,t,r,o);if(Array.isArray(r)){let[s,a]=r;return e.find(t,s,o).map((c,u)=>Ue(e,c,a,{depth:n.depth+1,path:[...n.path,u]},o))}if(typeof r=="object"&&r!==null){let s={};for(let[a,i]of Object.entries(r))s[a]=Ue(e,t,i,{depth:n.depth+1,path:[...n.path,a]},o);return s}return null}function Ar(e,t,r,n){if(r.endsWith("[]")){let s=r.slice(0,-2);return e.find(t,s,n).map(a=>e.text(a))}if(r.startsWith("@"))return wt(e,t,r.slice(1));if(r.includes("@")){let s=r.lastIndexOf("@"),a=r.slice(0,s),i=r.slice(s+1),c=a?e.find(t,a,n):[t];return c.length===0?null:wt(e,c[0],i)}if(r===".")return e.text(t);let o=e.find(t,r,n);return o.length===0?null:e.text(o[0])}function wt(e,t,r){if(De.has(r)){let o=e.prop(t,r);return o==null?null:String(o)}let n=e.attr(t,r);return n||null}var vr=.5;function Be(e,t,r,n,o,s,a,i={}){let c=e.find(t,r,i);if(o.length===0){c.forEach(M=>e.remove(M));return}let u=o.length>c.length,d=c[0]||null;if(u&&!d&&(d=Tr(e,t,r,i),!d))throw new le(s.path);let p=c.map(M=>xr(e,M,n,i)),y=null;if(d){y=e.clone(d),i.templateAttr&&e.removeAttr(y,i.templateAttr);let M=e.stripIds(y);M>0&&console.warn(`[hyper-html-api] stripped ${M} id attribute(s) from cloned template at "${s.path.join(".")||"(root)"}"`)}let w=Er(o,p,n),E=c[0]||d,j=e.parent(E),b=c.length>0?Mr(e,j,E):0,k=new Set,T=o.map((M,R)=>{let x=w[R];if(x>=0)return k.add(x),c[x];let m=e.clone(y);return e.stripIds(m),m});c.forEach((M,R)=>{k.has(R)||e.remove(M)}),T.forEach((M,R)=>{let x=b+R;e.children(j).findIndex(l=>e.sameNode(l,M))!==x&&e.insertAt(j,M,x)}),T.forEach((M,R)=>{if(n===null){let x=o[R],m=x==null?"":String(x);e.text(M)!==m&&e.text(M,m)}else{let x=a(e,M,n,o[R],{depth:s.depth+1,path:[...s.path,R]},i);x&&x!==M&&(T[R]=x)}})}function xr(e,t,r,n){return r===null?e.text(t):B(e,t,r,n)}function Er(e,t,r){let n=new Array(e.length).fill(-1),o=new Set;return e.forEach((s,a)=>{let i=-1,c=-1;t.forEach((u,d)=>{if(o.has(d))return;let p=wr(s,u,r),y=p===c&&i>=0?Math.abs(d-a)<Math.abs(i-a):!1;(p>c||y)&&(c=p,i=d)}),c>=vr&&(n[a]=i,o.add(i))}),n}function wr(e,t,r){if(r===null)return e===t?1:0;let n=Object.keys(r||{});if(n.length===0)return 0;let o=0;for(let s of n)JSON.stringify(e?.[s])===JSON.stringify(t?.[s])&&o++;return o/n.length}function Mr(e,t,r){let n=e.children(t);for(let o=0;o<n.length;o++)if(e.sameNode(n[o],r))return o;return-1}function Tr(e,t,r,n){if(!n.templateAttr)return null;let o=t;for(;o;){let s=e.find(o,r,{includeRulesTag:!1});for(let a of s)if(e.attr(a,n.templateAttr)!=null)return a;o=e.parent(o)}return null}var Mt=new Set(["checked","selected","disabled","readOnly","paused"]);function G(e,t,r,n,o={}){let s=[];if(We(r,n,[],s),s.length)throw new ce(s);xe(e,t,r,n,{depth:0,path:[]},o)}function xe(e,t,r,n,o,s={}){if(o.depth>ee)throw new z(o.path);if(n===void 0)return t;if(typeof r=="string")return Rr(e,t,r,n,o,s);if(Array.isArray(r)){let[a,i]=r;return Be(e,t,a,i,n,o,xe,s),t}if(typeof r=="object"&&r!==null){for(let[a,i]of Object.entries(r)){let c=xe(e,t,i,n==null?n:n[a],{depth:o.depth+1,path:[...o.path,a]},s);c&&c!==t&&(t=c)}return t}return t}function Rr(e,t,r,n,o,s){if(r.endsWith("[]")){let i=r.slice(0,-2);return Be(e,t,i,null,n,o,xe,s),t}if(r.startsWith("@"))return Tt(e,t,r.slice(1),n);if(r.includes("@")){let i=r.lastIndexOf("@"),c=r.slice(0,i),u=r.slice(i+1),d=c?e.find(t,c,s):[t];return d.length===0||Tt(e,d[0],u,n),t}if(r===".")return e.text(t,n==null?"":String(n)),t;let a=e.find(t,r,s);return a.length===0||e.text(a[0],n==null?"":String(n)),t}function Tt(e,t,r,n){if(Et.has(r))throw new ue(r);if(r==="outerHTML"){let o=n==null?"":String(n);return e.replaceWith(t,o)}return xt.has(r)?(e.prop(t,r,Cr(r,n)),t):(e.attr(t,r,n==null?"":String(n)),t)}function Cr(e,t){return t==null?Mt.has(e)?!1:"":Mt.has(e)?!!t:t}function We(e,t,r,n){if(t!==void 0){if(typeof e=="string"){if(e.endsWith("[]")){Array.isArray(t)?t.forEach((o,s)=>{typeof o=="object"&&o!==null&&n.push({path:fe([...r,s]),expected:"scalar",got:de(o)})}):n.push({path:fe(r),expected:"array",got:de(t)});return}t!==null&&typeof t=="object"&&n.push({path:fe(r),expected:"scalar",got:de(t)});return}if(Array.isArray(e)){if(!Array.isArray(t)){n.push({path:fe(r),expected:"array",got:de(t)});return}let o=e[1];t.forEach((s,a)=>We(o,s,[...r,a],n));return}if(typeof e=="object"&&e!==null){if(t===null||Array.isArray(t)||typeof t!="object"){n.push({path:fe(r),expected:"object",got:de(t)});return}for(let[o,s]of Object.entries(e))We(s,t[o],[...r,o],n)}}}function de(e){return e===null?"null":Array.isArray(e)?"array":typeof e}function fe(e){return e.join(".")}function Ve(e){try{return JSON.parse(e)}catch(t){throw new Q(`Invalid strict JSON: ${t.message}`,t)}}function he(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 r(o){let s=[],a=0;for(;a<o.length;){let i=o[a];if(/\s/.test(i)){a++;continue}if("{}".includes(i)){s.push({type:i,value:i}),a++;continue}if(i==="["){let p=!1,y=a+1;for(;y<o.length&&/\s/.test(o[y]);)y++;if(y<o.length&&/[a-zA-Z_]/.test(o[y])&&(p=!0),!p){s.push({type:i,value:i}),a++;continue}}if(i==="]"){s.push({type:i,value:i}),a++;continue}if(i===":"){s.push({type:t.COLON,value:i}),a++;continue}if(i===","){s.push({type:t.COMMA,value:i}),a++;continue}if(i==='"'||i==="'"){let p=i,y=a+1;for(;y<o.length&&o[y]!==p;)o[y]==="\\"&&y++,y++;s.push({type:t.STRING,value:o.substring(a+1,y),quoted:!0,sourceQuote:p}),a=y+1;continue}let c=a,u;for(;c<o.length&&!/[{},]/.test(o[c]);)if(o[c]===":"){let p=[":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"],y=!1;for(let w of p){let E=w.substring(1);if(o.substring(c+1,c+1+E.length)===E){y=!0,c+=E.length;break}}if(!y)break}else if(o[c]==="["){for(c++;c<o.length&&o[c]!=="]";){if(o[c]==='"'||o[c]==="'"){let p=o[c];for(c++;c<o.length&&o[c]!==p;)o[c]==="\\"&&c++,c++}c++}c<o.length&&o[c]==="]"&&c++}else c++;u=o.substring(a,c);let d=t.IDENTIFIER;/^-?\d+(\.\d+)?$/.test(u)?d=t.NUMBER:u==="true"||u==="false"||u==="null"?d=t.BOOLEAN:/^[.#@\[]|[.#@\[]| /.test(u)&&(d=t.SELECTOR),s.push({type:d,value:u,quoted:!1}),a=c}return s}function n(o){let s="";for(let a=0;a<o.length;a++){let i=o[a];if("{}".includes(i.type)||"[]".includes(i.type)){s+=i.value;continue}if(i.type===t.COLON){s+=i.value;continue}if(i.type===t.COMMA){let c=o[a+1];if(c&&(c.type==="}"||c.type==="]"))continue;s+=i.value;continue}if(i.type===t.STRING&&i.quoted){let c=i.value;i.sourceQuote==="'"&&(c=c.replace(/\\'/g,"'"),c=c.replace(/(\\*)"/g,(u,d)=>d.length%2===0?d+'\\"':u)),s+=`"${c}"`;continue}if(i.type===t.NUMBER||i.type===t.BOOLEAN){s+=i.value;continue}if(i.type===t.SELECTOR||i.type===t.IDENTIFIER){s+=`"${i.value}"`;continue}s+=`"${i.value}"`}return s}try{let o=r(e),s=n(o);return JSON.parse(s)}catch(o){throw new Q("Invalid extraction rules syntax: "+o.message,o)}}var kr="1",Rt=/^[a-zA-Z0-9_-]+$/;function Y(e,t,r){let n;if(r===void 0)n="script[data-rules-name]";else{if(typeof r!="string"||!Rt.test(r))throw new Error(`hyper-html-api: invalid rules token ${JSON.stringify(r)} (must match ${Rt})`);n=`script[data-rules-name~="${r}"]`}let o=e.find(t,n,{includeRulesTag:!0});if(o.length===0)return null;r!==void 0&&o.length>1&&console.warn(`hyper-html-api: ${o.length} rules tags match data-rules-name~="${r}"; using the first.`);let s=o[0],a=e.attr(s,"data-rules-version");if(a!==kr)throw new ae(a);return{rules:he(e.text(s)),tagNode:s}}function Ke(e,t,r){if(r&&typeof r=="object")return{rules:r,tagNode:null};if(typeof r=="string"){let n=t&&t.ownerDocument?t.ownerDocument:t;return Y(e,n,r)}return null}function Ct(e,t,r,n){let o=Ke(e,t,r);if(!o){let i=typeof r=="string"?`data-rules-name~="${r}"`:"the provided rules object";throw new Error(`hyper-html-api: could not resolve rules for ${i}`)}let{rules:s,tagNode:a}=o;return{rules:s,tagNode:a,get:()=>B(e,t,s,n),set:i=>G(e,t,s,i,n)}}var jt={includeClasses:!0,includeAttributes:["href","src","name","type","role","aria-label","alt","title"],excludeAttributePrefixes:["data-morph-","data-hyper-","data-im-"],textHintLength:64,excludeIds:!0,maxPathDepth:4,landmarks:["HEADER","NAV","MAIN","ASIDE","FOOTER","SECTION","ARTICLE"],weights:{signature:100,pathSegment:10,textMatch:20,textMismatch:25,uniqueCandidate:50,positionPenalty:1,slotMatch:30},minConfidence:101};function Ir(e){let t=5381;for(let r=0;r<e.length;r++)t=(t<<5)+t^e.charCodeAt(r);return Math.abs(t).toString(36)}function Nr(e){if(e.classList&&e.classList.length>0)return Array.from(e.classList).sort().join(" ");let t=e.getAttribute?.("class");return t?t.split(/\s+/).filter(Boolean).sort().join(" "):""}function Lr(e,t){let r=[];for(let n of e.attributes||[]){let o=n.name;o==="id"||o==="class"||t.excludeAttributePrefixes.some(s=>o.startsWith(s))||t.includeAttributes.includes(o)&&r.push(`${o}=${n.value}`)}return r.sort().join("|")}function $r(e,t){return(e.textContent||"").replace(/\s+/g," ").trim().slice(0,t.textHintLength)}function Hr(e,t){let r=[e.tagName];return t.includeClasses&&r.push(Nr(e)),r.push(Lr(e,t)),Ir(r.join("|"))}function Fr(e){let t=e.tagName,r=1,n=e.previousElementSibling;for(;n;)n.tagName===t&&r++,n=n.previousElementSibling;return r}function qr(e,t){return e.id||e.getAttribute?.("role")?!0:t.landmarks.includes(e.tagName)}function _r(e){if(e.id)return`#${e.id}`;let t=e.getAttribute?.("role");return t?`@${t}`:e.tagName}function Pr(e,t){let r=[],n=e;for(;n&&n.tagName&&r.length<t.maxPathDepth;){let o=`${n.tagName}:${Fr(n)}`;if(r.unshift(o),n!==e&&qr(n,t)){r.unshift(_r(n));break}n=n.parentElement}return r}function Dr(e,t){let r=0,n=e.length-1,o=t.length-1;for(;n>=0&&o>=0&&e[n]===t[o];)r++,n--,o--;return r}function P(e,t,r){if(r.has(e))return r.get(e);let n={signature:Hr(e,t),path:Pr(e,t),textHint:$r(e,t)};return r.set(e,n),n}function $t(e,t,r,n){if(n.has(e))return n.get(e);let o=new Map,s=e.querySelectorAll("*"),a=0;for(let i of s){let c=P(i,t,r);c.domIndex=a++,o.has(c.signature)||o.set(c.signature,[]),o.get(c.signature).push(i)}return n.set(e,o),o}function Ur(e,t,r){r.delete(e),t.delete(e);let n=e.querySelectorAll("*");for(let o of n)t.delete(o)}function ze(e,t,r,n,o){let s=P(e,r,n),a=P(t,r,n),i=r.weights,c={},u=0;if(s.signature!==a.signature)return{score:0,breakdown:{rejected:"signature mismatch"}};u+=i.signature,c.signature=i.signature;let p=Dr(s.path,a.path)*i.pathSegment;u+=p,c.path=p;let y=!0;if(s.textHint&&a.textHint?s.textHint===a.textHint?(u+=i.textMatch,c.text=i.textMatch):(u-=i.textMismatch,c.text=-i.textMismatch,y=!1):s.textHint!==a.textHint&&(u-=i.textMismatch,c.text=-i.textMismatch,y=!1),o.candidateCount===1&&y&&(u+=i.uniqueCandidate,c.unique=i.uniqueCandidate),typeof s.domIndex=="number"&&typeof a.domIndex=="number"){let w=Math.abs(s.domIndex-a.domIndex),E=Math.min(w*i.positionPenalty,20);u-=E,c.drift=-E}return{score:u,breakdown:c}}function It(e,t,r,n,o){if(r.excludeIds&&e.id)return null;let s=$t(t,r,n,o),a=P(e,r,n);if(typeof a.domIndex!="number"){let y=0,w=e.previousElementSibling;for(;w;)y++,w=w.previousElementSibling;a.domIndex=y}let i=s.get(a.signature)||[],c=r.excludeIds?i.filter(y=>!y.id):i;if(c.length===0)return null;let u=null,d=0,p=null;for(let y of c){let{score:w,breakdown:E}=ze(e,y,r,n,{candidateCount:c.length});w>d&&(d=w,u=y,p=E)}return d<r.minConfidence?null:{element:u,confidence:d,breakdown:p}}function Br(e,t,r,n){let o=[],s=r.weights.signature+r.weights.slotMatch,a={slot:s};function i(p){if(p.children)return p.children;let y=p.childNodes;if(!y)return[];let w=[];for(let E=0;E<y.length;E++)y[E].nodeType===1&&w.push(y[E]);return w}function c(p,y){let w=i(p),E=i(y);if(w.length===E.length)for(let j=0;j<w.length;j++){let b=w[j],k=E[j];if(r.excludeIds&&(b.id||k.id)||b.tagName!==k.tagName)continue;let T=P(b,r,n).signature,M=P(k,r,n).signature;T!==M&&o.push({newEl:b,oldEl:k,score:s,breakdown:a}),c(b,k)}}function u(p,y){for(;;){if(p.tagName===y.tagName)return[p,y];let w=i(p);if(!p.tagName&&w.length===1){p=w[0];continue}let E=i(y);if(E.length===1&&E[0].tagName===p.tagName){y=E[0];continue}return null}}let d=u(e,t);return d&&c(d[0],d[1]),o}function Nt(e,t,r,n,o){let s=t.querySelectorAll("*"),a=$t(e,r,n,o),i=0;for(let p of s){let y=P(p,r,n);y.domIndex=i++}let c=[];for(let p of s){if(r.excludeIds&&p.id)continue;let y=P(p,r,n),w=a.get(y.signature)||[],E=r.excludeIds?w.filter(j=>!j.id):w;for(let j of E){let{score:b,breakdown:k}=ze(p,j,r,n,{candidateCount:E.length});b>=r.minConfidence&&c.push({newEl:p,oldEl:j,score:b,breakdown:k})}}if(r.weights.slotMatch>0){let p=Br(t,e,r,n);for(let y of p)c.push(y)}c.sort((p,y)=>y.score-p.score);let u=new Map,d=new Set;for(let{newEl:p,oldEl:y}of c)u.has(p)||d.has(y)||(u.set(p,y),d.add(y));return u}function Lt(e,t,r,n){let o=P(e,r,n),s=P(t,r,n),{score:a,breakdown:i}=ze(e,t,r,n,{candidateCount:1});return{matches:a>=r.minConfidence,score:a,breakdown:i,newMeta:{signature:o.signature,path:o.path,textHint:o.textHint},oldMeta:{signature:s.signature,path:s.path,textHint:s.textHint}}}function Ht(e={}){let t={...jt,...e,weights:{...jt.weights,...e.weights}},r=new WeakMap,n=new WeakMap;return{findMatch:(o,s)=>It(o,s,t,r,n),computeMatches:(o,s)=>Nt(o,s,t,r,n),explain:(o,s)=>Lt(o,s,t,r),invalidate:o=>Ur(o,r,n),session:()=>{let o=new WeakMap,s=new WeakMap;return{findMatch:(a,i)=>It(a,i,t,o,s),computeMatches:(a,i)=>Nt(a,i,t,o,s),explain:(a,i)=>Lt(a,i,t,o)}},getConfig:()=>({...t})}}var Wr=Ht(),Ge=(function(){"use strict";let e=()=>{};function t(b){if(!(b instanceof Element))return!1;if(b.hasAttribute("save-ignore"))return!0;if(b.tagName==="LINK"||b.tagName==="SCRIPT"){let k=b.getAttribute("src")||b.getAttribute("href")||"";if(k.startsWith("chrome-extension://")||k.startsWith("moz-extension://")||k.startsWith("safari-web-extension://"))return!0}return!1}function r(b,k){if(k!=="smart")return b.outerHTML;let T=b.getAttribute("src"),M=b.getAttribute("type")||"text/javascript";if(T)try{let R=new URL(T,window.location.href);return`ext:${M}:${R.origin}${R.pathname}${R.search}`}catch{return`ext:${M}:${T}`}else{let R=b.textContent.trim(),x=5381;for(let m=0;m<R.length;m++)x=(x<<5)+x^R.charCodeAt(m);return`inline:${M}:${Math.abs(x).toString(36)}`}}let n={morphStyle:"outerHTML",callbacks:{beforeNodeAdded:e,afterNodeAdded:e,beforeNodeMorphed:e,afterNodeMorphed:e,beforeNodeRemoved:e,afterNodeRemoved:e,beforeAttributeUpdated:e},head:{style:"merge",shouldPreserve:b=>b.getAttribute("im-preserve")==="true",shouldReAppend:b=>b.getAttribute("im-re-append")==="true",shouldRemove:e,afterHeadMorphed:e},scripts:{handle:!1,matchMode:"outerHTML",shouldPreserve:b=>b.getAttribute("im-preserve")==="true",shouldReAppend:b=>b.getAttribute("im-re-append")==="true",shouldRemove:e,afterScriptsHandled:e},restoreFocus:!0},o={computeMatches(b,k){let{computeMatches:T}=Wr.session();return T(b,k)}};function s(b,k,T={}){b=E(b);let M=j(k),R=w(b,M,T),x=R.scripts.matchMode,m=new Set(Array.from(b.querySelectorAll("script")).map(f=>r(f,x))),A=i(R,()=>d(R,b,M,f=>f.morphStyle==="innerHTML"?(c(f,b,M),Array.from(b.childNodes)):a(f,b,M)));R.pantry.remove();let l=y(b,m,R);return l.length>0?A instanceof Promise?A.then(f=>Promise.all(l).then(()=>f)):Promise.all(l).then(()=>A):A}function a(b,k,T){let M=j(k);return c(b,M,T,k,k.nextSibling),Array.from(M.childNodes)}function i(b,k){if(!b.config.restoreFocus)return k();let T=document.activeElement;if(!(T instanceof HTMLInputElement||T instanceof HTMLTextAreaElement))return k();let{id:M,selectionStart:R,selectionEnd:x}=T,m=k();return M&&M!==document.activeElement?.getAttribute("id")&&(T=b.target.querySelector(`[id="${M}"]`),T?.focus()),T&&!T.selectionEnd&&x!=null&&T.setSelectionRange(R,x),m}let c=(function(){function b(l,f,g,h=null,S=null){f instanceof HTMLTemplateElement&&g instanceof HTMLTemplateElement&&(f=f.content,g=g.content),h||=f.firstChild;for(let v of g.childNodes){if(t(v))continue;if(h&&h!=S){let O=T(l,v,h,S);if(O){O!==h&&R(l,h,O),u(O,v,l),h=O.nextSibling;continue}}if(v instanceof Element){let O=v.getAttribute("id");if(l.persistentIds.has(O)){let N=x(f,O,h,l);u(N,v,l),h=N.nextSibling;continue}if(!l.idMap.has(v)){let N=l.hyperMatches.get(v);if(N&&!l.idMap.has(N)){A(f,N,h),u(N,v,l),h=N.nextSibling;continue}}}let C=k(f,v,h,l);C&&(h=C.nextSibling)}for(;h&&h!=S;){let v=h;h=h.nextSibling,t(v)||M(l,v)}}function k(l,f,g,h){if(h.callbacks.beforeNodeAdded(f)===!1)return null;if(h.idMap.has(f)){let S=document.createElement(f.tagName);return l.insertBefore(S,g),u(S,f,h),h.callbacks.afterNodeAdded(S),S}else{let S=document.importNode(f,!0);return l.insertBefore(S,g),h.callbacks.afterNodeAdded(S),S}}let T=(function(){function l(h,S,v,C){let O=S instanceof Element&&!h.idMap.has(S)?h.hyperMatches.get(S):null,N=null,F=S.nextSibling,ie=0,L=v;for(;L&&L!=C;){if(g(L,S)){if(f(h,L,S)||L===O&&!h.idMap.has(L))return L;if(N===null){let J=L instanceof Element&&h.hyperMatchedOldElements.has(L);!h.idMap.has(L)&&!J&&(N=L)}}if(N===null&&F&&g(L,F)&&(ie++,F=F.nextSibling,ie>=2&&(N=void 0)),h.activeElementAndParents.includes(L))break;L=L.nextSibling}return N||null}function f(h,S,v){let C=h.idMap.get(S),O=h.idMap.get(v);if(!O||!C)return!1;for(let N of C)if(O.has(N))return!0;return!1}function g(h,S){let v=h,C=S;return v.nodeType===C.nodeType&&v.tagName===C.tagName&&(!v.getAttribute?.("id")||v.getAttribute?.("id")===C.getAttribute?.("id"))}return l})();function M(l,f){let g=f instanceof Element&&l.hyperMatchedOldElements.has(f)&&!l.idMap.has(f);if(l.idMap.has(f)||g)A(l.pantry,f,null);else{if(l.callbacks.beforeNodeRemoved(f)===!1)return;f.parentNode?.removeChild(f),l.callbacks.afterNodeRemoved(f)}}function R(l,f,g){let h=f;for(;h&&h!==g;){let S=h;h=h.nextSibling,t(S)||M(l,S)}return h}function x(l,f,g,h){let S=h.target.getAttribute?.("id")===f&&h.target||h.target.querySelector(`[id="${f}"]`)||h.pantry.querySelector(`[id="${f}"]`);return m(S,h),A(l,S,g),S}function m(l,f){let g=l.getAttribute("id");for(;l=l.parentNode;){let h=f.idMap.get(l);h&&(h.delete(g),h.size||f.idMap.delete(l))}}function A(l,f,g){if(l.moveBefore)try{l.moveBefore(f,g)}catch{l.insertBefore(f,g)}else l.insertBefore(f,g)}return b})(),u=(function(){function b(m,A,l){return l.ignoreActive&&m===document.activeElement?null:(l.callbacks.beforeNodeMorphed(m,A)===!1||(m instanceof HTMLHeadElement&&l.head.ignore||(m instanceof HTMLHeadElement&&l.head.style!=="morph"?p(m,A,l):(k(m,A,l),x(m,l)||c(l,m,A))),l.callbacks.afterNodeMorphed(m,A)),m)}function k(m,A,l){let f=A.nodeType;if(f===1){let g=m,h=A,S=g.attributes,v=h.attributes;for(let C of v)R(C.name,g,"update",l)||g.getAttribute(C.name)!==C.value&&g.setAttribute(C.name,C.value);for(let C=S.length-1;0<=C;C--){let O=S[C];if(O&&!h.hasAttribute(O.name)){if(R(O.name,g,"remove",l))continue;g.removeAttribute(O.name)}}x(g,l)||T(g,h,l)}(f===8||f===3)&&m.nodeValue!==A.nodeValue&&(m.nodeValue=A.nodeValue)}function T(m,A,l){if(m instanceof HTMLInputElement&&A instanceof HTMLInputElement&&A.type!=="file"){let f=A.value,g=m.value;M(m,A,"checked",l),M(m,A,"disabled",l),l.formStateSync==="property"?g!==f&&(R("value",m,"update",l)||(m.value=f)):A.hasAttribute("value")?g!==f&&(R("value",m,"update",l)||(m.setAttribute("value",f),m.value=f)):R("value",m,"remove",l)||(m.value="",m.removeAttribute("value"))}else if(m instanceof HTMLOptionElement&&A instanceof HTMLOptionElement)M(m,A,"selected",l);else if(m instanceof HTMLTextAreaElement&&A instanceof HTMLTextAreaElement){let f=A.value,g=m.value;if(R("value",m,"update",l))return;f!==g&&(m.value=f),m.firstChild&&m.firstChild.nodeValue!==f&&(m.firstChild.nodeValue=f)}}function M(m,A,l,f){let g=A[l],h=m[l];if(g!==h){let S=R(l,m,"update",f);if(S||(m[l]=A[l]),f.formStateSync==="property")return;g?S||m.setAttribute(l,""):R(l,m,"remove",f)||m.removeAttribute(l)}}function R(m,A,l,f){return m==="value"&&f.ignoreActiveValue&&A===document.activeElement?!0:f.callbacks.beforeAttributeUpdated(m,A,l)===!1}function x(m,A){return!!A.ignoreActiveValue&&m===document.activeElement&&m!==document.body}return b})();function d(b,k,T,M){if(b.head.block){let R=k.querySelector("head"),x=T.querySelector("head");if(R&&x){let m=p(R,x,b);return Promise.all(m).then(()=>{let A=Object.assign(b,{head:{block:!1,ignore:!0}});return M(A)})}}return M(b)}function p(b,k,T){let M=[],R=[],x=[],m=[],A=T.scripts.matchMode,l=h=>{if(h.tagName==="SCRIPT")return r(h,A);if(h.tagName==="LINK"&&A==="smart"){let S=h.getAttribute("href");if(S)try{let v=new URL(S,window.location.href);return`link:${h.getAttribute("rel")||""}:${v.origin}${v.pathname}${v.search}`}catch{}}return h.outerHTML},f=new Map;for(let h of k.children)t(h)||f.set(l(h),h);for(let h of b.children){let S=l(h),v=f.has(S),C=T.head.shouldReAppend(h),O=T.head.shouldPreserve(h);v||O?C?R.push(h):(f.delete(S),x.push(h)):T.head.style==="append"?C&&(R.push(h),m.push(h)):T.head.shouldRemove(h)!==!1&&!t(h)&&R.push(h)}m.push(...f.values());let g=[];for(let h of m){let S=document.createRange().createContextualFragment(h.outerHTML).firstChild;if(T.callbacks.beforeNodeAdded(S)!==!1){if("href"in S&&S.href||"src"in S&&S.src){let v,C=new Promise(function(O){v=O});S.addEventListener("load",function(){v()}),g.push(C)}b.appendChild(S),T.callbacks.afterNodeAdded(S),M.push(S)}}for(let h of R)T.callbacks.beforeNodeRemoved(h)!==!1&&(b.removeChild(h),T.callbacks.afterNodeRemoved(h));return T.head.afterHeadMorphed(b,{added:M,kept:x,removed:R}),g}function y(b,k,T){if(!T.scripts.handle)return[];let M=[],R=[],x=[],m=[],A=T.scripts.matchMode,l=Array.from(b.querySelectorAll("script"));for(let g of l){let h=r(g,A),S=k.has(h),v=T.scripts.shouldPreserve(g),C=T.scripts.shouldReAppend(g);S||v?C?(R.push(g),m.push(g)):x.push(g):m.push(g)}for(let g of k){let h=l.some(S=>S.outerHTML===g)}let f=[];for(let g of m){if(T.callbacks.beforeNodeAdded(g)===!1)continue;let h=document.createRange().createContextualFragment(g.outerHTML).firstChild;if(h.src){let S,v=new Promise(function(C){S=C});h.addEventListener("load",function(){S()}),h.addEventListener("error",function(){S()}),f.push(v)}g.replaceWith(h),T.callbacks.afterNodeAdded(h),M.push(h)}return T.scripts.afterScriptsHandled(b,{added:M,kept:x,removed:R}),f}let w=(function(){function b(l,f,g){let{persistentIds:h,idMap:S}=m(l,f),v=o.computeMatches(l,f);if(typeof g.key=="function"){let F=new Map,ie=new Set,L=$=>{let H=g.key($);H!=null&&(F.has(H)?ie.add(H):F.set(H,$))};l instanceof Element&&L(l);for(let $ of l.querySelectorAll("*"))L($);for(let $ of ie)F.delete($);let J=new Map;for(let[$,H]of v)J.set(H,$);let He=f.__hyperMorphRoot||f,be=new Map,At=new Set,vt=$=>{let H=g.key($);H!=null&&(be.has(H)?At.add(H):be.set(H,$))};He instanceof Element&&vt(He);for(let $ of He.querySelectorAll("*"))vt($);for(let $ of At)be.delete($);for(let[$,H]of be){let X=F.get($);if(!X||X.tagName!==H.tagName)continue;let Fe=J.get(X);Fe&&Fe!==H&&v.delete(Fe);let qe=v.get(H);qe&&qe!==X&&J.delete(qe),v.set(H,X),J.set(X,H)}}let C=new Set;for(let F of v.values())C.add(F);let O=k(g),N=O.morphStyle||"outerHTML";if(!["innerHTML","outerHTML"].includes(N))throw`Do not understand how to morph style ${N}`;return{target:l,newContent:f,config:O,morphStyle:N,ignoreActive:O.ignoreActive,ignoreActiveValue:O.ignoreActiveValue,restoreFocus:O.restoreFocus,formStateSync:O.formStateSync||"attribute",idMap:S,persistentIds:h,hyperMatches:v,hyperMatchedOldElements:C,pantry:T(),activeElementAndParents:M(l),callbacks:O.callbacks,head:O.head,scripts:O.scripts}}function k(l){let f=Object.assign({},n);return Object.assign(f,l),f.callbacks=Object.assign({},n.callbacks,l.callbacks),f.head=Object.assign({},n.head,l.head),f.scripts=Object.assign({},n.scripts,l.scripts),f}function T(){let l=document.createElement("div");return l.hidden=!0,document.body.insertAdjacentElement("afterend",l),l}function M(l){let f=[],g=document.activeElement;if(g?.tagName!=="BODY"&&l.contains(g))for(;g&&(f.push(g),g!==l);)g=g.parentElement;return f}function R(l){let f=Array.from(l.querySelectorAll("[id]"));return l.getAttribute?.("id")&&f.push(l),f}function x(l,f,g,h){for(let S of h){let v=S.getAttribute("id");if(f.has(v)){let C=S;for(;C;){let O=l.get(C);if(O==null&&(O=new Set,l.set(C,O)),O.add(v),C===g)break;C=C.parentElement}}}}function m(l,f){let g=R(l),h=R(f),S=A(g,h),v=new Map;x(v,S,l,g);let C=f.__hyperMorphRoot||f;return x(v,S,C,h),{persistentIds:S,idMap:v}}function A(l,f){let g=new Set,h=new Map;for(let{id:v,tagName:C}of l)h.has(v)?g.add(v):h.set(v,C);let S=new Set;for(let{id:v,tagName:C}of f)S.has(v)?g.add(v):h.get(v)===C&&S.add(v);for(let v of g)S.delete(v);return S}return b})(),{normalizeElement:E,normalizeParent:j}=(function(){let b=new WeakSet;function k(x){return x instanceof Document?x.documentElement:x}function T(x){if(x==null)return document.createElement("div");if(typeof x=="string")return T(R(x));if(b.has(x))return x;if(x instanceof Node){if(x.parentNode)return new M(x);{let m=document.createElement("div");return m.append(x),m}}else{let m=document.createElement("div");for(let A of[...x])m.append(A);return m}}class M{constructor(m){this.originalNode=m,this.realParentNode=m.parentNode,this.previousSibling=m.previousSibling,this.nextSibling=m.nextSibling}get childNodes(){let m=[],A=this.previousSibling?this.previousSibling.nextSibling:this.realParentNode.firstChild;for(;A&&A!=this.nextSibling;)m.push(A),A=A.nextSibling;return m}querySelectorAll(m){return this.childNodes.reduce((A,l)=>{if(l instanceof Element){l.matches(m)&&A.push(l);let f=l.querySelectorAll(m);for(let g=0;g<f.length;g++)A.push(f[g])}return A},[])}insertBefore(m,A){return this.realParentNode.insertBefore(m,A)}moveBefore(m,A){return this.realParentNode.moveBefore(m,A)}get __hyperMorphRoot(){return this.originalNode}}function R(x){let m=new DOMParser,A=x.replace(/<svg(\s[^>]*>|>)([\s\S]*?)<\/svg>/gim,"");if(A.match(/<\/html>/)||A.match(/<\/head>/)||A.match(/<\/body>/)){let l=m.parseFromString(x,"text/html");if(A.match(/<\/html>/))return b.add(l),l;{let f=l.firstChild;return f&&b.add(f),f}}else{let f=m.parseFromString("<body><template>"+x+"</template></body>","text/html").body.querySelector("template").content;return b.add(f),f}}return{normalizeElement:k,normalizeParent:T}})();return{morph:s,defaults:n}})();var Do=Ge.morph,Uo=Ge.defaults,Ye=Ge;var Yr=null;function Ee(){return Yr}function Me(e,t){let r={carriedOver:0,discarded:0,listItems:0},n=Ze(t,e,r);return Je(t,e,r),{data:n,summary:r}}function Ze(e,t,r){if(typeof e=="string")return e.endsWith("[]")?Array.isArray(t)?(r.listItems+=t.length,r.carriedOver+=t.length,t):void 0:t==null?void 0:(r.carriedOver++,t);if(Array.isArray(e)){let[,n]=e;return Array.isArray(t)?(r.listItems+=t.length,t.map(o=>Ze(n,o,r))):void 0}if(typeof e=="object"&&e!==null){let n={};for(let[o,s]of Object.entries(e)){let a=Ze(s,t?.[o],r);a!==void 0&&(n[o]=a)}return n}}function Je(e,t,r){if(t!=null){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(typeof t!="object"||Array.isArray(t))return;let n=new Set(Object.keys(e));for(let o of Object.keys(t))n.has(o)?Je(e[o],t[o],r):r.discarded+=we(t[o]);return}if(Array.isArray(e)&&Array.isArray(t)){let n=e[1];t.forEach(o=>Je(n,o,r));return}typeof e=="string"&&!e.endsWith("[]")&&typeof t=="object"&&t!==null&&(r.discarded+=we(t))}}function we(e){return e==null?0:Array.isArray(e)?e.reduce((t,r)=>t+we(r),0):typeof e=="object"?Object.values(e).reduce((t,r)=>t+we(r),0):1}function Zr(e){return e&&e.nodeType===1&&e.tagName==="SCRIPT"&&e.hasAttribute&&e.hasAttribute("data-rules-name")}function Jr(e){return e?(e.nodeType===9||e.nodeType===11,e):null}var Xr={find(e,t,r={}){let n=Jr(e);if(!n||!n.querySelectorAll)return[];let o=Array.from(n.querySelectorAll(t));r.includeRulesTag||(o=o.filter(a=>!Zr(a)));let s=[];if(r.skip&&s.push(r.skip),r.templateAttr&&s.push("["+r.templateAttr+"]"),s.length){let a=s.join(", ");o=o.filter(i=>!i.closest||!i.closest(a))}return o},parent(e){return e?e.parentElement:null},children(e){return e?Array.from(e.children):[]},text(e,t){if(t===void 0)return(e.textContent||"").trim();e.textContent=t},attr(e,t,r){if(r===void 0)return e.hasAttribute&&e.hasAttribute(t)?e.getAttribute(t):null;e.setAttribute(t,r)},removeAttr(e,t){e&&e.removeAttribute&&e.removeAttribute(t)},prop(e,t,r){if(r===void 0){let n=e?e[t]:void 0;return n!==void 0?n:null}e[t]=r},clone(e){return e.cloneNode(!0)},insertAt(e,t,r){let n=e.children[r]||null;e.insertBefore(t,n)},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 n=e.ownerDocument.createElement("template");n.innerHTML=t;let o=n.content.firstElementChild;if(!o)throw new Error("dom.replaceWith: html did not parse to an element");return e.parentNode.replaceChild(o,e),o},stripIds(e){let t=0;return e.id&&(e.removeAttribute("id"),t++),(e.querySelectorAll?e.querySelectorAll("[id]"):[]).forEach(n=>{n.removeAttribute("id"),t++}),t},sameNode(e,t){return e===t}},D=Xr;var Qr="_hyperHtmlApi",en="upgrade-helper",tn="parentOrigin";function et(e=typeof location<"u"?location:null){if(!e)return!1;try{return new URLSearchParams(e.search).get(Qr)===en}catch{return!1}}function Ft(e=typeof location<"u"?location:null){return e?new URLSearchParams(e.search).get(tn):null}function tt({win:e,doc:t,parentOrigin:r}={}){if(e=e||(typeof window<"u"?window:null),t=t||(typeof document<"u"?document:null),!e||!t||(r=r||Ft(e.location),!r))return;let n=()=>rn({win:e,doc:t,parentOrigin:r});t.readyState==="loading"?t.addEventListener("DOMContentLoaded",n,{once:!0}):n()}function rn({win:e,doc:t,parentOrigin:r}){let n;try{n=Y(D,t.body)}catch(c){return Xe(e,r,c)}if(!n)return Xe(e,r,new Error("helper-mode: no rules tag in v2 document"));let o=n.rules,s=on(t,"hyper-version"),a=!!Ee(),i=c=>{if(c.source!==e.parent||c.origin!==r)return;let u=c.data;if(!(!u||u.type!=="hha:upgrade-data")){e.removeEventListener("message",i);try{let d=nn({doc:t,rules:o,v1Data:u.v1Data});e.parent.postMessage({type:"hha:upgrade-result",html:d.html,summary:d.summary},r)}catch(d){Xe(e,r,d)}}};e.addEventListener("message",i),e.parent.postMessage({type:"hha:upgrade-ready",rules:o,version:s,hasTransform:a},r)}function nn({doc:e,rules:t,v1Data:r}){let n=Ee(),o=r,s=!1;n&&(o=n(r),s=!0);let{data:a,summary:i}=Me(o,t);G(D,e.body,t,a);let c=B(D,e.body,t);return{html:`<!DOCTYPE html>
2
+ `+e.documentElement.outerHTML,summary:{...i,transformApplied:s,appliedFieldCount:Qe(c)}}}function Xe(e,t,r){e.parent.postMessage({type:"hha:upgrade-error",name:r?.name||"Error",message:r?.message||String(r)},t)}function on(e,t){let r=e.querySelector(`meta[name="${t}"]`);return r?r.getAttribute("content"):null}function Qe(e){return e==null?0:Array.isArray(e)?e.reduce((t,r)=>t+Qe(r),0):typeof e=="object"?Object.values(e).reduce((t,r)=>t+Qe(r),0):1}var q={extract:(e,t,r)=>B(D,e,t,r),apply:(e,t,r,n)=>G(D,e,t,r,n),findRulesIn:(e,t)=>Y(D,e,t),findRules:(e,t)=>Ke(D,e,t),bind:(e,t,r)=>Ct(D,e,t,r),parseStrict:Ve,parseRelaxed:he,errors:ve,DOM_PROPERTIES:Se};typeof window<"u"&&et(window.location)&&tt({win:window,doc:document});var nt={};Pe(nt,{fromString:()=>V,getRuleAtPath:()=>me,getValueAtPath:()=>un,setAtPath:()=>rt,toString:()=>ln});function ln(e){return e.map(String).join(".")}function V(e){return e===""?[]:e.split(".").map(t=>/^\d+$/.test(t)?Number(t):t)}function me(e,t){let r=e;for(let n of t){if(r==null)return;if(typeof r=="string"){if(r.endsWith("[]")&&(typeof n=="number"||n==="*")){r=r.slice(0,-2);continue}return}if(Array.isArray(r)){if(typeof n!="number"&&n!=="*")return;r=r[1];continue}if(typeof r=="object"){if(typeof n=="number"||!(n in r))return;r=r[n];continue}return}return r}function un(e,t){let r=e;for(let n of t){if(r==null)return;r=r[n]}return r}function rt(e,t,r){if(t.length===0)return r;let[n,...o]=t;if(typeof n=="number"){let s=Array.isArray(e)?[...e]:[];return s[n]=rt(s[n],o,r),s}return{...e&&typeof e=="object"?e:{},[n]:rt((e||{})[n],o,r)}}function pe(e){if(typeof e=="string")return e.endsWith("[]")?[]:"";if(Array.isArray(e))return[];if(typeof e=="object"&&e!==null){let t={};for(let[r,n]of Object.entries(e))t[r]=pe(n);return t}return""}function Te(e,t){Ye.morph(e,t,{morphStyle:"innerHTML",ignoreActiveValue:!0,restoreFocus:!0,formStateSync:"property"})}function qt(e){return e.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1 $2").replace(/[-_]/g," ").replace(/\s+/g," ").trim().replace(/^./,t=>t.toUpperCase())}var _t={"@scalar":`
3
3
  <label class="hcms-field" data-hcms-shape="scalar">
4
4
  <span class="hcms-label" data-hcms-label></span>
5
5
  <input class="hcms-input" data-hcms-field />
@@ -49,11 +49,11 @@ var hypercms=(()=>{var De=Object.defineProperty;var Sr=Object.getOwnPropertyDesc
49
49
  <div class="hcms-card-fields"></div>
50
50
  <div class="hcms-error" hidden></div>
51
51
  </article>
52
- `},Cn=Object.keys(Ut);function Le(e){let t=e.head||e.documentElement;if(t)for(let r of Cn){if(V(e,r))continue;let n=e.createElement("template");n.setAttribute("data-hcms-tpl",r),n.setAttribute("save-remove",""),n.innerHTML=Ut[r].trim(),t.appendChild(n)}}function V(e,t){return!e||!e.querySelector?null:e.querySelector(`template[data-hcms-tpl="${Nn(t)}"]`)}function Nn(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}function oe(e){return typeof e=="string"?e.endsWith("[]")?"scalar-array":"scalar":Array.isArray(e)?"object-array":typeof e=="object"&&e!==null?"object":"scalar"}function Ee(e){return e?!!(e.content||e).querySelector("[data-hcms-field]"):!1}var Wt={IMG:"src",A:"href"};function Oe(e){if(!e)return"value";let t=(e.tagName||"").toUpperCase();return t==="INPUT"?(e.getAttribute("type")||"text").toLowerCase()==="checkbox"?"checked":"value":t==="TEXTAREA"||t==="SELECT"?"value":Wt[t]?Wt[t]:null}function Vt(e,t){let r=(e.tagName||"").toUpperCase(),n=(e.getAttribute&&e.getAttribute("type")||"").toLowerCase(),s=Oe(e),u=`${zt(r,n)}[data-hcms-field="${ie(t)}"]`;return r==="INPUT"&&n==="radio"?`${u}:checked@value`:s?`${u}@${s}`:u}function Ln(e){let t=(e.tagName||"").toUpperCase(),r=(e.getAttribute&&e.getAttribute("type")||"").toLowerCase(),n=Oe(e),o=`${zt(t,r)}[data-hcms-field]`;return t==="INPUT"&&r==="radio"?`${o}:checked@value`:n?`${o}@${n}`:o}function zt(e,t){return e==="INPUT"?t?`input[type="${t}"]`:"input":e==="TEXTAREA"?"textarea":e==="SELECT"?"select":e==="IMG"?"img":e==="A"?"a":':not([data-hcms-shape="scalar"]):not([data-hcms-shape="object"]):not([data-hcms-shape="object-array"]):not([data-hcms-shape="scalar-array"])'}function ie(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}var Kt=new Set(["__proto__","constructor","prototype"]);function je(e,t){return r(e,[]);function r(y,v){let b=oe(y);if(b==="scalar")return n(y,v);if(b==="scalar-array")return s(v);if(b==="object-array")return o(y,v);if(b==="object"){let S=Object.create(null);for(let[R,I]of Object.entries(y)){if(Kt.has(R))throw new Error(`hypercms: rule key "${R}" is forbidden at "${v.join(".")||"<root>"}"`);S[R]=r(I,[...v,R])}return S}return null}function n(y,v){let b=v.length?v[v.length-1]:null,S=typeof b=="string"?b:"__value",R=f(v,S);if(R)return Vt(R,S);let I=l("@scalar",S);return I?Vt(I,S):`input[data-hcms-field="${ie(S)}"]@value`}function s(y){let v=l("@scalar-array-item",null),b=v?Ln(v):"input[data-hcms-field]@value";return[u(y,"[data-hcms-array-item]"),b]}function o(y,v){let[,b]=y,S=[...v,"*"],R=u(v,"[data-hcms-card]");if(b&&typeof b=="object"&&!Array.isArray(b)){let I=Object.create(null);for(let[N,m]of Object.entries(b)){if(Kt.has(N))throw new Error(`hypercms: rule key "${N}" is forbidden at "${S.join(".")}"`);I[N]=r(m,[...S,N])}return[R,I]}return[R,r(b,[...S,0])]}function u(y,v){let b=y.length?y[y.length-1]:"",S=y.some(N=>N==="*"),R=y.join(".");return`${S?`[data-hcms-field="${ie(b)}"]`:`[data-hcms-path="${ie(R)}"]`} > .hcms-array-items > ${v}`}function l(y,v){if(!t)return null;let b=V(t,y);if(!b)return null;let S=b.content||b;if(v){let R=S.querySelector(`[data-hcms-field="${ie(v)}"]`);if(R)return R}return S.querySelector("[data-hcms-field]")}function f(y,v){if(!t)return null;let b=y.map(I=>typeof I=="number"?"*":I).join("."),R=[y.join("."),b];for(let I=y.length-1;I>=0;I--){let N=y.slice(0,I).map(m=>typeof m=="number"?"*":m);N.push("*"),R.push(N.join("."))}for(let I of R){if(!I)continue;let N=V(t,I);if(!N||!Ee(N))continue;let m=N.content||N,k=m.querySelector(`[data-hcms-field="${ie(v)}"]`)||m.querySelector("[data-hcms-field]");if(k)return k}return null}}function He({pageRules:e,formRules:t,data:r,doc:n}){let s=n.createDocumentFragment(),o=ot(e,[],r,n);return o&&s.appendChild(o),s}function Yt({shape:e,itemShape:t,pathArr:r,data:n,doc:s}){if(e==="object-array-item")return Zt(t,r,n,s);if(e==="scalar-array-item")return Jt(r,n,s);throw new Error(`hypercms: buildItem called with unknown shape "${e}"`)}function ot(e,t,r,n){let s=oe(e);return s==="scalar"?On(t,r,n):s==="object"?jn(e,t,r,n):s==="object-array"?Hn(e,t,r,n):s==="scalar-array"?$n(e,t,r,n):null}function On(e,t,r){let n=$e(e,"@scalar",r);if(!n)throw new Error(`hypercms: missing template for scalar at "${e.join(".")}"`);let s=ae(n,r);return ce(s,e),qn(s,z(e)),qe(s,z(e)),Fe(s,z(e)),rr(s,t),s}function jn(e,t,r,n){let s=$e(t,"@object",n);if(!s)throw new Error(`hypercms: missing template for object at "${t.join(".")}"`);let o=ae(s,n);if(ce(o,t),qe(o,z(t)),Fe(o,z(t)),Ee(s))return sr(o,e,t),nr(o,e,r),o;let u=Pe(o,".hcms-object-fields",s,t);for(let[l,f]of Object.entries(e)){let y=r==null?null:r[l],v=ot(f,[...t,l],y,n);v&&u.appendChild(v)}return o}function Hn(e,t,r,n){let s=$e(t,"@object-array",n);if(!s)throw new Error(`hypercms: missing template for object-array at "${t.join(".")}"`);let o=ae(s,n);ce(o,t),qe(o,z(t)),Fe(o,z(t)),Qt(o,s),tr(o,s,t);let u=Pe(o,".hcms-array-items",s,t),[,l]=e;return(Array.isArray(r)?r:[]).forEach((y,v)=>{let b=Zt(l,[...t,v],y,n);b&&u.appendChild(b)}),er(o),o}function Zt(e,t,r,n){let s=Xt(t,"object-array-item",n);if(!s)throw new Error(`hypercms: missing item template for "${t.join(".")}"`);let o=ae(s,n);if(o.setAttribute("data-hcms-card",""),o.classList.contains("hcms-card")||o.classList.add("hcms-card"),ce(o,t),Ee(s))return e&&typeof e=="object"&&!Array.isArray(e)&&(sr(o,e,t),nr(o,e,r)),o;let u=Pe(o,".hcms-card-fields",s,t);if(e&&typeof e=="object"&&!Array.isArray(e))for(let[l,f]of Object.entries(e)){let y=r==null?null:r[l],v=ot(f,[...t,l],y,n);v&&u.appendChild(v)}return o}function $n(e,t,r,n){let s=$e(t,"@scalar-array",n);if(!s)throw new Error(`hypercms: missing template for scalar-array at "${t.join(".")}"`);let o=ae(s,n);ce(o,t),qe(o,z(t)),Fe(o,z(t)),Qt(o,s),tr(o,s,t);let u=Pe(o,".hcms-array-items",s,t);return(Array.isArray(r)?r:[]).forEach((f,y)=>{let v=Jt([...t,y],f,n);v&&u.appendChild(v)}),er(o),o}function Jt(e,t,r){let n=Xt(e,"scalar-array-item",r);if(!n)throw new Error(`hypercms: missing item template for "${e.join(".")}"`);let s=ae(n,r);return s.setAttribute("data-hcms-array-item",""),s.classList.contains("hcms-array-item")||s.classList.add("hcms-array-item"),ce(s,e),rr(s,t),s}function $e(e,t,r){let n=e.join("."),s=e.map(o=>typeof o=="number"?"*":o).join(".");return n&&V(r,n)||s&&s!==n&&V(r,s)||V(r,t)}function Xt(e,t,r){let n=e.map(s=>typeof s=="number"?"*":s).join(".");return V(r,n)||V(r,"@"+t)}function ae(e,t){let r=e.content||e,n=t.createElement("div");return n.appendChild(r.cloneNode(!0)),n.firstElementChild||n}function ce(e,t){e.setAttribute("data-hcms-path",t.join("."))}function qn(e,t){let r=t==null?"":String(t);if(e.matches&&e.matches("[data-hcms-field]")){e.getAttribute("data-hcms-field")||e.setAttribute("data-hcms-field",r);return}(e.querySelectorAll?e.querySelectorAll("[data-hcms-field]"):[]).forEach(s=>{s.getAttribute("data-hcms-field")||s.setAttribute("data-hcms-field",r)})}function qe(e,t){t==null||t===""||!e.setAttribute||e.hasAttribute?.("data-hcms-field")||e.setAttribute("data-hcms-field",String(t))}function Fe(e,t){if(t==null||t==="")return;(e.querySelectorAll?e.querySelectorAll("[data-hcms-label]"):[]).forEach(n=>{(n.textContent||"").trim()===""&&(n.textContent=Bt(String(t)))})}function Qt(e,t){["data-hcms-no-add","data-hcms-no-remove","data-hcms-no-reorder"].forEach(r=>{t.hasAttribute(r)&&e.setAttribute(r,"")}),["data-hcms-min-items","data-hcms-max-items"].forEach(r=>{t.hasAttribute(r)&&e.setAttribute(r,t.getAttribute(r))})}function er(e){let t=e.querySelector?e.querySelector(".hcms-array-items"):null;if(!t)return;let r=Array.from(t.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]")),n=r.length,s=Gt(e,"data-hcms-max-items"),o=Gt(e,"data-hcms-min-items"),u=e.hasAttribute("data-hcms-no-add"),l=e.hasAttribute("data-hcms-no-remove"),f=e.hasAttribute("data-hcms-no-reorder"),y=e.querySelector('[data-hcms-action="add"]');y&&(y.hidden=u||s!=null&&n>=s),r.forEach((v,b)=>{let S=v.querySelector('[data-hcms-action="remove"]');S&&(S.hidden=l||o!=null&&n<=o);let R=v.querySelector('[data-hcms-action="move-up"]');R&&(R.hidden=f||b===0);let I=v.querySelector('[data-hcms-action="move-down"]');I&&(I.hidden=f||b===n-1)})}function Gt(e,t){if(!e||!e.hasAttribute(t))return null;let r=parseInt(e.getAttribute(t),10);return Number.isFinite(r)?r:null}function tr(e,t,r){if(e.hasAttribute("data-hcms-no-reorder")||t.hasAttribute("data-hcms-no-reorder"))return;let n=e.querySelector(".hcms-array-items");if(!n)return;let s="hcms-"+r.join(".");n.setAttribute("sortable",s),n.setAttribute("onsorted","hypercmsCommit && hypercmsCommit()")}function z(e){return e.length?e[e.length-1]:null}function rr(e,t){let r=Fn(e);if(r.length!==0)for(let n of r)or(n,t)}function Fn(e){if(!e)return[];let t=[];return e.matches?.("[data-hcms-field]")&&Pn(e)&&t.push(e),(e.querySelectorAll?e.querySelectorAll("input[data-hcms-field], textarea[data-hcms-field], select[data-hcms-field], img[data-hcms-field], a[data-hcms-field], [contenteditable][data-hcms-field]"):[]).forEach(n=>t.push(n)),t}function Pn(e){let t=(e.tagName||"").toUpperCase();return!!(t==="INPUT"||t==="TEXTAREA"||t==="SELECT"||t==="IMG"||t==="A"||e.hasAttribute?.("contenteditable"))}function nr(e,t,r){(e.querySelectorAll?e.querySelectorAll("[data-hcms-field]"):[]).forEach(s=>{let o=s.getAttribute("data-hcms-field");if(!o)return;if(!t||typeof t!="object"||!(o in t)){console.warn(`[hypercms] inline template field "${o}" is not in the rule shape; ignoring`);return}let u=r==null?null:r[o];or(s,u)})}function sr(e,t,r){if(!e.querySelectorAll)return;e.querySelectorAll("[data-hcms-field]").forEach(s=>{let o=s.getAttribute("data-hcms-field");if(!o||t&&typeof t=="object"&&!(o in t))return;let u=[...r,o].join(".");s.setAttribute("data-hcms-path",u)})}function Pe(e,t,r,n){if(!e.querySelector)return e;let s=e.querySelector(t);if(s)return s;let o=r?.getAttribute?.("data-hcms-tpl")||n.join(".");throw new Error(`hypercms: template "${o}" is in slotted mode but has no ${t} element`)}function or(e,t){let r=Oe(e),n=(e.tagName||"").toUpperCase(),s=(e.getAttribute("type")||"").toLowerCase();if(n==="INPUT"&&s==="radio"){e.checked=e.value!=null&&String(e.value)===String(t??"");return}if(r==="checked"){e.checked=t===!0||t==="true";return}if(r){e[r]=t==null?"":String(t);return}e.textContent=t==null?"":String(t)}var ir={skip:"[data-hcms-shell]",templateAttr:"cms-template"};function ar(e,t,r,n={}){let{observerHandle:s,shellRoot:o,structural:u,structuralPath:l}=n;s?.pause?.();try{if(!u)try{return F.apply(e,t,r,ir),{ok:!0}}catch(b){return{ok:!1,error:b}}let f=_n(e,t,l),y=f?Bn(f):null,v=f?null:Wn(e,o);try{return F.apply(e,t,r,ir),{ok:!0}}catch(b){return y?Un(f,y):v&&Vn(e,o,v),{ok:!1,error:b}}}finally{s?.resume?.()}}function _n(e,t,r){if(!r||!e)return null;let n=Y(r),s=[],o=t;for(let u of n){if(typeof o=="string"||o==null||Array.isArray(o))break;if(typeof o=="object"&&u in o){if(s.push(u),o=o[u],Array.isArray(o)||typeof o=="string"&&o.endsWith("[]"))break}else return null}return!Array.isArray(o)&&!(typeof o=="string"&&o.endsWith("[]"))?null:Dn(e,t,s)}function Dn(e,t,r){if(r.length===0)return null;let n=e,s=t;for(let o=0;o<r.length;o++){let u=r[o];if(!s||typeof s!="object"||Array.isArray(s))return null;let l=s[u];if(l==null)return null;if(o===r.length-1){if(Array.isArray(l)){let[f]=l;return n.querySelector?.(f)?.parentElement||null}if(typeof l=="string"&&l.endsWith("[]")){let f=l.slice(0,-2);return n.querySelector?.(f)?.parentElement||null}return null}s=l}return null}function Bn(e){let t=[];for(let r of Array.from(e.childNodes))t.push(r.cloneNode(!0));return t}function Un(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);for(let r of t)e.appendChild(r)}function Wn(e,t){let r=[];for(let n of Array.from(e.childNodes))n===t||t&&n.contains?.(t)||r.push(n.cloneNode(!0));return r}function Vn(e,t,r){for(let s of Array.from(e.childNodes))s===t||t&&s.contains?.(t)||e.removeChild(s);let n=Kn(e,t);for(let s of r)e.insertBefore(s,n||null)}function Kn(e,t){if(!t)return null;for(let r of Array.from(e.childNodes))if(r===t||r.contains?.(t))return r;return null}var it=new WeakSet;function ur(e){let{formRoot:t}=e;if(!t||it.has(t))return;it.add(t);let r=u=>{let l=u.target;!l||!l.closest||l.closest("[data-hcms-form-root]")&&l.matches("input, textarea, select")&&(!l.closest("[data-hcms-field]")&&!l.hasAttribute?.("data-hcms-field")||cr(l,e))},n=u=>{let l=u.target;!l||!l.closest||l.closest("[data-hcms-form-root]")&&l.matches('input[type="checkbox"], input[type="radio"], select')&&cr(l,e)},s=u=>{let l=u.target;if(!l||!l.closest)return;let f=l.closest("[data-hcms-action]");if(!f)return;let y=f.getAttribute("data-hcms-action");if(y==="add"||y==="remove"||y==="move-up"||y==="move-down"){if(!f.closest("[data-hcms-form-root]"))return}else if((y==="close"||y==="save")&&!f.closest("[data-hcms-shell]"))return;if(y==="add"){let v=f.closest("[data-hcms-path]");if(!v)return;let b=v.getAttribute("data-hcms-path");at(b,e)}else if(y==="remove"){let v=f.closest("[data-hcms-card], [data-hcms-array-item]");if(!v)return;ct(v,e)}else if(y==="move-up"||y==="move-down"){let v=f.closest("[data-hcms-card], [data-hcms-array-item]");if(!v)return;zn(v,y==="move-up"?-1:1,e)}else y==="close"?e.onCloseRequested?.():y==="save"&&Gn(e)},o=t.ownerDocument;o.addEventListener("input",r,!0),o.addEventListener("change",n,!0),o.addEventListener("click",s,!0),e.detachEvents=()=>{o.removeEventListener("input",r,!0),o.removeEventListener("change",n,!0),o.removeEventListener("click",s,!0),it.delete(t)}}function cr(e,t){let n=(e.closest("[data-hcms-field]")||e).closest("[data-hcms-path]")?.getAttribute("data-hcms-path")||"";Z(B(t),{path:n,structural:!1},t)}function at(e,t){let{formRoot:r,pageRules:n}=t,s=r.querySelector(`[data-hcms-path="${es(e)}"]`);if(!s)throw new Error(`hypercms: no element at path "${e}"`);let o=s.querySelector(".hcms-array-items");if(!o)throw new Error(`hypercms: array container missing .hcms-array-items at "${e}"`);let u=Y(e),l=Xn(n,u),f=Array.isArray(l),y=typeof l=="string"&&l.endsWith("[]");if(!f&&!y)throw new Error(`hypercms: path "${e}" is not an array`);let v=_e(s,"data-hcms-max-items"),b=o.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]");if(s.hasAttribute("data-hcms-no-add")||v!=null&&b.length>=v)return;let S=b.length,R=f?l[1]:l.replace(/\[\]$/,""),I=ve(f?R:"string"),N=Yt({shape:f?"object-array-item":"scalar-array-item",itemShape:R,pathArr:[...u,S],data:I,doc:t.doc});o.appendChild(N),ut(s),Z(B(t),{path:e,structural:!0},t)}function zn(e,t,r){let n=e.closest('[data-hcms-shape="object-array"], [data-hcms-shape="scalar-array"]');if(!n||n.hasAttribute("data-hcms-no-reorder"))return;let s=n.querySelector(".hcms-array-items");if(!s)return;let o=Array.from(s.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]")),u=o.indexOf(e);if(u<0)return;let l=u+t;if(l<0||l>=o.length)return;let f=e.querySelector(`[data-hcms-action="${t<0?"move-up":"move-down"}"]`);t<0?s.insertBefore(e,o[l]):s.insertBefore(e,o[l].nextSibling),ft(s),ut(n),f&&typeof f.focus=="function"&&e.querySelector(`[data-hcms-action="${t<0?"move-up":"move-down"}"]`)?.focus?.(),Z(B(r),{path:n.getAttribute("data-hcms-path")||"",structural:!0},r)}function ct(e,t){let r=e.getAttribute("data-hcms-path")||"",n=e.parentElement,s=e.closest('[data-hcms-shape="object-array"], [data-hcms-shape="scalar-array"]');if(!s?.hasAttribute("data-hcms-no-remove")){if(s){let o=_e(s,"data-hcms-min-items"),u=s.querySelector(".hcms-array-items"),l=u?u.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]").length:0;if(o!=null&&l<=o)return}e.remove(),n&&ft(n),s&&ut(s),Z(B(t),{path:r,structural:!0},t)}}function Gn(e){let t=B(e);e.dispatch?.("hcms:save",{data:t}),e.onSave?.(t)}function Z(e,t,r){let n=ht(e);if(n===r.lastFingerprint)return{ok:!0,skipped:!0};let s=ar(r.pageRoot,r.pageRules,e,{observerHandle:r.observerHandle,shellRoot:r.shellRoot,structural:!!t.structural,structuralPath:t.path||null});return s.ok?(r.lastFingerprint=n,r.lastData=e,lr(r,null),r.dispatch?.("hcms:change",{data:e,path:t.path,structural:!!t.structural}),r.onChange?.(e,t)):(lr(r,Jn(s.error,t.path)),r.dispatch?.("hcms:error",{error:s.error,attemptedData:e}),r.onError?.(s.error)),s}function B(e){let t=F.extract(e.formRoot,e.formRules);return re(t,e.formRules)}function re(e,t){if(t==null||e==null)return e;if(typeof t=="string")return t.endsWith("@checked")?e===!0||e==="true":e;if(Array.isArray(t)){if(!Array.isArray(e))return e;let[,r]=t;return e.map(n=>re(n,r))}if(typeof t=="object"){if(typeof e!="object"||Array.isArray(e))return e;let r={};for(let[n,s]of Object.entries(t))r[n]=re(e[n],s);return r}return e}function lr(e,t){e.lastErrors=t&&t.length?t:null,lt(e)}function lt(e){if(Yn(e),e.errorEl&&(e.errorEl.textContent="",e.errorEl.hidden=!0),!e.lastErrors)return;let t=[];for(let{message:r,path:n}of e.lastErrors){if(n!=null&&n!==""){let s=Zn(e.formRoot,n);if(s){s.textContent=s.textContent?`${s.textContent}
53
- ${r}`:r,s.hidden=!1;continue}}t.push(r)}t.length&&e.errorEl&&(e.errorEl.textContent=t.join(`
54
- `),e.errorEl.hidden=!1)}function Yn(e){if(e.formRoot)for(let t of e.formRoot.querySelectorAll(".hcms-error"))t.textContent="",t.hidden=!0}function Zn(e,t){if(!e)return null;let r=t.split(".");for(;r.length>0;){let n=r.join("."),s=typeof CSS<"u"&&CSS.escape?CSS.escape(n):n.replace(/[^a-zA-Z0-9_\-.*]/g,u=>"\\"+u),o=e.querySelector(`[data-hcms-path="${s}"]`);if(o){for(let u of o.children)if(u.classList&&u.classList.contains("hcms-error"))return u}r.pop()}return null}function Jn(e,t){return e?e.name==="EmptyListInsert"?[{message:"Add a seed item in HTML first.",path:t}]:e.name==="ShapeMismatch"&&Array.isArray(e.mismatches)&&e.mismatches.length?e.mismatches.map(r=>({message:`Shape mismatch: expected ${r.expected}, got ${r.got}`,path:r.path})):[{message:e.message||String(e),path:t}]:[{message:"unknown error",path:t}]}function Xn(e,t){let r=e;for(let n of t){if(r==null||typeof r=="string")return;if(Array.isArray(r)){if(typeof n!="number"&&n!=="*")return;r=r[1];continue}if(typeof r=="object"){if(typeof n=="number"||!(n in r))return;r=r[n];continue}return}return r}function _e(e,t){if(!e||!e.hasAttribute(t))return null;let r=parseInt(e.getAttribute(t),10);return Number.isFinite(r)?r:null}function ut(e){if(!e)return;let t=e.querySelector(".hcms-array-items");if(!t)return;let r=Array.from(t.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]")),n=r.length,s=_e(e,"data-hcms-max-items"),o=_e(e,"data-hcms-min-items"),u=e.hasAttribute("data-hcms-no-add"),l=e.hasAttribute("data-hcms-no-remove"),f=e.hasAttribute("data-hcms-no-reorder"),y=e.querySelector(':scope > .hcms-add, :scope > * > .hcms-add, :scope > [data-hcms-action="add"]');y&&(y.hidden=u||s!=null&&n>=s),r.forEach((v,b)=>{let S=v.querySelector('[data-hcms-action="remove"]');S&&(S.hidden=l||o!=null&&n<=o);let R=v.querySelector('[data-hcms-action="move-up"]');R&&(R.hidden=f||b===0);let I=v.querySelector('[data-hcms-action="move-down"]');I&&(I.hidden=f||b===n-1)})}function dt(e){!e||!e.querySelectorAll||e.querySelectorAll(".hcms-array-items").forEach(t=>ft(t))}function ft(e){let t=0;for(let r of e.children){if(!r.matches?.("[data-hcms-card], [data-hcms-array-item]"))continue;let n=r.getAttribute("data-hcms-path");if(!n)continue;let s=n.split(".");s[s.length-1]=String(t);let o=s.join(".");o!==n&&Qn(r,n,o),t++}}function Qn(e,t,r){let n=e.querySelectorAll("[data-hcms-path]");e.setAttribute("data-hcms-path",r);for(let s of n){let o=s.getAttribute("data-hcms-path");o===t?s.setAttribute("data-hcms-path",r):o&&o.startsWith(t+".")&&s.setAttribute("data-hcms-path",r+o.slice(t.length))}}function ht(e){return JSON.stringify(e,(t,r)=>{if(r&&typeof r=="object"&&!Array.isArray(r)){let n=Object.create(null);for(let s of Object.keys(r).sort())n[s]=r[s];return n}return r})}function es(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}var is={},mt="hcms-shell-styles",ts="hcms-bundled-styles-installed",rs='a[href], area[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])',Me=new WeakSet,pt="";function dr(e){pt=e}var ns=0;function fr({mountTo:e,side:t="right",overlay:r=!1,showSaveButton:n=!1,doc:s}){ss(s);let o=`hcms-shell-title-${++ns}`,u=s.createElement("div");u.setAttribute("data-hcms-shell",""),u.setAttribute("save-remove",""),u.setAttribute("tabindex","-1"),u.setAttribute("role","dialog"),u.setAttribute("aria-modal","true"),u.setAttribute("aria-labelledby",o),u.className="hcms-shell hcms-side-"+t+(r?" hcms-overlay":""),u.innerHTML=`
52
+ `},dn=Object.keys(_t);function Re(e){let t=e.head||e.documentElement;if(t)for(let r of dn){if(U(e,r))continue;let n=e.createElement("template");n.setAttribute("data-hcms-tpl",r),n.setAttribute("save-remove",""),n.innerHTML=_t[r].trim(),t.appendChild(n)}}function U(e,t){return!e||!e.querySelector?null:e.querySelector(`template[data-hcms-tpl="${fn(t)}"]`)}function fn(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}function te(e){return typeof e=="string"?e.endsWith("[]")?"scalar-array":"scalar":Array.isArray(e)?"object-array":typeof e=="object"&&e!==null?"object":"scalar"}function ye(e){return e?!!(e.content||e).querySelector("[data-hcms-field]"):!1}var Pt={IMG:"src",A:"href"};function Ce(e){if(!e)return"value";let t=(e.tagName||"").toUpperCase();return t==="INPUT"?(e.getAttribute("type")||"text").toLowerCase()==="checkbox"?"checked":"value":t==="TEXTAREA"||t==="SELECT"?"value":Pt[t]?Pt[t]:null}function Dt(e,t){let r=(e.tagName||"").toUpperCase(),n=(e.getAttribute&&e.getAttribute("type")||"").toLowerCase(),o=Ce(e),a=`${Bt(r,n)}[data-hcms-field="${re(t)}"]`;return r==="INPUT"&&n==="radio"?`${a}:checked@value`:o?`${a}@${o}`:a}function hn(e){let t=(e.tagName||"").toUpperCase(),r=(e.getAttribute&&e.getAttribute("type")||"").toLowerCase(),n=Ce(e),s=`${Bt(t,r)}[data-hcms-field]`;return t==="INPUT"&&r==="radio"?`${s}:checked@value`:n?`${s}@${n}`:s}function Bt(e,t){return e==="INPUT"?t?`input[type="${t}"]`:"input":e==="TEXTAREA"?"textarea":e==="SELECT"?"select":e==="IMG"?"img":e==="A"?"a":':not([data-hcms-shape="scalar"]):not([data-hcms-shape="object"]):not([data-hcms-shape="object-array"]):not([data-hcms-shape="scalar-array"])'}function re(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}var Ut=new Set(["__proto__","constructor","prototype"]);function ke(e,t){return r(e,[]);function r(u,d){let p=te(u);if(p==="scalar")return n(u,d);if(p==="scalar-array")return o(d);if(p==="object-array")return s(u,d);if(p==="object"){let y=Object.create(null);for(let[w,E]of Object.entries(u)){if(Ut.has(w))throw new Error(`hypercms: rule key "${w}" is forbidden at "${d.join(".")||"<root>"}"`);y[w]=r(E,[...d,w])}return y}return null}function n(u,d){let p=d.length?d[d.length-1]:null,y=typeof p=="string"?p:"__value",w=c(d,y);if(w)return Dt(w,y);let E=i("@scalar",y);return E?Dt(E,y):`input[data-hcms-field="${re(y)}"]@value`}function o(u){let d=i("@scalar-array-item",null),p=d?hn(d):"input[data-hcms-field]@value";return[a(u,"[data-hcms-array-item]"),p]}function s(u,d){let[,p]=u,y=[...d,"*"],w=a(d,"[data-hcms-card]");if(p&&typeof p=="object"&&!Array.isArray(p)){let E=Object.create(null);for(let[j,b]of Object.entries(p)){if(Ut.has(j))throw new Error(`hypercms: rule key "${j}" is forbidden at "${y.join(".")}"`);E[j]=r(b,[...y,j])}return[w,E]}return[w,r(p,[...y,0])]}function a(u,d){let p=u.length?u[u.length-1]:"",y=u.some(j=>j==="*"),w=u.join(".");return`${y?`[data-hcms-field="${re(p)}"]`:`[data-hcms-path="${re(w)}"]`} > .hcms-array-items > ${d}`}function i(u,d){if(!t)return null;let p=U(t,u);if(!p)return null;let y=p.content||p;if(d){let w=y.querySelector(`[data-hcms-field="${re(d)}"]`);if(w)return w}return y.querySelector("[data-hcms-field]")}function c(u,d){if(!t)return null;let p=u.map(E=>typeof E=="number"?"*":E).join("."),w=[u.join("."),p];for(let E=u.length-1;E>=0;E--){let j=u.slice(0,E).map(b=>typeof b=="number"?"*":b);j.push("*"),w.push(j.join("."))}for(let E of w){if(!E)continue;let j=U(t,E);if(!j||!ye(j))continue;let b=j.content||j,k=b.querySelector(`[data-hcms-field="${re(d)}"]`)||b.querySelector("[data-hcms-field]");if(k)return k}return null}}function Oe({pageRules:e,formRules:t,data:r,doc:n}){let o=n.createDocumentFragment(),s=ot(e,[],r,n);return s&&o.appendChild(s),o}function Vt({shape:e,itemShape:t,pathArr:r,data:n,doc:o}){if(e==="object-array-item")return Kt(t,r,n,o);if(e==="scalar-array-item")return zt(r,n,o);throw new Error(`hypercms: buildItem called with unknown shape "${e}"`)}function ot(e,t,r,n){let o=te(e);return o==="scalar"?mn(t,r,n):o==="object"?pn(e,t,r,n):o==="object-array"?yn(e,t,r,n):o==="scalar-array"?gn(e,t,r,n):null}function mn(e,t,r){let n=je(e,"@scalar",r);if(!n)throw new Error(`hypercms: missing template for scalar at "${e.join(".")}"`);let o=ne(n,r);return oe(o,e),bn(o,W(e)),Ie(o,W(e)),Ne(o,W(e)),Xt(o,t),o}function pn(e,t,r,n){let o=je(t,"@object",n);if(!o)throw new Error(`hypercms: missing template for object at "${t.join(".")}"`);let s=ne(o,n);if(oe(s,t),Ie(s,W(t)),Ne(s,W(t)),ye(o))return er(s,e,t),Qt(s,e,r),s;let a=Le(s,".hcms-object-fields",o,t);for(let[i,c]of Object.entries(e)){let u=r==null?null:r[i],d=ot(c,[...t,i],u,n);d&&a.appendChild(d)}return s}function yn(e,t,r,n){let o=je(t,"@object-array",n);if(!o)throw new Error(`hypercms: missing template for object-array at "${t.join(".")}"`);let s=ne(o,n);oe(s,t),Ie(s,W(t)),Ne(s,W(t)),Yt(s,o),Jt(s,o,t);let a=Le(s,".hcms-array-items",o,t),[,i]=e;return(Array.isArray(r)?r:[]).forEach((u,d)=>{let p=Kt(i,[...t,d],u,n);p&&a.appendChild(p)}),Zt(s),s}function Kt(e,t,r,n){let o=Gt(t,"object-array-item",n);if(!o)throw new Error(`hypercms: missing item template for "${t.join(".")}"`);let s=ne(o,n);if(s.setAttribute("data-hcms-card",""),s.classList.contains("hcms-card")||s.classList.add("hcms-card"),oe(s,t),ye(o))return e&&typeof e=="object"&&!Array.isArray(e)&&(er(s,e,t),Qt(s,e,r)),s;let a=Le(s,".hcms-card-fields",o,t);if(e&&typeof e=="object"&&!Array.isArray(e))for(let[i,c]of Object.entries(e)){let u=r==null?null:r[i],d=ot(c,[...t,i],u,n);d&&a.appendChild(d)}return s}function gn(e,t,r,n){let o=je(t,"@scalar-array",n);if(!o)throw new Error(`hypercms: missing template for scalar-array at "${t.join(".")}"`);let s=ne(o,n);oe(s,t),Ie(s,W(t)),Ne(s,W(t)),Yt(s,o),Jt(s,o,t);let a=Le(s,".hcms-array-items",o,t);return(Array.isArray(r)?r:[]).forEach((c,u)=>{let d=zt([...t,u],c,n);d&&a.appendChild(d)}),Zt(s),s}function zt(e,t,r){let n=Gt(e,"scalar-array-item",r);if(!n)throw new Error(`hypercms: missing item template for "${e.join(".")}"`);let o=ne(n,r);return o.setAttribute("data-hcms-array-item",""),o.classList.contains("hcms-array-item")||o.classList.add("hcms-array-item"),oe(o,e),Xt(o,t),o}function je(e,t,r){let n=e.join("."),o=e.map(s=>typeof s=="number"?"*":s).join(".");return n&&U(r,n)||o&&o!==n&&U(r,o)||U(r,t)}function Gt(e,t,r){let n=e.map(o=>typeof o=="number"?"*":o).join(".");return U(r,n)||U(r,"@"+t)}function ne(e,t){let r=e.content||e,n=t.createElement("div");return n.appendChild(r.cloneNode(!0)),n.firstElementChild||n}function oe(e,t){e.setAttribute("data-hcms-path",t.join("."))}function bn(e,t){let r=t==null?"":String(t);if(e.matches&&e.matches("[data-hcms-field]")){e.getAttribute("data-hcms-field")||e.setAttribute("data-hcms-field",r);return}(e.querySelectorAll?e.querySelectorAll("[data-hcms-field]"):[]).forEach(o=>{o.getAttribute("data-hcms-field")||o.setAttribute("data-hcms-field",r)})}function Ie(e,t){t==null||t===""||!e.setAttribute||e.hasAttribute?.("data-hcms-field")||e.setAttribute("data-hcms-field",String(t))}function Ne(e,t){if(t==null||t==="")return;(e.querySelectorAll?e.querySelectorAll("[data-hcms-label]"):[]).forEach(n=>{(n.textContent||"").trim()===""&&(n.textContent=qt(String(t)))})}function Yt(e,t){["data-hcms-no-add","data-hcms-no-remove","data-hcms-no-reorder"].forEach(r=>{t.hasAttribute(r)&&e.setAttribute(r,"")}),["data-hcms-min-items","data-hcms-max-items"].forEach(r=>{t.hasAttribute(r)&&e.setAttribute(r,t.getAttribute(r))})}function Zt(e){let t=e.querySelector?e.querySelector(".hcms-array-items"):null;if(!t)return;let r=Array.from(t.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]")),n=r.length,o=Wt(e,"data-hcms-max-items"),s=Wt(e,"data-hcms-min-items"),a=e.hasAttribute("data-hcms-no-add"),i=e.hasAttribute("data-hcms-no-remove"),c=e.hasAttribute("data-hcms-no-reorder"),u=e.querySelector('[data-hcms-action="add"]');u&&(u.hidden=a||o!=null&&n>=o),r.forEach((d,p)=>{let y=d.querySelector('[data-hcms-action="remove"]');y&&(y.hidden=i||s!=null&&n<=s);let w=d.querySelector('[data-hcms-action="move-up"]');w&&(w.hidden=c||p===0);let E=d.querySelector('[data-hcms-action="move-down"]');E&&(E.hidden=c||p===n-1)})}function Wt(e,t){if(!e||!e.hasAttribute(t))return null;let r=parseInt(e.getAttribute(t),10);return Number.isFinite(r)?r:null}function Jt(e,t,r){if(e.hasAttribute("data-hcms-no-reorder")||t.hasAttribute("data-hcms-no-reorder"))return;let n=e.querySelector(".hcms-array-items");if(!n)return;let o="hcms-"+r.join(".");n.setAttribute("sortable",o),n.setAttribute("onsorted","hypercmsCommit && hypercmsCommit()")}function W(e){return e.length?e[e.length-1]:null}function Xt(e,t){let r=Sn(e);if(r.length!==0)for(let n of r)tr(n,t)}function Sn(e){if(!e)return[];let t=[];return e.matches?.("[data-hcms-field]")&&An(e)&&t.push(e),(e.querySelectorAll?e.querySelectorAll("input[data-hcms-field], textarea[data-hcms-field], select[data-hcms-field], img[data-hcms-field], a[data-hcms-field], [contenteditable][data-hcms-field]"):[]).forEach(n=>t.push(n)),t}function An(e){let t=(e.tagName||"").toUpperCase();return!!(t==="INPUT"||t==="TEXTAREA"||t==="SELECT"||t==="IMG"||t==="A"||e.hasAttribute?.("contenteditable"))}function Qt(e,t,r){(e.querySelectorAll?e.querySelectorAll("[data-hcms-field]"):[]).forEach(o=>{let s=o.getAttribute("data-hcms-field");if(!s)return;if(!t||typeof t!="object"||!(s in t)){console.warn(`[hypercms] inline template field "${s}" is not in the rule shape; ignoring`);return}let a=r==null?null:r[s];tr(o,a)})}function er(e,t,r){if(!e.querySelectorAll)return;e.querySelectorAll("[data-hcms-field]").forEach(o=>{let s=o.getAttribute("data-hcms-field");if(!s||t&&typeof t=="object"&&!(s in t))return;let a=[...r,s].join(".");o.setAttribute("data-hcms-path",a)})}function Le(e,t,r,n){if(!e.querySelector)return e;let o=e.querySelector(t);if(o)return o;let s=r?.getAttribute?.("data-hcms-tpl")||n.join(".");throw new Error(`hypercms: template "${s}" is in slotted mode but has no ${t} element`)}function tr(e,t){let r=Ce(e),n=(e.tagName||"").toUpperCase(),o=(e.getAttribute("type")||"").toLowerCase();if(n==="INPUT"&&o==="radio"){e.checked=e.value!=null&&String(e.value)===String(t??"");return}if(r==="checked"){e.checked=t===!0||t==="true";return}if(r){e[r]=t==null?"":String(t);return}e.textContent=t==null?"":String(t)}var rr={skip:"[data-hcms-shell]",templateAttr:"cms-template"};function nr(e,t,r,n={}){let{observerHandle:o,shellRoot:s,structural:a,structuralPath:i}=n;o?.pause?.();try{if(!a)try{return q.apply(e,t,r,rr),{ok:!0}}catch(p){return{ok:!1,error:p}}let c=vn(e,t,i),u=c?En(c):null,d=c?null:Mn(e,s);try{return q.apply(e,t,r,rr),{ok:!0}}catch(p){return u?wn(c,u):d&&Tn(e,s,d),{ok:!1,error:p}}}finally{o?.resume?.()}}function vn(e,t,r){if(!r||!e)return null;let n=V(r),o=[],s=t;for(let a of n){if(typeof s=="string"||s==null||Array.isArray(s))break;if(typeof s=="object"&&a in s){if(o.push(a),s=s[a],Array.isArray(s)||typeof s=="string"&&s.endsWith("[]"))break}else return null}return!Array.isArray(s)&&!(typeof s=="string"&&s.endsWith("[]"))?null:xn(e,t,o)}function xn(e,t,r){if(r.length===0)return null;let n=e,o=t;for(let s=0;s<r.length;s++){let a=r[s];if(!o||typeof o!="object"||Array.isArray(o))return null;let i=o[a];if(i==null)return null;if(s===r.length-1){if(Array.isArray(i)){let[c]=i;return n.querySelector?.(c)?.parentElement||null}if(typeof i=="string"&&i.endsWith("[]")){let c=i.slice(0,-2);return n.querySelector?.(c)?.parentElement||null}return null}o=i}return null}function En(e){let t=[];for(let r of Array.from(e.childNodes))t.push(r.cloneNode(!0));return t}function wn(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);for(let r of t)e.appendChild(r)}function Mn(e,t){let r=[];for(let n of Array.from(e.childNodes))n===t||t&&n.contains?.(t)||r.push(n.cloneNode(!0));return r}function Tn(e,t,r){for(let o of Array.from(e.childNodes))o===t||t&&o.contains?.(t)||e.removeChild(o);let n=Rn(e,t);for(let o of r)e.insertBefore(o,n||null)}function Rn(e,t){if(!t)return null;for(let r of Array.from(e.childNodes))if(r===t||r.contains?.(t))return r;return null}var st=new WeakSet;function se(e,t){let r=typeof window<"u"&&window.hyperclay&&window.hyperclay.undo||null;if(!r)return t();r.pause();try{let n=t();return n&&n.ok?r.commitCaptured(e):r.discardCaptured(),n}finally{r.resume()}}function it(e){let t=typeof window<"u"&&window.hyperclay&&window.hyperclay.undo||null;if(!t)return e();t.pause();try{return e()}finally{t.discardCaptured(),t.resume()}}function ir(e){let{formRoot:t}=e;if(!t||st.has(t))return;st.add(t);let r=a=>{let i=a.target;!i||!i.closest||i.closest("[data-hcms-form-root]")&&i.matches("input, textarea, select")&&(!i.closest("[data-hcms-field]")&&!i.hasAttribute?.("data-hcms-field")||or(i,e))},n=a=>{let i=a.target;!i||!i.closest||i.closest("[data-hcms-form-root]")&&i.matches('input[type="checkbox"], input[type="radio"], select')&&or(i,e)},o=a=>{let i=a.target;if(!i||!i.closest)return;let c=i.closest("[data-hcms-action]");if(!c)return;let u=c.getAttribute("data-hcms-action");if(u==="add"||u==="remove"||u==="move-up"||u==="move-down"){if(!c.closest("[data-hcms-form-root]"))return}else if((u==="close"||u==="save")&&!c.closest("[data-hcms-shell]"))return;if(u==="add"){let d=c.closest("[data-hcms-path]");if(!d)return;let p=d.getAttribute("data-hcms-path");at(p,e)}else if(u==="remove"){let d=c.closest("[data-hcms-card], [data-hcms-array-item]");if(!d)return;ct(d,e)}else if(u==="move-up"||u==="move-down"){let d=c.closest("[data-hcms-card], [data-hcms-array-item]");if(!d)return;Cn(d,u==="move-up"?-1:1,e)}else u==="close"?e.onCloseRequested?.():u==="save"&&kn(e)},s=t.ownerDocument;s.addEventListener("input",r,!0),s.addEventListener("change",n,!0),s.addEventListener("click",o,!0),e.detachEvents=()=>{s.removeEventListener("input",r,!0),s.removeEventListener("change",n,!0),s.removeEventListener("click",o,!0),st.delete(t)}}function or(e,t){let n=(e.closest("[data-hcms-field]")||e).closest("[data-hcms-path]")?.getAttribute("data-hcms-path")||"";K(_(t),{path:n,structural:!1},t)}function at(e,t){let{formRoot:r,pageRules:n}=t,o=r.querySelector(`[data-hcms-path="${$n(e)}"]`);if(!o)throw new Error(`hypercms: no element at path "${e}"`);let s=o.querySelector(".hcms-array-items");if(!s)throw new Error(`hypercms: array container missing .hcms-array-items at "${e}"`);let a=V(e),i=Nn(n,a),c=Array.isArray(i),u=typeof i=="string"&&i.endsWith("[]");if(!c&&!u)throw new Error(`hypercms: path "${e}" is not an array`);let d=$e(o,"data-hcms-max-items"),p=s.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]");if(o.hasAttribute("data-hcms-no-add")||d!=null&&p.length>=d)return;let y=p.length,w=c?i[1]:i.replace(/\[\]$/,""),E=pe(c?w:"string"),j=Vt({shape:c?"object-array-item":"scalar-array-item",itemShape:w,pathArr:[...a,y],data:E,doc:t.doc});return s.appendChild(j),ut(o),se(`Add ${e}`,()=>K(_(t),{path:e,structural:!0},t))}function Cn(e,t,r){let n=e.closest('[data-hcms-shape="object-array"], [data-hcms-shape="scalar-array"]');if(!n||n.hasAttribute("data-hcms-no-reorder"))return;let o=n.querySelector(".hcms-array-items");if(!o)return;let s=Array.from(o.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]")),a=s.indexOf(e);if(a<0)return;let i=a+t;if(i<0||i>=s.length)return;let c=e.querySelector(`[data-hcms-action="${t<0?"move-up":"move-down"}"]`);return t<0?o.insertBefore(e,s[i]):o.insertBefore(e,s[i].nextSibling),ft(o),ut(n),c&&typeof c.focus=="function"&&e.querySelector(`[data-hcms-action="${t<0?"move-up":"move-down"}"]`)?.focus?.(),se(`Reorder ${n.getAttribute("data-hcms-path")||""}`,()=>K(_(r),{path:n.getAttribute("data-hcms-path")||"",structural:!0},r))}function ct(e,t){let r=e.getAttribute("data-hcms-path")||"",n=e.parentElement,o=e.closest('[data-hcms-shape="object-array"], [data-hcms-shape="scalar-array"]');if(!o?.hasAttribute("data-hcms-no-remove")){if(o){let s=$e(o,"data-hcms-min-items"),a=o.querySelector(".hcms-array-items"),i=a?a.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]").length:0;if(s!=null&&i<=s)return}return e.remove(),n&&ft(n),o&&ut(o),se(`Remove ${r}`,()=>K(_(t),{path:r,structural:!0},t))}}function kn(e){let t=_(e);e.dispatch?.("hcms:save",{data:t}),e.onSave?.(t)}function K(e,t,r){let n=ht(e);if(n===r.lastFingerprint)return{ok:!0,skipped:!0};let o=nr(r.pageRoot,r.pageRules,e,{observerHandle:r.observerHandle,shellRoot:r.shellRoot,structural:!!t.structural,structuralPath:t.path||null});return o.ok?(r.lastFingerprint=n,r.lastData=e,sr(r,null),r.dispatch?.("hcms:change",{data:e,path:t.path,structural:!!t.structural}),r.onChange?.(e,t)):(sr(r,In(o.error,t.path)),r.dispatch?.("hcms:error",{error:o.error,attemptedData:e}),r.onError?.(o.error)),o}function _(e){let t=q.extract(e.formRoot,e.formRules);return Z(t,e.formRules)}function Z(e,t){if(t==null||e==null)return e;if(typeof t=="string")return t.endsWith("@checked")?e===!0||e==="true":e;if(Array.isArray(t)){if(!Array.isArray(e))return e;let[,r]=t;return e.map(n=>Z(n,r))}if(typeof t=="object"){if(typeof e!="object"||Array.isArray(e))return e;let r={};for(let[n,o]of Object.entries(t))r[n]=Z(e[n],o);return r}return e}function sr(e,t){e.lastErrors=t&&t.length?t:null,lt(e)}function lt(e){if(On(e),e.errorEl&&(e.errorEl.textContent="",e.errorEl.hidden=!0),!e.lastErrors)return;let t=[];for(let{message:r,path:n}of e.lastErrors){if(n!=null&&n!==""){let o=jn(e.formRoot,n);if(o){o.textContent=o.textContent?`${o.textContent}
53
+ ${r}`:r,o.hidden=!1;continue}}t.push(r)}t.length&&e.errorEl&&(e.errorEl.textContent=t.join(`
54
+ `),e.errorEl.hidden=!1)}function On(e){if(e.formRoot)for(let t of e.formRoot.querySelectorAll(".hcms-error"))t.textContent="",t.hidden=!0}function jn(e,t){if(!e)return null;let r=t.split(".");for(;r.length>0;){let n=r.join("."),o=typeof CSS<"u"&&CSS.escape?CSS.escape(n):n.replace(/[^a-zA-Z0-9_\-.*]/g,a=>"\\"+a),s=e.querySelector(`[data-hcms-path="${o}"]`);if(s){for(let a of s.children)if(a.classList&&a.classList.contains("hcms-error"))return a}r.pop()}return null}function In(e,t){return e?e.name==="EmptyListInsert"?[{message:"Add a seed item in HTML first.",path:t}]:e.name==="ShapeMismatch"&&Array.isArray(e.mismatches)&&e.mismatches.length?e.mismatches.map(r=>({message:`Shape mismatch: expected ${r.expected}, got ${r.got}`,path:r.path})):[{message:e.message||String(e),path:t}]:[{message:"unknown error",path:t}]}function Nn(e,t){let r=e;for(let n of t){if(r==null||typeof r=="string")return;if(Array.isArray(r)){if(typeof n!="number"&&n!=="*")return;r=r[1];continue}if(typeof r=="object"){if(typeof n=="number"||!(n in r))return;r=r[n];continue}return}return r}function $e(e,t){if(!e||!e.hasAttribute(t))return null;let r=parseInt(e.getAttribute(t),10);return Number.isFinite(r)?r:null}function ut(e){if(!e)return;let t=e.querySelector(".hcms-array-items");if(!t)return;let r=Array.from(t.querySelectorAll(":scope > [data-hcms-card], :scope > [data-hcms-array-item]")),n=r.length,o=$e(e,"data-hcms-max-items"),s=$e(e,"data-hcms-min-items"),a=e.hasAttribute("data-hcms-no-add"),i=e.hasAttribute("data-hcms-no-remove"),c=e.hasAttribute("data-hcms-no-reorder"),u=e.querySelector(':scope > .hcms-add, :scope > * > .hcms-add, :scope > [data-hcms-action="add"]');u&&(u.hidden=a||o!=null&&n>=o),r.forEach((d,p)=>{let y=d.querySelector('[data-hcms-action="remove"]');y&&(y.hidden=i||s!=null&&n<=s);let w=d.querySelector('[data-hcms-action="move-up"]');w&&(w.hidden=c||p===0);let E=d.querySelector('[data-hcms-action="move-down"]');E&&(E.hidden=c||p===n-1)})}function dt(e){!e||!e.querySelectorAll||e.querySelectorAll(".hcms-array-items").forEach(t=>ft(t))}function ft(e){let t=0;for(let r of e.children){if(!r.matches?.("[data-hcms-card], [data-hcms-array-item]"))continue;let n=r.getAttribute("data-hcms-path");if(!n)continue;let o=n.split(".");o[o.length-1]=String(t);let s=o.join(".");s!==n&&Ln(r,n,s),t++}}function Ln(e,t,r){let n=e.querySelectorAll("[data-hcms-path]");e.setAttribute("data-hcms-path",r);for(let o of n){let s=o.getAttribute("data-hcms-path");s===t?o.setAttribute("data-hcms-path",r):s&&s.startsWith(t+".")&&o.setAttribute("data-hcms-path",r+s.slice(t.length))}}function ht(e){return JSON.stringify(e,(t,r)=>{if(r&&typeof r=="object"&&!Array.isArray(r)){let n=Object.create(null);for(let o of Object.keys(r).sort())n[o]=r[o];return n}return r})}function $n(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}var Dn={},mt="hcms-shell-styles",Hn="hcms-bundled-styles-installed",Fn='a[href], area[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])',ge=new WeakSet,pt="";function ar(e){pt=e}var qn=0;function cr({mountTo:e,side:t="right",overlay:r=!1,showSaveButton:n=!1,doc:o}){_n(o);let s=`hcms-shell-title-${++qn}`,a=o.createElement("div");a.setAttribute("data-hcms-shell",""),a.setAttribute("save-remove",""),a.setAttribute("save-ignore",""),a.setAttribute("tabindex","-1"),a.setAttribute("role","dialog"),a.setAttribute("aria-modal","true"),a.setAttribute("aria-labelledby",s),a.className="hcms-shell hcms-side-"+t+(r?" hcms-overlay":""),a.innerHTML=`
55
55
  <header class="hcms-shell-header">
56
- <h2 class="hcms-shell-title" id="${o}">Edit</h2>
56
+ <h2 class="hcms-shell-title" id="${s}">Edit</h2>
57
57
  <button type="button" class="hcms-shell-close" data-hcms-action="close" aria-label="Close">\xD7</button>
58
58
  </header>
59
59
  <div class="hcms-shell-error" role="alert" hidden></div>
@@ -61,7 +61,7 @@ ${r}`:r,s.hidden=!1;continue}}t.push(r)}t.length&&e.errorEl&&(e.errorEl.textCont
61
61
  <footer class="hcms-shell-footer"${n?"":" hidden"}>
62
62
  <button type="button" class="hcms-shell-save" data-hcms-action="save">Save</button>
63
63
  </footer>
64
- `,(e||s.body).appendChild(u);let f=s.body;f.classList.add("hcms-open"),r&&f.classList.add("hcms-overlay"),t==="left"&&f.classList.add("hcms-side-left");let y=os(u,s);return{root:u,formRoot:u.querySelector("[data-hcms-form-root]"),errorEl:u.querySelector(".hcms-shell-error"),saveButton:u.querySelector(".hcms-shell-save"),destroy(){y.detach(),u.remove(),f.classList.remove("hcms-open","hcms-overlay","hcms-side-left")}}}function ss(e){if(e&&!Me.has(e)){if(e[ts]){Me.add(e);return}if(e.getElementById(mt)||e.querySelector("style[data-hcms-bundled-styles]")){Me.add(e);return}if(pt){let t=e.createElement("style");t.id=mt,t.setAttribute("save-remove",""),t.textContent=pt,(e.head||e.documentElement).appendChild(t),Me.add(e);return}try{let t=new URL("./styles.css",is.url).href,r=e.createElement("link");r.rel="stylesheet",r.id=mt,r.setAttribute("save-remove",""),r.href=t,(e.head||e.documentElement).appendChild(r),Me.add(e)}catch{}}}function os(e,t){function r(n){if(n.key!=="Tab"||!e.contains(t.activeElement))return;let s=Array.from(e.querySelectorAll(rs));if(s.length===0)return;let o=s[0],u=s[s.length-1];n.shiftKey&&t.activeElement===o?(n.preventDefault(),u.focus()):!n.shiftKey&&t.activeElement===u&&(n.preventDefault(),o.focus())}return t.addEventListener("keydown",r),{detach:()=>t.removeEventListener("keydown",r)}}var as={skip:"[data-hcms-shell]",templateAttr:"cms-template"};function yt(e){let t=F.findRulesIn(e.pageRoot)||e.doc.documentElement&&F.findRulesIn(e.doc.documentElement)||F.findRulesIn(e.doc);t&&(e.pageRules=t.rules,e.rulesTagNode=t.tagNode),Le(e.doc),e.formRules=je(e.pageRules,e.doc);let r=re(F.extract(e.pageRoot,e.pageRules,as),e.pageRules),n=He({pageRules:e.pageRules,formRules:e.formRules,data:r,doc:e.doc});Ne(e.formRoot,n),lt(e),e.updateFingerprint&&e.updateFingerprint()}function hr({debounce:e=100,onRefresh:t}){let r=typeof window<"u"&&window.hyperclay&&window.hyperclay.Mutation||null;if(!r||typeof r.onAnyChange!="function")throw new Error("hypercms: window.hyperclay.Mutation is required. Load hyperclayjs (or just the mutation utility) before initializing hypercms.");let n=0,s=r.onAnyChange({debounce:e},()=>{n>0||t()});return{unsubscribe:typeof s=="function"?s:()=>{},pause(){n++},resume(){n=Math.max(0,n-1)}}}var cs="[hypercms]";function mr(e,t){if(!e||!e.querySelectorAll||!t)return;let r=ls(t);e.querySelectorAll("template[data-hcms-tpl]").forEach(s=>{let o=s.getAttribute("data-hcms-tpl");o&&(o.startsWith("@")||r.has(o)||console.warn(`${cs} template "${o}" doesn't match any rule path; ignored`))})}function ls(e){let t=new Set;return r([],e),t;function r(n,s){let o=n.join("."),u=n.map(f=>typeof f=="number"?"*":f).join(".");o&&t.add(o),u&&t.add(u);let l=oe(s);if(l==="object")for(let[f,y]of Object.entries(s))r([...n,f],y);else if(l==="object-array"||l==="scalar-array"){let f=[...n,"*"],y=f.map(v=>typeof v=="number"?"*":v).join(".");if(t.add(y),l==="object-array"){let v=s[1];if(v&&typeof v=="object"&&!Array.isArray(v))for(let[b,S]of Object.entries(v))r([...f,b],S)}}}}function pr(e){dr(e)}var $={isOpen:!1,ctx:null,shell:null,opts:null};function us(e={}){if($.isOpen){console.warn("cms.open() called while already open; ignoring");return}let t=e.pageRoot||(typeof document<"u"?document.body:null);if(!t)throw new Error("hypercms: no pageRoot available");let r=t.ownerDocument||(typeof document<"u"?document:null);if(!r)throw new Error("hypercms: no document available");let n=F.findRulesIn(t)||F.findRulesIn(r.documentElement)||F.findRulesIn(r);if(!n)throw new Error("hypercms: no rules tag found in page");let s=n.rules,o=n.tagNode;Le(r),mr(r,s);let u=je(s,r),l=re(F.extract(t,s,{skip:"[data-hcms-shell]",templateAttr:"cms-template"}),s),f=fr({mountTo:e.mountTo||r.body,side:e.side||"right",overlay:!!e.overlay,showSaveButton:!!e.showSaveButton,doc:r}),y={doc:r,pageRoot:t,pageRules:s,formRules:u,rulesTagNode:o,formRoot:f.formRoot,shellRoot:f.root,errorEl:f.errorEl,lastFingerprint:null,lastData:null,observerHandle:null,onChange:e.onChange,onError:e.onError,onSave:e.onSave,previouslyFocused:r.activeElement,dispatch(b,S){let R=r.defaultView&&r.defaultView.CustomEvent||(typeof CustomEvent<"u"?CustomEvent:null);if(!R)return;let I=new R(b,{bubbles:!0,cancelable:b==="hcms:change"||b==="hcms:save",detail:S});f.root.dispatchEvent(I)},onCloseRequested(){yr()}};y.updateFingerprint=()=>{y.lastFingerprint=ht(B(y))};let v=He({pageRules:s,formRules:u,data:l,doc:r});f.formRoot.appendChild(v),ur(y),y.updateFingerprint(),y.observerHandle=hr({onRefresh:()=>yt(y)}),gt.ctx=y,fs(r),ds(f.root),$.isOpen=!0,$.ctx=y,$.shell=f,$.opts=e,y.dispatch("hcms:open",{pageRoot:t})}function ds(e){let r=e.querySelector('input:not([disabled]):not([type="hidden"]), textarea:not([disabled]), select:not([disabled]), button:not([disabled]), [tabindex]:not([tabindex="-1"])');r&&typeof r.focus=="function"&&r.focus()}var gt={ctx:null};function fs(e){let t=e.defaultView||(typeof globalThis<"u"?globalThis:null);if(!t)return;let r=function(){let s=gt.ctx;s&&(dt(s.formRoot),Z(B(s),{path:"",structural:!0},s))};typeof t.hypercmsCommit!="function"&&(t.hypercmsCommit=r),typeof globalThis<"u"&&typeof globalThis.hypercmsCommit!="function"&&(globalThis.hypercmsCommit=r)}function yr(){if(!$.isOpen)return;let{ctx:e,shell:t}=$,r=e.previouslyFocused;if(e.dispatch("hcms:close",null),e.observerHandle?.unsubscribe?.(),e.detachEvents?.(),t.destroy(),$.isOpen=!1,$.ctx=null,$.shell=null,$.opts=null,gt.ctx=null,r&&typeof r.focus=="function")try{r.focus()}catch{}}function gr(){$.isOpen&&yt($.ctx)}var hs={getData(){return $.isOpen?B($.ctx):null},setValue(e,t){if(!$.isOpen)throw new Error("hypercms: cms is not open");let r=$.ctx,n=Y(e),s=Ae(r.pageRules,n);if(s===void 0)throw new Error(`hypercms: no rule at path "${e}"`);if(typeof s!="string"||s.endsWith("[]"))throw new Error(`hypercms: setValue requires a leaf scalar path; "${e}" is not a leaf`);let o=ms(r.formRoot,e);if(!o)throw new Error(`hypercms: no field element at path "${e}"`);ps(o,t,r.formRoot,e),Z(B(r),{path:e,structural:!1},r)},addItem(e){if(!$.isOpen)throw new Error("hypercms: cms is not open");at(e,$.ctx)},removeItem(e){if(!$.isOpen)throw new Error("hypercms: cms is not open");let t=$.ctx,r=Y(e);if(typeof r[r.length-1]!="number")throw new Error(`hypercms: removeItem requires an item path; "${e}" is not an array index`);let s=Ae(t.pageRules,r.slice(0,-1));if(!(Array.isArray(s)||typeof s=="string"&&s.endsWith("[]")))throw new Error(`hypercms: removeItem requires an item path; parent of "${e}" is not an array`);let u=t.formRoot.querySelector(`[data-hcms-path="${St(e)}"]`);if(!u)throw new Error(`hypercms: no element at path "${e}"`);ct(u,t)},refresh:gr,_commit(){if(!$.isOpen)return;let e=$.ctx;dt(e.formRoot),Z(B(e),{path:"",structural:!0},e)}};function ms(e,t){let r=St(t),n=`[data-hcms-path="${r}"] input[data-hcms-field], [data-hcms-path="${r}"] textarea[data-hcms-field], [data-hcms-path="${r}"] select[data-hcms-field], [data-hcms-path="${r}"] img[data-hcms-field], [data-hcms-path="${r}"] a[data-hcms-field], [data-hcms-path="${r}"] [contenteditable][data-hcms-field], input[data-hcms-path="${r}"][data-hcms-field], textarea[data-hcms-path="${r}"][data-hcms-field], select[data-hcms-path="${r}"][data-hcms-field], img[data-hcms-path="${r}"][data-hcms-field], a[data-hcms-path="${r}"][data-hcms-field], [contenteditable][data-hcms-path="${r}"][data-hcms-field]`;return e.querySelector(n)}function ps(e,t,r,n){let s=(e.tagName||"").toUpperCase(),o=(e.getAttribute("type")||"").toLowerCase();if(s==="INPUT"&&o==="checkbox"){e.checked=t===!0||t==="true";return}if(s==="INPUT"&&o==="radio"){let u=St(n),l=r.querySelectorAll(`[data-hcms-path="${u}"][data-hcms-field][type="radio"], [data-hcms-path="${u}"] [data-hcms-field][type="radio"]`);l.length?l.forEach(f=>{f.checked=String(f.value)===String(t??"")}):e.checked=String(e.value)===String(t??"");return}if(s==="IMG"){e.src=t==null?"":String(t);return}if(s==="A"){e.href=t==null?"":String(t);return}if("value"in e){e.value=t==null?"":String(t);return}e.textContent=t==null?"":String(t)}var bt={open:us,close:yr,refresh:gr,api:hs,get isOpen(){return $.isOpen},path:rt,scaffold:ve,morphForm:Ne};function St(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}var br=`.hcms-shell {
64
+ `,(e||o.body).appendChild(a);let c=o.body;c.classList.add("hcms-open"),r&&c.classList.add("hcms-overlay"),t==="left"&&c.classList.add("hcms-side-left");let u=Pn(a,o);return{root:a,formRoot:a.querySelector("[data-hcms-form-root]"),errorEl:a.querySelector(".hcms-shell-error"),saveButton:a.querySelector(".hcms-shell-save"),destroy(){u.detach(),a.remove(),c.classList.remove("hcms-open","hcms-overlay","hcms-side-left")}}}function _n(e){if(e&&!ge.has(e)){if(e[Hn]){ge.add(e);return}if(e.getElementById(mt)||e.querySelector("style[data-hcms-bundled-styles]")){ge.add(e);return}if(pt){let t=e.createElement("style");t.id=mt,t.setAttribute("save-remove",""),t.textContent=pt,(e.head||e.documentElement).appendChild(t),ge.add(e);return}try{let t=new URL("./styles.css",Dn.url).href,r=e.createElement("link");r.rel="stylesheet",r.id=mt,r.setAttribute("save-remove",""),r.href=t,(e.head||e.documentElement).appendChild(r),ge.add(e)}catch{}}}function Pn(e,t){function r(n){if(n.key!=="Tab"||!e.contains(t.activeElement))return;let o=Array.from(e.querySelectorAll(Fn));if(o.length===0)return;let s=o[0],a=o[o.length-1];n.shiftKey&&t.activeElement===s?(n.preventDefault(),a.focus()):!n.shiftKey&&t.activeElement===a&&(n.preventDefault(),s.focus())}return t.addEventListener("keydown",r),{detach:()=>t.removeEventListener("keydown",r)}}var Un={skip:"[data-hcms-shell]",templateAttr:"cms-template"};function yt(e){let t=q.findRules(e.doc,e.rulesSource||"cms");t&&(e.pageRules=t.rules,e.rulesTagNode=t.tagNode),Re(e.doc),e.formRules=ke(e.pageRules,e.doc);let r=Z(q.extract(e.pageRoot,e.pageRules,Un),e.pageRules),n=Oe({pageRules:e.pageRules,formRules:e.formRules,data:r,doc:e.doc});Te(e.formRoot,n),lt(e),e.updateFingerprint&&e.updateFingerprint()}function lr({debounce:e=100,onRefresh:t}){let r=typeof window<"u"&&window.hyperclay&&window.hyperclay.Mutation||null;if(!r||typeof r.onAnyChange!="function")throw new Error("hypercms: window.hyperclay.Mutation is required. Load hyperclayjs (or just the mutation utility) before initializing hypercms.");let n=0,o=r.onAnyChange({debounce:e},()=>{n>0||t()});return{unsubscribe:typeof o=="function"?o:()=>{},pause(){n++},resume(){n=Math.max(0,n-1)}}}var Bn="[hypercms]";function ur(e,t){if(!e||!e.querySelectorAll||!t)return;let r=Wn(t);e.querySelectorAll("template[data-hcms-tpl]").forEach(o=>{let s=o.getAttribute("data-hcms-tpl");s&&(s.startsWith("@")||r.has(s)||console.warn(`${Bn} template "${s}" doesn't match any rule path; ignored`))})}function Wn(e){let t=new Set;return r([],e),t;function r(n,o){let s=n.join("."),a=n.map(c=>typeof c=="number"?"*":c).join(".");s&&t.add(s),a&&t.add(a);let i=te(o);if(i==="object")for(let[c,u]of Object.entries(o))r([...n,c],u);else if(i==="object-array"||i==="scalar-array"){let c=[...n,"*"],u=c.map(d=>typeof d=="number"?"*":d).join(".");if(t.add(u),i==="object-array"){let d=o[1];if(d&&typeof d=="object"&&!Array.isArray(d))for(let[p,y]of Object.entries(d))r([...c,p],y)}}}}function dr(e){ar(e)}var I={isOpen:!1,ctx:null,shell:null,opts:null};function Vn(e={}){if(I.isOpen){console.warn("cms.open() called while already open; ignoring");return}let t=e.pageRoot||(typeof document<"u"?document.body:null);if(!t)throw new Error("hypercms: no pageRoot available");let r=t.ownerDocument||(typeof document<"u"?document:null);if(!r)throw new Error("hypercms: no document available");let n=e.rules!==void 0?e.rules:"cms",o=q.findRules(r,n);if(!o){let y=typeof n=="string"?`data-rules-name~="${n}"`:"the provided rules object";throw new Error(`hypercms: no rules found for ${y}`)}let s=o.rules,a=o.tagNode;Re(r),ur(r,s);let i=ke(s,r),c=Z(q.extract(t,s,{skip:"[data-hcms-shell]",templateAttr:"cms-template"}),s),u=it(()=>cr({mountTo:e.mountTo||r.body,side:e.side||"right",overlay:!!e.overlay,showSaveButton:!!e.showSaveButton,doc:r})),d={doc:r,pageRoot:t,pageRules:s,formRules:i,rulesTagNode:a,rulesSource:n,formRoot:u.formRoot,shellRoot:u.root,errorEl:u.errorEl,lastFingerprint:null,lastData:null,observerHandle:null,onChange:e.onChange,onError:e.onError,onSave:e.onSave,previouslyFocused:r.activeElement,dispatch(y,w){let E=r.defaultView&&r.defaultView.CustomEvent||(typeof CustomEvent<"u"?CustomEvent:null);if(!E)return;let j=new E(y,{bubbles:!0,cancelable:y==="hcms:change"||y==="hcms:save",detail:w});u.root.dispatchEvent(j)},onCloseRequested(){fr()}};d.updateFingerprint=()=>{d.lastFingerprint=ht(_(d))};let p=Oe({pageRules:s,formRules:i,data:c,doc:r});u.formRoot.appendChild(p),ir(d),d.updateFingerprint(),d.observerHandle=lr({onRefresh:()=>yt(d)}),gt.ctx=d,zn(r),Kn(u.root),I.isOpen=!0,I.ctx=d,I.shell=u,I.opts=e,d.dispatch("hcms:open",{pageRoot:t})}function Kn(e){let r=e.querySelector('input:not([disabled]):not([type="hidden"]), textarea:not([disabled]), select:not([disabled]), button:not([disabled]), [tabindex]:not([tabindex="-1"])');r&&typeof r.focus=="function"&&r.focus()}var gt={ctx:null};function zn(e){let t=e.defaultView||(typeof globalThis<"u"?globalThis:null);if(!t)return;let r=function(){let o=gt.ctx;if(o)return dt(o.formRoot),se("Reorder",()=>K(_(o),{path:"",structural:!0},o))};typeof t.hypercmsCommit!="function"&&(t.hypercmsCommit=r),typeof globalThis<"u"&&typeof globalThis.hypercmsCommit!="function"&&(globalThis.hypercmsCommit=r)}function fr(){if(!I.isOpen)return;let{ctx:e,shell:t}=I,r=e.previouslyFocused;if(e.dispatch("hcms:close",null),e.observerHandle?.unsubscribe?.(),e.detachEvents?.(),it(()=>t.destroy()),I.isOpen=!1,I.ctx=null,I.shell=null,I.opts=null,gt.ctx=null,r&&typeof r.focus=="function")try{r.focus()}catch{}}function hr(){I.isOpen&&yt(I.ctx)}var Gn={getData(){return I.isOpen?_(I.ctx):null},setValue(e,t){if(!I.isOpen)throw new Error("hypercms: cms is not open");let r=I.ctx,n=V(e),o=me(r.pageRules,n);if(o===void 0)throw new Error(`hypercms: no rule at path "${e}"`);if(typeof o!="string"||o.endsWith("[]"))throw new Error(`hypercms: setValue requires a leaf scalar path; "${e}" is not a leaf`);let s=Yn(r.formRoot,e);if(!s)throw new Error(`hypercms: no field element at path "${e}"`);Zn(s,t,r.formRoot,e),K(_(r),{path:e,structural:!1},r)},addItem(e){if(!I.isOpen)throw new Error("hypercms: cms is not open");at(e,I.ctx)},removeItem(e){if(!I.isOpen)throw new Error("hypercms: cms is not open");let t=I.ctx,r=V(e);if(typeof r[r.length-1]!="number")throw new Error(`hypercms: removeItem requires an item path; "${e}" is not an array index`);let o=me(t.pageRules,r.slice(0,-1));if(!(Array.isArray(o)||typeof o=="string"&&o.endsWith("[]")))throw new Error(`hypercms: removeItem requires an item path; parent of "${e}" is not an array`);let a=t.formRoot.querySelector(`[data-hcms-path="${St(e)}"]`);if(!a)throw new Error(`hypercms: no element at path "${e}"`);ct(a,t)},refresh:hr,_commit(){if(!I.isOpen)return;let e=I.ctx;return dt(e.formRoot),se("Update",()=>K(_(e),{path:"",structural:!0},e))}};function Yn(e,t){let r=St(t),n=`[data-hcms-path="${r}"] input[data-hcms-field], [data-hcms-path="${r}"] textarea[data-hcms-field], [data-hcms-path="${r}"] select[data-hcms-field], [data-hcms-path="${r}"] img[data-hcms-field], [data-hcms-path="${r}"] a[data-hcms-field], [data-hcms-path="${r}"] [contenteditable][data-hcms-field], input[data-hcms-path="${r}"][data-hcms-field], textarea[data-hcms-path="${r}"][data-hcms-field], select[data-hcms-path="${r}"][data-hcms-field], img[data-hcms-path="${r}"][data-hcms-field], a[data-hcms-path="${r}"][data-hcms-field], [contenteditable][data-hcms-path="${r}"][data-hcms-field]`;return e.querySelector(n)}function Zn(e,t,r,n){let o=(e.tagName||"").toUpperCase(),s=(e.getAttribute("type")||"").toLowerCase();if(o==="INPUT"&&s==="checkbox"){e.checked=t===!0||t==="true";return}if(o==="INPUT"&&s==="radio"){let a=St(n),i=r.querySelectorAll(`[data-hcms-path="${a}"][data-hcms-field][type="radio"], [data-hcms-path="${a}"] [data-hcms-field][type="radio"]`);i.length?i.forEach(c=>{c.checked=String(c.value)===String(t??"")}):e.checked=String(e.value)===String(t??"");return}if(o==="IMG"){e.src=t==null?"":String(t);return}if(o==="A"){e.href=t==null?"":String(t);return}if("value"in e){e.value=t==null?"":String(t);return}e.textContent=t==null?"":String(t)}var bt={open:Vn,close:fr,refresh:hr,api:Gn,get isOpen(){return I.isOpen},path:nt,scaffold:pe,morphForm:Te};function St(e){return typeof CSS<"u"&&CSS.escape?CSS.escape(e):String(e).replace(/[^a-zA-Z0-9_\-.*]/g,t=>"\\"+t)}var mr=`.hcms-shell {
65
65
  --hcms-primary: #2563eb;
66
66
  --hcms-bg: #F6F7F9;
67
67
  --hcms-text: #0f172a;
@@ -359,7 +359,7 @@ body.hcms-open.hcms-side-left:not(.hcms-overlay) {
359
359
  cursor: pointer;
360
360
  }
361
361
  .hcms-sr-only[hidden] { display: none; }
362
- `;pr(br);var bs=bt,Ss={cms:bt};return Mr(As);})();
362
+ `;dr(mr);var Qn=bt,eo={cms:bt};return Sr(to);})();
363
363
 
364
364
  // Auto-export to window unless suppressed by loader.
365
365
  // Per hypercms plan locked decision 3: flatten to hyperclay.hypercms.open(),