@pixelmatters/markup 1.3.1 → 1.3.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.
Files changed (3) hide show
  1. package/README.md +6 -6
  2. package/dist/widget.js +227 -219
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -35,9 +35,9 @@ CDN drop-in (no build step) — paste this just before `</body>`:
35
35
  ```html
36
36
  <script type="module">
37
37
  // Pin the exact version — esm.sh resolves it from npm
38
- import { init } from 'https://esm.sh/@pixelmatters/markup@1.3.1'
38
+ import { init } from 'https://esm.sh/@pixelmatters/markup@1.3.2'
39
39
  // or
40
- // import { init } from 'https://esm.run/@pixelmatters/markup@1.3.1'
40
+ // import { init } from 'https://esm.run/@pixelmatters/markup@1.3.2'
41
41
 
42
42
  init({
43
43
  apiUrl: 'https://your-deployment.convex.site',
@@ -48,14 +48,14 @@ CDN drop-in (no build step) — paste this just before `</body>`:
48
48
  </script>
49
49
  ```
50
50
 
51
- > **Why pin the version?** CDN URLs without a version (`@pixelmatters/markup`) resolve to whatever's `latest` on npm — a future major release will break your page silently. Always pin (`@pixelmatters/markup@1.3.1`).
51
+ > **Why pin the version?** CDN URLs without a version (`@pixelmatters/markup`) resolve to whatever's `latest` on npm — a future major release will break your page silently. Always pin (`@pixelmatters/markup@1.3.2`).
52
52
 
53
53
  If your platform doesn't allow inline JS (some CMS / page-builder editors), use the auto-init form instead — point a `<script src=…>` at the bundle and pass config via `data-*` attributes:
54
54
 
55
55
  ```html
56
56
  <script
57
57
  type="module"
58
- src="https://esm.sh/@pixelmatters/markup@1.3.1"
58
+ src="https://esm.sh/@pixelmatters/markup@1.3.2"
59
59
  data-markup-widget="true"
60
60
  data-api-url="https://your-deployment.convex.site"
61
61
  data-api-key="markup_..."
@@ -231,7 +231,7 @@ For a `<script>` tag drop-in (no bundler), use the inline ESM form and **pin the
231
231
 
232
232
  ```html
233
233
  <script type="module">
234
- import { init } from 'https://esm.sh/@pixelmatters/markup@1.3.1'
234
+ import { init } from 'https://esm.sh/@pixelmatters/markup@1.3.2'
235
235
 
