@pixelmatters/markup 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/widget.js CHANGED
@@ -65,13 +65,13 @@ function O() {
65
65
  }
66
66
  function k(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 = A(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 = te(e, p, f, i, a, o, s, c, l, u), g = p.__e, p.ref && f.ref != p.ref && (f.ref && F(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 = j(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 = A(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 = te(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 = j(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 A(e, t, n, r, i) {
72
72
  var a, o, s, c, l, u = n.length, d = u, f = 0;
73
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 = M(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
- if (d) for (a = 0; a < u; a++) (s = n[a]) != null && !(2 & s.__u) && (s.__e == r && (r = w(s)), oe(s, s));
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
  }
77
77
  function j(e, t, n, r) {
@@ -97,7 +97,7 @@ function M(e, t, n, r) {
97
97
  function N(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 P(e, t, n, r, i) {
100
+ function ee(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 {
@@ -114,7 +114,7 @@ function P(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 ee(e) {
117
+ function P(e) {
118
118
  return function(n) {
119
119
  if (this.l) {
120
120
  var r = this.l[n.type + e];
@@ -129,7 +129,7 @@ function te(e, n, r, i, a, o, s, c, l, u) {
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
131
  n: if (typeof N == "function") try {
132
- if (w = n.props, T = N.prototype && N.prototype.render, E = (d = N.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 N(w, D) : (n.__c = f = new C(w, D), f.constructor = N, f.render = se), 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 && N.getDerivedStateFromProps != null && (f.__s == f.state && (f.__s = v({}, f.__s)), v(f.__s, N.getDerivedStateFromProps(w, f.__s))), m = f.props, g = f.state, f.__v = n, p) T && N.getDerivedStateFromProps == null && f.componentWillMount != null && f.componentWillMount(), T && f.componentDidMount != null && f.__h.push(f.componentDidMount);
132
+ if (w = n.props, T = N.prototype && N.prototype.render, E = (d = N.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 N(w, D) : (n.__c = f = new C(w, D), f.constructor = N, 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 && N.getDerivedStateFromProps != null && (f.__s == f.state && (f.__s = v({}, f.__s)), v(f.__s, N.getDerivedStateFromProps(w, f.__s))), m = f.props, g = f.state, f.__v = n, p) T && N.getDerivedStateFromProps == null && f.componentWillMount != null && f.componentWillMount(), T && f.componentDidMount != null && f.__h.push(f.componentDidMount);
133
133
  else {
134
134
  if (T && N.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) {
@@ -164,7 +164,7 @@ function ne(e) {
164
164
  e && (e.__c && (e.__c.__e = !0), e.__k && e.__k.some(ne));
165
165
  }
166
166
  function re(e, n, r) {
167
- for (var i = 0; i < r.length; i++) F(r[i], r[++i], r[++i]);
167
+ for (var i = 0; i < r.length; i++) oe(r[i], r[++i], r[++i]);
168
168
  t.__c && t.__c(n, e), e.some(function(n) {
169
169
  try {
170
170
  e = n.__h, n.__h = [], e.some(function(e) {
@@ -193,15 +193,15 @@ 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 || P(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 || P(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 || ee(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 || ee(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 = ""), k(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]) && P(n, d, v, x[d], o), d = "checked", b != null && b != n[d] && P(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]) && ee(n, d, v, x[d], o), d = "checked", b != null && b != n[d] && ee(n, d, b, x[d], o));
201
201
  }
202
202
  return n;
203
203
  }
204
- function F(e, n, r) {
204
+ function oe(e, n, r) {
205
205
  try {
206
206
  if (typeof e == "function") {
207
207
  var i = typeof e.__u == "function";
@@ -211,9 +211,9 @@ function F(e, n, r) {
211
211
  t.__e(e, r);
212
212
  }
213
213
  }
214
- function oe(e, n, r) {
214
+ function se(e, n, r) {
215
215
  var i, a;
216
- if (t.unmount && t.unmount(e), (i = e.ref) && (i.current && i.current != e.__e || F(i, null, n)), (i = e.__c) != null) {
216
+ if (t.unmount && t.unmount(e), (i = e.ref) && (i.current && i.current != e.__e || oe(i, null, n)), (i = e.__c) != null) {
217
217
  if (i.componentWillUnmount) try {
218
218
  i.componentWillUnmount();
219
219
  } catch (e) {
@@ -221,13 +221,13 @@ function oe(e, n, r) {
221
221
  }
222
222
  i.base = i.__P = null;
223
223
  }
224
- if (i = e.__k) for (a = 0; a < i.length; a++) i[a] && oe(i[a], n, r || typeof e.type != "function");
224
+ if (i = e.__k) for (a = 0; a < i.length; a++) i[a] && se(i[a], n, r || typeof e.type != "function");
225
225
  r || y(e.__e), e.__c = e.__ = e.__e = void 0;
226
226
  }
227
- function se(e, t, n) {
227
+ function ce(e, t, n) {
228
228
  return this.constructor(e, n);
229
229
  }
230
- function ce(n, r, i) {
230
+ function le(n, r, i) {
231
231
  var a, o, s, c;
232
232
  r == document && (r = document.documentElement), t.__ && t.__(n, r), o = (a = typeof i == "function") ? null : i && i.__k || r.__k, s = [], c = [], te(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
  }
@@ -245,11 +245,11 @@ 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 = ee(!1), p = ee(!0);
248
+ }, O.__r = 0, s = Math.random().toString(8), c = "__d" + s, l = "__a" + s, u = /(PointerCapture)$|Capture$/i, d = 0, f = P(!1), p = P(!0);
249
249
  //#endregion
250
250
  //#region src/styles.css?inline
251
- var le = ":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-fab.is-icon-only{gap:0;padding:9px}.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}}.markup-popover.is-hud-hidden{display: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)}.markup-comment-menu.is-side .markup-thread-menu-list{animation-name:markup-menu-in-side;top:-4px;right:calc(100% + 2px)}@keyframes markup-menu-in-side{0%{opacity:0;transform:translate(4px)}to{opacity:1;transform:translate(0)}}@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-wrap.is-side .markup-reaction-picker{animation-name:markup-menu-in-side;top:-4px;right:calc(100% + 2px)}.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-screenshot-redacted{font-family:var(--markup-font-mono);color:var(--markup-muted);margin-top:4px;font-size:10px}.markup-screenshot-redacted-chip{cursor:pointer;color:var(--markup-muted);font:inherit;background:0 0;border:none;align-items:center;gap:3px;padding:0;display:inline-flex}.markup-screenshot-redacted-chip:hover{color:var(--markup-ink)}.markup-screenshot-redacted-arrow{font-style:normal}.markup-screenshot-redacted-list{margin-top:3px;padding-left:10px}.markup-screenshot-redacted-selector{font-family:var(--markup-font-mono);color:var(--markup-muted);font-size:9px;display:block}.markup-screenshot-help{font-family:var(--markup-font-mono);color:var(--markup-muted);margin:5px 0 0;font-size:10px;line-height:1.5}.markup-screenshot-help-code{font-family:var(--markup-font-mono);color:var(--markup-ink)}.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}}", ue, I, de, fe, pe = 0, me = [], L = t, he = L.__b, ge = L.__r, R = L.diffed, _e = L.__c, ve = L.unmount, ye = L.__;
252
- function be(e, t) {
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-center{width:max-content;margin-inline:auto;left:0;right:0}.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-fab.is-icon-only{gap:0;padding:9px}.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-hud-hidden-toast-center{width:max-content;margin-inline:auto;left:0;right:0}.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,opacity .15s,top .2s,left .2s;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.is-unresolved{opacity:.5}.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}}.markup-popover.is-hud-hidden{display: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)}.markup-comment-menu.is-side .markup-thread-menu-list{animation-name:markup-menu-in-side;top:-4px;right:calc(100% + 2px)}@keyframes markup-menu-in-side{0%{opacity:0;transform:translate(4px)}to{opacity:1;transform:translate(0)}}@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-wrap.is-side .markup-reaction-picker{animation-name:markup-menu-in-side;top:-4px;right:calc(100% + 2px)}.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-screenshot-redacted{font-family:var(--markup-font-mono);color:var(--markup-muted);margin-top:4px;font-size:10px}.markup-screenshot-redacted-chip{cursor:pointer;color:var(--markup-muted);font:inherit;background:0 0;border:none;align-items:center;gap:3px;padding:0;display:inline-flex}.markup-screenshot-redacted-chip:hover{color:var(--markup-ink)}.markup-screenshot-redacted-arrow{font-style:normal}.markup-screenshot-redacted-list{margin-top:3px;padding-left:10px}.markup-screenshot-redacted-selector{font-family:var(--markup-font-mono);color:var(--markup-muted);font-size:9px;display:block}.markup-screenshot-help{font-family:var(--markup-font-mono);color:var(--markup-muted);margin:5px 0 0;font-size:10px;line-height:1.5}.markup-screenshot-help-code{font-family:var(--markup-font-mono);color:var(--markup-ink)}.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
253
  L.__h && L.__h(I, e, pe || t), pe = 0;
254
254
  var n = I.__H ||= {
255
255
  __: [],
@@ -257,12 +257,12 @@ function be(e, t) {
257
257
  };
258
258
  return e >= n.__.length && n.__.push({}), n.__[e];
259
259
  }
260
- function z(e) {
261
- return pe = 1, xe(ke, e);
260
+ function R(e) {
261
+ return pe = 1, Se(Ae, e);
262
262
  }
263
- function xe(e, t, n) {
264
- var r = be(ue++, 2);
265
- if (r.t = e, !r.__c && (r.__ = [n ? n(t) : ke(void 0, t), function(e) {
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) {
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,29 +294,29 @@ function xe(e, t, n) {
294
294
  }
295
295
  return r.__N || r.__;
296
296
  }
297
- function B(e, t) {
298
- var n = be(ue++, 3);
299
- !L.__s && Oe(n.__H, t) && (n.__ = e, n.u = t, I.__H.__h.push(n));
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));
300
300
  }
301
- function V(e) {
302
- return pe = 5, Se(function() {
301
+ function B(e) {
302
+ return pe = 5, Ce(function() {
303
303
  return { current: e };
304
304
  }, []);
305
305
  }
306
- function Se(e, t) {
307
- var n = be(ue++, 7);
308
- return Oe(n.__H, t) && (n.__ = e(), n.__H = t, n.__h = e), n.__;
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.__;
309
309
  }
310
- function H(e, t) {
311
- return pe = 8, Se(function() {
310
+ function V(e, t) {
311
+ return pe = 8, Ce(function() {
312
312
  return e;
313
313
  }, t);
314
314
  }
315
- function Ce() {
315
+ function we() {
316
316
  for (var e; e = me.shift();) {
317
317
  var t = e.__H;
318
318
  if (e.__P && t) try {
319
- t.__h.some(Ee), t.__h.some(De), t.__h = [];
319
+ t.__h.some(De), t.__h.some(Oe), t.__h = [];
320
320
  } catch (n) {
321
321
  t.__h = [], L.__e(n, e.__v);
322
322
  }
@@ -325,68 +325,68 @@ function Ce() {
325
325
  L.__b = function(e) {
326
326
  I = null, he && he(e);
327
327
  }, L.__ = function(e, t) {
328
- e && t.__k && t.__k.__m && (e.__m = t.__k.__m), ye && ye(e, t);
328
+ e && t.__k && t.__k.__m && (e.__m = t.__k.__m), be && be(e, t);
329
329
  }, L.__r = function(e) {
330
- ge && ge(e), ue = 0;
330
+ ge && ge(e), F = 0;
331
331
  var t = (I = e.__c).__H;
332
332
  t && (de === 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(Ee), t.__h.some(De), t.__h = [], ue = 0)), de = I;
334
+ })) : (t.__h.some(De), t.__h.some(Oe), t.__h = [], F = 0)), de = I;
335
335
  }, L.diffed = function(e) {
336
- R && R(e);
336
+ _e && _e(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) || Te)(Ce)), t.__H.__.some(function(e) {
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) {
339
339
  e.u && (e.__H = e.u), e.u = void 0;
340
340
  })), de = I = null;
341
341
  }, L.__c = function(e, t) {
342
342
  t.some(function(e) {
343
343
  try {
344
- e.__h.some(Ee), e.__h = e.__h.filter(function(e) {
345
- return !e.__ || De(e);
344
+ e.__h.some(De), e.__h = e.__h.filter(function(e) {
345
+ return !e.__ || Oe(e);
346
346
  });
347
347
  } catch (n) {
348
348
  t.some(function(e) {
349
349
  e.__h &&= [];
350
350
  }), t = [], L.__e(n, e.__v);
351
351
  }
352
- }), _e && _e(e, t);
352
+ }), ve && ve(e, t);
353
353
  }, L.unmount = function(e) {
354
- ve && ve(e);
354
+ ye && ye(e);
355
355
  var t, n = e.__c;
356
356
  n && n.__H && (n.__H.__.some(function(e) {
357
357
  try {
358
- Ee(e);
358
+ De(e);
359
359
  } catch (e) {
360
360
  t = e;
361
361
  }
362
362
  }), n.__H = void 0, t && L.__e(t, n.__v));
363
363
  };
364
- var we = typeof requestAnimationFrame == "function";
365
- function Te(e) {
364
+ var Te = typeof requestAnimationFrame == "function";
365
+ function Ee(e) {
366
366
  var t, n = function() {
367
- clearTimeout(r), we && cancelAnimationFrame(t), setTimeout(e);
367
+ clearTimeout(r), Te && cancelAnimationFrame(t), setTimeout(e);
368
368
  }, r = setTimeout(n, 35);
369
- we && (t = requestAnimationFrame(n));
369
+ Te && (t = requestAnimationFrame(n));
370
370
  }
371
- function Ee(e) {
371
+ function De(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 De(e) {
375
+ function Oe(e) {
376
376
  var t = I;
377
377
  e.__c = e.__(), I = t;
378
378
  }
379
- function Oe(e, t) {
379
+ function ke(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 ke(e, t) {
384
+ function Ae(e, t) {
385
385
  return typeof t == "function" ? t(e) : t;
386
386
  }
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) {
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) {
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 Fe(e) {
394
394
  var r = n === t ? 0 : 4 - n % 4;
395
395
  return [n, r];
396
396
  }
397
- function Ie(e, t, n) {
397
+ function Le(e, t, n) {
398
398
  return (t + n) * 3 / 4 - n;
399
399
  }
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
- }
405
400
  function Re(e) {
406
- return U[e >> 18 & 63] + U[e >> 12 & 63] + U[e >> 6 & 63] + U[e & 63];
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;
407
404
  }
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));
405
+ function ze(e) {
406
+ return H[e >> 18 & 63] + H[e >> 12 & 63] + H[e >> 6 & 63] + H[e & 63];
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));
410
410
  return i.join("");
411
411
  }
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("");
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("");
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 Ve(e) {
418
+ function W(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 Be(n);
450
+ return Ve(n);
451
451
  }
452
452
  function Qe(e) {
453
- let t = Le(e);
453
+ let t = Re(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), Be(new Uint8Array(t));
462
+ return new DataView(t).setBigInt64(0, e, !0), Ve(new Uint8Array(t));
463
463
  }
464
464
  function et(e) {
465
- let t = Le(e);
465
+ let t = Re(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 Le(e.$bytes).buffer;
487
+ return Re(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 = Le(e.$float);
495
+ let t = Re(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: Be(new Uint8Array(t)) };
529
+ return new DataView(t).setFloat64(0, e, We), { $float: Ve(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: Be(new Uint8Array(e)) };
532
+ if (e instanceof ArrayBuffer) return { $bytes: Ve(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 = Ve(n[0]), i = K(t), a = this.queryResults.get(Mt(i, r));
1050
+ let r = W(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 = Ve(t), i = K(e), a = Mt(i, r), o;
1062
+ let r = W(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 = Le(e);
1228
+ let t = Re(e);
1229
1229
  return rn.fromBytesLE(Array.from(t));
1230
1230
  }
1231
1231
  function hn(e) {
1232
- return Be(new Uint8Array(e.toBytesLE()));
1232
+ return Ve(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/${Ae}/sync`;
1871
+ let l = `${c}://${o}/api/${je}/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 = Ve(t), { modification: i, queryToken: a, unsubscribe: o } = this.state.subscribe(e, r, n?.journal, n?.componentPath);
2025
+ let r = W(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, Ve(t));
2035
+ let n = Mt(e, W(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, Ve(t));
2045
+ let n = Mt(e, W(t));
2046
2046
  return this.optimisticQueryResults.queryLogs(n);
2047
2047
  }
2048
2048
  queryJournal(e, t) {
2049
- let n = Mt(e, Ve(t));
2049
+ let n = Mt(e, W(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 = Ve(t);
2081
+ let i = W(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 = Ve(t), i = this.nextRequestId;
2128
+ let r = W(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-${Ae}`
2170
+ "Convex-Client": `npm-${je}`
2171
2171
  },
2172
2172
  body: JSON.stringify({ event: "LongWebsocketDisconnect" })
2173
2173
  }).then((e) => {
@@ -2717,14 +2717,16 @@ function Tr(e) {
2717
2717
  let n = t.getBoundingClientRect();
2718
2718
  return {
2719
2719
  pageX: n.left + window.scrollX + (e.anchorOffsetX ?? .5) * n.width,
2720
- pageY: n.top + window.scrollY + (e.anchorOffsetY ?? .5) * n.height
2720
+ pageY: n.top + window.scrollY + (e.anchorOffsetY ?? .5) * n.height,
2721
+ resolved: !0
2721
2722
  };
2722
2723
  }
2723
2724
  } catch {}
2724
2725
  let t = document.documentElement, n = Math.max(t.scrollWidth, t.clientWidth), r = Math.max(t.scrollHeight, t.clientHeight);
2725
2726
  return {
2726
2727
  pageX: e.anchorX * n,
2727
- pageY: e.anchorY * r
2728
+ pageY: e.anchorY * r,
2729
+ resolved: !1
2728
2730
  };
2729
2731
  }
2730
2732
  function Er(e) {
@@ -3542,11 +3544,11 @@ function Q(...e) {
3542
3544
  //#endregion
3543
3545
  //#region src/runtime/use-drag.ts
3544
3546
  function ya(e) {
3545
- let t = V(e);
3547
+ let t = B(e);
3546
3548
  t.current = e;
3547
- let [n, r] = z(!1), i = V(!1);
3549
+ let [n, r] = R(!1), i = B(!1);
3548
3550
  return {
3549
- onPointerDown: H((e) => {
3551
+ onPointerDown: V((e) => {
3550
3552
  let n = t.current;
3551
3553
  if (n.preventDefault && e.preventDefault(), n.stopPropagation && e.stopPropagation(), e.button !== 0 || n.shouldStart && !n.shouldStart(e)) return;
3552
3554
  let a = e.currentTarget;
@@ -3584,7 +3586,7 @@ function ya(e) {
3584
3586
  a.addEventListener("pointermove", y), a.addEventListener("pointerup", b), a.addEventListener("pointercancel", x);
3585
3587
  }, []),
3586
3588
  isDragging: n,
3587
- consumeClickIfDragged: H(() => i.current ? (i.current = !1, !0) : !1, [])
3589
+ consumeClickIfDragged: V(() => i.current ? (i.current = !1, !0) : !1, [])
3588
3590
  };
3589
3591
  }
3590
3592
  function ba(e, t, n) {
@@ -3697,13 +3699,13 @@ function Oa({ size: e = 16 }) {
3697
3699
  //#endregion
3698
3700
  //#region src/runtime/ui/fab.tsx
3699
3701
  function ka({ active: e, onToggle: t, onHide: n, position: r = "bottom-right", onPositionChange: i, variant: a = "default" }) {
3700
- let o = a === "icon-only", s = r === "bottom-left" ? "markup-fab-left" : "markup-fab-right", [c, l] = z(null), { onPointerDown: u, isDragging: d, consumeClickIfDragged: f } = ya({
3702
+ let o = a === "icon-only", s = r === "bottom-left" ? "markup-fab-left" : r === "bottom-center" ? "markup-fab-center" : "markup-fab-right", [c, l] = R(null), { onPointerDown: u, isDragging: d, consumeClickIfDragged: f } = ya({
3701
3703
  preventDefault: !0,
3702
3704
  stopPropagation: !0,
3703
3705
  onMove: l,
3704
3706
  onEnd: (e, t) => {
3705
- let n = t.clientX < window.innerWidth / 2 ? "bottom-left" : "bottom-right";
3706
- n !== r && i?.(n), l(null);
3707
+ let n = window.innerWidth, a = t.clientX, o = a < n / 3 ? "bottom-left" : a < n * 2 / 3 ? "bottom-center" : "bottom-right";
3708
+ o !== r && i?.(o), l(null);
3707
3709
  },
3708
3710
  onCancel: () => l(null)
3709
3711
  });
@@ -3747,7 +3749,7 @@ var Aa = [
3747
3749
  "[tabindex]:not([tabindex=\"-1\"])"
3748
3750
  ].join(",");
3749
3751
  function ja(e, t) {
3750
- B(() => {
3752
+ z(() => {
3751
3753
  if (!t) return;
3752
3754
  let n = e.current;
3753
3755
  if (!n) return;
@@ -3764,8 +3766,8 @@ function ja(e, t) {
3764
3766
  //#endregion
3765
3767
  //#region src/runtime/use-object-url.ts
3766
3768
  function Ma(e) {
3767
- let [t, n] = z(null);
3768
- return B(() => {
3769
+ let [t, n] = R(null);
3770
+ return z(() => {
3769
3771
  if (!e) {
3770
3772
  n(null);
3771
3773
  return;
@@ -3777,8 +3779,8 @@ function Ma(e) {
3777
3779
  //#endregion
3778
3780
  //#region src/runtime/ui/author-prompt.tsx
3779
3781
  function Na({ pending: e, connecting: t = !1, signingIn: n = !1, onSubmit: r, onCancel: i, onSignIn: a }) {
3780
- let [o, s] = z(""), [c, l] = z(""), u = V(null);
3781
- B(() => {
3782
+ let [o, s] = R(""), [c, l] = R(""), u = B(null);
3783
+ z(() => {
3782
3784
  u.current?.focus();
3783
3785
  }, []);
3784
3786
  function d(n) {
@@ -3857,13 +3859,13 @@ function Na({ pending: e, connecting: t = !1, signingIn: n = !1, onSubmit: r, on
3857
3859
  //#region src/runtime/ui/composer.tsx
3858
3860
  var Pa = 4e3;
3859
3861
  function Fa({ label: e, placeholder: t = "Leave feedback…", submitLabel: n = "Post", initialFocus: r = !0, pending: i, error: a, onSubmit: o }) {
3860
- let [s, c] = z(""), l = V(null), u = V(!1);
3861
- B(() => {
3862
+ let [s, c] = R(""), l = B(null), u = B(!1);
3863
+ z(() => {
3862
3864
  r && l.current?.focus();
3863
- }, [r]), B(() => {
3865
+ }, [r]), z(() => {
3864
3866
  let e = l.current;
3865
3867
  e && (e.style.height = "auto", e.style.height = `${Math.min(e.scrollHeight, 160)}px`);
3866
- }, [s]), B(() => {
3868
+ }, [s]), z(() => {
3867
3869
  u.current && !i && !a && (c(""), l.current?.focus()), u.current = i;
3868
3870
  }, [i, a]);
3869
3871
  let d = Pa - s.length, f = d < 0;
@@ -3934,14 +3936,14 @@ function Fa({ label: e, placeholder: t = "Leave feedback…", submitLabel: n = "
3934
3936
  //#endregion
3935
3937
  //#region src/runtime/ui/new-thread-popover.tsx
3936
3938
  function Ia({ pageX: e, pageY: t, authorName: n, isVerified: r, identityResolving: i, signingIn: a, pending: o, error: s, screenshot: c, screenshotCapturing: l, screenshotRedactedCount: u, screenshotRedactedSelectors: d, onAuthor: f, onSignIn: p, onSubmit: m, onClose: h }) {
3937
- let g = V(null);
3939
+ let g = B(null);
3938
3940
  ja(g, !0);
3939
- let [_, v] = z(!1), [y, b] = z(!1), x = Ma(c), [C, w] = z(null), { onPointerDown: T, isDragging: E } = ya({
3941
+ let [_, v] = R(!1), [y, b] = R(!1), x = Ma(c), [C, w] = R(null), { onPointerDown: T, isDragging: E } = ya({
3940
3942
  targetRef: g,
3941
3943
  shouldStart: (e) => !e.target?.closest("button, a, input, textarea, select"),
3942
3944
  onMove: w
3943
3945
  });
3944
- B(() => {
3946
+ z(() => {
3945
3947
  let e = g.current;
3946
3948
  if (!e) return;
3947
3949
  if (typeof e.showPopover == "function" && !e.matches(":popover-open")) try {
@@ -4083,18 +4085,18 @@ function La(e, t, n) {
4083
4085
  }
4084
4086
  //#endregion
4085
4087
  //#region src/runtime/ui/pin.tsx
4086
- function Ra({ pageX: e, pageY: t, count: n, active: r, onClick: i }) {
4087
- let a = t - window.scrollY, o = e - window.scrollX;
4088
+ function Ra({ pageX: e, pageY: t, count: n, active: r, unresolved: i, onClick: a }) {
4089
+ let o = t - window.scrollY, s = e - window.scrollX;
4088
4090
  return /* @__PURE__ */ $("button", {
4089
4091
  type: "button",
4090
- class: Q("markup-pin", r && "is-active is-anchor"),
4092
+ class: Q("markup-pin", r && "is-active is-anchor", i && "is-unresolved"),
4091
4093
  style: {
4092
- top: `${a}px`,
4093
- left: `${o}px`
4094
+ top: `${o}px`,
4095
+ left: `${s}px`
4094
4096
  },
4095
4097
  popovertarget: "markup-thread-popover",
4096
4098
  popovertargetaction: "show",
4097
- onClick: i,
4099
+ onClick: a,
4098
4100
  "aria-label": `Open feedback thread (${n} comment${n === 1 ? "" : "s"})`,
4099
4101
  title: `Open feedback thread (${n} comment${n === 1 ? "" : "s"})`,
4100
4102
  children: [/* @__PURE__ */ $("span", {
@@ -4123,7 +4125,7 @@ function za({ pageX: e, pageY: t }) {
4123
4125
  //#endregion
4124
4126
  //#region src/runtime/ui/placement-overlay.tsx
4125
4127
  function Ba({ onPlace: e, onCancel: t }) {
4126
- B(() => {
4128
+ z(() => {
4127
4129
  function e(e) {
4128
4130
  e.key === "Escape" && t();
4129
4131
  }
@@ -4157,27 +4159,27 @@ var Va = [
4157
4159
  "❓"
4158
4160
  ];
4159
4161
  function Ha({ thread: e, authorName: t, currentClientId: n, isVerified: r, identityResolving: i, signingIn: a, canDelete: o, pending: s, error: c, hidden: l = !1, onAuthor: u, onSignIn: d, onClose: f, onReply: p, onEditComment: m, onDeleteComment: h, onToggleReaction: g, onResolve: _, onDelete: v }) {
4160
- let y = V(null), b = V(null), x = V(null), S = V(null), [C, w] = z({ kind: "none" }), [T, E] = z(null), { onPointerDown: D, isDragging: O } = ya({
4162
+ let y = B(null), b = B(null), x = B(null), S = B(null), [C, w] = R({ kind: "none" }), [T, E] = R(null), { onPointerDown: D, isDragging: O } = ya({
4161
4163
  targetRef: y,
4162
4164
  shouldStart: (e) => !e.target?.closest("button, a, input, textarea, select"),
4163
4165
  onMove: E
4164
4166
  });
4165
4167
  ja(y, !0);
4166
- let k = e.resolvedAt != null, A = Se(() => e.comments.filter((e) => !e.deleted), [e.comments]);
4167
- B(() => {
4168
+ let k = e.resolvedAt != null, A = Ce(() => e.comments.filter((e) => !e.deleted), [e.comments]);
4169
+ z(() => {
4168
4170
  if (C.kind === "none" || C.kind === "editing") return;
4169
4171
  function e(e) {
4170
4172
  let t = S.current;
4171
4173
  t && !e.composedPath().includes(t) && w({ kind: "none" });
4172
4174
  }
4173
4175
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
4174
- }, [C.kind]), B(() => {
4176
+ }, [C.kind]), z(() => {
4175
4177
  if (C.kind !== "editing") return;
4176
4178
  let t = e.comments.find((e) => e._id === C.commentId);
4177
4179
  (!t || t.deleted) && w({ kind: "none" });
4178
4180
  }, [e.comments, C]);
4179
- let j = V(!0);
4180
- B(() => {
4181
+ let j = B(!0);
4182
+ z(() => {
4181
4183
  let e = b.current;
4182
4184
  if (e) {
4183
4185
  if (j.current) {
@@ -4186,7 +4188,7 @@ function Ha({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4186
4188
  }
4187
4189
  e.scrollHeight - e.scrollTop - e.clientHeight < 80 && (e.scrollTop = e.scrollHeight);
4188
4190
  }
4189
- }, [A.length]), B(() => {
4191
+ }, [A.length]), z(() => {
4190
4192
  let e = y.current;
4191
4193
  if (!e) return;
4192
4194
  if (typeof e.showPopover == "function" && !e.matches(":popover-open")) try {
@@ -4197,7 +4199,7 @@ function Ha({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4197
4199
  }
4198
4200
  return e.addEventListener("toggle", t), () => e.removeEventListener("toggle", t);
4199
4201
  }, [f]);
4200
- let M = Se(() => {
4202
+ let M = Ce(() => {
4201
4203
  let t = Tr({
4202
4204
  anchorX: e.anchorX,
4203
4205
  anchorY: e.anchorY,
@@ -4635,9 +4637,9 @@ function Xa() {
4635
4637
  return window.location.host + window.location.pathname;
4636
4638
  }
4637
4639
  function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "default", screenshots: i }) {
4638
- let [a, o] = z(Xa), [s, c] = z([]), [l, u] = z(!1), [d, f] = z({ kind: "unresolved" }), [p, m] = z(n), h = V(d);
4640
+ let [a, o] = R(Xa), [s, c] = R([]), [l, u] = R(!1), [d, f] = R({ kind: "unresolved" }), [p, m] = R(n), h = B(d);
4639
4641
  h.current = d;
4640
- let [g, _] = z(0), v = Se(() => Or({
4642
+ let [g, _] = R(0), v = Ce(() => Or({
4641
4643
  apiUrl: e,
4642
4644
  apiKey: t,
4643
4645
  getToken: () => {
@@ -4663,8 +4665,8 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4663
4665
  };
4664
4666
  h.current = t, f(t), Br(t), _((e) => e + 1);
4665
4667
  }
4666
- }), [e, t]), [y, b] = z({ kind: "idle" }), [x, S] = z(!1), [C, w] = z(null), [T, E] = z(!1), [D, O] = z(!1), [, k] = z(0), A = V(null), j = Hr(d), M = d.kind === "verified", N = d.kind === "unresolved" || d.kind === "recovering", P = Vr(d);
4667
- B(() => {
4668
+ }), [e, t]), [y, b] = R({ kind: "idle" }), [x, S] = R(!1), [C, w] = R(null), [T, E] = R(!1), [D, O] = R(!1), [k, A] = R(0), j = B(null), M = Hr(d), N = d.kind === "verified", ee = d.kind === "unresolved" || d.kind === "recovering", P = Vr(d);
4669
+ z(() => {
4668
4670
  let { state: e, preserved: t } = zr();
4669
4671
  if (e.kind === "anon" || e.kind === "verified") {
4670
4672
  f(e);
@@ -4692,14 +4694,14 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4692
4694
  n = !0, r && clearTimeout(r);
4693
4695
  };
4694
4696
  }, [v, g]);
4695
- let [ee, te] = z(null);
4696
- B(() => {
4697
+ let [te, ne] = R(null);
4698
+ z(() => {
4697
4699
  let e = !1, t = null;
4698
4700
  async function n() {
4699
4701
  try {
4700
4702
  let r = await v.getSubscriptionToken();
4701
4703
  if (e) return;
4702
- te(r.token);
4704
+ ne(r.token);
4703
4705
  let i = Math.max(6e4, r.expiresAt - Date.now() - 30 * 6e4);
4704
4706
  t = setTimeout(n, i);
4705
4707
  } catch {
@@ -4711,29 +4713,29 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4711
4713
  e = !0, t && clearTimeout(t);
4712
4714
  };
4713
4715
  }, [v]);
4714
- let [ne, re] = z(null);
4715
- B(() => {
4716
+ let [re, ie] = R(null);
4717
+ z(() => {
4716
4718
  let t = new rr(e.replace(/\.convex\.site(\/.*)?$/, ".convex.cloud"));
4717
- return re(t), () => {
4718
- t.close(), re((e) => e === t ? null : e);
4719
+ return ie(t), () => {
4720
+ t.close(), ie((e) => e === t ? null : e);
4719
4721
  };
4720
4722
  }, [e]);
4721
- let ie = V(!1);
4722
- B(() => {
4723
- if (!(!ne || !ee)) return w(null), ne.onUpdate(qt("widget/queries:subscribeThreadsForRoute"), {
4724
- subscriptionToken: ee,
4723
+ let ae = B(!1);
4724
+ z(() => {
4725
+ if (!(!re || !te)) return w(null), re.onUpdate(qt("widget/queries:subscribeThreadsForRoute"), {
4726
+ subscriptionToken: te,
4725
4727
  route: a,
4726
4728
  viewerClientId: P
4727
4729
  }, (e) => {
4728
4730
  e !== void 0 && (c(e), u(!0));
4729
4731
  });
4730
4732
  }, [
4731
- ne,
4732
- ee,
4733
+ re,
4734
+ te,
4733
4735
  a,
4734
4736
  P
4735
- ]), B(() => {
4736
- if (ie.current || !l) return;
4737
+ ]), z(() => {
4738
+ if (ae.current || !l) return;
4737
4739
  let e = window.location.hash.match(/^#markup-thread=(.+)$/);
4738
4740
  if (e) {
4739
4741
  let t = decodeURIComponent(e[1] ?? "");
@@ -4742,13 +4744,13 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4742
4744
  threadId: t
4743
4745
  }), history.replaceState(null, "", window.location.pathname + window.location.search);
4744
4746
  }
4745
- ie.current = !0;
4746
- }, [s, l]), B(() => Fr(() => o(Xa())), []), B(() => {
4747
+ ae.current = !0;
4748
+ }, [s, l]), z(() => Fr(() => o(Xa())), []), z(() => {
4747
4749
  function e(e) {
4748
4750
  e.key === "." && (e.metaKey || e.ctrlKey) && (e.altKey || e.shiftKey || (e.preventDefault(), E((e) => !e)));
4749
4751
  }
4750
4752
  return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
4751
- }, []), B(() => {
4753
+ }, []), z(() => {
4752
4754
  if (!D) return;
4753
4755
  if (!T) {
4754
4756
  O(!1);
@@ -4756,11 +4758,11 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4756
4758
  }
4757
4759
  let e = window.setTimeout(() => O(!1), 5e3);
4758
4760
  return () => window.clearTimeout(e);
4759
- }, [D, T]), B(() => {
4761
+ }, [D, T]), z(() => {
4760
4762
  let e = null;
4761
4763
  function t() {
4762
4764
  e ??= requestAnimationFrame(() => {
4763
- e = null, k((e) => e + 1);
4765
+ e = null, A((e) => e + 1);
4764
4766
  });
4765
4767
  }
4766
4768
  window.addEventListener("scroll", t, { passive: !0 }), window.addEventListener("resize", t);
@@ -4769,12 +4771,12 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4769
4771
  window.removeEventListener("scroll", t), window.removeEventListener("resize", t), n.disconnect(), e != null && cancelAnimationFrame(e);
4770
4772
  };
4771
4773
  }, []);
4772
- let ae = H(() => {
4774
+ let oe = V(() => {
4773
4775
  w(null), b({ kind: "placing" });
4774
- }, []), F = H(() => {
4776
+ }, []), se = V(() => {
4775
4777
  b({ kind: "idle" }), w(null);
4776
- }, []), oe = V(0), se = H((e, t, n) => {
4777
- let r = t + window.scrollX, a = n + window.scrollY, o = ++oe.current;
4778
+ }, []), ce = B(0), le = V((e, t, n) => {
4779
+ let r = t + window.scrollX, a = n + window.scrollY, o = ++ce.current;
4778
4780
  if (i?.enabled === !1) {
4779
4781
  b({
4780
4782
  kind: "composing-new",
@@ -4800,7 +4802,7 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4800
4802
  screenshotRedactedSelectors: [],
4801
4803
  captureToken: o
4802
4804
  });
4803
- let s = A.current != null && A.current.getRootNode() instanceof ShadowRoot ? A.current.getRootNode().host : null, c = {
4805
+ let s = j.current != null && j.current.getRootNode() instanceof ShadowRoot ? j.current.getRootNode().host : null, c = {
4804
4806
  strictScrub: i?.strictScrub,
4805
4807
  redactSelector: i?.redactSelector
4806
4808
  };
@@ -4816,7 +4818,7 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4816
4818
  screenshotRedactedSelectors: e?.redactedSelectors ?? []
4817
4819
  });
4818
4820
  });
4819
- }, [i]), ce = H((e, t) => {
4821
+ }, [i]), ue = V((e, t) => {
4820
4822
  if (d.kind !== "anon") return;
4821
4823
  let n = {
4822
4824
  kind: "anon",
@@ -4827,9 +4829,9 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4827
4829
  }
4828
4830
  };
4829
4831
  Br(n), f(n);
4830
- }, [d]), [le, ue] = z(!1), I = H(async () => {
4831
- if (!le) {
4832
- w(null), ue(!0);
4832
+ }, [d]), [F, I] = R(!1), de = V(async () => {
4833
+ if (!F) {
4834
+ w(null), I(!0);
4833
4835
  try {
4834
4836
  let n = Ya(await Wr(e, t));
4835
4837
  if (!n) throw Error("Sign-in did not return a verified token");
@@ -4841,14 +4843,14 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4841
4843
  } catch (e) {
4842
4844
  w(e instanceof Error ? e.message : "Sign-in failed");
4843
4845
  } finally {
4844
- ue(!1);
4846
+ I(!1);
4845
4847
  }
4846
4848
  }
4847
4849
  }, [
4848
4850
  e,
4849
4851
  t,
4850
- le
4851
- ]), de = H(async (e, t) => {
4852
+ F
4853
+ ]), fe = V(async (e, t) => {
4852
4854
  if (y.kind !== "composing-new") return;
4853
4855
  let n = Ur(d);
4854
4856
  if (n) {
@@ -4896,7 +4898,7 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4896
4898
  d,
4897
4899
  y,
4898
4900
  a
4899
- ]), fe = H(async () => {
4901
+ ]), pe = V(async () => {
4900
4902
  if (y.kind !== "thread") return;
4901
4903
  let e = y.threadId;
4902
4904
  S(!0), w(null);
@@ -4907,7 +4909,7 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4907
4909
  } finally {
4908
4910
  S(!1);
4909
4911
  }
4910
- }, [v, y]), pe = H(async () => {
4912
+ }, [v, y]), me = V(async () => {
4911
4913
  if (y.kind !== "thread") return;
4912
4914
  let e = y.threadId;
4913
4915
  S(!0), w(null);
@@ -4922,7 +4924,7 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4922
4924
  v,
4923
4925
  y,
4924
4926
  P
4925
- ]), me = H(async (e) => {
4927
+ ]), L = V(async (e) => {
4926
4928
  if (y.kind !== "thread") return;
4927
4929
  let t = Ur(d);
4928
4930
  if (!t) return;
@@ -4944,7 +4946,7 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4944
4946
  v,
4945
4947
  d,
4946
4948
  y
4947
- ]), L = H(async (e, t) => {
4949
+ ]), he = V(async (e, t) => {
4948
4950
  if (y.kind !== "thread" || d.kind !== "anon" && d.kind !== "verified") return;
4949
4951
  let n = y.threadId;
4950
4952
  S(!0), w(null);
@@ -4960,7 +4962,7 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4960
4962
  v,
4961
4963
  d,
4962
4964
  y
4963
- ]), he = H(async (e) => {
4965
+ ]), ge = V(async (e) => {
4964
4966
  if (y.kind !== "thread" || d.kind !== "anon" && d.kind !== "verified") return;
4965
4967
  let t = y.threadId;
4966
4968
  S(!0), w(null);
@@ -4976,7 +4978,7 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4976
4978
  v,
4977
4979
  d,
4978
4980
  y
4979
- ]), ge = H(async (e, t) => {
4981
+ ]), _e = V(async (e, t) => {
4980
4982
  if (y.kind !== "thread") return;
4981
4983
  let n = Ur(d);
4982
4984
  if (!n) return;
@@ -4995,32 +4997,51 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
4995
4997
  v,
4996
4998
  d,
4997
4999
  y
4998
- ]), R = y.kind === "thread" ? s.find((e) => e._id === y.threadId) ?? null : null, _e = M || P != null && P === R?.authorClientId;
4999
- return B(() => {
5000
- y.kind === "thread" && R == null && F();
5000
+ ]), ve = y.kind === "thread" ? s.find((e) => e._id === y.threadId) ?? null : null, ye = N || P != null && P === ve?.authorClientId, be = Ce(() => s.map((e) => ({
5001
+ thread: e,
5002
+ point: Tr({
5003
+ anchorX: e.anchorX,
5004
+ anchorY: e.anchorY,
5005
+ anchorSelector: e.anchorSelector,
5006
+ anchorOffsetX: e.anchorOffsetX,
5007
+ anchorOffsetY: e.anchorOffsetY
5008
+ })
5009
+ })), [s, k]), xe = be.some((e) => !e.point.resolved);
5010
+ return z(() => {
5011
+ if (!xe) return;
5012
+ let e = null;
5013
+ function t() {
5014
+ e ??= requestAnimationFrame(() => {
5015
+ e = null, A((e) => e + 1);
5016
+ });
5017
+ }
5018
+ let n = new MutationObserver(t);
5019
+ return n.observe(document.body, {
5020
+ childList: !0,
5021
+ subtree: !0
5022
+ }), () => {
5023
+ n.disconnect(), e != null && cancelAnimationFrame(e);
5024
+ };
5025
+ }, [xe]), z(() => {
5026
+ y.kind === "thread" && ve == null && se();
5001
5027
  }, [
5002
5028
  y,
5003
- R,
5004
- F
5029
+ ve,
5030
+ se
5005
5031
  ]), /* @__PURE__ */ $("div", {
5006
5032
  class: "markup-root",
5007
- ref: A,
5033
+ ref: j,
5008
5034
  children: [
5009
5035
  y.kind === "placing" ? null : /* @__PURE__ */ $("div", {
5010
5036
  class: "markup-pins-layer",
5011
- children: [T ? null : s.map((e) => {
5012
- let t = y.kind === "thread" && y.threadId === e._id, n = Tr({
5013
- anchorX: e.anchorX,
5014
- anchorY: e.anchorY,
5015
- anchorSelector: e.anchorSelector,
5016
- anchorOffsetX: e.anchorOffsetX,
5017
- anchorOffsetY: e.anchorOffsetY
5018
- }), r = e.comments.reduce((e, t) => e + +!t.deleted, 0);
5037
+ children: [T ? null : be.map(({ thread: e, point: t }) => {
5038
+ let n = y.kind === "thread" && y.threadId === e._id, r = e.comments.reduce((e, t) => e + +!t.deleted, 0);
5019
5039
  return /* @__PURE__ */ $(Ra, {
5020
- pageX: n.pageX,
5021
- pageY: n.pageY,
5040
+ pageX: t.pageX,
5041
+ pageY: t.pageY,
5022
5042
  count: r,
5023
- active: t,
5043
+ active: n,
5044
+ unresolved: !t.resolved,
5024
5045
  onClick: () => b({
5025
5046
  kind: "thread",
5026
5047
  threadId: e._id
@@ -5032,51 +5053,51 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
5032
5053
  }) : null]
5033
5054
  }),
5034
5055
  y.kind === "placing" ? /* @__PURE__ */ $(Ba, {
5035
- onPlace: se,
5036
- onCancel: F
5056
+ onPlace: le,
5057
+ onCancel: se
5037
5058
  }) : null,
5038
- y.kind === "thread" && R ? /* @__PURE__ */ $(Ha, {
5039
- thread: R,
5040
- authorName: j,
5059
+ y.kind === "thread" && ve ? /* @__PURE__ */ $(Ha, {
5060
+ thread: ve,
5061
+ authorName: M,
5041
5062
  currentClientId: P ?? null,
5042
- isVerified: M,
5043
- identityResolving: N,
5044
- signingIn: le,
5045
- canDelete: _e,
5063
+ isVerified: N,
5064
+ identityResolving: ee,
5065
+ signingIn: F,
5066
+ canDelete: ye,
5046
5067
  pending: x,
5047
5068
  error: C,
5048
5069
  hidden: T,
5049
- onAuthor: ce,
5050
- onSignIn: I,
5051
- onClose: F,
5052
- onReply: me,
5053
- onEditComment: L,
5054
- onDeleteComment: he,
5055
- onToggleReaction: ge,
5056
- onDelete: fe,
5057
- onResolve: pe
5058
- }, R._id) : null,
5070
+ onAuthor: ue,
5071
+ onSignIn: de,
5072
+ onClose: se,
5073
+ onReply: L,
5074
+ onEditComment: he,
5075
+ onDeleteComment: ge,
5076
+ onToggleReaction: _e,
5077
+ onDelete: pe,
5078
+ onResolve: me
5079
+ }, ve._id) : null,
5059
5080
  y.kind === "composing-new" ? /* @__PURE__ */ $(Ia, {
5060
5081
  pageX: y.pageX,
5061
5082
  pageY: y.pageY,
5062
- authorName: j,
5063
- isVerified: M,
5064
- identityResolving: N,
5065
- signingIn: le,
5083
+ authorName: M,
5084
+ isVerified: N,
5085
+ identityResolving: ee,
5086
+ signingIn: F,
5066
5087
  pending: x,
5067
5088
  error: C,
5068
5089
  screenshot: y.screenshot,
5069
5090
  screenshotCapturing: y.screenshotCapturing,
5070
5091
  screenshotRedactedCount: y.screenshotRedactedCount,
5071
5092
  screenshotRedactedSelectors: y.screenshotRedactedSelectors,
5072
- onAuthor: ce,
5073
- onSignIn: I,
5074
- onSubmit: de,
5075
- onClose: F
5093
+ onAuthor: ue,
5094
+ onSignIn: de,
5095
+ onSubmit: fe,
5096
+ onClose: se
5076
5097
  }) : null,
5077
5098
  !T || y.kind === "placing" || y.kind === "composing-new" ? /* @__PURE__ */ $(ka, {
5078
5099
  active: y.kind === "placing",
5079
- onToggle: () => y.kind === "placing" ? F() : ae(),
5100
+ onToggle: () => y.kind === "placing" ? se() : oe(),
5080
5101
  onHide: () => {
5081
5102
  E(!0), O(!0);
5082
5103
  },
@@ -5091,7 +5112,7 @@ function Za({ apiUrl: e, apiKey: t, position: n = "bottom-right", fab: r = "defa
5091
5112
  function Qa({ position: e }) {
5092
5113
  let t = /Mac|iPhone|iPad/.test(navigator.platform || navigator.userAgent) ? "⌘" : "Ctrl";
5093
5114
  return /* @__PURE__ */ $("div", {
5094
- class: Q("markup-hud-hidden-toast", e === "bottom-left" ? "markup-hud-hidden-toast-left" : "markup-hud-hidden-toast-right"),
5115
+ class: Q("markup-hud-hidden-toast", e === "bottom-left" ? "markup-hud-hidden-toast-left" : e === "bottom-center" ? "markup-hud-hidden-toast-center" : "markup-hud-hidden-toast-right"),
5095
5116
  role: "status",
5096
5117
  "aria-live": "polite",
5097
5118
  children: [
@@ -5115,11 +5136,11 @@ function $a(e, t) {
5115
5136
  let n = t.theme ?? "auto";
5116
5137
  n !== "auto" && (e.dataset.theme = n);
5117
5138
  let r = e.attachShadow({ mode: "open" }), i = document.createElement("style");
5118
- i.textContent = le, r.appendChild(i);
5139
+ i.textContent = ue, r.appendChild(i);
5119
5140
  let a = document.createElement("div");
5120
5141
  a.className = "markup-shadow-root", r.appendChild(a);
5121
5142
  let { theme: o, ...s } = t;
5122
- return ce(/* @__PURE__ */ $(Za, { ...s }), a), () => ce(null, a);
5143
+ return le(/* @__PURE__ */ $(Za, { ...s }), a), () => le(null, a);
5123
5144
  }
5124
5145
  //#endregion
5125
5146
  //#region src/widget.ts