@panphora/clayjs 1.12.0 → 1.12.2

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.
@@ -1,4 +1,5 @@
1
1
  import { isDraftMode } from "../../core/is-edit-mode.js";
2
+ import { BOTTOM_UI_CHANGED, announceBottomUi, bottomBarHeight, promptPanel } from "./bottom-ui.js";
2
3
 
3
4
  export const COPY = {
4
5
  draft: "You're seeing a private draft, like a visitor.",
@@ -50,17 +51,23 @@ const CHIP_CSS = `.clay-owner {
50
51
  -webkit-font-smoothing: antialiased;
51
52
  }
52
53
  .clay-owner__action {
53
- flex: none; font-weight: 600; color: var(--hcp-brass); cursor: pointer;
54
+ flex: none; min-height: 0; font-weight: 600; color: var(--hcp-brass); cursor: pointer;
54
55
  text-decoration: underline; text-underline-offset: 2px; text-decoration-color: var(--hcp-line-2);
55
56
  white-space: nowrap;
56
57
  }
57
- .clay-owner__action:hover { color: var(--hcp-ink); }
58
+ .clay-owner .clay-owner__action:hover { color: var(--hcp-ink); background: none; }
58
59
  .clay-owner__x {
59
60
  flex: none; display: inline-flex; align-items: center; justify-content: center;
60
- width: 24px; height: 24px; font-size: 15px; color: var(--hcp-muted); cursor: pointer;
61
+ width: 24px; height: 24px; min-height: 0; font-size: 15px; color: var(--hcp-muted); cursor: pointer;
61
62
  }
62
- .clay-owner__x:hover { color: var(--hcp-ink); }
63
+ .clay-owner .clay-owner__x:hover { color: var(--hcp-ink); background: none; }
63
64
  .clay-owner__action:focus-visible, .clay-owner__x:focus-visible { outline: 2px solid var(--hcp-brass); outline-offset: 2px; }
65
+
66
+ .clay-owner svg {
67
+ display: block; flex: none; width: 1em; height: 1em; line-height: 1;
68
+ fill: currentColor; stroke: none; stroke-width: 0; stroke-linecap: butt; stroke-linejoin: miter;
69
+ }
70
+ .clay-owner button, .clay-owner a { border-radius: 0; line-height: 1.45; }
64
71
  @media (pointer: coarse) {
65
72
  .clay-owner__action, .clay-owner__x { min-height: 44px; }
66
73
  .clay-owner__x { width: 44px; }
@@ -111,40 +118,60 @@ export function mountOwnerChip() {
111
118
  close.className = "clay-owner__x";
112
119
  close.setAttribute("aria-label", COPY.close);
113
120
  close.textContent = "\u00d7";
114
- close.addEventListener("click", () => { chip.remove(); liftOff(); });
121
+ close.addEventListener("click", () => { chip.remove(); liftOff(); release(); });
115
122
 
116
123
  chip.append(lead, action, close);
117
124
  document.body.appendChild(chip);
118
125
 
126
+ const vars = document.createElement("style");
127
+ vars.id = "clay-owner-vars";
128
+ vars.setAttribute("clay", "editor-ui");
129
+ document.head.appendChild(vars);
130
+
131
+ let published = "";
132
+ function publish(lift) {
133
+ const next = `:root { --clay-owner-room: ${Math.ceil(chip.getBoundingClientRect().height) + 16}px; }`;
134
+ if (vars.textContent !== next) vars.textContent = next;
135
+ if (published === next + lift) return;
136
+ published = next + lift;
137
+ announceBottomUi();
138
+ }
139
+
140
+ function release() {
141
+ vars.remove();
142
+ announceBottomUi();
143
+ }
144
+
119
145
  let frame = 0;
120
146
  function lift() {
121
147
  if (frame) return;
122
148
  frame = requestAnimationFrame(() => {
123
149
  frame = 0;
124
- const y = window.innerHeight - 3;
125
- let raise = 0;
126
- const hits = document.elementsFromPoint ? document.elementsFromPoint(24, y) : [];
127
- for (const hit of hits) {
128
- for (let el = hit; el && el !== document.body && el !== document.documentElement; el = el.parentElement) {
129
- if (chip.contains(el)) break;
130
- const position = getComputedStyle(el).position;
131
- if (position === "fixed" || position === "sticky") {
132
- raise = Math.max(raise, Math.ceil(window.innerHeight - el.getBoundingClientRect().top));
133
- break;
134
- }
135
- }
136
- }
137
- chip.style.setProperty("--hcp-lift", (raise > 0 && raise < window.innerHeight / 3 ? raise : 0) + "px");
150
+ let lift = bottomBarHeight(24, (el) => chip.contains(el) || el.closest("#hcp"));
151
+ const panel = promptPanel(chip.getBoundingClientRect());
152
+ const covered = panel >= window.innerHeight / 3;
153
+ if (panel && !covered) lift = Math.max(lift, panel - 4);
154
+ chip.style.visibility = covered ? "hidden" : "";
155
+ chip.style.setProperty("--hcp-lift", lift + "px");
156
+ publish(covered ? -1 : lift);
138
157
  });
139
158
  }
140
159
 
141
160
  function liftOff() {
142
161
  removeEventListener("scroll", lift);
143
162
  removeEventListener("resize", lift);
163
+ document.removeEventListener(BOTTOM_UI_CHANGED, lift);
164
+ document.removeEventListener("transitionend", lift, true);
165
+ document.removeEventListener("pointerup", lift, true);
166
+ window.removeEventListener("hashchange", lift);
144
167
  }
145
168
 
146
169
  addEventListener("scroll", lift, { passive: true });
147
170
  addEventListener("resize", lift);
171
+ document.addEventListener(BOTTOM_UI_CHANGED, lift);
172
+ document.addEventListener("transitionend", lift, true);
173
+ document.addEventListener("pointerup", lift, true);
174
+ window.addEventListener("hashchange", lift);
148
175
  lift();
149
176
 
150
177
  return chip;
@@ -54,14 +54,22 @@ export const PROMPT_CSS = `.hcp {
54
54
  transition: bottom .25s ease, opacity .2s ease;
55
55
  pointer-events: none;
56
56
  }
57
- .hcp[hidden], .hcp[data-hcp-state="dismissed"], .hcp[data-hcp-state="off"], .hcp[data-hcp-intro] { display: none; }
57
+ .hcp[hidden], .hcp[data-hcp-state="dismissed"], .hcp[data-hcp-state="off"] { display: none; }
58
58
  .hcp[data-hcp-typing] { opacity: 0; visibility: hidden; }
59
59
  .hcp > * { pointer-events: auto; }
60
- .hcp svg { display: block; flex: none; }
60
+ .hcp svg {
61
+ display: block; flex: none; width: 16px; height: 16px; line-height: 1;
62
+ fill: none; stroke: none; stroke-width: 0; stroke-linecap: butt; stroke-linejoin: miter;
63
+ }
64
+ .hcp .hcp-x svg, .hcp .hcp-actions .hcp-btn svg, .hcp-tab svg, .hcp-file svg { fill: currentColor; }
65
+ .hcp .hcp-file svg { width: 20px; height: 20px; }
66
+ .hcp .hcp-tab svg { width: 16px; height: 18px; }
67
+ .hcp .hcp-dock .hcp-x svg { width: 12px; height: 12px; }
68
+ .hcp button, .hcp a { border-radius: 0; line-height: 1.5; }
61
69
 
62
70
  .hcp-btn {
63
71
  display: inline-flex; align-items: center; justify-content: center; gap: 7px;
64
- height: 34px; padding: 0 14px;
72
+ height: 34px; min-height: 0; padding: 0 14px;
65
73
  font-family: var(--hcp-sans); font-size: 14px; font-weight: 500; line-height: 1.5;
66
74
  white-space: nowrap; text-decoration: none; cursor: pointer; user-select: none;
67
75
  color: var(--hcp-ink); background: var(--hcp-face);
@@ -69,7 +77,7 @@ export const PROMPT_CSS = `.hcp {
69
77
  border-color: var(--hcp-edge-hi) var(--hcp-edge-lo) var(--hcp-edge-lo) var(--hcp-edge-hi);
70
78
  outline: none;
71
79
  }
72
- .hcp-btn:hover { background: color-mix(in srgb, var(--hcp-face), var(--hcp-edge-hi) 45%); color: var(--hcp-ink); }
80
+ .hcp .hcp-btn:hover { background: color-mix(in srgb, var(--hcp-face), var(--hcp-edge-hi) 45%); color: var(--hcp-ink); }
73
81
  .hcp-btn:active { border-color: var(--hcp-edge-lo) var(--hcp-edge-hi) var(--hcp-edge-hi) var(--hcp-edge-lo); }
74
82
  .hcp-btn:active > span { translate: 1px 1px; }
75
83
  .hcp-btn > span { display: inline-flex; align-items: center; gap: 7px; }
@@ -80,18 +88,20 @@ export const PROMPT_CSS = `.hcp {
80
88
  --hcp-edge-lo: color-mix(in srgb, var(--hcp-ink), black 32%);
81
89
  color: var(--hcp-ground);
82
90
  }
83
- .hcp-btn--primary:hover { background: color-mix(in srgb, var(--hcp-ink), var(--hcp-ground) 12%); color: var(--hcp-ground); }
91
+ .hcp .hcp-btn--primary:hover { background: color-mix(in srgb, var(--hcp-ink), var(--hcp-ground) 12%); color: var(--hcp-ground); }
84
92
 
85
93
  .hcp-dock { display: flex; align-items: stretch; box-shadow: 0 6px 16px -8px rgba(43, 36, 27, .45); }
94
+ .hcp:not([data-hcp-arrived]) .hcp-dock { animation: hcp-arrive 2.4s cubic-bezier(.16, 1, .3, 1) 3s both; }
95
+ @keyframes hcp-arrive { from { transform: translateX(calc(100% + 48px)); } to { transform: none; } }
86
96
  .hcp-tab { font-size: 13.5px; padding: 0 12px 0 10px; }
87
97
  .hcp-tab svg { color: var(--hcp-brass); }
88
98
  .hcp-dock .hcp-x {
89
- width: 26px; height: 34px; display: inline-flex; align-items: center; justify-content: center;
99
+ width: 26px; height: 34px; min-height: 0; border-radius: 0; display: inline-flex; align-items: center; justify-content: center;
90
100
  background: var(--hcp-face); color: var(--hcp-muted); cursor: pointer;
91
101
  border: 2px solid; border-left: 0;
92
102
  border-color: var(--hcp-edge-hi) var(--hcp-edge-lo) var(--hcp-edge-lo) var(--hcp-edge-hi);
93
103
  }
94
- .hcp-dock .hcp-x:hover { color: var(--hcp-ink); }
104
+ .hcp .hcp-dock .hcp-x:hover { color: var(--hcp-ink); background: var(--hcp-face); }
95
105
  .hcp-tab__label { display: inline; }
96
106
  .hcp[data-hcp-state="mini"] .hcp-tab__label,
97
107
  .hcp[data-hcp-state="mini"] .hcp-dock .hcp-x { display: none; }
@@ -109,11 +119,13 @@ export const PROMPT_CSS = `.hcp {
109
119
  @keyframes hcp-rise { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
110
120
 
111
121
  .hcp-card .hcp-x {
112
- position: absolute; top: 10px; right: 10px; width: 28px; height: 28px;
122
+ position: absolute; top: 12px; right: 12px; width: 24px; height: 24px; min-height: 0;
113
123
  display: inline-flex; align-items: center; justify-content: center;
124
+ border: 1px solid var(--hcp-line-2); border-radius: 3px; background: var(--hcp-surface);
114
125
  color: var(--hcp-muted); cursor: pointer;
115
126
  }
116
- .hcp-card .hcp-x:hover { color: var(--hcp-ink); background: var(--hcp-sunk); }
127
+ .hcp .hcp-card .hcp-x:hover { color: var(--hcp-ink); border-color: var(--hcp-muted); background: var(--hcp-surface); }
128
+ .hcp .hcp-card .hcp-x svg { width: 12px; height: 12px; fill: none; stroke: currentColor; stroke-width: 2; }
117
129
  .hcp-kicker {
118
130
  display: flex; align-items: center; gap: 8px;
119
131
  font-family: var(--hcp-mono); font-size: 11px; font-weight: 500; letter-spacing: .08em; text-transform: uppercase;
@@ -141,14 +153,14 @@ export const PROMPT_CSS = `.hcp {
141
153
  .hcp-file small { display: block; font-size: 12px; color: var(--hcp-muted); line-height: 1.4; }
142
154
  .hcp-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
143
155
  .hcp-actions .hcp-btn--primary { flex: 1 1 auto; }
144
- .hcp-foot { margin-top: 12px; display: flex; justify-content: space-between; align-items: center; gap: 10px; }
145
- .hcp-foot small { font-size: 12px; color: var(--hcp-muted); }
156
+ .hcp-foot { margin-top: 12px; display: flex; justify-content: flex-end; }
146
157
  .hcp-quiet {
158
+ min-height: 0; border-radius: 0;
147
159
  font-size: 12px; color: var(--hcp-muted); cursor: pointer;
148
160
  text-decoration: underline; text-underline-offset: 2px; text-decoration-color: var(--hcp-line-2);
149
161
  white-space: nowrap;
150
162
  }
151
- .hcp-quiet:hover { color: var(--hcp-ink); }
163
+ .hcp .hcp-quiet:hover { color: var(--hcp-ink); background: none; }
152
164
 
153
165
  @media (max-width: 480px) {
154
166
  .hcp { right: 12px; bottom: calc(12px + var(--hcp-lift)); }
@@ -157,12 +169,14 @@ export const PROMPT_CSS = `.hcp {
157
169
  }
158
170
  @media (pointer: coarse) {
159
171
  .hcp-btn, .hcp-dock .hcp-x, .hcp-card .hcp-x { min-height: 44px; }
160
- .hcp-card .hcp-x { width: 44px; }
172
+ .hcp-card .hcp-x { width: 44px; height: 44px; top: 6px; right: 6px; }
161
173
  .hcp-quiet { display: inline-flex; align-items: center; min-height: 44px; }
162
174
  }
163
175
  @media (prefers-reduced-motion: reduce) {
164
176
  .hcp { transition: none; }
165
177
  .hcp[data-hcp-state="card"] .hcp-card { animation: none; }
178
+ .hcp:not([data-hcp-arrived]) .hcp-dock { animation: hcp-arrive-fade .4s ease 3s both; }
179
+ @keyframes hcp-arrive-fade { from { opacity: 0; } to { opacity: 1; } }
166
180
  .hcp-btn:active > span { translate: none; }
167
181
  }
168
182
  @media (forced-colors: active) {
@@ -1,31 +1,30 @@
1
1
  import { PROMPT_CSS } from "./prompt-style.js";
2
+ import { announceBottomUi, bottomBarHeight } from "./bottom-ui.js";
2
3
 
3
4
  const FONT_HREF = "https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@500&family=IBM+Plex+Sans:wght@400;500;600&family=Newsreader:opsz,wght@6..72,500&display=swap";
4
5
 
5
6
  const ASIDE = `<aside class="hcp" id="hcp" hidden aria-label="Download this app" data-hcp-state="tab" data-hcp-reason="open" sap-ignore clay="editor-ui">
6
7
  <section class="hcp-card" id="hcp-card" role="dialog" aria-modal="false" aria-labelledby="hcp-title">
7
- <button type="button" class="hcp-x" data-hcp="minimize" aria-label="Minimize"><svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M3 12h10v2H3z"/></svg></button>
8
+ <button type="button" class="hcp-x" data-hcp="minimize" aria-label="Minimize"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="square" aria-hidden="true"><path d="M5 12h14"/></svg></button>
8
9
  <div class="hcp-kicker">Free download</div>
9
- <h2 class="hcp-title" id="hcp-title"><span data-hcp-for="use">Your numbers are saved in this browser only.</span><span data-hcp-for="open">This app is free to keep.</span><span data-hcp-for="return">Your numbers are saved in this browser only.</span><span data-hcp-for="error">Your work isn't being saved in this browser.</span></h2>
10
- <p class="hcp-body"><span data-hcp-for="open">Download it as one file and use it on your computer, no account needed.</span><span data-hcp-for="use">Download the file to keep them on your computer for good.</span><span data-hcp-for="return">Download the file to keep them on your computer for good.</span><span data-hcp-for="error">Storage is full or turned off here. Download the file to keep what you've done.</span></p>
10
+ <h2 class="hcp-title" id="hcp-title"><span data-hcp-for="use">Your work is saved in this browser only.</span><span data-hcp-for="open">This app is free to keep.</span><span data-hcp-for="return">Your work is saved in this browser only.</span><span data-hcp-for="error">Your work isn't being saved in this browser.</span></h2>
11
+ <p class="hcp-body"><span data-hcp-for="open">Download it as one file and use it on your computer, no account needed.</span><span data-hcp-for="use">Download the file to keep it on your computer for good.</span><span data-hcp-for="return">Download the file to keep it on your computer for good.</span><span data-hcp-for="error">Storage is full or turned off here. Download the file to keep what you've done.</span></p>
11
12
  <div class="hcp-file">
12
- <svg width="26" height="30" viewBox="0 0 26 30" fill="none" aria-hidden="true"><path d="M2 1h15l7 7v21H2z" fill="var(--hcp-surface)" stroke="currentColor" stroke-width="2"/><path d="M17 1v7h7" stroke="currentColor" stroke-width="2"/><path d="M7 15h12M7 19h12M7 23h8" stroke="var(--hcp-muted)" stroke-width="2"/></svg>
13
- <div><b class="hcp-name" data-hcp-name>This app</b><small>One file with the whole app and your numbers in it</small></div>
13
+ <svg width="20" height="20" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true"><path d="M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0-11.32-11.32L136,124.69V32a8,8,0,0,0-16,0v92.69L93.66,98.34a8,8,0,0,0-11.32,11.32Z"/></svg>
14
+ <div><b class="hcp-name" data-hcp-name>This app</b><small>One file with the whole app and your work in it</small></div>
14
15
  </div>
15
- <p class="hcp-body">Open it with HTML Clay, a free app for Mac, Windows and Linux. It opens the file in a window and saves every change into it, so your numbers stay on your computer.</p>
16
16
  <div class="hcp-actions">
17
- <a class="hcp-btn hcp-btn--primary" data-hcp-link href="/_/download?as=htmlclay"><span><svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M7 1h2v8.6l2.8-2.8 1.4 1.4L8 13.4 2.8 8.2l1.4-1.4L7 9.6zM2 13h12v2H2z"/></svg>Download free</span></a>
18
- <button type="button" class="hcp-btn" data-hcp="minimize"><span>Not now</span></button>
17
+ <a class="hcp-btn hcp-btn--primary" data-hcp-link href="/_/download?as=htmlclay"><span><svg width="16" height="16" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true"><path d="M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0-11.32-11.32L136,124.69V32a8,8,0,0,0-16,0v92.69L93.66,98.34a8,8,0,0,0-11.32,11.32Z"/></svg>Download free</span></a>
19
18
  </div>
20
- <div class="hcp-foot"><small>Free, and the file is yours to keep.</small><button type="button" class="hcp-quiet" data-hcp="dismiss">Don&rsquo;t show again</button></div>
19
+ <div class="hcp-foot"><button type="button" class="hcp-quiet" data-hcp="dismiss">Don&rsquo;t show again</button></div>
21
20
  </section>
22
21
  <div class="hcp-dock">
23
- <button type="button" class="hcp-btn hcp-tab" data-hcp="open" aria-controls="hcp-card" aria-expanded="false" aria-label="This app is free to keep"><span><svg width="16" height="18" viewBox="0 0 16 18" fill="none" aria-hidden="true"><path d="M1.5 1h8.5l4.5 4.5V17h-13z" stroke="currentColor" stroke-width="2"/><path d="M10 1v5h4.5" stroke="currentColor" stroke-width="2"/><path d="M8 8v6M5.5 11.5 8 14l2.5-2.5" stroke="currentColor" stroke-width="1.8"/></svg><span class="hcp-tab__label">This app is free to keep</span></span></button>
22
+ <button type="button" class="hcp-btn hcp-tab" data-hcp="open" aria-controls="hcp-card" aria-expanded="false" aria-label="This app is free to keep"><span><svg width="16" height="16" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true"><path d="M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0-11.32-11.32L136,124.69V32a8,8,0,0,0-16,0v92.69L93.66,98.34a8,8,0,0,0-11.32,11.32Z"/></svg><span class="hcp-tab__label">This app is free to keep</span></span></button>
24
23
  <button type="button" class="hcp-x" data-hcp="dismiss" aria-label="Hide this for good"><svg width="12" height="12" viewBox="0 0 12 12" fill="currentColor" aria-hidden="true"><path d="M1.4 0 6 4.6 10.6 0 12 1.4 7.4 6 12 10.6 10.6 12 6 7.4 1.4 12 0 10.6 4.6 6 0 1.4z"/></svg></button>
25
24
  </div>
26
25
  </aside>`;
27
26
 
28
- export function mountPrompt({ memory, appName, link, onError }) {
27
+ export function mountPrompt({ memory, appName, link }) {
29
28
  if (!document.getElementById("hcp-style")) {
30
29
  document.head.insertAdjacentHTML("beforeend", `<link rel="stylesheet" clay="editor-ui" href="${FONT_HREF}">\n<style clay="editor-ui" id="hcp-style">${PROMPT_CSS}</style>`);
31
30
  }
@@ -38,6 +37,7 @@ export function mountPrompt({ memory, appName, link, onError }) {
38
37
  const USES_TO_SHOW = 3;
39
38
  const IDLE_MS = 2500;
40
39
  const TEXTY = /^(INPUT|TEXTAREA|SELECT)$/;
40
+ const OUR_UI = "#hcp, .clay-intro, .clay-owner";
41
41
 
42
42
  const linkEl = root.querySelector("[data-hcp-link]");
43
43
  linkEl.href = link;
@@ -50,12 +50,12 @@ export function mountPrompt({ memory, appName, link, onError }) {
50
50
  root.setAttribute("data-hcp-state", state);
51
51
  if (reason) root.setAttribute("data-hcp-reason", reason);
52
52
  tab.setAttribute("aria-expanded", state === "card" ? "true" : "false");
53
- if (state === "card") { mem.shown = true; memory.save(); }
53
+ if (state === "card") { mem.shown = true; memory.save(); root.setAttribute("data-hcp-arrived", ""); }
54
54
  lift();
55
55
  }
56
56
 
57
57
  function isHostField(el) {
58
- return el && !root.contains(el) && (TEXTY.test(el.tagName) || el.isContentEditable);
58
+ return el && !root.contains(el) && !el.closest(OUR_UI) && (TEXTY.test(el.tagName) || el.isContentEditable);
59
59
  }
60
60
 
61
61
  let timer = null;
@@ -96,17 +96,10 @@ export function mountPrompt({ memory, appName, link, onError }) {
96
96
  if (liftFrame) return;
97
97
  liftFrame = requestAnimationFrame(() => {
98
98
  liftFrame = 0;
99
- const y = innerHeight - 3, x = innerWidth - 24;
100
- let raise = 0;
101
- const hits = document.elementsFromPoint ? document.elementsFromPoint(x, y) : [];
102
- for (let i = 0; i < hits.length; i++) {
103
- for (let el = hits[i]; el && el !== document.body && el !== document.documentElement; el = el.parentElement) {
104
- if (root.contains(el) || el.closest("[data-hcp-preview]")) break;
105
- const pos = getComputedStyle(el).position;
106
- if (pos === "fixed" || pos === "sticky") { raise = Math.max(raise, Math.ceil(innerHeight - el.getBoundingClientRect().top)); break; }
107
- }
108
- }
109
- root.style.setProperty("--hcp-lift", (raise > 0 && raise < innerHeight / 3 ? raise : 0) + "px");
99
+ const raise = bottomBarHeight(innerWidth - 24, (el) => root.contains(el) || el.closest("[data-hcp-preview], .clay-owner"));
100
+ const next = raise + "px";
101
+ if (root.style.getPropertyValue("--hcp-lift") !== next) root.style.setProperty("--hcp-lift", next);
102
+ announceBottomUi();
110
103
  });
111
104
  }
112
105
 
@@ -145,6 +138,9 @@ export function mountPrompt({ memory, appName, link, onError }) {
145
138
  mem.downloaded = true; mem.shown = true; memory.save();
146
139
  }
147
140
  });
141
+ root.addEventListener("animationend", (e) => {
142
+ if (e.animationName === "hcp-arrive" || e.animationName === "hcp-arrive-fade") root.setAttribute("data-hcp-arrived", "");
143
+ });
148
144
  root.addEventListener("keydown", (e) => {
149
145
  if (e.key === "Escape" && root.getAttribute("data-hcp-state") === "card") { set("mini"); tab.focus(); }
150
146
  });
@@ -153,12 +149,7 @@ export function mountPrompt({ memory, appName, link, onError }) {
153
149
  function clearError() {
154
150
  if (root.getAttribute("data-hcp-reason") === "error") root.setAttribute("data-hcp-reason", "use");
155
151
  }
156
- function hideForIntro(on) {
157
- if (on) root.setAttribute("data-hcp-intro", "");
158
- else root.removeAttribute("data-hcp-intro");
159
- }
160
-
161
- const api = { set, root, showError, clearError, hideForIntro };
152
+ const api = { set, root, showError, clearError };
162
153
 
163
154
  if (mem.dismissed) { root.setAttribute("data-hcp-state", "dismissed"); return api; }
164
155
 
@@ -14,8 +14,3 @@ export function downloadUrl(src, loc = window.location) {
14
14
  return `/_/download${path}?as=htmlclay${src ? `&src=${encodeURIComponent(src)}` : ""}`;
15
15
  }
16
16
 
17
- export function signupTag(slot, template) {
18
- const explicit = template?.getAttribute("signup-tag");
19
- const name = explicit || slot.replace(/-v\d+$/, "");
20
- return `app-${name}`.slice(0, 50);
21
- }
@@ -3,7 +3,7 @@ import { hasSaveToken } from "../core/host-attrs.js";
3
3
  import { draftSlot, setDraftTransport, setDraftFlush } from "../core/draft-mode.js";
4
4
  import { createStore, safeStorage } from "./visitor-drafts/store.js";
5
5
  import { createUiMemory } from "./visitor-drafts/ui-memory.js";
6
- import { rememberSource, downloadUrl, signupTag } from "./visitor-drafts/source.js";
6
+ import { rememberSource, downloadUrl } from "./visitor-drafts/source.js";
7
7
  import { mountPrompt } from "./visitor-drafts/prompt.js";
8
8
  import { mountIntro } from "./visitor-drafts/intro.js";
9
9
  import { mountOwnerChip } from "./visitor-drafts/owner-chip.js";
@@ -31,7 +31,7 @@ if (isDraftMode && slot && rulesTag) {
31
31
  const template = document.querySelector("template[visitor-intro]");
32
32
  const start = () => {
33
33
  const prompt = mountPrompt({ memory, appName, link: downloadLink });
34
- mountIntro({ memory, template, appName, link: downloadLink, tag: signupTag(slot, template), source, hadDraft: result.hadDraft, prompt, snapshot: store.snapshot });
34
+ mountIntro({ memory, template, appName, hadDraft: result.hadDraft });
35
35
  if (isOwner) mountOwnerChip();
36
36
  document.addEventListener("clay:drafts-store-failed", () => prompt.showError());
37
37
  document.addEventListener("clay:drafts-saved", () => prompt.clearError());
@@ -1,4 +1,4 @@
1
1
  // GENERATED — do not edit. Vendored from
2
2
  // hyper-html-api/dist/hyper-html-api.engine.esm.js via hyper-html-api
3
3
  // `npm run copy-to-clayjs`. Edit the hyper-html-api source and re-run.
4
- var Qe=Object.defineProperty;var et=(e,t)=>{for(var n in t)Qe(e,n,{get:t[n],enumerable:!0})};var X=["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"],Y=new Set(X),re=new Set(["textContent","innerText","innerHTML","value","checked","selected","disabled","readOnly","type","id","className","title"]),$=new Set(["tagName","nodeName","nodeType","nodeValue","childElementCount","classList","baseURI","documentURI","contentType","offsetWidth","offsetHeight","clientWidth","clientHeight","scrollWidth","scrollHeight","currentSrc","duration","paused","dataset"]),Ee=new Set(["checked","selected","disabled","readOnly","paused"]);function ie(e,t){return t==null?Ee.has(e)?!1:"":Ee.has(e)?t==="false"?!1:!!t:t}var R={};et(R,{EmptyListInsert:()=>N,MAX_RULE_DEPTH:()=>L,MaxRuleDepthExceeded:()=>P,NoRulesTag:()=>oe,RuleTargetReadOnly:()=>B,RulesParseError:()=>k,ShapeMismatch:()=>v,UnknownRulesVersion:()=>W,WriteNotRoundTripped:()=>Z,WriteRefused:()=>H,WriteRejected:()=>se});var k=class extends Error{constructor(t,n){super(t),this.name="RulesParseError",this.cause=n}},W=class extends Error{constructor(t){super(`unknown rules version: ${t}. Library supports "1".`),this.name="UnknownRulesVersion",this.version=t}},L=20,P=class extends Error{constructor(t){super(`rule depth exceeded ${L} at path: ${t.join(".")}`),this.name="MaxRuleDepthExceeded",this.path=t}},v=class extends Error{constructor(t){super(`shape mismatch: ${t.length} field(s) failed validation`),this.name="ShapeMismatch",this.mismatches=t}},N=class extends Error{constructor(t,n){super(n?`cannot add items to empty list at "${t.join(".")}" \u2014 ${n}`:`cannot add items to empty list at "${t.join(".")}" \u2014 no sibling to clone as template. Seed the list with a hidden item first.`),this.name="EmptyListInsert",this.path=t}},B=class extends Error{constructor(t){super(`cannot write to read-only DOM property "${t}"`),this.name="RuleTargetReadOnly",this.target=t}},H=class extends Error{constructor(t){super(`write refused: ${t.length} write(s) broke the content-only policy`),this.name="WriteRefused",this.refusals=t}};function tt(e){return e.reduce((n,r)=>typeof r=="number"?`${n}[${r}]`:n?`${n}.${r}`:String(r),"")||"(root)"}var Z=class extends Error{constructor(t){super(`write did not round-trip at "${tt(t)}"`),this.name="WriteNotRoundTripped",this.path=t}},oe=class extends Error{constructor(t){super(`no <script data-rules-name~="${t}"> rules tag in this document`),this.name="NoRulesTag",this.token=t}},se=class extends Error{constructor(t,n){super(`write rejected: ${t.length} unknown key(s), ${n.length} rule(s) with no matching element`),this.name="WriteRejected",this.unknownKeys=t,this.unmatched=n}};function b(e){let t=0,n=null,r=-1;for(let i=0;i<e.length;i++){let s=e[i];s==="\\"?i++:n?s===n&&(n=null):s==='"'||s==="'"?n=s:s==="["||s==="("?t++:s==="]"||s===")"?t>0&&t--:s==="@"&&t===0&&(r=i)}return r}function le(e){let t=b(e);return t===-1?{selector:e,prop:null}:{selector:e.slice(0,t),prop:e.slice(t+1)||null}}function ce(e){let t=0,n=null,r=-1,i=!1;for(let s=0;s<e.length;s++){let l=e[s];l==="\\"?s++:n?l===n&&(n=null):l==='"'||l==="'"?n=l:l==="["||l==="("?t++:l==="]"||l===")"?t>0&&t--:t===0&&l===">"?r=s:t===0&&l===","&&(i=!0)}return i||r===-1||!nt(e,r+1)?null:e.slice(0,r).trim()||null}function nt(e,t){let n=t,r=e.replace(/\s+$/,"").length;for(;n<r&&/\s/.test(e[n]);)n++;let i=0,s=null;for(;n<r;n++){let l=e[n];if(l==="\\")n++;else if(s)l===s&&(s=null);else if(l==='"'||l==="'")s=l;else if(l==="["||l==="(")i++;else if(l==="]"||l===")")i>0&&i--;else if(i===0&&(l==="+"||l==="~"||/\s/.test(l)))return!1}return!0}function C(e,t,n,r={}){if(Object.prototype.hasOwnProperty.call(r,"exclude")&&e.semanticExclude===!1)throw new Error("This adapter does not support semantic exclude queries; omit exclude or use the DOM adapter.");return fe(e,t,n,{depth:0,path:[]},r)}function fe(e,t,n,r,i){if(r.depth>L)throw new P(r.path);if(typeof n=="string")return rt(e,t,n,r,i);if(Array.isArray(n)){let[s,l]=n,c=e.find(t,s,i);return xe(i,r,c),c.map((o,f)=>fe(e,o,l,{depth:r.depth+1,path:[...r.path,f]},i))}if(typeof n=="object"&&n!==null){let s={};for(let[l,c]of Object.entries(n))s[l]=fe(e,t,c,{depth:r.depth+1,path:[...r.path,l]},i);return s}return null}function rt(e,t,n,r,i){if(n.endsWith("[]")){let c=n.slice(0,-2),o=e.find(t,c,i);return xe(i,r,o),o.map(f=>e.text(f))}if(n.startsWith("@"))return Oe(e,t,n.slice(1));let s=b(n);if(s!==-1){let c=n.slice(0,s),o=n.slice(s+1),f=c?e.find(t,c,i):[t];return f.length===0?null:Oe(e,f[0],o)}if(n===".")return e.text(t);let l=e.find(t,n,i);return l.length===0?null:e.text(l[0])}function xe(e,t,n){if(typeof e.onRowsRead=="function")try{e.onRowsRead(t.path.slice(),n)}catch(r){console.warn(`[hyper-html-api] onRowsRead threw at "${t.path.join(".")||"(root)"}"`,r)}}function Oe(e,t,n){if(Y.has(n)){let i=e.prop(t,n);return i==null?null:String(i)}let r=e.attr(t,n);return r??null}function Re(e,t,n,r){let i=e.length,s=t.length,l=new Array(i).fill(-1);if(r){let h=new Set;for(let y=0;y<i;y++){let A=r[y];!(A>=0&&A<s)||h.has(A)||(l[y]=A,h.add(A))}}if(i===0||s===0)return l;let c=e.map(h=>Se(h,n)),o=t.map(h=>Se(h,n)),f=new Array(s).fill(!1);for(let h of l)h>=0&&(f[h]=!0);let u=new Map;o.forEach((h,y)=>{f[y]||u.set(h,u.has(h)?-1:y)});let m=new Map;c.forEach((h,y)=>{l[y]>=0||m.set(h,(m.get(h)||0)+1)}),c.forEach((h,y)=>{if(l[y]>=0||m.get(h)!==1)return;let A=u.get(h);A===void 0||A===-1||f[A]||(l[y]=A,f[A]=!0)});let d=[];for(let h=0;h<i;h++)l[h]<0&&d.push(h);let w=[];for(let h=0;h<s;h++)f[h]||w.push(h);if(d.length===0||w.length===0)return l;let a=i*s+1,p=it(e,t,n),g=(h,y)=>p(h,y)*a+Math.abs(h-y);for(let[h,y]of ot(d,w,g))l[h]=y;return l}var Ne=e=>typeof e=="object"&&e!==null;function Se(e,t){if(!Ne(t))return e==null?" null":String(e);let n=Object.keys(t);return JSON.stringify(n.map(r=>{let i=JSON.stringify(e?.[r]);return i===void 0?" undef":i}))}function it(e,t,n){if(!Ne(n))return(c,o)=>e[c]===t[o]?0:1;let r=Object.keys(n),i=c=>r.map(o=>JSON.stringify(c?.[o])),s=e.map(i),l=t.map(i);return(c,o)=>{let f=s[c],u=l[o],m=0;for(let d=0;d<r.length;d++)f[d]!==u[d]&&m++;return m}}function ot(e,t,n){return e.length<=t.length?be(e,t,n,!1):be(t,e,(r,i)=>n(i,r),!0)}function be(e,t,n,r){let i=e.length,s=t.length,l=[];for(let m=0;m<=i;m++)l.push(new Float64Array(s+1).fill(1/0));let c=[];for(let m=0;m<=i;m++)c.push(new Uint8Array(s+1));for(let m=0;m<=s;m++)l[i][m]=0;for(let m=i-1;m>=0;m--)for(let d=s-1;d>=0;d--){let w=n(e[m],t[d])+l[m+1][d+1],a=l[m][d+1];w<=a?(l[m][d]=w,c[m][d]=1):l[m][d]=a}let o=[],f=0,u=0;for(;f<i&&u<s;)c[f][u]&&(o.push(r?[t[u],e[f]]:[e[f],t[u]]),f++),u++;return o}function ae(e,t,n,r,i,s,l,c={}){let o=e.find(t,n,c);if(i.length===0){o.forEach(T=>e.remove(T)),ue(c,"onRowsApplied",s.path,[]);return}let f=i.length>o.length,u=o[0]||null;if(f&&!u&&(u=ft(e,t,n,c),!u))throw new N(s.path);let m=o.map(T=>ct(e,T,r,c)),d=null;if(f&&u){d=e.clone(u),c.templateAttr&&e.removeAttr(d,c.templateAttr);let T=e.stripIds(d);T>0&&console.warn(`[hyper-html-api] stripped ${T} id attribute(s) from cloned template at "${s.path.join(".")||"(root)"}"`)}let w=Re(i,m,r,st(e,o,i,s,c)),a=o.length>0?e.parent(o[0]):dt(e,t,n,u,s,c),p=o.length>0?ke(e,a,o[0]):0,g=yt(e,o),h=new Set,y=[],A=i.map((T,S)=>{let O=w[S];if(O>=0)return h.add(O),y.push(!1),o[O];y.push(!0);let E=e.clone(d);return e.stripIds(E),E});o.forEach((T,S)=>{h.has(S)||e.remove(T)}),g?mt(e,a,p,A,y):gt(e,A,y,a,p),lt(e,A,r,i,s,l,c),ue(c,"onRowsApplied",s.path,A)}function ue(e,t,n,r){if(typeof e[t]=="function")try{return e[t](n.slice(),r)}catch(i){console.warn(`[hyper-html-api] ${t} threw at "${n.join(".")||"(root)"}"`,i);return}}function st(e,t,n,r,i){let s=ue(i,"identifyRows",r.path,n);if(!Array.isArray(s))return null;let l=new Array(n.length).fill(-1),c=new Set,o=new Map(t.map((f,u)=>[e.identity(f),u]));for(let f=0;f<n.length;f++){if(!s[f])continue;let u=o.get(e.identity(s[f]));u===void 0||c.has(u)||(l[f]=u,c.add(u))}return l}function lt(e,t,n,r,i,s,l){t.forEach((c,o)=>{if(n===null){let f=r[o],u=f==null?"":String(f);e.text(c)!==u&&e.text(c,u)}else{let f=s(e,c,n,r[o],{depth:i.depth+1,path:[...i.path,o]},l);f&&f!==c&&(t[o]=f)}})}function ct(e,t,n,r){return n===null?e.text(t):C(e,t,n,r.onRowsRead?{...r,onRowsRead:void 0}:r)}function ke(e,t,n){let r=e.children(t);for(let i=0;i<r.length;i++)if(e.sameNode(r[i],n))return i;return-1}function ft(e,t,n,r){if(!r.templateAttr)return null;let i=/^\s*:scope\s*>\s*/.test(n),s=new RegExp(":not\\(\\["+r.templateAttr.replace(/[.*+?^${}()|[\]\\-]/g,"\\$&")+"\\]\\)","g"),l=n.replace(/^\s*:scope\s*>\s*/,"").replace(s,""),c=i?ut(l):0,o=ce(l),f=t;for(;f;){let u=e.find(f,l,{includeRulesTag:!1,templateAttr:null});for(let m of u)if(e.attr(m,r.templateAttr)!=null&&!(i&&!ht(e,t,m,c))&&!(o&&!e.matches(e.parent(m),o)))return m;f=e.parent(f)}return null}function ut(e){let t=0,n=null,r=1;for(let i=0;i<e.length;i++){let s=e[i];if(s==="\\")i++;else if(n)s===n&&(n=null);else if(s==='"'||s==="'")n=s;else if(s==="["||s==="(")t++;else if(s==="]"||s===")")t>0&&t--;else if(t===0&&s===">")r++;else{if(t===0&&(s==="+"||s==="~"))return null;if(t===0&&/\s/.test(s)){if(!at(e,i))return null;for(;i+1<e.length&&/\s/.test(e[i+1]);)i++}}}return r}function at(e,t){let n=t;for(;n<e.length&&/\s/.test(e[n]);)n++;let r=t>0?e[t-1]:"",i=n<e.length?e[n]:"";return Ce(r)||Ce(i)}function Ce(e){return e===">"||e==="+"||e==="~"}function ht(e,t,n,r){if(r===null)return!0;let i=n;for(let o=0;o<r;o++)if(i=e.parent(i),!i)return!1;let s=e.prop(t,"tagName");if(!s)return!0;let l=e.prop(i,"tagName");if(!l||String(l).toLowerCase()!==String(s).toLowerCase())return!1;let c=new Set(Me(e,i));return Me(e,t).every(o=>c.has(o))}function Me(e,t){let n=e.attr(t,"class");return n?String(n).split(/\s+/).filter(Boolean):[]}function dt(e,t,n,r,i,s){let l=e.parent(r);if(l&&pt(e,t,l)&&!Ie(e,l,s))return l;let c=ce(n);if(!c)throw new N(i.path,`the list selector "${n}" names no container to hold the new rows \u2014 write it as "container > row" (for example "ol.comments > li") so the cloned row lands in the list`);let f=(c===":scope"?e.prop(t,"tagName")?[t]:[]:e.find(t,c,s)).filter(u=>!Ie(e,u,s));if(f.length===0)throw new N(i.path,`no container matching "${c}" inside this context to hold the new rows`);if(f.length>1)throw new N(i.path,`"${c}" matches ${f.length} containers inside this context, so the new rows have no single destination`);return f[0]}function pt(e,t,n){let r=n;for(;r;){if(e.sameNode(r,t))return!0;r=e.parent(r)}return e.parent(t)?!1:e.find(t,"*",{includeRulesTag:!0,templateAttr:null}).some(i=>e.sameNode(i,n))}var Pe=["no-data","editor-ui"];function Ie(e,t,n){let r=t;for(;r;){if(n.templateAttr&&e.attr(r,n.templateAttr)!=null||Pe.some(s=>e.attr(r,s)!=null))return!0;let i=e.attr(r,"clay");if(i&&i.split(/\s+/).some(s=>Pe.includes(s)))return!0;r=e.parent(r)}return!1}function mt(e,t,n,r,i){let s=e.children(t),l=s.map(o=>e.identity(o)),c=!1;r.forEach((o,f)=>{let u=e.identity(o),m=n+f;if(l[m]===u)return;if(!i[f]){let w=l.indexOf(u);w!==-1&&(l.splice(w,1),s.splice(w,1))}let d=Math.min(m,s.length);d<s.length?e.insertBefore(s[d],o):s.length?c?e.insertAfter(s[s.length-1],o):(e.insertAt(t,o,m),c=!0):e.insertAt(t,o,0),l.splice(d,0,u),s.splice(d,0,o)})}function yt(e,t){if(t.length<=1)return!0;let n=e.parent(t[0]);if(!n)return!1;let r=new Map(e.children(n).map((s,l)=>[e.identity(s),l])),i=[];for(let s of t){let l=r.get(e.identity(s));if(l===void 0)return!1;i.push(l)}return i.sort((s,l)=>s-l),i[i.length-1]-i[0]===i.length-1}function gt(e,t,n,r,i){let s=null,l=i;for(let c=0;c<t.length;c++){if(!n[c]){s=t[c];continue}let o=s?e.parent(s):r;if(!o)continue;let f=s?ke(e,o,s)+1:l++;e.insertAt(o,t[c],f),s=t[c]}}function I(e,t,n,r,i={}){if(Object.prototype.hasOwnProperty.call(i,"exclude")&&e.semanticExclude===!1)throw new Error("This adapter does not support semantic exclude queries; omit exclude or use the DOM adapter.");let s=[];if(he(n,r,[],s),s.length)throw new v(s);Q(e,t,n,r,{depth:0,path:[]},i)}function Q(e,t,n,r,i,s={}){if(i.depth>L)throw new P(i.path);if(r===void 0)return t;if(typeof n=="string")return At(e,t,n,r,i,s);if(Array.isArray(n)){let[l,c]=n;return ae(e,t,l,c,r,i,Q,s),t}if(typeof n=="object"&&n!==null){for(let[l,c]of Object.entries(n)){let o=Q(e,t,c,r==null?r:r[l],{depth:i.depth+1,path:[...i.path,l]},s);o&&o!==t&&(t=o)}return t}return t}function At(e,t,n,r,i,s){if(n.endsWith("[]")){let o=n.slice(0,-2);return ae(e,t,o,null,r,i,Q,s),t}if(n.startsWith("@"))return je(e,t,n.slice(1),r);let l=b(n);if(l!==-1){let o=n.slice(0,l),f=n.slice(l+1),u=o?e.find(t,o,s):[t];return u.length===0||je(e,u[0],f,r),t}if(n===".")return Le(e,t,r),t;let c=e.find(t,n,s);return c.length===0||Le(e,c[0],r),t}function Le(e,t,n){let r=n==null?"":String(n);e.text(t)!==r&&e.text(t,r)}function je(e,t,n,r){if($.has(n)){let i=e.prop(t,n);if(i===r||i!=null&&r!=null&&String(i)===String(r))return t;throw new B(n)}if(n==="outerHTML"){let i=r==null?"":String(r);return e.replaceWith(t,i)}if(re.has(n)){let i=ie(n,r);return e.prop(t,n)!==i&&e.prop(t,n,i),t}if(r==null)e.attr(t,n)!=null&&e.removeAttr(t,n);else{let i=String(r);e.attr(t,n)!==i&&e.attr(t,n,i)}return t}function he(e,t,n,r){if(t!==void 0){if(typeof e=="string"){if(e.endsWith("[]")){Array.isArray(t)?t.forEach((i,s)=>{typeof i=="object"&&i!==null&&r.push({path:U([...n,s]),expected:"scalar",got:q(i)})}):r.push({path:U(n),expected:"array",got:q(t)});return}t!==null&&typeof t=="object"&&r.push({path:U(n),expected:"scalar",got:q(t)});return}if(Array.isArray(e)){if(!Array.isArray(t)){r.push({path:U(n),expected:"array",got:q(t)});return}let i=e[1];t.forEach((s,l)=>he(i,s,[...n,l],r));return}if(typeof e=="object"&&e!==null){if(t===null||Array.isArray(t)||typeof t!="object"){r.push({path:U(n),expected:"object",got:q(t)});return}for(let[i,s]of Object.entries(e))he(s,t[i],[...n,i],r)}}}function q(e){return e===null?"null":Array.isArray(e)?"array":typeof e}function U(e){return e.join(".")}function de(e){try{return JSON.parse(e)}catch(t){throw new k(`Invalid strict JSON: ${t.message}`,t)}}function z(e){try{return JSON.parse(e)}catch{}let t={BRACE_OPEN:"{",BRACE_CLOSE:"}",BRACKET_OPEN:"[",BRACKET_CLOSE:"]",COLON:":",COMMA:",",STRING:"STRING",SELECTOR:"SELECTOR",IDENTIFIER:"IDENTIFIER",NUMBER:"NUMBER",BOOLEAN:"BOOLEAN"};function n(i){let s=[],l=0;for(;l<i.length;){let c=i[l];if(/\s/.test(c)){l++;continue}if("{}".includes(c)){s.push({type:c,value:c}),l++;continue}if(c==="["){let m=!1,d=l+1;for(;d<i.length&&/\s/.test(i[d]);)d++;if(d<i.length&&/[a-zA-Z_]/.test(i[d])&&(m=!0),!m){s.push({type:c,value:c}),l++;continue}}if(c==="]"){s.push({type:c,value:c}),l++;continue}if(c===":"){s.push({type:t.COLON,value:c}),l++;continue}if(c===","){s.push({type:t.COMMA,value:c}),l++;continue}if(c==='"'||c==="'"){let m=c,d=l+1;for(;d<i.length&&i[d]!==m;)i[d]==="\\"&&d++,d++;s.push({type:t.STRING,value:i.substring(l+1,d),quoted:!0,sourceQuote:m}),l=d+1;continue}let o=l,f;for(;o<i.length&&!/[{},]/.test(i[o]);)if(i[o]===":"){let m=[":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"],d=!1;for(let w of m){let a=w.substring(1);if(i.substring(o+1,o+1+a.length)===a){d=!0,o+=a.length;break}}if(!d)break}else if(i[o]==="["){for(o++;o<i.length&&i[o]!=="]";){if(i[o]==='"'||i[o]==="'"){let m=i[o];for(o++;o<i.length&&i[o]!==m;)i[o]==="\\"&&o++,o++}o++}o<i.length&&i[o]==="]"&&o++}else o++;f=i.substring(l,o);let u=t.IDENTIFIER;/^-?\d+(\.\d+)?$/.test(f)?u=t.NUMBER:f==="true"||f==="false"||f==="null"?u=t.BOOLEAN:/^[.#@\[]|[.#@\[]| /.test(f)&&(u=t.SELECTOR),s.push({type:u,value:f,quoted:!1}),l=o}return s}function r(i){let s="";for(let l=0;l<i.length;l++){let c=i[l];if("{}".includes(c.type)||"[]".includes(c.type)){s+=c.value;continue}if(c.type===t.COLON){s+=c.value;continue}if(c.type===t.COMMA){let o=i[l+1];if(o&&(o.type==="}"||o.type==="]"))continue;s+=c.value;continue}if(c.type===t.STRING&&c.quoted){let o=c.value;c.sourceQuote==="'"&&(o=o.replace(/\\'/g,"'"),o=o.replace(/(\\*)"/g,(f,u)=>u.length%2===0?u+'\\"':f)),s+=`"${o}"`;continue}if(c.type===t.NUMBER||c.type===t.BOOLEAN){s+=c.value;continue}if(c.type===t.SELECTOR||c.type===t.IDENTIFIER){s+=`"${c.value}"`;continue}s+=`"${c.value}"`}return s}try{let i=n(e),s=r(i);return JSON.parse(s)}catch(i){throw new k("Invalid extraction rules syntax: "+i.message,i)}}var Tt="1",_e=/^[a-zA-Z0-9_-]+$/;function j(e,t,n){let r;if(n===void 0)r="script[data-rules-name]";else{if(typeof n!="string"||!_e.test(n))throw new Error(`hyper-html-api: invalid rules token ${JSON.stringify(n)} (must match ${_e})`);r=`script[data-rules-name~="${n}"]`}let i=e.find(t,r,{includeRulesTag:!0});if(i.length===0)return null;n!==void 0&&i.length>1&&console.warn(`hyper-html-api: ${i.length} rules tags match data-rules-name~="${n}"; using the first.`);let s=i[0],l=e.attr(s,"data-rules-version");if(l!==Tt)throw new W(l);return{rules:z(e.text(s)),tagNode:s}}var ee=Object.freeze({data:Object.freeze({tokens:["no-data"],bundles:["editor-ui"]}),save:Object.freeze({tokens:["no-save"],bundles:["editor-ui"]}),snapshot:Object.freeze({tokens:["no-snapshot"],bundles:["editor-ui"]}),watch:Object.freeze({tokens:["no-watch"],bundles:["editor-ui"]}),undo:Object.freeze({tokens:["no-undo"],bundles:["editor-ui"]}),history:Object.freeze({tokens:[],bundles:["editor-ui"]})}),wt=Object.freeze({"editor-ui":Object.freeze(["no-data","no-save","no-snapshot","no-watch","no-undo"])}),De=Object.freeze(["no-save","no-snapshot","no-trigger-autosave","no-dirty","no-watch","no-undo","no-data","freeze","editor-ui","live"]);function K(e,t){if(!e||e.nodeType!==1)return!1;let n=e.getAttribute?.("clay");return!!(n&&n.split(/\s+/).includes(t)||e.hasAttribute?.(t))}function pe(e,t){if(K(e,t))return!0;for(let[n,r]of Object.entries(wt))if(r.includes(t)&&K(e,n))return!0;return!1}function F(e){let t=ee[e];if(!t)throw new Error(`Unknown region capability: ${e}`);return[...t.tokens,...t.bundles].flatMap(n=>[`[clay~="${n}"]`,`[${n}]`]).join(", ")}function Et(e,t){let n=e&&e.nodeType===1?e:e?.parentElement;for(;n&&n.nodeType===1;){let r=ee[t];if(!r)throw new Error(`Unknown region capability: ${t}`);if(r.tokens.some(i=>pe(n,i))||r.bundles.some(i=>K(n,i)))return n;n=n.parentElement}return null}function $e(e,t){return!!Et(e,t)}var me=Object.freeze({refusedRuleForms:["innerHTML","outerHTML"],refusedTargets:["script","style","template","noscript","iframe","object","embed","xmp","plaintext","noembed","noframes","meta","link","base","animate","set","animatemotion","animatetransform"],refusedAttributes:["style","srcdoc","is","http-equiv","sandbox","allow","nonce","integrity","charset","htmlclaytoken","htmlclayid","data-rules-name","data-rules-version","clay","contenteditable",...De],refusedAttributePrefixes:["on"],urlAttributes:["href","src","srcset","action","formaction","poster","cite","data","ping","background","longdesc","usemap","xlink:href","manifest","codebase","icon"],refusedSchemes:["javascript","vbscript","data"]}),Ot=new Set(["textContent","innerText"]);function We(e){let n=String(e).replace(/^[\u0000- ]+|[\u0000- ]+$/g,"").replace(/[\t\n\r]/g,"").match(/^([a-zA-Z][a-zA-Z0-9+.-]*):/);return n?n[1].toLowerCase():null}var xt=/^[^\t\n\f\r "'>/=\u0000-\u001f\u007f]+$/;function ve(e,t,n=me){if(!xt.test(String(e)))return`attribute name ${JSON.stringify(String(e))} is not valid`;let r=String(e).toLowerCase();if(n.refusedAttributePrefixes.some(i=>r.startsWith(i)))return`attribute "${r}" can run script`;if(n.refusedAttributes.includes(r))return`attribute "${r}" is not content`;if(n.urlAttributes.includes(r)&&t!=null){let i=r==="srcset"?String(t).split(",").map(s=>s.trim().split(/\s+/)[0]).filter(Boolean):[String(t)];for(let s of i){let l=We(s);if(l&&n.refusedSchemes.includes(l))return`"${l}:" URLs are not allowed in "${r}"`}}return null}function ye(e,t){let n=e.prop(t,"tagName");return n?String(n).toLowerCase():""}function St(e,t){let n=ye(e,t)||"node",r=e.attr(t,"id");return r?`<${n}#${r}>`:`<${n}>`}function bt(e,t,n){let r=t;for(;r;){let i=ye(e,r);if(i&&n.refusedTargets.includes(i))return i;r=e.parent(r)}return null}function Be(e,t){return e.find(t,"script[data-rules-name]",{includeRulesTag:!0,templateAttr:null}).length>0}function Rt(e,t){return ye(e,t)==="script"&&e.attr(t,"data-rules-name")!=null?!0:Be(e,t)}function te(e,t=me){let n=[],r=(o,f)=>(n.push({target:St(e,o),reason:f}),!1),i=o=>{let f=bt(e,o,t);return f?r(o,`inside <${f}>, which is not content`):!0},s=o=>i(o)?Be(e,o)?r(o,"a text write here would delete the data rules tag"):!0:!1,l=(o,f,u)=>{if(!i(o))return!1;let m=ve(f,u,t);return m?r(o,m):!0};return{...e,text(o,f){if(f===void 0)return e.text(o);s(o)&&e.text(o,f)},attr(o,f,u){if(u===void 0)return e.attr(o,f);l(o,f,u)&&e.attr(o,f,u)},removeAttr(o,f){l(o,f,null)&&e.removeAttr(o,f)},prop(o,f,u){if(u===void 0)return e.prop(o,f);if(t.refusedRuleForms.includes(f))return r(o,`"@${f}" writes HTML, only text is allowed`);if(Ot.has(f)){s(o)&&e.prop(o,f,u);return}l(o,f==="className"?"class":f,u)&&e.prop(o,f,u)},remove(o){if(Rt(e,o)){r(o,"removing this would delete the data rules tag");return}e.remove(o)},replaceWith(o,f){return f===e.prop(o,"outerHTML")||r(o,'"@outerHTML" writes HTML, only text is allowed'),o},refusals:n,assertClean(){if(n.length)throw new H(n.slice())}}}function V(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function He(e){return e.reduce((t,n)=>typeof n=="number"?`${t}[${n}]`:t?`${t}.${n}`:n,"")}function ge(e,t,n,r,i={}){let s=[],l=[];function c(f,u,m){if(Array.isArray(f)){let[,d]=f;if(!Array.isArray(u)||!V(d))return;u.forEach((w,a)=>c(d,w,[...m,a]));return}if(!(!V(f)||!V(u)))for(let d of Object.keys(u))Object.prototype.hasOwnProperty.call(f,d)?c(f[d],u[d],[...m,d]):s.push(He([...m,d]))}function o(f,u,m,d){if(m!==void 0){if(typeof u=="string"){if(u.endsWith("[]")||u==="."||u.startsWith("@"))return;let w=b(u),a=w===-1?u:u.slice(0,w);if(!a)return;e.find(f,a,i).length===0&&l.push({path:He(d),selector:a});return}if(!Array.isArray(u)&&V(u)&&V(m))for(let[w,a]of Object.entries(u))o(f,a,m[w],[...d,w])}}return c(n,r,[]),o(t,n,r,[]),{unknownKeys:s,unmatched:l}}function Ae(e,t,n){if(n&&typeof n=="object")return{rules:n,tagNode:null};if(typeof n=="string"){let r=t&&t.ownerDocument?t.ownerDocument:t;return j(e,r,n)}return null}var Ct=/:(?:focus(?:-within|-visible)?|hover|active|visited|defined)\b/i;function Mt(e,t){if(!/^(INPUT|TEXTAREA|SELECT|OPTION)$/.test(e.tagName||""))return;let n=(e.getAttribute?.("type")||"").toLowerCase();"value"in e&&"value"in t&&e.tagName!=="OPTION"&&n!=="checkbox"&&n!=="radio"&&n!=="file"&&(t.value=e.value),e.tagName==="INPUT"&&(n==="checkbox"||n==="radio")&&(t.checked=e.checked),e.tagName==="OPTION"&&(t.selected=e.selected),"indeterminate"in e&&"indeterminate"in t&&(t.indeterminate=e.indeterminate)}function qe(e,t,n,r){if(r)return!!e.closest?.(t);let i=e;for(;i?.nodeType===1;){if(i.matches(t))return!0;if(i===n)break;i=i.parentElement}return!1}function Ue(e,t,n,r,i,s){return(s?$e(e,t):qe(e,n,i,!1))||!!(r&&(s&&e!==i?e.matches(r):qe(e,r,i,s)))}function Pt(e,t){let n=ee[t];return n.tokens.some(r=>pe(e,r))||n.bundles.some(r=>K(e,r))}var It=new Set(["INPUT","TEXTAREA","SELECT","OPTION"]);function ze(e,t,n,r){if(e.nodeType===1&&r(e)){n.dropped.push(t);return}n.cloneToLive.set(t,e),n.liveToClone.set(e,t);let i=e,s=t;if(e.nodeType===1){if(It.has(e.tagName)&&n.controls.push(e,t),e.tagName==="TEMPLATE"){for(;t.firstChild;)t.removeChild(t.firstChild);i=e.content,s=t.content,n.cloneToLive.set(s,i),n.liveToClone.set(i,s)}}else if(e.nodeType!==11)return;let l=s.firstChild;for(let c=i.firstChild;c&&l;c=c.nextSibling)ze(c,l,n,r),l=l.nextSibling}function J(e,{capability:t="data",exclude:n=null,inherit:r=!0,provenance:i=null}={}){if(!e)throw new TypeError("createContentView requires a DOM context");let s=e.nodeType===9?e:e.ownerDocument;if(!s?.implementation?.createHTMLDocument)throw new TypeError("createContentView requires an HTML DOM implementation");let l=s.implementation.createHTMLDocument(""),c=i||new WeakMap,o=new WeakMap,f=e.nodeType===9?e.documentElement:e;n&&l.documentElement.matches(n);let u=F(t),m=r?a=>Pt(a,t)||!!(n&&a.matches(n)):a=>Ue(a,t,u,n,f,!1),d=null;if(f.nodeType!==1||!Ue(f,t,u,n,f,r)){d=l.importNode(f,!0);let a={cloneToLive:c,liveToClone:o,dropped:[],controls:[]};ze(f,d,a,m);for(let p of a.dropped)p.remove();for(let p=0;p<a.controls.length;p+=2)Mt(a.controls[p],a.controls[p+1])}e.nodeType===9&&d&&(l.replaceChild(d,l.documentElement),o.set(e,l),c.set(l,e));let w=a=>{if(Ct.test(a))throw new Error(`Filtered content queries do not support stateful selector: ${a}`)};return{root:d,document:l,capability:t,selector:F(t),cloneToLive:c,liveToClone:o,original(a){return c.get(a)||null},cloneOf(a){return o.get(a)||null},query(a,p=d){return w(a),Array.from(p.querySelectorAll(a),g=>c.get(g)||g)},text(a=d){return(a===d?d:o.get(a))?.textContent||""},html(a=d){return(a===d?d:o.get(a))?.innerHTML??""},clone(a=d){let p=a===d?d:o.get(a);return p?l.importNode(p,!0):null}}}function Fe(e){return e&&e.nodeType===1&&e.tagName==="SCRIPT"&&e.hasAttribute&&e.hasAttribute("data-rules-name")}function kt(e){return e?(e.nodeType===9||e.nodeType===11,e):null}function Ke(e,t,n){!e||e.nodeType!==1||(t==="value"&&e.tagName==="INPUT"?e.value=n===null?"":n:t==="checked"&&e.tagName==="INPUT"?e.checked=n!==null:t==="selected"&&e.tagName==="OPTION"&&(e.selected=n!==null))}function Ve(e,t){e&&e.tagName==="TEXTAREA"&&(e.value=t)}function Je(e){if(!e||e.nodeType!==1)return;let t=[e,...e.querySelectorAll?e.querySelectorAll("textarea, input, option"):[]];for(let n of t)if(n.tagName==="TEXTAREA")n.value=n.defaultValue;else if(n.tagName==="INPUT"){let r=n.type;r!=="file"&&r!=="checkbox"&&r!=="radio"&&(n.value=n.defaultValue),n.checked=n.defaultChecked}else n.tagName==="OPTION"&&(n.selected=n.defaultSelected)}var x={semanticExclude:!0,find(e,t,n={}){let r=kt(e);if(!r||!r.querySelectorAll)return[];let i=Array.from(r.querySelectorAll(t));n.includeRulesTag||(i=i.filter(c=>!Fe(c)));let s=[];n.skip&&s.push(n.skip);let l=n.templateAttr===null?null:n.templateAttr||"cms-template";if(l&&s.push("["+l+"]"),s.length){let c=s.join(", ");i=i.filter(o=>!o.closest||!o.closest(c))}return i},parent(e){return e?e.parentElement:null},children(e){return e?Array.from(e.children):[]},matches(e,t){return!!(e&&e.matches)&&e.matches(t)},text(e,t){if(t===void 0)return(e.textContent||"").trim();e.textContent=t,Ve(e,t)},attr(e,t,n){if(n===void 0)return e.hasAttribute&&e.hasAttribute(t)?e.getAttribute(t):null;e.setAttribute(t,n),Ke(e,t,n)},removeAttr(e,t){e&&e.removeAttribute&&e.removeAttribute(t),Ke(e,t,null)},prop(e,t,n){if(n===void 0){let r=e?e[t]:void 0;return r!==void 0?r:null}e[t]=n},clone(e){let t=e.cloneNode(!0);return Je(t),t},insertAt(e,t,n){let r=e.children[n]||null;e.insertBefore(t,r)},insertBefore(e,t){e.parentNode.insertBefore(t,e)},insertAfter(e,t){e.parentNode.insertBefore(t,e.nextSibling)},identity(e){return e||null},remove(e){e&&e.parentNode&&e.parentNode.removeChild(e)},replaceWith(e,t){if(!e||!e.parentNode)throw new Error("dom.replaceWith: node has no parent");let r=e.ownerDocument.createElement("template");r.innerHTML=t;let i=r.content.firstElementChild;if(!i)throw new Error("dom.replaceWith: html did not parse to an element");return e.parentNode.replaceChild(i,e),i},stripIds(e){let t=0;return e.id&&(e.removeAttribute("id"),t++),(e.querySelectorAll?e.querySelectorAll("[id]"):[]).forEach(r=>{r.removeAttribute("id"),t++}),t},sameNode(e,t){return e===t}};function M(e,t={}){if(t.exclude===null)return x;let n=[F("data"),t.exclude].filter(Boolean).join(", "),r=e.nodeType===9?e:e.ownerDocument||e,i=e.nodeType===9?e.documentElement:e;if(!t._write&&!i?.matches?.(n)&&!i?.querySelector?.(n)&&!r?.querySelector?.(n))return x;let s=e.nodeType===9||!e.isConnected?e:e.ownerDocument,l=e.nodeType===9?e:e.ownerDocument,c=null,o=()=>c||(c=J(s,{capability:"data",exclude:t.exclude||null})),f=a=>{let p=o();return a===e?p.cloneOf(e):p.cloneOf(a)||a},u=a=>c?.original(a)||a,m=(a,p)=>{o().liveToClone.set(a,p),o().cloneToLive.set(p,a);let g=a.childNodes||[],h=p.childNodes||[];for(let y=0;y<Math.min(g.length,h.length);y++)m(g[y],h[y])},d=(a,p,g,h)=>{let y=Array.from(a.childNodes).filter(E=>c.cloneOf(E)),T=y[0];for(;T&&y.includes(T);)T=T.nextSibling;for(let E of y)E.remove();if(g==="innerHTML"){let E=l.createElement("template");E.innerHTML=h;for(let D of Array.from(E.content.childNodes))a.insertBefore(D,T||null)}else a.insertBefore(l.createTextNode(h),T||null),Ve(a,h);let S=J(a,{capability:"data",exclude:t.exclude||null});p.replaceChildren(...Array.from(S.root?.childNodes||[]));let O=E=>{let D=S.original(E);D&&(c.liveToClone.set(D,E),c.cloneToLive.set(E,D));for(let Ze of Array.from(E.childNodes||[]))O(Ze)};for(let E of Array.from(p.childNodes))O(E)},w={...x,find(a,p,g={}){let h=f(a);if(!h?.querySelectorAll)return[];let y=o().query(p,h);g.includeRulesTag||(y=y.filter(S=>!Fe(S)));let A=[];g.skip&&A.push(g.skip);let T=g.templateAttr===null?null:g.templateAttr||"cms-template";if(T&&A.push(`[${T}]`),A.length){let S=A.join(", ");y=y.filter(O=>!O.closest?.(S))}return y},parent(a){let p=f(a)?.parentElement;return p?u(p):null},children(a){return Array.from(f(a)?.children||[],u)},text(a,p){if(p===void 0){let y=u(a);return!y?.matches?.(n)&&!y?.querySelector?.(n)?x.text(y):(f(a)?.textContent||"").trim()}let g=u(a);if(!g?.matches?.(n)&&!g?.querySelector?.(n)&&!c){x.text(g,p);return}let h=o().cloneOf(g);h?d(g,h,"textContent",p):x.text(g,p)},attr(a,p,g){let h=u(a);if(g===void 0)return x.attr(h,p);x.attr(h,p,g);let y=c?.cloneOf(h);y&&(x.attr(y,p,g),J(h,{capability:"data",exclude:t.exclude||null}).root===null&&(y.remove(),c.liveToClone.delete(h),c.cloneToLive.delete(y)))},removeAttr(a,p){let g=u(a);x.removeAttr(g,p);let h=c?.cloneOf(g);h&&x.removeAttr(h,p)},prop(a,p,g){let h=u(a);if(g===void 0)return p==="innerHTML"||p==="outerHTML"||p==="textContent"||p==="innerText"?x.prop(f(h),p):x.prop(h,p);let y=p==="innerHTML"||p==="textContent"||p==="innerText",A=y?o().cloneOf(h):c?.cloneOf(h);A&&y?d(h,A,p,g):(x.prop(h,p,g),A&&x.prop(A,p,g))},clone(a){let p=f(a);if(p===a)return x.clone(a);let g=l.importNode(p,!0);return Je(g),g},insertAt(a,p,g){let h=u(a),A=w.children(h)[g]||(()=>{for(let O=h.children.length-1;O>=0;O--){let E=h.children[O];if(o().cloneOf(E))return E.nextElementSibling}return h.firstElementChild})(),T=u(p);h.insertBefore(T,A||null);let S=o().cloneOf(h);if(S){let O=o().cloneOf(T);O||(O=l.importNode(T,!0),m(T,O));let E=Array.from(S.children);S.insertBefore(O,E[g]||null)}},insertBefore(a,p){let g=u(a),h=u(p);g.parentNode.insertBefore(h,g);let y=o().cloneOf(g.parentNode);if(y){let A=o().cloneOf(h);A||(A=l.importNode(h,!0),m(h,A));let T=o().cloneOf(g);T?T.before(A):y.appendChild(A)}},insertAfter(a,p){let g=u(a),h=u(p);g.parentNode.insertBefore(h,g.nextSibling);let y=o().cloneOf(g.parentNode);if(y){let A=o().cloneOf(h);A||(A=l.importNode(h,!0),m(h,A));let T=o().cloneOf(g);T?T.after(A):y.appendChild(A)}},identity(a){return u(a)||null},remove(a){let p=u(a),g=o().cloneOf(p);x.remove(p),g&&x.remove(g)},replaceWith(a,p){let g=u(a),h=o().cloneOf(g),y=x.replaceWith(g,p);if(h){let A=J(y,{capability:"data",exclude:t.exclude||null});if(!A.root)h.remove();else{h.replaceWith(A.root);let T=S=>{let O=A.original(S);O&&(c.liveToClone.set(O,S),c.cloneToLive.set(S,O));for(let E of Array.from(S.childNodes||[]))T(E)};T(A.root)}}return y}};return w}var G=x;var ne={extract:(e,t,n={})=>C(M(e,n),e,t,n),apply:(e,t,n,r={})=>I(M(e,{...r,_write:!0}),e,t,n,r),findRulesIn:(e,t)=>j(G,e,t),findRules:(e,t)=>Ae(G,e,t),bind:(e,t,n={})=>{let r=Ae(G,e,t);if(!r){let i=typeof t=="string"?`data-rules-name~="${t}"`:"the provided rules object";throw new Error(`hyper-html-api: could not resolve rules for ${i}`)}return{...r,get:()=>C(M(e,n),e,r.rules,n),set:i=>I(M(e,{...n,_write:!0}),e,r.rules,i,n)}},parseStrict:de,parseRelaxed:z,ruleAttrIndex:b,splitRule:le,errors:R,DOM_PROPERTIES:X},Te=e=>!!e&&typeof e.nodeType=="number";function Ge(e){let t=e&&e.ownerDocument?e.ownerDocument:e,n=j(G,t,"api");if(!n)throw new R.NoRulesTag("api");return n.rules}function Lt(e){if(e.nodeType===9)return e;let t=e.ownerDocument?.documentElement;if(t?.contains(e))return t;let n=e;for(;n.parentNode;)n=n.parentNode;return n}function jt(e){if(e.nodeType!==11||!e.host)return e.cloneNode(!0);let t=e.ownerDocument.createDocumentFragment();for(let n of e.childNodes)t.appendChild(n.cloneNode(!0));return t}function _t(e,t){let n=[];for(;t!==e;){let r=t.parentNode;n.push(Array.prototype.indexOf.call(r.childNodes,t)),t=r}return n.reverse()}function Dt(e,t){return t.reduce((n,r)=>n.childNodes[r],e)}function _(e,t){let n=e.querySelectorAll?Array.from(e.querySelectorAll(t)):[];return e.matches?.(t)&&n.unshift(e),n}function $t(e,t){let n=_(e,"option"),r=_(t,"option");n.forEach((o,f)=>r[f].selected=o.selected);let i=_(e,"input"),s=_(t,"input");i.forEach((o,f)=>{let u=o.type.toLowerCase();u!=="file"&&(s[f].value=o.value),(u==="checkbox"||u==="radio")&&(s[f].checked=o.checked)});let l=_(e,"textarea"),c=_(t,"textarea");l.forEach((o,f)=>c[f].value=o.value)}function we(e,t){if(t!==void 0){if(typeof e=="string"){if(e.endsWith("[]"))return;let n=e.startsWith("@")?0:b(e);if(n===-1)return;let r=e.slice(n+1);if($.has(r))throw new R.RuleTargetReadOnly(r);return}if(Array.isArray(e)){if(!Array.isArray(t))return;t.forEach(n=>we(e[1],n));return}if(e&&typeof e=="object"&&t&&typeof t=="object"&&!Array.isArray(t))for(let[n,r]of Object.entries(e))we(r,t[n])}}function Wt(e,t,n){let r={templateAttr:"cms-template"},i=Lt(e),s=_t(i,e),l=jt(i);$t(i,l);let c=Dt(l,s),o=M(l,{...r,_write:!0}),f=ge(o,c,t,n,r);if(f.unknownKeys.length||f.unmatched.length)throw new R.WriteRejected(f.unknownKeys,f.unmatched);let u=te(o);I(u,c,t,n,r),u.assertClean(),we(t,n);let m=te(M(i,{...r,_write:!0}));I(m,e,t,n,r),m.assertClean()}function vt(e){if(!(e instanceof Error))return e;let t=e.name||"Error";try{e.code=t}catch{Object.defineProperty(e,"code",{value:t,configurable:!0,enumerable:!0})}return e instanceof R.WriteRefused?e.details=e.refusals:e instanceof R.WriteRejected?e.details={unknownKeys:e.unknownKeys,unmatched:e.unmatched}:e instanceof R.ShapeMismatch?e.details=e.mismatches:Array.isArray(e.path)?e.details={path:e.path}:typeof e.target=="string"?e.details={target:e.target}:e.token!==void 0?e.details={token:e.token}:e.version!==void 0?e.details={version:e.version}:e.details={},e}function Xe(e,t){let n=Te(e)?e:document,r=Te(e)?t:e;return r===void 0?C(M(n),n,Ge(n)):ne.bind(n,r).get()}function Ye(e,t,n){try{if(!Te(e))throw new Error("hyper-html-api: applyData(root, data, source?) needs a DOM root as the first argument.");let r=n===void 0?Ge(e):ne.bind(e,n).rules;Wt(e,r,t)}catch(r){throw vt(r)}return e}var Bt={engine:ne,extractData:Xe,applyData:Ye},Fn=Bt;export{Ye as applyData,Fn as default,ne as engine,Xe as extractData};
4
+ var Qe=Object.defineProperty;var et=(e,t)=>{for(var n in t)Qe(e,n,{get:t[n],enumerable:!0})};var G=["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"],Y=new Set(G),re=new Set(["textContent","innerText","innerHTML","value","checked","selected","disabled","readOnly","type","id","className","title"]),$=new Set(["tagName","nodeName","nodeType","nodeValue","childElementCount","classList","baseURI","documentURI","contentType","offsetWidth","offsetHeight","clientWidth","clientHeight","scrollWidth","scrollHeight","currentSrc","duration","paused","dataset"]),Ee=new Set(["checked","selected","disabled","readOnly","paused"]);function ie(e,t){return t==null?Ee.has(e)?!1:"":Ee.has(e)?t==="false"?!1:!!t:t}var R={};et(R,{EmptyListInsert:()=>N,MAX_RULE_DEPTH:()=>L,MaxRuleDepthExceeded:()=>P,NoRulesTag:()=>oe,RuleTargetReadOnly:()=>B,RulesParseError:()=>k,ShapeMismatch:()=>v,UnknownRulesVersion:()=>W,WriteNotRoundTripped:()=>Z,WriteRefused:()=>H,WriteRejected:()=>se});var k=class extends Error{constructor(t,n){super(t),this.name="RulesParseError",this.cause=n}},W=class extends Error{constructor(t){super(`unknown rules version: ${t}. Library supports "1".`),this.name="UnknownRulesVersion",this.version=t}},L=20,P=class extends Error{constructor(t){super(`rule depth exceeded ${L} at path: ${t.join(".")}`),this.name="MaxRuleDepthExceeded",this.path=t}},v=class extends Error{constructor(t){super(`shape mismatch: ${t.length} field(s) failed validation`),this.name="ShapeMismatch",this.mismatches=t}},N=class extends Error{constructor(t,n){super(n?`cannot add items to empty list at "${t.join(".")}" \u2014 ${n}`:`cannot add items to empty list at "${t.join(".")}" \u2014 no sibling to clone as template. Seed the list with a hidden item first.`),this.name="EmptyListInsert",this.path=t}},B=class extends Error{constructor(t){super(`cannot write to read-only DOM property "${t}"`),this.name="RuleTargetReadOnly",this.target=t}},H=class extends Error{constructor(t){super(`write refused: ${t.length} write(s) broke the content-only policy`),this.name="WriteRefused",this.refusals=t}};function tt(e){return e.reduce((n,r)=>typeof r=="number"?`${n}[${r}]`:n?`${n}.${r}`:String(r),"")||"(root)"}var Z=class extends Error{constructor(t){super(`write did not round-trip at "${tt(t)}"`),this.name="WriteNotRoundTripped",this.path=t}},oe=class extends Error{constructor(t){super(`no <script data-rules-name~="${t}"> rules tag in this document`),this.name="NoRulesTag",this.token=t}},se=class extends Error{constructor(t,n){super(`write rejected: ${t.length} unknown key(s), ${n.length} rule(s) with no matching element`),this.name="WriteRejected",this.unknownKeys=t,this.unmatched=n}};function b(e){let t=0,n=null,r=-1;for(let i=0;i<e.length;i++){let s=e[i];s==="\\"?i++:n?s===n&&(n=null):s==='"'||s==="'"?n=s:s==="["||s==="("?t++:s==="]"||s===")"?t>0&&t--:s==="@"&&t===0&&(r=i)}return r}function le(e){let t=b(e);return t===-1?{selector:e,prop:null}:{selector:e.slice(0,t),prop:e.slice(t+1)||null}}function ce(e){let t=0,n=null,r=-1,i=!1;for(let s=0;s<e.length;s++){let l=e[s];l==="\\"?s++:n?l===n&&(n=null):l==='"'||l==="'"?n=l:l==="["||l==="("?t++:l==="]"||l===")"?t>0&&t--:t===0&&l===">"?r=s:t===0&&l===","&&(i=!0)}return i||r===-1||!nt(e,r+1)?null:e.slice(0,r).trim()||null}function nt(e,t){let n=t,r=e.replace(/\s+$/,"").length;for(;n<r&&/\s/.test(e[n]);)n++;let i=0,s=null;for(;n<r;n++){let l=e[n];if(l==="\\")n++;else if(s)l===s&&(s=null);else if(l==='"'||l==="'")s=l;else if(l==="["||l==="(")i++;else if(l==="]"||l===")")i>0&&i--;else if(i===0&&(l==="+"||l==="~"||/\s/.test(l)))return!1}return!0}function C(e,t,n,r={}){if(Object.prototype.hasOwnProperty.call(r,"exclude")&&e.semanticExclude===!1)throw new Error("This adapter does not support semantic exclude queries; omit exclude or use the DOM adapter.");return fe(e,t,n,{depth:0,path:[]},r)}function fe(e,t,n,r,i){if(r.depth>L)throw new P(r.path);if(typeof n=="string")return rt(e,t,n,r,i);if(Array.isArray(n)){let[s,l]=n,c=e.find(t,s,i);return xe(i,r,c),c.map((o,f)=>fe(e,o,l,{depth:r.depth+1,path:[...r.path,f]},i))}if(typeof n=="object"&&n!==null){let s={};for(let[l,c]of Object.entries(n))s[l]=fe(e,t,c,{depth:r.depth+1,path:[...r.path,l]},i);return s}return null}function rt(e,t,n,r,i){if(n.endsWith("[]")){let c=n.slice(0,-2),o=e.find(t,c,i);return xe(i,r,o),o.map(f=>e.text(f))}if(n.startsWith("@"))return Oe(e,t,n.slice(1));let s=b(n);if(s!==-1){let c=n.slice(0,s),o=n.slice(s+1),f=c?e.find(t,c,i):[t];return f.length===0?null:Oe(e,f[0],o)}if(n===".")return e.text(t);let l=e.find(t,n,i);return l.length===0?null:e.text(l[0])}function xe(e,t,n){if(typeof e.onRowsRead=="function")try{e.onRowsRead(t.path.slice(),n)}catch(r){console.warn(`[hyper-html-api] onRowsRead threw at "${t.path.join(".")||"(root)"}"`,r)}}function Oe(e,t,n){if(Y.has(n)){let i=e.prop(t,n);return i==null?null:String(i)}let r=e.attr(t,n);return r??null}function Re(e,t,n,r){let i=e.length,s=t.length,l=new Array(i).fill(-1);if(r){let h=new Set;for(let y=0;y<i;y++){let A=r[y];!(A>=0&&A<s)||h.has(A)||(l[y]=A,h.add(A))}}if(i===0||s===0)return l;let c=e.map(h=>Se(h,n)),o=t.map(h=>Se(h,n)),f=new Array(s).fill(!1);for(let h of l)h>=0&&(f[h]=!0);let u=new Map;o.forEach((h,y)=>{f[y]||u.set(h,u.has(h)?-1:y)});let m=new Map;c.forEach((h,y)=>{l[y]>=0||m.set(h,(m.get(h)||0)+1)}),c.forEach((h,y)=>{if(l[y]>=0||m.get(h)!==1)return;let A=u.get(h);A===void 0||A===-1||f[A]||(l[y]=A,f[A]=!0)});let d=[];for(let h=0;h<i;h++)l[h]<0&&d.push(h);let w=[];for(let h=0;h<s;h++)f[h]||w.push(h);if(d.length===0||w.length===0)return l;let a=i*s+1,p=it(e,t,n),g=(h,y)=>p(h,y)*a+Math.abs(h-y);for(let[h,y]of ot(d,w,g))l[h]=y;return l}var Ne=e=>typeof e=="object"&&e!==null;function Se(e,t){if(!Ne(t))return e==null?" null":String(e);let n=Object.keys(t);return JSON.stringify(n.map(r=>{let i=JSON.stringify(e?.[r]);return i===void 0?" undef":i}))}function it(e,t,n){if(!Ne(n))return(c,o)=>e[c]===t[o]?0:1;let r=Object.keys(n),i=c=>r.map(o=>JSON.stringify(c?.[o])),s=e.map(i),l=t.map(i);return(c,o)=>{let f=s[c],u=l[o],m=0;for(let d=0;d<r.length;d++)f[d]!==u[d]&&m++;return m}}function ot(e,t,n){return e.length<=t.length?be(e,t,n,!1):be(t,e,(r,i)=>n(i,r),!0)}function be(e,t,n,r){let i=e.length,s=t.length,l=[];for(let m=0;m<=i;m++)l.push(new Float64Array(s+1).fill(1/0));let c=[];for(let m=0;m<=i;m++)c.push(new Uint8Array(s+1));for(let m=0;m<=s;m++)l[i][m]=0;for(let m=i-1;m>=0;m--)for(let d=s-1;d>=0;d--){let w=n(e[m],t[d])+l[m+1][d+1],a=l[m][d+1];w<=a?(l[m][d]=w,c[m][d]=1):l[m][d]=a}let o=[],f=0,u=0;for(;f<i&&u<s;)c[f][u]&&(o.push(r?[t[u],e[f]]:[e[f],t[u]]),f++),u++;return o}function ae(e,t,n,r,i,s,l,c={}){let o=e.find(t,n,c);if(i.length===0){o.forEach(T=>e.remove(T)),ue(c,"onRowsApplied",s.path,[]);return}let f=i.length>o.length,u=o[0]||null;if(f&&!u&&(u=ft(e,t,n,c),!u))throw new N(s.path);let m=o.map(T=>ct(e,T,r,c)),d=null;if(f&&u){d=e.clone(u),c.templateAttr&&e.removeAttr(d,c.templateAttr);let T=e.stripIds(d);T>0&&console.warn(`[hyper-html-api] stripped ${T} id attribute(s) from cloned template at "${s.path.join(".")||"(root)"}"`)}let w=Re(i,m,r,st(e,o,i,s,c)),a=o.length>0?e.parent(o[0]):dt(e,t,n,u,s,c),p=o.length>0?ke(e,a,o[0]):0,g=yt(e,o),h=new Set,y=[],A=i.map((T,S)=>{let O=w[S];if(O>=0)return h.add(O),y.push(!1),o[O];y.push(!0);let E=e.clone(d);return e.stripIds(E),E});o.forEach((T,S)=>{h.has(S)||e.remove(T)}),g?mt(e,a,p,A,y):gt(e,A,y,a,p),lt(e,A,r,i,s,l,c),ue(c,"onRowsApplied",s.path,A)}function ue(e,t,n,r){if(typeof e[t]=="function")try{return e[t](n.slice(),r)}catch(i){console.warn(`[hyper-html-api] ${t} threw at "${n.join(".")||"(root)"}"`,i);return}}function st(e,t,n,r,i){let s=ue(i,"identifyRows",r.path,n);if(!Array.isArray(s))return null;let l=new Array(n.length).fill(-1),c=new Set,o=new Map(t.map((f,u)=>[e.identity(f),u]));for(let f=0;f<n.length;f++){if(!s[f])continue;let u=o.get(e.identity(s[f]));u===void 0||c.has(u)||(l[f]=u,c.add(u))}return l}function lt(e,t,n,r,i,s,l){t.forEach((c,o)=>{if(n===null){let f=r[o],u=f==null?"":String(f);e.text(c)!==u&&e.text(c,u)}else{let f=s(e,c,n,r[o],{depth:i.depth+1,path:[...i.path,o]},l);f&&f!==c&&(t[o]=f)}})}function ct(e,t,n,r){return n===null?e.text(t):C(e,t,n,r.onRowsRead?{...r,onRowsRead:void 0}:r)}function ke(e,t,n){let r=e.children(t);for(let i=0;i<r.length;i++)if(e.sameNode(r[i],n))return i;return-1}function ft(e,t,n,r){if(!r.templateAttr)return null;let i=/^\s*:scope\s*>\s*/.test(n),s=new RegExp(":not\\(\\["+r.templateAttr.replace(/[.*+?^${}()|[\]\\-]/g,"\\$&")+"\\]\\)","g"),l=n.replace(/^\s*:scope\s*>\s*/,"").replace(s,""),c=i?ut(l):0,o=ce(l),f=t;for(;f;){let u=e.find(f,l,{includeRulesTag:!1,templateAttr:null});for(let m of u)if(e.attr(m,r.templateAttr)!=null&&!(i&&!ht(e,t,m,c))&&!(o&&!e.matches(e.parent(m),o)))return m;f=e.parent(f)}return null}function ut(e){let t=0,n=null,r=1;for(let i=0;i<e.length;i++){let s=e[i];if(s==="\\")i++;else if(n)s===n&&(n=null);else if(s==='"'||s==="'")n=s;else if(s==="["||s==="(")t++;else if(s==="]"||s===")")t>0&&t--;else if(t===0&&s===">")r++;else{if(t===0&&(s==="+"||s==="~"))return null;if(t===0&&/\s/.test(s)){if(!at(e,i))return null;for(;i+1<e.length&&/\s/.test(e[i+1]);)i++}}}return r}function at(e,t){let n=t;for(;n<e.length&&/\s/.test(e[n]);)n++;let r=t>0?e[t-1]:"",i=n<e.length?e[n]:"";return Ce(r)||Ce(i)}function Ce(e){return e===">"||e==="+"||e==="~"}function ht(e,t,n,r){if(r===null)return!0;let i=n;for(let o=0;o<r;o++)if(i=e.parent(i),!i)return!1;let s=e.prop(t,"tagName");if(!s)return!0;let l=e.prop(i,"tagName");if(!l||String(l).toLowerCase()!==String(s).toLowerCase())return!1;let c=new Set(Me(e,i));return Me(e,t).every(o=>c.has(o))}function Me(e,t){let n=e.attr(t,"class");return n?String(n).split(/\s+/).filter(Boolean):[]}function dt(e,t,n,r,i,s){let l=e.parent(r);if(l&&pt(e,t,l)&&!Ie(e,l,s))return l;let c=ce(n);if(!c)throw new N(i.path,`the list selector "${n}" names no container to hold the new rows \u2014 write it as "container > row" (for example "ol.comments > li") so the cloned row lands in the list`);let f=(c===":scope"?e.prop(t,"tagName")?[t]:[]:e.find(t,c,s)).filter(u=>!Ie(e,u,s));if(f.length===0)throw new N(i.path,`no container matching "${c}" inside this context to hold the new rows`);if(f.length>1)throw new N(i.path,`"${c}" matches ${f.length} containers inside this context, so the new rows have no single destination`);return f[0]}function pt(e,t,n){let r=n;for(;r;){if(e.sameNode(r,t))return!0;r=e.parent(r)}return e.parent(t)?!1:e.find(t,"*",{includeRulesTag:!0,templateAttr:null}).some(i=>e.sameNode(i,n))}var Pe=["no-data","editor-ui"];function Ie(e,t,n){let r=t;for(;r;){if(n.templateAttr&&e.attr(r,n.templateAttr)!=null||Pe.some(s=>e.attr(r,s)!=null))return!0;let i=e.attr(r,"clay");if(i&&i.split(/\s+/).some(s=>Pe.includes(s)))return!0;r=e.parent(r)}return!1}function mt(e,t,n,r,i){let s=e.children(t),l=s.map(o=>e.identity(o)),c=!1;r.forEach((o,f)=>{let u=e.identity(o),m=n+f;if(l[m]===u)return;if(!i[f]){let w=l.indexOf(u);w!==-1&&(l.splice(w,1),s.splice(w,1))}let d=Math.min(m,s.length);d<s.length?e.insertBefore(s[d],o):s.length?c?e.insertAfter(s[s.length-1],o):(e.insertAt(t,o,m),c=!0):e.insertAt(t,o,0),l.splice(d,0,u),s.splice(d,0,o)})}function yt(e,t){if(t.length<=1)return!0;let n=e.parent(t[0]);if(!n)return!1;let r=new Map(e.children(n).map((s,l)=>[e.identity(s),l])),i=[];for(let s of t){let l=r.get(e.identity(s));if(l===void 0)return!1;i.push(l)}return i.sort((s,l)=>s-l),i[i.length-1]-i[0]===i.length-1}function gt(e,t,n,r,i){let s=null,l=i;for(let c=0;c<t.length;c++){if(!n[c]){s=t[c];continue}let o=s?e.parent(s):r;if(!o)continue;let f=s?ke(e,o,s)+1:l++;e.insertAt(o,t[c],f),s=t[c]}}function I(e,t,n,r,i={}){if(Object.prototype.hasOwnProperty.call(i,"exclude")&&e.semanticExclude===!1)throw new Error("This adapter does not support semantic exclude queries; omit exclude or use the DOM adapter.");let s=[];if(he(n,r,[],s),s.length)throw new v(s);Q(e,t,n,r,{depth:0,path:[]},i)}function Q(e,t,n,r,i,s={}){if(i.depth>L)throw new P(i.path);if(r===void 0)return t;if(typeof n=="string")return At(e,t,n,r,i,s);if(Array.isArray(n)){let[l,c]=n;return ae(e,t,l,c,r,i,Q,s),t}if(typeof n=="object"&&n!==null){for(let[l,c]of Object.entries(n)){let o=Q(e,t,c,r==null?r:r[l],{depth:i.depth+1,path:[...i.path,l]},s);o&&o!==t&&(t=o)}return t}return t}function At(e,t,n,r,i,s){if(n.endsWith("[]")){let o=n.slice(0,-2);return ae(e,t,o,null,r,i,Q,s),t}if(n.startsWith("@"))return je(e,t,n.slice(1),r);let l=b(n);if(l!==-1){let o=n.slice(0,l),f=n.slice(l+1),u=o?e.find(t,o,s):[t];return u.length===0||je(e,u[0],f,r),t}if(n===".")return Le(e,t,r),t;let c=e.find(t,n,s);return c.length===0||Le(e,c[0],r),t}function Le(e,t,n){let r=n==null?"":String(n);e.text(t)!==r&&e.text(t,r)}function je(e,t,n,r){if($.has(n)){let i=e.prop(t,n);if(i===r||i!=null&&r!=null&&String(i)===String(r))return t;throw new B(n)}if(n==="outerHTML"){let i=r==null?"":String(r);return e.replaceWith(t,i)}if(re.has(n)){let i=ie(n,r);return e.prop(t,n)!==i&&e.prop(t,n,i),t}if(r==null)e.attr(t,n)!=null&&e.removeAttr(t,n);else{let i=String(r);e.attr(t,n)!==i&&e.attr(t,n,i)}return t}function he(e,t,n,r){if(t!==void 0){if(typeof e=="string"){if(e.endsWith("[]")){Array.isArray(t)?t.forEach((i,s)=>{typeof i=="object"&&i!==null&&r.push({path:U([...n,s]),expected:"scalar",got:q(i)})}):r.push({path:U(n),expected:"array",got:q(t)});return}t!==null&&typeof t=="object"&&r.push({path:U(n),expected:"scalar",got:q(t)});return}if(Array.isArray(e)){if(!Array.isArray(t)){r.push({path:U(n),expected:"array",got:q(t)});return}let i=e[1];t.forEach((s,l)=>he(i,s,[...n,l],r));return}if(typeof e=="object"&&e!==null){if(t===null||Array.isArray(t)||typeof t!="object"){r.push({path:U(n),expected:"object",got:q(t)});return}for(let[i,s]of Object.entries(e))he(s,t[i],[...n,i],r)}}}function q(e){return e===null?"null":Array.isArray(e)?"array":typeof e}function U(e){return e.join(".")}function de(e){try{return JSON.parse(e)}catch(t){throw new k(`Invalid strict JSON: ${t.message}`,t)}}function z(e){try{return JSON.parse(e)}catch{}let t={BRACE_OPEN:"{",BRACE_CLOSE:"}",BRACKET_OPEN:"[",BRACKET_CLOSE:"]",COLON:":",COMMA:",",STRING:"STRING",SELECTOR:"SELECTOR",IDENTIFIER:"IDENTIFIER",NUMBER:"NUMBER",BOOLEAN:"BOOLEAN"};function n(i){let s=[],l=0;for(;l<i.length;){let c=i[l];if(/\s/.test(c)){l++;continue}if("{}".includes(c)){s.push({type:c,value:c}),l++;continue}if(c==="["){let m=!1,d=l+1;for(;d<i.length&&/\s/.test(i[d]);)d++;if(d<i.length&&/[a-zA-Z_]/.test(i[d])&&(m=!0),!m){s.push({type:c,value:c}),l++;continue}}if(c==="]"){s.push({type:c,value:c}),l++;continue}if(c===":"){s.push({type:t.COLON,value:c}),l++;continue}if(c===","){s.push({type:t.COMMA,value:c}),l++;continue}if(c==='"'||c==="'"){let m=c,d=l+1;for(;d<i.length&&i[d]!==m;)i[d]==="\\"&&d++,d++;s.push({type:t.STRING,value:i.substring(l+1,d),quoted:!0,sourceQuote:m}),l=d+1;continue}let o=l,f;for(;o<i.length&&!/[{},]/.test(i[o]);)if(i[o]===":"){let m=[":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"],d=!1;for(let w of m){let a=w.substring(1);if(i.substring(o+1,o+1+a.length)===a){d=!0,o+=a.length;break}}if(!d)break}else if(i[o]==="["){for(o++;o<i.length&&i[o]!=="]";){if(i[o]==='"'||i[o]==="'"){let m=i[o];for(o++;o<i.length&&i[o]!==m;)i[o]==="\\"&&o++,o++}o++}o<i.length&&i[o]==="]"&&o++}else o++;f=i.substring(l,o);let u=t.IDENTIFIER;/^-?\d+(\.\d+)?$/.test(f)?u=t.NUMBER:f==="true"||f==="false"||f==="null"?u=t.BOOLEAN:/^[.#@\[]|[.#@\[]| /.test(f)&&(u=t.SELECTOR),s.push({type:u,value:f,quoted:!1}),l=o}return s}function r(i){let s="";for(let l=0;l<i.length;l++){let c=i[l];if("{}".includes(c.type)||"[]".includes(c.type)){s+=c.value;continue}if(c.type===t.COLON){s+=c.value;continue}if(c.type===t.COMMA){let o=i[l+1];if(o&&(o.type==="}"||o.type==="]"))continue;s+=c.value;continue}if(c.type===t.STRING&&c.quoted){let o=c.value;c.sourceQuote==="'"&&(o=o.replace(/\\'/g,"'"),o=o.replace(/(\\*)"/g,(f,u)=>u.length%2===0?u+'\\"':f)),s+=`"${o}"`;continue}if(c.type===t.NUMBER||c.type===t.BOOLEAN){s+=c.value;continue}if(c.type===t.SELECTOR||c.type===t.IDENTIFIER){s+=`"${c.value}"`;continue}s+=`"${c.value}"`}return s}try{let i=n(e),s=r(i);return JSON.parse(s)}catch(i){throw new k("Invalid extraction rules syntax: "+i.message,i)}}var Tt="1",_e=/^[a-zA-Z0-9_-]+$/;function j(e,t,n){let r;if(n===void 0)r="script[data-rules-name]";else{if(typeof n!="string"||!_e.test(n))throw new Error(`hyper-html-api: invalid rules token ${JSON.stringify(n)} (must match ${_e})`);r=`script[data-rules-name~="${n}"]`}let i=e.find(t,r,{includeRulesTag:!0});if(i.length===0)return null;n!==void 0&&i.length>1&&console.warn(`hyper-html-api: ${i.length} rules tags match data-rules-name~="${n}"; using the first.`);let s=i[0],l=e.attr(s,"data-rules-version");if(l!==Tt)throw new W(l);return{rules:z(e.text(s)),tagNode:s}}var ee=Object.freeze({data:Object.freeze({tokens:["no-data"],bundles:["editor-ui"]}),save:Object.freeze({tokens:["no-save"],bundles:["editor-ui"]}),snapshot:Object.freeze({tokens:["no-snapshot"],bundles:["editor-ui"]}),watch:Object.freeze({tokens:["no-watch"],bundles:["editor-ui"]}),undo:Object.freeze({tokens:["no-undo"],bundles:["editor-ui"]}),history:Object.freeze({tokens:[],bundles:["editor-ui"]})}),wt=Object.freeze({"editor-ui":Object.freeze(["no-data","no-save","no-snapshot","no-watch","no-undo"])}),De=Object.freeze(["no-save","no-snapshot","no-trigger-autosave","no-dirty","no-watch","no-undo","no-data","freeze","editor-ui","live"]);function K(e,t){if(!e||e.nodeType!==1)return!1;let n=e.getAttribute?.("clay");return!!(n&&n.split(/\s+/).includes(t)||e.hasAttribute?.(t))}function pe(e,t){if(K(e,t))return!0;for(let[n,r]of Object.entries(wt))if(r.includes(t)&&K(e,n))return!0;return!1}function F(e){let t=ee[e];if(!t)throw new Error(`Unknown region capability: ${e}`);return[...t.tokens,...t.bundles].flatMap(n=>[`[clay~="${n}"]`,`[${n}]`]).join(", ")}function Et(e,t){let n=e&&e.nodeType===1?e:e?.parentElement;for(;n&&n.nodeType===1;){let r=ee[t];if(!r)throw new Error(`Unknown region capability: ${t}`);if(r.tokens.some(i=>pe(n,i))||r.bundles.some(i=>K(n,i)))return n;n=n.parentElement}return null}function $e(e,t){return!!Et(e,t)}var me=Object.freeze({refusedRuleForms:["innerHTML","outerHTML"],refusedTargets:["script","style","template","noscript","iframe","object","embed","xmp","plaintext","noembed","noframes","meta","link","base","animate","set","animatemotion","animatetransform"],refusedAttributes:["style","srcdoc","is","http-equiv","sandbox","allow","nonce","integrity","charset","htmlclaytoken","htmlclayid","data-rules-name","data-rules-version","clay","contenteditable",...De],refusedAttributePrefixes:["on"],urlAttributes:["href","src","srcset","action","formaction","poster","cite","data","ping","background","longdesc","usemap","xlink:href","manifest","codebase","icon"],refusedSchemes:["javascript","vbscript","data"]}),Ot=new Set(["textContent","innerText"]);function We(e){let n=String(e).replace(/^[\u0000- ]+|[\u0000- ]+$/g,"").replace(/[\t\n\r]/g,"").match(/^([a-zA-Z][a-zA-Z0-9+.-]*):/);return n?n[1].toLowerCase():null}var xt=/^[^\t\n\f\r "'>/=\u0000-\u001f\u007f]+$/;function ve(e,t,n=me){if(!xt.test(String(e)))return`attribute name ${JSON.stringify(String(e))} is not valid`;let r=String(e).toLowerCase();if(n.refusedAttributePrefixes.some(i=>r.startsWith(i)))return`attribute "${r}" can run script`;if(n.refusedAttributes.includes(r))return`attribute "${r}" is not content`;if(n.urlAttributes.includes(r)&&t!=null){let i=r==="srcset"?String(t).split(",").map(s=>s.trim().split(/\s+/)[0]).filter(Boolean):[String(t)];for(let s of i){let l=We(s);if(l&&n.refusedSchemes.includes(l))return`"${l}:" URLs are not allowed in "${r}"`}}return null}function ye(e,t){let n=e.prop(t,"tagName");return n?String(n).toLowerCase():""}function St(e,t){let n=ye(e,t)||"node",r=e.attr(t,"id");return r?`<${n}#${r}>`:`<${n}>`}function bt(e,t,n){let r=t;for(;r;){let i=ye(e,r);if(i&&n.refusedTargets.includes(i))return i;r=e.parent(r)}return null}function Be(e,t){return e.find(t,"script[data-rules-name]",{includeRulesTag:!0,templateAttr:null}).length>0}function Rt(e,t){return ye(e,t)==="script"&&e.attr(t,"data-rules-name")!=null?!0:Be(e,t)}function te(e,t=me){let n=[],r=(o,f)=>(n.push({target:St(e,o),reason:f}),!1),i=o=>{let f=bt(e,o,t);return f?r(o,`inside <${f}>, which is not content`):!0},s=o=>i(o)?Be(e,o)?r(o,"a text write here would delete the data rules tag"):!0:!1,l=(o,f,u)=>{if(!i(o))return!1;let m=ve(f,u,t);return m?r(o,m):!0};return{...e,text(o,f){if(f===void 0)return e.text(o);s(o)&&e.text(o,f)},attr(o,f,u){if(u===void 0)return e.attr(o,f);l(o,f,u)&&e.attr(o,f,u)},removeAttr(o,f){l(o,f,null)&&e.removeAttr(o,f)},prop(o,f,u){if(u===void 0)return e.prop(o,f);if(t.refusedRuleForms.includes(f))return r(o,`"@${f}" writes HTML, only text is allowed`);if(Ot.has(f)){s(o)&&e.prop(o,f,u);return}l(o,f==="className"?"class":f,u)&&e.prop(o,f,u)},remove(o){if(Rt(e,o)){r(o,"removing this would delete the data rules tag");return}e.remove(o)},replaceWith(o,f){return f===e.prop(o,"outerHTML")||r(o,'"@outerHTML" writes HTML, only text is allowed'),o},refusals:n,assertClean(){if(n.length)throw new H(n.slice())}}}function V(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function He(e){return e.reduce((t,n)=>typeof n=="number"?`${t}[${n}]`:t?`${t}.${n}`:n,"")}function ge(e,t,n,r,i={}){let s=[],l=[];function c(f,u,m){if(Array.isArray(f)){let[,d]=f;if(!Array.isArray(u)||!V(d))return;u.forEach((w,a)=>c(d,w,[...m,a]));return}if(!(!V(f)||!V(u)))for(let d of Object.keys(u))Object.prototype.hasOwnProperty.call(f,d)?c(f[d],u[d],[...m,d]):s.push(He([...m,d]))}function o(f,u,m,d){if(m!==void 0){if(typeof u=="string"){if(u.endsWith("[]")||u==="."||u.startsWith("@"))return;let w=b(u),a=w===-1?u:u.slice(0,w);if(!a)return;e.find(f,a,i).length===0&&l.push({path:He(d),selector:a});return}if(!Array.isArray(u)&&V(u)&&V(m))for(let[w,a]of Object.entries(u))o(f,a,m[w],[...d,w])}}return c(n,r,[]),o(t,n,r,[]),{unknownKeys:s,unmatched:l}}function Ae(e,t,n){if(n&&typeof n=="object")return{rules:n,tagNode:null};if(typeof n=="string"){let r=t&&t.ownerDocument?t.ownerDocument:t;return j(e,r,n)}return null}var Ct=/:(?:focus(?:-within|-visible)?|hover|active|visited|defined)\b/i;function Mt(e,t){if(!/^(INPUT|TEXTAREA|SELECT|OPTION)$/.test(e.tagName||""))return;let n=(e.getAttribute?.("type")||"").toLowerCase();"value"in e&&"value"in t&&e.tagName!=="OPTION"&&n!=="checkbox"&&n!=="radio"&&n!=="file"&&(t.value=e.value),e.tagName==="INPUT"&&(n==="checkbox"||n==="radio")&&(t.checked=e.checked),e.tagName==="OPTION"&&(t.selected=e.selected),"indeterminate"in e&&"indeterminate"in t&&(t.indeterminate=e.indeterminate)}function qe(e,t,n,r){if(r)return!!e.closest?.(t);let i=e;for(;i?.nodeType===1;){if(i.matches(t))return!0;if(i===n)break;i=i.parentElement}return!1}function Ue(e,t,n,r,i,s){return(s?$e(e,t):qe(e,n,i,!1))||!!(r&&(s&&e!==i?e.matches(r):qe(e,r,i,s)))}function Pt(e,t){let n=ee[t];return n.tokens.some(r=>pe(e,r))||n.bundles.some(r=>K(e,r))}var It=new Set(["INPUT","TEXTAREA","SELECT","OPTION"]);function ze(e,t,n,r){if(e.nodeType===1&&r(e)){n.dropped.push(t);return}n.cloneToLive.set(t,e),n.liveToClone.set(e,t);let i=e,s=t;if(e.nodeType===1){if(It.has(e.tagName)&&n.controls.push(e,t),e.tagName==="TEMPLATE"){for(;t.firstChild;)t.removeChild(t.firstChild);i=e.content,s=t.content,n.cloneToLive.set(s,i),n.liveToClone.set(i,s)}}else if(e.nodeType!==11)return;let l=s.firstChild;for(let c=i.firstChild;c&&l;c=c.nextSibling)ze(c,l,n,r),l=l.nextSibling}function J(e,{capability:t="data",exclude:n=null,inherit:r=!0,provenance:i=null}={}){if(!e)throw new TypeError("createContentView requires a DOM context");let s=e.nodeType===9?e:e.ownerDocument;if(!s?.implementation?.createHTMLDocument)throw new TypeError("createContentView requires an HTML DOM implementation");let l=s.implementation.createHTMLDocument(""),c=i||new WeakMap,o=new WeakMap,f=e.nodeType===9?e.documentElement:e;n&&l.documentElement.matches(n);let u=F(t),m=r?a=>Pt(a,t)||!!(n&&a.matches(n)):a=>Ue(a,t,u,n,f,!1),d=null;if(f.nodeType!==1||!Ue(f,t,u,n,f,r)){d=l.importNode(f,!0);let a={cloneToLive:c,liveToClone:o,dropped:[],controls:[]};ze(f,d,a,m);for(let p of a.dropped)p.remove();for(let p=0;p<a.controls.length;p+=2)Mt(a.controls[p],a.controls[p+1])}e.nodeType===9&&d&&(l.replaceChild(d,l.documentElement),o.set(e,l),c.set(l,e));let w=a=>{if(Ct.test(a))throw new Error(`Filtered content queries do not support stateful selector: ${a}`)};return{root:d,document:l,capability:t,selector:F(t),cloneToLive:c,liveToClone:o,original(a){return c.get(a)||null},cloneOf(a){return o.get(a)||null},query(a,p=d){return w(a),Array.from(p.querySelectorAll(a),g=>c.get(g)||g)},text(a=d){return(a===d?d:o.get(a))?.textContent||""},html(a=d){return(a===d?d:o.get(a))?.innerHTML??""},clone(a=d){let p=a===d?d:o.get(a);return p?l.importNode(p,!0):null}}}function Fe(e){return e&&e.nodeType===1&&e.tagName==="SCRIPT"&&e.hasAttribute&&e.hasAttribute("data-rules-name")}function kt(e){return e?(e.nodeType===9||e.nodeType===11,e):null}function Ke(e,t,n){!e||e.nodeType!==1||(t==="value"&&e.tagName==="INPUT"?e.value=n===null?"":n:t==="checked"&&e.tagName==="INPUT"?e.checked=n!==null:t==="selected"&&e.tagName==="OPTION"&&(e.selected=n!==null))}function Ve(e,t){e&&e.tagName==="TEXTAREA"&&(e.value=t)}function Je(e){if(!e||e.nodeType!==1)return;let t=[e,...e.querySelectorAll?e.querySelectorAll("textarea, input, option"):[]];for(let n of t)if(n.tagName==="TEXTAREA")n.value=n.defaultValue;else if(n.tagName==="INPUT"){let r=n.type;r!=="file"&&r!=="checkbox"&&r!=="radio"&&(n.value=n.defaultValue),n.checked=n.defaultChecked}else n.tagName==="OPTION"&&(n.selected=n.defaultSelected)}var x={semanticExclude:!0,find(e,t,n={}){let r=kt(e);if(!r||!r.querySelectorAll)return[];let i=Array.from(r.querySelectorAll(t));n.includeRulesTag||(i=i.filter(c=>!Fe(c)));let s=[];n.skip&&s.push(n.skip);let l=n.templateAttr===null?null:n.templateAttr||"cms-template";if(l&&s.push("["+l+"]"),s.length){let c=s.join(", ");i=i.filter(o=>!o.closest||!o.closest(c))}return i},parent(e){return e?e.parentElement:null},children(e){return e?Array.from(e.children):[]},matches(e,t){return!!(e&&e.matches)&&e.matches(t)},text(e,t){if(t===void 0)return(e.textContent||"").trim();e.textContent=t,Ve(e,t)},attr(e,t,n){if(n===void 0)return e.hasAttribute&&e.hasAttribute(t)?e.getAttribute(t):null;e.setAttribute(t,n),Ke(e,t,n)},removeAttr(e,t){e&&e.removeAttribute&&e.removeAttribute(t),Ke(e,t,null)},prop(e,t,n){if(n===void 0){let r=e?e[t]:void 0;return r!==void 0?r:null}e[t]=n},clone(e){let t=e.cloneNode(!0);return Je(t),t},insertAt(e,t,n){let r=e.children[n]||null;e.insertBefore(t,r)},insertBefore(e,t){e.parentNode.insertBefore(t,e)},insertAfter(e,t){e.parentNode.insertBefore(t,e.nextSibling)},identity(e){return e||null},remove(e){e&&e.parentNode&&e.parentNode.removeChild(e)},replaceWith(e,t){if(!e||!e.parentNode)throw new Error("dom.replaceWith: node has no parent");let r=e.ownerDocument.createElement("template");r.innerHTML=t;let i=r.content.firstElementChild;if(!i)throw new Error("dom.replaceWith: html did not parse to an element");return e.parentNode.replaceChild(i,e),i},stripIds(e){let t=0;return e.id&&(e.removeAttribute("id"),t++),(e.querySelectorAll?e.querySelectorAll("[id]"):[]).forEach(r=>{r.removeAttribute("id"),t++}),t},sameNode(e,t){return e===t}};function M(e,t={}){if(t.exclude===null)return x;let n=[F("data"),t.exclude].filter(Boolean).join(", "),r=e.nodeType===9?e:e.ownerDocument||e,i=e.nodeType===9?e.documentElement:e;if(!t._write&&!i?.matches?.(n)&&!i?.querySelector?.(n)&&!r?.querySelector?.(n))return x;let s=e.nodeType===9||!e.isConnected?e:e.ownerDocument,l=e.nodeType===9?e:e.ownerDocument,c=null,o=()=>c||(c=J(s,{capability:"data",exclude:t.exclude||null})),f=a=>{let p=o();return a===e?p.cloneOf(e):p.cloneOf(a)||a},u=a=>c?.original(a)||a,m=(a,p)=>{o().liveToClone.set(a,p),o().cloneToLive.set(p,a);let g=a.childNodes||[],h=p.childNodes||[];for(let y=0;y<Math.min(g.length,h.length);y++)m(g[y],h[y])},d=(a,p,g,h)=>{let y=Array.from(a.childNodes).filter(E=>c.cloneOf(E)),T=y[0];for(;T&&y.includes(T);)T=T.nextSibling;for(let E of y)E.remove();if(g==="innerHTML"){let E=l.createElement("template");E.innerHTML=h;for(let D of Array.from(E.content.childNodes))a.insertBefore(D,T||null)}else a.insertBefore(l.createTextNode(h),T||null),Ve(a,h);let S=J(a,{capability:"data",exclude:t.exclude||null});p.replaceChildren(...Array.from(S.root?.childNodes||[]));let O=E=>{let D=S.original(E);D&&(c.liveToClone.set(D,E),c.cloneToLive.set(E,D));for(let Ze of Array.from(E.childNodes||[]))O(Ze)};for(let E of Array.from(p.childNodes))O(E)},w={...x,find(a,p,g={}){let h=f(a);if(!h?.querySelectorAll)return[];let y=o().query(p,h);g.includeRulesTag||(y=y.filter(S=>!Fe(S)));let A=[];g.skip&&A.push(g.skip);let T=g.templateAttr===null?null:g.templateAttr||"cms-template";if(T&&A.push(`[${T}]`),A.length){let S=A.join(", ");y=y.filter(O=>!O.closest?.(S))}return y},parent(a){let p=f(a)?.parentElement;return p?u(p):null},children(a){return Array.from(f(a)?.children||[],u)},text(a,p){if(p===void 0){let y=u(a);return!y?.matches?.(n)&&!y?.querySelector?.(n)?x.text(y):(f(a)?.textContent||"").trim()}let g=u(a);if(!g?.matches?.(n)&&!g?.querySelector?.(n)&&!c){x.text(g,p);return}let h=o().cloneOf(g);h?d(g,h,"textContent",p):x.text(g,p)},attr(a,p,g){let h=u(a);if(g===void 0)return x.attr(h,p);x.attr(h,p,g);let y=c?.cloneOf(h);y&&(x.attr(y,p,g),J(h,{capability:"data",exclude:t.exclude||null}).root===null&&(y.remove(),c.liveToClone.delete(h),c.cloneToLive.delete(y)))},removeAttr(a,p){let g=u(a);x.removeAttr(g,p);let h=c?.cloneOf(g);h&&x.removeAttr(h,p)},prop(a,p,g){let h=u(a);if(g===void 0)return p==="innerHTML"||p==="outerHTML"||p==="textContent"||p==="innerText"?x.prop(f(h),p):x.prop(h,p);let y=p==="innerHTML"||p==="textContent"||p==="innerText",A=y?o().cloneOf(h):c?.cloneOf(h);A&&y?d(h,A,p,g):(x.prop(h,p,g),A&&x.prop(A,p,g))},clone(a){let p=f(a);if(p===a)return x.clone(a);let g=l.importNode(p,!0);return Je(g),g},insertAt(a,p,g){let h=u(a),A=w.children(h)[g]||(()=>{for(let O=h.children.length-1;O>=0;O--){let E=h.children[O];if(o().cloneOf(E))return E.nextElementSibling}return h.firstElementChild})(),T=u(p);h.insertBefore(T,A||null);let S=o().cloneOf(h);if(S){let O=o().cloneOf(T);O||(O=l.importNode(T,!0),m(T,O));let E=Array.from(S.children);S.insertBefore(O,E[g]||null)}},insertBefore(a,p){let g=u(a),h=u(p);g.parentNode.insertBefore(h,g);let y=o().cloneOf(g.parentNode);if(y){let A=o().cloneOf(h);A||(A=l.importNode(h,!0),m(h,A));let T=o().cloneOf(g);T?T.before(A):y.appendChild(A)}},insertAfter(a,p){let g=u(a),h=u(p);g.parentNode.insertBefore(h,g.nextSibling);let y=o().cloneOf(g.parentNode);if(y){let A=o().cloneOf(h);A||(A=l.importNode(h,!0),m(h,A));let T=o().cloneOf(g);T?T.after(A):y.appendChild(A)}},identity(a){return u(a)||null},remove(a){let p=u(a),g=o().cloneOf(p);x.remove(p),g&&x.remove(g)},replaceWith(a,p){let g=u(a),h=o().cloneOf(g),y=x.replaceWith(g,p);if(h){let A=J(y,{capability:"data",exclude:t.exclude||null});if(!A.root)h.remove();else{h.replaceWith(A.root);let T=S=>{let O=A.original(S);O&&(c.liveToClone.set(O,S),c.cloneToLive.set(S,O));for(let E of Array.from(S.childNodes||[]))T(E)};T(A.root)}}return y}};return w}var X=x;var ne={extract:(e,t,n={})=>C(M(e,n),e,t,n),apply:(e,t,n,r={})=>I(M(e,{...r,_write:!0}),e,t,n,r),findRulesIn:(e,t)=>j(X,e,t),findRules:(e,t)=>Ae(X,e,t),bind:(e,t,n={})=>{let r=Ae(X,e,t);if(!r){let i=typeof t=="string"?`data-rules-name~="${t}"`:"the provided rules object";throw new Error(`hyper-html-api: could not resolve rules for ${i}`)}return{...r,get:()=>C(M(e,n),e,r.rules,n),set:i=>I(M(e,{...n,_write:!0}),e,r.rules,i,n)}},parseStrict:de,parseRelaxed:z,ruleAttrIndex:b,splitRule:le,errors:R,DOM_PROPERTIES:G},Te=e=>!!e&&typeof e.nodeType=="number";function Xe(e){let t=e&&e.ownerDocument?e.ownerDocument:e,n=j(X,t,"api");if(!n)throw new R.NoRulesTag("api");return n.rules}function Lt(e){if(e.nodeType===9)return e;let t=e.ownerDocument?.documentElement;if(t?.contains(e))return t;let n=e;for(;n.parentNode;)n=n.parentNode;return n}function jt(e){if(e.nodeType!==11||!e.host)return e.cloneNode(!0);let t=e.ownerDocument.createDocumentFragment();for(let n of e.childNodes)t.appendChild(n.cloneNode(!0));return t}function _t(e,t){let n=[];for(;t!==e;){let r=t.parentNode;n.push(Array.prototype.indexOf.call(r.childNodes,t)),t=r}return n.reverse()}function Dt(e,t){return t.reduce((n,r)=>n.childNodes[r],e)}function _(e,t){let n=e.querySelectorAll?Array.from(e.querySelectorAll(t)):[];return e.matches?.(t)&&n.unshift(e),n}function $t(e,t){let n=_(e,"option"),r=_(t,"option");n.forEach((o,f)=>r[f].selected=o.selected);let i=_(e,"input"),s=_(t,"input");i.forEach((o,f)=>{let u=o.type.toLowerCase();u!=="file"&&(s[f].value=o.value),(u==="checkbox"||u==="radio")&&(s[f].checked=o.checked)});let l=_(e,"textarea"),c=_(t,"textarea");l.forEach((o,f)=>c[f].value=o.value)}function we(e,t){if(t!==void 0){if(typeof e=="string"){if(e.endsWith("[]"))return;let n=e.startsWith("@")?0:b(e);if(n===-1)return;let r=e.slice(n+1);if($.has(r))throw new R.RuleTargetReadOnly(r);return}if(Array.isArray(e)){if(!Array.isArray(t))return;t.forEach(n=>we(e[1],n));return}if(e&&typeof e=="object"&&t&&typeof t=="object"&&!Array.isArray(t))for(let[n,r]of Object.entries(e))we(r,t[n])}}function Wt(e,t,n){let r={templateAttr:"cms-template"},i=Lt(e),s=_t(i,e),l=jt(i);$t(i,l);let c=Dt(l,s),o=M(l,{...r,_write:!0}),f=ge(o,c,t,n,r);if(f.unknownKeys.length||f.unmatched.length)throw new R.WriteRejected(f.unknownKeys,f.unmatched);let u=te(o);I(u,c,t,n,r),u.assertClean(),we(t,n);let m=te(M(i,{...r,_write:!0}));I(m,e,t,n,r),m.assertClean()}function vt(e){if(!(e instanceof Error))return e;let t=e.name||"Error";try{e.code=t}catch{Object.defineProperty(e,"code",{value:t,configurable:!0,enumerable:!0})}return e instanceof R.WriteRefused?e.details=e.refusals:e instanceof R.WriteRejected?e.details={unknownKeys:e.unknownKeys,unmatched:e.unmatched}:e instanceof R.ShapeMismatch?e.details=e.mismatches:Array.isArray(e.path)?e.details={path:e.path}:typeof e.target=="string"?e.details={target:e.target}:e.token!==void 0?e.details={token:e.token}:e.version!==void 0?e.details={version:e.version}:e.details={},e}function Ge(e,t){let n=Te(e)?e:document,r=Te(e)?t:e;return r===void 0?C(M(n),n,Xe(n)):ne.bind(n,r).get()}function Ye(e,t,n){try{if(!Te(e))throw new Error("hyper-html-api: applyData(root, data, source?) needs a DOM root as the first argument.");let r=n===void 0?Xe(e):ne.bind(e,n).rules;Wt(e,r,t)}catch(r){throw vt(r)}return e}var Bt={engine:ne,extractData:Ge,applyData:Ye},Fn=Bt;export{Ye as applyData,Fn as default,ne as engine,Ge as extractData};