236
236
  init({
237
237
  apiUrl: '...',
@@ -247,7 +247,7 @@ If inline JS is disallowed (some CMS / page-builder editors), use the auto-init
247
247
  ```html
248
248
  <script
249
249
  type="module"
250
- src="https://esm.sh/@pixelmatters/markup@1.3.1"
250
+ src="https://esm.sh/@pixelmatters/markup@1.3.2"
251
251
  data-markup-widget="true"
252
252
  data-api-url="..."
253
253
  data-api-key="..."
package/dist/widget.js CHANGED
@@ -45,7 +45,7 @@ function w(e, t) {
45
45
  function T(e) {
46
46
  if (e.__P && e.__d) {
47
47
  var n = e.__v, r = n.__e, i = [], a = [], o = v({}, n);
48
- o.__v = n.__v + 1, t.vnode && t.vnode(o), N(e.__P, o, n, e.__n, e.__P.namespaceURI, 32 & n.__u ? [r] : null, i, r ?? w(n), !!(32 & n.__u), a), o.__v = n.__v, o.__.__k[o.__i] = o, re(i, o, a), n.__e = n.__ = null, o.__e != r && E(o);
48
+ o.__v = n.__v + 1, t.vnode && t.vnode(o), P(e.__P, o, n, e.__n, e.__P.namespaceURI, 32 & n.__u ? [r] : null, i, r ?? w(n), !!(32 & n.__u), a), o.__v = n.__v, o.__.__k[o.__i] = o, re(i, o, a), n.__e = n.__ = null, o.__e != r && E(o);
49
49
  }
50
50
  }
51
51
  function E(e) {
@@ -65,12 +65,12 @@ function O() {
65
65
  }
66
66
  function ee(e, t, n, r, i, a, o, s, c, l, u) {
67
67
  var d, f, p, g, _, v, y, b = r && r.__k || h, x = t.length;
68
- for (c = k(n, t, b, c, x), d = 0; d < x; d++) (p = n.__k[d]) != null && (f = p.__i != -1 && b[p.__i] || m, p.__i = d, v = N(e, p, f, i, a, o, s, c, l, u), g = p.__e, p.ref && f.ref != p.ref && (f.ref && oe(f.ref, null, p), u.push(p.ref, p.__c || g, p)), _ == null && g != null && (_ = g), (y = !!(4 & p.__u)) || f.__k === p.__k ? (c = A(p, c, e, y), y && f.__e && (f.__e = null)) : typeof p.type == "function" && v !== void 0 ? c = v : g && (c = g.nextSibling), p.__u &= -7);
68
+ for (c = k(n, t, b, c, x), d = 0; d < x; d++) (p = n.__k[d]) != null && (f = p.__i != -1 && b[p.__i] || m, p.__i = d, v = P(e, p, f, i, a, o, s, c, l, u), g = p.__e, p.ref && f.ref != p.ref && (f.ref && oe(f.ref, null, p), u.push(p.ref, p.__c || g, p)), _ == null && g != null && (_ = g), (y = !!(4 & p.__u)) || f.__k === p.__k ? (c = A(p, c, e, y), y && f.__e && (f.__e = null)) : typeof p.type == "function" && v !== void 0 ? c = v : g && (c = g.nextSibling), p.__u &= -7);
69
69
  return n.__e = _, c;
70
70
  }
71
71
  function k(e, t, n, r, i) {
72
72
  var a, o, s, c, l, u = n.length, d = u, f = 0;
73
- for (e.__k = Array(i), a = 0; a < i; a++) (o = t[a]) != null && typeof o != "boolean" && typeof o != "function" ? (typeof o == "string" || typeof o == "number" || typeof o == "bigint" || o.constructor == String ? o = e.__k[a] = x(null, o, null, null, null) : _(o) ? o = e.__k[a] = x(S, { children: o }, null, null, null) : o.constructor === void 0 && o.__b > 0 ? o = e.__k[a] = x(o.type, o.props, o.key, o.ref ? o.ref : null, o.__v) : e.__k[a] = o, c = a + f, o.__ = e, o.__b = e.__b + 1, s = null, (l = o.__i = te(o, n, c, d)) != -1 && (d--, (s = n[l]) && (s.__u |= 2)), s == null || s.__v == null ? (l == -1 && (i > u ? f-- : i < u && f++), typeof o.type != "function" && (o.__u |= 4)) : l != c && (l == c - 1 ? f-- : l == c + 1 ? f++ : (l > c ? f-- : f++, o.__u |= 4))) : e.__k[a] = null;
73
+ for (e.__k = Array(i), a = 0; a < i; a++) (o = t[a]) != null && typeof o != "boolean" && typeof o != "function" ? (typeof o == "string" || typeof o == "number" || typeof o == "bigint" || o.constructor == String ? o = e.__k[a] = x(null, o, null, null, null) : _(o) ? o = e.__k[a] = x(S, { children: o }, null, null, null) : o.constructor === void 0 && o.__b > 0 ? o = e.__k[a] = x(o.type, o.props, o.key, o.ref ? o.ref : null, o.__v) : e.__k[a] = o, c = a + f, o.__ = e, o.__b = e.__b + 1, s = null, (l = o.__i = j(o, n, c, d)) != -1 && (d--, (s = n[l]) && (s.__u |= 2)), s == null || s.__v == null ? (l == -1 && (i > u ? f-- : i < u && f++), typeof o.type != "function" && (o.__u |= 4)) : l != c && (l == c - 1 ? f-- : l == c + 1 ? f++ : (l > c ? f-- : f++, o.__u |= 4))) : e.__k[a] = null;
74
74
  if (d) for (a = 0; a < u; a++) (s = n[a]) != null && !(2 & s.__u) && (s.__e == r && (r = w(s)), se(s, s));
75
75
  return r;
76
76
  }
@@ -86,7 +86,7 @@ function A(e, t, n, r) {
86
86
  while (t != null && t.nodeType == 8);
87
87
  return t;
88
88
  }
89
- function te(e, t, n, r) {
89
+ function j(e, t, n, r) {
90
90
  var i, a, o, s = e.key, c = e.type, l = t[n], u = l != null && (2 & l.__u) == 0;
91
91
  if (l === null && s == null || u && s == l.key && c == l.type) return n;
92
92
  if (r > +!!u) {
@@ -94,15 +94,15 @@ function te(e, t, n, r) {
94
94
  }
95
95
  return -1;
96
96
  }
97
- function j(e, t, n) {
97
+ function M(e, t, n) {
98
98
  t[0] == "-" ? e.setProperty(t, n ?? "") : e[t] = n == null ? "" : typeof n != "number" || g.test(t) ? n : n + "px";
99
99
  }
100
- function ne(e, t, n, r, i) {
100
+ function te(e, t, n, r, i) {
101
101
  var a, o;
102
102
  n: if (t == "style") if (typeof n == "string") e.style.cssText = n;
103
103
  else {
104
- if (typeof r == "string" && (e.style.cssText = r = ""), r) for (t in r) n && t in n || j(e.style, t, "");
105
- if (n) for (t in n) r && n[t] == r[t] || j(e.style, t, n[t]);
104
+ if (typeof r == "string" && (e.style.cssText = r = ""), r) for (t in r) n && t in n || M(e.style, t, "");
105
+ if (n) for (t in n) r && n[t] == r[t] || M(e.style, t, n[t]);
106
106
  }
107
107
  else if (t[0] == "o" && t[1] == "n") a = t != (t = t.replace(u, "$1")), o = t.toLowerCase(), t = o in e || t == "onFocusOut" || t == "onFocusIn" ? o.slice(2) : t.slice(2), e.l ||= {}, e.l[t + a] = n, n ? r ? n[l] = r[l] : (n[l] = d, e.addEventListener(t, a ? p : f, a)) : e.removeEventListener(t, a ? p : f, a);
108
108
  else {
@@ -114,7 +114,7 @@ function ne(e, t, n, r, i) {
114
114
  typeof n == "function" || (n == null || !1 === n && t[4] != "-" ? e.removeAttribute(t) : e.setAttribute(t, t == "popover" && n == 1 ? "" : n));
115
115
  }
116
116
  }
117
- function M(e) {
117
+ function N(e) {
118
118
  return function(n) {
119
119
  if (this.l) {
120
120
  var r = this.l[n.type + e];
@@ -124,14 +124,14 @@ function M(e) {
124
124
  }
125
125
  };
126
126
  }
127
- function N(e, n, r, i, a, o, s, c, l, u) {
128
- var d, f, p, m, g, b, x, w, T, E, D, O, k, A, te, j = n.type;
127
+ function P(e, n, r, i, a, o, s, c, l, u) {
128
+ var d, f, p, m, g, b, x, w, T, E, D, O, k, A, j, M = n.type;
129
129
  if (n.constructor !== void 0) return null;
130
130
  128 & r.__u && (l = !!(32 & r.__u), o = [c = n.__e = r.__e]), (d = t.__b) && d(n);
131
- n: if (typeof j == "function") try {
132
- if (w = n.props, T = j.prototype && j.prototype.render, E = (d = j.contextType) && i[d.__c], D = d ? E ? E.props.value : d.__ : i, r.__c ? x = (f = n.__c = r.__c).__ = f.__E : (T ? n.__c = f = new j(w, D) : (n.__c = f = new C(w, D), f.constructor = j, f.render = ce), E && E.sub(f), f.state ||= {}, f.__n = i, p = f.__d = !0, f.__h = [], f._sb = []), T && f.__s == null && (f.__s = f.state), T && j.getDerivedStateFromProps != null && (f.__s == f.state && (f.__s = v({}, f.__s)), v(f.__s, j.getDerivedStateFromProps(w, f.__s))), m = f.props, g = f.state, f.__v = n, p) T && j.getDerivedStateFromProps == null && f.componentWillMount != null && f.componentWillMount(), T && f.componentDidMount != null && f.__h.push(f.componentDidMount);
131
+ n: if (typeof M == "function") try {
132
+ if (w = n.props, T = M.prototype && M.prototype.render, E = (d = M.contextType) && i[d.__c], D = d ? E ? E.props.value : d.__ : i, r.__c ? x = (f = n.__c = r.__c).__ = f.__E : (T ? n.__c = f = new M(w, D) : (n.__c = f = new C(w, D), f.constructor = M, f.render = ce), E && E.sub(f), f.state ||= {}, f.__n = i, p = f.__d = !0, f.__h = [], f._sb = []), T && f.__s == null && (f.__s = f.state), T && M.getDerivedStateFromProps != null && (f.__s == f.state && (f.__s = v({}, f.__s)), v(f.__s, M.getDerivedStateFromProps(w, f.__s))), m = f.props, g = f.state, f.__v = n, p) T && M.getDerivedStateFromProps == null && f.componentWillMount != null && f.componentWillMount(), T && f.componentDidMount != null && f.__h.push(f.componentDidMount);
133
133
  else {
134
- if (T && j.getDerivedStateFromProps == null && w !== m && f.componentWillReceiveProps != null && f.componentWillReceiveProps(w, D), n.__v == r.__v || !f.__e && f.shouldComponentUpdate != null && !1 === f.shouldComponentUpdate(w, f.__s, D)) {
134
+ if (T && M.getDerivedStateFromProps == null && w !== m && f.componentWillReceiveProps != null && f.componentWillReceiveProps(w, D), n.__v == r.__v || !f.__e && f.shouldComponentUpdate != null && !1 === f.shouldComponentUpdate(w, f.__s, D)) {
135
135
  n.__v != r.__v && (f.props = w, f.state = f.__s, f.__d = !1), n.__e = r.__e, n.__k = r.__k, n.__k.some(function(e) {
136
136
  e && (e.__ = n);
137
137
  }), h.push.apply(f.__h, f._sb), f._sb = [], f.__h.length && s.push(f);
@@ -151,17 +151,17 @@ function N(e, n, r, i, a, o, s, c, l, u) {
151
151
  for (n.__u |= l ? 160 : 128; c && c.nodeType == 8 && c.nextSibling;) c = c.nextSibling;
152
152
  o[o.indexOf(c)] = null, n.__e = c;
153
153
  } else {
154
- for (te = o.length; te--;) y(o[te]);
155
- P(n);
154
+ for (j = o.length; j--;) y(o[j]);
155
+ ne(n);
156
156
  }
157
- else n.__e = r.__e, n.__k = r.__k, e.then || P(n);
157
+ else n.__e = r.__e, n.__k = r.__k, e.then || ne(n);
158
158
  t.__e(e, n, r);
159
159
  }
160
160
  else o == null && n.__v == r.__v ? (n.__k = r.__k, n.__e = r.__e) : c = n.__e = ae(r.__e, n, r, i, a, o, s, l, u);
161
161
  return (d = t.diffed) && d(n), 128 & n.__u ? void 0 : c;
162
162
  }
163
- function P(e) {
164
- e && (e.__c && (e.__c.__e = !0), e.__k && e.__k.some(P));
163
+ function ne(e) {
164
+ e && (e.__c && (e.__c.__e = !0), e.__k && e.__k.some(ne));
165
165
  }
166
166
  function re(e, n, r) {
167
167
  for (var i = 0; i < r.length; i++) oe(r[i], r[++i], r[++i]);
@@ -193,11 +193,11 @@ function ae(n, r, i, a, o, s, c, l, u) {
193
193
  if (C == null) x === S || l && n.data == S || (n.data = S);
194
194
  else {
195
195
  if (s &&= e.call(n.childNodes), !l && s != null) for (x = {}, d = 0; d < n.attributes.length; d++) x[(g = n.attributes[d]).name] = g.value;
196
- for (d in x) g = x[d], d == "dangerouslySetInnerHTML" ? p = g : d == "children" || d in S || d == "value" && "defaultValue" in S || d == "checked" && "defaultChecked" in S || ne(n, d, null, g, o);
197
- for (d in S) g = S[d], d == "children" ? h = g : d == "dangerouslySetInnerHTML" ? f = g : d == "value" ? v = g : d == "checked" ? b = g : l && typeof g != "function" || x[d] === g || ne(n, d, g, x[d], o);
196
+ for (d in x) g = x[d], d == "dangerouslySetInnerHTML" ? p = g : d == "children" || d in S || d == "value" && "defaultValue" in S || d == "checked" && "defaultChecked" in S || te(n, d, null, g, o);
197
+ for (d in S) g = S[d], d == "children" ? h = g : d == "dangerouslySetInnerHTML" ? f = g : d == "value" ? v = g : d == "checked" ? b = g : l && typeof g != "function" || x[d] === g || te(n, d, g, x[d], o);
198
198
  if (f) l || p && (f.__html == p.__html || f.__html == n.innerHTML) || (n.innerHTML = f.__html), r.__k = [];
199
199
  else if (p && (n.innerHTML = ""), ee(r.type == "template" ? n.content : n, _(h) ? h : [h], r, i, a, C == "foreignObject" ? "http://www.w3.org/1999/xhtml" : o, s, c, s ? s[0] : i.__k && w(i, 0), l, u), s != null) for (d = s.length; d--;) y(s[d]);
200
- l || (d = "value", C == "progress" && v == null ? n.removeAttribute("value") : v != null && (v !== n[d] || C == "progress" && !v || C == "option" && v != x[d]) && ne(n, d, v, x[d], o), d = "checked", b != null && b != n[d] && ne(n, d, b, x[d], o));
200
+ l || (d = "value", C == "progress" && v == null ? n.removeAttribute("value") : v != null && (v !== n[d] || C == "progress" && !v || C == "option" && v != x[d]) && te(n, d, v, x[d], o), d = "checked", b != null && b != n[d] && te(n, d, b, x[d], o));
201
201
  }
202
202
  return n;
203
203
  }
@@ -229,7 +229,7 @@ function ce(e, t, n) {
229
229
  }
230
230
  function le(n, r, i) {
231
231
  var a, o, s, c;
232
- r == document && (r = document.documentElement), t.__ && t.__(n, r), o = (a = typeof i == "function") ? null : i && i.__k || r.__k, s = [], c = [], N(r, n = (!a && i || r).__k = b(S, null, [n]), o || m, m, r.namespaceURI, !a && i ? [i] : o ? null : r.firstChild ? e.call(r.childNodes) : null, s, !a && i ? i : o ? o.__e : r.firstChild, a, c), re(s, n, c);
232
+ r == document && (r = document.documentElement), t.__ && t.__(n, r), o = (a = typeof i == "function") ? null : i && i.__k || r.__k, s = [], c = [], P(r, n = (!a && i || r).__k = b(S, null, [n]), o || m, m, r.namespaceURI, !a && i ? [i] : o ? null : r.firstChild ? e.call(r.childNodes) : null, s, !a && i ? i : o ? o.__e : r.firstChild, a, c), re(s, n, c);
233
233
  }
234
234
  e = h.slice, t = { __e: function(e, t, n, r) {
235
235
  for (var i, a, o; t = t.__;) if ((i = t.__c) && !i.__) try {
@@ -245,24 +245,24 @@ e = h.slice, t = { __e: function(e, t, n, r) {
245
245
  this.__v && (this.__e = !0, e && this.__h.push(e), D(this));
246
246
  }, C.prototype.render = S, r = [], a = typeof Promise == "function" ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, o = function(e, t) {
247
247
  return e.__v.__b - t.__v.__b;
248
- }, O.__r = 0, s = Math.random().toString(8), c = "__d" + s, l = "__a" + s, u = /(PointerCapture)$|Capture$/i, d = 0, f = M(!1), p = M(!0);
248
+ }, O.__r = 0, s = Math.random().toString(8), c = "__d" + s, l = "__a" + s, u = /(PointerCapture)$|Capture$/i, d = 0, f = N(!1), p = N(!0);
249
249
  //#endregion
250
250
  //#region src/styles.css?inline
251
- var ue = ":host{--markup-paper:#fdfcfa;--markup-ink:#1a1614;--markup-muted:#6b6661;--markup-border:#1a16141a;--markup-border-strong:#1a16142e;--markup-brand:#e35d2a;--markup-brand-hover:#c84d20;--markup-team:#2a4ac8;--markup-shadow:0 1px 2px #1a16140f, 0 8px 28px #1a16141f;--markup-overlay-tint:#1a16140a;--markup-danger:#dc2626;--markup-radius:6px;--markup-radius-sm:4px;--markup-font:\"Geist Variable\", \"Geist\", ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif;--markup-font-mono:\"Geist Mono Variable\", \"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;all:initial;font-family:var(--markup-font);color:var(--markup-ink);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:14px;line-height:1.5}:host([data-theme=dark]){--markup-paper:#1a1614;--markup-ink:#fdfcfa;--markup-muted:#a8a39e;--markup-border:#fdfcfa1f;--markup-border-strong:#fdfcfa38;--markup-team:#7b99f0;--markup-shadow:0 1px 2px #00000059, 0 12px 40px #00000073;--markup-overlay-tint:#fdfcfa0d;--markup-danger:#f87171}@media (prefers-color-scheme:dark){:host(:not([data-theme=light])){--markup-paper:#1a1614;--markup-ink:#fdfcfa;--markup-muted:#a8a39e;--markup-border:#fdfcfa1f;--markup-border-strong:#fdfcfa38;--markup-team:#7b99f0;--markup-shadow:0 1px 2px #00000059, 0 12px 40px #00000073;--markup-overlay-tint:#fdfcfa0d;--markup-danger:#f87171}}.markup-shadow-root{font-family:var(--markup-font)}.markup-shadow-root *,.markup-shadow-root :before,.markup-shadow-root :after{box-sizing:border-box}:where(.markup-shadow-root button,.markup-shadow-root input,.markup-shadow-root textarea){font:inherit;color:inherit}.markup-eyebrow{font-family:var(--markup-font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--markup-muted);font-size:10px;font-weight:500}.markup-fab{z-index:10;background:var(--markup-ink);color:var(--markup-paper);cursor:pointer;touch-action:none;letter-spacing:-.01em;pointer-events:auto;box-shadow:0 0 0 1px color-mix(in srgb, var(--markup-brand) 35%, transparent), var(--markup-shadow);border:none;border-radius:999px;align-items:center;gap:8px;padding:9px 14px;font-size:13px;font-weight:500;transition:background .15s,box-shadow .15s,transform .15s;display:inline-flex;position:fixed;bottom:24px}.markup-fab:hover{background:var(--markup-brand);box-shadow:0 0 0 1px color-mix(in srgb, var(--markup-brand) 0%, transparent), var(--markup-shadow)}.markup-fab:active{transform:translateY(1px)}.markup-fab.is-active{background:var(--markup-brand);box-shadow:var(--markup-shadow)}.markup-fab.is-active:hover{background:var(--markup-brand-hover)}.markup-fab .markup-fab-icon{color:var(--markup-brand);transition:color .15s}.markup-fab:hover .markup-fab-icon,.markup-fab.is-active .markup-fab-icon{color:var(--markup-paper)}.markup-fab-right{right:24px}.markup-fab-left{left:24px}.markup-fab.is-floating{inset:0 auto auto 0}.markup-fab.is-dragging{cursor:grabbing;transition:none}.markup-fab-icon{align-items:center;display:inline-flex}.markup-fab-label{font-family:var(--markup-font)}.markup-hud-hidden-toast{z-index:10;background:var(--markup-ink);color:var(--markup-paper);letter-spacing:-.01em;box-shadow:var(--markup-shadow);pointer-events:none;border-radius:999px;align-items:center;gap:6px;padding:8px 14px;font-size:12px;font-weight:500;animation:.22s ease-out markup-hud-hidden-in,.32s ease-in 4.6s forwards markup-hud-hidden-out;display:inline-flex;position:fixed;bottom:24px}.markup-hud-hidden-toast-right{right:24px}.markup-hud-hidden-toast-left{left:24px}.markup-kbd{background:color-mix(in srgb, var(--markup-paper) 14%, transparent);min-width:18px;height:18px;color:var(--markup-paper);font-family:var(--markup-font);border-radius:4px;justify-content:center;align-items:center;padding:0 5px;font-size:10px;font-weight:600;line-height:1;display:inline-flex}@keyframes markup-hud-hidden-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes markup-hud-hidden-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(4px)}}.markup-pins-layer{pointer-events:none;position:fixed;inset:0}.markup-pin{background:var(--markup-ink);width:28px;height:28px;color:var(--markup-brand);cursor:pointer;pointer-events:auto;box-shadow:0 0 0 2px var(--markup-paper), 0 0 0 3px color-mix(in srgb, var(--markup-brand) 35%, transparent), var(--markup-shadow);border:none;border-radius:50% 50% 50% 4px;justify-content:center;align-items:center;margin-top:-28px;padding:0;transition:transform .15s,background .15s,color .15s;display:inline-flex;position:absolute}.markup-pin:hover,.markup-pin.is-active{background:var(--markup-brand);color:var(--markup-paper)}.markup-pin.is-anchor{anchor-name:--markup-active-anchor}.markup-pin-ghost{background:var(--markup-brand);color:var(--markup-paper);cursor:default;pointer-events:none;animation:1.2s ease-in-out infinite markup-ghost-pulse}.markup-pin-dot{background:currentColor;border-radius:50%;width:6px;height:6px;display:inline-block}.markup-pin-count{background:var(--markup-brand);min-width:16px;height:16px;color:var(--markup-paper);font-family:var(--markup-font-mono);text-align:center;box-shadow:0 0 0 2px var(--markup-paper);border-radius:999px;padding:0 4px;font-size:9px;font-weight:600;line-height:16px;position:absolute;top:-4px;left:50%;transform:translate(-50%,-50%)}@keyframes markup-ghost-pulse{0%,to{box-shadow:0 0 0 2px var(--markup-paper), 0 0 0 0 #e35d2a66}50%{box-shadow:0 0 0 2px var(--markup-paper), 0 0 0 10px #e35d2a00}}.markup-placement-overlay{background:var(--markup-overlay-tint);cursor:crosshair;pointer-events:auto;z-index:1;animation:.18s ease-out markup-overlay-in;position:fixed;inset:0}.markup-placement-cursor-help{background:var(--markup-ink);color:var(--markup-paper);letter-spacing:-.01em;box-shadow:var(--markup-shadow);pointer-events:none;border-radius:999px;padding:10px 16px;font-size:12px;font-weight:500;animation:.22s ease-out 60ms backwards markup-help-in;position:fixed;top:24px;left:50%;transform:translate(-50%)}@keyframes markup-overlay-in{0%{opacity:0}to{opacity:1}}@keyframes markup-help-in{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}.markup-popover{width:320px;max-width:calc(100vw - 24px);height:auto;max-height:calc(100dvh - 24px);inset:auto;left:var(--markup-pop-x,0);top:var(--markup-pop-y,0);background:var(--markup-paper);color:var(--markup-ink);border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius);box-shadow:var(--markup-shadow);pointer-events:auto;flex-direction:column;gap:0;margin:0;padding:0;animation:.16s ease-out markup-popover-in;display:flex;position:fixed;overflow:hidden}@supports (anchor-name:--x){.markup-popover{position-anchor:--markup-active-anchor;left:calc(anchor(right) + 8px);top:calc(anchor(top) - 9px);position-try-fallbacks:flip-block, flip-inline, flip-block flip-inline;position-try-order:most-block-size}.markup-popover.is-floating{left:var(--markup-pop-x,0);top:var(--markup-pop-y,0);position-try-fallbacks:none}}@keyframes markup-popover-in{0%{opacity:0;transform:translateY(-4px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.markup-popover-header{border-bottom:1px solid var(--markup-border);cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none;justify-content:space-between;align-items:center;padding:10px 12px;display:flex}.markup-popover.is-dragging .markup-popover-header{cursor:grabbing}.markup-popover-header-actions{align-items:center;gap:4px;display:flex}.markup-thread-menu{display:flex;position:relative}.markup-thread-menu-list{z-index:10;background:var(--markup-paper);border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius);min-width:160px;box-shadow:var(--markup-shadow);padding:4px;animation:.12s ease-out markup-menu-in;position:absolute;top:calc(100% + 6px);right:0}.markup-thread-menu-item{border-radius:var(--markup-radius-sm);width:100%;color:var(--markup-ink);text-align:left;cursor:pointer;background:0 0;border:none;padding:7px 10px;font-size:13px;transition:background .1s,color .1s;display:block}.markup-thread-menu-item:hover{background:var(--markup-border)}.markup-thread-menu-item.is-danger{color:var(--markup-danger,#dc2626)}.markup-thread-menu-item.is-danger:hover{background:color-mix(in srgb, var(--markup-danger,#dc2626) 10%, transparent)}.markup-thread-menu-item:disabled{opacity:.5;cursor:default}@keyframes markup-menu-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.markup-popover-body{padding:12px}.markup-popover-byline{color:var(--markup-muted);align-items:center;gap:4px;margin:0 0 8px;font-size:12px;display:flex}.markup-popover-name{color:var(--markup-ink);font-weight:500}.markup-icon-btn{border-radius:var(--markup-radius-sm);width:24px;height:24px;color:var(--markup-muted);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:inline-flex}.markup-icon-btn:hover,.markup-icon-btn.is-open{background:var(--markup-border);color:var(--markup-ink)}.markup-comments{border-bottom:1px solid var(--markup-border);background:linear-gradient(var(--markup-paper), transparent) top / 100% 20px no-repeat local, linear-gradient(transparent, var(--markup-paper)) bottom / 100% 20px no-repeat local, radial-gradient(farthest-side at 50% 0%, #1a16141a, transparent) top / 100% 10px no-repeat scroll, radial-gradient(farthest-side at 50% 100%, #1a16141a, transparent) bottom / 100% 10px no-repeat scroll;flex-direction:column;gap:12px;max-height:280px;margin:0;padding:8px 12px 4px;list-style:none;display:flex;overflow-y:auto}.markup-comment{flex-direction:column;gap:4px;display:flex}.markup-comment-meta{align-items:center;gap:6px;font-size:11px;display:flex}.markup-comment-author{color:var(--markup-ink);font-weight:600}.markup-comment.is-team .markup-comment-author{color:var(--markup-team)}.markup-comment-badge{background:color-mix(in srgb, var(--markup-team) 12%, transparent);height:14px;color:var(--markup-team);font-family:var(--markup-font-mono);letter-spacing:.12em;text-transform:uppercase;border-radius:999px;align-items:center;padding:0 5px;font-size:9px;font-weight:500;line-height:1;display:inline-flex}.markup-comment-time{color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.04em;font-size:10px}.markup-comment-body{white-space:pre-wrap;word-break:break-word;margin:0;font-size:13px;line-height:1.5}.markup-comment-edited{color:var(--markup-muted);font-size:11px}.markup-thread-actions{align-items:center;gap:4px;display:flex}.markup-comment-meta .markup-reaction-picker-wrap,.markup-thread-actions{margin-left:auto}.markup-comment-meta .markup-reaction-add{width:22px;height:22px;margin-top:-4px;margin-bottom:-4px}.markup-reaction-picker-wrap>.markup-icon-btn,.markup-comment-menu>.markup-icon-btn{margin-top:-4px;margin-bottom:-4px}.markup-comment-menu.is-up .markup-thread-menu-list{animation-name:markup-menu-in-up;top:auto;bottom:calc(100% + 6px)}@keyframes markup-menu-in-up{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.markup-comment{position:relative}.markup-reactions{flex-wrap:wrap;align-items:center;gap:4px;margin-top:2px;display:flex}.markup-reaction-chip{border:1px solid var(--markup-border);height:22px;color:var(--markup-ink);font:inherit;cursor:pointer;background:0 0;border-radius:999px;align-items:center;gap:4px;padding:0 7px 0 6px;font-size:11px;line-height:1;transition:background .12s,border-color .12s;display:inline-flex}.markup-reaction-chip:hover:not(:disabled){background:color-mix(in srgb, var(--markup-ink) 5%, transparent)}.markup-reaction-chip.is-mine{border-color:color-mix(in srgb, var(--markup-brand) 45%, transparent);background:color-mix(in srgb, var(--markup-brand) 10%, transparent)}.markup-reaction-chip.is-mine:hover:not(:disabled){background:color-mix(in srgb, var(--markup-brand) 16%, transparent)}.markup-reaction-chip:disabled{cursor:default;opacity:.6}.markup-reaction-emoji{font-size:13px;line-height:1}.markup-reaction-count{font-family:var(--markup-font-mono);letter-spacing:.04em;color:var(--markup-muted);font-size:10px}.markup-reaction-chip.is-mine .markup-reaction-count{color:var(--markup-brand)}.markup-reaction-picker-wrap{opacity:0;flex:none;transition:opacity .12s;display:inline-flex;position:relative}.markup-comment:hover .markup-reaction-picker-wrap,.markup-comment:focus-within .markup-reaction-picker-wrap,.markup-reaction-picker-wrap.is-open{opacity:1}.markup-reaction-add{border:1px dashed var(--markup-border-strong);width:22px;height:22px;color:var(--markup-muted);font:inherit;cursor:pointer;background:0 0;border-radius:999px;justify-content:center;align-items:center;font-size:13px;line-height:1;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.markup-reaction-add:hover,.markup-reaction-add.is-open{background:color-mix(in srgb, var(--markup-ink) 5%, transparent);color:var(--markup-ink);border-style:solid}.markup-reaction-picker{z-index:1;border:1px solid var(--markup-border-strong);background:var(--markup-paper);border-radius:8px;gap:2px;padding:4px;animation:.12s markup-menu-in;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 1px 2px #1a16140f,0 8px 28px #1a16141a}.markup-reaction-picker-wrap.is-up .markup-reaction-picker{animation-name:markup-menu-in-up;top:auto;bottom:calc(100% + 6px)}.markup-reaction-picker-item{cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;font-size:16px;line-height:1;transition:background .12s;display:inline-flex}.markup-reaction-picker-item:hover{background:color-mix(in srgb, var(--markup-ink) 8%, transparent)}.markup-reaction-picker-item.is-mine{background:color-mix(in srgb, var(--markup-brand) 14%, transparent)}.markup-comment-edit-form{flex-direction:column;gap:6px;display:flex}.markup-comment-edit-form .markup-textarea{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);background:var(--markup-paper);width:100%;color:var(--markup-ink);resize:vertical;font:inherit;outline:none;padding:8px 10px;font-size:13px;line-height:1.5}.markup-comment-edit-form .markup-textarea:focus-visible{border-color:var(--markup-brand);box-shadow:0 0 0 3px #e35d2a2e}.markup-comment-edit-actions{justify-content:flex-end;gap:6px;display:flex}.markup-composer{flex-direction:column;display:flex;position:relative}.markup-composer-input{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);background:var(--markup-paper);width:100%;min-height:36px;max-height:96px;color:var(--markup-ink);resize:none;font-family:var(--markup-font);outline:none;padding:8px 10px;font-size:13px;line-height:1.5;transition:border-color .12s,box-shadow .12s,border-bottom-left-radius .15s,border-bottom-right-radius .15s}.markup-composer-input:focus-visible{border-color:var(--markup-brand);box-shadow:0 0 0 3px #e35d2a2e}.markup-composer-input:disabled{opacity:.6}.markup-composer-input::placeholder{color:var(--markup-muted)}.markup-composer.is-filled .markup-composer-input{border-bottom-right-radius:0;border-bottom-left-radius:0}.markup-composer-footer-wrap{grid-template-rows:0fr;transition:grid-template-rows .15s;display:grid}.markup-composer.is-filled .markup-composer-footer-wrap{grid-template-rows:1fr}.markup-composer-footer{border:1px solid var(--markup-border-strong);border-radius:0 0 var(--markup-radius-sm) var(--markup-radius-sm);opacity:0;border-top:none;justify-content:space-between;align-items:center;gap:8px;padding:2px 2px 2px 10px;transition:opacity .1s;display:flex;overflow:hidden}.markup-composer.is-filled .markup-composer-footer{opacity:1;transition-delay:60ms}.markup-composer-hint{font-family:var(--markup-font-mono);letter-spacing:.06em;color:var(--markup-muted);font-size:10px}.markup-composer-error{color:var(--markup-brand)}.markup-composer-actions{align-items:center;gap:6px;display:flex}.markup-composer-actions-empty{transition:opacity .12s;position:absolute;top:3px;right:3px}.markup-composer.is-filled .markup-composer-actions-empty{opacity:0;pointer-events:none}.markup-author-prompt{flex-direction:column;gap:10px;padding:12px;display:flex}.markup-author-status{color:var(--markup-muted);margin:0;font-size:12px}.markup-input{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);background:var(--markup-paper);width:100%;height:36px;color:var(--markup-ink);outline:none;padding:0 10px;font-size:14px;transition:border-color .12s,box-shadow .12s}.markup-input:focus-visible{border-color:var(--markup-brand);box-shadow:0 0 0 3px #e35d2a2e}.markup-btn{border-radius:var(--markup-radius-sm);height:30px;color:var(--markup-ink);cursor:pointer;letter-spacing:-.01em;white-space:nowrap;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;gap:6px;padding:0 8px;font-size:12px;font-weight:500;transition:background .12s,border-color .12s,color .12s,opacity .12s;display:inline-flex}.markup-btn:disabled{opacity:.5;cursor:not-allowed}.markup-btn-primary{background:var(--markup-ink);color:var(--markup-paper)}.markup-btn-primary:hover:not(:disabled){background:var(--markup-brand)}.markup-btn-ghost{color:var(--markup-muted)}.markup-btn-ghost:hover:not(:disabled){background:var(--markup-border);color:var(--markup-ink)}.markup-screenshot-row{border-top:1px solid var(--markup-border);margin-top:8px;padding-top:8px}.markup-screenshot-status{color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.06em;align-items:center;gap:5px;font-size:10px;display:flex}.markup-screenshot-toggle{cursor:pointer;color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.06em;align-items:center;gap:5px;font-size:10px;transition:color .12s;display:flex}.markup-screenshot-toggle:hover{color:var(--markup-ink)}.markup-screenshot-checkbox{width:12px;height:12px;accent-color:var(--markup-brand);cursor:pointer;margin:0}.markup-screenshot-thumb{border:1px solid var(--markup-border-strong);object-fit:cover;border-radius:3px;flex-shrink:0;width:auto;height:25px;margin:-5px 0 -5px auto;display:block}.markup-comment-screenshot{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);cursor:pointer;background:0 0;margin-top:8px;padding:0;transition:border-color .12s,opacity .12s;display:block;overflow:hidden}.markup-comment-screenshot:hover{border-color:var(--markup-brand);opacity:.9}.markup-comment-screenshot img{object-fit:cover;object-position:top;width:100%;height:auto;max-height:120px;display:block}.markup-lightbox{background:#1a1614e0;border:none;width:100%;max-width:100%;height:100%;max-height:100%;margin:0;padding:24px;position:fixed;inset:0}.markup-lightbox[open]{justify-content:center;align-items:center;display:flex}.markup-lightbox::backdrop{display:none}.markup-lightbox-img{border-radius:var(--markup-radius);object-fit:contain;max-width:100%;max-height:100%;box-shadow:var(--markup-shadow);animation:.16s ease-out markup-lightbox-in}.markup-lightbox-close{color:#fdfcfa;background:#1a161499;position:absolute;top:16px;right:16px}.markup-lightbox-close:hover{color:#fdfcfa;background:#1a1614d9}@keyframes markup-lightbox-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion:reduce){.markup-fab,.markup-pin,.markup-icon-btn,.markup-btn,.markup-popover,.markup-pin-ghost,.markup-placement-overlay,.markup-placement-cursor-help,.markup-lightbox-img{transition:none;animation:none}}", F, I, de, fe, pe = 0, me = [], L = t, he = L.__b, ge = L.__r, _e = L.diffed, ve = L.__c, ye = L.unmount, be = L.__;
252
- function xe(e, t) {
253
- L.__h && L.__h(I, e, pe || t), pe = 0;
251
+ var ue = ":host{--markup-paper:#fdfcfa;--markup-ink:#1a1614;--markup-muted:#6b6661;--markup-border:#1a16141a;--markup-border-strong:#1a16142e;--markup-brand:#e35d2a;--markup-brand-hover:#c84d20;--markup-team:#2a4ac8;--markup-shadow:0 1px 2px #1a16140f, 0 8px 28px #1a16141f;--markup-overlay-tint:#1a16140a;--markup-danger:#dc2626;--markup-radius:6px;--markup-radius-sm:4px;--markup-font:\"Geist Variable\", \"Geist\", ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif;--markup-font-mono:\"Geist Mono Variable\", \"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;all:initial;font-family:var(--markup-font);color:var(--markup-ink);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:14px;line-height:1.5}:host([data-theme=dark]){--markup-paper:#1a1614;--markup-ink:#fdfcfa;--markup-muted:#a8a39e;--markup-border:#fdfcfa1f;--markup-border-strong:#fdfcfa38;--markup-team:#7b99f0;--markup-shadow:0 1px 2px #00000059, 0 12px 40px #00000073;--markup-overlay-tint:#fdfcfa0d;--markup-danger:#f87171}@media (prefers-color-scheme:dark){:host(:not([data-theme=light])){--markup-paper:#1a1614;--markup-ink:#fdfcfa;--markup-muted:#a8a39e;--markup-border:#fdfcfa1f;--markup-border-strong:#fdfcfa38;--markup-team:#7b99f0;--markup-shadow:0 1px 2px #00000059, 0 12px 40px #00000073;--markup-overlay-tint:#fdfcfa0d;--markup-danger:#f87171}}.markup-shadow-root{font-family:var(--markup-font)}.markup-shadow-root *,.markup-shadow-root :before,.markup-shadow-root :after{box-sizing:border-box}:where(.markup-shadow-root button,.markup-shadow-root input,.markup-shadow-root textarea){font:inherit;color:inherit}.markup-eyebrow{font-family:var(--markup-font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--markup-muted);font-size:10px;font-weight:500}.markup-fab{z-index:10;background:var(--markup-ink);color:var(--markup-paper);cursor:pointer;touch-action:none;letter-spacing:-.01em;pointer-events:auto;box-shadow:0 0 0 1px color-mix(in srgb, var(--markup-brand) 35%, transparent), var(--markup-shadow);border:none;border-radius:999px;align-items:center;gap:8px;padding:9px 14px;font-size:13px;font-weight:500;transition:background .15s,box-shadow .15s,transform .15s;display:inline-flex;position:fixed;bottom:24px}.markup-fab:hover{background:var(--markup-brand);box-shadow:0 0 0 1px color-mix(in srgb, var(--markup-brand) 0%, transparent), var(--markup-shadow)}.markup-fab:active{transform:translateY(1px)}.markup-fab.is-active{background:var(--markup-brand);box-shadow:var(--markup-shadow)}.markup-fab.is-active:hover{background:var(--markup-brand-hover)}.markup-fab .markup-fab-icon{color:var(--markup-brand);transition:color .15s}.markup-fab:hover .markup-fab-icon,.markup-fab.is-active .markup-fab-icon{color:var(--markup-paper)}.markup-fab-right{right:24px}.markup-fab-left{left:24px}.markup-fab.is-floating{inset:0 auto auto 0}.markup-fab.is-dragging{cursor:grabbing;transition:none}.markup-fab-icon{align-items:center;display:inline-flex}.markup-fab-label{font-family:var(--markup-font)}.markup-hud-hidden-toast{z-index:10;background:var(--markup-ink);color:var(--markup-paper);letter-spacing:-.01em;box-shadow:var(--markup-shadow);pointer-events:none;border-radius:999px;align-items:center;gap:6px;padding:8px 14px;font-size:12px;font-weight:500;animation:.22s ease-out markup-hud-hidden-in,.32s ease-in 4.6s forwards markup-hud-hidden-out;display:inline-flex;position:fixed;bottom:24px}.markup-hud-hidden-toast-right{right:24px}.markup-hud-hidden-toast-left{left:24px}.markup-kbd{background:color-mix(in srgb, var(--markup-paper) 14%, transparent);min-width:18px;height:18px;color:var(--markup-paper);font-family:var(--markup-font);border-radius:4px;justify-content:center;align-items:center;padding:0 5px;font-size:10px;font-weight:600;line-height:1;display:inline-flex}@keyframes markup-hud-hidden-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes markup-hud-hidden-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(4px)}}.markup-pins-layer{pointer-events:none;position:fixed;inset:0}.markup-pin{background:var(--markup-ink);width:28px;height:28px;color:var(--markup-brand);cursor:pointer;pointer-events:auto;box-shadow:0 0 0 2px var(--markup-paper), 0 0 0 3px color-mix(in srgb, var(--markup-brand) 35%, transparent), var(--markup-shadow);border:none;border-radius:50% 50% 50% 4px;justify-content:center;align-items:center;margin-top:-28px;padding:0;transition:transform .15s,background .15s,color .15s;display:inline-flex;position:absolute}.markup-pin:hover,.markup-pin.is-active{background:var(--markup-brand);color:var(--markup-paper)}.markup-pin.is-anchor{anchor-name:--markup-active-anchor}.markup-pin-ghost{background:var(--markup-brand);color:var(--markup-paper);cursor:default;pointer-events:none;animation:1.2s ease-in-out infinite markup-ghost-pulse}.markup-pin-dot{background:currentColor;border-radius:50%;width:6px;height:6px;display:inline-block}.markup-pin-count{background:var(--markup-brand);min-width:16px;height:16px;color:var(--markup-paper);font-family:var(--markup-font-mono);text-align:center;box-shadow:0 0 0 2px var(--markup-paper);border-radius:999px;padding:0 4px;font-size:9px;font-weight:600;line-height:16px;position:absolute;top:-4px;left:50%;transform:translate(-50%,-50%)}@keyframes markup-ghost-pulse{0%,to{box-shadow:0 0 0 2px var(--markup-paper), 0 0 0 0 #e35d2a66}50%{box-shadow:0 0 0 2px var(--markup-paper), 0 0 0 10px #e35d2a00}}.markup-placement-overlay{background:var(--markup-overlay-tint);cursor:crosshair;pointer-events:auto;z-index:1;animation:.18s ease-out markup-overlay-in;position:fixed;inset:0}.markup-placement-cursor-help{background:var(--markup-ink);color:var(--markup-paper);letter-spacing:-.01em;box-shadow:var(--markup-shadow);pointer-events:none;border-radius:999px;padding:10px 16px;font-size:12px;font-weight:500;animation:.22s ease-out 60ms backwards markup-help-in;position:fixed;top:24px;left:50%;transform:translate(-50%)}@keyframes markup-overlay-in{0%{opacity:0}to{opacity:1}}@keyframes markup-help-in{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}.markup-popover{width:320px;max-width:calc(100vw - 24px);height:auto;max-height:calc(100dvh - 24px);inset:auto;left:var(--markup-pop-x,0);top:var(--markup-pop-y,0);background:var(--markup-paper);color:var(--markup-ink);border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius);box-shadow:var(--markup-shadow);pointer-events:auto;flex-direction:column;gap:0;margin:0;padding:0;animation:.16s ease-out markup-popover-in;display:flex;position:fixed;overflow:hidden}@supports (anchor-name:--x){.markup-popover{position-anchor:--markup-active-anchor;left:calc(anchor(right) + 8px);top:calc(anchor(top) - 9px);position-try-fallbacks:flip-block, flip-inline, flip-block flip-inline;position-try-order:most-block-size}.markup-popover.is-floating{left:var(--markup-pop-x,0);top:var(--markup-pop-y,0);position-try-fallbacks:none}}@keyframes markup-popover-in{0%{opacity:0;transform:translateY(-4px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.markup-popover-header{border-bottom:1px solid var(--markup-border);cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none;justify-content:space-between;align-items:center;padding:10px 12px;display:flex}.markup-popover.is-dragging .markup-popover-header{cursor:grabbing}.markup-popover-header-actions{align-items:center;gap:4px;display:flex}.markup-thread-menu{display:flex;position:relative}.markup-thread-menu-list{z-index:10;background:var(--markup-paper);border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius);min-width:160px;box-shadow:var(--markup-shadow);padding:4px;animation:.12s ease-out markup-menu-in;position:absolute;top:calc(100% + 6px);right:0}.markup-thread-menu-item{border-radius:var(--markup-radius-sm);width:100%;color:var(--markup-ink);text-align:left;cursor:pointer;background:0 0;border:none;padding:7px 10px;font-size:13px;transition:background .1s,color .1s;display:block}.markup-thread-menu-item:hover{background:var(--markup-border)}.markup-thread-menu-item.is-danger{color:var(--markup-danger,#dc2626)}.markup-thread-menu-item.is-danger:hover{background:color-mix(in srgb, var(--markup-danger,#dc2626) 10%, transparent)}.markup-thread-menu-item:disabled{opacity:.5;cursor:default}@keyframes markup-menu-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.markup-popover-body{padding:12px}.markup-popover-byline{color:var(--markup-muted);align-items:center;gap:4px;margin:0 0 8px;font-size:12px;display:flex}.markup-popover-name{color:var(--markup-ink);font-weight:500}.markup-icon-btn{border-radius:var(--markup-radius-sm);width:24px;height:24px;color:var(--markup-muted);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:inline-flex}.markup-icon-btn:hover,.markup-icon-btn.is-open{background:var(--markup-border);color:var(--markup-ink)}.markup-comments{border-bottom:1px solid var(--markup-border);background:linear-gradient(var(--markup-paper), transparent) top / 100% 20px no-repeat local, linear-gradient(transparent, var(--markup-paper)) bottom / 100% 20px no-repeat local, radial-gradient(farthest-side at 50% 0%, #1a16141a, transparent) top / 100% 10px no-repeat scroll, radial-gradient(farthest-side at 50% 100%, #1a16141a, transparent) bottom / 100% 10px no-repeat scroll;flex-direction:column;gap:12px;max-height:280px;margin:0;padding:8px 12px 4px;list-style:none;display:flex;overflow-y:auto}.markup-comment{flex-direction:column;gap:4px;display:flex}.markup-comment-meta{align-items:center;gap:6px;font-size:11px;display:flex}.markup-comment-author{color:var(--markup-ink);font-weight:600}.markup-comment.is-team .markup-comment-author{color:var(--markup-team)}.markup-comment-badge{background:color-mix(in srgb, var(--markup-team) 12%, transparent);height:14px;color:var(--markup-team);font-family:var(--markup-font-mono);letter-spacing:.12em;text-transform:uppercase;border-radius:999px;align-items:center;padding:0 5px;font-size:9px;font-weight:500;line-height:1;display:inline-flex}.markup-comment-time{color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.04em;font-size:10px}.markup-comment-body{white-space:pre-wrap;word-break:break-word;margin:0;font-size:13px;line-height:1.5}.markup-comment-edited{color:var(--markup-muted);font-size:11px}.markup-thread-actions{align-items:center;gap:4px;display:flex}.markup-comment-meta .markup-reaction-picker-wrap,.markup-thread-actions{margin-left:auto}.markup-comment-meta .markup-reaction-add{width:22px;height:22px;margin-top:-4px;margin-bottom:-4px}.markup-reaction-picker-wrap>.markup-icon-btn,.markup-comment-menu>.markup-icon-btn{margin-top:-4px;margin-bottom:-4px}.markup-comment-menu.is-up .markup-thread-menu-list{animation-name:markup-menu-in-up;top:auto;bottom:calc(100% + 6px)}@keyframes markup-menu-in-up{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.markup-comment{position:relative}.markup-reactions{flex-wrap:wrap;align-items:center;gap:4px;margin-top:2px;display:flex}.markup-reaction-chip{border:1px solid var(--markup-border);height:22px;color:var(--markup-ink);font:inherit;cursor:pointer;background:0 0;border-radius:999px;align-items:center;gap:4px;padding:0 7px 0 6px;font-size:11px;line-height:1;transition:background .12s,border-color .12s;display:inline-flex}.markup-reaction-chip:hover:not(:disabled){background:color-mix(in srgb, var(--markup-ink) 5%, transparent)}.markup-reaction-chip.is-mine{border-color:color-mix(in srgb, var(--markup-brand) 45%, transparent);background:color-mix(in srgb, var(--markup-brand) 10%, transparent)}.markup-reaction-chip.is-mine:hover:not(:disabled){background:color-mix(in srgb, var(--markup-brand) 16%, transparent)}.markup-reaction-chip:disabled{cursor:default;opacity:.6}.markup-reaction-emoji{font-size:13px;line-height:1}.markup-reaction-count{font-family:var(--markup-font-mono);letter-spacing:.04em;color:var(--markup-muted);font-size:10px}.markup-reaction-chip.is-mine .markup-reaction-count{color:var(--markup-brand)}.markup-reaction-picker-wrap{opacity:0;flex:none;transition:opacity .12s;display:inline-flex;position:relative}.markup-comment:hover .markup-reaction-picker-wrap,.markup-comment:focus-within .markup-reaction-picker-wrap,.markup-reaction-picker-wrap.is-open{opacity:1}.markup-reaction-add{border:1px dashed var(--markup-border-strong);width:22px;height:22px;color:var(--markup-muted);font:inherit;cursor:pointer;background:0 0;border-radius:999px;justify-content:center;align-items:center;font-size:13px;line-height:1;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.markup-reaction-add:hover,.markup-reaction-add.is-open{background:color-mix(in srgb, var(--markup-ink) 5%, transparent);color:var(--markup-ink);border-style:solid}.markup-reaction-picker{z-index:1;border:1px solid var(--markup-border-strong);background:var(--markup-paper);border-radius:8px;gap:2px;padding:4px;animation:.12s markup-menu-in;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 1px 2px #1a16140f,0 8px 28px #1a16141a}.markup-reaction-picker-wrap.is-up .markup-reaction-picker{animation-name:markup-menu-in-up;top:auto;bottom:calc(100% + 6px)}.markup-reaction-picker-item{cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;font-size:16px;line-height:1;transition:background .12s;display:inline-flex}.markup-reaction-picker-item:hover{background:color-mix(in srgb, var(--markup-ink) 8%, transparent)}.markup-reaction-picker-item.is-mine{background:color-mix(in srgb, var(--markup-brand) 14%, transparent)}.markup-comment-edit-form{flex-direction:column;gap:6px;display:flex}.markup-comment-edit-form .markup-textarea{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);background:var(--markup-paper);width:100%;color:var(--markup-ink);resize:vertical;font:inherit;outline:none;padding:8px 10px;font-size:13px;line-height:1.5}.markup-comment-edit-form .markup-textarea:focus-visible{border-color:var(--markup-brand);box-shadow:0 0 0 3px #e35d2a2e}.markup-comment-edit-actions{justify-content:flex-end;gap:6px;display:flex}.markup-composer{flex-direction:column;display:flex;position:relative}.markup-composer-input{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);background:var(--markup-paper);width:100%;min-height:36px;max-height:96px;color:var(--markup-ink);resize:none;font-family:var(--markup-font);outline:none;padding:8px 10px;font-size:13px;line-height:1.5;transition:border-color .12s,box-shadow .12s,border-bottom-left-radius .15s,border-bottom-right-radius .15s}.markup-composer-input:focus-visible{border-color:var(--markup-brand);box-shadow:0 0 0 3px #e35d2a2e}.markup-composer-input:disabled{opacity:.6}.markup-composer-input::placeholder{color:var(--markup-muted)}.markup-composer.is-filled .markup-composer-input{border-bottom-right-radius:0;border-bottom-left-radius:0}.markup-composer-footer-wrap{grid-template-rows:0fr;transition:grid-template-rows .15s;display:grid}.markup-composer.is-filled .markup-composer-footer-wrap{grid-template-rows:1fr}.markup-composer-footer{border:1px solid var(--markup-border-strong);border-radius:0 0 var(--markup-radius-sm) var(--markup-radius-sm);opacity:0;border-top:none;justify-content:space-between;align-items:center;gap:8px;padding:2px 2px 2px 10px;transition:opacity .1s;display:flex;overflow:hidden}.markup-composer.is-filled .markup-composer-footer{opacity:1;transition-delay:60ms}.markup-composer-hint{font-family:var(--markup-font-mono);letter-spacing:.06em;color:var(--markup-muted);font-size:10px}.markup-composer-error{color:var(--markup-brand)}.markup-composer-actions{align-items:center;gap:6px;display:flex}.markup-composer-actions-empty{transition:opacity .12s;position:absolute;top:3px;right:3px}.markup-composer.is-filled .markup-composer-actions-empty{opacity:0;pointer-events:none}.markup-author-prompt{flex-direction:column;gap:10px;padding:12px;display:flex}.markup-author-status{color:var(--markup-muted);margin:0;font-size:12px}.markup-input{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);background:var(--markup-paper);width:100%;height:36px;color:var(--markup-ink);outline:none;padding:0 10px;font-size:14px;transition:border-color .12s,box-shadow .12s}.markup-input:focus-visible{border-color:var(--markup-brand);box-shadow:0 0 0 3px #e35d2a2e}.markup-btn{border-radius:var(--markup-radius-sm);height:30px;color:var(--markup-ink);cursor:pointer;letter-spacing:-.01em;white-space:nowrap;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;gap:6px;padding:0 8px;font-size:12px;font-weight:500;transition:background .12s,border-color .12s,color .12s,opacity .12s;display:inline-flex}.markup-btn:disabled{opacity:.5;cursor:not-allowed}.markup-btn-primary{background:var(--markup-ink);color:var(--markup-paper)}.markup-btn-primary:hover:not(:disabled){background:var(--markup-brand)}.markup-btn-ghost{color:var(--markup-muted)}.markup-btn-ghost:hover:not(:disabled){background:var(--markup-border);color:var(--markup-ink)}.markup-screenshot-row{border-top:1px solid var(--markup-border);margin-top:8px;padding-top:8px}.markup-screenshot-status{color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.06em;align-items:center;gap:5px;font-size:10px;display:flex}.markup-screenshot-toggle{cursor:pointer;color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.06em;align-items:center;gap:5px;font-size:10px;transition:color .12s;display:flex}.markup-screenshot-toggle:hover{color:var(--markup-ink)}.markup-screenshot-checkbox{width:12px;height:12px;accent-color:var(--markup-brand);cursor:pointer;margin:0}.markup-screenshot-thumb{border:1px solid var(--markup-border-strong);object-fit:cover;border-radius:3px;flex-shrink:0;width:auto;height:25px;margin:-5px 0 -5px auto;display:block}.markup-comment-screenshot{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);cursor:pointer;background:0 0;margin-top:8px;padding:0;transition:border-color .12s,opacity .12s;display:block;overflow:hidden}.markup-comment-screenshot:hover{border-color:var(--markup-brand);opacity:.9}.markup-comment-screenshot img{object-fit:cover;object-position:top;width:100%;height:auto;max-height:120px;display:block}.markup-lightbox{background:#1a1614e0;border:none;width:100%;max-width:100%;height:100%;max-height:100%;margin:0;padding:24px;position:fixed;inset:0}.markup-lightbox[open]{justify-content:center;align-items:center;display:flex}.markup-lightbox::backdrop{display:none}.markup-lightbox-img{border-radius:var(--markup-radius);object-fit:contain;max-width:100%;max-height:100%;box-shadow:var(--markup-shadow);animation:.16s ease-out markup-lightbox-in}.markup-lightbox-close{color:#fdfcfa;background:#1a161499;position:absolute;top:16px;right:16px}.markup-lightbox-close:hover{color:#fdfcfa;background:#1a1614d9}@keyframes markup-lightbox-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion:reduce){.markup-fab,.markup-pin,.markup-icon-btn,.markup-btn,.markup-popover,.markup-pin-ghost,.markup-placement-overlay,.markup-placement-cursor-help,.markup-lightbox-img{transition:none;animation:none}}", F, I, L, de, fe = 0, pe = [], R = t, me = R.__b, he = R.__r, ge = R.diffed, _e = R.__c, ve = R.unmount, ye = R.__;
252
+ function be(e, t) {
253
+ R.__h && R.__h(I, e, fe || t), fe = 0;
254
254
  var n = I.__H ||= {
255
255
  __: [],
256
256
  __h: []
257
257
  };
258
258
  return e >= n.__.length && n.__.push({}), n.__[e];
259
259
  }
260
- function R(e) {
261
- return pe = 1, Se(Ae, e);
260
+ function z(e) {
261
+ return fe = 1, xe(ke, e);
262
262
  }
263
- function Se(e, t, n) {
264
- var r = xe(F++, 2);
265
- if (r.t = e, !r.__c && (r.__ = [n ? n(t) : Ae(void 0, t), function(e) {
263
+ function xe(e, t, n) {
264
+ var r = be(F++, 2);
265
+ if (r.t = e, !r.__c && (r.__ = [n ? n(t) : ke(void 0, t), function(e) {
266
266
  var t = r.__N ? r.__N[0] : r.__[0], n = r.t(t, e);
267
267
  t !== n && (r.__N = [n, r.__[1]], r.__c.setState({}));
268
268
  }], r.__c = I, !I.__f)) {
@@ -294,99 +294,99 @@ function Se(e, t, n) {
294
294
  }
295
295
  return r.__N || r.__;
296
296
  }
297
- function z(e, t) {
298
- var n = xe(F++, 3);
299
- !L.__s && ke(n.__H, t) && (n.__ = e, n.u = t, I.__H.__h.push(n));
297
+ function B(e, t) {
298
+ var n = be(F++, 3);
299
+ !R.__s && Oe(n.__H, t) && (n.__ = e, n.u = t, I.__H.__h.push(n));
300
300
  }
301
- function B(e) {
302
- return pe = 5, Ce(function() {
301
+ function V(e) {
302
+ return fe = 5, Se(function() {
303
303
  return { current: e };
304
304
  }, []);
305
305
  }
306
- function Ce(e, t) {
307
- var n = xe(F++, 7);
308
- return ke(n.__H, t) && (n.__ = e(), n.__H = t, n.__h = e), n.__;
306
+ function Se(e, t) {
307
+ var n = be(F++, 7);
308
+ return Oe(n.__H, t) && (n.__ = e(), n.__H = t, n.__h = e), n.__;
309
309
  }
310
- function V(e, t) {
311
- return pe = 8, Ce(function() {
310
+ function H(e, t) {
311
+ return fe = 8, Se(function() {
312
312
  return e;
313
313
  }, t);
314
314
  }
315
- function we() {
316
- for (var e; e = me.shift();) {
315
+ function Ce() {
316
+ for (var e; e = pe.shift();) {
317
317
  var t = e.__H;
318
318
  if (e.__P && t) try {
319
- t.__h.some(De), t.__h.some(Oe), t.__h = [];
319
+ t.__h.some(Ee), t.__h.some(De), t.__h = [];
320
320
  } catch (n) {
321
- t.__h = [], L.__e(n, e.__v);
321
+ t.__h = [], R.__e(n, e.__v);
322
322
  }
323
323
  }
324
324
  }
325
- L.__b = function(e) {
326
- I = null, he && he(e);
327
- }, L.__ = function(e, t) {
328
- e && t.__k && t.__k.__m && (e.__m = t.__k.__m), be && be(e, t);
329
- }, L.__r = function(e) {
330
- ge && ge(e), F = 0;
325
+ R.__b = function(e) {
326
+ I = null, me && me(e);
327
+ }, R.__ = function(e, t) {
328
+ e && t.__k && t.__k.__m && (e.__m = t.__k.__m), ye && ye(e, t);
329
+ }, R.__r = function(e) {
330
+ he && he(e), F = 0;
331
331
  var t = (I = e.__c).__H;
332
- t && (de === I ? (t.__h = [], I.__h = [], t.__.some(function(e) {
332
+ t && (L === I ? (t.__h = [], I.__h = [], t.__.some(function(e) {
333
333
  e.__N && (e.__ = e.__N), e.u = e.__N = void 0;
334
- })) : (t.__h.some(De), t.__h.some(Oe), t.__h = [], F = 0)), de = I;
335
- }, L.diffed = function(e) {
336
- _e && _e(e);
334
+ })) : (t.__h.some(Ee), t.__h.some(De), t.__h = [], F = 0)), L = I;
335
+ }, R.diffed = function(e) {
336
+ ge && ge(e);
337
337
  var t = e.__c;
338
- t && t.__H && (t.__H.__h.length && (me.push(t) !== 1 && fe === L.requestAnimationFrame || ((fe = L.requestAnimationFrame) || Ee)(we)), t.__H.__.some(function(e) {
338
+ t && t.__H && (t.__H.__h.length && (pe.push(t) !== 1 && de === R.requestAnimationFrame || ((de = R.requestAnimationFrame) || Te)(Ce)), t.__H.__.some(function(e) {
339
339
  e.u && (e.__H = e.u), e.u = void 0;
340
- })), de = I = null;
341
- }, L.__c = function(e, t) {
340
+ })), L = I = null;
341
+ }, R.__c = function(e, t) {
342
342
  t.some(function(e) {
343
343
  try {
344
- e.__h.some(De), e.__h = e.__h.filter(function(e) {
345
- return !e.__ || Oe(e);
344
+ e.__h.some(Ee), e.__h = e.__h.filter(function(e) {
345
+ return !e.__ || De(e);
346
346
  });
347
347
  } catch (n) {
348
348
  t.some(function(e) {
349
349
  e.__h &&= [];
350
- }), t = [], L.__e(n, e.__v);
350
+ }), t = [], R.__e(n, e.__v);
351
351
  }
352
- }), ve && ve(e, t);
353
- }, L.unmount = function(e) {
354
- ye && ye(e);
352
+ }), _e && _e(e, t);
353
+ }, R.unmount = function(e) {
354
+ ve && ve(e);
355
355
  var t, n = e.__c;
356
356
  n && n.__H && (n.__H.__.some(function(e) {
357
357
  try {
358
- De(e);
358
+ Ee(e);
359
359
  } catch (e) {
360
360
  t = e;
361
361
  }
362
- }), n.__H = void 0, t && L.__e(t, n.__v));
362
+ }), n.__H = void 0, t && R.__e(t, n.__v));
363
363
  };
364
- var Te = typeof requestAnimationFrame == "function";
365
- function Ee(e) {
364
+ var we = typeof requestAnimationFrame == "function";
365
+ function Te(e) {
366
366
  var t, n = function() {
367
- clearTimeout(r), Te && cancelAnimationFrame(t), setTimeout(e);
367
+ clearTimeout(r), we && cancelAnimationFrame(t), setTimeout(e);
368
368
  }, r = setTimeout(n, 35);
369
- Te && (t = requestAnimationFrame(n));
369
+ we && (t = requestAnimationFrame(n));
370
370
  }
371
- function De(e) {
371
+ function Ee(e) {
372
372
  var t = I, n = e.__c;
373
373
  typeof n == "function" && (e.__c = void 0, n()), I = t;
374
374
  }
375
- function Oe(e) {
375
+ function De(e) {
376
376
  var t = I;
377
377
  e.__c = e.__(), I = t;
378
378
  }
379
- function ke(e, t) {
379
+ function Oe(e, t) {
380
380
  return !e || e.length !== t.length || t.some(function(t, n) {
381
381
  return t !== e[n];
382
382
  });
383
383
  }
384
- function Ae(e, t) {
384
+ function ke(e, t) {
385
385
  return typeof t == "function" ? t(e) : t;
386
386
  }
387
- for (var je = "1.37.0", H = [], U = [], Me = Uint8Array, Ne = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", Pe = 0, Fe = Ne.length; Pe < Fe; ++Pe) H[Pe] = Ne[Pe], U[Ne.charCodeAt(Pe)] = Pe;
388
- U[45] = 62, U[95] = 63;
389
- function Ie(e) {
387
+ for (var Ae = "1.37.0", U = [], W = [], je = Uint8Array, Me = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", Ne = 0, Pe = Me.length; Ne < Pe; ++Ne) U[Ne] = Me[Ne], W[Me.charCodeAt(Ne)] = Ne;
388
+ W[45] = 62, W[95] = 63;
389
+ function Fe(e) {
390
390
  var t = e.length;
391
391
  if (t % 4 > 0) throw Error("Invalid string. Length must be a multiple of 4");
392
392
  var n = e.indexOf("=");
@@ -394,28 +394,28 @@ function Ie(e) {
394
394
  var r = n === t ? 0 : 4 - n % 4;
395
395
  return [n, r];
396
396
  }
397
- function Le(e, t, n) {
397
+ function Ie(e, t, n) {
398
398
  return (t + n) * 3 / 4 - n;
399
399
  }
400
- function Re(e) {
401
- var t, n = Ie(e), r = n[0], i = n[1], a = new Me(Le(e, r, i)), o = 0, s = i > 0 ? r - 4 : r, c;
402
- for (c = 0; c < s; c += 4) t = U[e.charCodeAt(c)] << 18 | U[e.charCodeAt(c + 1)] << 12 | U[e.charCodeAt(c + 2)] << 6 | U[e.charCodeAt(c + 3)], a[o++] = t >> 16 & 255, a[o++] = t >> 8 & 255, a[o++] = t & 255;
403
- return i === 2 && (t = U[e.charCodeAt(c)] << 2 | U[e.charCodeAt(c + 1)] >> 4, a[o++] = t & 255), i === 1 && (t = U[e.charCodeAt(c)] << 10 | U[e.charCodeAt(c + 1)] << 4 | U[e.charCodeAt(c + 2)] >> 2, a[o++] = t >> 8 & 255, a[o++] = t & 255), a;
400
+ function Le(e) {
401
+ var t, n = Fe(e), r = n[0], i = n[1], a = new je(Ie(e, r, i)), o = 0, s = i > 0 ? r - 4 : r, c;
402
+ for (c = 0; c < s; c += 4) t = W[e.charCodeAt(c)] << 18 | W[e.charCodeAt(c + 1)] << 12 | W[e.charCodeAt(c + 2)] << 6 | W[e.charCodeAt(c + 3)], a[o++] = t >> 16 & 255, a[o++] = t >> 8 & 255, a[o++] = t & 255;
403
+ return i === 2 && (t = W[e.charCodeAt(c)] << 2 | W[e.charCodeAt(c + 1)] >> 4, a[o++] = t & 255), i === 1 && (t = W[e.charCodeAt(c)] << 10 | W[e.charCodeAt(c + 1)] << 4 | W[e.charCodeAt(c + 2)] >> 2, a[o++] = t >> 8 & 255, a[o++] = t & 255), a;
404
404
  }
405
- function ze(e) {
406
- return H[e >> 18 & 63] + H[e >> 12 & 63] + H[e >> 6 & 63] + H[e & 63];
405
+ function Re(e) {
406
+ return U[e >> 18 & 63] + U[e >> 12 & 63] + U[e >> 6 & 63] + U[e & 63];
407
407
  }
408
- function Be(e, t, n) {
409
- for (var r, i = [], a = t; a < n; a += 3) r = (e[a] << 16 & 16711680) + (e[a + 1] << 8 & 65280) + (e[a + 2] & 255), i.push(ze(r));
408
+ function ze(e, t, n) {
409
+ for (var r, i = [], a = t; a < n; a += 3) r = (e[a] << 16 & 16711680) + (e[a + 1] << 8 & 65280) + (e[a + 2] & 255), i.push(Re(r));
410
410
  return i.join("");
411
411
  }
412
- function Ve(e) {
413
- for (var t, n = e.length, r = n % 3, i = [], a = 16383, o = 0, s = n - r; o < s; o += a) i.push(Be(e, o, o + a > s ? s : o + a));
414
- return r === 1 ? (t = e[n - 1], i.push(H[t >> 2] + H[t << 4 & 63] + "==")) : r === 2 && (t = (e[n - 2] << 8) + e[n - 1], i.push(H[t >> 10] + H[t >> 4 & 63] + H[t << 2 & 63] + "=")), i.join("");
412
+ function Be(e) {
413
+ for (var t, n = e.length, r = n % 3, i = [], a = 16383, o = 0, s = n - r; o < s; o += a) i.push(ze(e, o, o + a > s ? s : o + a));
414
+ return r === 1 ? (t = e[n - 1], i.push(U[t >> 2] + U[t << 4 & 63] + "==")) : r === 2 && (t = (e[n - 2] << 8) + e[n - 1], i.push(U[t >> 10] + U[t >> 4 & 63] + U[t << 2 & 63] + "=")), i.join("");
415
415
  }
416
416
  //#endregion
417
417
  //#region ../../node_modules/.pnpm/convex@1.37.0_react@19.2.6/node_modules/convex/dist/esm/common/index.js
418
- function W(e) {
418
+ function Ve(e) {
419
419
  if (e === void 0) return {};
420
420
  if (!Ue(e)) throw Error(`The arguments to a Convex function must be an object. Received: ${e}`);
421
421
  return e;
@@ -447,10 +447,10 @@ function Ze(e) {
447
447
  t.length % 2 == 1 && (t = "0" + t);
448
448
  let n = new Uint8Array(/* @__PURE__ */ new ArrayBuffer(8)), r = 0;
449
449
  for (let i of t.match(/.{2}/g).reverse()) n.set([parseInt(i, 16)], r++), e >>= Je;
450
- return Ve(n);
450
+ return Be(n);
451
451
  }
452
452
  function Qe(e) {
453
- let t = Re(e);
453
+ let t = Le(e);
454
454
  if (t.byteLength !== 8) throw Error(`Received ${t.byteLength} bytes, expected 8 for $integer`);
455
455
  let n = qe, r = qe;
456
456
  for (let e of t) n += BigInt(e) * Ye ** r, r++;
@@ -459,10 +459,10 @@ function Qe(e) {
459
459
  function $e(e) {
460
460
  if (e < Ge || Ke < e) throw Error(`BigInt ${e} does not fit into a 64-bit signed integer.`);
461
461
  let t = /* @__PURE__ */ new ArrayBuffer(8);
462
- return new DataView(t).setBigInt64(0, e, !0), Ve(new Uint8Array(t));
462
+ return new DataView(t).setBigInt64(0, e, !0), Be(new Uint8Array(t));
463
463
  }
464
464
  function et(e) {
465
- let t = Re(e);
465
+ let t = Le(e);
466
466
  if (t.byteLength !== 8) throw Error(`Received ${t.byteLength} bytes, expected 8 for $integer`);
467
467
  return new DataView(t.buffer).getBigInt64(0, !0);
468
468
  }
@@ -484,7 +484,7 @@ function at(e) {
484
484
  let n = t[0][0];
485
485
  if (n === "$bytes") {
486
486
  if (typeof e.$bytes != "string") throw Error(`Malformed $bytes field on ${e}`);
487
- return Re(e.$bytes).buffer;
487
+ return Le(e.$bytes).buffer;
488
488
  }
489
489
  if (n === "$integer") {
490
490
  if (typeof e.$integer != "string") throw Error(`Malformed $integer field on ${e}`);
@@ -492,7 +492,7 @@ function at(e) {
492
492
  }
493
493
  if (n === "$float") {
494
494
  if (typeof e.$float != "string") throw Error(`Malformed $float field on ${e}`);
495
- let t = Re(e.$float);
495
+ let t = Le(e.$float);
496
496
  if (t.byteLength !== 8) throw Error(`Received ${t.byteLength} bytes, expected 8 for $float`);
497
497
  let n = new DataView(t.buffer).getFloat64(0, We);
498
498
  if (!Xe(n)) throw Error(`Float ${n} should be encoded as a number`);
@@ -526,10 +526,10 @@ function ct(e, t, n, r) {
526
526
  }
527
527
  if (typeof e == "number") if (Xe(e)) {
528
528
  let t = /* @__PURE__ */ new ArrayBuffer(8);
529
- return new DataView(t).setFloat64(0, e, We), { $float: Ve(new Uint8Array(t)) };
529
+ return new DataView(t).setFloat64(0, e, We), { $float: Be(new Uint8Array(t)) };
530
530
  } else return e;
531
531
  if (typeof e == "boolean" || typeof e == "string") return e;
532
- if (e instanceof ArrayBuffer) return { $bytes: Ve(new Uint8Array(e)) };
532
+ if (e instanceof ArrayBuffer) return { $bytes: Be(new Uint8Array(e)) };
533
533
  if (Array.isArray(e)) return e.map((e, r) => ct(e, t, n + `[${r}]`, !1));
534
534
  if (e instanceof Set) throw Error(lt(n, "Set", [...e], t));
535
535
  if (e instanceof Map) throw Error(lt(n, "Map", [...e], t));
@@ -1047,7 +1047,7 @@ var Yt = Object.defineProperty, Xt = (e, t, n) => t in e ? Yt(e, t, {
1047
1047
  Zt(this, "queryResults"), Zt(this, "modifiedQueries"), this.queryResults = e, this.modifiedQueries = [];
1048
1048
  }
1049
1049
  getQuery(t, ...n) {
1050
- let r = W(n[0]), i = K(t), a = this.queryResults.get(Mt(i, r));
1050
+ let r = Ve(n[0]), i = K(t), a = this.queryResults.get(Mt(i, r));
1051
1051
  if (a !== void 0) return e.queryValue(a.result);
1052
1052
  }
1053
1053
  getAllQueries(t) {
@@ -1059,7 +1059,7 @@ var Yt = Object.defineProperty, Xt = (e, t, n) => t in e ? Yt(e, t, {
1059
1059
  return n;
1060
1060
  }
1061
1061
  setQuery(e, t, n) {
1062
- let r = W(t), i = K(e), a = Mt(i, r), o;
1062
+ let r = Ve(t), i = K(e), a = Mt(i, r), o;
1063
1063
  o = n === void 0 ? void 0 : {
1064
1064
  success: !0,
1065
1065
  value: n,
@@ -1225,11 +1225,11 @@ var Yt = Object.defineProperty, Xt = (e, t, n) => t in e ? Yt(e, t, {
1225
1225
  //#endregion
1226
1226
  //#region ../../node_modules/.pnpm/convex@1.37.0_react@19.2.6/node_modules/convex/dist/esm/browser/sync/protocol.js
1227
1227
  function mn(e) {
1228
- let t = Re(e);
1228
+ let t = Le(e);
1229
1229
  return rn.fromBytesLE(Array.from(t));
1230
1230
  }
1231
1231
  function hn(e) {
1232
- return Ve(new Uint8Array(e.toBytesLE()));
1232
+ return Be(new Uint8Array(e.toBytesLE()));
1233
1233
  }
1234
1234
  function gn(e) {
1235
1235
  switch (e.type) {
@@ -1868,7 +1868,7 @@ var Gn = Object.defineProperty, Kn = (e, t, n) => t in e ? Gn(e, t, {
1868
1868
  if (s === "http") c = "ws";
1869
1869
  else if (s === "https") c = "wss";
1870
1870
  else throw Error(`Unknown parent protocol ${s}`);
1871
- let l = `${c}://${o}/api/${je}/sync`;
1871
+ let l = `${c}://${o}/api/${Ae}/sync`;
1872
1872
  this.state = new Lt(), this.remoteQuerySet = new pn((e) => this.state.queryPath(e), this.logger), this.requestManager = new Vt(this.logger, this.markConnectionStateDirty);
1873
1873
  let u = () => {
1874
1874
  this.webSocketManager.pause(), this.state.pause();
@@ -2022,7 +2022,7 @@ var Gn = Object.defineProperty, Kn = (e, t, n) => t in e ? Gn(e, t, {
2022
2022
  this.webSocketManager.sendMessage(e);
2023
2023
  }
2024
2024
  subscribe(e, t, n) {
2025
- let r = W(t), { modification: i, queryToken: a, unsubscribe: o } = this.state.subscribe(e, r, n?.journal, n?.componentPath);
2025
+ let r = Ve(t), { modification: i, queryToken: a, unsubscribe: o } = this.state.subscribe(e, r, n?.journal, n?.componentPath);
2026
2026
  return i !== null && this.webSocketManager.sendMessage(i), {
2027
2027
  queryToken: a,
2028
2028
  unsubscribe: () => {
@@ -2032,7 +2032,7 @@ var Gn = Object.defineProperty, Kn = (e, t, n) => t in e ? Gn(e, t, {
2032
2032
  };
2033
2033
  }
2034
2034
  localQueryResult(e, t) {
2035
- let n = Mt(e, W(t));
2035
+ let n = Mt(e, Ve(t));
2036
2036
  return this.optimisticQueryResults.queryResult(n);
2037
2037
  }
2038
2038
  localQueryResultByToken(e) {
@@ -2042,11 +2042,11 @@ var Gn = Object.defineProperty, Kn = (e, t, n) => t in e ? Gn(e, t, {
2042
2042
  return this.optimisticQueryResults.hasQueryResult(e);
2043
2043
  }
2044
2044
  localQueryLogs(e, t) {
2045
- let n = Mt(e, W(t));
2045
+ let n = Mt(e, Ve(t));
2046
2046
  return this.optimisticQueryResults.queryLogs(n);
2047
2047
  }
2048
2048
  queryJournal(e, t) {
2049
- let n = Mt(e, W(t));
2049
+ let n = Mt(e, Ve(t));
2050
2050
  return this.state.queryJournal(n);
2051
2051
  }
2052
2052
  connectionState() {
@@ -2078,7 +2078,7 @@ var Gn = Object.defineProperty, Kn = (e, t, n) => t in e ? Gn(e, t, {
2078
2078
  return i;
2079
2079
  }
2080
2080
  enqueueMutation(e, t, n, r) {
2081
- let i = W(t);
2081
+ let i = Ve(t);
2082
2082
  this.tryReportLongDisconnect();
2083
2083
  let a = this.nextRequestId;
2084
2084
  if (this._nextRequestId++, n !== void 0) {
@@ -2125,7 +2125,7 @@ var Gn = Object.defineProperty, Kn = (e, t, n) => t in e ? Gn(e, t, {
2125
2125
  return n.value;
2126
2126
  }
2127
2127
  async actionInternal(e, t, n) {
2128
- let r = W(t), i = this.nextRequestId;
2128
+ let r = Ve(t), i = this.nextRequestId;
2129
2129
  this._nextRequestId++, this.tryReportLongDisconnect();
2130
2130
  let a = {
2131
2131
  type: "Action",
@@ -2167,7 +2167,7 @@ var Gn = Object.defineProperty, Kn = (e, t, n) => t in e ? Gn(e, t, {
2167
2167
  method: "POST",
2168
2168
  headers: {
2169
2169
  "Content-Type": "application/json",
2170
- "Convex-Client": `npm-${je}`
2170
+ "Convex-Client": `npm-${Ae}`
2171
2171
  },
2172
2172
  body: JSON.stringify({ event: "LongWebsocketDisconnect" })
2173
2173
  }).then((e) => {
@@ -3490,7 +3490,7 @@ function la({ size: e = 16 }) {
3490
3490
  //#endregion
3491
3491
  //#region src/runtime/ui/fab.tsx
3492
3492
  function ua({ active: e, onToggle: t, onHide: n, position: r = "bottom-right", onPositionChange: i }) {
3493
- let a = r === "bottom-left" ? "markup-fab-left" : "markup-fab-right", o = B(null), [s, c] = R(null), [l, u] = R(!1), d = B(!1);
3493
+ let a = r === "bottom-left" ? "markup-fab-left" : "markup-fab-right", o = V(null), [s, c] = z(null), [l, u] = z(!1), d = V(!1);
3494
3494
  function f(e) {
3495
3495
  if (e.stopPropagation(), e.button !== 0) return;
3496
3496
  let t = o.current;
@@ -3570,7 +3570,7 @@ var fa = [
3570
3570
  "[tabindex]:not([tabindex=\"-1\"])"
3571
3571
  ].join(",");
3572
3572
  function pa(e, t) {
3573
- z(() => {
3573
+ B(() => {
3574
3574
  if (!t) return;
3575
3575
  let n = e.current;
3576
3576
  if (!n) return;
@@ -3587,8 +3587,8 @@ function pa(e, t) {
3587
3587
  //#endregion
3588
3588
  //#region src/runtime/ui/author-prompt.tsx
3589
3589
  function ma({ pending: e, connecting: t = !1, onSubmit: n, onCancel: r, onSignIn: i }) {
3590
- let [a, o] = R(""), [s, c] = R(""), l = B(null);
3591
- z(() => {
3590
+ let [a, o] = z(""), [s, c] = z(""), l = V(null);
3591
+ B(() => {
3592
3592
  l.current?.focus();
3593
3593
  }, []);
3594
3594
  function u(r) {
@@ -3667,13 +3667,13 @@ function ma({ pending: e, connecting: t = !1, onSubmit: n, onCancel: r, onSignIn
3667
3667
  //#region src/runtime/ui/composer.tsx
3668
3668
  var ha = 4e3;
3669
3669
  function ga({ label: e, placeholder: t = "Leave feedback…", submitLabel: n = "Post", initialFocus: r = !0, pending: i, error: a, onSubmit: o }) {
3670
- let [s, c] = R(""), l = B(null), u = B(!1);
3671
- z(() => {
3670
+ let [s, c] = z(""), l = V(null), u = V(!1);
3671
+ B(() => {
3672
3672
  r && l.current?.focus();
3673
- }, [r]), z(() => {
3673
+ }, [r]), B(() => {
3674
3674
  let e = l.current;
3675
3675
  e && (e.style.height = "auto", e.style.height = `${Math.min(e.scrollHeight, 160)}px`);
3676
- }, [s]), z(() => {
3676
+ }, [s]), B(() => {
3677
3677
  u.current && !i && !a && (c(""), l.current?.focus()), u.current = i;
3678
3678
  }, [i, a]);
3679
3679
  function d(e) {
@@ -3743,14 +3743,14 @@ function ga({ label: e, placeholder: t = "Leave feedback…", submitLabel: n = "
3743
3743
  //#endregion
3744
3744
  //#region src/runtime/ui/new-thread-popover.tsx
3745
3745
  function _a({ pageX: e, pageY: t, authorName: n, isVerified: r, identityResolving: i, pending: a, error: o, screenshot: s, screenshotCapturing: c, onAuthor: l, onSignIn: u, onSubmit: d, onClose: f }) {
3746
- let p = B(null);
3746
+ let p = V(null);
3747
3747
  pa(p, !0);
3748
- let [m, h] = R(!1), [g, _] = R(null), [v, y] = R(null), [b, x] = R(!1);
3749
- z(() => {
3748
+ let [m, h] = z(!1), [g, _] = z(null), [v, y] = z(null), [b, x] = z(!1);
3749
+ B(() => {
3750
3750
  if (!s) return;
3751
3751
  let e = URL.createObjectURL(s);
3752
3752
  return _(e), () => URL.revokeObjectURL(e);
3753
- }, [s]), z(() => {
3753
+ }, [s]), B(() => {
3754
3754
  let e = p.current;
3755
3755
  if (!e) return;
3756
3756
  if (typeof e.showPopover == "function" && !e.matches(":popover-open")) try {
@@ -3925,7 +3925,7 @@ function ba({ pageX: e, pageY: t }) {
3925
3925
  //#endregion
3926
3926
  //#region src/runtime/ui/placement-overlay.tsx
3927
3927
  function xa({ onPlace: e, onCancel: t }) {
3928
- z(() => {
3928
+ B(() => {
3929
3929
  function e(e) {
3930
3930
  e.key === "Escape" && t();
3931
3931
  }
@@ -3959,31 +3959,31 @@ var Sa = [
3959
3959
  "❓"
3960
3960
  ];
3961
3961
  function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, identityResolving: i, canDelete: a, pending: o, error: s, onAuthor: c, onSignIn: l, onClose: u, onReply: d, onEditComment: f, onDeleteComment: p, onToggleReaction: m, onResolve: h, onDelete: g }) {
3962
- let _ = B(null), v = B(null), y = B(null), b = B(null), x = B(null), [S, C] = R(!1), [w, T] = R(!1), [E, D] = R(null), [O, ee] = R(""), [k, A] = R(null), [te, j] = R("down"), [ne, M] = R(null), [N, P] = R(null), [re, ie] = R("down"), ae = B(null), [oe, se] = R(null), [ce, le] = R(!1);
3962
+ let _ = V(null), v = V(null), y = V(null), b = V(null), x = V(null), [S, C] = z(!1), [w, T] = z(!1), [E, D] = z(null), [O, ee] = z(""), [k, A] = z(null), [j, M] = z("down"), [te, N] = z(null), [P, ne] = z(null), [re, ie] = z("down"), ae = V(null), [oe, se] = z(null), [ce, le] = z(!1);
3963
3963
  pa(_, !0);
3964
- let ue = e.resolvedAt != null, F = Ce(() => e.comments.filter((e) => !e.deleted), [e.comments]);
3964
+ let ue = e.resolvedAt != null, F = Se(() => e.comments.filter((e) => !e.deleted), [e.comments]);
3965
3965
  function I(e, t) {
3966
3966
  D(e), ee(t);
3967
3967
  }
3968
- function de() {
3968
+ function L() {
3969
3969
  D(null), ee("");
3970
3970
  }
3971
- z(() => {
3971
+ B(() => {
3972
3972
  if (!E) return;
3973
3973
  let t = e.comments.find((e) => e._id === E);
3974
- (!t || t.deleted) && de();
3974
+ (!t || t.deleted) && L();
3975
3975
  }, [e.comments, E]);
3976
- let fe = B(!0);
3977
- z(() => {
3976
+ let de = V(!0);
3977
+ B(() => {
3978
3978
  let e = b.current;
3979
3979
  if (e) {
3980
- if (fe.current) {
3981
- fe.current = !1, e.scrollTop = e.scrollHeight;
3980
+ if (de.current) {
3981
+ de.current = !1, e.scrollTop = e.scrollHeight;
3982
3982
  return;
3983
3983
  }
3984
3984
  e.scrollHeight - e.scrollTop - e.clientHeight < 80 && (e.scrollTop = e.scrollHeight);
3985
3985
  }
3986
- }, [F.length]), z(() => {
3986
+ }, [F.length]), B(() => {
3987
3987
  if (!S) {
3988
3988
  T(!1);
3989
3989
  return;
@@ -3992,22 +3992,22 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
3992
3992
  v.current && !e.composedPath().includes(v.current) && C(!1);
3993
3993
  }
3994
3994
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
3995
- }, [S]), z(() => {
3995
+ }, [S]), B(() => {
3996
3996
  if (!k) {
3997
- M(null);
3997
+ N(null);
3998
3998
  return;
3999
3999
  }
4000
4000
  function e(e) {
4001
4001
  y.current && !e.composedPath().includes(y.current) && A(null);
4002
4002
  }
4003
4003
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
4004
- }, [k]), z(() => {
4005
- if (!N) return;
4004
+ }, [k]), B(() => {
4005
+ if (!P) return;
4006
4006
  function e(e) {
4007
- ae.current && !e.composedPath().includes(ae.current) && P(null);
4007
+ ae.current && !e.composedPath().includes(ae.current) && ne(null);
4008
4008
  }
4009
4009
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
4010
- }, [N]), z(() => {
4010
+ }, [P]), B(() => {
4011
4011
  let e = _.current;
4012
4012
  if (!e) return;
4013
4013
  if (typeof e.showPopover == "function" && !e.matches(":popover-open")) try {
@@ -4018,7 +4018,7 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4018
4018
  }
4019
4019
  return e.addEventListener("toggle", t), () => e.removeEventListener("toggle", t);
4020
4020
  }, [u]);
4021
- function pe(e) {
4021
+ function fe(e) {
4022
4022
  if (e.button !== 0 || e.target?.closest("button, a, input, textarea, select")) return;
4023
4023
  let t = _.current;
4024
4024
  if (!t) return;
@@ -4046,7 +4046,7 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4046
4046
  }
4047
4047
  l.addEventListener("pointermove", d), l.addEventListener("pointerup", f), l.addEventListener("pointercancel", f);
4048
4048
  }
4049
- let me = Ce(() => {
4049
+ let pe = Se(() => {
4050
4050
  let t = Tr({
4051
4051
  anchorX: e.anchorX,
4052
4052
  anchorY: e.anchorY,
@@ -4067,15 +4067,15 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4067
4067
  class: Q("markup-popover", oe && "is-floating", ce && "is-dragging"),
4068
4068
  popover: "auto",
4069
4069
  style: {
4070
- "--markup-pop-x": `${oe?.left ?? me.left}px`,
4071
- "--markup-pop-y": `${oe?.top ?? me.top}px`
4070
+ "--markup-pop-x": `${oe?.left ?? pe.left}px`,
4071
+ "--markup-pop-y": `${oe?.top ?? pe.top}px`
4072
4072
  },
4073
4073
  role: "dialog",
4074
4074
  "aria-label": "Markup thread",
4075
4075
  children: [
4076
4076
  /* @__PURE__ */ $("header", {
4077
4077
  class: "markup-popover-header",
4078
- onPointerDown: pe,
4078
+ onPointerDown: fe,
4079
4079
  children: [/* @__PURE__ */ $("span", {
4080
4080
  class: "markup-eyebrow",
4081
4081
  children: [
@@ -4139,7 +4139,7 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4139
4139
  ref: b,
4140
4140
  class: "markup-comments",
4141
4141
  children: F.map((t, r) => {
4142
- let i = !t.fromDashboard && n != null && t.authorClientId === n, a = r === 0, s = i && !ue && !t.deleted, c = i && !ue && !t.deleted && !a, l = E === t._id, u = (s || c) && !l && !t.deleted, d = k === t._id, h = ne === t._id;
4142
+ let i = !t.fromDashboard && n != null && t.authorClientId === n, a = r === 0, s = i && !ue && !t.deleted, c = i && !ue && !t.deleted && !a, l = E === t._id, u = (s || c) && !l && !t.deleted, d = k === t._id, h = te === t._id;
4143
4143
  return /* @__PURE__ */ $("li", {
4144
4144
  class: Q("markup-comment", t.fromDashboard && "is-team"),
4145
4145
  children: [
@@ -4164,24 +4164,24 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4164
4164
  class: "markup-thread-actions",
4165
4165
  children: [!ue && !l ? /* @__PURE__ */ $(wa, {
4166
4166
  comment: t,
4167
- pickerOpen: N === t._id,
4167
+ pickerOpen: P === t._id,
4168
4168
  pickerDirection: re,
4169
4169
  pickerRef: (e) => {
4170
- N === t._id && (ae.current = e);
4170
+ P === t._id && (ae.current = e);
4171
4171
  },
4172
4172
  onPickerClick: (e) => {
4173
- if (N === t._id) {
4174
- P(null);
4173
+ if (P === t._id) {
4174
+ ne(null);
4175
4175
  return;
4176
4176
  }
4177
4177
  let n = e.currentTarget.getBoundingClientRect(), r = b.current?.getBoundingClientRect();
4178
- ie((r ? r.bottom - n.bottom : Infinity) < 44 ? "up" : "down"), P(t._id);
4178
+ ie((r ? r.bottom - n.bottom : Infinity) < 44 ? "up" : "down"), ne(t._id);
4179
4179
  },
4180
4180
  onPickerSelect: (e) => {
4181
- P(null), m(t._id, e);
4181
+ ne(null), m(t._id, e);
4182
4182
  }
4183
4183
  }) : null, u ? /* @__PURE__ */ $("div", {
4184
- class: Q("markup-thread-menu markup-comment-menu", d && "is-open", d && te === "up" && "is-up"),
4184
+ class: Q("markup-thread-menu markup-comment-menu", d && "is-open", d && j === "up" && "is-up"),
4185
4185
  ref: (e) => {
4186
4186
  d && (y.current = e);
4187
4187
  },
@@ -4195,7 +4195,7 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4195
4195
  return;
4196
4196
  }
4197
4197
  let n = e.currentTarget.getBoundingClientRect(), r = b.current?.getBoundingClientRect(), i = (+!!s + +!!c) * 32 + 8 + 6;
4198
- j((r ? r.bottom - n.bottom : Infinity) < i ? "up" : "down"), A(t._id);
4198
+ M((r ? r.bottom - n.bottom : Infinity) < i ? "up" : "down"), A(t._id);
4199
4199
  },
4200
4200
  children: /* @__PURE__ */ $(aa, { size: 16 })
4201
4201
  }), d ? /* @__PURE__ */ $("div", {
@@ -4211,7 +4211,7 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4211
4211
  type: "button",
4212
4212
  class: Q("markup-thread-menu-item", h && "is-danger"),
4213
4213
  onClick: () => {
4214
- h ? (A(null), p(t._id)) : M(t._id);
4214
+ h ? (A(null), p(t._id)) : N(t._id);
4215
4215
  },
4216
4216
  children: h ? "Confirm delete" : "Delete…"
4217
4217
  }) : null]
@@ -4226,11 +4226,11 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4226
4226
  e.preventDefault();
4227
4227
  let n = O.trim();
4228
4228
  if (!n || n === t.body) {
4229
- de();
4229
+ L();
4230
4230
  return;
4231
4231
  }
4232
4232
  try {
4233
- await f(t._id, n), de();
4233
+ await f(t._id, n), L();
4234
4234
  } catch {}
4235
4235
  },
4236
4236
  children: [/* @__PURE__ */ $("textarea", {
@@ -4245,7 +4245,7 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4245
4245
  children: [/* @__PURE__ */ $("button", {
4246
4246
  type: "button",
4247
4247
  class: "markup-btn markup-btn-ghost",
4248
- onClick: de,
4248
+ onClick: L,
4249
4249
  disabled: o,
4250
4250
  children: "Cancel"
4251
4251
  }), /* @__PURE__ */ $("button", {
@@ -4430,9 +4430,9 @@ function Aa(e) {
4430
4430
  };
4431
4431
  }
4432
4432
  function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4433
- let [r, i] = R(() => window.location.pathname), [a, o] = R([]), [s, c] = R(null), [l, u] = R(n), d = B(null);
4433
+ let [r, i] = z(() => window.location.pathname), [a, o] = z([]), [s, c] = z(null), [l, u] = z(n), d = V(null);
4434
4434
  d.current = s;
4435
- let [f, p] = R(0), m = Ce(() => Or({
4435
+ let [f, p] = z(0), m = Se(() => Or({
4436
4436
  apiUrl: e,
4437
4437
  apiKey: t,
4438
4438
  getToken: () => {
@@ -4456,8 +4456,8 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4456
4456
  };
4457
4457
  d.current = t, c(t), Mr(t), p((e) => e + 1);
4458
4458
  }
4459
- }), [e, t]), [h, g] = R({ kind: "idle" }), [_, v] = R(!1), [y, b] = R(null), [x, S] = R(!1), [C, w] = R(!1), [, T] = R(0), E = B(null), D = s?.name ?? null, O = s?.isVerified ?? !1, ee = s == null;
4460
- z(() => {
4459
+ }), [e, t]), [h, g] = z({ kind: "idle" }), [_, v] = z(!1), [y, b] = z(null), [x, S] = z(!1), [C, w] = z(!1), [, T] = z(0), E = V(null), D = s?.name ?? null, O = s?.isVerified ?? !1, ee = s == null;
4460
+ B(() => {
4461
4461
  let e = jr();
4462
4462
  if (e?.anonToken || e?.isVerified) {
4463
4463
  c(e);
@@ -4482,8 +4482,8 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4482
4482
  t = !0, n && clearTimeout(n);
4483
4483
  };
4484
4484
  }, [m, f]);
4485
- let [k, A] = R(null);
4486
- z(() => {
4485
+ let [k, A] = z(null);
4486
+ B(() => {
4487
4487
  let e = !1, t = null;
4488
4488
  async function n() {
4489
4489
  try {
@@ -4501,17 +4501,17 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4501
4501
  e = !0, t && clearTimeout(t);
4502
4502
  };
4503
4503
  }, [m]);
4504
- let te = B(null);
4505
- z(() => {
4504
+ let j = V(null);
4505
+ B(() => {
4506
4506
  let t = new rr(e.replace(/\.convex\.site(\/.*)?$/, ".convex.cloud"));
4507
- return te.current = t, () => {
4508
- t.close(), te.current = null;
4507
+ return j.current = t, () => {
4508
+ t.close(), j.current = null;
4509
4509
  };
4510
4510
  }, [e]);
4511
- let j = B(!1);
4512
- z(() => {
4513
- let e = te.current;
4514
- if (!(!e || !k)) return j.current = !1, b(null), e.onUpdate(qt("widget/queries:subscribeThreadsForRoute"), {
4511
+ let M = V(!1);
4512
+ B(() => {
4513
+ let e = j.current;
4514
+ if (!(!e || !k)) return M.current = !1, b(null), e.onUpdate(qt("widget/queries:subscribeThreadsForRoute"), {
4515
4515
  subscriptionToken: k,
4516
4516
  route: r,
4517
4517
  viewerClientId: s?.clientId ?? void 0
@@ -4522,19 +4522,19 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4522
4522
  k,
4523
4523
  r,
4524
4524
  s?.clientId
4525
- ]), z(() => {
4526
- if (j.current) return;
4525
+ ]), B(() => {
4526
+ if (M.current) return;
4527
4527
  let e = window.location.hash.match(/^#markup-thread=(.+)$/);
4528
4528
  if (!e) {
4529
- j.current = !0;
4529
+ M.current = !0;
4530
4530
  return;
4531
4531
  }
4532
4532
  let t = decodeURIComponent(e[1] ?? "");
4533
- a.find((e) => e._id === t) && (j.current = !0, g({
4533
+ a.find((e) => e._id === t) && (M.current = !0, g({
4534
4534
  kind: "thread",
4535
4535
  threadId: t
4536
4536
  }), history.replaceState(null, "", window.location.pathname + window.location.search));
4537
- }, [a]), z(() => {
4537
+ }, [a]), B(() => {
4538
4538
  function e() {
4539
4539
  i(window.location.pathname);
4540
4540
  }
@@ -4547,12 +4547,12 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4547
4547
  }, () => {
4548
4548
  window.removeEventListener("popstate", e), history.pushState = t, history.replaceState = n;
4549
4549
  };
4550
- }, []), z(() => {
4550
+ }, []), B(() => {
4551
4551
  function e(e) {
4552
4552
  e.key === "." && (e.metaKey || e.ctrlKey) && (e.altKey || e.shiftKey || (e.preventDefault(), S((e) => !e)));
4553
4553
  }
4554
4554
  return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
4555
- }, []), z(() => {
4555
+ }, []), B(() => {
4556
4556
  if (!C) return;
4557
4557
  if (!x) {
4558
4558
  w(!1);
@@ -4560,7 +4560,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4560
4560
  }
4561
4561
  let e = window.setTimeout(() => w(!1), 5e3);
4562
4562
  return () => window.clearTimeout(e);
4563
- }, [C, x]), z(() => {
4563
+ }, [C, x]), B(() => {
4564
4564
  function e() {
4565
4565
  T((e) => e + 1);
4566
4566
  }
@@ -4570,29 +4570,31 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4570
4570
  window.removeEventListener("scroll", e), window.removeEventListener("resize", e), t.disconnect();
4571
4571
  };
4572
4572
  }, []);
4573
- let ne = V(() => {
4573
+ let te = H(() => {
4574
4574
  b(null), g({ kind: "placing" });
4575
- }, []), M = V(() => {
4575
+ }, []), N = H(() => {
4576
4576
  g({ kind: "idle" }), b(null);
4577
- }, []), N = V((e, t, n) => {
4577
+ }, []), P = V(0), ne = H((e, t, n) => {
4578
+ let r = t + window.scrollX, i = n + window.scrollY, a = ++P.current;
4578
4579
  g({
4579
4580
  kind: "composing-new",
4580
4581
  coords: e,
4581
- pageX: t + window.scrollX,
4582
- pageY: n + window.scrollY,
4582
+ pageX: r,
4583
+ pageY: i,
4583
4584
  screenshot: null,
4584
- screenshotCapturing: !0
4585
+ screenshotCapturing: !0,
4586
+ captureToken: a
4585
4587
  }), $i(E.current != null && E.current.getRootNode() instanceof ShadowRoot ? E.current.getRootNode().host : null, {
4586
4588
  x: t,
4587
4589
  y: n
4588
4590
  }).then((e) => {
4589
- g((t) => t.kind === "composing-new" ? {
4591
+ g((t) => t.kind !== "composing-new" || t.captureToken !== a ? t : {
4590
4592
  ...t,
4591
4593
  screenshot: e,
4592
4594
  screenshotCapturing: !1
4593
- } : t);
4595
+ });
4594
4596
  });
4595
- }, []), P = V((e, t) => {
4597
+ }, []), re = H((e, t) => {
4596
4598
  if (!s) return;
4597
4599
  let n = {
4598
4600
  ...s,
@@ -4600,7 +4602,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4600
4602
  email: t
4601
4603
  };
4602
4604
  Mr(n), c(n);
4603
- }, [s]), re = V(async () => {
4605
+ }, [s]), ie = H(async () => {
4604
4606
  b(null);
4605
4607
  try {
4606
4608
  let n = Aa(await Nr(e, t));
@@ -4608,7 +4610,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4608
4610
  } catch (e) {
4609
4611
  b(e instanceof Error ? e.message : "Sign-in failed");
4610
4612
  }
4611
- }, [e, t]), ie = V(async (e, t) => {
4613
+ }, [e, t]), ae = H(async (e, t) => {
4612
4614
  if (!(h.kind !== "composing-new" || !s?.name)) {
4613
4615
  v(!0), b(null);
4614
4616
  try {
@@ -4655,7 +4657,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4655
4657
  s,
4656
4658
  h,
4657
4659
  r
4658
- ]), ae = V(async () => {
4660
+ ]), oe = H(async () => {
4659
4661
  if (h.kind !== "thread") return;
4660
4662
  let e = h.threadId;
4661
4663
  v(!0), b(null);
@@ -4666,7 +4668,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4666
4668
  } finally {
4667
4669
  v(!1);
4668
4670
  }
4669
- }, [m, h]), oe = V(async () => {
4671
+ }, [m, h]), se = H(async () => {
4670
4672
  if (h.kind !== "thread") return;
4671
4673
  let e = h.threadId;
4672
4674
  v(!0), b(null);
@@ -4681,7 +4683,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4681
4683
  m,
4682
4684
  h,
4683
4685
  s?.clientId
4684
- ]), se = V(async (e) => {
4686
+ ]), ce = H(async (e) => {
4685
4687
  if (h.kind !== "thread" || !s?.name) return;
4686
4688
  let t = h.threadId;
4687
4689
  v(!0), b(null);
@@ -4701,7 +4703,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4701
4703
  m,
4702
4704
  s,
4703
4705
  h
4704
- ]), ce = V(async (e, t) => {
4706
+ ]), le = H(async (e, t) => {
4705
4707
  if (h.kind !== "thread" || !s) return;
4706
4708
  let n = h.threadId;
4707
4709
  v(!0), b(null);
@@ -4717,7 +4719,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4717
4719
  m,
4718
4720
  s,
4719
4721
  h
4720
- ]), le = V(async (e) => {
4722
+ ]), ue = H(async (e) => {
4721
4723
  if (h.kind !== "thread" || !s) return;
4722
4724
  let t = h.threadId;
4723
4725
  v(!0), b(null);
@@ -4733,7 +4735,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4733
4735
  m,
4734
4736
  s,
4735
4737
  h
4736
- ]), ue = V(async (e, t) => {
4738
+ ]), F = H(async (e, t) => {
4737
4739
  if (h.kind !== "thread" || !s) return;
4738
4740
  let n = h.threadId;
4739
4741
  b(null);
@@ -4750,8 +4752,14 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4750
4752
  m,
4751
4753
  s,
4752
4754
  h
4753
- ]), F = h.kind === "thread" ? a.find((e) => e._id === h.threadId) ?? null : null, I = O || s?.clientId != null && s.clientId === F?.authorClientId;
4754
- return /* @__PURE__ */ $("div", {
4755
+ ]), I = h.kind === "thread" ? a.find((e) => e._id === h.threadId) ?? null : null, L = O || s?.clientId != null && s.clientId === I?.authorClientId;
4756
+ return B(() => {
4757
+ h.kind === "thread" && I == null && N();
4758
+ }, [
4759
+ h,
4760
+ I,
4761
+ N
4762
+ ]), /* @__PURE__ */ $("div", {
4755
4763
  class: "markup-root",
4756
4764
  ref: E,
4757
4765
  children: [
@@ -4781,28 +4789,28 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4781
4789
  }) : null]
4782
4790
  }),
4783
4791
  h.kind === "placing" ? /* @__PURE__ */ $(xa, {
4784
- onPlace: N,
4785
- onCancel: M
4792
+ onPlace: ne,
4793
+ onCancel: N
4786
4794
  }) : null,
4787
- h.kind === "thread" && F && !x ? /* @__PURE__ */ $(Ca, {
4788
- thread: F,
4795
+ h.kind === "thread" && I && !x ? /* @__PURE__ */ $(Ca, {
4796
+ thread: I,
4789
4797
  authorName: D,
4790
4798
  currentClientId: s?.clientId ?? null,
4791
4799
  isVerified: O,
4792
4800
  identityResolving: ee,
4793
- canDelete: I,
4801
+ canDelete: L,
4794
4802
  pending: _,
4795
4803
  error: y,
4796
- onAuthor: P,
4797
- onSignIn: re,
4798
- onClose: M,
4799
- onReply: se,
4800
- onEditComment: ce,
4801
- onDeleteComment: le,
4802
- onToggleReaction: ue,
4803
- onDelete: ae,
4804
- onResolve: oe
4805
- }) : null,
4804
+ onAuthor: re,
4805
+ onSignIn: ie,
4806
+ onClose: N,
4807
+ onReply: ce,
4808
+ onEditComment: le,
4809
+ onDeleteComment: ue,
4810
+ onToggleReaction: F,
4811
+ onDelete: oe,
4812
+ onResolve: se
4813
+ }, I._id) : null,
4806
4814
  h.kind === "composing-new" ? /* @__PURE__ */ $(_a, {
4807
4815
  pageX: h.pageX,
4808
4816
  pageY: h.pageY,
@@ -4813,14 +4821,14 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4813
4821
  error: y,
4814
4822
  screenshot: h.screenshot,
4815
4823
  screenshotCapturing: h.screenshotCapturing,
4816
- onAuthor: P,
4817
- onSignIn: re,
4818
- onSubmit: ie,
4819
- onClose: M
4824
+ onAuthor: re,
4825
+ onSignIn: ie,
4826
+ onSubmit: ae,
4827
+ onClose: N
4820
4828
  }) : null,
4821
4829
  !x || h.kind === "placing" || h.kind === "composing-new" ? /* @__PURE__ */ $(ua, {
4822
4830
  active: h.kind === "placing",
4823
- onToggle: () => h.kind === "placing" ? M() : ne(),
4831
+ onToggle: () => h.kind === "placing" ? N() : te(),
4824
4832
  onHide: () => {
4825
4833
  S(!0), w(!0);
4826
4834
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixelmatters/markup",
3
- "version": "1.3.1",
3
+ "version": "1.3.2",
4
4
  "description": "Embeddable feedback widget for collecting visual bug reports, screenshots, and comments on live web apps.",
5
5
  "keywords": [
6
6
  "annotation",