hyperclayjs 1.28.2 → 1.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/package.json +1 -1
- package/src/core/snapshot.js +9 -0
- package/src/hyperclay.js +6 -1
- package/src/ui/theModal.js +16 -5
- package/src/undo.js +23 -0
- package/src/utilities/mutation.js +22 -9
- package/src/vendor/hyper-undo.vendor.js +11 -0
- package/src/vendor/hypercms.vendor.js +8 -8
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 |
|
|
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)
|
|
@@ -87,7 +87,7 @@ import 'hyperclayjs/presets/standard.js';
|
|
|
87
87
|
| Module | Size | Description |
|
|
88
88
|
|--------|------|-------------|
|
|
89
89
|
| dialogs | 8.5KB | ask(), consent(), tell(), snippet() dialog functions |
|
|
90
|
-
| the-modal |
|
|
90
|
+
| the-modal | 23KB | Full modal window creation system - window.theModal |
|
|
91
91
|
| toast | 15.8KB | Success/error message notifications, toast(msg, msgType) |
|
|
92
92
|
|
|
93
93
|
### Utilities (Core utilities (often auto-included))
|
|
@@ -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 |
|
|
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
|
|
|
@@ -131,21 +131,21 @@ import 'hyperclayjs/presets/standard.js';
|
|
|
131
131
|
| Module | Size | Description |
|
|
132
132
|
|--------|------|-------------|
|
|
133
133
|
| hyper-morph | 18.7KB | DOM morphing with content-based element matching |
|
|
134
|
-
| hypercms |
|
|
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 (~
|
|
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 (~
|
|
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 (~
|
|
148
|
+
### Everything (~323.4KB)
|
|
149
149
|
All available features
|
|
150
150
|
|
|
151
151
|
Includes all available modules across all categories.
|
package/package.json
CHANGED
package/src/core/snapshot.js
CHANGED
|
@@ -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.
|
|
4
|
+
* HyperclayJS v1.29.0 - 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/ui/theModal.js
CHANGED
|
@@ -531,20 +531,31 @@ const modalCss = `<style class="micromodal-css">
|
|
|
531
531
|
}
|
|
532
532
|
|
|
533
533
|
.micromodal .snippet-link-box {
|
|
534
|
-
|
|
535
|
-
border: 2px solid #F6F7F9;
|
|
536
|
-
background-color: transparent;
|
|
537
|
-
font-size: 0.875rem;
|
|
534
|
+
font-size: 16px;
|
|
538
535
|
margin-top: 0.75rem;
|
|
536
|
+
text-align: right;
|
|
539
537
|
}
|
|
540
538
|
|
|
541
539
|
.micromodal .snippet-link-box a {
|
|
542
540
|
color: #F6F7F9;
|
|
543
|
-
text-decoration:
|
|
541
|
+
text-decoration: none;
|
|
542
|
+
display: inline-flex;
|
|
543
|
+
align-items: center;
|
|
544
|
+
gap: 0.3rem;
|
|
545
|
+
padding: 0.35rem 0.45rem;
|
|
546
|
+
border: 1px solid #474C64;
|
|
547
|
+
line-height: 1;
|
|
544
548
|
}
|
|
545
549
|
|
|
546
550
|
.micromodal .snippet-link-box a:hover {
|
|
547
551
|
color: #E5E7EB;
|
|
552
|
+
border-color: #75798B;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
.micromodal .snippet-link-box a svg {
|
|
556
|
+
width: 0.85rem;
|
|
557
|
+
height: 0.85rem;
|
|
558
|
+
flex-shrink: 0;
|
|
548
559
|
}
|
|
549
560
|
|
|
550
561
|
.micromodal button.micromodal__close {
|
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
|
-
|
|
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
|
-
|
|
80
|
-
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
93
|
-
|
|
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.
|
|
231
|
+
if (this._pauseDepth > 0) {
|
|
219
232
|
this._log(`Skipping ${mutations.length} mutations (paused)`);
|
|
220
233
|
return;
|
|
221
234
|
}
|
|
@@ -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,
|
|
54
|
-
`),e.errorEl.hidden=!1)}function
|
|
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="${
|
|
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||
|
|
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
|
-
`;
|
|
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(),
|