@pixelmatters/markup 1.3.3 → 1.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +6 -6
  2. package/dist/widget.js +338 -306
  3. package/package.json +1 -1
package/dist/widget.js CHANGED
@@ -45,7 +45,7 @@ function w(e, t) {
45
45
  function T(e) {
46
46
  if (e.__P && e.__d) {
47
47
  var n = e.__v, r = n.__e, i = [], a = [], o = v({}, n);
48
- o.__v = n.__v + 1, t.vnode && t.vnode(o), ne(e.__P, o, n, e.__n, e.__P.namespaceURI, 32 & n.__u ? [r] : null, i, r ?? w(n), !!(32 & n.__u), a), o.__v = n.__v, o.__.__k[o.__i] = o, F(i, o, a), n.__e = n.__ = null, o.__e != r && E(o);
48
+ o.__v = n.__v + 1, t.vnode && t.vnode(o), N(e.__P, o, n, e.__n, e.__P.namespaceURI, 32 & n.__u ? [r] : null, i, r ?? w(n), !!(32 & n.__u), a), o.__v = n.__v, o.__.__k[o.__i] = o, ie(i, o, a), n.__e = n.__ = null, o.__e != r && E(o);
49
49
  }
50
50
  }
51
51
  function E(e) {
@@ -65,13 +65,13 @@ function O() {
65
65
  }
66
66
  function ee(e, t, n, r, i, a, o, s, c, l, u) {
67
67
  var d, f, p, g, _, v, y, b = r && r.__k || h, x = t.length;
68
- for (c = k(n, t, b, c, x), d = 0; d < x; d++) (p = n.__k[d]) != null && (f = p.__i != -1 && b[p.__i] || m, p.__i = d, v = ne(e, p, f, i, a, o, s, c, l, u), g = p.__e, p.ref && f.ref != p.ref && (f.ref && ae(f.ref, null, p), u.push(p.ref, p.__c || g, p)), _ == null && g != null && (_ = g), (y = !!(4 & p.__u)) || f.__k === p.__k ? (c = A(p, c, e, y), y && f.__e && (f.__e = null)) : typeof p.type == "function" && v !== void 0 ? c = v : g && (c = g.nextSibling), p.__u &= -7);
68
+ for (c = k(n, t, b, c, x), d = 0; d < x; d++) (p = n.__k[d]) != null && (f = p.__i != -1 && b[p.__i] || m, p.__i = d, v = N(e, p, f, i, a, o, s, c, l, u), g = p.__e, p.ref && f.ref != p.ref && (f.ref && oe(f.ref, null, p), u.push(p.ref, p.__c || g, p)), _ == null && g != null && (_ = g), (y = !!(4 & p.__u)) || f.__k === p.__k ? (c = A(p, c, e, y), y && f.__e && (f.__e = null)) : typeof p.type == "function" && v !== void 0 ? c = v : g && (c = g.nextSibling), p.__u &= -7);
69
69
  return n.__e = _, c;
70
70
  }
71
71
  function k(e, t, n, r, i) {
72
72
  var a, o, s, c, l, u = n.length, d = u, f = 0;
73
73
  for (e.__k = Array(i), a = 0; a < i; a++) (o = t[a]) != null && typeof o != "boolean" && typeof o != "function" ? (typeof o == "string" || typeof o == "number" || typeof o == "bigint" || o.constructor == String ? o = e.__k[a] = x(null, o, null, null, null) : _(o) ? o = e.__k[a] = x(S, { children: o }, null, null, null) : o.constructor === void 0 && o.__b > 0 ? o = e.__k[a] = x(o.type, o.props, o.key, o.ref ? o.ref : null, o.__v) : e.__k[a] = o, c = a + f, o.__ = e, o.__b = e.__b + 1, s = null, (l = o.__i = j(o, n, c, d)) != -1 && (d--, (s = n[l]) && (s.__u |= 2)), s == null || s.__v == null ? (l == -1 && (i > u ? f-- : i < u && f++), typeof o.type != "function" && (o.__u |= 4)) : l != c && (l == c - 1 ? f-- : l == c + 1 ? f++ : (l > c ? f-- : f++, o.__u |= 4))) : e.__k[a] = null;
74
- 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 A(e, t, n, r) {
@@ -114,7 +114,7 @@ function te(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 N(e) {
117
+ function ne(e) {
118
118
  return function(n) {
119
119
  if (this.l) {
120
120
  var r = this.l[n.type + e];
@@ -124,12 +124,12 @@ function N(e) {
124
124
  }
125
125
  };
126
126
  }
127
- function ne(e, n, r, i, a, o, s, c, l, u) {
127
+ function N(e, n, r, i, a, o, s, c, l, u) {
128
128
  var d, f, p, m, g, b, x, w, T, E, D, O, k, A, j, M = n.type;
129
129
  if (n.constructor !== void 0) return null;
130
130
  128 & r.__u && (l = !!(32 & r.__u), o = [c = n.__e = r.__e]), (d = t.__b) && d(n);
131
131
  n: if (typeof M == "function") try {
132
- if (w = n.props, T = M.prototype && M.prototype.render, E = (d = M.contextType) && i[d.__c], D = d ? E ? E.props.value : d.__ : i, r.__c ? x = (f = n.__c = r.__c).__ = f.__E : (T ? n.__c = f = new M(w, D) : (n.__c = f = new C(w, D), f.constructor = M, f.render = 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 && M.getDerivedStateFromProps != null && (f.__s == f.state && (f.__s = v({}, f.__s)), v(f.__s, M.getDerivedStateFromProps(w, f.__s))), m = f.props, g = f.state, f.__v = n, p) T && M.getDerivedStateFromProps == null && f.componentWillMount != null && f.componentWillMount(), T && f.componentDidMount != null && f.__h.push(f.componentDidMount);
132
+ if (w = n.props, T = M.prototype && M.prototype.render, E = (d = M.contextType) && i[d.__c], D = d ? E ? E.props.value : d.__ : i, r.__c ? x = (f = n.__c = r.__c).__ = f.__E : (T ? n.__c = f = new M(w, D) : (n.__c = f = new C(w, D), f.constructor = M, f.render = ce), E && E.sub(f), f.state ||= {}, f.__n = i, p = f.__d = !0, f.__h = [], f._sb = []), T && f.__s == null && (f.__s = f.state), T && M.getDerivedStateFromProps != null && (f.__s == f.state && (f.__s = v({}, f.__s)), v(f.__s, M.getDerivedStateFromProps(w, f.__s))), m = f.props, g = f.state, f.__v = n, p) T && M.getDerivedStateFromProps == null && f.componentWillMount != null && f.componentWillMount(), T && f.componentDidMount != null && f.__h.push(f.componentDidMount);
133
133
  else {
134
134
  if (T && M.getDerivedStateFromProps == null && w !== m && f.componentWillReceiveProps != null && f.componentWillReceiveProps(w, D), n.__v == r.__v || !f.__e && f.shouldComponentUpdate != null && !1 === f.shouldComponentUpdate(w, f.__s, D)) {
135
135
  n.__v != r.__v && (f.props = w, f.state = f.__s, f.__d = !1), n.__e = r.__e, n.__k = r.__k, n.__k.some(function(e) {
@@ -145,26 +145,26 @@ function ne(e, n, r, i, a, o, s, c, l, u) {
145
145
  else do
146
146
  f.__d = !1, O && O(n), d = f.render(f.props, f.state, f.context), f.state = f.__s;
147
147
  while (f.__d && ++k < 25);
148
- f.state = f.__s, f.getChildContext != null && (i = v(v({}, i), f.getChildContext())), T && !p && f.getSnapshotBeforeUpdate != null && (b = f.getSnapshotBeforeUpdate(m, g)), A = d != null && d.type === S && d.key == null ? re(d.props.children) : d, c = ee(e, _(A) ? A : [A], n, r, i, a, o, s, c, l, u), f.base = n.__e, n.__u &= -161, f.__h.length && s.push(f), x && (f.__E = f.__ = null);
148
+ f.state = f.__s, f.getChildContext != null && (i = v(v({}, i), f.getChildContext())), T && !p && f.getSnapshotBeforeUpdate != null && (b = f.getSnapshotBeforeUpdate(m, g)), A = d != null && d.type === S && d.key == null ? P(d.props.children) : d, c = ee(e, _(A) ? A : [A], n, r, i, a, o, s, c, l, u), f.base = n.__e, n.__u &= -161, f.__h.length && s.push(f), x && (f.__E = f.__ = null);
149
149
  } catch (e) {
150
150
  if (n.__v = null, l || o != null) if (e.then) {
151
151
  for (n.__u |= l ? 160 : 128; c && c.nodeType == 8 && c.nextSibling;) c = c.nextSibling;
152
152
  o[o.indexOf(c)] = null, n.__e = c;
153
153
  } else {
154
154
  for (j = o.length; j--;) y(o[j]);
155
- P(n);
155
+ re(n);
156
156
  }
157
- else n.__e = r.__e, n.__k = r.__k, e.then || P(n);
157
+ else n.__e = r.__e, n.__k = r.__k, e.then || re(n);
158
158
  t.__e(e, n, r);
159
159
  }
160
- else o == null && n.__v == r.__v ? (n.__k = r.__k, n.__e = r.__e) : c = n.__e = ie(r.__e, n, r, i, a, o, s, l, u);
160
+ else o == null && n.__v == r.__v ? (n.__k = r.__k, n.__e = r.__e) : c = n.__e = ae(r.__e, n, r, i, a, o, s, l, u);
161
161
  return (d = t.diffed) && d(n), 128 & n.__u ? void 0 : c;
162
162
  }
163
- function P(e) {
164
- e && (e.__c && (e.__c.__e = !0), e.__k && e.__k.some(P));
163
+ function re(e) {
164
+ e && (e.__c && (e.__c.__e = !0), e.__k && e.__k.some(re));
165
165
  }
166
- function F(e, n, r) {
167
- for (var i = 0; i < r.length; i++) ae(r[i], r[++i], r[++i]);
166
+ function ie(e, n, r) {
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) {
@@ -175,10 +175,10 @@ function F(e, n, r) {
175
175
  }
176
176
  });
177
177
  }
178
- function re(e) {
179
- return typeof e != "object" || !e || e.__b > 0 ? e : _(e) ? e.map(re) : v({}, e);
178
+ function P(e) {
179
+ return typeof e != "object" || !e || e.__b > 0 ? e : _(e) ? e.map(P) : v({}, e);
180
180
  }
181
- function ie(n, r, i, a, o, s, c, l, u) {
181
+ function ae(n, r, i, a, o, s, c, l, u) {
182
182
  var d, f, p, h, g, v, b, x = i.props || m, S = r.props, C = r.type;
183
183
  if (C == "svg" ? o = "http://www.w3.org/2000/svg" : C == "math" ? o = "http://www.w3.org/1998/Math/MathML" : o ||= "http://www.w3.org/1999/xhtml", s != null) {
184
184
  for (d = 0; d < s.length; d++) if ((g = s[d]) && "setAttribute" in g == !!C && (C ? g.localName == C : g.nodeType == 3)) {
@@ -201,7 +201,7 @@ function ie(n, r, i, a, o, s, c, l, u) {
201
201
  }
202
202
  return n;
203
203
  }
204
- function ae(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 ae(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 || ae(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,15 +221,15 @@ 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
- r == document && (r = document.documentElement), t.__ && t.__(n, r), o = (a = typeof i == "function") ? null : i && i.__k || r.__k, s = [], c = [], ne(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), F(s, n, c);
232
+ r == document && (r = document.documentElement), t.__ && t.__(n, r), o = (a = typeof i == "function") ? null : i && i.__k || r.__k, s = [], c = [], N(r, n = (!a && i || r).__k = b(S, null, [n]), o || m, m, r.namespaceURI, !a && i ? [i] : o ? null : r.firstChild ? e.call(r.childNodes) : null, s, !a && i ? i : o ? o.__e : r.firstChild, a, c), ie(s, n, c);
233
233
  }
234
234
  e = h.slice, t = { __e: function(e, t, n, r) {
235
235
  for (var i, a, o; t = t.__;) if ((i = t.__c) && !i.__) try {
@@ -245,27 +245,27 @@ 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 = N(!1), p = N(!0);
248
+ }, O.__r = 0, s = Math.random().toString(8), c = "__d" + s, l = "__a" + s, u = /(PointerCapture)$|Capture$/i, d = 0, f = ne(!1), p = ne(!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-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)}@keyframes markup-menu-in-up{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.markup-comment{position:relative}.markup-reactions{flex-wrap:wrap;align-items:center;gap:4px;margin-top:2px;display:flex}.markup-reaction-chip{border:1px solid var(--markup-border);height:22px;color:var(--markup-ink);font:inherit;cursor:pointer;background:0 0;border-radius:999px;align-items:center;gap:4px;padding:0 7px 0 6px;font-size:11px;line-height:1;transition:background .12s,border-color .12s;display:inline-flex}.markup-reaction-chip:hover:not(:disabled){background:color-mix(in srgb, var(--markup-ink) 5%, transparent)}.markup-reaction-chip.is-mine{border-color:color-mix(in srgb, var(--markup-brand) 45%, transparent);background:color-mix(in srgb, var(--markup-brand) 10%, transparent)}.markup-reaction-chip.is-mine:hover:not(:disabled){background:color-mix(in srgb, var(--markup-brand) 16%, transparent)}.markup-reaction-chip:disabled{cursor:default;opacity:.6}.markup-reaction-emoji{font-size:13px;line-height:1}.markup-reaction-count{font-family:var(--markup-font-mono);letter-spacing:.04em;color:var(--markup-muted);font-size:10px}.markup-reaction-chip.is-mine .markup-reaction-count{color:var(--markup-brand)}.markup-reaction-picker-wrap{opacity:0;flex:none;transition:opacity .12s;display:inline-flex;position:relative}.markup-comment:hover .markup-reaction-picker-wrap,.markup-comment:focus-within .markup-reaction-picker-wrap,.markup-reaction-picker-wrap.is-open{opacity:1}.markup-reaction-add{border:1px dashed var(--markup-border-strong);width:22px;height:22px;color:var(--markup-muted);font:inherit;cursor:pointer;background:0 0;border-radius:999px;justify-content:center;align-items:center;font-size:13px;line-height:1;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.markup-reaction-add:hover,.markup-reaction-add.is-open{background:color-mix(in srgb, var(--markup-ink) 5%, transparent);color:var(--markup-ink);border-style:solid}.markup-reaction-picker{z-index:1;border:1px solid var(--markup-border-strong);background:var(--markup-paper);border-radius:8px;gap:2px;padding:4px;animation:.12s markup-menu-in;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 1px 2px #1a16140f,0 8px 28px #1a16141a}.markup-reaction-picker-wrap.is-up .markup-reaction-picker{animation-name:markup-menu-in-up;top:auto;bottom:calc(100% + 6px)}.markup-reaction-picker-item{cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;font-size:16px;line-height:1;transition:background .12s;display:inline-flex}.markup-reaction-picker-item:hover{background:color-mix(in srgb, var(--markup-ink) 8%, transparent)}.markup-reaction-picker-item.is-mine{background:color-mix(in srgb, var(--markup-brand) 14%, transparent)}.markup-comment-edit-form{flex-direction:column;gap:6px;display:flex}.markup-comment-edit-form .markup-textarea{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);background:var(--markup-paper);width:100%;color:var(--markup-ink);resize:vertical;font:inherit;outline:none;padding:8px 10px;font-size:13px;line-height:1.5}.markup-comment-edit-form .markup-textarea:focus-visible{border-color:var(--markup-brand);box-shadow:0 0 0 3px #e35d2a2e}.markup-comment-edit-actions{justify-content:flex-end;gap:6px;display:flex}.markup-composer{flex-direction:column;display:flex;position:relative}.markup-composer-input{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);background:var(--markup-paper);width:100%;min-height:36px;max-height:96px;color:var(--markup-ink);resize:none;font-family:var(--markup-font);outline:none;padding:8px 10px;font-size:13px;line-height:1.5;transition:border-color .12s,box-shadow .12s,border-bottom-left-radius .15s,border-bottom-right-radius .15s}.markup-composer-input:focus-visible{border-color:var(--markup-brand);box-shadow:0 0 0 3px #e35d2a2e}.markup-composer-input:disabled{opacity:.6}.markup-composer-input::placeholder{color:var(--markup-muted)}.markup-composer.is-filled .markup-composer-input{border-bottom-right-radius:0;border-bottom-left-radius:0}.markup-composer-footer-wrap{grid-template-rows:0fr;transition:grid-template-rows .15s;display:grid}.markup-composer.is-filled .markup-composer-footer-wrap{grid-template-rows:1fr}.markup-composer-footer{border:1px solid var(--markup-border-strong);border-radius:0 0 var(--markup-radius-sm) var(--markup-radius-sm);opacity:0;border-top:none;justify-content:space-between;align-items:center;gap:8px;padding:2px 2px 2px 10px;transition:opacity .1s;display:flex;overflow:hidden}.markup-composer.is-filled .markup-composer-footer{opacity:1;transition-delay:60ms}.markup-composer-hint{font-family:var(--markup-font-mono);letter-spacing:.06em;color:var(--markup-muted);font-size:10px}.markup-composer-error{color:var(--markup-brand)}.markup-composer-actions{align-items:center;gap:6px;display:flex}.markup-composer-actions-empty{transition:opacity .12s;position:absolute;top:3px;right:3px}.markup-composer.is-filled .markup-composer-actions-empty{opacity:0;pointer-events:none}.markup-author-prompt{flex-direction:column;gap:10px;padding:12px;display:flex}.markup-author-status{color:var(--markup-muted);margin:0;font-size:12px}.markup-input{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);background:var(--markup-paper);width:100%;height:36px;color:var(--markup-ink);outline:none;padding:0 10px;font-size:14px;transition:border-color .12s,box-shadow .12s}.markup-input:focus-visible{border-color:var(--markup-brand);box-shadow:0 0 0 3px #e35d2a2e}.markup-btn{border-radius:var(--markup-radius-sm);height:30px;color:var(--markup-ink);cursor:pointer;letter-spacing:-.01em;white-space:nowrap;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;gap:6px;padding:0 8px;font-size:12px;font-weight:500;transition:background .12s,border-color .12s,color .12s,opacity .12s;display:inline-flex}.markup-btn:disabled{opacity:.5;cursor:not-allowed}.markup-btn-primary{background:var(--markup-ink);color:var(--markup-paper)}.markup-btn-primary:hover:not(:disabled){background:var(--markup-brand)}.markup-btn-ghost{color:var(--markup-muted)}.markup-btn-ghost:hover:not(:disabled){background:var(--markup-border);color:var(--markup-ink)}.markup-screenshot-row{border-top:1px solid var(--markup-border);margin-top:8px;padding-top:8px}.markup-screenshot-status{color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.06em;align-items:center;gap:5px;font-size:10px;display:flex}.markup-screenshot-toggle{cursor:pointer;color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.06em;align-items:center;gap:5px;font-size:10px;transition:color .12s;display:flex}.markup-screenshot-toggle:hover{color:var(--markup-ink)}.markup-screenshot-checkbox{width:12px;height:12px;accent-color:var(--markup-brand);cursor:pointer;margin:0}.markup-screenshot-thumb{border:1px solid var(--markup-border-strong);object-fit:cover;border-radius:3px;flex-shrink:0;width:auto;height:25px;margin:-5px 0 -5px auto;display:block}.markup-comment-screenshot{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);cursor:pointer;background:0 0;margin-top:8px;padding:0;transition:border-color .12s,opacity .12s;display:block;overflow:hidden}.markup-comment-screenshot:hover{border-color:var(--markup-brand);opacity:.9}.markup-comment-screenshot img{object-fit:cover;object-position:top;width:100%;height:auto;max-height:120px;display:block}.markup-lightbox{background:#1a1614e0;border:none;width:100%;max-width:100%;height:100%;max-height:100%;margin:0;padding:24px;position:fixed;inset:0}.markup-lightbox[open]{justify-content:center;align-items:center;display:flex}.markup-lightbox::backdrop{display:none}.markup-lightbox-img{border-radius:var(--markup-radius);object-fit:contain;max-width:100%;max-height:100%;box-shadow:var(--markup-shadow);animation:.16s ease-out markup-lightbox-in}.markup-lightbox-close{color:#fdfcfa;background:#1a161499;position:absolute;top:16px;right:16px}.markup-lightbox-close:hover{color:#fdfcfa;background:#1a1614d9}@keyframes markup-lightbox-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion:reduce){.markup-fab,.markup-pin,.markup-icon-btn,.markup-btn,.markup-popover,.markup-pin-ghost,.markup-placement-overlay,.markup-placement-cursor-help,.markup-lightbox-img{transition:none;animation:none}}", I, L, ue, de, fe = 0, pe = [], R = t, me = R.__b, he = R.__r, ge = R.diffed, _e = R.__c, ve = R.unmount, ye = R.__;
251
+ var ue = ":host{--markup-paper:#fdfcfa;--markup-ink:#1a1614;--markup-muted:#6b6661;--markup-border:#1a16141a;--markup-border-strong:#1a16142e;--markup-brand:#e35d2a;--markup-brand-hover:#c84d20;--markup-team:#2a4ac8;--markup-shadow:0 1px 2px #1a16140f, 0 8px 28px #1a16141f;--markup-overlay-tint:#1a16140a;--markup-danger:#dc2626;--markup-radius:6px;--markup-radius-sm:4px;--markup-font:\"Geist Variable\", \"Geist\", ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif;--markup-font-mono:\"Geist Mono Variable\", \"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;all:initial;font-family:var(--markup-font);color:var(--markup-ink);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:14px;line-height:1.5}:host([data-theme=dark]){--markup-paper:#1a1614;--markup-ink:#fdfcfa;--markup-muted:#a8a39e;--markup-border:#fdfcfa1f;--markup-border-strong:#fdfcfa38;--markup-team:#7b99f0;--markup-shadow:0 1px 2px #00000059, 0 12px 40px #00000073;--markup-overlay-tint:#fdfcfa0d;--markup-danger:#f87171}@media (prefers-color-scheme:dark){:host(:not([data-theme=light])){--markup-paper:#1a1614;--markup-ink:#fdfcfa;--markup-muted:#a8a39e;--markup-border:#fdfcfa1f;--markup-border-strong:#fdfcfa38;--markup-team:#7b99f0;--markup-shadow:0 1px 2px #00000059, 0 12px 40px #00000073;--markup-overlay-tint:#fdfcfa0d;--markup-danger:#f87171}}.markup-shadow-root{font-family:var(--markup-font)}.markup-shadow-root *,.markup-shadow-root :before,.markup-shadow-root :after{box-sizing:border-box}:where(.markup-shadow-root button,.markup-shadow-root input,.markup-shadow-root textarea){font:inherit;color:inherit}.markup-eyebrow{font-family:var(--markup-font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--markup-muted);font-size:10px;font-weight:500}.markup-fab{z-index:10;background:var(--markup-ink);color:var(--markup-paper);cursor:pointer;touch-action:none;letter-spacing:-.01em;pointer-events:auto;box-shadow:0 0 0 1px color-mix(in srgb, var(--markup-brand) 35%, transparent), var(--markup-shadow);border:none;border-radius:999px;align-items:center;gap:8px;padding:9px 14px;font-size:13px;font-weight:500;transition:background .15s,box-shadow .15s,transform .15s;display:inline-flex;position:fixed;bottom:24px}.markup-fab:hover{background:var(--markup-brand);box-shadow:0 0 0 1px color-mix(in srgb, var(--markup-brand) 0%, transparent), var(--markup-shadow)}.markup-fab:active{transform:translateY(1px)}.markup-fab.is-active{background:var(--markup-brand);box-shadow:var(--markup-shadow)}.markup-fab.is-active:hover{background:var(--markup-brand-hover)}.markup-fab .markup-fab-icon{color:var(--markup-brand);transition:color .15s}.markup-fab:hover .markup-fab-icon,.markup-fab.is-active .markup-fab-icon{color:var(--markup-paper)}.markup-fab-right{right:24px}.markup-fab-left{left:24px}.markup-fab.is-floating{inset:0 auto auto 0}.markup-fab.is-dragging{cursor:grabbing;transition:none}.markup-fab-icon{align-items:center;display:inline-flex}.markup-fab-label{font-family:var(--markup-font)}.markup-hud-hidden-toast{z-index:10;background:var(--markup-ink);color:var(--markup-paper);letter-spacing:-.01em;box-shadow:var(--markup-shadow);pointer-events:none;border-radius:999px;align-items:center;gap:6px;padding:8px 14px;font-size:12px;font-weight:500;animation:.22s ease-out markup-hud-hidden-in,.32s ease-in 4.6s forwards markup-hud-hidden-out;display:inline-flex;position:fixed;bottom:24px}.markup-hud-hidden-toast-right{right:24px}.markup-hud-hidden-toast-left{left:24px}.markup-kbd{background:color-mix(in srgb, var(--markup-paper) 14%, transparent);min-width:18px;height:18px;color:var(--markup-paper);font-family:var(--markup-font);border-radius:4px;justify-content:center;align-items:center;padding:0 5px;font-size:10px;font-weight:600;line-height:1;display:inline-flex}@keyframes markup-hud-hidden-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes markup-hud-hidden-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(4px)}}.markup-pins-layer{pointer-events:none;position:fixed;inset:0}.markup-pin{background:var(--markup-ink);width:28px;height:28px;color:var(--markup-brand);cursor:pointer;pointer-events:auto;box-shadow:0 0 0 2px var(--markup-paper), 0 0 0 3px color-mix(in srgb, var(--markup-brand) 35%, transparent), var(--markup-shadow);border:none;border-radius:50% 50% 50% 4px;justify-content:center;align-items:center;margin-top:-28px;padding:0;transition:transform .15s,background .15s,color .15s;display:inline-flex;position:absolute}.markup-pin:hover,.markup-pin.is-active{background:var(--markup-brand);color:var(--markup-paper)}.markup-pin.is-anchor{anchor-name:--markup-active-anchor}.markup-pin-ghost{background:var(--markup-brand);color:var(--markup-paper);cursor:default;pointer-events:none;animation:1.2s ease-in-out infinite markup-ghost-pulse}.markup-pin-dot{background:currentColor;border-radius:50%;width:6px;height:6px;display:inline-block}.markup-pin-count{background:var(--markup-brand);min-width:16px;height:16px;color:var(--markup-paper);font-family:var(--markup-font-mono);text-align:center;box-shadow:0 0 0 2px var(--markup-paper);border-radius:999px;padding:0 4px;font-size:9px;font-weight:600;line-height:16px;position:absolute;top:-4px;left:50%;transform:translate(-50%,-50%)}@keyframes markup-ghost-pulse{0%,to{box-shadow:0 0 0 2px var(--markup-paper), 0 0 0 0 #e35d2a66}50%{box-shadow:0 0 0 2px var(--markup-paper), 0 0 0 10px #e35d2a00}}.markup-placement-overlay{background:var(--markup-overlay-tint);cursor:crosshair;pointer-events:auto;z-index:1;animation:.18s ease-out markup-overlay-in;position:fixed;inset:0}.markup-placement-cursor-help{background:var(--markup-ink);color:var(--markup-paper);letter-spacing:-.01em;box-shadow:var(--markup-shadow);pointer-events:none;border-radius:999px;padding:10px 16px;font-size:12px;font-weight:500;animation:.22s ease-out 60ms backwards markup-help-in;position:fixed;top:24px;left:50%;transform:translate(-50%)}@keyframes markup-overlay-in{0%{opacity:0}to{opacity:1}}@keyframes markup-help-in{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}.markup-popover{width:320px;max-width:calc(100vw - 24px);height:auto;max-height:calc(100dvh - 24px);inset:auto;left:var(--markup-pop-x,0);top:var(--markup-pop-y,0);background:var(--markup-paper);color:var(--markup-ink);border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius);box-shadow:var(--markup-shadow);pointer-events:auto;flex-direction:column;gap:0;margin:0;padding:0;animation:.16s ease-out markup-popover-in;display:flex;position:fixed;overflow:hidden}@supports (anchor-name:--x){.markup-popover{position-anchor:--markup-active-anchor;left:calc(anchor(right) + 8px);top:calc(anchor(top) - 9px);position-try-fallbacks:flip-block, flip-inline, flip-block flip-inline;position-try-order:most-block-size}.markup-popover.is-floating{left:var(--markup-pop-x,0);top:var(--markup-pop-y,0);position-try-fallbacks:none}}.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)}@keyframes markup-menu-in-up{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.markup-comment{position:relative}.markup-reactions{flex-wrap:wrap;align-items:center;gap:4px;margin-top:2px;display:flex}.markup-reaction-chip{border:1px solid var(--markup-border);height:22px;color:var(--markup-ink);font:inherit;cursor:pointer;background:0 0;border-radius:999px;align-items:center;gap:4px;padding:0 7px 0 6px;font-size:11px;line-height:1;transition:background .12s,border-color .12s;display:inline-flex}.markup-reaction-chip:hover:not(:disabled){background:color-mix(in srgb, var(--markup-ink) 5%, transparent)}.markup-reaction-chip.is-mine{border-color:color-mix(in srgb, var(--markup-brand) 45%, transparent);background:color-mix(in srgb, var(--markup-brand) 10%, transparent)}.markup-reaction-chip.is-mine:hover:not(:disabled){background:color-mix(in srgb, var(--markup-brand) 16%, transparent)}.markup-reaction-chip:disabled{cursor:default;opacity:.6}.markup-reaction-emoji{font-size:13px;line-height:1}.markup-reaction-count{font-family:var(--markup-font-mono);letter-spacing:.04em;color:var(--markup-muted);font-size:10px}.markup-reaction-chip.is-mine .markup-reaction-count{color:var(--markup-brand)}.markup-reaction-picker-wrap{opacity:0;flex:none;transition:opacity .12s;display:inline-flex;position:relative}.markup-comment:hover .markup-reaction-picker-wrap,.markup-comment:focus-within .markup-reaction-picker-wrap,.markup-reaction-picker-wrap.is-open{opacity:1}.markup-reaction-add{border:1px dashed var(--markup-border-strong);width:22px;height:22px;color:var(--markup-muted);font:inherit;cursor:pointer;background:0 0;border-radius:999px;justify-content:center;align-items:center;font-size:13px;line-height:1;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.markup-reaction-add:hover,.markup-reaction-add.is-open{background:color-mix(in srgb, var(--markup-ink) 5%, transparent);color:var(--markup-ink);border-style:solid}.markup-reaction-picker{z-index:1;border:1px solid var(--markup-border-strong);background:var(--markup-paper);border-radius:8px;gap:2px;padding:4px;animation:.12s markup-menu-in;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 1px 2px #1a16140f,0 8px 28px #1a16141a}.markup-reaction-picker-wrap.is-up .markup-reaction-picker{animation-name:markup-menu-in-up;top:auto;bottom:calc(100% + 6px)}.markup-reaction-picker-item{cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;font-size:16px;line-height:1;transition:background .12s;display:inline-flex}.markup-reaction-picker-item:hover{background:color-mix(in srgb, var(--markup-ink) 8%, transparent)}.markup-reaction-picker-item.is-mine{background:color-mix(in srgb, var(--markup-brand) 14%, transparent)}.markup-comment-edit-form{flex-direction:column;gap:6px;display:flex}.markup-comment-edit-form .markup-textarea{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);background:var(--markup-paper);width:100%;color:var(--markup-ink);resize:vertical;font:inherit;outline:none;padding:8px 10px;font-size:13px;line-height:1.5}.markup-comment-edit-form .markup-textarea:focus-visible{border-color:var(--markup-brand);box-shadow:0 0 0 3px #e35d2a2e}.markup-comment-edit-actions{justify-content:flex-end;gap:6px;display:flex}.markup-composer{flex-direction:column;display:flex;position:relative}.markup-composer-input{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);background:var(--markup-paper);width:100%;min-height:36px;max-height:96px;color:var(--markup-ink);resize:none;font-family:var(--markup-font);outline:none;padding:8px 10px;font-size:13px;line-height:1.5;transition:border-color .12s,box-shadow .12s,border-bottom-left-radius .15s,border-bottom-right-radius .15s}.markup-composer-input:focus-visible{border-color:var(--markup-brand);box-shadow:0 0 0 3px #e35d2a2e}.markup-composer-input:disabled{opacity:.6}.markup-composer-input::placeholder{color:var(--markup-muted)}.markup-composer.is-filled .markup-composer-input{border-bottom-right-radius:0;border-bottom-left-radius:0}.markup-composer-footer-wrap{grid-template-rows:0fr;transition:grid-template-rows .15s;display:grid}.markup-composer.is-filled .markup-composer-footer-wrap{grid-template-rows:1fr}.markup-composer-footer{border:1px solid var(--markup-border-strong);border-radius:0 0 var(--markup-radius-sm) var(--markup-radius-sm);opacity:0;border-top:none;justify-content:space-between;align-items:center;gap:8px;padding:2px 2px 2px 10px;transition:opacity .1s;display:flex;overflow:hidden}.markup-composer.is-filled .markup-composer-footer{opacity:1;transition-delay:60ms}.markup-composer-hint{font-family:var(--markup-font-mono);letter-spacing:.06em;color:var(--markup-muted);font-size:10px}.markup-composer-error{color:var(--markup-brand)}.markup-composer-actions{align-items:center;gap:6px;display:flex}.markup-composer-actions-empty{transition:opacity .12s;position:absolute;top:3px;right:3px}.markup-composer.is-filled .markup-composer-actions-empty{opacity:0;pointer-events:none}.markup-author-prompt{flex-direction:column;gap:10px;padding:12px;display:flex}.markup-author-status{color:var(--markup-muted);margin:0;font-size:12px}.markup-input{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);background:var(--markup-paper);width:100%;height:36px;color:var(--markup-ink);outline:none;padding:0 10px;font-size:14px;transition:border-color .12s,box-shadow .12s}.markup-input:focus-visible{border-color:var(--markup-brand);box-shadow:0 0 0 3px #e35d2a2e}.markup-btn{border-radius:var(--markup-radius-sm);height:30px;color:var(--markup-ink);cursor:pointer;letter-spacing:-.01em;white-space:nowrap;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;gap:6px;padding:0 8px;font-size:12px;font-weight:500;transition:background .12s,border-color .12s,color .12s,opacity .12s;display:inline-flex}.markup-btn:disabled{opacity:.5;cursor:not-allowed}.markup-btn-primary{background:var(--markup-ink);color:var(--markup-paper)}.markup-btn-primary:hover:not(:disabled){background:var(--markup-brand)}.markup-btn-ghost{color:var(--markup-muted)}.markup-btn-ghost:hover:not(:disabled){background:var(--markup-border);color:var(--markup-ink)}.markup-screenshot-row{border-top:1px solid var(--markup-border);margin-top:8px;padding-top:8px}.markup-screenshot-status{color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.06em;align-items:center;gap:5px;font-size:10px;display:flex}.markup-screenshot-toggle{cursor:pointer;color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.06em;align-items:center;gap:5px;font-size:10px;transition:color .12s;display:flex}.markup-screenshot-toggle:hover{color:var(--markup-ink)}.markup-screenshot-checkbox{width:12px;height:12px;accent-color:var(--markup-brand);cursor:pointer;margin:0}.markup-screenshot-thumb{border:1px solid var(--markup-border-strong);object-fit:cover;border-radius:3px;flex-shrink:0;width:auto;height:25px;margin:-5px 0 -5px auto;display:block}.markup-comment-screenshot{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);cursor:pointer;background:0 0;margin-top:8px;padding:0;transition:border-color .12s,opacity .12s;display:block;overflow:hidden}.markup-comment-screenshot:hover{border-color:var(--markup-brand);opacity:.9}.markup-comment-screenshot img{object-fit:cover;object-position:top;width:100%;height:auto;max-height:120px;display:block}.markup-lightbox{background:#1a1614e0;border:none;width:100%;max-width:100%;height:100%;max-height:100%;margin:0;padding:24px;position:fixed;inset:0}.markup-lightbox[open]{justify-content:center;align-items:center;display:flex}.markup-lightbox::backdrop{display:none}.markup-lightbox-img{border-radius:var(--markup-radius);object-fit:contain;max-width:100%;max-height:100%;box-shadow:var(--markup-shadow);animation:.16s ease-out markup-lightbox-in}.markup-lightbox-close{color:#fdfcfa;background:#1a161499;position:absolute;top:16px;right:16px}.markup-lightbox-close:hover{color:#fdfcfa;background:#1a1614d9}@keyframes markup-lightbox-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion:reduce){.markup-fab,.markup-pin,.markup-icon-btn,.markup-btn,.markup-popover,.markup-pin-ghost,.markup-placement-overlay,.markup-placement-cursor-help,.markup-lightbox-img{transition:none;animation:none}}", F, I, de, fe, L = 0, pe = [], R = t, me = R.__b, he = R.__r, ge = R.diffed, _e = R.__c, ve = R.unmount, ye = R.__;
252
252
  function be(e, t) {
253
- R.__h && R.__h(L, e, fe || t), fe = 0;
254
- var n = L.__H ||= {
253
+ R.__h && R.__h(I, e, L || t), L = 0;
254
+ var n = I.__H ||= {
255
255
  __: [],
256
256
  __h: []
257
257
  };
258
258
  return e >= n.__.length && n.__.push({}), n.__[e];
259
259
  }
260
260
  function z(e) {
261
- return fe = 1, xe(ke, e);
261
+ return L = 1, xe(ke, e);
262
262
  }
263
263
  function xe(e, t, n) {
264
- var r = be(I++, 2);
264
+ var r = be(F++, 2);
265
265
  if (r.t = e, !r.__c && (r.__ = [n ? n(t) : ke(void 0, t), function(e) {
266
266
  var t = r.__N ? r.__N[0] : r.__[0], n = r.t(t, e);
267
267
  t !== n && (r.__N = [n, r.__[1]], r.__c.setState({}));
268
- }], r.__c = L, !L.__f)) {
268
+ }], r.__c = I, !I.__f)) {
269
269
  var i = function(e, t, n) {
270
270
  if (!r.__c.__H) return !0;
271
271
  var i = r.__c.__H.__.filter(function(e) {
@@ -282,33 +282,33 @@ function xe(e, t, n) {
282
282
  }
283
283
  }), a && a.call(this, e, t, n) || o;
284
284
  };
285
- L.__f = !0;
286
- var a = L.shouldComponentUpdate, o = L.componentWillUpdate;
287
- L.componentWillUpdate = function(e, t, n) {
285
+ I.__f = !0;
286
+ var a = I.shouldComponentUpdate, o = I.componentWillUpdate;
287
+ I.componentWillUpdate = function(e, t, n) {
288
288
  if (this.__e) {
289
289
  var r = a;
290
290
  a = void 0, i(e, t, n), a = r;
291
291
  }
292
292
  o && o.call(this, e, t, n);
293
- }, L.shouldComponentUpdate = i;
293
+ }, I.shouldComponentUpdate = i;
294
294
  }
295
295
  return r.__N || r.__;
296
296
  }
297
297
  function B(e, t) {
298
- var n = be(I++, 3);
299
- !R.__s && Oe(n.__H, t) && (n.__ = e, n.u = t, L.__H.__h.push(n));
298
+ var n = be(F++, 3);
299
+ !R.__s && Oe(n.__H, t) && (n.__ = e, n.u = t, I.__H.__h.push(n));
300
300
  }
301
301
  function V(e) {
302
- return fe = 5, Se(function() {
302
+ return L = 5, Se(function() {
303
303
  return { current: e };
304
304
  }, []);
305
305
  }
306
306
  function Se(e, t) {
307
- var n = be(I++, 7);
307
+ var n = be(F++, 7);
308
308
  return Oe(n.__H, t) && (n.__ = e(), n.__H = t, n.__h = e), n.__;
309
309
  }
310
310
  function H(e, t) {
311
- return fe = 8, Se(function() {
311
+ return L = 8, Se(function() {
312
312
  return e;
313
313
  }, t);
314
314
  }
@@ -323,21 +323,21 @@ function Ce() {
323
323
  }
324
324
  }
325
325
  R.__b = function(e) {
326
- L = null, me && me(e);
326
+ I = null, me && me(e);
327
327
  }, R.__ = function(e, t) {
328
328
  e && t.__k && t.__k.__m && (e.__m = t.__k.__m), ye && ye(e, t);
329
329
  }, R.__r = function(e) {
330
- he && he(e), I = 0;
331
- var t = (L = e.__c).__H;
332
- t && (ue === L ? (t.__h = [], L.__h = [], t.__.some(function(e) {
330
+ he && he(e), F = 0;
331
+ var t = (I = e.__c).__H;
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 = [], I = 0)), ue = L;
334
+ })) : (t.__h.some(Ee), t.__h.some(De), t.__h = [], F = 0)), de = I;
335
335
  }, R.diffed = function(e) {
336
336
  ge && ge(e);
337
337
  var t = e.__c;
338
- t && t.__H && (t.__H.__h.length && (pe.push(t) !== 1 && de === R.requestAnimationFrame || ((de = R.requestAnimationFrame) || Te)(Ce)), t.__H.__.some(function(e) {
338
+ t && t.__H && (t.__H.__h.length && (pe.push(t) !== 1 && fe === R.requestAnimationFrame || ((fe = R.requestAnimationFrame) || Te)(Ce)), t.__H.__.some(function(e) {
339
339
  e.u && (e.__H = e.u), e.u = void 0;
340
- })), ue = L = null;
340
+ })), de = I = null;
341
341
  }, R.__c = function(e, t) {
342
342
  t.some(function(e) {
343
343
  try {
@@ -369,12 +369,12 @@ function Te(e) {
369
369
  we && (t = requestAnimationFrame(n));
370
370
  }
371
371
  function Ee(e) {
372
- var t = L, n = e.__c;
373
- typeof n == "function" && (e.__c = void 0, n()), L = t;
372
+ var t = I, n = e.__c;
373
+ typeof n == "function" && (e.__c = void 0, n()), I = t;
374
374
  }
375
375
  function De(e) {
376
- var t = L;
377
- e.__c = e.__(), L = t;
376
+ var t = I;
377
+ e.__c = e.__(), I = t;
378
378
  }
379
379
  function Oe(e, t) {
380
380
  return !e || e.length !== t.length || t.some(function(t, n) {
@@ -2858,7 +2858,7 @@ async function Nr(e, t) {
2858
2858
  let i = Math.max(0, window.screenX + (window.outerWidth - 420) / 2), a = Math.max(0, window.screenY + (window.outerHeight - 560) / 2), o = window.open(r, "markup-auth", `width=420,height=560,left=${i},top=${a}`);
2859
2859
  return o ? new Promise((e, t) => {
2860
2860
  function r() {
2861
- window.removeEventListener("message", i), clearInterval(a);
2861
+ window.removeEventListener("message", i), clearInterval(a), clearTimeout(s);
2862
2862
  }
2863
2863
  function i(i) {
2864
2864
  if (i.origin !== n) return;
@@ -2871,7 +2871,9 @@ async function Nr(e, t) {
2871
2871
  }
2872
2872
  let a = window.setInterval(() => {
2873
2873
  o.closed && (r(), t(/* @__PURE__ */ Error("Sign-in cancelled")));
2874
- }, 500);
2874
+ }, 500), s = window.setTimeout(() => {
2875
+ r(), t(/* @__PURE__ */ Error("Sign-in timed out"));
2876
+ }, 3e5);
2875
2877
  window.addEventListener("message", i);
2876
2878
  }) : Promise.reject(/* @__PURE__ */ Error("Popup blocked — allow popups for this site to sign in"));
2877
2879
  }
@@ -3500,29 +3502,35 @@ function ua({ active: e, onToggle: t, onHide: n, position: r = "bottom-right", o
3500
3502
  try {
3501
3503
  n.setPointerCapture(e.pointerId);
3502
3504
  } catch {}
3503
- function _(e) {
3504
- let t = e.clientX - s, n = e.clientY - l;
3505
+ function _(t) {
3506
+ if (t.pointerId !== e.pointerId) return;
3507
+ let n = t.clientX - s, r = t.clientY - l;
3505
3508
  if (!g) {
3506
- if (Math.abs(t) + Math.abs(n) < 4) return;
3509
+ if (Math.abs(n) + Math.abs(r) < 4) return;
3507
3510
  g = !0, d.current = !0, u(!0);
3508
3511
  }
3509
- let r = Math.max(8, window.innerWidth - m - 8), i = Math.max(8, window.innerHeight - h - 8);
3512
+ let i = Math.max(8, window.innerWidth - m - 8), a = Math.max(8, window.innerHeight - h - 8);
3510
3513
  c({
3511
- left: da(f + t, 8, r),
3512
- top: da(p + n, 8, i)
3514
+ left: da(f + n, 8, i),
3515
+ top: da(p + r, 8, a)
3513
3516
  });
3514
3517
  }
3515
3518
  function v(e) {
3516
3519
  try {
3517
3520
  n.releasePointerCapture(e.pointerId);
3518
3521
  } catch {}
3519
- if (n.removeEventListener("pointermove", _), n.removeEventListener("pointerup", v), n.removeEventListener("pointercancel", v), g) {
3520
- let t = e.clientX < window.innerWidth / 2 ? "bottom-left" : "bottom-right";
3521
- t !== r && i?.(t);
3522
+ n.removeEventListener("pointermove", _), n.removeEventListener("pointerup", y), n.removeEventListener("pointercancel", b), c(null), u(!1);
3523
+ }
3524
+ function y(t) {
3525
+ if (t.pointerId === e.pointerId && (v(t), g)) {
3526
+ let e = t.clientX < window.innerWidth / 2 ? "bottom-left" : "bottom-right";
3527
+ e !== r && i?.(e);
3522
3528
  }
3523
- c(null), u(!1);
3524
3529
  }
3525
- n.addEventListener("pointermove", _), n.addEventListener("pointerup", v), n.addEventListener("pointercancel", v);
3530
+ function b(t) {
3531
+ t.pointerId === e.pointerId && (v(t), d.current = !1);
3532
+ }
3533
+ n.addEventListener("pointermove", _), n.addEventListener("pointerup", y), n.addEventListener("pointercancel", b);
3526
3534
  }
3527
3535
  function p(e) {
3528
3536
  if (e.preventDefault(), e.stopPropagation(), d.current) {
@@ -3586,27 +3594,27 @@ function pa(e, t) {
3586
3594
  }
3587
3595
  //#endregion
3588
3596
  //#region src/runtime/ui/author-prompt.tsx
3589
- function ma({ pending: e, connecting: t = !1, onSubmit: n, onCancel: r, onSignIn: i }) {
3590
- let [a, o] = z(""), [s, c] = z(""), l = V(null);
3597
+ function ma({ pending: e, connecting: t = !1, signingIn: n = !1, onSubmit: r, onCancel: i, onSignIn: a }) {
3598
+ let [o, s] = z(""), [c, l] = z(""), u = V(null);
3591
3599
  B(() => {
3592
- l.current?.focus();
3600
+ u.current?.focus();
3593
3601
  }, []);
3594
- function u(r) {
3595
- r?.preventDefault();
3596
- let i = a.trim();
3597
- !i || e || t || n(i, s.trim() || void 0);
3602
+ function d(n) {
3603
+ n?.preventDefault();
3604
+ let i = o.trim();
3605
+ !i || e || t || r(i, c.trim() || void 0);
3598
3606
  }
3599
- let d = e || t;
3607
+ let f = e || t;
3600
3608
  return /* @__PURE__ */ $("form", {
3601
3609
  class: "markup-author-prompt",
3602
- onSubmit: u,
3610
+ onSubmit: d,
3603
3611
  children: [
3604
- i ? /* @__PURE__ */ $(S, { children: [/* @__PURE__ */ $("button", {
3612
+ a ? /* @__PURE__ */ $(S, { children: [/* @__PURE__ */ $("button", {
3605
3613
  type: "button",
3606
3614
  class: "markup-btn markup-btn-primary",
3607
- onClick: i,
3608
- disabled: e,
3609
- children: "Sign in with Markup"
3615
+ onClick: a,
3616
+ disabled: e || n,
3617
+ children: n ? "Signing in…" : "Sign in with Markup"
3610
3618
  }), /* @__PURE__ */ $("p", {
3611
3619
  class: "markup-author-divider",
3612
3620
  children: "or continue as a guest"
@@ -3615,16 +3623,16 @@ function ma({ pending: e, connecting: t = !1, onSubmit: n, onCancel: r, onSignIn
3615
3623
  children: "who's leaving feedback?"
3616
3624
  }),
3617
3625
  /* @__PURE__ */ $("input", {
3618
- ref: l,
3626
+ ref: u,
3619
3627
  class: "markup-input",
3620
3628
  type: "text",
3621
3629
  name: "name",
3622
3630
  placeholder: "Your name",
3623
- value: a,
3631
+ value: o,
3624
3632
  maxLength: 80,
3625
3633
  autoComplete: "name",
3626
- onInput: (e) => o(e.currentTarget.value),
3627
- disabled: d,
3634
+ onInput: (e) => s(e.currentTarget.value),
3635
+ disabled: f,
3628
3636
  "data-1p-ignore": !0
3629
3637
  }),
3630
3638
  /* @__PURE__ */ $("input", {
@@ -3632,11 +3640,11 @@ function ma({ pending: e, connecting: t = !1, onSubmit: n, onCancel: r, onSignIn
3632
3640
  type: "email",
3633
3641
  name: "email",
3634
3642
  placeholder: "Email (optional)",
3635
- value: s,
3643
+ value: c,
3636
3644
  maxLength: 254,
3637
3645
  autoComplete: "email",
3638
- onInput: (e) => c(e.currentTarget.value),
3639
- disabled: d,
3646
+ onInput: (e) => l(e.currentTarget.value),
3647
+ disabled: f,
3640
3648
  "data-1p-ignore": !0
3641
3649
  }),
3642
3650
  t ? /* @__PURE__ */ $("p", {
@@ -3650,13 +3658,13 @@ function ma({ pending: e, connecting: t = !1, onSubmit: n, onCancel: r, onSignIn
3650
3658
  children: [/* @__PURE__ */ $("button", {
3651
3659
  type: "button",
3652
3660
  class: "markup-btn markup-btn-ghost",
3653
- onClick: r,
3661
+ onClick: i,
3654
3662
  disabled: e,
3655
3663
  children: "Cancel"
3656
3664
  }), /* @__PURE__ */ $("button", {
3657
3665
  type: "submit",
3658
3666
  class: "markup-btn markup-btn-primary",
3659
- disabled: !a.trim() || d,
3667
+ disabled: !o.trim() || f,
3660
3668
  children: "Continue"
3661
3669
  })]
3662
3670
  })
@@ -3743,67 +3751,73 @@ function ga({ label: e, placeholder: t = "Leave feedback…", submitLabel: n = "
3743
3751
  }
3744
3752
  //#endregion
3745
3753
  //#region src/runtime/ui/new-thread-popover.tsx
3746
- function _a({ pageX: e, pageY: t, authorName: n, isVerified: r, identityResolving: i, pending: a, error: o, screenshot: s, screenshotCapturing: c, onAuthor: l, onSignIn: u, onSubmit: d, onClose: f }) {
3747
- let p = V(null);
3748
- pa(p, !0);
3749
- let [m, h] = z(!1), [g, _] = z(null), [v, y] = z(null), [b, x] = z(!1);
3754
+ function _a({ pageX: e, pageY: t, authorName: n, isVerified: r, identityResolving: i, signingIn: a, pending: o, error: s, screenshot: c, screenshotCapturing: l, onAuthor: u, onSignIn: d, onSubmit: f, onClose: p }) {
3755
+ let m = V(null);
3756
+ pa(m, !0);
3757
+ let [h, g] = z(!1), [_, v] = z(null), [y, b] = z(null), [x, S] = z(!1);
3750
3758
  B(() => {
3751
- if (!s) return;
3752
- let e = URL.createObjectURL(s);
3753
- return _(e), () => URL.revokeObjectURL(e);
3754
- }, [s]), B(() => {
3755
- let e = p.current;
3759
+ if (!c) {
3760
+ v(null);
3761
+ return;
3762
+ }
3763
+ let e = URL.createObjectURL(c);
3764
+ return v(e), () => URL.revokeObjectURL(e);
3765
+ }, [c]), B(() => {
3766
+ let e = m.current;
3756
3767
  if (!e) return;
3757
3768
  if (typeof e.showPopover == "function" && !e.matches(":popover-open")) try {
3758
3769
  e.showPopover();
3759
3770
  } catch {}
3760
3771
  function t(e) {
3761
- e.newState === "closed" && f();
3772
+ e.newState === "closed" && p();
3762
3773
  }
3763
3774
  return e.addEventListener("toggle", t), () => e.removeEventListener("toggle", t);
3764
- }, [f]);
3765
- let S = va(e - window.scrollX + 16, 12, window.innerWidth - 320 - 12), C = va(t - window.scrollY - 16, 12, window.innerHeight - 220), w = s != null, T = c || w;
3766
- function E(e) {
3775
+ }, [p]);
3776
+ let C = va(e - window.scrollX + 16, 12, window.innerWidth - 320 - 12), w = va(t - window.scrollY - 16, 12, window.innerHeight - 220), T = c != null, E = l || T;
3777
+ function D(e) {
3767
3778
  if (e.button !== 0 || e.target?.closest("button, a, input, textarea, select")) return;
3768
- let t = p.current;
3779
+ let t = m.current;
3769
3780
  if (!t) return;
3770
3781
  let n = t.getBoundingClientRect(), r = e.clientX, i = e.clientY, a = n.left, o = n.top, s = n.width, c = n.height, l = e.currentTarget, u = !1;
3771
3782
  try {
3772
3783
  l.setPointerCapture(e.pointerId);
3773
3784
  } catch {}
3774
- function d(e) {
3775
- let t = e.clientX - r, n = e.clientY - i;
3785
+ function d(t) {
3786
+ if (t.pointerId !== e.pointerId) return;
3787
+ let n = t.clientX - r, l = t.clientY - i;
3776
3788
  if (!u) {
3777
- if (Math.abs(t) + Math.abs(n) < 4) return;
3778
- u = !0, x(!0);
3789
+ if (Math.abs(n) + Math.abs(l) < 4) return;
3790
+ u = !0, S(!0);
3779
3791
  }
3780
- let l = Math.max(8, window.innerWidth - s - 8), d = Math.max(8, window.innerHeight - c - 8);
3781
- y({
3782
- left: va(a + t, 8, l),
3783
- top: va(o + n, 8, d)
3792
+ let d = Math.max(8, window.innerWidth - s - 8), f = Math.max(8, window.innerHeight - c - 8);
3793
+ b({
3794
+ left: va(a + n, 8, d),
3795
+ top: va(o + l, 8, f)
3784
3796
  });
3785
3797
  }
3786
- function f(e) {
3787
- try {
3788
- l.releasePointerCapture(e.pointerId);
3789
- } catch {}
3790
- l.removeEventListener("pointermove", d), l.removeEventListener("pointerup", f), l.removeEventListener("pointercancel", f), x(!1);
3798
+ function f(t) {
3799
+ if (t.pointerId === e.pointerId) {
3800
+ try {
3801
+ l.releasePointerCapture(t.pointerId);
3802
+ } catch {}
3803
+ l.removeEventListener("pointermove", d), l.removeEventListener("pointerup", f), l.removeEventListener("pointercancel", f), S(!1);
3804
+ }
3791
3805
  }
3792
3806
  l.addEventListener("pointermove", d), l.addEventListener("pointerup", f), l.addEventListener("pointercancel", f);
3793
3807
  }
3794
3808
  return /* @__PURE__ */ $("div", {
3795
- ref: p,
3796
- class: Q("markup-popover", v && "is-floating", b && "is-dragging"),
3809
+ ref: m,
3810
+ class: Q("markup-popover", y && "is-floating", x && "is-dragging"),
3797
3811
  popover: "auto",
3798
3812
  style: {
3799
- "--markup-pop-x": `${v?.left ?? S}px`,
3800
- "--markup-pop-y": `${v?.top ?? C}px`
3813
+ "--markup-pop-x": `${y?.left ?? C}px`,
3814
+ "--markup-pop-y": `${y?.top ?? w}px`
3801
3815
  },
3802
3816
  role: "dialog",
3803
3817
  "aria-label": "New markup",
3804
3818
  children: [/* @__PURE__ */ $("header", {
3805
3819
  class: "markup-popover-header",
3806
- onPointerDown: E,
3820
+ onPointerDown: D,
3807
3821
  children: [/* @__PURE__ */ $("span", {
3808
3822
  class: "markup-eyebrow",
3809
3823
  children: "new · markup"
@@ -3811,15 +3825,16 @@ function _a({ pageX: e, pageY: t, authorName: n, isVerified: r, identityResolvin
3811
3825
  type: "button",
3812
3826
  class: "markup-icon-btn",
3813
3827
  "aria-label": "Discard pin",
3814
- onClick: f,
3828
+ onClick: p,
3815
3829
  children: /* @__PURE__ */ $(ia, { size: 16 })
3816
3830
  })]
3817
3831
  }), n == null ? /* @__PURE__ */ $(ma, {
3818
- pending: a,
3832
+ pending: o,
3819
3833
  connecting: i,
3820
- onSubmit: l,
3821
- onCancel: f,
3822
- onSignIn: u
3834
+ signingIn: a,
3835
+ onSubmit: u,
3836
+ onCancel: p,
3837
+ onSignIn: d
3823
3838
  }) : /* @__PURE__ */ $("div", {
3824
3839
  class: "markup-popover-body",
3825
3840
  children: [
@@ -3841,13 +3856,13 @@ function _a({ pageX: e, pageY: t, authorName: n, isVerified: r, identityResolvin
3841
3856
  label: "Feedback",
3842
3857
  placeholder: "What's wrong, missing, or worth noting?",
3843
3858
  submitLabel: "Post markup",
3844
- pending: a,
3845
- error: o,
3846
- onSubmit: (e) => d(e, m && w)
3859
+ pending: o,
3860
+ error: s,
3861
+ onSubmit: (e) => f(e, h && T)
3847
3862
  }),
3848
- T ? /* @__PURE__ */ $("div", {
3863
+ E ? /* @__PURE__ */ $("div", {
3849
3864
  class: "markup-screenshot-row",
3850
- children: c ? /* @__PURE__ */ $("span", {
3865
+ children: l ? /* @__PURE__ */ $("span", {
3851
3866
  class: "markup-screenshot-status",
3852
3867
  children: [
3853
3868
  /* @__PURE__ */ $("input", {
@@ -3864,14 +3879,14 @@ function _a({ pageX: e, pageY: t, authorName: n, isVerified: r, identityResolvin
3864
3879
  /* @__PURE__ */ $("input", {
3865
3880
  type: "checkbox",
3866
3881
  class: "markup-screenshot-checkbox",
3867
- checked: m,
3868
- onChange: (e) => h(e.currentTarget.checked)
3882
+ checked: h,
3883
+ onChange: (e) => g(e.currentTarget.checked)
3869
3884
  }),
3870
3885
  /* @__PURE__ */ $(sa, { size: 12 }),
3871
3886
  /* @__PURE__ */ $("span", { children: "Attach screenshot" }),
3872
- g && m ? /* @__PURE__ */ $("img", {
3887
+ _ && h ? /* @__PURE__ */ $("img", {
3873
3888
  class: "markup-screenshot-thumb",
3874
- src: g,
3889
+ src: _,
3875
3890
  alt: "Screenshot preview"
3876
3891
  }) : null
3877
3892
  ]
@@ -3959,95 +3974,98 @@ var Sa = [
3959
3974
  "😄",
3960
3975
  "❓"
3961
3976
  ];
3962
- function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, identityResolving: i, canDelete: a, pending: o, error: s, hidden: c = !1, onAuthor: l, onSignIn: u, onClose: d, onReply: f, onEditComment: p, onDeleteComment: m, onToggleReaction: h, onResolve: g, onDelete: _ }) {
3963
- let v = V(null), y = V(null), b = V(null), x = V(null), S = V(null), [C, w] = z(!1), [T, E] = z(!1), [D, O] = z(null), [ee, k] = z(""), [A, j] = z(null), [M, te] = z("down"), [N, ne] = z(null), [P, F] = z(null), [re, ie] = z("down"), ae = V(null), [oe, se] = z(null), [ce, le] = z(!1);
3964
- pa(v, !0);
3965
- let I = e.resolvedAt != null, L = Se(() => e.comments.filter((e) => !e.deleted), [e.comments]);
3966
- function ue(e, t) {
3967
- O(e), k(t);
3977
+ function Ca({ 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 }) {
3978
+ let y = V(null), b = V(null), x = V(null), S = V(null), C = V(null), [w, T] = z(!1), [E, D] = z(!1), [O, ee] = z(null), [k, A] = z(""), [j, M] = z(null), [te, ne] = z("down"), [N, re] = z(null), [ie, P] = z(null), [ae, oe] = z("down"), se = V(null), [ce, le] = z(null), [ue, F] = z(!1);
3979
+ pa(y, !0);
3980
+ let I = e.resolvedAt != null, de = Se(() => e.comments.filter((e) => !e.deleted), [e.comments]);
3981
+ function fe(e, t) {
3982
+ ee(e), A(t);
3968
3983
  }
3969
- function de() {
3970
- O(null), k("");
3984
+ function L() {
3985
+ ee(null), A("");
3971
3986
  }
3972
3987
  B(() => {
3973
- if (!D) return;
3974
- let t = e.comments.find((e) => e._id === D);
3975
- (!t || t.deleted) && de();
3976
- }, [e.comments, D]);
3977
- let fe = V(!0);
3988
+ if (!O) return;
3989
+ let t = e.comments.find((e) => e._id === O);
3990
+ (!t || t.deleted) && L();
3991
+ }, [e.comments, O]);
3992
+ let pe = V(!0);
3978
3993
  B(() => {
3979
- let e = x.current;
3994
+ let e = S.current;
3980
3995
  if (e) {
3981
- if (fe.current) {
3982
- fe.current = !1, e.scrollTop = e.scrollHeight;
3996
+ if (pe.current) {
3997
+ pe.current = !1, e.scrollTop = e.scrollHeight;
3983
3998
  return;
3984
3999
  }
3985
4000
  e.scrollHeight - e.scrollTop - e.clientHeight < 80 && (e.scrollTop = e.scrollHeight);
3986
4001
  }
3987
- }, [L.length]), B(() => {
3988
- if (!C) {
3989
- E(!1);
4002
+ }, [de.length]), B(() => {
4003
+ if (!w) {
4004
+ D(!1);
3990
4005
  return;
3991
4006
  }
3992
4007
  function e(e) {
3993
- y.current && !e.composedPath().includes(y.current) && w(!1);
4008
+ b.current && !e.composedPath().includes(b.current) && T(!1);
3994
4009
  }
3995
4010
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
3996
- }, [C]), B(() => {
3997
- if (!A) {
3998
- ne(null);
4011
+ }, [w]), B(() => {
4012
+ if (!j) {
4013
+ re(null);
3999
4014
  return;
4000
4015
  }
4001
4016
  function e(e) {
4002
- b.current && !e.composedPath().includes(b.current) && j(null);
4017
+ x.current && !e.composedPath().includes(x.current) && M(null);
4003
4018
  }
4004
4019
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
4005
- }, [A]), B(() => {
4006
- if (!P) return;
4020
+ }, [j]), B(() => {
4021
+ if (!ie) return;
4007
4022
  function e(e) {
4008
- ae.current && !e.composedPath().includes(ae.current) && F(null);
4023
+ se.current && !e.composedPath().includes(se.current) && P(null);
4009
4024
  }
4010
4025
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
4011
- }, [P]), B(() => {
4012
- let e = v.current;
4026
+ }, [ie]), B(() => {
4027
+ let e = y.current;
4013
4028
  if (!e) return;
4014
4029
  if (typeof e.showPopover == "function" && !e.matches(":popover-open")) try {
4015
4030
  e.showPopover();
4016
4031
  } catch {}
4017
4032
  function t(e) {
4018
- e.newState === "closed" && d();
4033
+ e.newState === "closed" && f();
4019
4034
  }
4020
4035
  return e.addEventListener("toggle", t), () => e.removeEventListener("toggle", t);
4021
- }, [d]);
4022
- function pe(e) {
4036
+ }, [f]);
4037
+ function R(e) {
4023
4038
  if (e.button !== 0 || e.target?.closest("button, a, input, textarea, select")) return;
4024
- let t = v.current;
4039
+ let t = y.current;
4025
4040
  if (!t) return;
4026
4041
  let n = t.getBoundingClientRect(), r = e.clientX, i = e.clientY, a = n.left, o = n.top, s = n.width, c = n.height, l = e.currentTarget, u = !1;
4027
4042
  try {
4028
4043
  l.setPointerCapture(e.pointerId);
4029
4044
  } catch {}
4030
- function d(e) {
4031
- let t = e.clientX - r, n = e.clientY - i;
4045
+ function d(t) {
4046
+ if (t.pointerId !== e.pointerId) return;
4047
+ let n = t.clientX - r, l = t.clientY - i;
4032
4048
  if (!u) {
4033
- if (Math.abs(t) + Math.abs(n) < 4) return;
4034
- u = !0, le(!0);
4049
+ if (Math.abs(n) + Math.abs(l) < 4) return;
4050
+ u = !0, F(!0);
4035
4051
  }
4036
- let l = Math.max(8, window.innerWidth - s - 8), d = Math.max(8, window.innerHeight - c - 8);
4037
- se({
4038
- left: Da(a + t, 8, l),
4039
- top: Da(o + n, 8, d)
4052
+ let d = Math.max(8, window.innerWidth - s - 8), f = Math.max(8, window.innerHeight - c - 8);
4053
+ le({
4054
+ left: Da(a + n, 8, d),
4055
+ top: Da(o + l, 8, f)
4040
4056
  });
4041
4057
  }
4042
- function f(e) {
4043
- try {
4044
- l.releasePointerCapture(e.pointerId);
4045
- } catch {}
4046
- l.removeEventListener("pointermove", d), l.removeEventListener("pointerup", f), l.removeEventListener("pointercancel", f), le(!1);
4058
+ function f(t) {
4059
+ if (t.pointerId === e.pointerId) {
4060
+ try {
4061
+ l.releasePointerCapture(t.pointerId);
4062
+ } catch {}
4063
+ l.removeEventListener("pointermove", d), l.removeEventListener("pointerup", f), l.removeEventListener("pointercancel", f), F(!1);
4064
+ }
4047
4065
  }
4048
4066
  l.addEventListener("pointermove", d), l.addEventListener("pointerup", f), l.addEventListener("pointercancel", f);
4049
4067
  }
4050
- let R = Se(() => {
4068
+ let me = Se(() => {
4051
4069
  let t = Tr({
4052
4070
  anchorX: e.anchorX,
4053
4071
  anchorY: e.anchorY,
@@ -4063,59 +4081,59 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4063
4081
  e.anchorSelector
4064
4082
  ]);
4065
4083
  return /* @__PURE__ */ $("div", {
4066
- ref: v,
4084
+ ref: y,
4067
4085
  id: "markup-thread-popover",
4068
- class: Q("markup-popover", oe && "is-floating", ce && "is-dragging", c && "is-hud-hidden"),
4086
+ class: Q("markup-popover", ce && "is-floating", ue && "is-dragging", l && "is-hud-hidden"),
4069
4087
  popover: "auto",
4070
4088
  style: {
4071
- "--markup-pop-x": `${oe?.left ?? R.left}px`,
4072
- "--markup-pop-y": `${oe?.top ?? R.top}px`
4089
+ "--markup-pop-x": `${ce?.left ?? me.left}px`,
4090
+ "--markup-pop-y": `${ce?.top ?? me.top}px`
4073
4091
  },
4074
4092
  role: "dialog",
4075
4093
  "aria-label": "Markup thread",
4076
- "aria-hidden": c || void 0,
4094
+ "aria-hidden": l || void 0,
4077
4095
  children: [
4078
4096
  /* @__PURE__ */ $("header", {
4079
4097
  class: "markup-popover-header",
4080
- onPointerDown: pe,
4098
+ onPointerDown: R,
4081
4099
  children: [/* @__PURE__ */ $("span", {
4082
4100
  class: "markup-eyebrow",
4083
4101
  children: [
4084
4102
  "thread · ",
4085
- L.length,
4103
+ de.length,
4086
4104
  " ",
4087
- L.length === 1 ? "comment" : "comments"
4105
+ de.length === 1 ? "comment" : "comments"
4088
4106
  ]
4089
4107
  }), /* @__PURE__ */ $("div", {
4090
4108
  class: "markup-popover-header-actions",
4091
4109
  children: [
4092
4110
  /* @__PURE__ */ $("div", {
4093
4111
  class: "markup-thread-menu",
4094
- ref: y,
4112
+ ref: b,
4095
4113
  children: [/* @__PURE__ */ $("button", {
4096
4114
  type: "button",
4097
- class: Q("markup-icon-btn", C && "is-open"),
4115
+ class: Q("markup-icon-btn", w && "is-open"),
4098
4116
  title: "More options",
4099
- onClick: () => w((e) => !e),
4117
+ onClick: () => T((e) => !e),
4100
4118
  children: /* @__PURE__ */ $(aa, { size: 16 })
4101
- }), C ? /* @__PURE__ */ $("div", {
4119
+ }), w ? /* @__PURE__ */ $("div", {
4102
4120
  class: "markup-thread-menu-list",
4103
4121
  children: [/* @__PURE__ */ $("button", {
4104
4122
  type: "button",
4105
4123
  class: "markup-thread-menu-item",
4106
4124
  onClick: () => {
4107
4125
  let t = new URL(e.url);
4108
- t.hash = `markup-thread=${e._id}`, navigator.clipboard.writeText(t.toString()).catch(() => {}), w(!1);
4126
+ t.hash = `markup-thread=${e._id}`, navigator.clipboard.writeText(t.toString()).catch(() => {}), T(!1);
4109
4127
  },
4110
4128
  children: "Copy link"
4111
- }), a ? /* @__PURE__ */ $("button", {
4129
+ }), o ? /* @__PURE__ */ $("button", {
4112
4130
  type: "button",
4113
- class: Q("markup-thread-menu-item", T && "is-danger"),
4114
- disabled: o,
4131
+ class: Q("markup-thread-menu-item", E && "is-danger"),
4132
+ disabled: s,
4115
4133
  onClick: () => {
4116
- T ? (w(!1), _()) : E(!0);
4134
+ E ? (T(!1), v()) : D(!0);
4117
4135
  },
4118
- children: T ? "Confirm delete" : "Delete thread…"
4136
+ children: E ? "Confirm delete" : "Delete thread…"
4119
4137
  }) : null]
4120
4138
  }) : null]
4121
4139
  }),
@@ -4123,25 +4141,25 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4123
4141
  type: "button",
4124
4142
  class: "markup-icon-btn",
4125
4143
  title: "Mark as resolved",
4126
- disabled: o,
4127
- onClick: g,
4144
+ disabled: s,
4145
+ onClick: _,
4128
4146
  children: /* @__PURE__ */ $(oa, { size: 16 })
4129
4147
  }) : null,
4130
4148
  /* @__PURE__ */ $("button", {
4131
4149
  type: "button",
4132
4150
  class: "markup-icon-btn",
4133
4151
  title: "Close thread",
4134
- onClick: d,
4152
+ onClick: f,
4135
4153
  children: /* @__PURE__ */ $(ia, { size: 16 })
4136
4154
  })
4137
4155
  ]
4138
4156
  })]
4139
4157
  }),
4140
4158
  /* @__PURE__ */ $("ol", {
4141
- ref: x,
4159
+ ref: S,
4142
4160
  class: "markup-comments",
4143
- children: L.map((t, r) => {
4144
- let i = !t.fromDashboard && n != null && t.authorClientId === n, a = r === 0, s = i && !I && !t.deleted, c = i && !I && !t.deleted && !a, l = D === t._id, u = (s || c) && !l && !t.deleted, d = A === t._id, f = N === t._id;
4161
+ children: de.map((t, r) => {
4162
+ let i = !t.fromDashboard && n != null && t.authorClientId === n, a = r === 0, o = i && !I && !t.deleted, c = i && !I && !t.deleted && !a, l = O === t._id, u = (o || c) && !l && !t.deleted, d = j === t._id, f = N === t._id;
4145
4163
  return /* @__PURE__ */ $("li", {
4146
4164
  class: Q("markup-comment", t.fromDashboard && "is-team"),
4147
4165
  children: [
@@ -4166,54 +4184,54 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4166
4184
  class: "markup-thread-actions",
4167
4185
  children: [!I && !l ? /* @__PURE__ */ $(wa, {
4168
4186
  comment: t,
4169
- pickerOpen: P === t._id,
4170
- pickerDirection: re,
4187
+ pickerOpen: ie === t._id,
4188
+ pickerDirection: ae,
4171
4189
  pickerRef: (e) => {
4172
- P === t._id && (ae.current = e);
4190
+ ie === t._id && (se.current = e);
4173
4191
  },
4174
4192
  onPickerClick: (e) => {
4175
- if (P === t._id) {
4176
- F(null);
4193
+ if (ie === t._id) {
4194
+ P(null);
4177
4195
  return;
4178
4196
  }
4179
- let n = e.currentTarget.getBoundingClientRect(), r = x.current?.getBoundingClientRect();
4180
- ie((r ? r.bottom - n.bottom : Infinity) < 44 ? "up" : "down"), F(t._id);
4197
+ let n = e.currentTarget.getBoundingClientRect(), r = S.current?.getBoundingClientRect();
4198
+ oe((r ? r.bottom - n.bottom : Infinity) < 44 ? "up" : "down"), P(t._id);
4181
4199
  },
4182
4200
  onPickerSelect: (e) => {
4183
- F(null), h(t._id, e);
4201
+ P(null), g(t._id, e);
4184
4202
  }
4185
4203
  }) : null, u ? /* @__PURE__ */ $("div", {
4186
- class: Q("markup-thread-menu markup-comment-menu", d && "is-open", d && M === "up" && "is-up"),
4204
+ class: Q("markup-thread-menu markup-comment-menu", d && "is-open", d && te === "up" && "is-up"),
4187
4205
  ref: (e) => {
4188
- d && (b.current = e);
4206
+ d && (x.current = e);
4189
4207
  },
4190
4208
  children: [/* @__PURE__ */ $("button", {
4191
4209
  type: "button",
4192
4210
  class: Q("markup-icon-btn", d && "is-open"),
4193
4211
  title: "More options",
4194
4212
  onClick: (e) => {
4195
- if (A === t._id) {
4196
- j(null);
4213
+ if (j === t._id) {
4214
+ M(null);
4197
4215
  return;
4198
4216
  }
4199
- let n = e.currentTarget.getBoundingClientRect(), r = x.current?.getBoundingClientRect(), i = (+!!s + +!!c) * 32 + 8 + 6;
4200
- te((r ? r.bottom - n.bottom : Infinity) < i ? "up" : "down"), j(t._id);
4217
+ let n = e.currentTarget.getBoundingClientRect(), r = S.current?.getBoundingClientRect(), i = (+!!o + +!!c) * 32 + 8 + 6;
4218
+ ne((r ? r.bottom - n.bottom : Infinity) < i ? "up" : "down"), M(t._id);
4201
4219
  },
4202
4220
  children: /* @__PURE__ */ $(aa, { size: 16 })
4203
4221
  }), d ? /* @__PURE__ */ $("div", {
4204
4222
  class: "markup-thread-menu-list",
4205
- children: [s ? /* @__PURE__ */ $("button", {
4223
+ children: [o ? /* @__PURE__ */ $("button", {
4206
4224
  type: "button",
4207
4225
  class: "markup-thread-menu-item",
4208
4226
  onClick: () => {
4209
- j(null), ue(t._id, t.body);
4227
+ M(null), fe(t._id, t.body);
4210
4228
  },
4211
4229
  children: "Edit"
4212
4230
  }) : null, c ? /* @__PURE__ */ $("button", {
4213
4231
  type: "button",
4214
4232
  class: Q("markup-thread-menu-item", f && "is-danger"),
4215
4233
  onClick: () => {
4216
- f ? (j(null), m(t._id)) : ne(t._id);
4234
+ f ? (M(null), h(t._id)) : re(t._id);
4217
4235
  },
4218
4236
  children: f ? "Confirm delete" : "Delete…"
4219
4237
  }) : null]
@@ -4226,34 +4244,34 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4226
4244
  class: "markup-comment-edit-form",
4227
4245
  onSubmit: async (e) => {
4228
4246
  e.preventDefault();
4229
- let n = ee.trim();
4247
+ let n = k.trim();
4230
4248
  if (!n || n === t.body) {
4231
- de();
4249
+ L();
4232
4250
  return;
4233
4251
  }
4234
4252
  try {
4235
- await p(t._id, n), de();
4253
+ await m(t._id, n), L();
4236
4254
  } catch {}
4237
4255
  },
4238
4256
  children: [/* @__PURE__ */ $("textarea", {
4239
4257
  class: "markup-textarea",
4240
- value: ee,
4241
- onInput: (e) => k(e.currentTarget.value),
4258
+ value: k,
4259
+ onInput: (e) => A(e.currentTarget.value),
4242
4260
  rows: 3,
4243
4261
  autoFocus: !0,
4244
- disabled: o
4262
+ disabled: s
4245
4263
  }), /* @__PURE__ */ $("div", {
4246
4264
  class: "markup-comment-edit-actions",
4247
4265
  children: [/* @__PURE__ */ $("button", {
4248
4266
  type: "button",
4249
4267
  class: "markup-btn markup-btn-ghost",
4250
- onClick: de,
4251
- disabled: o,
4268
+ onClick: L,
4269
+ disabled: s,
4252
4270
  children: "Cancel"
4253
4271
  }), /* @__PURE__ */ $("button", {
4254
4272
  type: "submit",
4255
4273
  class: "markup-btn markup-btn-primary",
4256
- disabled: o || ee.trim().length === 0,
4274
+ disabled: s || k.trim().length === 0,
4257
4275
  children: "Save"
4258
4276
  })]
4259
4277
  })]
@@ -4269,12 +4287,12 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4269
4287
  !l && t.reactions.length > 0 ? /* @__PURE__ */ $(Ta, {
4270
4288
  comment: t,
4271
4289
  isResolved: I,
4272
- onToggle: (e) => h(t._id, e)
4290
+ onToggle: (e) => g(t._id, e)
4273
4291
  }) : null,
4274
4292
  r === 0 && e.screenshotUrl ? /* @__PURE__ */ $("button", {
4275
4293
  type: "button",
4276
4294
  class: "markup-comment-screenshot",
4277
- onClick: () => S.current?.showModal(),
4295
+ onClick: () => C.current?.showModal(),
4278
4296
  children: /* @__PURE__ */ $("img", {
4279
4297
  src: e.screenshotUrl,
4280
4298
  alt: "Screenshot"
@@ -4285,15 +4303,15 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4285
4303
  })
4286
4304
  }),
4287
4305
  e.screenshotUrl ? /* @__PURE__ */ $("dialog", {
4288
- ref: S,
4306
+ ref: C,
4289
4307
  class: "markup-lightbox",
4290
- onClick: () => S.current?.close(),
4308
+ onClick: () => C.current?.close(),
4291
4309
  children: [/* @__PURE__ */ $("button", {
4292
4310
  type: "button",
4293
4311
  class: "markup-lightbox-close markup-icon-btn",
4294
4312
  "aria-label": "Close screenshot",
4295
4313
  onClick: (e) => {
4296
- e.stopPropagation(), S.current?.close();
4314
+ e.stopPropagation(), C.current?.close();
4297
4315
  },
4298
4316
  children: /* @__PURE__ */ $(ia, { size: 16 })
4299
4317
  }), /* @__PURE__ */ $("img", {
@@ -4304,11 +4322,12 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4304
4322
  })]
4305
4323
  }) : null,
4306
4324
  t == null ? /* @__PURE__ */ $(ma, {
4307
- pending: o,
4325
+ pending: s,
4308
4326
  connecting: i,
4309
- onSubmit: l,
4310
- onCancel: d,
4311
- onSignIn: u
4327
+ signingIn: a,
4328
+ onSubmit: u,
4329
+ onCancel: f,
4330
+ onSignIn: d
4312
4331
  }) : /* @__PURE__ */ $("div", {
4313
4332
  class: "markup-popover-body",
4314
4333
  children: [/* @__PURE__ */ $("p", {
@@ -4329,9 +4348,9 @@ function Ca({ thread: e, authorName: t, currentClientId: n, isVerified: r, ident
4329
4348
  placeholder: "Write a reply…",
4330
4349
  submitLabel: "Reply",
4331
4350
  initialFocus: !1,
4332
- pending: o,
4333
- error: s,
4334
- onSubmit: f
4351
+ pending: s,
4352
+ error: c,
4353
+ onSubmit: p
4335
4354
  })]
4336
4355
  })
4337
4356
  ]
@@ -4503,17 +4522,16 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4503
4522
  e = !0, t && clearTimeout(t);
4504
4523
  };
4505
4524
  }, [m]);
4506
- let j = V(null);
4525
+ let [j, M] = z(null);
4507
4526
  B(() => {
4508
4527
  let t = new rr(e.replace(/\.convex\.site(\/.*)?$/, ".convex.cloud"));
4509
- return j.current = t, () => {
4510
- t.close(), j.current = null;
4528
+ return M(t), () => {
4529
+ t.close(), M((e) => e === t ? null : e);
4511
4530
  };
4512
4531
  }, [e]);
4513
- let M = V(!1);
4532
+ let te = V(!1);
4514
4533
  B(() => {
4515
- let e = j.current;
4516
- if (!(!e || !k)) return M.current = !1, b(null), e.onUpdate(qt("widget/queries:subscribeThreadsForRoute"), {
4534
+ if (!(!j || !k)) return b(null), j.onUpdate(qt("widget/queries:subscribeThreadsForRoute"), {
4517
4535
  subscriptionToken: k,
4518
4536
  route: r,
4519
4537
  viewerClientId: s?.clientId ?? void 0
@@ -4521,33 +4539,34 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4521
4539
  e !== void 0 && o(e);
4522
4540
  });
4523
4541
  }, [
4542
+ j,
4524
4543
  k,
4525
4544
  r,
4526
4545
  s?.clientId
4527
4546
  ]), B(() => {
4528
- if (M.current) return;
4547
+ if (te.current) return;
4529
4548
  let e = window.location.hash.match(/^#markup-thread=(.+)$/);
4530
- if (!e) {
4531
- M.current = !0;
4532
- return;
4549
+ if (e) {
4550
+ let t = decodeURIComponent(e[1] ?? "");
4551
+ a.find((e) => e._id === t) && g({
4552
+ kind: "thread",
4553
+ threadId: t
4554
+ }), history.replaceState(null, "", window.location.pathname + window.location.search);
4533
4555
  }
4534
- let t = decodeURIComponent(e[1] ?? "");
4535
- a.find((e) => e._id === t) && (M.current = !0, g({
4536
- kind: "thread",
4537
- threadId: t
4538
- }), history.replaceState(null, "", window.location.pathname + window.location.search));
4556
+ te.current = !0;
4539
4557
  }, [a]), B(() => {
4540
- function e() {
4541
- i(window.location.pathname);
4558
+ let e = !0;
4559
+ function t() {
4560
+ e && i(window.location.pathname);
4542
4561
  }
4543
- window.addEventListener("popstate", e);
4544
- let t = history.pushState, n = history.replaceState;
4545
- return history.pushState = function(...n) {
4546
- t.apply(this, n), e();
4547
- }, history.replaceState = function(...t) {
4548
- n.apply(this, t), e();
4562
+ window.addEventListener("popstate", t);
4563
+ let n = history.pushState, r = history.replaceState;
4564
+ return history.pushState = function(...e) {
4565
+ n.apply(this, e), t();
4566
+ }, history.replaceState = function(...e) {
4567
+ r.apply(this, e), t();
4549
4568
  }, () => {
4550
- window.removeEventListener("popstate", e), history.pushState = t, history.replaceState = n;
4569
+ e = !1, window.removeEventListener("popstate", t);
4551
4570
  };
4552
4571
  }, []), B(() => {
4553
4572
  function e(e) {
@@ -4563,21 +4582,24 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4563
4582
  let e = window.setTimeout(() => w(!1), 5e3);
4564
4583
  return () => window.clearTimeout(e);
4565
4584
  }, [C, x]), B(() => {
4566
- function e() {
4567
- T((e) => e + 1);
4585
+ let e = null;
4586
+ function t() {
4587
+ e ??= requestAnimationFrame(() => {
4588
+ e = null, T((e) => e + 1);
4589
+ });
4568
4590
  }
4569
- window.addEventListener("scroll", e, { passive: !0 }), window.addEventListener("resize", e);
4570
- let t = new ResizeObserver(e);
4571
- return t.observe(document.body), () => {
4572
- window.removeEventListener("scroll", e), window.removeEventListener("resize", e), t.disconnect();
4591
+ window.addEventListener("scroll", t, { passive: !0 }), window.addEventListener("resize", t);
4592
+ let n = new ResizeObserver(t);
4593
+ return n.observe(document.body), () => {
4594
+ window.removeEventListener("scroll", t), window.removeEventListener("resize", t), n.disconnect(), e != null && cancelAnimationFrame(e);
4573
4595
  };
4574
4596
  }, []);
4575
- let te = H(() => {
4597
+ let ne = H(() => {
4576
4598
  b(null), g({ kind: "placing" });
4577
4599
  }, []), N = H(() => {
4578
4600
  g({ kind: "idle" }), b(null);
4579
- }, []), ne = V(0), P = H((e, t, n) => {
4580
- let r = t + window.scrollX, i = n + window.scrollY, a = ++ne.current;
4601
+ }, []), re = V(0), ie = H((e, t, n) => {
4602
+ let r = t + window.scrollX, i = n + window.scrollY, a = ++re.current;
4581
4603
  g({
4582
4604
  kind: "composing-new",
4583
4605
  coords: e,
@@ -4596,7 +4618,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4596
4618
  screenshotCapturing: !1
4597
4619
  });
4598
4620
  });
4599
- }, []), F = H((e, t) => {
4621
+ }, []), P = H((e, t) => {
4600
4622
  if (!s) return;
4601
4623
  let n = {
4602
4624
  ...s,
@@ -4604,15 +4626,23 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4604
4626
  email: t
4605
4627
  };
4606
4628
  Mr(n), c(n);
4607
- }, [s]), re = H(async () => {
4608
- b(null);
4609
- try {
4610
- let n = Aa(await Nr(e, t));
4611
- Mr(n), c(n);
4612
- } catch (e) {
4613
- b(e instanceof Error ? e.message : "Sign-in failed");
4629
+ }, [s]), [ae, oe] = z(!1), se = H(async () => {
4630
+ if (!ae) {
4631
+ b(null), oe(!0);
4632
+ try {
4633
+ let n = Aa(await Nr(e, t));
4634
+ Mr(n), c(n);
4635
+ } catch (e) {
4636
+ b(e instanceof Error ? e.message : "Sign-in failed");
4637
+ } finally {
4638
+ oe(!1);
4639
+ }
4614
4640
  }
4615
- }, [e, t]), ie = H(async (e, t) => {
4641
+ }, [
4642
+ e,
4643
+ t,
4644
+ ae
4645
+ ]), ce = H(async (e, t) => {
4616
4646
  if (!(h.kind !== "composing-new" || !s?.name)) {
4617
4647
  v(!0), b(null);
4618
4648
  try {
@@ -4658,7 +4688,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4658
4688
  s,
4659
4689
  h,
4660
4690
  r
4661
- ]), ae = H(async () => {
4691
+ ]), le = H(async () => {
4662
4692
  if (h.kind !== "thread") return;
4663
4693
  let e = h.threadId;
4664
4694
  v(!0), b(null);
@@ -4669,7 +4699,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4669
4699
  } finally {
4670
4700
  v(!1);
4671
4701
  }
4672
- }, [m, h]), oe = H(async () => {
4702
+ }, [m, h]), ue = H(async () => {
4673
4703
  if (h.kind !== "thread") return;
4674
4704
  let e = h.threadId;
4675
4705
  v(!0), b(null);
@@ -4684,7 +4714,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4684
4714
  m,
4685
4715
  h,
4686
4716
  s?.clientId
4687
- ]), se = H(async (e) => {
4717
+ ]), F = H(async (e) => {
4688
4718
  if (h.kind !== "thread" || !s?.name) return;
4689
4719
  let t = h.threadId;
4690
4720
  v(!0), b(null);
@@ -4704,7 +4734,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4704
4734
  m,
4705
4735
  s,
4706
4736
  h
4707
- ]), ce = H(async (e, t) => {
4737
+ ]), I = H(async (e, t) => {
4708
4738
  if (h.kind !== "thread" || !s) return;
4709
4739
  let n = h.threadId;
4710
4740
  v(!0), b(null);
@@ -4720,7 +4750,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4720
4750
  m,
4721
4751
  s,
4722
4752
  h
4723
- ]), le = H(async (e) => {
4753
+ ]), de = H(async (e) => {
4724
4754
  if (h.kind !== "thread" || !s) return;
4725
4755
  let t = h.threadId;
4726
4756
  v(!0), b(null);
@@ -4736,7 +4766,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4736
4766
  m,
4737
4767
  s,
4738
4768
  h
4739
- ]), I = H(async (e, t) => {
4769
+ ]), fe = H(async (e, t) => {
4740
4770
  if (h.kind !== "thread" || !s) return;
4741
4771
  let n = h.threadId;
4742
4772
  b(null);
@@ -4753,7 +4783,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4753
4783
  m,
4754
4784
  s,
4755
4785
  h
4756
- ]), L = h.kind === "thread" ? a.find((e) => e._id === h.threadId) ?? null : null, ue = O || s?.clientId != null && s.clientId === L?.authorClientId;
4786
+ ]), L = h.kind === "thread" ? a.find((e) => e._id === h.threadId) ?? null : null, pe = O || s?.clientId != null && s.clientId === L?.authorClientId;
4757
4787
  return B(() => {
4758
4788
  h.kind === "thread" && L == null && N();
4759
4789
  }, [
@@ -4790,7 +4820,7 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4790
4820
  }) : null]
4791
4821
  }),
4792
4822
  h.kind === "placing" ? /* @__PURE__ */ $(xa, {
4793
- onPlace: P,
4823
+ onPlace: ie,
4794
4824
  onCancel: N
4795
4825
  }) : null,
4796
4826
  h.kind === "thread" && L ? /* @__PURE__ */ $(Ca, {
@@ -4799,19 +4829,20 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4799
4829
  currentClientId: s?.clientId ?? null,
4800
4830
  isVerified: O,
4801
4831
  identityResolving: ee,
4802
- canDelete: ue,
4832
+ signingIn: ae,
4833
+ canDelete: pe,
4803
4834
  pending: _,
4804
4835
  error: y,
4805
4836
  hidden: x,
4806
- onAuthor: F,
4807
- onSignIn: re,
4837
+ onAuthor: P,
4838
+ onSignIn: se,
4808
4839
  onClose: N,
4809
- onReply: se,
4810
- onEditComment: ce,
4811
- onDeleteComment: le,
4812
- onToggleReaction: I,
4813
- onDelete: ae,
4814
- onResolve: oe
4840
+ onReply: F,
4841
+ onEditComment: I,
4842
+ onDeleteComment: de,
4843
+ onToggleReaction: fe,
4844
+ onDelete: le,
4845
+ onResolve: ue
4815
4846
  }, L._id) : null,
4816
4847
  h.kind === "composing-new" ? /* @__PURE__ */ $(_a, {
4817
4848
  pageX: h.pageX,
@@ -4819,18 +4850,19 @@ function ja({ apiUrl: e, apiKey: t, position: n = "bottom-right" }) {
4819
4850
  authorName: D,
4820
4851
  isVerified: O,
4821
4852
  identityResolving: ee,
4853
+ signingIn: ae,
4822
4854
  pending: _,
4823
4855
  error: y,
4824
4856
  screenshot: h.screenshot,
4825
4857
  screenshotCapturing: h.screenshotCapturing,
4826
- onAuthor: F,
4827
- onSignIn: re,
4828
- onSubmit: ie,
4858
+ onAuthor: P,
4859
+ onSignIn: se,
4860
+ onSubmit: ce,
4829
4861
  onClose: N
4830
4862
  }) : null,
4831
4863
  !x || h.kind === "placing" || h.kind === "composing-new" ? /* @__PURE__ */ $(ua, {
4832
4864
  active: h.kind === "placing",
4833
- onToggle: () => h.kind === "placing" ? N() : te(),
4865
+ onToggle: () => h.kind === "placing" ? N() : ne(),
4834
4866
  onHide: () => {
4835
4867
  S(!0), w(!0);
4836
4868
  },
@@ -4868,11 +4900,11 @@ function Na(e, t) {
4868
4900
  let n = t.theme ?? "auto";
4869
4901
  n !== "auto" && (e.dataset.theme = n);
4870
4902
  let r = e.attachShadow({ mode: "open" }), i = document.createElement("style");
4871
- i.textContent = le, r.appendChild(i);
4903
+ i.textContent = ue, r.appendChild(i);
4872
4904
  let a = document.createElement("div");
4873
4905
  a.className = "markup-shadow-root", r.appendChild(a);
4874
4906
  let { theme: o, ...s } = t;
4875
- return ce(/* @__PURE__ */ $(ja, { ...s }), a), () => ce(null, a);
4907
+ return le(/* @__PURE__ */ $(ja, { ...s }), a), () => le(null, a);
4876
4908
  }
4877
4909
  //#endregion
4878
4910
  //#region src/widget.ts