@pixelmatters/markup 1.27.1 → 1.27.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/dist/widget.d.ts +7 -3
- package/dist/widget.js +612 -539
- package/dist/widget.js.map +1 -1
- package/package.json +1 -1
- package/skills/install-markup-widget/SKILL.md +4 -4
package/dist/widget.js
CHANGED
|
@@ -42,42 +42,42 @@ function w(e, t) {
|
|
|
42
42
|
for (var n; t < e.__k.length; t++) if ((n = e.__k[t]) != null && n.__e != null) return n.__e;
|
|
43
43
|
return typeof e.type == "function" ? w(e) : null;
|
|
44
44
|
}
|
|
45
|
-
function
|
|
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),
|
|
48
|
+
o.__v = n.__v + 1, t.vnode && t.vnode(o), F(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, ne(i, o, a), n.__e = n.__ = null, o.__e != r && E(o);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
function
|
|
51
|
+
function E(e) {
|
|
52
52
|
if ((e = e.__) != null && e.__c != null) return e.__e = e.__c.base = null, e.__k.some(function(t) {
|
|
53
53
|
if (t != null && t.__e != null) return e.__e = e.__c.base = t.__e;
|
|
54
|
-
}),
|
|
54
|
+
}), E(e);
|
|
55
55
|
}
|
|
56
|
-
function
|
|
57
|
-
(!e.__d && (e.__d = !0) && r.push(e) && !
|
|
56
|
+
function D(e) {
|
|
57
|
+
(!e.__d && (e.__d = !0) && r.push(e) && !O.__r++ || i != t.debounceRendering) && ((i = t.debounceRendering) || a)(O);
|
|
58
58
|
}
|
|
59
|
-
function
|
|
59
|
+
function O() {
|
|
60
60
|
try {
|
|
61
|
-
for (var e, t = 1; r.length;) r.length > t && r.sort(o), e = r.shift(), t = r.length,
|
|
61
|
+
for (var e, t = 1; r.length;) r.length > t && r.sort(o), e = r.shift(), t = r.length, T(e);
|
|
62
62
|
} finally {
|
|
63
|
-
r.length =
|
|
63
|
+
r.length = O.__r = 0;
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
-
function
|
|
66
|
+
function ee(e, t, n, r, i, a, o, s, c, l, u) {
|
|
67
67
|
var d, f, p, g, _, v, y = r && r.__k || h, b = t.length;
|
|
68
|
-
for (c =
|
|
68
|
+
for (c = k(n, t, y, c, b), d = 0; d < b; d++) (p = n.__k[d]) != null && (f = p.__i != -1 && y[p.__i] || m, p.__i = d, v = F(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), 4 & p.__u ? (c = A(p, c, e), 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
|
-
function
|
|
71
|
+
function k(e, t, n, r, i) {
|
|
72
72
|
var a, o, s, c, l, u = n.length, d = u, f = 0;
|
|
73
|
-
for (e.__k = Array(i), a = 0; a < i; a++) (o = t[a]) != null && typeof o != "boolean" && typeof o != "function" ? (typeof o == "string" || typeof o == "number" || typeof o == "bigint" || o.constructor == String ? o = e.__k[a] = x(null, o, null, null, null) : _(o) ? o = e.__k[a] = x(S, { children: o }, null, null, null) : o.constructor === void 0 && o.__b > 0 ? o = e.__k[a] = x(o.type, o.props, o.key, o.ref ? o.ref : null, o.__v) : e.__k[a] = o, c = a + f, o.__ = e, o.__b = e.__b + 1, s = null, (l = o.__i =
|
|
73
|
+
for (e.__k = Array(i), a = 0; a < i; a++) (o = t[a]) != null && typeof o != "boolean" && typeof o != "function" ? (typeof o == "string" || typeof o == "number" || typeof o == "bigint" || o.constructor == String ? o = e.__k[a] = x(null, o, null, null, null) : _(o) ? o = e.__k[a] = x(S, { children: o }, null, null, null) : o.constructor === void 0 && o.__b > 0 ? o = e.__k[a] = x(o.type, o.props, o.key, o.ref ? o.ref : null, o.__v) : e.__k[a] = o, c = a + f, o.__ = e, o.__b = e.__b + 1, s = null, (l = o.__i = j(o, n, c, d)) != -1 && (d--, (s = n[l]) && (s.__u |= 2)), s == null || s.__v == null ? (l == -1 && (i > u ? f-- : i < u && f++), typeof o.type != "function" && (o.__u |= 4)) : l != c && (l == c - 1 ? f-- : l == c + 1 ? f++ : (l > c ? f-- : f++, o.__u |= 4))) : e.__k[a] = null;
|
|
74
74
|
if (d) for (a = 0; a < u; a++) (s = n[a]) != null && !(2 & s.__u) && (s.__e == r && (r = w(s)), oe(s, s));
|
|
75
75
|
return r;
|
|
76
76
|
}
|
|
77
|
-
function
|
|
77
|
+
function A(e, t, n) {
|
|
78
78
|
var r, i;
|
|
79
79
|
if (typeof e.type == "function") {
|
|
80
|
-
for (r = e.__k, i = 0; r && i < r.length; i++) r[i] && (r[i].__ = e, t =
|
|
80
|
+
for (r = e.__k, i = 0; r && i < r.length; i++) r[i] && (r[i].__ = e, t = A(r[i], t, n));
|
|
81
81
|
return t;
|
|
82
82
|
}
|
|
83
83
|
e.__e != t && (t && e.type && !t.parentNode && (t = w(e)), t = n.insertBefore(e.__e, t || null));
|
|
@@ -86,7 +86,7 @@ function k(e, t, n) {
|
|
|
86
86
|
while (t != null && t.nodeType == 8);
|
|
87
87
|
return t;
|
|
88
88
|
}
|
|
89
|
-
function
|
|
89
|
+
function j(e, t, n, r) {
|
|
90
90
|
var i, a, o, s = e.key, c = e.type, l = t[n], u = l != null && !(2 & l.__u);
|
|
91
91
|
if (l === null && s == null || u && s == l.key && c == l.type) return n;
|
|
92
92
|
if (r > +!!u) {
|
|
@@ -94,16 +94,16 @@ function A(e, t, n, r) {
|
|
|
94
94
|
}
|
|
95
95
|
return -1;
|
|
96
96
|
}
|
|
97
|
-
function
|
|
97
|
+
function M(e, t, n) {
|
|
98
98
|
t[0] == "-" ? e.setProperty(t, n ?? "") : e[t] = n == null ? "" : typeof n != "number" || g.test(t) ? n : n + "px";
|
|
99
99
|
}
|
|
100
|
-
function
|
|
100
|
+
function N(e, t, n, r, i) {
|
|
101
101
|
var a, o;
|
|
102
102
|
n: if (t == "style") {
|
|
103
103
|
if (typeof n == "string") e.style.cssText = n;
|
|
104
104
|
else {
|
|
105
|
-
if (typeof r == "string" && (e.style.cssText = r = ""), r) for (t in r) n && t in n ||
|
|
106
|
-
if (n) for (t in n) r && n[t] == r[t] ||
|
|
105
|
+
if (typeof r == "string" && (e.style.cssText = r = ""), r) for (t in r) n && t in n || M(e.style, t, "");
|
|
106
|
+
if (n) for (t in n) r && n[t] == r[t] || M(e.style, t, n[t]);
|
|
107
107
|
}
|
|
108
108
|
} else if (t[0] == "o" && t[1] == "n") a = t != (t = t.replace(u, "$1")), o = t.toLowerCase(), t = o in e || t == "onFocusOut" || t == "onFocusIn" ? o.slice(2) : t.slice(2), e.l ||= {}, e.l[t + a] = n, n ? r ? n[l] = r[l] : (n[l] = d, e.addEventListener(t, a ? p : f, a)) : e.removeEventListener(t, a ? p : f, a);
|
|
109
109
|
else {
|
|
@@ -115,7 +115,7 @@ function M(e, t, n, r, i) {
|
|
|
115
115
|
typeof n == "function" || (n == null || !1 === n && t[4] != "-" ? e.removeAttribute(t) : e.setAttribute(t, t == "popover" && n == 1 ? "" : n));
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
|
-
function
|
|
118
|
+
function P(e) {
|
|
119
119
|
return function(n) {
|
|
120
120
|
if (this.l) {
|
|
121
121
|
var r = this.l[n.type + e];
|
|
@@ -125,46 +125,46 @@ function N(e) {
|
|
|
125
125
|
}
|
|
126
126
|
};
|
|
127
127
|
}
|
|
128
|
-
function
|
|
129
|
-
var d, f, p, m, g, b, x,
|
|
128
|
+
function F(e, n, r, i, a, o, s, c, l, u) {
|
|
129
|
+
var d, f, p, m, g, b, x, T, E, D, O, k, A, j, M, N, P = n.type;
|
|
130
130
|
if (n.constructor !== void 0) return null;
|
|
131
131
|
128 & r.__u && (l = !!(32 & r.__u), o = [c = n.__e = r.__e]), (d = t.__b) && d(n);
|
|
132
|
-
n: if (typeof
|
|
132
|
+
n: if (typeof P == "function") {
|
|
133
133
|
f = s.length;
|
|
134
134
|
try {
|
|
135
|
-
if (
|
|
135
|
+
if (E = n.props, D = P.prototype && P.prototype.render, O = (d = P.contextType) && i[d.__c], k = d ? O ? O.props.value : d.__ : i, r.__c ? T = (p = n.__c = r.__c).__ = p.__E : (D ? n.__c = p = new P(E, k) : (n.__c = p = new C(E, k), p.constructor = P, p.render = se), O && O.sub(p), p.state || (p.state = {}), p.__n = i, m = p.__d = !0, p.__h = [], p._sb = []), D && p.__s == null && (p.__s = p.state), D && P.getDerivedStateFromProps != null && (p.__s == p.state && (p.__s = v({}, p.__s)), v(p.__s, P.getDerivedStateFromProps(E, p.__s))), g = p.props, b = p.state, p.__v = n, m) D && P.getDerivedStateFromProps == null && p.componentWillMount != null && p.componentWillMount(), D && p.componentDidMount != null && p.__h.push(p.componentDidMount);
|
|
136
136
|
else {
|
|
137
|
-
if (
|
|
138
|
-
n.__v != r.__v && (p.props =
|
|
137
|
+
if (D && P.getDerivedStateFromProps == null && E !== g && p.componentWillReceiveProps != null && p.componentWillReceiveProps(E, k), n.__v == r.__v || !p.__e && p.shouldComponentUpdate != null && !1 === p.shouldComponentUpdate(E, p.__s, k)) {
|
|
138
|
+
n.__v != r.__v && (p.props = E, p.state = p.__s, p.__d = !1), n.__e = r.__e, n.__k = r.__k, n.__k.some(function(e) {
|
|
139
139
|
e && (e.__ = n);
|
|
140
140
|
}), h.push.apply(p.__h, p._sb), p._sb = [], p.__h.length && s.push(p), c = w(r);
|
|
141
141
|
break n;
|
|
142
142
|
}
|
|
143
|
-
p.componentWillUpdate != null && p.componentWillUpdate(
|
|
143
|
+
p.componentWillUpdate != null && p.componentWillUpdate(E, p.__s, k), D && p.componentDidUpdate != null && p.__h.push(function() {
|
|
144
144
|
p.componentDidUpdate(g, b, x);
|
|
145
145
|
});
|
|
146
146
|
}
|
|
147
|
-
if (p.context =
|
|
147
|
+
if (p.context = k, p.props = E, p.__P = e, p.__e = !1, A = t.__r, j = 0, D) p.state = p.__s, p.__d = !1, A && A(n), d = p.render(p.props, p.state, p.context), h.push.apply(p.__h, p._sb), p._sb = [];
|
|
148
148
|
else do
|
|
149
|
-
p.__d = !1,
|
|
150
|
-
while (p.__d && ++
|
|
151
|
-
p.state = p.__s, p.getChildContext != null && (i = v(v({}, i), p.getChildContext())),
|
|
149
|
+
p.__d = !1, A && A(n), d = p.render(p.props, p.state, p.context), p.state = p.__s;
|
|
150
|
+
while (p.__d && ++j < 25);
|
|
151
|
+
p.state = p.__s, p.getChildContext != null && (i = v(v({}, i), p.getChildContext())), D && !m && p.getSnapshotBeforeUpdate != null && (x = p.getSnapshotBeforeUpdate(g, b)), M = d != null && d.type === S && d.key == null ? re(d.props.children) : d, c = ee(e, _(M) ? M : [M], n, r, i, a, o, s, c, l, u), p.base = n.__e, n.__u &= -161, p.__h.length && s.push(p), T && (p.__E = p.__ = null);
|
|
152
152
|
} catch (e) {
|
|
153
153
|
if (s.length = f, n.__v = null, l || o != null) {
|
|
154
154
|
if (e.then) {
|
|
155
155
|
for (n.__u |= l ? 160 : 128; c && c.nodeType == 8 && c.nextSibling;) c = c.nextSibling;
|
|
156
156
|
o != null && (o[o.indexOf(c)] = null), n.__e = c;
|
|
157
|
-
} else if (o != null) for (
|
|
157
|
+
} else if (o != null) for (N = o.length; N--;) y(o[N]);
|
|
158
158
|
} else n.__e = r.__e;
|
|
159
|
-
n.__k ??= r.__k || [], e.then ||
|
|
159
|
+
n.__k ??= r.__k || [], e.then || te(n), t.__e(e, n, r);
|
|
160
160
|
}
|
|
161
161
|
} 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);
|
|
162
162
|
return (d = t.diffed) && d(n), 128 & n.__u ? void 0 : c;
|
|
163
163
|
}
|
|
164
|
-
function
|
|
165
|
-
e && (e.__c && (e.__c.__e = !0), e.__k && e.__k.some(
|
|
164
|
+
function te(e) {
|
|
165
|
+
e && (e.__c && (e.__c.__e = !0), e.__k && e.__k.some(te));
|
|
166
166
|
}
|
|
167
|
-
function
|
|
167
|
+
function ne(e, n, r) {
|
|
168
168
|
for (var i = 0; i < r.length; i++) ae(r[i], r[++i], r[++i]);
|
|
169
169
|
t.__c && t.__c(n, e), e.some(function(n) {
|
|
170
170
|
try {
|
|
@@ -194,11 +194,11 @@ function ie(n, r, i, a, o, s, c, l, u) {
|
|
|
194
194
|
if (C == null) x === S || l && n.data == S || (n.data = S);
|
|
195
195
|
else {
|
|
196
196
|
if (s = C == "textarea" && S.defaultValue != null ? null : s && e.call(n.childNodes), !l && s != null) for (x = {}, d = 0; d < n.attributes.length; d++) x[(g = n.attributes[d]).name] = g.value;
|
|
197
|
-
for (d in x) g = x[d], d == "dangerouslySetInnerHTML" ? p = g : d == "children" || d in S || d == "value" && "defaultValue" in S || d == "checked" && "defaultChecked" in S ||
|
|
198
|
-
for (d in S) g = S[d], d == "children" ? h = g : d == "dangerouslySetInnerHTML" ? f = g : d == "value" ? v = g : d == "checked" ? b = g : l && typeof g != "function" || x[d] === g ||
|
|
197
|
+
for (d in x) g = x[d], d == "dangerouslySetInnerHTML" ? p = g : d == "children" || d in S || d == "value" && "defaultValue" in S || d == "checked" && "defaultChecked" in S || N(n, d, null, g, o);
|
|
198
|
+
for (d in S) g = S[d], d == "children" ? h = g : d == "dangerouslySetInnerHTML" ? f = g : d == "value" ? v = g : d == "checked" ? b = g : l && typeof g != "function" || x[d] === g || N(n, d, g, x[d], o);
|
|
199
199
|
if (f) l || p && (f.__html == p.__html || f.__html == n.innerHTML) || (n.innerHTML = f.__html), r.__k = [];
|
|
200
|
-
else if (p && (n.innerHTML = ""),
|
|
201
|
-
l && C != "textarea" || (d = "value", C == "progress" && v == null ? n.removeAttribute("value") : v != null && (v !== n[d] || C == "progress" && !v || C == "option" && v != x[d]) &&
|
|
200
|
+
else if (p && (n.innerHTML = ""), ee(r.type == "template" ? n.content : n, _(h) ? h : [h], r, i, a, C == "foreignObject" ? "http://www.w3.org/1999/xhtml" : o, s, c, s ? s[0] : i.__k && w(i, 0), l, u), s != null) for (d = s.length; d--;) y(s[d]);
|
|
201
|
+
l && C != "textarea" || (d = "value", C == "progress" && v == null ? n.removeAttribute("value") : v != null && (v !== n[d] || C == "progress" && !v || C == "option" && v != x[d]) && N(n, d, v, x[d], o), d = "checked", b != null && b != n[d] && N(n, d, b, x[d], o));
|
|
202
202
|
}
|
|
203
203
|
return n;
|
|
204
204
|
}
|
|
@@ -230,7 +230,7 @@ function se(e, t, n) {
|
|
|
230
230
|
}
|
|
231
231
|
function ce(n, r, i) {
|
|
232
232
|
var a, o, s, c;
|
|
233
|
-
r == document && (r = document.documentElement), t.__ && t.__(n, r), o = (a = typeof i == "function") ? null : i && i.__k || r.__k, s = [], c = [],
|
|
233
|
+
r == document && (r = document.documentElement), t.__ && t.__(n, r), o = (a = typeof i == "function") ? null : i && i.__k || r.__k, s = [], c = [], F(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), ne(s, n, c), n.props.children = null;
|
|
234
234
|
}
|
|
235
235
|
e = h.slice, t = { __e: function(e, t, n, r) {
|
|
236
236
|
for (var i, a, o; t = t.__;) if ((i = t.__c) && !i.__) try {
|
|
@@ -241,15 +241,15 @@ e = h.slice, t = { __e: function(e, t, n, r) {
|
|
|
241
241
|
throw e;
|
|
242
242
|
} }, n = 0, C.prototype.setState = function(e, t) {
|
|
243
243
|
var n = this.__s != null && this.__s != this.state ? this.__s : this.__s = v({}, this.state);
|
|
244
|
-
typeof e == "function" && (e = e(v({}, n), this.props)), e && v(n, e), e != null && this.__v && (t && this._sb.push(t),
|
|
244
|
+
typeof e == "function" && (e = e(v({}, n), this.props)), e && v(n, e), e != null && this.__v && (t && this._sb.push(t), D(this));
|
|
245
245
|
}, C.prototype.forceUpdate = function(e) {
|
|
246
|
-
this.__v && (this.__e = !0, e && this.__h.push(e),
|
|
246
|
+
this.__v && (this.__e = !0, e && this.__h.push(e), D(this));
|
|
247
247
|
}, C.prototype.render = S, r = [], a = typeof Promise == "function" ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, o = function(e, t) {
|
|
248
248
|
return e.__v.__b - t.__v.__b;
|
|
249
|
-
},
|
|
249
|
+
}, O.__r = 0, s = Math.random().toString(8), c = "__d" + s, l = "__a" + s, u = /(PointerCapture)$|Capture$/i, d = 0, f = P(!1), p = P(!0);
|
|
250
250
|
//#endregion
|
|
251
251
|
//#region src/styles.css?inline
|
|
252
|
-
var le = ":host{--markup-paper:#fdfcfa;--markup-surface:#fff;--markup-surface-2:oklch(98.5% .002 250);--markup-surface-3:oklch(95% .003 250);--markup-hover:oklch(95% .003 250);--markup-ink:#1a1614;--markup-ink-soft:oklch(32% .005 250);--markup-muted:#6b6661;--markup-border:#1a16141a;--markup-border-strong:#1a16142e;--markup-brand:#e35d2a;--markup-brand-hover:#c84d20;--markup-accent-soft:oklch(95% .04 60);--markup-accent-ink:oklch(45% .14 38);--markup-accent-glow:color-mix(in srgb, var(--markup-brand) 28%, transparent);--markup-team:#2a4ac8;--markup-shadow:0 1px 2px #1a16140f, 0 8px 28px #1a16141f;--markup-shadow-toolbar:0 1px 1px #0000000a, 0 4px 10px -2px #0f14281a, 0 18px 36px -12px #0f14282e;--markup-shadow-pop:0 1px 1px #0000000a, 0 8px 24px -6px #0f14281f, 0 28px 60px -18px #0f142838;--markup-overlay-tint:#1a16140a;--markup-danger:#dc2626;--markup-success:oklch(62% .16 150);--markup-radius:6px;--markup-radius-sm:4px;--markup-popover-w:360px;--markup-pin-enter:.18s;--markup-menu-in:.12s;--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-surface:oklch(16% .005 250);--markup-surface-2:oklch(20% .005 250);--markup-surface-3:oklch(24% .005 250);--markup-hover:oklch(24% .005 250);--markup-ink:#fdfcfa;--markup-ink-soft:oklch(80% .005 250);--markup-muted:#a8a39e;--markup-border:#fdfcfa1f;--markup-border-strong:#fdfcfa38;--markup-team:#7b99f0;--markup-accent-soft:color-mix(in srgb, var(--markup-brand) 22%, transparent);--markup-accent-ink:oklch(86% .13 55);--markup-shadow:0 1px 2px #00000059, 0 12px 40px #00000073;--markup-shadow-toolbar:0 1px 0 #ffffff0a inset, 0 1px 2px #0006, 0 12px 30px -10px #0000008c, 0 28px 60px -20px #00000080;--markup-shadow-pop:0 1px 0 #ffffff0a inset, 0 8px 24px -6px #00000073, 0 28px 60px -18px #0000008c;--markup-overlay-tint:#fdfcfa0d;--markup-danger:#f87171}@media (prefers-color-scheme:dark){:host(:not([data-theme])){--markup-paper:#1a1614;--markup-surface:oklch(16% .005 250);--markup-surface-2:oklch(20% .005 250);--markup-surface-3:oklch(24% .005 250);--markup-hover:oklch(24% .005 250);--markup-ink:#fdfcfa;--markup-ink-soft:oklch(80% .005 250);--markup-muted:#a8a39e;--markup-border:#fdfcfa1f;--markup-border-strong:#fdfcfa38;--markup-team:#7b99f0;--markup-accent-soft:color-mix(in srgb, var(--markup-brand) 22%, transparent);--markup-accent-ink:oklch(86% .13 55);--markup-shadow:0 1px 2px #00000059, 0 12px 40px #00000073;--markup-shadow-toolbar:0 1px 0 #ffffff0a inset, 0 1px 2px #0006, 0 12px 30px -10px #0000008c, 0 28px 60px -20px #00000080;--markup-shadow-pop:0 1px 0 #ffffff0a inset, 0 8px 24px -6px #00000073, 0 28px 60px -18px #0000008c;--markup-overlay-tint:#fdfcfa0d;--markup-danger:#f87171}}.markup-sr-only{clip:rect(0, 0, 0, 0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.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-toolbar{z-index:10;background:var(--markup-surface);border:1px solid var(--markup-border);pointer-events:none;height:44px;box-shadow:var(--markup-shadow-toolbar);transform-origin:50% 100%;border-radius:9999px;align-items:center;gap:2px;padding:4px;transition:box-shadow .15s,left .22s cubic-bezier(.2,.7,.2,1),transform .22s cubic-bezier(.2,.7,.2,1);animation:.22s cubic-bezier(.2,.7,.2,1) backwards markup-toolbar-in;display:inline-flex;position:fixed;bottom:22px;left:100%;transform:translate(calc(-100% - 22px))}.markup-toolbar.is-leaving,.markup-toolbar.is-leaving>*{pointer-events:none}.markup-toolbar.is-leaving{animation-name:markup-toolbar-out;animation-duration:var(--markup-toolbar-leave);animation-timing-function:ease-in;animation-fill-mode:forwards}@keyframes markup-toolbar-in{0%{opacity:0;translate:0 10px;scale:.96}to{opacity:1;translate:0;scale:1}}@keyframes markup-toolbar-out{0%{opacity:1;translate:0;scale:1}to{opacity:0;translate:0 6px;scale:.97}}.markup-toolbar>*{pointer-events:auto}.markup-tb-btn{width:36px;height:36px;color:var(--markup-ink-soft);cursor:pointer;touch-action:none;font-family:var(--markup-font);background:0 0;border:1px solid #0000;border-radius:9999px;justify-content:center;align-items:center;gap:6px;padding:0;font-size:13px;font-weight:500;transition:background .12s,color .12s,transform .12s cubic-bezier(.2,.7,.2,1);display:inline-flex;position:relative}.markup-tb-btn:hover{background:var(--markup-hover);color:var(--markup-ink)}.markup-tb-btn:active{transform:scale(.97)}.markup-tb-btn:focus-visible{box-shadow:0 0 0 2px var(--markup-surface), 0 0 0 4px var(--markup-accent-glow);outline:none}.markup-tb-btn[data-on=true]{background:var(--markup-ink);color:var(--markup-paper)}@media (prefers-color-scheme:dark){:host(:not([data-theme])) .markup-tb-btn[data-on=true]{background:var(--markup-surface-3);color:var(--markup-ink)}}:host([data-theme=dark]) .markup-tb-btn[data-on=true]{background:var(--markup-surface-3);color:var(--markup-ink)}.markup-tb-btn[data-armed=true]{background:var(--markup-brand);color:#fff}.markup-tb-btn[data-armed=true]:hover{background:var(--markup-brand-hover);color:#fff}.markup-tb-btn[disabled]{color:color-mix(in srgb, var(--markup-muted) 60%, transparent);cursor:default}.markup-tb-btn[disabled]:hover{color:color-mix(in srgb, var(--markup-muted) 60%, transparent);background:0 0}.markup-tb-btn[data-kind=identity]{gap:6px;width:auto;padding:0 4px}.markup-tb-avatar{background:var(--markup-surface-3);width:28px;height:28px;font-family:var(--markup-font-mono);color:var(--markup-ink);border:1px solid var(--markup-border);border-radius:9999px;flex-shrink:0;justify-content:center;align-items:center;font-size:10.5px;font-weight:600;display:inline-flex;overflow:hidden}.markup-tb-avatar.is-anon{color:var(--markup-muted);background:var(--markup-surface-2)}.markup-tb-sep{background:var(--markup-border);flex-shrink:0;width:1px;height:20px;margin:0 4px}.markup-tb-badge{background:var(--markup-brand);color:#fff;min-width:16px;height:16px;font-family:var(--markup-font-mono);box-shadow:0 0 0 2px var(--markup-surface);pointer-events:none;border-radius:9999px;justify-content:center;align-items:center;padding:0 4px;font-size:9.5px;font-weight:600;line-height:1;transition:transform .15s cubic-bezier(.2,.7,.2,1),opacity .15s cubic-bezier(.2,.7,.2,1);display:inline-flex;position:absolute;top:0;right:0}.markup-tb-badge[data-unread=false]{opacity:0;transform:scale(.5)}.markup-toolbar-left{left:0;transform:translate(22px)}.markup-toolbar-center{left:50%;transform:translate(-50%)}.markup-toolbar-right{left:100%;transform:translate(calc(-100% - 22px))}.markup-pop{background:var(--markup-surface);border:1px solid var(--markup-border);box-shadow:var(--markup-shadow-pop);color:var(--markup-ink);z-index:11;border-radius:12px;font-size:13px;animation:.14s cubic-bezier(.2,.7,.2,1) markup-pop-in;position:absolute;bottom:calc(100% + 8px);overflow:hidden}.markup-pop[data-pop=overflow]{--markup-view-w:260px;--markup-view-fit:min(var(--markup-view-w), calc(100vw - 24px));width:var(--markup-view-fit);align-items:flex-end;transition:width .16s cubic-bezier(.2,.7,.2,1),height .16s cubic-bezier(.2,.7,.2,1);display:flex}.markup-pop[data-pop=overflow]>*{width:var(--markup-view-fit);flex:none}.markup-pop[data-pop=overflow].is-anchor-right{justify-content:flex-end}.markup-pop[data-pop=overflow].is-anchor-center{justify-content:center}.markup-pop[data-pop=overflow]:focus{outline:none}.markup-pop[data-pop=overflow][data-view=privacy]{--markup-view-w:340px}.markup-pop[data-pop=overflow][data-view=shortcuts]{--markup-view-w:320px}.markup-menu-view{padding:6px;display:block}.markup-pop[data-pop=identity]{width:240px;padding:6px}.markup-pop[data-pop=inbox]{width:var(--markup-popover-w);padding:0}.markup-pop.is-anchor-right{right:0}.markup-pop.is-anchor-left{left:0}.markup-pop.is-anchor-center{left:50%;transform:translate(-50%)}@keyframes markup-pop-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.markup-pop.is-anchor-center{animation-name:markup-pop-in-center}@keyframes markup-pop-in-center{0%{opacity:0;transform:translate(-50%,6px)}to{opacity:1;transform:translate(-50%)}}.markup-pop.is-leaving{pointer-events:none;animation-name:markup-pop-out;animation-duration:var(--markup-pop-leave);animation-timing-function:ease-in;animation-fill-mode:forwards}.markup-pop.is-anchor-center.is-leaving{animation-name:markup-pop-out-center}@keyframes markup-pop-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(6px)}}@keyframes markup-pop-out-center{0%{opacity:1;transform:translate(-50%)}to{opacity:0;transform:translate(-50%,6px)}}.markup-pop-group-label{font-family:var(--markup-font-mono);letter-spacing:.06em;color:var(--markup-muted);text-transform:lowercase;padding:8px 10px 4px;font-size:10px}.markup-segmented-row{border-radius:6px;align-items:center;gap:10px;padding:7px 8px;display:flex}.markup-segmented-row .lbl{min-width:0;color:var(--markup-ink);flex:1;font-size:13px}.markup-segmented{background:var(--markup-surface-3);border-radius:7px;gap:2px;padding:2px;display:inline-flex}.markup-segmented button{font:inherit;width:28px;height:24px;color:var(--markup-muted);cursor:pointer;background:0 0;border:none;border-radius:5px;justify-content:center;align-items:center;padding:0;transition:background .1s,color .1s;display:inline-flex}.markup-segmented button:hover{color:var(--markup-ink)}.markup-segmented button.is-on{background:var(--markup-surface);color:var(--markup-ink);box-shadow:0 1px 2px #0000000d}.markup-menu-row{cursor:pointer;width:100%;color:inherit;text-align:left;background:0 0;border:none;border-radius:6px;align-items:center;gap:10px;padding:7px 8px;font-family:inherit;font-size:13px;display:flex}.markup-menu-row.no-underline{text-decoration:none}.markup-menu-row:hover{background:var(--markup-hover)}.markup-menu-row:disabled{opacity:.5;cursor:default}.markup-menu-row:disabled:hover{background:0 0}.markup-menu-row .ic{width:16px;height:16px;color:var(--markup-muted);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.markup-menu-row .lbl{flex-direction:column;flex:1;min-width:0;display:flex}.markup-menu-row .lbl .sub{color:var(--markup-muted);margin-top:1px;font-size:11px}.markup-menu-row .right{font-family:var(--markup-font-mono);color:var(--markup-muted);align-items:center;margin-left:auto;font-size:10.5px;display:inline-flex}.markup-menu-row.is-danger,.markup-menu-row.is-danger .ic{color:var(--markup-danger)}.markup-menu-row.is-danger:hover{background:color-mix(in srgb, var(--markup-danger) 10%, transparent)}.markup-menu-row .switch{background:var(--markup-border-strong);border-radius:9999px;flex-shrink:0;width:26px;height:16px;transition:background .12s;position:relative}.markup-menu-row .switch:after{content:\"\";background:var(--markup-surface);border-radius:9999px;width:12px;height:12px;transition:left .12s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #00000026}.markup-menu-row[data-on=true] .switch{background:var(--markup-brand)}.markup-menu-row[data-on=true] .switch:after{left:12px}.markup-menu-divider{background:var(--markup-border);height:1px;margin:4px 0}.markup-brand-line{font-family:var(--markup-font-mono);color:var(--markup-muted);border-top:1px solid var(--markup-border);align-items:center;gap:10px;margin-top:6px;padding:14px 10px 8px;font-size:11px;text-decoration:none;display:flex}.markup-brand-line:hover{color:var(--markup-ink)}.markup-brand-line svg{color:var(--markup-brand)}.markup-brand-line .ver{margin-left:auto}.markup-id-who{border-bottom:1px solid var(--markup-border);flex-direction:column;gap:2px;margin-bottom:4px;padding:10px 8px 12px;display:flex}.markup-id-who .nm{color:var(--markup-ink);font-size:13.5px;font-weight:600}.markup-id-who .em{font-family:var(--markup-font-mono);color:var(--markup-muted);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.markup-id-anon{text-align:left;flex-direction:column;gap:10px;padding:14px 10px;display:flex}.markup-id-anon .h{letter-spacing:-.005em;color:var(--markup-ink);font-size:14px;font-weight:600}.markup-id-anon .sub{color:var(--markup-muted);font-size:12.5px;line-height:18px}.markup-id-anon button:not(.markup-menu-row){background:var(--markup-ink);width:100%;color:var(--markup-paper);height:32px;font:inherit;cursor:pointer;border:none;border-radius:7px;justify-content:center;align-items:center;gap:6px;font-size:13px;font-weight:500;display:inline-flex}.markup-id-anon button:disabled{opacity:.7;cursor:default}.markup-id-anon button:not(.markup-menu-row):hover:not(:disabled){background:color-mix(in srgb, var(--markup-ink) 88%, var(--markup-surface))}.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;display:inline-flex;position:fixed;bottom:24px}.markup-hud-hidden-toast.is-leaving{animation-name:markup-hud-hidden-out;animation-duration:var(--markup-toast-leave);animation-timing-function:ease-in;animation-fill-mode:forwards}.markup-hud-hidden-toast-right{right:24px}.markup-hud-hidden-toast-left{left:24px}.markup-hud-hidden-toast-center{width:max-content;margin-inline:auto;left:0;right:0}.markup-kbd{background:color-mix(in srgb, var(--markup-paper) 14%, transparent);min-width:18px;height:18px;color:var(--markup-paper);font-family:var(--markup-font);border-radius:4px;justify-content:center;align-items:center;padding:0 5px;font-size:10px;font-weight:600;line-height:1;display:inline-flex}.markup-kbd.is-inline{background:color-mix(in srgb, var(--markup-ink) 8%, transparent);min-width:14px;height:14px;color:var(--markup-muted);border-radius:3px;padding:0 3px;font-size:9.5px}@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{border:2px solid var(--markup-paper);background:var(--markup-brand);color:#fff;width:28px;height:28px;font-family:var(--markup-font-mono);cursor:pointer;pointer-events:auto;opacity:var(--markup-pin-opacity,1);transform-origin:0 100%;box-shadow:0 4px 14px -4px #00000059, 0 0 0 1px color-mix(in srgb, var(--markup-brand) 50%, transparent);border-radius:999px 999px 999px 4px;justify-content:center;align-items:center;margin:0;padding:0;font-size:11.5px;font-weight:600;line-height:1;transition:background .15s,color .15s,opacity .15s,top .2s,left .2s;display:inline-flex;position:absolute;transform:translate(-50%,-100%)}.markup-pin.is-entering{animation:markup-pin-in var(--markup-pin-enter) cubic-bezier(.2, .7, .2, 1) backwards}.markup-pin:hover{background:color-mix(in oklab, var(--markup-brand) 92%, black)}:host([data-theme=dark]) .markup-pin:hover{background:color-mix(in oklab, var(--markup-brand) 88%, var(--markup-paper))}@media (prefers-color-scheme:dark){:host(:not([data-theme])) .markup-pin:hover{background:color-mix(in oklab, var(--markup-brand) 88%, var(--markup-paper))}}.markup-pin.is-active{background:var(--markup-brand);color:#fff;border-color:var(--markup-paper)}.markup-pin.is-anchor{anchor-name:--markup-active-anchor}.markup-pin.is-leaving{pointer-events:none;animation-name:markup-pin-out;animation-duration:var(--markup-pin-leave);animation-timing-function:ease-in;animation-iteration-count:1;animation-fill-mode:forwards}.markup-pin-ghost.is-leaving{animation-duration:var(--markup-popover-leave)}@keyframes markup-pin-in{0%{opacity:0;transform:translate(-50%,-100%)scale(.5)}to{opacity:var(--markup-pin-opacity,1);transform:translate(-50%,-100%)scale(1)}}@keyframes markup-pin-out{0%{opacity:var(--markup-pin-opacity,1);transform:translate(-50%,-100%)scale(1)}to{opacity:0;transform:translate(-50%,-100%)scale(.7)}}.markup-pin.is-unresolved{--markup-pin-opacity:.6}.markup-pin.is-closed,.markup-pin.is-closed.is-active{background:var(--markup-paper);color:var(--markup-muted);border-color:var(--markup-muted);box-shadow:0 4px 14px -4px #00000040}.markup-pin.is-closed:hover{background:var(--markup-paper);color:var(--markup-ink)}.markup-pin-ghost{background:var(--markup-brand);color:#fff;cursor:default;pointer-events:none;animation:1.2s ease-in-out infinite markup-ghost-pulse}.markup-pin-num{pointer-events:none;justify-content:center;align-items:center;display:inline-flex}.markup-pin-count{background:var(--markup-ink);min-width:16px;height:16px;color:var(--markup-paper);font-family:var(--markup-font-mono);text-align:center;border:2px solid var(--markup-paper);pointer-events:none;border-radius:999px;padding:0 4px;font-size:9.5px;font-weight:600;line-height:12px;position:absolute;top:-6px;right:-8px}@keyframes markup-ghost-pulse{0%,to{box-shadow:0 4px 14px -4px #00000059,0 0 #e35d2a66}50%{box-shadow:0 4px 14px -4px #00000059,0 0 0 10px #e35d2a00}}.markup-placement-overlay{background:var(--markup-overlay-tint);pointer-events:none;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:var(--markup-popover-w);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}}@supports (transition-behavior:allow-discrete) and selector(:popover-open){.markup-popover{opacity:0;transition:opacity var(--markup-popover-leave) ease, transform var(--markup-popover-leave) ease, overlay var(--markup-popover-leave) allow-discrete, display var(--markup-popover-leave) allow-discrete;animation:none;display:none;transform:translateY(-4px)scale(.98)}.markup-popover:popover-open{opacity:1;display:flex;transform:none}@starting-style{.markup-popover:popover-open{opacity:0;transform:translateY(-4px)scale(.98)}}.markup-popover:not(:popover-open){pointer-events:none}}.markup-popover.is-leaving{pointer-events:none}.markup-popover.is-hud-hidden{transition-property:none;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-popover-title{min-width:0;font-family:var(--markup-font-mono);letter-spacing:.02em;color:var(--markup-muted);white-space:nowrap;text-overflow:ellipsis;flex:auto;font-size:11px;line-height:1;overflow:hidden}.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);animation:markup-menu-in var(--markup-menu-in) ease-out;padding:4px;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:translate(var(--markup-menu-from-x,0), var(--markup-menu-from-y,-4px))}to{opacity:1;transform:translate(0)}}@keyframes markup-menu-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(var(--markup-menu-from-x,0), var(--markup-menu-from-y,-4px))}}.markup-popover-body{border-top:1px solid var(--markup-border);background:var(--markup-paper);flex-direction:column;gap:6px;padding:10px 12px 8px;display:flex}.markup-popover-header+.markup-popover-body{border-top:none}.markup-popover-byline{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.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,transform .12s cubic-bezier(.2,.7,.2,1);display:inline-flex}.markup-icon-btn:hover,.markup-icon-btn.is-open{background:var(--markup-border);color:var(--markup-ink)}.markup-icon-btn:active{transform:scale(.97)}.markup-comments{flex-direction:column;max-height:420px;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.markup-comment{border-bottom:1px solid var(--markup-border);grid-template-columns:26px 1fr;align-items:start;gap:0 10px;padding:12px;display:grid}.markup-comment:last-child{border-bottom:none}.markup-comment>:not(.markup-comment-avatar){grid-column:2}.markup-comment.is-new{animation:.2s cubic-bezier(.2,.7,.2,1) markup-comment-in}@keyframes markup-comment-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.markup-comment-avatar{background:var(--markup-border);width:26px;height:26px;color:var(--markup-ink);font-family:var(--markup-font-mono);letter-spacing:.02em;text-transform:uppercase;-webkit-user-select:none;user-select:none;border-radius:999px;grid-area:1/1/span 4;justify-content:center;align-items:center;margin-top:-3px;font-size:10.5px;font-weight:600;display:inline-flex;overflow:hidden}.markup-avatar-initials{text-box-trim:trim-both;text-box-edge:cap alphabetic;line-height:1}.markup-avatar-img{object-fit:cover;width:100%;height:100%;display:block}.markup-comment-avatar[data-tone=\"1\"]{color:oklch(25% .07 230);background:oklch(85% .07 200)}.markup-comment-avatar[data-tone=\"2\"]{color:oklch(30% .1 150);background:oklch(88% .07 130)}.markup-comment-avatar[data-tone=\"3\"]{color:oklch(35% .1 40);background:oklch(90% .05 50)}.markup-comment-avatar[data-tone=\"4\"]{color:oklch(30% .1 320);background:oklch(87% .07 320)}.markup-comment-avatar[data-tone=\"5\"]{color:oklch(32% .09 70);background:oklch(88% .06 80)}.markup-comment-meta{align-items:center;gap:8px;min-width:0;margin-bottom:4px;font-size:13px;display:flex}.markup-comment-author{color:var(--markup-ink);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:13px;font-weight:600;overflow:hidden}.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-badge.is-agent{background:color-mix(in srgb, var(--markup-brand) 14%, transparent);color:var(--markup-brand);letter-spacing:normal;justify-content:center;width:14px;padding:0}.markup-comment-time{color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.04em;white-space:nowrap;flex-shrink:0;font-size:10.5px}.markup-comment-body{color:var(--markup-ink);white-space:pre-wrap;word-break:break-word;margin:0;font-size:13.5px;line-height:19px}.markup-comment-link{color:var(--markup-brand);text-underline-offset:2px;text-decoration:underline;-webkit-text-decoration-color:color-mix(in srgb, var(--markup-brand) 40%, transparent);text-decoration-color:color-mix(in srgb, var(--markup-brand) 40%, transparent)}.markup-comment-link:hover{-webkit-text-decoration-color:var(--markup-brand);text-decoration-color:var(--markup-brand)}.markup-comment-edited{color:var(--markup-muted);font-family:var(--markup-font-mono);margin-left:2px;font-size:10.5px}.markup-comment-edited:before{content:\" · \"}.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{--markup-menu-from-y:4px;top:auto;bottom:calc(100% + 6px)}.markup-comment-menu.is-side .markup-thread-menu-list{--markup-menu-from-x:4px;--markup-menu-from-y:0;top:-4px;right:calc(100% + 2px)}.markup-comment{position:relative}.markup-reactions{flex-wrap:wrap;align-items:center;gap:4px;margin-top:6px;display:flex}.markup-reaction-chip{border:1px solid var(--markup-border);background:var(--markup-surface-3);color:var(--markup-ink);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:4px;padding:2px 7px;font-size:11.5px;line-height:1.2;transition:background .12s,border-color .12s;display:inline-flex}.markup-reaction-chip:hover:not(:disabled){background:var(--markup-hover)}.markup-reaction-chip.is-mine{background:var(--markup-accent-soft);border-color:color-mix(in srgb, var(--markup-brand) 50%, transparent);color:var(--markup-accent-ink)}.markup-reaction-chip.is-mine:hover:not(:disabled){background:color-mix(in srgb, var(--markup-brand) 18%, 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:10.5px}.markup-reaction-chip.is-mine .markup-reaction-count{color:var(--markup-accent-ink)}.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{width:22px;height:22px;color:var(--markup-muted);font:inherit;cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;font-size:13px;line-height:1;transition:background .12s,color .12s;display:inline-flex}.markup-reaction-add:hover,.markup-reaction-add.is-open{background:var(--markup-hover);color:var(--markup-ink)}.markup-reaction-picker{z-index:1;border:1px solid var(--markup-border-strong);background:var(--markup-paper);animation:markup-menu-in var(--markup-menu-in) ease;border-radius:8px;gap:2px;padding:4px;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{--markup-menu-from-y:4px;top:auto;bottom:calc(100% + 6px)}.markup-reaction-picker-wrap.is-side .markup-reaction-picker{--markup-menu-from-x:4px;--markup-menu-from-y:0;top:-4px;right:calc(100% + 2px)}.markup-reaction-picker-item{cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;font-size:16px;line-height:1;transition:background .12s;display:inline-flex}.markup-reaction-picker-item:hover{background:color-mix(in srgb, var(--markup-ink) 8%, transparent)}.markup-reaction-picker-item.is-mine{background:color-mix(in srgb, var(--markup-brand) 14%, transparent)}.markup-comment-edit-form{flex-direction:column;gap:6px;display:flex}.markup-comment-edit-actions{justify-content:flex-end;gap:6px;display:flex}.markup-composer{flex-direction:column;display:flex;position:relative}.markup-composer-input{width:100%;min-height:38px;max-height:120px;color:var(--markup-ink);font-family:var(--markup-font);background:0 0;border:none;border-radius:0;padding:2px 0;font-size:13.5px;line-height:19px;transition:none;overflow-y:auto}.markup-composer-input:focus-visible{box-shadow:none;outline:none}.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{opacity:0;background:0 0;border:none;border-radius:0;justify-content:space-between;align-items:center;gap:8px;padding:0;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:.04em;color:var(--markup-muted);align-items:center;gap:3px;font-size:10.5px;display:inline-flex}.markup-composer-hint-label{margin-left:2px}.markup-composer-error{color:var(--markup-brand)}.markup-composer-actions{align-items:center;gap:6px;display:flex}.markup-composer .markup-btn-primary{background:var(--markup-ink);height:26px;color:var(--markup-paper);border-radius:6px;padding:0 10px}.markup-composer .markup-btn-primary:hover:not(:disabled){background:color-mix(in srgb, var(--markup-ink) 88%, var(--markup-paper))}.markup-composer-actions-empty{transition:opacity .12s;position:absolute;bottom:0;right:0}.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-author-copy{color:var(--markup-fg);margin:0;font-size:13px;line-height:1.5}.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,transform .12s cubic-bezier(.2,.7,.2,1);display:inline-flex}.markup-btn:disabled{opacity:.5;cursor:not-allowed}.markup-btn:active:not(:disabled){transform:scale(.97)}.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-btn-danger{color:var(--markup-danger)}.markup-btn-danger:hover:not(:disabled){background:color-mix(in srgb, var(--markup-danger) 10%, transparent)}.markup-discard-confirm{background:color-mix(in srgb, var(--markup-paper) 92%, transparent);-webkit-backdrop-filter:blur(6px);animation:markup-menu-in var(--markup-menu-in) ease-out;flex-direction:column;justify-content:center;gap:4px;padding:16px;display:flex;position:absolute;inset:0}.markup-thread-menu-list.is-leaving,.markup-reaction-picker.is-leaving,.markup-discard-confirm.is-leaving{pointer-events:none;animation-name:markup-menu-out;animation-duration:var(--markup-menu-leave);animation-timing-function:ease-in;animation-fill-mode:forwards}.markup-discard-confirm-title{color:var(--markup-ink);margin:0;font-size:13px;font-weight:600}.markup-discard-confirm-desc{color:var(--markup-muted);margin:0;font-size:12px}.markup-discard-confirm-actions{gap:6px;margin-top:10px;display:flex}.markup-screenshot-row{border:1px dashed var(--markup-border-strong);color:var(--markup-muted);border-radius:6px;flex-direction:column;gap:8px;margin-top:0;padding:6px 8px;font-size:11.5px;display:flex}.markup-screenshot-row.is-attached{border-style:solid;border-color:var(--markup-border);padding:8px}.markup-screenshot-row-head{justify-content:space-between;align-items:center;gap:8px;min-height:16px;display:flex}.markup-screenshot-status{color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.04em;align-items:center;gap:5px;font-size:11px;display:flex}.markup-screenshot-row.is-failed{opacity:.85;border-style:dotted}.markup-screenshot-toggle{cursor:pointer;color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.04em;align-items:center;gap:5px;font-size:11px;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-link{border:1px solid var(--markup-border-strong);cursor:zoom-in;background:0 0;border-radius:3px;margin:-4px auto -4px -4px;padding:0;transition:border-color .12s;display:block;overflow:hidden}.markup-screenshot-thumb-link:hover,.markup-screenshot-thumb-link:focus-visible{border-color:var(--markup-brand)}.markup-screenshot-thumb{object-fit:cover;object-position:top;width:auto;height:22px;display:block}.markup-screenshot-redacted-chip{background:color-mix(in srgb, var(--markup-success,oklch(62% .16 150)) 16%, transparent);color:var(--markup-success,oklch(62% .16 150));font-family:var(--markup-font-mono);white-space:nowrap;cursor:pointer;border:none;border-radius:999px;align-items:center;gap:3px;padding:1px 7px;font-size:10px;display:inline-flex}.markup-screenshot-redacted-chip:hover{filter:brightness(1.05)}.markup-screenshot-redacted-arrow{font-style:normal}.markup-screenshot-redacted-list{flex-direction:column;gap:2px;display:flex}.markup-screenshot-redacted-selector{font-family:var(--markup-font-mono);color:var(--markup-muted);font-size:9px;display:block}.markup-screenshot-help{font-family:var(--markup-font-mono);color:var(--markup-muted);margin:0;font-size:10px;line-height:1.5}.markup-screenshot-help-link{color:var(--markup-ink);text-underline-offset:2px;text-decoration:underline}.markup-screenshot-help-link:hover{color:var(--markup-brand)}.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}@supports (transition-behavior:allow-discrete){.markup-lightbox{opacity:0;transition:opacity var(--markup-lightbox-leave) ease, overlay var(--markup-lightbox-leave) allow-discrete, display var(--markup-lightbox-leave) allow-discrete}.markup-lightbox[open]{opacity:1}@starting-style{.markup-lightbox[open]{opacity:0}}}.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-toolbar,.markup-toolbar.is-leaving,.markup-hud-hidden-toast,.markup-hud-hidden-toast.is-leaving,.markup-tb-btn,.markup-tb-badge,.markup-comment,.markup-pin,.markup-pin.is-entering,.markup-pin.is-leaving,.markup-pop,.markup-pop.is-leaving,.markup-pop[data-pop=overflow],.markup-pop.is-anchor-center,.markup-pop.is-anchor-center.is-leaving,.markup-thread-menu-list,.markup-thread-menu-list.is-leaving,.markup-reaction-picker,.markup-reaction-picker.is-leaving,.markup-discard-confirm,.markup-discard-confirm.is-leaving,.markup-icon-btn,.markup-btn,.markup-popover,.markup-pin-ghost,.markup-placement-overlay,.markup-placement-cursor-help,.markup-lightbox,.markup-lightbox-img{transition:none;animation:none}}.markup-mention-chip{background:var(--markup-accent-soft);color:var(--markup-accent-ink);border-radius:3px;padding:0 2px;font-weight:500;display:inline-block}.markup-mention-input{white-space:pre-wrap;overflow-wrap:anywhere;cursor:text;outline:none;position:relative}.markup-mention-input[aria-disabled=true]{opacity:.6;cursor:default}.markup-mention-input[data-empty]:before{content:attr(data-placeholder);color:var(--markup-muted);pointer-events:none;position:absolute;inset:0 auto auto 0}.markup-mention-input .markup-mention-chip{white-space:nowrap;padding:0 3px}.markup-comment-edit-input{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);background:var(--markup-paper);width:100%;min-height:58px;max-height:200px;color:var(--markup-ink);font:inherit;padding:8px 10px;font-size:13px;line-height:1.5;overflow-y:auto}.markup-comment-edit-input:focus-visible{border-color:var(--markup-brand);box-shadow:0 0 0 3px #e35d2a2e}.markup-comment-edit-input[data-empty]:before{inset:8px auto auto 10px}.markup-mention-picker{z-index:10;box-sizing:border-box;background:var(--markup-paper);border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);max-height:180px;box-shadow:var(--markup-shadow);margin:0;padding:4px;list-style:none;position:fixed;overflow-y:auto}.markup-mention-picker-item{border-radius:var(--markup-radius-sm);cursor:pointer;color:var(--markup-ink);justify-content:space-between;align-items:center;gap:8px;padding:6px 8px;font-size:13px;display:flex}.markup-mention-picker-item.is-active{background:color-mix(in srgb, var(--markup-brand) 12%, transparent)}.markup-mention-picker-name{font-weight:500}.markup-mention-picker-trigger{color:var(--markup-muted);font-family:var(--markup-font-mono);font-size:10px}.markup-notifications-panel{max-height:min(60vh,420px);color:var(--markup-ink);flex-direction:column;display:flex}.markup-notifications-panel-header{border-bottom:1px solid var(--markup-border);align-items:center;gap:8px;padding:8px 10px;display:flex}.markup-notifications-panel-header .markup-eyebrow{flex:1}.markup-notifications-panel-actions{align-items:center;gap:8px;display:flex}.markup-notifications-panel-mark-all{color:var(--markup-muted);cursor:pointer;background:0 0;border:none;padding:0;font-size:11px}.markup-notifications-panel-mark-all:hover{color:var(--markup-ink)}.markup-notifications-panel-body{flex:1;overflow-y:auto}.markup-notifications-panel-empty,.markup-notifications-panel-error{text-align:center;color:var(--markup-muted);padding:24px 12px;font-size:12px}.markup-notifications-panel-empty-title{color:var(--markup-ink);margin:0 0 4px;font-weight:500}.markup-notifications-panel-empty-sub{color:var(--markup-muted);margin:0;line-height:1.4}.markup-notifications-panel-error{color:var(--markup-danger,#b91c1c)}.markup-notifications-panel-list{margin:0;padding:4px;list-style:none}.markup-notifications-panel-row{border-radius:var(--markup-radius-sm);text-align:start;cursor:pointer;width:100%;font:inherit;color:inherit;background:0 0;border:none;flex-direction:column;gap:4px;padding:8px 10px;display:flex}.markup-notifications-panel-row:hover{background:color-mix(in srgb, var(--markup-brand) 8%, transparent)}.markup-notifications-panel-row.is-unread{background:color-mix(in srgb, var(--markup-brand) 5%, transparent)}.markup-notifications-panel-meta{align-items:center;gap:6px;font-size:11px;display:flex}.markup-notifications-panel-dot{background:var(--markup-brand);border-radius:999px;flex-shrink:0;width:6px;height:6px}.markup-notifications-panel-actor{font-weight:600}.markup-notifications-panel-sep{color:var(--markup-muted)}.markup-notifications-panel-time{color:var(--markup-muted);font-family:var(--markup-font-mono);font-size:10px}.markup-notifications-panel-thread{color:var(--markup-muted);margin:0;font-size:12px}.markup-notifications-panel-thread-title{color:var(--markup-ink)}.markup-notifications-panel-excerpt{color:color-mix(in srgb, var(--markup-ink) 80%, transparent);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:12px;font-style:italic;display:-webkit-box;overflow:hidden}.markup-panel-pop{z-index:11;pointer-events:auto;width:var(--markup-popover-w);max-width:calc(100vw - 24px);position:fixed;bottom:76px}.markup-panel-pop-right{right:22px}.markup-panel-pop-left{left:22px}.markup-panel-pop-center{left:50%;transform:translate(-50%)}.markup-panel-pop .markup-pop{width:100%;position:static}.markup-panel-pop .markup-notifications-panel{max-height:min(60vh,480px)}.markup-panel-pop .markup-notifications-panel-header{padding:12px 14px}.markup-panel-pop .markup-notifications-panel-header .markup-icon-btn{display:none}.markup-panel{max-height:min(70vh,520px);color:var(--markup-ink);flex-direction:column;display:flex}.markup-panel-header{border-bottom:1px solid var(--markup-border);align-items:center;gap:8px;padding:12px 14px;display:flex}.markup-panel-header .markup-eyebrow{flex:1}.markup-panel-back{color:var(--markup-muted);cursor:pointer;background:0 0;border:none;border-radius:6px;flex-shrink:0;align-items:center;gap:2px;margin-left:-4px;padding:3px 6px 3px 4px;font-family:inherit;font-size:12px;display:inline-flex}.markup-panel-back:hover{background:var(--markup-hover);color:var(--markup-ink)}.markup-panel-body{flex:1;padding:4px 14px 14px;overflow-y:auto}.markup-panel-body:focus{outline:none}.markup-panel-body:focus-visible{box-shadow:inset 0 0 0 2px var(--markup-accent-glow);outline:none}.markup-panel-section{border-bottom:1px solid var(--markup-border);padding:10px 0}.markup-panel-section:last-child{border-bottom:none;padding-bottom:2px}.markup-panel-section-title{font-family:var(--markup-font-mono);letter-spacing:.06em;text-transform:lowercase;color:var(--markup-muted);margin:0 0 6px;font-size:10px;font-weight:400}.markup-panel-text{color:var(--markup-ink-soft);margin:0;font-size:12.5px;line-height:1.5}.markup-panel-text strong{color:var(--markup-ink);font-weight:600}.markup-panel-mono{font-family:var(--markup-font-mono);color:var(--markup-ink);word-break:break-all;font-size:11.5px}.markup-panel-list{color:var(--markup-ink-soft);margin:0;padding-left:16px;font-size:12.5px;line-height:1.5}.markup-panel-list li{margin-bottom:3px}.markup-panel-list li::marker{color:var(--markup-muted)}.markup-panel-note{color:var(--markup-muted);margin:8px 0 0;font-size:11.5px;line-height:1.45}.markup-panel-error{color:var(--markup-danger);margin:8px 0 0;font-size:11.5px;line-height:1.45}.markup-panel-action{border:1px solid var(--markup-border-strong);width:100%;height:30px;color:var(--markup-ink);font:inherit;cursor:pointer;background:0 0;border-radius:7px;margin-top:10px;padding:0 10px;font-size:12.5px;transition:background .12s,border-color .12s,color .12s}.markup-panel-action:hover:not(:disabled){background:var(--markup-hover)}.markup-panel-action:disabled{opacity:.6;cursor:default}.markup-panel-action.is-danger{border-color:color-mix(in srgb, var(--markup-danger) 45%, transparent);color:var(--markup-danger)}.markup-panel-action.is-danger:hover:not(:disabled){background:color-mix(in srgb, var(--markup-danger) 10%, transparent)}.markup-shortcut-list{margin:0;padding:0;list-style:none}.markup-shortcut-row{align-items:center;gap:10px;min-height:24px;padding:2px 0;display:flex}.markup-shortcut-label{min-width:0;color:var(--markup-ink-soft);flex:1;font-size:12.5px;line-height:1.4}.markup-shortcut-keys{flex-shrink:0;align-items:center;gap:4px;display:inline-flex}.markup-shortcut-chord{align-items:center;gap:3px;display:inline-flex}.markup-shortcut-or{color:var(--markup-muted);margin-right:1px;font-size:10px}", ue = 1e4, de = 20, fe = 60, pe = null, me = [], he = null, ge = !1, _e = ve();
|
|
252
|
+
var le = ":host{--markup-paper:#fdfcfa;--markup-surface:#fff;--markup-surface-2:oklch(98.5% .002 250);--markup-surface-3:oklch(95% .003 250);--markup-hover:oklch(95% .003 250);--markup-ink:#1a1614;--markup-ink-soft:oklch(32% .005 250);--markup-muted:#6b6661;--markup-border:#1a16141a;--markup-border-strong:#1a16142e;--markup-brand:#e35d2a;--markup-brand-hover:#c84d20;--markup-accent-soft:oklch(95% .04 60);--markup-accent-ink:oklch(45% .14 38);--markup-brand-fill:var(--markup-brand-hover);--markup-accent-glow:color-mix(in srgb, var(--markup-brand) 28%, transparent);--markup-team:#2a4ac8;--markup-shadow:0 1px 2px #1a16140f, 0 8px 28px #1a16141f;--markup-shadow-toolbar:0 1px 1px #0000000a, 0 4px 10px -2px #0f14281a, 0 18px 36px -12px #0f14282e;--markup-shadow-pop:0 1px 1px #0000000a, 0 8px 24px -6px #0f14281f, 0 28px 60px -18px #0f142838;--markup-overlay-tint:#1a16140a;--markup-danger:#b91c1c;--markup-success:oklch(62% .16 150);--markup-success-ink:oklch(45% .13 150);--markup-radius:6px;--markup-radius-sm:4px;--markup-popover-w:360px;--markup-pin-enter:.18s;--markup-menu-in:.12s;--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-surface:oklch(16% .005 250);--markup-surface-2:oklch(20% .005 250);--markup-surface-3:oklch(24% .005 250);--markup-hover:oklch(24% .005 250);--markup-ink:#fdfcfa;--markup-ink-soft:oklch(80% .005 250);--markup-muted:#a8a39e;--markup-border:#fdfcfa1f;--markup-border-strong:#fdfcfa38;--markup-team:#7b99f0;--markup-accent-soft:color-mix(in srgb, var(--markup-brand) 22%, transparent);--markup-accent-ink:oklch(86% .13 55);--markup-brand-fill:var(--markup-brand);--markup-success-ink:oklch(80% .15 150);--markup-shadow:0 1px 2px #00000059, 0 12px 40px #00000073;--markup-shadow-toolbar:0 1px 0 #ffffff0a inset, 0 1px 2px #0006, 0 12px 30px -10px #0000008c, 0 28px 60px -20px #00000080;--markup-shadow-pop:0 1px 0 #ffffff0a inset, 0 8px 24px -6px #00000073, 0 28px 60px -18px #0000008c;--markup-overlay-tint:#fdfcfa0d;--markup-danger:#f87171}@media (prefers-color-scheme:dark){:host(:not([data-theme])){--markup-paper:#1a1614;--markup-surface:oklch(16% .005 250);--markup-surface-2:oklch(20% .005 250);--markup-surface-3:oklch(24% .005 250);--markup-hover:oklch(24% .005 250);--markup-ink:#fdfcfa;--markup-ink-soft:oklch(80% .005 250);--markup-muted:#a8a39e;--markup-border:#fdfcfa1f;--markup-border-strong:#fdfcfa38;--markup-team:#7b99f0;--markup-accent-soft:color-mix(in srgb, var(--markup-brand) 22%, transparent);--markup-accent-ink:oklch(86% .13 55);--markup-brand-fill:var(--markup-brand);--markup-success-ink:oklch(80% .15 150);--markup-shadow:0 1px 2px #00000059, 0 12px 40px #00000073;--markup-shadow-toolbar:0 1px 0 #ffffff0a inset, 0 1px 2px #0006, 0 12px 30px -10px #0000008c, 0 28px 60px -20px #00000080;--markup-shadow-pop:0 1px 0 #ffffff0a inset, 0 8px 24px -6px #00000073, 0 28px 60px -18px #0000008c;--markup-overlay-tint:#fdfcfa0d;--markup-danger:#f87171}}.markup-sr-only{clip:rect(0, 0, 0, 0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.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-toolbar{z-index:10;background:var(--markup-surface);border:1px solid var(--markup-border);pointer-events:none;height:44px;box-shadow:var(--markup-shadow-toolbar);transform-origin:50% 100%;border-radius:9999px;align-items:center;gap:2px;padding:4px;transition:box-shadow .15s,left .22s cubic-bezier(.2,.7,.2,1),transform .22s cubic-bezier(.2,.7,.2,1);animation:.22s cubic-bezier(.2,.7,.2,1) backwards markup-toolbar-in;display:inline-flex;position:fixed;bottom:22px;left:100%;transform:translate(calc(-100% - 22px))}.markup-toolbar.is-leaving,.markup-toolbar.is-leaving>*{pointer-events:none}.markup-toolbar.is-leaving{animation-name:markup-toolbar-out;animation-duration:var(--markup-toolbar-leave);animation-timing-function:ease-in;animation-fill-mode:forwards}@keyframes markup-toolbar-in{0%{opacity:0;translate:0 10px;scale:.96}to{opacity:1;translate:0;scale:1}}@keyframes markup-toolbar-out{0%{opacity:1;translate:0;scale:1}to{opacity:0;translate:0 6px;scale:.97}}.markup-toolbar>*{pointer-events:auto}.markup-tb-btn{width:36px;height:36px;color:var(--markup-ink-soft);cursor:pointer;touch-action:none;font-family:var(--markup-font);background:0 0;border:1px solid #0000;border-radius:9999px;justify-content:center;align-items:center;gap:6px;padding:0;font-size:13px;font-weight:500;transition:background .12s,color .12s,transform .12s cubic-bezier(.2,.7,.2,1);display:inline-flex;position:relative}.markup-tb-btn:hover{background:var(--markup-hover);color:var(--markup-ink)}.markup-tb-btn:active{transform:scale(.97)}.markup-tb-btn:focus-visible{box-shadow:0 0 0 2px var(--markup-surface), 0 0 0 4px var(--markup-brand);outline:none}.markup-tb-btn[data-on=true]{background:var(--markup-ink);color:var(--markup-paper)}@media (prefers-color-scheme:dark){:host(:not([data-theme])) .markup-tb-btn[data-on=true]{background:var(--markup-surface-3);color:var(--markup-ink)}}:host([data-theme=dark]) .markup-tb-btn[data-on=true]{background:var(--markup-surface-3);color:var(--markup-ink)}.markup-tb-btn[data-armed=true]{background:var(--markup-brand);color:#fff}.markup-tb-btn[data-armed=true]:hover{background:var(--markup-brand-hover);color:#fff}.markup-tb-btn[disabled]{color:color-mix(in srgb, var(--markup-muted) 60%, transparent);cursor:default}.markup-tb-btn[disabled]:hover{color:color-mix(in srgb, var(--markup-muted) 60%, transparent);background:0 0}.markup-tb-btn[data-kind=identity]{gap:6px;width:auto;padding:0 4px}.markup-tb-avatar{background:var(--markup-surface-3);width:28px;height:28px;font-family:var(--markup-font-mono);color:var(--markup-ink);border:1px solid var(--markup-border);border-radius:9999px;flex-shrink:0;justify-content:center;align-items:center;font-size:10.5px;font-weight:600;display:inline-flex;overflow:hidden}.markup-tb-avatar.is-anon{color:var(--markup-muted);background:var(--markup-surface-2)}.markup-tb-sep{background:var(--markup-border);flex-shrink:0;width:1px;height:20px;margin:0 4px}.markup-tb-badge{background:var(--markup-brand);color:#fff;min-width:16px;height:16px;font-family:var(--markup-font-mono);box-shadow:0 0 0 2px var(--markup-surface);pointer-events:none;border-radius:9999px;justify-content:center;align-items:center;padding:0 4px;font-size:9.5px;font-weight:600;line-height:1;transition:transform .15s cubic-bezier(.2,.7,.2,1),opacity .15s cubic-bezier(.2,.7,.2,1);display:inline-flex;position:absolute;top:0;right:0}.markup-tb-badge[data-unread=false]{opacity:0;transform:scale(.5)}.markup-toolbar-left{left:0;transform:translate(22px)}.markup-toolbar-center{left:50%;transform:translate(-50%)}.markup-toolbar-right{left:100%;transform:translate(calc(-100% - 22px))}.markup-pop{background:var(--markup-surface);border:1px solid var(--markup-border);box-shadow:var(--markup-shadow-pop);color:var(--markup-ink);z-index:11;border-radius:12px;font-size:13px;animation:.14s cubic-bezier(.2,.7,.2,1) markup-pop-in;position:absolute;bottom:calc(100% + 8px);overflow:hidden}.markup-pop[data-pop=overflow]{--markup-view-w:260px;--markup-view-fit:min(var(--markup-view-w), calc(100vw - 24px));width:var(--markup-view-fit);align-items:flex-end;transition:width .16s cubic-bezier(.2,.7,.2,1),height .16s cubic-bezier(.2,.7,.2,1);display:flex}.markup-pop[data-pop=overflow]>*{width:var(--markup-view-fit);flex:none}.markup-pop[data-pop=overflow].is-anchor-right{justify-content:flex-end}.markup-pop[data-pop=overflow].is-anchor-center{justify-content:center}.markup-pop[data-pop=overflow]:focus{outline:none}.markup-pop[data-pop=overflow][data-view=privacy]{--markup-view-w:340px}.markup-pop[data-pop=overflow][data-view=shortcuts]{--markup-view-w:320px}.markup-menu-view{padding:6px;display:block}.markup-pop[data-pop=identity]{width:240px;padding:6px}.markup-pop[data-pop=inbox]{width:var(--markup-popover-w);padding:0}.markup-pop.is-anchor-right{right:0}.markup-pop.is-anchor-left{left:0}.markup-pop.is-anchor-center{left:50%;transform:translate(-50%)}@keyframes markup-pop-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.markup-pop.is-anchor-center{animation-name:markup-pop-in-center}@keyframes markup-pop-in-center{0%{opacity:0;transform:translate(-50%,6px)}to{opacity:1;transform:translate(-50%)}}.markup-pop.is-leaving{pointer-events:none;animation-name:markup-pop-out;animation-duration:var(--markup-pop-leave);animation-timing-function:ease-in;animation-fill-mode:forwards}.markup-pop.is-anchor-center.is-leaving{animation-name:markup-pop-out-center}@keyframes markup-pop-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(6px)}}@keyframes markup-pop-out-center{0%{opacity:1;transform:translate(-50%)}to{opacity:0;transform:translate(-50%,6px)}}.markup-pop-group-label{font-family:var(--markup-font-mono);letter-spacing:.06em;color:var(--markup-muted);text-transform:lowercase;padding:8px 10px 4px;font-size:10px}.markup-segmented-row{border-radius:6px;align-items:center;gap:10px;padding:7px 8px;display:flex}.markup-segmented-row .lbl{min-width:0;color:var(--markup-ink);flex:1;font-size:13px}.markup-segmented{background:var(--markup-surface-3);border-radius:7px;gap:2px;padding:2px;display:inline-flex}.markup-segmented button{font:inherit;width:28px;height:24px;color:var(--markup-muted);cursor:pointer;background:0 0;border:none;border-radius:5px;justify-content:center;align-items:center;padding:0;transition:background .1s,color .1s;display:inline-flex}.markup-segmented button:hover{color:var(--markup-ink)}.markup-segmented button.is-on{background:var(--markup-surface);color:var(--markup-ink);box-shadow:0 1px 2px #0000000d}.markup-menu-row{cursor:pointer;width:100%;color:inherit;text-align:left;background:0 0;border:none;border-radius:6px;align-items:center;gap:10px;padding:7px 8px;font-family:inherit;font-size:13px;display:flex}.markup-menu-row.no-underline{text-decoration:none}.markup-menu-row:hover{background:var(--markup-hover)}.markup-menu-row:disabled{opacity:.5;cursor:default}.markup-menu-row:disabled:hover{background:0 0}.markup-menu-row .ic{width:16px;height:16px;color:var(--markup-muted);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.markup-menu-row .lbl{flex-direction:column;flex:1;min-width:0;display:flex}.markup-menu-row .lbl .sub{color:var(--markup-muted);margin-top:1px;font-size:11px}.markup-menu-row .right{font-family:var(--markup-font-mono);color:var(--markup-muted);align-items:center;margin-left:auto;font-size:10.5px;display:inline-flex}.markup-menu-row.is-danger,.markup-menu-row.is-danger .ic{color:var(--markup-danger)}.markup-menu-row.is-danger:hover{background:color-mix(in srgb, var(--markup-danger) 10%, transparent)}.markup-menu-row .switch{background:var(--markup-border-strong);border-radius:9999px;flex-shrink:0;width:26px;height:16px;transition:background .12s;position:relative}.markup-menu-row .switch:after{content:\"\";background:var(--markup-surface);border-radius:9999px;width:12px;height:12px;transition:left .12s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #00000026}.markup-menu-row[data-on=true] .switch{background:var(--markup-brand)}.markup-menu-row[data-on=true] .switch:after{left:12px}.markup-menu-divider{background:var(--markup-border);height:1px;margin:4px 0}.markup-brand-line{font-family:var(--markup-font-mono);color:var(--markup-muted);border-top:1px solid var(--markup-border);align-items:center;gap:10px;margin-top:6px;padding:14px 10px 8px;font-size:11px;text-decoration:none;display:flex}.markup-brand-line:hover{color:var(--markup-ink)}.markup-brand-line svg{color:var(--markup-brand)}.markup-brand-line .ver{margin-left:auto}.markup-id-who{border-bottom:1px solid var(--markup-border);flex-direction:column;gap:2px;margin-bottom:4px;padding:10px 8px 12px;display:flex}.markup-id-who .nm{color:var(--markup-ink);font-size:13.5px;font-weight:600}.markup-id-who .em{font-family:var(--markup-font-mono);color:var(--markup-muted);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.markup-id-anon{text-align:left;flex-direction:column;gap:10px;padding:14px 10px;display:flex}.markup-id-anon .h{letter-spacing:-.005em;color:var(--markup-ink);font-size:14px;font-weight:600}.markup-id-anon .sub{color:var(--markup-muted);font-size:12.5px;line-height:18px}.markup-id-anon button:not(.markup-menu-row){background:var(--markup-ink);width:100%;color:var(--markup-paper);height:32px;font:inherit;cursor:pointer;border:none;border-radius:7px;justify-content:center;align-items:center;gap:6px;font-size:13px;font-weight:500;display:inline-flex}.markup-id-anon button:disabled{opacity:.7;cursor:default}.markup-id-anon button:not(.markup-menu-row):hover:not(:disabled){background:color-mix(in srgb, var(--markup-ink) 88%, var(--markup-surface))}.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;display:inline-flex;position:fixed;bottom:24px}.markup-hud-hidden-toast.is-leaving{animation-name:markup-hud-hidden-out;animation-duration:var(--markup-toast-leave);animation-timing-function:ease-in;animation-fill-mode:forwards}.markup-hud-hidden-toast-right{right:24px}.markup-hud-hidden-toast-left{left:24px}.markup-hud-hidden-toast-center{width:max-content;margin-inline:auto;left:0;right:0}.markup-kbd{background:color-mix(in srgb, var(--markup-paper) 14%, transparent);min-width:18px;height:18px;color:var(--markup-paper);font-family:var(--markup-font);border-radius:4px;justify-content:center;align-items:center;padding:0 5px;font-size:10px;font-weight:600;line-height:1;display:inline-flex}.markup-kbd.is-inline{background:color-mix(in srgb, var(--markup-ink) 8%, transparent);min-width:14px;height:14px;color:var(--markup-muted);border-radius:3px;padding:0 3px;font-size:9.5px}@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{border:2px solid var(--markup-paper);background:var(--markup-brand);color:#fff;width:28px;height:28px;font-family:var(--markup-font-mono);cursor:pointer;pointer-events:auto;opacity:var(--markup-pin-opacity,1);transform-origin:0 100%;box-shadow:0 4px 14px -4px #00000059, 0 0 0 1px color-mix(in srgb, var(--markup-brand) 50%, transparent);border-radius:999px 999px 999px 4px;justify-content:center;align-items:center;margin:0;padding:0;font-size:11.5px;font-weight:600;line-height:1;transition:background .15s,color .15s,opacity .15s,top .2s,left .2s;display:inline-flex;position:absolute;transform:translate(-50%,-100%)}.markup-pin.is-entering{animation:markup-pin-in var(--markup-pin-enter) cubic-bezier(.2, .7, .2, 1) backwards}.markup-pin:hover{background:color-mix(in oklab, var(--markup-brand) 92%, black)}:host([data-theme=dark]) .markup-pin:hover{background:color-mix(in oklab, var(--markup-brand) 88%, var(--markup-paper))}@media (prefers-color-scheme:dark){:host(:not([data-theme])) .markup-pin:hover{background:color-mix(in oklab, var(--markup-brand) 88%, var(--markup-paper))}}.markup-pin.is-active{background:var(--markup-brand);color:#fff;border-color:var(--markup-paper)}.markup-pin.is-anchor{anchor-name:--markup-active-anchor}.markup-pin.is-leaving{pointer-events:none;animation-name:markup-pin-out;animation-duration:var(--markup-pin-leave);animation-timing-function:ease-in;animation-iteration-count:1;animation-fill-mode:forwards}.markup-pin-ghost.is-leaving{animation-duration:var(--markup-popover-leave)}@keyframes markup-pin-in{0%{opacity:0;transform:translate(-50%,-100%)scale(.5)}to{opacity:var(--markup-pin-opacity,1);transform:translate(-50%,-100%)scale(1)}}@keyframes markup-pin-out{0%{opacity:var(--markup-pin-opacity,1);transform:translate(-50%,-100%)scale(1)}to{opacity:0;transform:translate(-50%,-100%)scale(.7)}}.markup-pin.is-unresolved{--markup-pin-opacity:.6}.markup-pin.is-closed,.markup-pin.is-closed.is-active{background:var(--markup-paper);color:var(--markup-muted);border-color:var(--markup-muted);box-shadow:0 4px 14px -4px #00000040}.markup-pin.is-closed:hover{background:var(--markup-paper);color:var(--markup-ink)}.markup-pin-ghost{background:var(--markup-brand);color:#fff;cursor:default;pointer-events:none;animation:1.2s ease-in-out infinite markup-ghost-pulse}.markup-pin-num{pointer-events:none;justify-content:center;align-items:center;display:inline-flex}.markup-pin-count{background:var(--markup-ink);min-width:16px;height:16px;color:var(--markup-paper);font-family:var(--markup-font-mono);text-align:center;border:2px solid var(--markup-paper);pointer-events:none;border-radius:999px;padding:0 4px;font-size:9.5px;font-weight:600;line-height:12px;position:absolute;top:-6px;right:-8px}@keyframes markup-ghost-pulse{0%,to{box-shadow:0 4px 14px -4px #00000059,0 0 #e35d2a66}50%{box-shadow:0 4px 14px -4px #00000059,0 0 0 10px #e35d2a00}}.markup-placement-overlay{background:var(--markup-overlay-tint);pointer-events:none;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:var(--markup-popover-w);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}}@supports (transition-behavior:allow-discrete) and selector(:popover-open){.markup-popover{opacity:0;transition:opacity var(--markup-popover-leave) ease, transform var(--markup-popover-leave) ease, overlay var(--markup-popover-leave) allow-discrete, display var(--markup-popover-leave) allow-discrete;animation:none;display:none;transform:translateY(-4px)scale(.98)}.markup-popover:popover-open{opacity:1;display:flex;transform:none}@starting-style{.markup-popover:popover-open{opacity:0;transform:translateY(-4px)scale(.98)}}.markup-popover:not(:popover-open){pointer-events:none}}.markup-popover.is-leaving{pointer-events:none}.markup-popover.is-hud-hidden{transition-property:none;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-popover-title{min-width:0;font-family:var(--markup-font-mono);letter-spacing:.02em;color:var(--markup-muted);white-space:nowrap;text-overflow:ellipsis;flex:auto;font-size:11px;line-height:1;overflow:hidden}.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);animation:markup-menu-in var(--markup-menu-in) ease-out;padding:4px;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)}.markup-thread-menu-item.is-danger:hover{background:color-mix(in srgb, var(--markup-danger) 10%, transparent)}.markup-thread-menu-item:disabled{opacity:.5;cursor:default}@keyframes markup-menu-in{0%{opacity:0;transform:translate(var(--markup-menu-from-x,0), var(--markup-menu-from-y,-4px))}to{opacity:1;transform:translate(0)}}@keyframes markup-menu-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(var(--markup-menu-from-x,0), var(--markup-menu-from-y,-4px))}}.markup-popover-body{border-top:1px solid var(--markup-border);background:var(--markup-paper);flex-direction:column;gap:6px;padding:10px 12px 8px;display:flex}.markup-popover-header+.markup-popover-body{border-top:none}.markup-popover-byline{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.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,transform .12s cubic-bezier(.2,.7,.2,1);display:inline-flex}.markup-icon-btn:hover,.markup-icon-btn.is-open{background:var(--markup-border);color:var(--markup-ink)}.markup-icon-btn:active{transform:scale(.97)}.markup-comments{flex-direction:column;max-height:420px;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.markup-comment{border-bottom:1px solid var(--markup-border);grid-template-columns:26px 1fr;align-items:start;gap:0 10px;padding:12px;display:grid}.markup-comment:last-child{border-bottom:none}.markup-comment>:not(.markup-comment-avatar){grid-column:2}.markup-comment.is-new{animation:.2s cubic-bezier(.2,.7,.2,1) markup-comment-in}@keyframes markup-comment-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.markup-comment-avatar{background:var(--markup-border);width:26px;height:26px;color:var(--markup-ink);font-family:var(--markup-font-mono);letter-spacing:.02em;text-transform:uppercase;-webkit-user-select:none;user-select:none;border-radius:999px;grid-area:1/1/span 4;justify-content:center;align-items:center;margin-top:-3px;font-size:10.5px;font-weight:600;display:inline-flex;overflow:hidden}.markup-avatar-initials{text-box-trim:trim-both;text-box-edge:cap alphabetic;line-height:1}.markup-avatar-img{object-fit:cover;width:100%;height:100%;display:block}.markup-comment-avatar[data-tone=\"1\"]{color:oklch(25% .07 230);background:oklch(85% .07 200)}.markup-comment-avatar[data-tone=\"2\"]{color:oklch(30% .1 150);background:oklch(88% .07 130)}.markup-comment-avatar[data-tone=\"3\"]{color:oklch(35% .1 40);background:oklch(90% .05 50)}.markup-comment-avatar[data-tone=\"4\"]{color:oklch(30% .1 320);background:oklch(87% .07 320)}.markup-comment-avatar[data-tone=\"5\"]{color:oklch(32% .09 70);background:oklch(88% .06 80)}.markup-comment-meta{align-items:center;gap:8px;min-width:0;margin-bottom:4px;font-size:13px;display:flex}.markup-comment-author{color:var(--markup-ink);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:13px;font-weight:600;overflow:hidden}.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-badge.is-agent{background:color-mix(in srgb, var(--markup-brand) 14%, transparent);color:var(--markup-accent-ink);letter-spacing:normal;justify-content:center;width:14px;padding:0}.markup-comment-time{color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.04em;white-space:nowrap;flex-shrink:0;font-size:10.5px}.markup-comment-body{color:var(--markup-ink);white-space:pre-wrap;word-break:break-word;margin:0;font-size:13.5px;line-height:19px}.markup-comment-link{color:var(--markup-accent-ink);text-underline-offset:2px;text-decoration:underline;-webkit-text-decoration-color:color-mix(in srgb, var(--markup-accent-ink) 60%, transparent);text-decoration-color:color-mix(in srgb, var(--markup-accent-ink) 60%, transparent)}.markup-comment-link:hover{-webkit-text-decoration-color:var(--markup-accent-ink);text-decoration-color:var(--markup-accent-ink)}.markup-comment-edited{color:var(--markup-muted);font-family:var(--markup-font-mono);margin-left:2px;font-size:10.5px}.markup-comment-edited:before{content:\" · \"}.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{--markup-menu-from-y:4px;top:auto;bottom:calc(100% + 6px)}.markup-comment-menu.is-side .markup-thread-menu-list{--markup-menu-from-x:4px;--markup-menu-from-y:0;top:-4px;right:calc(100% + 2px)}.markup-comment{position:relative}.markup-reactions{flex-wrap:wrap;align-items:center;gap:4px;margin-top:6px;display:flex}.markup-reaction-chip{border:1px solid var(--markup-border);background:var(--markup-surface-3);color:var(--markup-ink);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:4px;padding:2px 7px;font-size:11.5px;line-height:1.2;transition:background .12s,border-color .12s;display:inline-flex}.markup-reaction-chip:hover:not(:disabled){background:var(--markup-hover)}.markup-reaction-chip.is-mine{background:var(--markup-accent-soft);border-color:color-mix(in srgb, var(--markup-brand) 50%, transparent);color:var(--markup-accent-ink)}.markup-reaction-chip.is-mine:hover:not(:disabled){background:color-mix(in srgb, var(--markup-brand) 18%, 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:10.5px}.markup-reaction-chip.is-mine .markup-reaction-count{color:var(--markup-accent-ink)}.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{width:22px;height:22px;color:var(--markup-muted);font:inherit;cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;font-size:13px;line-height:1;transition:background .12s,color .12s;display:inline-flex}.markup-reaction-add:hover,.markup-reaction-add.is-open{background:var(--markup-hover);color:var(--markup-ink)}.markup-reaction-picker{z-index:1;border:1px solid var(--markup-border-strong);background:var(--markup-paper);animation:markup-menu-in var(--markup-menu-in) ease;border-radius:8px;gap:2px;padding:4px;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{--markup-menu-from-y:4px;top:auto;bottom:calc(100% + 6px)}.markup-reaction-picker-wrap.is-side .markup-reaction-picker{--markup-menu-from-x:4px;--markup-menu-from-y:0;top:-4px;right:calc(100% + 2px)}.markup-reaction-picker-item{cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;font-size:16px;line-height:1;transition:background .12s;display:inline-flex}.markup-reaction-picker-item:hover{background:color-mix(in srgb, var(--markup-ink) 8%, transparent)}.markup-reaction-picker-item.is-mine{background:color-mix(in srgb, var(--markup-brand) 14%, transparent)}.markup-comment-edit-form{flex-direction:column;gap:6px;display:flex}.markup-comment-edit-actions{justify-content:flex-end;gap:6px;display:flex}.markup-composer{flex-direction:column;display:flex;position:relative}.markup-composer-input{width:100%;min-height:38px;max-height:120px;color:var(--markup-ink);font-family:var(--markup-font);background:0 0;border:none;border-radius:0;padding:2px 0;font-size:13.5px;line-height:19px;transition:none;overflow-y:auto}.markup-composer-input:focus-visible{box-shadow:none;outline:none}.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{opacity:0;background:0 0;border:none;border-radius:0;justify-content:space-between;align-items:center;gap:8px;padding:0;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:.04em;color:var(--markup-muted);align-items:center;gap:3px;font-size:10.5px;display:inline-flex}.markup-composer-hint-label{margin-left:2px}.markup-composer-error{color:var(--markup-accent-ink)}.markup-composer-actions{align-items:center;gap:6px;display:flex}.markup-composer .markup-btn-primary{background:var(--markup-ink);height:26px;color:var(--markup-paper);border-radius:6px;padding:0 10px}.markup-composer .markup-btn-primary:hover:not(:disabled){background:color-mix(in srgb, var(--markup-ink) 88%, var(--markup-paper))}.markup-composer-actions-empty{transition:opacity .12s;position:absolute;bottom:0;right:0}.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-author-copy{color:var(--markup-ink);margin:0;font-size:13px;line-height:1.5}.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,transform .12s cubic-bezier(.2,.7,.2,1);display:inline-flex}.markup-btn:disabled{opacity:.5;cursor:not-allowed}.markup-btn:active:not(:disabled){transform:scale(.97)}.markup-btn-primary{background:var(--markup-ink);color:var(--markup-paper)}.markup-btn-primary:hover:not(:disabled){background:var(--markup-brand-fill)}.markup-btn-ghost{color:var(--markup-muted)}.markup-btn-ghost:hover:not(:disabled){background:var(--markup-border);color:var(--markup-ink)}.markup-btn-danger{color:var(--markup-danger)}.markup-btn-danger:hover:not(:disabled){background:color-mix(in srgb, var(--markup-danger) 10%, transparent)}.markup-discard-confirm{background:color-mix(in srgb, var(--markup-paper) 92%, transparent);-webkit-backdrop-filter:blur(6px);animation:markup-menu-in var(--markup-menu-in) ease-out;flex-direction:column;justify-content:center;gap:4px;padding:16px;display:flex;position:absolute;inset:0}.markup-thread-menu-list.is-leaving,.markup-reaction-picker.is-leaving,.markup-discard-confirm.is-leaving{pointer-events:none;animation-name:markup-menu-out;animation-duration:var(--markup-menu-leave);animation-timing-function:ease-in;animation-fill-mode:forwards}.markup-discard-confirm-title{color:var(--markup-ink);margin:0;font-size:13px;font-weight:600}.markup-discard-confirm-desc{color:var(--markup-muted);margin:0;font-size:12px}.markup-discard-confirm-actions{gap:6px;margin-top:10px;display:flex}.markup-screenshot-row{border:1px dashed var(--markup-border-strong);color:var(--markup-muted);border-radius:6px;flex-direction:column;gap:8px;margin-top:0;padding:6px 8px;font-size:11.5px;display:flex}.markup-screenshot-row.is-attached{border-style:solid;border-color:var(--markup-border);padding:8px}.markup-screenshot-row-head{justify-content:space-between;align-items:center;gap:8px;min-height:16px;display:flex}.markup-screenshot-status{color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.04em;align-items:center;gap:5px;font-size:11px;display:flex}.markup-screenshot-row.is-failed{opacity:.85;border-style:dotted}.markup-screenshot-toggle{cursor:pointer;color:var(--markup-muted);font-family:var(--markup-font-mono);letter-spacing:.04em;align-items:center;gap:5px;font-size:11px;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-link{border:1px solid var(--markup-border-strong);cursor:zoom-in;background:0 0;border-radius:3px;margin:-4px auto -4px -4px;padding:0;transition:border-color .12s;display:block;overflow:hidden}.markup-screenshot-thumb-link:hover,.markup-screenshot-thumb-link:focus-visible{border-color:var(--markup-brand)}.markup-screenshot-thumb{object-fit:cover;object-position:top;width:auto;height:22px;display:block}.markup-screenshot-redacted-chip{background:color-mix(in srgb, var(--markup-success,oklch(62% .16 150)) 16%, transparent);color:var(--markup-success-ink);font-family:var(--markup-font-mono);white-space:nowrap;cursor:pointer;border:none;border-radius:999px;align-items:center;gap:3px;padding:1px 7px;font-size:10px;display:inline-flex}.markup-screenshot-redacted-chip:hover{filter:brightness(1.05)}.markup-screenshot-redacted-arrow{font-style:normal}.markup-screenshot-redacted-list{flex-direction:column;gap:2px;display:flex}.markup-screenshot-redacted-selector{font-family:var(--markup-font-mono);color:var(--markup-muted);font-size:9px;display:block}.markup-screenshot-help{font-family:var(--markup-font-mono);color:var(--markup-muted);margin:0;font-size:10px;line-height:1.5}.markup-screenshot-help-link{color:var(--markup-ink);text-underline-offset:2px;text-decoration:underline}.markup-screenshot-help-link:hover{color:var(--markup-accent-ink)}.markup-comment-screenshot{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);cursor:pointer;background:0 0;margin-top:8px;padding:0;transition:border-color .12s,opacity .12s;display:block;overflow:hidden}.markup-comment-screenshot:hover{border-color:var(--markup-brand);opacity:.9}.markup-comment-screenshot img{object-fit:cover;object-position:top;width:100%;height:auto;max-height:120px;display:block}.markup-lightbox{background:#1a1614e0;border:none;width:100%;max-width:100%;height:100%;max-height:100%;margin:0;padding:24px;position:fixed;inset:0}.markup-lightbox[open]{justify-content:center;align-items:center;display:flex}@supports (transition-behavior:allow-discrete){.markup-lightbox{opacity:0;transition:opacity var(--markup-lightbox-leave) ease, overlay var(--markup-lightbox-leave) allow-discrete, display var(--markup-lightbox-leave) allow-discrete}.markup-lightbox[open]{opacity:1}@starting-style{.markup-lightbox[open]{opacity:0}}}.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-toolbar,.markup-toolbar.is-leaving,.markup-hud-hidden-toast,.markup-hud-hidden-toast.is-leaving,.markup-tb-btn,.markup-tb-badge,.markup-comment,.markup-pin,.markup-pin.is-entering,.markup-pin.is-leaving,.markup-pop,.markup-pop.is-leaving,.markup-pop[data-pop=overflow],.markup-pop.is-anchor-center,.markup-pop.is-anchor-center.is-leaving,.markup-thread-menu-list,.markup-thread-menu-list.is-leaving,.markup-reaction-picker,.markup-reaction-picker.is-leaving,.markup-discard-confirm,.markup-discard-confirm.is-leaving,.markup-icon-btn,.markup-btn,.markup-popover,.markup-pin-ghost,.markup-placement-overlay,.markup-placement-cursor-help,.markup-lightbox,.markup-lightbox-img{transition:none;animation:none}}.markup-mention-chip{background:var(--markup-accent-soft);color:var(--markup-accent-ink);border-radius:3px;padding:0 2px;font-weight:500;display:inline-block}.markup-mention-input{white-space:pre-wrap;overflow-wrap:anywhere;cursor:text;outline:none;position:relative}.markup-mention-input[aria-disabled=true]{opacity:.6;cursor:default}.markup-mention-input[data-empty]:before{content:attr(data-placeholder);color:var(--markup-muted);pointer-events:none;position:absolute;inset:0 auto auto 0}.markup-mention-input .markup-mention-chip{white-space:nowrap;padding:0 3px}.markup-comment-edit-input{border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);background:var(--markup-paper);width:100%;min-height:58px;max-height:200px;color:var(--markup-ink);font:inherit;padding:8px 10px;font-size:13px;line-height:1.5;overflow-y:auto}.markup-comment-edit-input:focus-visible{border-color:var(--markup-brand);box-shadow:0 0 0 3px #e35d2a2e}.markup-comment-edit-input[data-empty]:before{inset:8px auto auto 10px}.markup-mention-picker{z-index:10;box-sizing:border-box;background:var(--markup-paper);border:1px solid var(--markup-border-strong);border-radius:var(--markup-radius-sm);max-height:180px;box-shadow:var(--markup-shadow);margin:0;padding:4px;list-style:none;position:fixed;overflow-y:auto}.markup-mention-picker-item{border-radius:var(--markup-radius-sm);cursor:pointer;color:var(--markup-ink);justify-content:space-between;align-items:center;gap:8px;padding:6px 8px;font-size:13px;display:flex}.markup-mention-picker-item.is-active{background:color-mix(in srgb, var(--markup-brand) 12%, transparent)}.markup-mention-picker-name{font-weight:500}.markup-mention-picker-trigger{color:var(--markup-muted);font-family:var(--markup-font-mono);font-size:10px}.markup-notifications-panel{max-height:min(60vh,420px);color:var(--markup-ink);flex-direction:column;display:flex}.markup-notifications-panel-header{border-bottom:1px solid var(--markup-border);align-items:center;gap:8px;padding:8px 10px;display:flex}.markup-notifications-panel-header .markup-eyebrow{flex:1}.markup-notifications-panel-actions{align-items:center;gap:8px;display:flex}.markup-notifications-panel-mark-all{color:var(--markup-muted);cursor:pointer;background:0 0;border:none;padding:0;font-size:11px}.markup-notifications-panel-mark-all:hover{color:var(--markup-ink)}.markup-notifications-panel-body{flex:1;overflow-y:auto}.markup-notifications-panel-empty,.markup-notifications-panel-error{text-align:center;color:var(--markup-muted);padding:24px 12px;font-size:12px}.markup-notifications-panel-empty-title{color:var(--markup-ink);margin:0 0 4px;font-weight:500}.markup-notifications-panel-empty-sub{color:var(--markup-muted);margin:0;line-height:1.4}.markup-notifications-panel-error{color:var(--markup-danger,#b91c1c)}.markup-notifications-panel-list{margin:0;padding:4px;list-style:none}.markup-notifications-panel-row{border-radius:var(--markup-radius-sm);text-align:start;cursor:pointer;width:100%;font:inherit;color:inherit;background:0 0;border:none;flex-direction:column;gap:4px;padding:8px 10px;display:flex}.markup-notifications-panel-row:hover{background:color-mix(in srgb, var(--markup-brand) 8%, transparent)}.markup-notifications-panel-row.is-unread{background:color-mix(in srgb, var(--markup-brand) 5%, transparent)}.markup-notifications-panel-meta{align-items:center;gap:6px;font-size:11px;display:flex}.markup-notifications-panel-dot{background:var(--markup-brand);border-radius:999px;flex-shrink:0;width:6px;height:6px}.markup-notifications-panel-actor{font-weight:600}.markup-notifications-panel-sep{color:var(--markup-muted)}.markup-notifications-panel-time{color:var(--markup-muted);font-family:var(--markup-font-mono);font-size:10px}.markup-notifications-panel-thread{color:var(--markup-muted);margin:0;font-size:12px}.markup-notifications-panel-thread-title{color:var(--markup-ink)}.markup-notifications-panel-excerpt{color:color-mix(in srgb, var(--markup-ink) 80%, transparent);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:12px;font-style:italic;display:-webkit-box;overflow:hidden}.markup-panel-pop{z-index:11;pointer-events:auto;width:var(--markup-popover-w);max-width:calc(100vw - 24px);position:fixed;bottom:76px}.markup-panel-pop-right{right:22px}.markup-panel-pop-left{left:22px}.markup-panel-pop-center{left:50%;transform:translate(-50%)}.markup-panel-pop .markup-pop{width:100%;position:static}.markup-panel-pop .markup-notifications-panel{max-height:min(60vh,480px)}.markup-panel-pop .markup-notifications-panel-header{padding:12px 14px}.markup-panel-pop .markup-notifications-panel-header .markup-icon-btn{display:none}.markup-panel{max-height:min(70vh,520px);color:var(--markup-ink);flex-direction:column;display:flex}.markup-panel-header{border-bottom:1px solid var(--markup-border);align-items:center;gap:8px;padding:12px 14px;display:flex}.markup-panel-header .markup-eyebrow{flex:1}.markup-panel-back{color:var(--markup-muted);cursor:pointer;background:0 0;border:none;border-radius:6px;flex-shrink:0;align-items:center;gap:2px;margin-left:-4px;padding:3px 6px 3px 4px;font-family:inherit;font-size:12px;display:inline-flex}.markup-panel-back:hover{background:var(--markup-hover);color:var(--markup-ink)}.markup-panel-body{flex:1;padding:4px 14px 14px;overflow-y:auto}.markup-panel-body:focus{outline:none}.markup-panel-body:focus-visible{box-shadow:inset 0 0 0 2px var(--markup-accent-glow);outline:none}.markup-panel-section{border-bottom:1px solid var(--markup-border);padding:10px 0}.markup-panel-section:last-child{border-bottom:none;padding-bottom:2px}.markup-panel-section-title{font-family:var(--markup-font-mono);letter-spacing:.06em;text-transform:lowercase;color:var(--markup-muted);margin:0 0 6px;font-size:10px;font-weight:400}.markup-panel-text{color:var(--markup-ink-soft);margin:0;font-size:12.5px;line-height:1.5}.markup-panel-text strong{color:var(--markup-ink);font-weight:600}.markup-panel-mono{font-family:var(--markup-font-mono);color:var(--markup-ink);word-break:break-all;font-size:11.5px}.markup-panel-list{color:var(--markup-ink-soft);margin:0;padding-left:16px;font-size:12.5px;line-height:1.5}.markup-panel-list li{margin-bottom:3px}.markup-panel-list li::marker{color:var(--markup-muted)}.markup-panel-note{color:var(--markup-muted);margin:8px 0 0;font-size:11.5px;line-height:1.45}.markup-panel-error{color:var(--markup-danger);margin:8px 0 0;font-size:11.5px;line-height:1.45}.markup-panel-action{border:1px solid var(--markup-border-strong);width:100%;height:30px;color:var(--markup-ink);font:inherit;cursor:pointer;background:0 0;border-radius:7px;margin-top:10px;padding:0 10px;font-size:12.5px;transition:background .12s,border-color .12s,color .12s}.markup-panel-action:hover:not(:disabled){background:var(--markup-hover)}.markup-panel-action:disabled{opacity:.6;cursor:default}.markup-panel-action.is-danger{border-color:color-mix(in srgb, var(--markup-danger) 45%, transparent);color:var(--markup-danger)}.markup-panel-action.is-danger:hover:not(:disabled){background:color-mix(in srgb, var(--markup-danger) 10%, transparent)}.markup-shortcut-list{margin:0;padding:0;list-style:none}.markup-shortcut-row{align-items:center;gap:10px;min-height:24px;padding:2px 0;display:flex}.markup-shortcut-label{min-width:0;color:var(--markup-ink-soft);flex:1;font-size:12.5px;line-height:1.4}.markup-shortcut-keys{flex-shrink:0;align-items:center;gap:4px;display:inline-flex}.markup-shortcut-chord{align-items:center;gap:3px;display:inline-flex}.markup-shortcut-or{color:var(--markup-muted);margin-right:1px;font-size:10px}", ue = 1e4, de = 20, fe = 60, pe = null, me = [], he = null, ge = !1, _e = ve();
|
|
253
253
|
function ve() {
|
|
254
254
|
return typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : `s-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
|
|
255
255
|
}
|
|
@@ -4941,29 +4941,85 @@ var pc = {
|
|
|
4941
4941
|
"--markup-pop-leave": "140ms",
|
|
4942
4942
|
"--markup-menu-leave": "120ms",
|
|
4943
4943
|
"--markup-lightbox-leave": "160ms"
|
|
4944
|
-
}
|
|
4944
|
+
}, mc = /* @__PURE__ */ new Set([
|
|
4945
|
+
"pointerdown",
|
|
4946
|
+
"mousedown",
|
|
4947
|
+
"touchstart"
|
|
4948
|
+
]), hc = /* @__PURE__ */ new Set([
|
|
4949
|
+
"pointerup",
|
|
4950
|
+
"mouseup",
|
|
4951
|
+
"touchend"
|
|
4952
|
+
]), gc = [
|
|
4953
|
+
...mc,
|
|
4954
|
+
...hc,
|
|
4955
|
+
"click"
|
|
4956
|
+
], _c = ".markup-tb-btn", vc = /* @__PURE__ */ new WeakSet();
|
|
4957
|
+
function yc(e) {
|
|
4958
|
+
let t = !1;
|
|
4959
|
+
function n(n) {
|
|
4960
|
+
let r = n.composedPath()[0], i = r instanceof Element ? r.closest(_c) : null, a = i !== null && e.contains(i);
|
|
4961
|
+
if (mc.has(n.type) && (t = a), !(!a || hc.has(n.type) && !t) && (n.stopPropagation(), n.type === "mousedown" && n.preventDefault(), n.type === "click" && n instanceof MouseEvent)) {
|
|
4962
|
+
let e = xc(n);
|
|
4963
|
+
vc.add(e), r?.dispatchEvent(e);
|
|
4964
|
+
}
|
|
4965
|
+
}
|
|
4966
|
+
let r = { capture: !0 };
|
|
4967
|
+
for (let e of gc) window.addEventListener(e, n, r);
|
|
4968
|
+
return () => {
|
|
4969
|
+
for (let e of gc) window.removeEventListener(e, n, r);
|
|
4970
|
+
};
|
|
4971
|
+
}
|
|
4972
|
+
function bc(e, t) {
|
|
4973
|
+
let n = e.getRootNode(), r = (e) => {
|
|
4974
|
+
vc.has(e) && t(e);
|
|
4975
|
+
};
|
|
4976
|
+
return document.addEventListener("click", t, !0), n instanceof ShadowRoot && n.addEventListener("click", r, !0), () => {
|
|
4977
|
+
document.removeEventListener("click", t, !0), n instanceof ShadowRoot && n.removeEventListener("click", r, !0);
|
|
4978
|
+
};
|
|
4979
|
+
}
|
|
4980
|
+
function xc(e) {
|
|
4981
|
+
return new MouseEvent(e.type, {
|
|
4982
|
+
bubbles: !0,
|
|
4983
|
+
cancelable: !0,
|
|
4984
|
+
composed: !1,
|
|
4985
|
+
view: e.view,
|
|
4986
|
+
detail: e.detail,
|
|
4987
|
+
screenX: e.screenX,
|
|
4988
|
+
screenY: e.screenY,
|
|
4989
|
+
clientX: e.clientX,
|
|
4990
|
+
clientY: e.clientY,
|
|
4991
|
+
ctrlKey: e.ctrlKey,
|
|
4992
|
+
shiftKey: e.shiftKey,
|
|
4993
|
+
altKey: e.altKey,
|
|
4994
|
+
metaKey: e.metaKey,
|
|
4995
|
+
button: e.button,
|
|
4996
|
+
buttons: e.buttons
|
|
4997
|
+
});
|
|
4998
|
+
}
|
|
4945
4999
|
//#endregion
|
|
4946
5000
|
//#region src/runtime/ui/identity-menu.tsx
|
|
4947
|
-
function
|
|
5001
|
+
function Sc({ identity: e, position: t, isSigningIn: n, isSigningOut: r, dashboardUrl: i, commentAccess: a = "anyone", onSignIn: o, onSignOut: s, onForgetMe: c }) {
|
|
4948
5002
|
let [l, u] = B(!1), d = ei(l || null, 140), f = d?.isLeaving ?? !1, [p, m] = B(!1), [h, g] = B(!1), _ = U(null);
|
|
4949
5003
|
V(() => {
|
|
4950
5004
|
if (!l) return;
|
|
4951
|
-
|
|
4952
|
-
|
|
4953
|
-
|
|
4954
|
-
|
|
4955
|
-
|
|
5005
|
+
let e = _.current;
|
|
5006
|
+
if (!e) return;
|
|
5007
|
+
let t = (t) => {
|
|
5008
|
+
t.composedPath().includes(e) || u(!1);
|
|
5009
|
+
};
|
|
5010
|
+
function n(e) {
|
|
4956
5011
|
e.key === "Escape" && u(!1);
|
|
4957
5012
|
}
|
|
4958
|
-
|
|
4959
|
-
|
|
5013
|
+
let r = bc(e, t);
|
|
5014
|
+
return document.addEventListener("keydown", n), () => {
|
|
5015
|
+
r(), document.removeEventListener("keydown", n);
|
|
4960
5016
|
};
|
|
4961
5017
|
}, [l]);
|
|
4962
5018
|
let v = d != null;
|
|
4963
5019
|
V(() => {
|
|
4964
5020
|
v || (m(!1), g(!1));
|
|
4965
5021
|
}, [v]);
|
|
4966
|
-
let y = aa(e), b =
|
|
5022
|
+
let y = aa(e), b = Cc(y), x = e.kind === "verified", C = e.kind === "verified" ? e.identity.image : void 0, [w, T] = B(null), E = x && C != null && w !== C, D = x ? e.identity.email : null, O = t === "bottom-left" ? "is-anchor-left" : t === "bottom-center" ? "is-anchor-center" : "is-anchor-right";
|
|
4967
5023
|
return /* @__PURE__ */ Q("div", {
|
|
4968
5024
|
ref: _,
|
|
4969
5025
|
style: {
|
|
@@ -4986,13 +5042,13 @@ function mc({ identity: e, position: t, isSigningIn: n, isSigningOut: r, dashboa
|
|
|
4986
5042
|
children: [/* @__PURE__ */ Q("span", {
|
|
4987
5043
|
class: Z("markup-tb-avatar", !x && "is-anon"),
|
|
4988
5044
|
"aria-hidden": "true",
|
|
4989
|
-
children:
|
|
5045
|
+
children: E ? /* @__PURE__ */ Q("img", {
|
|
4990
5046
|
class: "markup-avatar-img",
|
|
4991
5047
|
src: C,
|
|
4992
5048
|
alt: "",
|
|
4993
5049
|
decoding: "async",
|
|
4994
5050
|
referrerpolicy: "no-referrer",
|
|
4995
|
-
onError: () =>
|
|
5051
|
+
onError: () => T(C)
|
|
4996
5052
|
}) : x && b ? /* @__PURE__ */ Q("span", {
|
|
4997
5053
|
class: "markup-avatar-initials",
|
|
4998
5054
|
children: b
|
|
@@ -5002,7 +5058,7 @@ function mc({ identity: e, position: t, isSigningIn: n, isSigningOut: r, dashboa
|
|
|
5002
5058
|
children: y
|
|
5003
5059
|
}) : null]
|
|
5004
5060
|
}), d ? /* @__PURE__ */ Q("div", {
|
|
5005
|
-
class: Z("markup-pop",
|
|
5061
|
+
class: Z("markup-pop", O, f && "is-leaving"),
|
|
5006
5062
|
"data-pop": "identity",
|
|
5007
5063
|
role: "menu",
|
|
5008
5064
|
inert: f || void 0,
|
|
@@ -5012,9 +5068,9 @@ function mc({ identity: e, position: t, isSigningIn: n, isSigningOut: r, dashboa
|
|
|
5012
5068
|
children: [/* @__PURE__ */ Q("span", {
|
|
5013
5069
|
class: "nm",
|
|
5014
5070
|
children: y ?? "Account"
|
|
5015
|
-
}),
|
|
5071
|
+
}), D ? /* @__PURE__ */ Q("span", {
|
|
5016
5072
|
class: "em",
|
|
5017
|
-
children:
|
|
5073
|
+
children: D
|
|
5018
5074
|
}) : null]
|
|
5019
5075
|
}),
|
|
5020
5076
|
/* @__PURE__ */ Q("a", {
|
|
@@ -5084,12 +5140,12 @@ function mc({ identity: e, position: t, isSigningIn: n, isSigningOut: r, dashboa
|
|
|
5084
5140
|
}) : null]
|
|
5085
5141
|
});
|
|
5086
5142
|
}
|
|
5087
|
-
function
|
|
5143
|
+
function Cc(e) {
|
|
5088
5144
|
return e && e.trim().split(/\s+/).slice(0, 2).map((e) => e[0]?.toUpperCase() ?? "").join("") || null;
|
|
5089
5145
|
}
|
|
5090
5146
|
//#endregion
|
|
5091
5147
|
//#region src/runtime/use-drag.ts
|
|
5092
|
-
function
|
|
5148
|
+
function wc(e) {
|
|
5093
5149
|
let t = U(e);
|
|
5094
5150
|
H(() => {
|
|
5095
5151
|
t.current = e;
|
|
@@ -5119,8 +5175,8 @@ function gc(e) {
|
|
|
5119
5175
|
h = !0, r(!0), t.current.onStart?.();
|
|
5120
5176
|
}
|
|
5121
5177
|
let a = Math.max(p, window.innerWidth - u - p), _ = Math.max(p, window.innerHeight - d - p), v = {
|
|
5122
|
-
left:
|
|
5123
|
-
top:
|
|
5178
|
+
left: Tc(c + n, p, a),
|
|
5179
|
+
top: Tc(l + i, p, _)
|
|
5124
5180
|
};
|
|
5125
5181
|
g = v, t.current.onMove(v);
|
|
5126
5182
|
}
|
|
@@ -5135,12 +5191,12 @@ function gc(e) {
|
|
|
5135
5191
|
isDragging: n
|
|
5136
5192
|
};
|
|
5137
5193
|
}
|
|
5138
|
-
function
|
|
5194
|
+
function Tc(e, t, n) {
|
|
5139
5195
|
return Math.max(t, Math.min(n, e));
|
|
5140
5196
|
}
|
|
5141
5197
|
//#endregion
|
|
5142
5198
|
//#region src/runtime/use-focus-trap.ts
|
|
5143
|
-
var
|
|
5199
|
+
var Ec = [
|
|
5144
5200
|
"a[href]",
|
|
5145
5201
|
"button:not([disabled])",
|
|
5146
5202
|
"input:not([disabled])",
|
|
@@ -5148,14 +5204,14 @@ var vc = [
|
|
|
5148
5204
|
"textarea:not([disabled])",
|
|
5149
5205
|
"[tabindex]:not([tabindex=\"-1\"])"
|
|
5150
5206
|
].join(",");
|
|
5151
|
-
function
|
|
5207
|
+
function Dc(e, t) {
|
|
5152
5208
|
V(() => {
|
|
5153
5209
|
if (!t) return;
|
|
5154
5210
|
let n = e.current;
|
|
5155
5211
|
if (!n) return;
|
|
5156
5212
|
function r(e) {
|
|
5157
5213
|
if (e.key !== "Tab") return;
|
|
5158
|
-
let t = Array.from(n.querySelectorAll(
|
|
5214
|
+
let t = Array.from(n.querySelectorAll(Ec)), r = t[0], i = t[t.length - 1];
|
|
5159
5215
|
if (!r || !i) return;
|
|
5160
5216
|
let a = n.getRootNode(), o = a instanceof ShadowRoot ? a.activeElement : document.activeElement;
|
|
5161
5217
|
(e.shiftKey ? o === r : o === i) && (e.preventDefault(), (e.shiftKey ? i : r).focus());
|
|
@@ -5165,7 +5221,7 @@ function yc(e, t) {
|
|
|
5165
5221
|
}
|
|
5166
5222
|
//#endregion
|
|
5167
5223
|
//#region src/runtime/use-object-url.ts
|
|
5168
|
-
function
|
|
5224
|
+
function Oc(e) {
|
|
5169
5225
|
let [t, n] = B(null);
|
|
5170
5226
|
return V(() => {
|
|
5171
5227
|
if (!e) {
|
|
@@ -5178,7 +5234,7 @@ function bc(e) {
|
|
|
5178
5234
|
}
|
|
5179
5235
|
//#endregion
|
|
5180
5236
|
//#region src/runtime/ui/author-prompt.tsx
|
|
5181
|
-
function
|
|
5237
|
+
function kc({ mode: e = "guest-or-sign-in", isPending: t, isConnecting: n = !1, isSigningIn: r = !1, onSubmit: i, onCancel: a, onSignIn: o, onSignOut: s }) {
|
|
5182
5238
|
let [c, l] = B(""), [u, d] = B(""), f = U(null);
|
|
5183
5239
|
V(() => {
|
|
5184
5240
|
f.current?.focus();
|
|
@@ -5312,27 +5368,27 @@ function xc({ mode: e = "guest-or-sign-in", isPending: t, isConnecting: n = !1,
|
|
|
5312
5368
|
}
|
|
5313
5369
|
//#endregion
|
|
5314
5370
|
//#region src/runtime/mention-input.ts
|
|
5315
|
-
var
|
|
5371
|
+
var Ac = "data-markup-mention", jc = "data-markup-mention-name", Mc = /* @__PURE__ */ new Set([
|
|
5316
5372
|
"DIV",
|
|
5317
5373
|
"P",
|
|
5318
5374
|
"LI",
|
|
5319
5375
|
"BLOCKQUOTE",
|
|
5320
5376
|
"PRE"
|
|
5321
|
-
]),
|
|
5322
|
-
function
|
|
5377
|
+
]), Nc = 3, Pc = 1;
|
|
5378
|
+
function Fc(e) {
|
|
5323
5379
|
let t = "", n = (r) => {
|
|
5324
5380
|
let i = r.childNodes;
|
|
5325
5381
|
for (let a = 0; a < i.length; a++) {
|
|
5326
5382
|
let o = i[a];
|
|
5327
5383
|
if (!o) continue;
|
|
5328
|
-
if (o.nodeType ===
|
|
5384
|
+
if (o.nodeType === Nc) {
|
|
5329
5385
|
t += o.data;
|
|
5330
5386
|
continue;
|
|
5331
5387
|
}
|
|
5332
|
-
if (o.nodeType !==
|
|
5333
|
-
let s = o, c = s.getAttribute(
|
|
5388
|
+
if (o.nodeType !== Pc) continue;
|
|
5389
|
+
let s = o, c = s.getAttribute(Ac);
|
|
5334
5390
|
if (c) {
|
|
5335
|
-
let e =
|
|
5391
|
+
let e = Ic(s);
|
|
5336
5392
|
t += qr({
|
|
5337
5393
|
userId: c,
|
|
5338
5394
|
name: e
|
|
@@ -5343,77 +5399,77 @@ function Dc(e) {
|
|
|
5343
5399
|
(r !== e || a !== i.length - 1) && (t += "\n");
|
|
5344
5400
|
continue;
|
|
5345
5401
|
}
|
|
5346
|
-
|
|
5402
|
+
Mc.has(s.tagName) && t !== "" && !t.endsWith("\n") && (t += "\n"), n(s);
|
|
5347
5403
|
}
|
|
5348
5404
|
};
|
|
5349
5405
|
return n(e), t;
|
|
5350
5406
|
}
|
|
5351
|
-
function
|
|
5352
|
-
return e.getAttribute(
|
|
5407
|
+
function Ic(e) {
|
|
5408
|
+
return e.getAttribute(jc) || (e.textContent ?? "").replace(/^@/, "");
|
|
5353
5409
|
}
|
|
5354
|
-
function
|
|
5410
|
+
function Lc(e, t, n) {
|
|
5355
5411
|
let r = e.createElement("span");
|
|
5356
|
-
return r.className = n, r.setAttribute("contenteditable", "false"), r.setAttribute(
|
|
5412
|
+
return r.className = n, r.setAttribute("contenteditable", "false"), r.setAttribute(Ac, t.userId), r.setAttribute(jc, t.name), r.textContent = `@${t.name}`, r;
|
|
5357
5413
|
}
|
|
5358
|
-
function
|
|
5414
|
+
function Rc(e, t, n) {
|
|
5359
5415
|
let r = e.createDocumentFragment();
|
|
5360
5416
|
for (let i of Wr(t)) {
|
|
5361
5417
|
if (i.type === "text") {
|
|
5362
5418
|
i.value && r.appendChild(e.createTextNode(i.value));
|
|
5363
5419
|
continue;
|
|
5364
5420
|
}
|
|
5365
|
-
r.appendChild(
|
|
5421
|
+
r.appendChild(Lc(e, {
|
|
5366
5422
|
userId: i.userId,
|
|
5367
5423
|
name: i.name
|
|
5368
5424
|
}, n));
|
|
5369
5425
|
}
|
|
5370
5426
|
return r;
|
|
5371
5427
|
}
|
|
5372
|
-
function
|
|
5428
|
+
function zc(e) {
|
|
5373
5429
|
let t = e.getRootNode();
|
|
5374
5430
|
return typeof t.getSelection == "function" ? t.getSelection() : e.ownerDocument.getSelection();
|
|
5375
5431
|
}
|
|
5376
|
-
function
|
|
5377
|
-
let t =
|
|
5432
|
+
function Bc(e) {
|
|
5433
|
+
let t = zc(e);
|
|
5378
5434
|
if (!t || t.rangeCount === 0 || !t.isCollapsed) return null;
|
|
5379
5435
|
let n = t.focusNode;
|
|
5380
|
-
return !n || n.nodeType !==
|
|
5436
|
+
return !n || n.nodeType !== Nc || !e.contains(n) || Vc(n, e) ? null : {
|
|
5381
5437
|
node: n,
|
|
5382
5438
|
offset: t.focusOffset
|
|
5383
5439
|
};
|
|
5384
5440
|
}
|
|
5385
|
-
function
|
|
5441
|
+
function Vc(e, t) {
|
|
5386
5442
|
let n = e;
|
|
5387
5443
|
for (; n && n !== t;) {
|
|
5388
|
-
if (n.nodeType ===
|
|
5444
|
+
if (n.nodeType === Pc && n.hasAttribute("data-markup-mention")) return n;
|
|
5389
5445
|
n = n.parentNode;
|
|
5390
5446
|
}
|
|
5391
5447
|
return null;
|
|
5392
5448
|
}
|
|
5393
|
-
function
|
|
5394
|
-
let t =
|
|
5449
|
+
function Hc(e) {
|
|
5450
|
+
let t = zc(e);
|
|
5395
5451
|
if (!t || t.rangeCount === 0 || !t.isCollapsed) return;
|
|
5396
5452
|
let n = t.focusNode;
|
|
5397
5453
|
if (!n || !e.contains(n)) return;
|
|
5398
|
-
let r =
|
|
5454
|
+
let r = Vc(n, e);
|
|
5399
5455
|
if (!r) return;
|
|
5400
5456
|
let i = r.nextSibling;
|
|
5401
|
-
(!i || i.nodeType !==
|
|
5457
|
+
(!i || i.nodeType !== Nc) && (i = e.ownerDocument.createTextNode(""), r.parentNode?.insertBefore(i, r.nextSibling)), Uc(e, i, 0);
|
|
5402
5458
|
}
|
|
5403
|
-
function
|
|
5404
|
-
let r =
|
|
5459
|
+
function Uc(e, t, n) {
|
|
5460
|
+
let r = zc(e);
|
|
5405
5461
|
if (!r) return;
|
|
5406
5462
|
let i = e.ownerDocument.createRange();
|
|
5407
5463
|
i.setStart(t, n), i.collapse(!0), r.removeAllRanges(), r.addRange(i);
|
|
5408
5464
|
}
|
|
5409
|
-
function
|
|
5465
|
+
function Wc(e) {
|
|
5410
5466
|
let t = Kr(e.node.data, e.offset);
|
|
5411
5467
|
return t ? {
|
|
5412
5468
|
...t,
|
|
5413
5469
|
textNode: e.node
|
|
5414
5470
|
} : null;
|
|
5415
5471
|
}
|
|
5416
|
-
function
|
|
5472
|
+
function Gc(e, t, n, r) {
|
|
5417
5473
|
if (qr(n) == null) return !1;
|
|
5418
5474
|
let i = t.textNode;
|
|
5419
5475
|
if (!e.contains(i)) return !1;
|
|
@@ -5421,31 +5477,31 @@ function Lc(e, t, n, r) {
|
|
|
5421
5477
|
if (!a || t.caret > i.data.length) return !1;
|
|
5422
5478
|
i.deleteData(t.at, t.caret - t.at);
|
|
5423
5479
|
let o = i.splitText(t.at);
|
|
5424
|
-
return a.insertBefore(
|
|
5480
|
+
return a.insertBefore(Lc(e.ownerDocument, n, r), o), o.data.startsWith(" ") || o.insertData(0, " "), Uc(e, o, 1), !0;
|
|
5425
5481
|
}
|
|
5426
|
-
function
|
|
5427
|
-
let n =
|
|
5482
|
+
function Kc(e, t) {
|
|
5483
|
+
let n = zc(e);
|
|
5428
5484
|
if (!n || n.rangeCount === 0) return;
|
|
5429
5485
|
let r = n.getRangeAt(0);
|
|
5430
5486
|
if (!e.contains(r.commonAncestorContainer)) return;
|
|
5431
5487
|
r.deleteContents();
|
|
5432
5488
|
let { startContainer: i, startOffset: a } = r;
|
|
5433
|
-
if (i.nodeType ===
|
|
5489
|
+
if (i.nodeType === Nc) {
|
|
5434
5490
|
let n = i;
|
|
5435
|
-
n.insertData(a, t),
|
|
5491
|
+
n.insertData(a, t), Uc(e, n, a + t.length);
|
|
5436
5492
|
return;
|
|
5437
5493
|
}
|
|
5438
5494
|
let o = e.ownerDocument.createTextNode(t);
|
|
5439
|
-
r.insertNode(o),
|
|
5495
|
+
r.insertNode(o), Uc(e, o, o.data.length);
|
|
5440
5496
|
}
|
|
5441
|
-
function
|
|
5497
|
+
function qc(e, t) {
|
|
5442
5498
|
let n = e.ownerDocument, r = null, i = null, a = !0;
|
|
5443
5499
|
function o(t) {
|
|
5444
5500
|
let n = t.length === 0;
|
|
5445
5501
|
(n !== a || e.hasAttribute("data-empty") !== n) && (a = n, e.toggleAttribute("data-empty", n));
|
|
5446
5502
|
}
|
|
5447
5503
|
function s() {
|
|
5448
|
-
let n =
|
|
5504
|
+
let n = Fc(e);
|
|
5449
5505
|
o(n), t.onChange(n);
|
|
5450
5506
|
}
|
|
5451
5507
|
function c(e) {
|
|
@@ -5461,7 +5517,7 @@ function zc(e, t) {
|
|
|
5461
5517
|
c(null);
|
|
5462
5518
|
return;
|
|
5463
5519
|
}
|
|
5464
|
-
let n =
|
|
5520
|
+
let n = Bc(e), r = n ? Wc(n) : null;
|
|
5465
5521
|
if (r && i && r.textNode === i.node && r.at === i.at) {
|
|
5466
5522
|
c(null);
|
|
5467
5523
|
return;
|
|
@@ -5469,29 +5525,29 @@ function zc(e, t) {
|
|
|
5469
5525
|
i = null, c(r);
|
|
5470
5526
|
}
|
|
5471
5527
|
function u(r) {
|
|
5472
|
-
e.replaceChildren(
|
|
5528
|
+
e.replaceChildren(Rc(n, r, t.chipClass)), o(Fc(e)), i = null, c(null);
|
|
5473
5529
|
}
|
|
5474
5530
|
let d = () => {
|
|
5475
5531
|
s(), l();
|
|
5476
5532
|
}, f = () => l(), p = () => {
|
|
5477
|
-
|
|
5533
|
+
Hc(e), l();
|
|
5478
5534
|
}, m = (t) => {
|
|
5479
5535
|
let n = t.clipboardData?.getData("text/plain");
|
|
5480
|
-
t.preventDefault(), n && (
|
|
5536
|
+
t.preventDefault(), n && (Kc(e, n.replace(/\r\n?/g, "\n")), s(), l());
|
|
5481
5537
|
}, h = (e) => {
|
|
5482
5538
|
e.preventDefault();
|
|
5483
5539
|
};
|
|
5484
5540
|
return e.addEventListener("input", d), e.addEventListener("keyup", f), e.addEventListener("mouseup", p), e.addEventListener("focus", p), e.addEventListener("paste", m), e.addEventListener("drop", h), u(t.initialValue ?? ""), {
|
|
5485
|
-
getValue: () =>
|
|
5541
|
+
getValue: () => Fc(e),
|
|
5486
5542
|
setValue: u,
|
|
5487
5543
|
focus() {
|
|
5488
5544
|
e.focus();
|
|
5489
5545
|
let t = e.lastChild;
|
|
5490
|
-
t && (t.nodeType ===
|
|
5546
|
+
t && (t.nodeType === Nc ? Uc(e, t, t.data.length) : Uc(e, e, e.childNodes.length));
|
|
5491
5547
|
},
|
|
5492
5548
|
insertMention(n) {
|
|
5493
|
-
let a =
|
|
5494
|
-
o &&
|
|
5549
|
+
let a = Bc(e), o = (a ? Wc(a) : null) ?? r;
|
|
5550
|
+
o && Gc(e, o, n, t.chipClass) && (s(), i = null, c(null));
|
|
5495
5551
|
},
|
|
5496
5552
|
syncTrigger: l,
|
|
5497
5553
|
clearTrigger: () => c(null),
|
|
@@ -5506,42 +5562,42 @@ function zc(e, t) {
|
|
|
5506
5562
|
}
|
|
5507
5563
|
};
|
|
5508
5564
|
}
|
|
5509
|
-
var
|
|
5510
|
-
function
|
|
5511
|
-
if (
|
|
5565
|
+
var Jc = null;
|
|
5566
|
+
function Yc() {
|
|
5567
|
+
if (Jc) return Jc;
|
|
5512
5568
|
if (typeof document > "u") return "true";
|
|
5513
5569
|
let e = document.createElement("div");
|
|
5514
5570
|
try {
|
|
5515
|
-
e.contentEditable = "plaintext-only",
|
|
5571
|
+
e.contentEditable = "plaintext-only", Jc = e.contentEditable === "plaintext-only" ? "plaintext-only" : "true";
|
|
5516
5572
|
} catch {
|
|
5517
|
-
|
|
5573
|
+
Jc = "true";
|
|
5518
5574
|
}
|
|
5519
|
-
return
|
|
5575
|
+
return Jc;
|
|
5520
5576
|
}
|
|
5521
5577
|
//#endregion
|
|
5522
5578
|
//#region src/lib/linkify.ts
|
|
5523
|
-
var
|
|
5579
|
+
var Xc = /(^|[\s([{<'"])((?:https?:\/\/|www\.)[^\s<>'"]+)/gi, Zc = ".,;:!?", Qc = {
|
|
5524
5580
|
")": "(",
|
|
5525
5581
|
"]": "[",
|
|
5526
5582
|
"}": "{"
|
|
5527
5583
|
};
|
|
5528
|
-
function
|
|
5584
|
+
function $c(e, t) {
|
|
5529
5585
|
let n = 0;
|
|
5530
5586
|
for (let r of e) r === t && (n += 1);
|
|
5531
5587
|
return n;
|
|
5532
5588
|
}
|
|
5533
|
-
function
|
|
5589
|
+
function el(e) {
|
|
5534
5590
|
let t = e.length;
|
|
5535
5591
|
for (; t > 0;) {
|
|
5536
5592
|
let n = e[t - 1] ?? "";
|
|
5537
|
-
if (
|
|
5593
|
+
if (Zc.includes(n)) {
|
|
5538
5594
|
--t;
|
|
5539
5595
|
continue;
|
|
5540
5596
|
}
|
|
5541
|
-
let r =
|
|
5597
|
+
let r = Qc[n];
|
|
5542
5598
|
if (r !== void 0) {
|
|
5543
5599
|
let i = e.slice(0, t);
|
|
5544
|
-
if (
|
|
5600
|
+
if ($c(i, n) > $c(i, r)) {
|
|
5545
5601
|
--t;
|
|
5546
5602
|
continue;
|
|
5547
5603
|
}
|
|
@@ -5550,15 +5606,15 @@ function Kc(e) {
|
|
|
5550
5606
|
}
|
|
5551
5607
|
return e.slice(0, t);
|
|
5552
5608
|
}
|
|
5553
|
-
function
|
|
5609
|
+
function tl(e) {
|
|
5554
5610
|
let t = /^https?:\/\//i.test(e) ? e : `https://${e}`, n = t.replace(/^https?:\/\//i, "").split(/[/?#]/, 1)[0] ?? "";
|
|
5555
5611
|
return !n.includes(".") || n.startsWith(".") || n.endsWith(".") ? null : t;
|
|
5556
5612
|
}
|
|
5557
|
-
function
|
|
5613
|
+
function nl(e) {
|
|
5558
5614
|
if (!e) return [];
|
|
5559
|
-
let t = [], n = 0, r = new RegExp(
|
|
5615
|
+
let t = [], n = 0, r = new RegExp(Xc.source, "gi");
|
|
5560
5616
|
for (let i = r.exec(e); i !== null; i = r.exec(e)) {
|
|
5561
|
-
let a = i[1] ?? "", o =
|
|
5617
|
+
let a = i[1] ?? "", o = el(i[2] ?? ""), s = o ? tl(o) : null;
|
|
5562
5618
|
if (!s) continue;
|
|
5563
5619
|
let c = i.index + a.length;
|
|
5564
5620
|
c > n && t.push({
|
|
@@ -5577,14 +5633,14 @@ function Jc(e) {
|
|
|
5577
5633
|
}
|
|
5578
5634
|
//#endregion
|
|
5579
5635
|
//#region src/runtime/ui/mentions.tsx
|
|
5580
|
-
function
|
|
5636
|
+
function rl({ body: e, mentions: t, trailing: n }) {
|
|
5581
5637
|
let r = rt(() => new Set(t), [t]);
|
|
5582
5638
|
return /* @__PURE__ */ Q("p", {
|
|
5583
5639
|
class: "markup-comment-body",
|
|
5584
5640
|
children: [rt(() => Wr(e), [e]).map((e, t) => e.type === "mention" ? r.has(e.userId) ? /* @__PURE__ */ Q("span", {
|
|
5585
5641
|
class: "markup-mention-chip",
|
|
5586
5642
|
children: ["@", e.name]
|
|
5587
|
-
}, t) : /* @__PURE__ */ Q("span", { children: ["@", e.name] }, t) :
|
|
5643
|
+
}, t) : /* @__PURE__ */ Q("span", { children: ["@", e.name] }, t) : nl(e.value).map((e, n) => e.type === "link" ? /* @__PURE__ */ Q("a", {
|
|
5588
5644
|
class: "markup-comment-link",
|
|
5589
5645
|
href: e.href,
|
|
5590
5646
|
target: "_blank",
|
|
@@ -5593,7 +5649,7 @@ function Yc({ body: e, mentions: t, trailing: n }) {
|
|
|
5593
5649
|
}, `${t}-${n}`) : /* @__PURE__ */ Q("span", { children: e.value }, `${t}-${n}`))), n]
|
|
5594
5650
|
});
|
|
5595
5651
|
}
|
|
5596
|
-
function
|
|
5652
|
+
function il(e) {
|
|
5597
5653
|
let { members: t, trigger: n, onSelect: r, onClose: i } = e, [a, o] = B(0), s = rt(() => {
|
|
5598
5654
|
if (!n) return [];
|
|
5599
5655
|
let e = n.query.toLowerCase();
|
|
@@ -5621,12 +5677,12 @@ function Xc(e) {
|
|
|
5621
5677
|
handleKeyDown: c
|
|
5622
5678
|
};
|
|
5623
5679
|
}
|
|
5624
|
-
function
|
|
5680
|
+
function al({ items: e, highlight: t, setHighlight: n, onSelect: r, anchor: i }) {
|
|
5625
5681
|
let a = U(null);
|
|
5626
5682
|
return H(() => {
|
|
5627
5683
|
let e = null;
|
|
5628
5684
|
function t() {
|
|
5629
|
-
i.current && a.current &&
|
|
5685
|
+
i.current && a.current && cl(i.current, a.current);
|
|
5630
5686
|
}
|
|
5631
5687
|
function n() {
|
|
5632
5688
|
e ??= requestAnimationFrame(() => {
|
|
@@ -5668,16 +5724,16 @@ function Zc({ items: e, highlight: t, setHighlight: n, onSelect: r, anchor: i })
|
|
|
5668
5724
|
}, e.userId))
|
|
5669
5725
|
});
|
|
5670
5726
|
}
|
|
5671
|
-
var
|
|
5672
|
-
function
|
|
5727
|
+
var ol = 4, sl = 8;
|
|
5728
|
+
function cl(e, t) {
|
|
5673
5729
|
let n = e.getBoundingClientRect(), r = n.bottom > 0 && n.top < window.innerHeight && n.right > 0 && n.left < window.innerWidth;
|
|
5674
5730
|
if (t.style.visibility = r ? "" : "hidden", !r) return;
|
|
5675
|
-
let i = t.offsetHeight, a = n.top -
|
|
5676
|
-
t.style.top = `${Math.max(
|
|
5731
|
+
let i = t.offsetHeight, a = n.top - sl, o = window.innerHeight - n.bottom - sl, s = a >= i + ol || a >= o ? n.top - ol - i : n.bottom + ol, c = window.innerHeight - i - sl;
|
|
5732
|
+
t.style.top = `${Math.max(sl, Math.min(s, c))}px`, t.style.left = `${n.left}px`, t.style.width = `${n.width}px`;
|
|
5677
5733
|
}
|
|
5678
5734
|
//#endregion
|
|
5679
5735
|
//#region src/runtime/ui/mention-input.tsx
|
|
5680
|
-
function
|
|
5736
|
+
function ll({ value: e, onChange: t, onKeyDown: n, members: r, label: i, placeholder: a, disabled: o = !1, autoFocus: s = !1, class: c, handle: l }) {
|
|
5681
5737
|
let u = U(null), d = U(null), [f, p] = B(null), m = U(t), h = U(r);
|
|
5682
5738
|
H(() => {
|
|
5683
5739
|
m.current = t, h.current = r;
|
|
@@ -5686,7 +5742,7 @@ function tl({ value: e, onChange: t, onKeyDown: n, members: r, label: i, placeho
|
|
|
5686
5742
|
H(() => {
|
|
5687
5743
|
let e = u.current;
|
|
5688
5744
|
if (!e) return;
|
|
5689
|
-
let t =
|
|
5745
|
+
let t = qc(e, {
|
|
5690
5746
|
chipClass: "markup-mention-chip",
|
|
5691
5747
|
initialValue: g.current,
|
|
5692
5748
|
onChange: (e) => m.current(e),
|
|
@@ -5706,7 +5762,7 @@ function tl({ value: e, onChange: t, onKeyDown: n, members: r, label: i, placeho
|
|
|
5706
5762
|
let t = d.current;
|
|
5707
5763
|
t && t.getValue() !== e && t.setValue(e);
|
|
5708
5764
|
}, [e]);
|
|
5709
|
-
let _ =
|
|
5765
|
+
let _ = il({
|
|
5710
5766
|
members: r ?? [],
|
|
5711
5767
|
trigger: f,
|
|
5712
5768
|
onSelect: (e) => d.current?.insertMention(e),
|
|
@@ -5719,7 +5775,7 @@ function tl({ value: e, onChange: t, onKeyDown: n, members: r, label: i, placeho
|
|
|
5719
5775
|
"aria-label": i,
|
|
5720
5776
|
"aria-disabled": o || void 0,
|
|
5721
5777
|
class: Z("markup-mention-input", c),
|
|
5722
|
-
contentEditable: o ? "false" :
|
|
5778
|
+
contentEditable: o ? "false" : Yc(),
|
|
5723
5779
|
"data-placeholder": a,
|
|
5724
5780
|
tabIndex: o ? -1 : 0,
|
|
5725
5781
|
onKeyDown: (e) => {
|
|
@@ -5728,7 +5784,7 @@ function tl({ value: e, onChange: t, onKeyDown: n, members: r, label: i, placeho
|
|
|
5728
5784
|
onBlur: () => {
|
|
5729
5785
|
setTimeout(() => d.current?.clearTrigger(), 120);
|
|
5730
5786
|
}
|
|
5731
|
-
}), _.isOpen ? /* @__PURE__ */ Q(
|
|
5787
|
+
}), _.isOpen ? /* @__PURE__ */ Q(al, {
|
|
5732
5788
|
items: _.items,
|
|
5733
5789
|
highlight: _.highlight,
|
|
5734
5790
|
setHighlight: _.setHighlight,
|
|
@@ -5738,8 +5794,8 @@ function tl({ value: e, onChange: t, onKeyDown: n, members: r, label: i, placeho
|
|
|
5738
5794
|
}
|
|
5739
5795
|
//#endregion
|
|
5740
5796
|
//#region src/runtime/ui/composer.tsx
|
|
5741
|
-
var
|
|
5742
|
-
function
|
|
5797
|
+
var ul = 4e3;
|
|
5798
|
+
function dl({ label: e, placeholder: t = "Leave feedback…", submitLabel: n = "Post", initialFocus: r = !0, isPending: i, error: a, onSubmit: o, onDirtyChange: s, members: c }) {
|
|
5743
5799
|
let [l, u] = B(""), d = U(null), f = U(!1);
|
|
5744
5800
|
V(() => {
|
|
5745
5801
|
f.current && !i && !a && (u(""), s?.(!1), d.current?.focus()), f.current = i;
|
|
@@ -5748,7 +5804,7 @@ function rl({ label: e, placeholder: t = "Leave feedback…", submitLabel: n = "
|
|
|
5748
5804
|
a,
|
|
5749
5805
|
s
|
|
5750
5806
|
]);
|
|
5751
|
-
let p =
|
|
5807
|
+
let p = ul - l.length, m = p < 0;
|
|
5752
5808
|
function h(e) {
|
|
5753
5809
|
e?.preventDefault();
|
|
5754
5810
|
let t = l.trim();
|
|
@@ -5773,7 +5829,7 @@ function rl({ label: e, placeholder: t = "Leave feedback…", submitLabel: n = "
|
|
|
5773
5829
|
class: Z("markup-composer", _ && "is-filled"),
|
|
5774
5830
|
onSubmit: h,
|
|
5775
5831
|
children: [
|
|
5776
|
-
/* @__PURE__ */ Q(
|
|
5832
|
+
/* @__PURE__ */ Q(ll, {
|
|
5777
5833
|
class: "markup-composer-input",
|
|
5778
5834
|
label: e,
|
|
5779
5835
|
placeholder: t,
|
|
@@ -5829,20 +5885,20 @@ function rl({ label: e, placeholder: t = "Leave feedback…", submitLabel: n = "
|
|
|
5829
5885
|
}
|
|
5830
5886
|
//#endregion
|
|
5831
5887
|
//#region src/runtime/ui/new-thread-popover.tsx
|
|
5832
|
-
var
|
|
5833
|
-
function
|
|
5888
|
+
var fl = [], pl = "https://markup.pixelmatters.dev/docs/install#9-screenshots-privacy";
|
|
5889
|
+
function ml({ pageX: e, pageY: t, authorName: n, authorPromptMode: r, isVerified: i, isIdentityResolving: a, isSigningIn: o, isPending: s, error: c, screenshot: l, isScreenshotCapturing: u, screenshotFailed: d, screenshotRedactedCount: f, screenshotRedactedSelectors: p, members: m = fl, isLeaving: h = !1, onAuthor: g, onSignIn: _, onSignOut: v, onSubmit: y, onClose: b }) {
|
|
5834
5890
|
let x = U(null);
|
|
5835
|
-
|
|
5836
|
-
let C = U(!1), w = U(!1), [
|
|
5837
|
-
w.current = e,
|
|
5838
|
-
}, []),
|
|
5839
|
-
w.current || (C.current ?
|
|
5840
|
-
}, [b,
|
|
5841
|
-
|
|
5842
|
-
}, [
|
|
5891
|
+
Dc(x, !h);
|
|
5892
|
+
let C = U(!1), w = U(!1), [T, E] = B(!1), D = ei(T || null, 120), O = W((e) => {
|
|
5893
|
+
w.current = e, E(e);
|
|
5894
|
+
}, []), ee = W(() => {
|
|
5895
|
+
w.current || (C.current ? O(!0) : b());
|
|
5896
|
+
}, [b, O]), k = W(() => {
|
|
5897
|
+
O(!1), x.current?.querySelector(".markup-mention-input")?.focus();
|
|
5898
|
+
}, [O]), [A, j] = B(!1), [M, N] = B(!1), P = Oc(l), F = U(null), [te, ne] = B(null), { onPointerDown: re, isDragging: ie } = wc({
|
|
5843
5899
|
targetRef: x,
|
|
5844
5900
|
shouldStart: (e) => !e.target?.closest("button, a, input, textarea, select"),
|
|
5845
|
-
onMove:
|
|
5901
|
+
onMove: ne
|
|
5846
5902
|
});
|
|
5847
5903
|
H(() => {
|
|
5848
5904
|
let e = x.current;
|
|
@@ -5858,31 +5914,32 @@ function ol({ pageX: e, pageY: t, authorName: n, authorPromptMode: r, isVerified
|
|
|
5858
5914
|
t.preventDefault(), t.stopPropagation();
|
|
5859
5915
|
return;
|
|
5860
5916
|
}
|
|
5861
|
-
C.current && (t.preventDefault(), t.stopPropagation()),
|
|
5917
|
+
C.current && (t.preventDefault(), t.stopPropagation()), ee();
|
|
5862
5918
|
}
|
|
5863
5919
|
}
|
|
5864
5920
|
function n(e) {
|
|
5865
|
-
e.key !== "Escape" || e.defaultPrevented ||
|
|
5921
|
+
e.key !== "Escape" || e.defaultPrevented || F.current?.open || (e.preventDefault(), w.current ? k() : ee());
|
|
5866
5922
|
}
|
|
5867
|
-
|
|
5868
|
-
|
|
5923
|
+
let r = bc(e, t);
|
|
5924
|
+
return document.addEventListener("keydown", n), () => {
|
|
5925
|
+
r(), document.removeEventListener("keydown", n);
|
|
5869
5926
|
};
|
|
5870
5927
|
}, [
|
|
5871
|
-
|
|
5872
|
-
|
|
5928
|
+
ee,
|
|
5929
|
+
k,
|
|
5873
5930
|
h
|
|
5874
5931
|
]), V(() => {
|
|
5875
|
-
|
|
5876
|
-
}, [
|
|
5877
|
-
let ae =
|
|
5932
|
+
T && x.current?.querySelector(".markup-discard-confirm-keep")?.focus();
|
|
5933
|
+
}, [T]);
|
|
5934
|
+
let ae = hl(e - window.scrollX + 16, 12, window.innerWidth - 320 - 12), oe = hl(t - window.scrollY - 16, 12, window.innerHeight - 220), se = typeof window < "u" ? window.location.href : "", ce = l != null, le = u || ce || d, ue = A && ce;
|
|
5878
5935
|
return /* @__PURE__ */ Q("div", {
|
|
5879
5936
|
ref: x,
|
|
5880
|
-
class: Z("markup-popover",
|
|
5937
|
+
class: Z("markup-popover", te && "is-floating", ie && "is-dragging", h && "is-leaving"),
|
|
5881
5938
|
popover: "manual",
|
|
5882
5939
|
inert: h || void 0,
|
|
5883
5940
|
style: {
|
|
5884
|
-
"--markup-pop-x": `${
|
|
5885
|
-
"--markup-pop-y": `${
|
|
5941
|
+
"--markup-pop-x": `${te?.left ?? ae}px`,
|
|
5942
|
+
"--markup-pop-y": `${te?.top ?? oe}px`
|
|
5886
5943
|
},
|
|
5887
5944
|
role: "dialog",
|
|
5888
5945
|
"aria-label": "New markup",
|
|
@@ -5898,7 +5955,7 @@ function ol({ pageX: e, pageY: t, authorName: n, authorPromptMode: r, isVerified
|
|
|
5898
5955
|
type: "button",
|
|
5899
5956
|
class: "markup-icon-btn",
|
|
5900
5957
|
"aria-label": "Discard pin",
|
|
5901
|
-
onClick:
|
|
5958
|
+
onClick: ee,
|
|
5902
5959
|
children: /* @__PURE__ */ Q(Ws, { size: 16 })
|
|
5903
5960
|
})]
|
|
5904
5961
|
}),
|
|
@@ -5919,13 +5976,13 @@ function ol({ pageX: e, pageY: t, authorName: n, authorPromptMode: r, isVerified
|
|
|
5919
5976
|
}) : null
|
|
5920
5977
|
]
|
|
5921
5978
|
}),
|
|
5922
|
-
/* @__PURE__ */ Q(
|
|
5979
|
+
/* @__PURE__ */ Q(dl, {
|
|
5923
5980
|
label: "Feedback",
|
|
5924
5981
|
placeholder: "What's wrong, missing, or worth noting?",
|
|
5925
5982
|
submitLabel: "Post markup",
|
|
5926
5983
|
isPending: s,
|
|
5927
5984
|
error: c,
|
|
5928
|
-
onSubmit: (e) => y(e,
|
|
5985
|
+
onSubmit: (e) => y(e, A && ce),
|
|
5929
5986
|
onDirtyChange: (e) => {
|
|
5930
5987
|
C.current = e;
|
|
5931
5988
|
},
|
|
@@ -5957,38 +6014,38 @@ function ol({ pageX: e, pageY: t, authorName: n, authorPromptMode: r, isVerified
|
|
|
5957
6014
|
/* @__PURE__ */ Q("input", {
|
|
5958
6015
|
type: "checkbox",
|
|
5959
6016
|
class: "markup-screenshot-checkbox",
|
|
5960
|
-
checked:
|
|
5961
|
-
onChange: (e) =>
|
|
6017
|
+
checked: A,
|
|
6018
|
+
onChange: (e) => j(e.currentTarget.checked)
|
|
5962
6019
|
}),
|
|
5963
6020
|
/* @__PURE__ */ Q(Ys, { size: 12 }),
|
|
5964
6021
|
/* @__PURE__ */ Q("span", { children: "Attach screenshot" })
|
|
5965
6022
|
]
|
|
5966
6023
|
}),
|
|
5967
|
-
ue &&
|
|
6024
|
+
ue && P ? /* @__PURE__ */ Q("a", {
|
|
5968
6025
|
class: "markup-screenshot-thumb-link",
|
|
5969
|
-
href:
|
|
6026
|
+
href: P,
|
|
5970
6027
|
target: "_blank",
|
|
5971
6028
|
rel: "noopener",
|
|
5972
6029
|
title: "Preview screenshot",
|
|
5973
6030
|
"aria-label": "Preview screenshot",
|
|
5974
6031
|
onClick: (e) => {
|
|
5975
|
-
e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0 || (e.preventDefault(),
|
|
6032
|
+
e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button !== 0 || (e.preventDefault(), F.current?.showModal());
|
|
5976
6033
|
},
|
|
5977
6034
|
children: /* @__PURE__ */ Q("img", {
|
|
5978
6035
|
class: "markup-screenshot-thumb",
|
|
5979
|
-
src:
|
|
6036
|
+
src: P,
|
|
5980
6037
|
alt: ""
|
|
5981
6038
|
})
|
|
5982
6039
|
}) : null,
|
|
5983
6040
|
ue && f > 0 ? /* @__PURE__ */ Q("button", {
|
|
5984
6041
|
type: "button",
|
|
5985
6042
|
class: "markup-screenshot-redacted-chip",
|
|
5986
|
-
"aria-expanded":
|
|
5987
|
-
onClick: () =>
|
|
6043
|
+
"aria-expanded": M,
|
|
6044
|
+
onClick: () => N((e) => !e),
|
|
5988
6045
|
children: [
|
|
5989
6046
|
/* @__PURE__ */ Q("em", {
|
|
5990
6047
|
class: "markup-screenshot-redacted-arrow",
|
|
5991
|
-
children:
|
|
6048
|
+
children: M ? "▾" : "▸"
|
|
5992
6049
|
}),
|
|
5993
6050
|
f,
|
|
5994
6051
|
" ",
|
|
@@ -5998,7 +6055,7 @@ function ol({ pageX: e, pageY: t, authorName: n, authorPromptMode: r, isVerified
|
|
|
5998
6055
|
]
|
|
5999
6056
|
}) : null
|
|
6000
6057
|
]
|
|
6001
|
-
}), ue ? /* @__PURE__ */ Q(S, { children: [
|
|
6058
|
+
}), ue ? /* @__PURE__ */ Q(S, { children: [M && f > 0 ? /* @__PURE__ */ Q("div", {
|
|
6002
6059
|
class: "markup-screenshot-redacted-list",
|
|
6003
6060
|
children: p.map((e) => /* @__PURE__ */ Q("code", {
|
|
6004
6061
|
class: "markup-screenshot-redacted-selector",
|
|
@@ -6011,7 +6068,7 @@ function ol({ pageX: e, pageY: t, authorName: n, authorPromptMode: r, isVerified
|
|
|
6011
6068
|
" ",
|
|
6012
6069
|
/* @__PURE__ */ Q("a", {
|
|
6013
6070
|
class: "markup-screenshot-help-link",
|
|
6014
|
-
href:
|
|
6071
|
+
href: pl,
|
|
6015
6072
|
target: "_blank",
|
|
6016
6073
|
rel: "noopener noreferrer",
|
|
6017
6074
|
children: "More info here."
|
|
@@ -6020,7 +6077,7 @@ function ol({ pageX: e, pageY: t, authorName: n, authorPromptMode: r, isVerified
|
|
|
6020
6077
|
})] }) : null]
|
|
6021
6078
|
}) : null
|
|
6022
6079
|
]
|
|
6023
|
-
}) : /* @__PURE__ */ Q(
|
|
6080
|
+
}) : /* @__PURE__ */ Q(kc, {
|
|
6024
6081
|
mode: r,
|
|
6025
6082
|
isPending: s,
|
|
6026
6083
|
isConnecting: a,
|
|
@@ -6030,31 +6087,31 @@ function ol({ pageX: e, pageY: t, authorName: n, authorPromptMode: r, isVerified
|
|
|
6030
6087
|
onSignIn: _,
|
|
6031
6088
|
onSignOut: v
|
|
6032
6089
|
}),
|
|
6033
|
-
ue &&
|
|
6034
|
-
ref:
|
|
6090
|
+
ue && P ? /* @__PURE__ */ Q("dialog", {
|
|
6091
|
+
ref: F,
|
|
6035
6092
|
class: "markup-lightbox",
|
|
6036
|
-
onClick: () =>
|
|
6093
|
+
onClick: () => F.current?.close(),
|
|
6037
6094
|
children: [/* @__PURE__ */ Q("button", {
|
|
6038
6095
|
type: "button",
|
|
6039
6096
|
class: "markup-lightbox-close markup-icon-btn",
|
|
6040
6097
|
"aria-label": "Close screenshot",
|
|
6041
6098
|
onClick: (e) => {
|
|
6042
|
-
e.stopPropagation(),
|
|
6099
|
+
e.stopPropagation(), F.current?.close();
|
|
6043
6100
|
},
|
|
6044
6101
|
children: /* @__PURE__ */ Q(Ws, { size: 16 })
|
|
6045
6102
|
}), /* @__PURE__ */ Q("img", {
|
|
6046
6103
|
class: "markup-lightbox-img",
|
|
6047
|
-
src:
|
|
6104
|
+
src: P,
|
|
6048
6105
|
alt: "Screenshot preview",
|
|
6049
6106
|
onClick: (e) => e.stopPropagation()
|
|
6050
6107
|
})]
|
|
6051
6108
|
}) : null,
|
|
6052
|
-
|
|
6053
|
-
class: Z("markup-discard-confirm",
|
|
6109
|
+
D ? /* @__PURE__ */ Q("div", {
|
|
6110
|
+
class: Z("markup-discard-confirm", D.isLeaving && "is-leaving"),
|
|
6054
6111
|
role: "alertdialog",
|
|
6055
6112
|
"aria-labelledby": "markup-discard-confirm-title",
|
|
6056
6113
|
"aria-describedby": "markup-discard-confirm-desc",
|
|
6057
|
-
inert:
|
|
6114
|
+
inert: D.isLeaving || void 0,
|
|
6058
6115
|
children: [
|
|
6059
6116
|
/* @__PURE__ */ Q("p", {
|
|
6060
6117
|
id: "markup-discard-confirm-title",
|
|
@@ -6071,7 +6128,7 @@ function ol({ pageX: e, pageY: t, authorName: n, authorPromptMode: r, isVerified
|
|
|
6071
6128
|
children: [/* @__PURE__ */ Q("button", {
|
|
6072
6129
|
type: "button",
|
|
6073
6130
|
class: "markup-btn markup-btn-primary markup-discard-confirm-keep",
|
|
6074
|
-
onClick:
|
|
6131
|
+
onClick: k,
|
|
6075
6132
|
children: "Keep editing"
|
|
6076
6133
|
}), /* @__PURE__ */ Q("button", {
|
|
6077
6134
|
type: "button",
|
|
@@ -6085,12 +6142,12 @@ function ol({ pageX: e, pageY: t, authorName: n, authorPromptMode: r, isVerified
|
|
|
6085
6142
|
]
|
|
6086
6143
|
});
|
|
6087
6144
|
}
|
|
6088
|
-
function
|
|
6145
|
+
function hl(e, t, n) {
|
|
6089
6146
|
return Math.max(t, Math.min(n, e));
|
|
6090
6147
|
}
|
|
6091
6148
|
//#endregion
|
|
6092
6149
|
//#region src/runtime/ui/notifications-panel.tsx
|
|
6093
|
-
function
|
|
6150
|
+
function gl({ state: e, onBack: t, onItemClick: n, onMarkAllRead: r, isMarkingAll: i }) {
|
|
6094
6151
|
let a = e.kind === "ready" && e.items.some((e) => e.readAt == null);
|
|
6095
6152
|
return /* @__PURE__ */ Q("div", {
|
|
6096
6153
|
class: "markup-notifications-panel",
|
|
@@ -6171,7 +6228,7 @@ function cl({ state: e, onBack: t, onItemClick: n, onMarkAllRead: r, isMarkingAl
|
|
|
6171
6228
|
}),
|
|
6172
6229
|
/* @__PURE__ */ Q("span", {
|
|
6173
6230
|
class: "markup-notifications-panel-time",
|
|
6174
|
-
children:
|
|
6231
|
+
children: _l(e.createdAt)
|
|
6175
6232
|
})
|
|
6176
6233
|
]
|
|
6177
6234
|
}),
|
|
@@ -6203,7 +6260,7 @@ function cl({ state: e, onBack: t, onItemClick: n, onMarkAllRead: r, isMarkingAl
|
|
|
6203
6260
|
})]
|
|
6204
6261
|
});
|
|
6205
6262
|
}
|
|
6206
|
-
function
|
|
6263
|
+
function _l(e) {
|
|
6207
6264
|
let t = Date.now() - e, n = Math.floor(t / 1e3);
|
|
6208
6265
|
if (n < 60) return "just now";
|
|
6209
6266
|
let r = Math.floor(n / 60);
|
|
@@ -6215,7 +6272,7 @@ function ll(e) {
|
|
|
6215
6272
|
}
|
|
6216
6273
|
//#endregion
|
|
6217
6274
|
//#region src/runtime/use-theme.ts
|
|
6218
|
-
function
|
|
6275
|
+
function vl() {
|
|
6219
6276
|
let [, e] = B(0);
|
|
6220
6277
|
return V(() => He(() => e((e) => e + 1)), []), {
|
|
6221
6278
|
mode: ze(),
|
|
@@ -6225,7 +6282,7 @@ function ul() {
|
|
|
6225
6282
|
}
|
|
6226
6283
|
//#endregion
|
|
6227
6284
|
//#region src/runtime/ui/privacy-panel.tsx
|
|
6228
|
-
function
|
|
6285
|
+
function yl({ identity: e, apiUrl: t, commentAccess: n = "anyone", autoCapture: r, autoCaptureLocked: i, isForgettingMe: a, forgetMeError: o, onForgetMe: s, onBack: c }) {
|
|
6229
6286
|
let [l, u] = B(!1), d = aa(e), f = e.kind === "verified", p = f ? e.identity.email : void 0, m = e.kind === "anon";
|
|
6230
6287
|
return /* @__PURE__ */ Q("div", {
|
|
6231
6288
|
class: "markup-panel",
|
|
@@ -6327,7 +6384,7 @@ function dl({ identity: e, apiUrl: t, commentAccess: n = "anyone", autoCapture:
|
|
|
6327
6384
|
"Only ",
|
|
6328
6385
|
/* @__PURE__ */ Q("span", {
|
|
6329
6386
|
class: "markup-panel-mono",
|
|
6330
|
-
children:
|
|
6387
|
+
children: bl(t)
|
|
6331
6388
|
}),
|
|
6332
6389
|
". No analytics, no ad tech, no third-party requests from the widget. If the widget itself crashes it posts the error, this page's URL and your user-agent to that same host, never your identity or what you were writing."
|
|
6333
6390
|
]
|
|
@@ -6363,7 +6420,7 @@ function dl({ identity: e, apiUrl: t, commentAccess: n = "anyone", autoCapture:
|
|
|
6363
6420
|
})]
|
|
6364
6421
|
});
|
|
6365
6422
|
}
|
|
6366
|
-
function
|
|
6423
|
+
function bl(e) {
|
|
6367
6424
|
try {
|
|
6368
6425
|
return new URL(e).host;
|
|
6369
6426
|
} catch {
|
|
@@ -6372,7 +6429,7 @@ function fl(e) {
|
|
|
6372
6429
|
}
|
|
6373
6430
|
//#endregion
|
|
6374
6431
|
//#region src/runtime/ui/shortcuts-panel.tsx
|
|
6375
|
-
function
|
|
6432
|
+
function xl({ onBack: e }) {
|
|
6376
6433
|
let { mod: t, enter: n } = Vs();
|
|
6377
6434
|
return /* @__PURE__ */ Q("div", {
|
|
6378
6435
|
class: "markup-panel",
|
|
@@ -6469,28 +6526,28 @@ function pl({ onBack: e }) {
|
|
|
6469
6526
|
}
|
|
6470
6527
|
//#endregion
|
|
6471
6528
|
//#region src/runtime/ui/overflow-menu.tsx
|
|
6472
|
-
var
|
|
6529
|
+
var Sl = {
|
|
6473
6530
|
menu: "More options",
|
|
6474
6531
|
privacy: "Privacy and data",
|
|
6475
6532
|
shortcuts: "Keyboard shortcuts"
|
|
6476
6533
|
};
|
|
6477
|
-
function
|
|
6478
|
-
let [y, b] = B(!1), [x, S] = B("menu"), C = ei(y || null, 140), w = C?.isLeaving ?? !1,
|
|
6479
|
-
|
|
6480
|
-
let
|
|
6534
|
+
function Cl({ position: e, onSetPosition: t, autoCapture: n, autoCaptureLocked: r = !1, onToggleAutoCapture: i, showResolved: a, onToggleShowResolved: o, isUrlScoped: s, hiddenByUrlScope: c, onToggleUrlScope: l, onHideForSession: u, identity: d, apiUrl: f, commentAccess: p, isForgettingMe: m, forgetMeError: h, onForgetMe: g, version: _, dashboardUrl: v }) {
|
|
6535
|
+
let [y, b] = B(!1), [x, S] = B("menu"), C = ei(y || null, 140), w = C?.isLeaving ?? !1, T = U(null), E = U(null), D = U(null), O = U(null), ee = U("menu"), k = U(null), A = U(x);
|
|
6536
|
+
A.current = x;
|
|
6537
|
+
let j = vl();
|
|
6481
6538
|
V(() => {
|
|
6482
|
-
y && (S("menu"),
|
|
6539
|
+
y && (S("menu"), ee.current = "menu");
|
|
6483
6540
|
}, [y]), H(() => {
|
|
6484
6541
|
if (!y) return;
|
|
6485
6542
|
if (x !== "menu") {
|
|
6486
|
-
|
|
6543
|
+
E.current?.focus({ preventScroll: !0 });
|
|
6487
6544
|
return;
|
|
6488
6545
|
}
|
|
6489
|
-
let e =
|
|
6490
|
-
e !== "menu" && (
|
|
6546
|
+
let e = ee.current;
|
|
6547
|
+
e !== "menu" && (ee.current = "menu", (e === "privacy" ? D.current : O.current)?.focus({ preventScroll: !0 }));
|
|
6491
6548
|
}, [y, x]), H(() => {
|
|
6492
|
-
let e =
|
|
6493
|
-
if (
|
|
6549
|
+
let e = E.current, t = k.current;
|
|
6550
|
+
if (k.current = null, !e || t == null || window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
|
|
6494
6551
|
let n = e.getBoundingClientRect().height;
|
|
6495
6552
|
if (Math.round(n) === Math.round(t)) return;
|
|
6496
6553
|
e.style.height = `${t}px`, e.offsetHeight, e.style.height = `${n}px`;
|
|
@@ -6502,29 +6559,31 @@ function hl({ position: e, onSetPosition: t, autoCapture: n, autoCaptureLocked:
|
|
|
6502
6559
|
};
|
|
6503
6560
|
}, [x]), V(() => {
|
|
6504
6561
|
if (!y) return;
|
|
6505
|
-
|
|
6506
|
-
|
|
6507
|
-
|
|
6508
|
-
|
|
6509
|
-
|
|
6562
|
+
let e = T.current;
|
|
6563
|
+
if (!e) return;
|
|
6564
|
+
let t = (t) => {
|
|
6565
|
+
t.composedPath().includes(e) || b(!1);
|
|
6566
|
+
};
|
|
6567
|
+
function n(e) {
|
|
6510
6568
|
if (e.key === "Escape") {
|
|
6511
|
-
if (
|
|
6512
|
-
|
|
6569
|
+
if (A.current !== "menu") {
|
|
6570
|
+
M("menu");
|
|
6513
6571
|
return;
|
|
6514
6572
|
}
|
|
6515
6573
|
b(!1);
|
|
6516
6574
|
}
|
|
6517
6575
|
}
|
|
6518
|
-
|
|
6519
|
-
|
|
6576
|
+
let r = bc(e, t);
|
|
6577
|
+
return document.addEventListener("keydown", n), () => {
|
|
6578
|
+
r(), document.removeEventListener("keydown", n);
|
|
6520
6579
|
};
|
|
6521
6580
|
}, [y]);
|
|
6522
|
-
function
|
|
6523
|
-
|
|
6581
|
+
function M(e) {
|
|
6582
|
+
k.current = E.current?.getBoundingClientRect().height ?? null, e !== "menu" && (ee.current = e), S(e);
|
|
6524
6583
|
}
|
|
6525
|
-
let
|
|
6584
|
+
let N = e === "bottom-left" ? "is-anchor-left" : e === "bottom-center" ? "is-anchor-center" : "is-anchor-right", { mod: P } = Vs();
|
|
6526
6585
|
return /* @__PURE__ */ Q("div", {
|
|
6527
|
-
ref:
|
|
6586
|
+
ref: T,
|
|
6528
6587
|
style: {
|
|
6529
6588
|
position: "relative",
|
|
6530
6589
|
display: "inline-flex"
|
|
@@ -6548,15 +6607,15 @@ function hl({ position: e, onSetPosition: t, autoCapture: n, autoCaptureLocked:
|
|
|
6548
6607
|
children: c > 9 ? "9+" : c
|
|
6549
6608
|
}) : null]
|
|
6550
6609
|
}), C ? /* @__PURE__ */ Q("div", {
|
|
6551
|
-
ref:
|
|
6552
|
-
class: Z("markup-pop",
|
|
6610
|
+
ref: E,
|
|
6611
|
+
class: Z("markup-pop", N, w && "is-leaving"),
|
|
6553
6612
|
"data-pop": "overflow",
|
|
6554
6613
|
"data-view": x,
|
|
6555
6614
|
role: "dialog",
|
|
6556
|
-
"aria-label":
|
|
6615
|
+
"aria-label": Sl[x],
|
|
6557
6616
|
tabIndex: -1,
|
|
6558
6617
|
inert: w || void 0,
|
|
6559
|
-
children: x === "privacy" ? /* @__PURE__ */ Q(
|
|
6618
|
+
children: x === "privacy" ? /* @__PURE__ */ Q(yl, {
|
|
6560
6619
|
identity: d,
|
|
6561
6620
|
apiUrl: f,
|
|
6562
6621
|
commentAccess: p,
|
|
@@ -6569,8 +6628,8 @@ function hl({ position: e, onSetPosition: t, autoCapture: n, autoCaptureLocked:
|
|
|
6569
6628
|
e && b(!1);
|
|
6570
6629
|
});
|
|
6571
6630
|
},
|
|
6572
|
-
onBack: () =>
|
|
6573
|
-
}) : x === "shortcuts" ? /* @__PURE__ */ Q(
|
|
6631
|
+
onBack: () => M("menu")
|
|
6632
|
+
}) : x === "shortcuts" ? /* @__PURE__ */ Q(xl, { onBack: () => M("menu") }) : /* @__PURE__ */ Q("div", {
|
|
6574
6633
|
role: "menu",
|
|
6575
6634
|
class: "markup-menu-view",
|
|
6576
6635
|
children: [
|
|
@@ -6587,31 +6646,31 @@ function hl({ position: e, onSetPosition: t, autoCapture: n, autoCaptureLocked:
|
|
|
6587
6646
|
/* @__PURE__ */ Q("button", {
|
|
6588
6647
|
type: "button",
|
|
6589
6648
|
role: "radio",
|
|
6590
|
-
"aria-checked":
|
|
6649
|
+
"aria-checked": j.mode === "light",
|
|
6591
6650
|
"aria-label": "Light",
|
|
6592
6651
|
title: "Light",
|
|
6593
|
-
class: Z(
|
|
6594
|
-
onClick: () =>
|
|
6652
|
+
class: Z(j.mode === "light" && "is-on"),
|
|
6653
|
+
onClick: () => j.set("light"),
|
|
6595
6654
|
children: /* @__PURE__ */ Q(rc, { size: 14 })
|
|
6596
6655
|
}),
|
|
6597
6656
|
/* @__PURE__ */ Q("button", {
|
|
6598
6657
|
type: "button",
|
|
6599
6658
|
role: "radio",
|
|
6600
|
-
"aria-checked":
|
|
6659
|
+
"aria-checked": j.mode === "dark",
|
|
6601
6660
|
"aria-label": "Dark",
|
|
6602
6661
|
title: "Dark",
|
|
6603
|
-
class: Z(
|
|
6604
|
-
onClick: () =>
|
|
6662
|
+
class: Z(j.mode === "dark" && "is-on"),
|
|
6663
|
+
onClick: () => j.set("dark"),
|
|
6605
6664
|
children: /* @__PURE__ */ Q(ic, { size: 14 })
|
|
6606
6665
|
}),
|
|
6607
6666
|
/* @__PURE__ */ Q("button", {
|
|
6608
6667
|
type: "button",
|
|
6609
6668
|
role: "radio",
|
|
6610
|
-
"aria-checked":
|
|
6611
|
-
"aria-label": `Auto (currently ${
|
|
6612
|
-
title: `Auto, currently ${
|
|
6613
|
-
class: Z(
|
|
6614
|
-
onClick: () =>
|
|
6669
|
+
"aria-checked": j.mode === "auto",
|
|
6670
|
+
"aria-label": `Auto (currently ${j.resolved})`,
|
|
6671
|
+
title: `Auto, currently ${j.resolved}`,
|
|
6672
|
+
class: Z(j.mode === "auto" && "is-on"),
|
|
6673
|
+
onClick: () => j.set("auto"),
|
|
6615
6674
|
children: /* @__PURE__ */ Q(ac, { size: 14 })
|
|
6616
6675
|
})
|
|
6617
6676
|
]
|
|
@@ -6635,7 +6694,7 @@ function hl({ position: e, onSetPosition: t, autoCapture: n, autoCaptureLocked:
|
|
|
6635
6694
|
title: "Bottom left",
|
|
6636
6695
|
class: Z(e === "bottom-left" && "is-on"),
|
|
6637
6696
|
onClick: () => t("bottom-left"),
|
|
6638
|
-
children: /* @__PURE__ */ Q(
|
|
6697
|
+
children: /* @__PURE__ */ Q(wl, { side: "left" })
|
|
6639
6698
|
}),
|
|
6640
6699
|
/* @__PURE__ */ Q("button", {
|
|
6641
6700
|
type: "button",
|
|
@@ -6645,7 +6704,7 @@ function hl({ position: e, onSetPosition: t, autoCapture: n, autoCaptureLocked:
|
|
|
6645
6704
|
title: "Bottom center",
|
|
6646
6705
|
class: Z(e === "bottom-center" && "is-on"),
|
|
6647
6706
|
onClick: () => t("bottom-center"),
|
|
6648
|
-
children: /* @__PURE__ */ Q(
|
|
6707
|
+
children: /* @__PURE__ */ Q(wl, { side: "center" })
|
|
6649
6708
|
}),
|
|
6650
6709
|
/* @__PURE__ */ Q("button", {
|
|
6651
6710
|
type: "button",
|
|
@@ -6655,7 +6714,7 @@ function hl({ position: e, onSetPosition: t, autoCapture: n, autoCaptureLocked:
|
|
|
6655
6714
|
title: "Bottom right",
|
|
6656
6715
|
class: Z(e === "bottom-right" && "is-on"),
|
|
6657
6716
|
onClick: () => t("bottom-right"),
|
|
6658
|
-
children: /* @__PURE__ */ Q(
|
|
6717
|
+
children: /* @__PURE__ */ Q(wl, { side: "right" })
|
|
6659
6718
|
})
|
|
6660
6719
|
]
|
|
6661
6720
|
})]
|
|
@@ -6677,7 +6736,7 @@ function hl({ position: e, onSetPosition: t, autoCapture: n, autoCaptureLocked:
|
|
|
6677
6736
|
children: [
|
|
6678
6737
|
/* @__PURE__ */ Q("span", {
|
|
6679
6738
|
class: "ic",
|
|
6680
|
-
children: /* @__PURE__ */ Q(
|
|
6739
|
+
children: /* @__PURE__ */ Q(El, {})
|
|
6681
6740
|
}),
|
|
6682
6741
|
/* @__PURE__ */ Q("span", {
|
|
6683
6742
|
class: "lbl",
|
|
@@ -6704,7 +6763,7 @@ function hl({ position: e, onSetPosition: t, autoCapture: n, autoCaptureLocked:
|
|
|
6704
6763
|
children: [
|
|
6705
6764
|
/* @__PURE__ */ Q("span", {
|
|
6706
6765
|
class: "ic",
|
|
6707
|
-
children: /* @__PURE__ */ Q(
|
|
6766
|
+
children: /* @__PURE__ */ Q(Tl, {})
|
|
6708
6767
|
}),
|
|
6709
6768
|
/* @__PURE__ */ Q("span", {
|
|
6710
6769
|
class: "lbl",
|
|
@@ -6747,11 +6806,11 @@ function hl({ position: e, onSetPosition: t, autoCapture: n, autoCaptureLocked:
|
|
|
6747
6806
|
]
|
|
6748
6807
|
}),
|
|
6749
6808
|
/* @__PURE__ */ Q("button", {
|
|
6750
|
-
ref:
|
|
6809
|
+
ref: D,
|
|
6751
6810
|
type: "button",
|
|
6752
6811
|
role: "menuitem",
|
|
6753
6812
|
class: "markup-menu-row",
|
|
6754
|
-
onClick: () =>
|
|
6813
|
+
onClick: () => M("privacy"),
|
|
6755
6814
|
children: [
|
|
6756
6815
|
/* @__PURE__ */ Q("span", {
|
|
6757
6816
|
class: "ic",
|
|
@@ -6769,11 +6828,11 @@ function hl({ position: e, onSetPosition: t, autoCapture: n, autoCaptureLocked:
|
|
|
6769
6828
|
]
|
|
6770
6829
|
}),
|
|
6771
6830
|
/* @__PURE__ */ Q("button", {
|
|
6772
|
-
ref:
|
|
6831
|
+
ref: O,
|
|
6773
6832
|
type: "button",
|
|
6774
6833
|
role: "menuitem",
|
|
6775
6834
|
class: "markup-menu-row",
|
|
6776
|
-
onClick: () =>
|
|
6835
|
+
onClick: () => M("shortcuts"),
|
|
6777
6836
|
children: [
|
|
6778
6837
|
/* @__PURE__ */ Q("span", {
|
|
6779
6838
|
class: "ic",
|
|
@@ -6801,7 +6860,7 @@ function hl({ position: e, onSetPosition: t, autoCapture: n, autoCaptureLocked:
|
|
|
6801
6860
|
children: [
|
|
6802
6861
|
/* @__PURE__ */ Q("span", {
|
|
6803
6862
|
class: "ic",
|
|
6804
|
-
children: /* @__PURE__ */ Q(
|
|
6863
|
+
children: /* @__PURE__ */ Q(Dl, {})
|
|
6805
6864
|
}),
|
|
6806
6865
|
/* @__PURE__ */ Q("span", {
|
|
6807
6866
|
class: "lbl",
|
|
@@ -6809,7 +6868,7 @@ function hl({ position: e, onSetPosition: t, autoCapture: n, autoCaptureLocked:
|
|
|
6809
6868
|
}),
|
|
6810
6869
|
/* @__PURE__ */ Q("span", {
|
|
6811
6870
|
class: "right",
|
|
6812
|
-
children: [
|
|
6871
|
+
children: [P, " ."]
|
|
6813
6872
|
})
|
|
6814
6873
|
]
|
|
6815
6874
|
}),
|
|
@@ -6832,7 +6891,7 @@ function hl({ position: e, onSetPosition: t, autoCapture: n, autoCaptureLocked:
|
|
|
6832
6891
|
}) : null]
|
|
6833
6892
|
});
|
|
6834
6893
|
}
|
|
6835
|
-
function
|
|
6894
|
+
function wl({ side: e }) {
|
|
6836
6895
|
return /* @__PURE__ */ Q("svg", {
|
|
6837
6896
|
width: 14,
|
|
6838
6897
|
height: 14,
|
|
@@ -6858,7 +6917,7 @@ function gl({ side: e }) {
|
|
|
6858
6917
|
})]
|
|
6859
6918
|
});
|
|
6860
6919
|
}
|
|
6861
|
-
function
|
|
6920
|
+
function Tl() {
|
|
6862
6921
|
return /* @__PURE__ */ Q("svg", {
|
|
6863
6922
|
width: 16,
|
|
6864
6923
|
height: 16,
|
|
@@ -6872,7 +6931,7 @@ function _l() {
|
|
|
6872
6931
|
children: [/* @__PURE__ */ Q("path", { d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" }), /* @__PURE__ */ Q("path", { d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" })]
|
|
6873
6932
|
});
|
|
6874
6933
|
}
|
|
6875
|
-
function
|
|
6934
|
+
function El() {
|
|
6876
6935
|
return /* @__PURE__ */ Q("svg", {
|
|
6877
6936
|
width: 16,
|
|
6878
6937
|
height: 16,
|
|
@@ -6890,7 +6949,7 @@ function vl() {
|
|
|
6890
6949
|
})]
|
|
6891
6950
|
});
|
|
6892
6951
|
}
|
|
6893
|
-
function
|
|
6952
|
+
function Dl() {
|
|
6894
6953
|
return /* @__PURE__ */ Q("svg", {
|
|
6895
6954
|
width: 16,
|
|
6896
6955
|
height: 16,
|
|
@@ -6911,21 +6970,22 @@ function yl() {
|
|
|
6911
6970
|
}
|
|
6912
6971
|
//#endregion
|
|
6913
6972
|
//#region src/runtime/ui/panel-popover.tsx
|
|
6914
|
-
function
|
|
6973
|
+
function Ol({ kind: e, label: t, position: n, ignoreToolbarKind: r, isLeaving: i = !1, onClose: a, children: o }) {
|
|
6915
6974
|
let s = U(null);
|
|
6916
6975
|
return V(() => {
|
|
6917
6976
|
if (i) return;
|
|
6918
|
-
|
|
6919
|
-
|
|
6920
|
-
|
|
6921
|
-
let n =
|
|
6922
|
-
n.includes(
|
|
6923
|
-
}
|
|
6924
|
-
function
|
|
6977
|
+
let e = s.current;
|
|
6978
|
+
if (!e) return;
|
|
6979
|
+
let t = (t) => {
|
|
6980
|
+
let n = t.composedPath();
|
|
6981
|
+
n.includes(e) || r != null && n.some((e) => e?.dataset?.kind === r) || a();
|
|
6982
|
+
};
|
|
6983
|
+
function n(e) {
|
|
6925
6984
|
e.key === "Escape" && a();
|
|
6926
6985
|
}
|
|
6927
|
-
|
|
6928
|
-
|
|
6986
|
+
let o = bc(e, t);
|
|
6987
|
+
return document.addEventListener("keydown", n), () => {
|
|
6988
|
+
o(), document.removeEventListener("keydown", n);
|
|
6929
6989
|
};
|
|
6930
6990
|
}, [
|
|
6931
6991
|
a,
|
|
@@ -6947,7 +7007,7 @@ function bl({ kind: e, label: t, position: n, ignoreToolbarKind: r, isLeaving: i
|
|
|
6947
7007
|
}
|
|
6948
7008
|
//#endregion
|
|
6949
7009
|
//#region src/runtime/ui/pin.tsx
|
|
6950
|
-
function
|
|
7010
|
+
function kl({ pageX: e, pageY: t, count: n, isActive: r, isUnresolved: i, isClosed: a = !1, isLeaving: o = !1, enterDelayMs: s = 0, otherLocation: c, onClick: l }) {
|
|
6951
7011
|
let u = U(!r), d = `Open ${a ? "resolved " : ""}feedback thread (${n} comment${n === 1 ? "" : "s"})` + (c ? ` — left on ${c}` : ""), f = t - window.scrollY, p = e - window.scrollX;
|
|
6952
7012
|
return /* @__PURE__ */ Q("button", {
|
|
6953
7013
|
type: "button",
|
|
@@ -6970,7 +7030,7 @@ function xl({ pageX: e, pageY: t, count: n, isActive: r, isUnresolved: i, isClos
|
|
|
6970
7030
|
})
|
|
6971
7031
|
});
|
|
6972
7032
|
}
|
|
6973
|
-
function
|
|
7033
|
+
function Al({ pageX: e, pageY: t, isLeaving: n = !1 }) {
|
|
6974
7034
|
let r = t - window.scrollY, i = e - window.scrollX;
|
|
6975
7035
|
return /* @__PURE__ */ Q("div", {
|
|
6976
7036
|
class: Z("markup-pin", "markup-pin-ghost", "is-anchor", n && "is-leaving"),
|
|
@@ -6987,7 +7047,7 @@ function Sl({ pageX: e, pageY: t, isLeaving: n = !1 }) {
|
|
|
6987
7047
|
}
|
|
6988
7048
|
//#endregion
|
|
6989
7049
|
//#region src/runtime/ui/placement-overlay.tsx
|
|
6990
|
-
function
|
|
7050
|
+
function jl({ onPlace: e, onCancel: t }) {
|
|
6991
7051
|
let n = U(null);
|
|
6992
7052
|
return H(() => {
|
|
6993
7053
|
let r = n.current?.getRootNode() ?? null, i = (e) => r !== null && e.composedPath().includes(r);
|
|
@@ -7012,7 +7072,7 @@ function Cl({ onPlace: e, onCancel: t }) {
|
|
|
7012
7072
|
window.addEventListener("keydown", a);
|
|
7013
7073
|
for (let e of l) window.addEventListener(e, o, c);
|
|
7014
7074
|
window.addEventListener("click", s, c);
|
|
7015
|
-
let u =
|
|
7075
|
+
let u = Ml();
|
|
7016
7076
|
return () => {
|
|
7017
7077
|
window.removeEventListener("keydown", a);
|
|
7018
7078
|
for (let e of l) window.removeEventListener(e, o, c);
|
|
@@ -7028,7 +7088,7 @@ function Cl({ onPlace: e, onCancel: t }) {
|
|
|
7028
7088
|
})
|
|
7029
7089
|
});
|
|
7030
7090
|
}
|
|
7031
|
-
function
|
|
7091
|
+
function Ml() {
|
|
7032
7092
|
let e = "html, html * { cursor: crosshair !important; }";
|
|
7033
7093
|
if ("adoptedStyleSheets" in document && "replaceSync" in CSSStyleSheet.prototype) {
|
|
7034
7094
|
let t = new CSSStyleSheet();
|
|
@@ -7041,14 +7101,14 @@ function wl() {
|
|
|
7041
7101
|
}
|
|
7042
7102
|
//#endregion
|
|
7043
7103
|
//#region src/runtime/ui/thread-popover.tsx
|
|
7044
|
-
var
|
|
7104
|
+
var Nl = [], Pl = [
|
|
7045
7105
|
"👍",
|
|
7046
7106
|
"❤️",
|
|
7047
7107
|
"🎉",
|
|
7048
7108
|
"😮",
|
|
7049
7109
|
"😄",
|
|
7050
7110
|
"❓"
|
|
7051
|
-
],
|
|
7111
|
+
], Fl = Vr({
|
|
7052
7112
|
none: {
|
|
7053
7113
|
"toggle-thread-menu": () => ({
|
|
7054
7114
|
kind: "thread-menu",
|
|
@@ -7104,34 +7164,34 @@ var Tl = [], El = [
|
|
|
7104
7164
|
dismiss: () => ({ kind: "none" })
|
|
7105
7165
|
}
|
|
7106
7166
|
});
|
|
7107
|
-
function
|
|
7108
|
-
let C = U(null), w = U(null),
|
|
7167
|
+
function Il({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r, isVerified: i, isIdentityResolving: a, isSigningIn: o, canDelete: s, isPending: c, error: l, isHidden: u = !1, isLeaving: d = !1, members: f = Nl, onAuthor: p, onSignIn: m, onSignOut: h, onClose: g, onReply: _, onEditComment: v, onDeleteComment: y, onToggleReaction: b, onResolve: x, onDelete: S }) {
|
|
7168
|
+
let C = U(null), w = U(null), T = U(null), E = U(null), [D, O] = Hr(Fl, { kind: "none" }), ee = ei(D.kind === "none" || D.kind === "editing" ? null : D, 120), k = ee?.value ?? null, A = ee?.isLeaving ?? !1, j = k?.kind === "thread-menu" ? k : null, [M, N] = B(null), { onPointerDown: P, isDragging: F } = wc({
|
|
7109
7169
|
targetRef: C,
|
|
7110
7170
|
shouldStart: (e) => !e.target?.closest("button, a, input, textarea, select"),
|
|
7111
|
-
onMove:
|
|
7171
|
+
onMove: N
|
|
7112
7172
|
});
|
|
7113
|
-
|
|
7114
|
-
let
|
|
7173
|
+
Dc(C, !d);
|
|
7174
|
+
let te = e.resolvedAt != null, ne = rt(() => e.comments.filter((e) => !e.deleted), [e.comments]);
|
|
7115
7175
|
V(() => {
|
|
7116
|
-
if (
|
|
7176
|
+
if (D.kind === "none" || D.kind === "editing") return;
|
|
7117
7177
|
function e(e) {
|
|
7118
|
-
let t =
|
|
7119
|
-
t && !e.composedPath().includes(t) &&
|
|
7178
|
+
let t = E.current;
|
|
7179
|
+
t && !e.composedPath().includes(t) && O({ type: "dismiss" });
|
|
7120
7180
|
}
|
|
7121
7181
|
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
7122
|
-
}, [
|
|
7123
|
-
if (
|
|
7124
|
-
let t = e.comments.find((e) => e._id ===
|
|
7125
|
-
(!t || t.deleted) &&
|
|
7182
|
+
}, [D.kind, O]), V(() => {
|
|
7183
|
+
if (D.kind !== "editing") return;
|
|
7184
|
+
let t = e.comments.find((e) => e._id === D.commentId);
|
|
7185
|
+
(!t || t.deleted) && O({ type: "dismiss" });
|
|
7126
7186
|
}, [
|
|
7127
7187
|
e.comments,
|
|
7128
|
-
|
|
7129
|
-
|
|
7188
|
+
D,
|
|
7189
|
+
O
|
|
7130
7190
|
]);
|
|
7131
7191
|
let re = U(null);
|
|
7132
7192
|
V(() => {
|
|
7133
|
-
re.current ??=
|
|
7134
|
-
}, [
|
|
7193
|
+
re.current ??= ne.at(-1)?.createdAt ?? 0;
|
|
7194
|
+
}, [ne]);
|
|
7135
7195
|
let ie = U(!0);
|
|
7136
7196
|
V(() => {
|
|
7137
7197
|
let e = w.current;
|
|
@@ -7142,16 +7202,16 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7142
7202
|
}
|
|
7143
7203
|
e.scrollHeight - e.scrollTop - e.clientHeight < 80 && (e.scrollTop = e.scrollHeight);
|
|
7144
7204
|
}
|
|
7145
|
-
}, [
|
|
7205
|
+
}, [ne.length]);
|
|
7146
7206
|
let ae = U(null);
|
|
7147
7207
|
H(() => {
|
|
7148
7208
|
let e = C.current;
|
|
7149
7209
|
if (e && typeof e.showPopover == "function") try {
|
|
7150
|
-
d ? (
|
|
7210
|
+
d ? (N((e) => e ?? ae.current), e.matches(":popover-open") && e.hidePopover()) : e.matches(":popover-open") || e.showPopover();
|
|
7151
7211
|
} catch {}
|
|
7152
7212
|
}, [d]), H(() => {
|
|
7153
7213
|
let e = C.current;
|
|
7154
|
-
if (!e || d ||
|
|
7214
|
+
if (!e || d || M != null || typeof e.matches == "function" && !e.matches(":popover-open")) return;
|
|
7155
7215
|
let t = getComputedStyle(e), n = Number.parseFloat(t.left), r = Number.parseFloat(t.top);
|
|
7156
7216
|
Number.isFinite(n) && Number.isFinite(r) && (ae.current = {
|
|
7157
7217
|
left: n,
|
|
@@ -7175,8 +7235,8 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7175
7235
|
anchorText: e.anchorText
|
|
7176
7236
|
});
|
|
7177
7237
|
return {
|
|
7178
|
-
left:
|
|
7179
|
-
top:
|
|
7238
|
+
left: Bl(t.pageX - window.scrollX + 16, 12, window.innerWidth - 320 - 12),
|
|
7239
|
+
top: Bl(t.pageY - window.scrollY - 16, 12, window.innerHeight - 200)
|
|
7180
7240
|
};
|
|
7181
7241
|
}, [
|
|
7182
7242
|
e.anchorX,
|
|
@@ -7187,11 +7247,11 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7187
7247
|
return /* @__PURE__ */ Q("div", {
|
|
7188
7248
|
ref: C,
|
|
7189
7249
|
id: d ? void 0 : "markup-thread-popover",
|
|
7190
|
-
class: Z("markup-popover",
|
|
7250
|
+
class: Z("markup-popover", M && "is-floating", F && "is-dragging", u && "is-hud-hidden", d && "is-leaving"),
|
|
7191
7251
|
popover: "auto",
|
|
7192
7252
|
style: {
|
|
7193
|
-
"--markup-pop-x": `${
|
|
7194
|
-
"--markup-pop-y": `${
|
|
7253
|
+
"--markup-pop-x": `${M?.left ?? se.left}px`,
|
|
7254
|
+
"--markup-pop-y": `${M?.top ?? se.top}px`
|
|
7195
7255
|
},
|
|
7196
7256
|
role: "dialog",
|
|
7197
7257
|
"aria-label": "Markup thread",
|
|
@@ -7200,44 +7260,44 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7200
7260
|
children: [
|
|
7201
7261
|
/* @__PURE__ */ Q("header", {
|
|
7202
7262
|
class: "markup-popover-header",
|
|
7203
|
-
onPointerDown:
|
|
7263
|
+
onPointerDown: P,
|
|
7204
7264
|
children: [/* @__PURE__ */ Q("span", {
|
|
7205
7265
|
class: "markup-popover-title",
|
|
7206
7266
|
title: e.url,
|
|
7207
|
-
children:
|
|
7267
|
+
children: ne.length === 1 ? "1 comment" : `${ne.length} comments`
|
|
7208
7268
|
}), /* @__PURE__ */ Q("div", {
|
|
7209
7269
|
class: "markup-popover-header-actions",
|
|
7210
7270
|
children: [
|
|
7211
7271
|
/* @__PURE__ */ Q("div", {
|
|
7212
7272
|
class: "markup-thread-menu",
|
|
7213
7273
|
ref: (e) => {
|
|
7214
|
-
|
|
7274
|
+
D.kind === "thread-menu" && (E.current = e);
|
|
7215
7275
|
},
|
|
7216
7276
|
children: [/* @__PURE__ */ Q("button", {
|
|
7217
7277
|
type: "button",
|
|
7218
|
-
class: Z("markup-icon-btn",
|
|
7278
|
+
class: Z("markup-icon-btn", j != null && "is-open"),
|
|
7219
7279
|
title: "More options",
|
|
7220
|
-
onClick: () =>
|
|
7280
|
+
onClick: () => O({ type: "toggle-thread-menu" }),
|
|
7221
7281
|
children: /* @__PURE__ */ Q(qs, { size: 16 })
|
|
7222
|
-
}),
|
|
7223
|
-
class: Z("markup-thread-menu-list",
|
|
7224
|
-
inert:
|
|
7282
|
+
}), j ? /* @__PURE__ */ Q("div", {
|
|
7283
|
+
class: Z("markup-thread-menu-list", A && "is-leaving"),
|
|
7284
|
+
inert: A || void 0,
|
|
7225
7285
|
children: [/* @__PURE__ */ Q("button", {
|
|
7226
7286
|
type: "button",
|
|
7227
7287
|
class: "markup-thread-menu-item",
|
|
7228
7288
|
onClick: () => {
|
|
7229
7289
|
let t = Oa(e.url, e._id);
|
|
7230
|
-
t && navigator.clipboard.writeText(t).catch(() => {}),
|
|
7290
|
+
t && navigator.clipboard.writeText(t).catch(() => {}), O({ type: "dismiss" });
|
|
7231
7291
|
},
|
|
7232
7292
|
children: "Copy link"
|
|
7233
7293
|
}), s ? /* @__PURE__ */ Q("button", {
|
|
7234
7294
|
type: "button",
|
|
7235
|
-
class: Z("markup-thread-menu-item",
|
|
7295
|
+
class: Z("markup-thread-menu-item", j.confirmDelete && "is-danger"),
|
|
7236
7296
|
disabled: c,
|
|
7237
7297
|
onClick: () => {
|
|
7238
|
-
|
|
7298
|
+
D.kind === "thread-menu" && (D.confirmDelete ? (O({ type: "dismiss" }), S()) : O({ type: "arm-thread-delete" }));
|
|
7239
7299
|
},
|
|
7240
|
-
children:
|
|
7300
|
+
children: j.confirmDelete ? "Confirm delete" : "Delete thread…"
|
|
7241
7301
|
}) : null]
|
|
7242
7302
|
}) : null]
|
|
7243
7303
|
}),
|
|
@@ -7262,15 +7322,15 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7262
7322
|
/* @__PURE__ */ Q("ol", {
|
|
7263
7323
|
ref: w,
|
|
7264
7324
|
class: "markup-comments",
|
|
7265
|
-
children:
|
|
7266
|
-
let i = !t.fromDashboard && r != null && t.authorClientId === r, a = n === 0, o = i && !
|
|
7325
|
+
children: ne.map((t, n) => {
|
|
7326
|
+
let i = !t.fromDashboard && r != null && t.authorClientId === r, a = n === 0, o = i && !te && !t.deleted, s = i && !te && !t.deleted && !a, l = D.kind === "editing" && D.commentId === t._id, u = (o || s) && !l && !t.deleted, d = k?.kind === "comment-menu" && k.commentId === t._id ? k : null, p = k?.kind === "reaction-picker" && k.commentId === t._id ? k : null, m = d != null, h = d?.confirmDelete ?? !1, g = p != null, _ = p?.direction ?? "down", x = d?.direction ?? "down";
|
|
7267
7327
|
return /* @__PURE__ */ Q("li", {
|
|
7268
7328
|
class: Z("markup-comment", re.current != null && t.createdAt > re.current && "is-new"),
|
|
7269
7329
|
children: [
|
|
7270
|
-
/* @__PURE__ */ Q(
|
|
7330
|
+
/* @__PURE__ */ Q(Vl, {
|
|
7271
7331
|
name: t.authorName,
|
|
7272
7332
|
image: t.authorImage,
|
|
7273
|
-
tone:
|
|
7333
|
+
tone: Ul(t.authorClientId ?? t.authorName)
|
|
7274
7334
|
}),
|
|
7275
7335
|
/* @__PURE__ */ Q("div", {
|
|
7276
7336
|
class: "markup-comment-meta",
|
|
@@ -7289,37 +7349,37 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7289
7349
|
/* @__PURE__ */ Q("time", {
|
|
7290
7350
|
class: "markup-comment-time",
|
|
7291
7351
|
datetime: new Date(t.createdAt).toISOString(),
|
|
7292
|
-
title:
|
|
7293
|
-
children:
|
|
7352
|
+
title: Gl(t.createdAt),
|
|
7353
|
+
children: Wl(t.createdAt)
|
|
7294
7354
|
}),
|
|
7295
7355
|
t.editedAt == null ? null : /* @__PURE__ */ Q("time", {
|
|
7296
7356
|
class: "markup-comment-edited",
|
|
7297
7357
|
datetime: new Date(t.editedAt).toISOString(),
|
|
7298
|
-
title:
|
|
7358
|
+
title: Gl(t.editedAt),
|
|
7299
7359
|
children: "edited"
|
|
7300
7360
|
}),
|
|
7301
7361
|
/* @__PURE__ */ Q("div", {
|
|
7302
7362
|
class: "markup-thread-actions",
|
|
7303
|
-
children: [!
|
|
7363
|
+
children: [!te && !l ? /* @__PURE__ */ Q(Ll, {
|
|
7304
7364
|
comment: t,
|
|
7305
7365
|
pickerOpen: g,
|
|
7306
|
-
pickerLeaving: g &&
|
|
7366
|
+
pickerLeaving: g && A,
|
|
7307
7367
|
pickerDirection: _,
|
|
7308
|
-
pickerSide:
|
|
7368
|
+
pickerSide: ne.length === 1,
|
|
7309
7369
|
pickerRef: (e) => {
|
|
7310
|
-
g && (
|
|
7370
|
+
g && (E.current = e);
|
|
7311
7371
|
},
|
|
7312
7372
|
onPickerClick: (e) => {
|
|
7313
7373
|
if (g) {
|
|
7314
|
-
|
|
7374
|
+
O({
|
|
7315
7375
|
type: "toggle-reaction-picker",
|
|
7316
7376
|
commentId: t._id,
|
|
7317
7377
|
direction: "down"
|
|
7318
7378
|
});
|
|
7319
7379
|
return;
|
|
7320
7380
|
}
|
|
7321
|
-
if (
|
|
7322
|
-
|
|
7381
|
+
if (ne.length === 1) {
|
|
7382
|
+
O({
|
|
7323
7383
|
type: "toggle-reaction-picker",
|
|
7324
7384
|
commentId: t._id,
|
|
7325
7385
|
direction: "down"
|
|
@@ -7327,19 +7387,19 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7327
7387
|
return;
|
|
7328
7388
|
}
|
|
7329
7389
|
let n = e.currentTarget.getBoundingClientRect(), r = w.current?.getBoundingClientRect(), i = r ? r.bottom - n.bottom : Infinity;
|
|
7330
|
-
|
|
7390
|
+
O({
|
|
7331
7391
|
type: "toggle-reaction-picker",
|
|
7332
7392
|
commentId: t._id,
|
|
7333
7393
|
direction: i < 44 ? "up" : "down"
|
|
7334
7394
|
});
|
|
7335
7395
|
},
|
|
7336
7396
|
onPickerSelect: (e) => {
|
|
7337
|
-
|
|
7397
|
+
O({ type: "dismiss" }), b(t._id, e);
|
|
7338
7398
|
}
|
|
7339
7399
|
}) : null, u ? /* @__PURE__ */ Q("div", {
|
|
7340
|
-
class: Z("markup-thread-menu markup-comment-menu", m && "is-open", m && x === "up" && "is-up",
|
|
7400
|
+
class: Z("markup-thread-menu markup-comment-menu", m && "is-open", m && x === "up" && "is-up", ne.length === 1 && "is-side"),
|
|
7341
7401
|
ref: (e) => {
|
|
7342
|
-
m && (
|
|
7402
|
+
m && (E.current = e);
|
|
7343
7403
|
},
|
|
7344
7404
|
children: [/* @__PURE__ */ Q("button", {
|
|
7345
7405
|
type: "button",
|
|
@@ -7347,15 +7407,15 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7347
7407
|
title: "More options",
|
|
7348
7408
|
onClick: (e) => {
|
|
7349
7409
|
if (m) {
|
|
7350
|
-
|
|
7410
|
+
O({
|
|
7351
7411
|
type: "toggle-comment-menu",
|
|
7352
7412
|
commentId: t._id,
|
|
7353
7413
|
direction: "down"
|
|
7354
7414
|
});
|
|
7355
7415
|
return;
|
|
7356
7416
|
}
|
|
7357
|
-
if (
|
|
7358
|
-
|
|
7417
|
+
if (ne.length === 1) {
|
|
7418
|
+
O({
|
|
7359
7419
|
type: "toggle-comment-menu",
|
|
7360
7420
|
commentId: t._id,
|
|
7361
7421
|
direction: "down"
|
|
@@ -7363,7 +7423,7 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7363
7423
|
return;
|
|
7364
7424
|
}
|
|
7365
7425
|
let n = e.currentTarget.getBoundingClientRect(), r = w.current?.getBoundingClientRect(), i = (+!!o + +!!s) * 32 + 8 + 6, a = r ? r.bottom - n.bottom : Infinity;
|
|
7366
|
-
|
|
7426
|
+
O({
|
|
7367
7427
|
type: "toggle-comment-menu",
|
|
7368
7428
|
commentId: t._id,
|
|
7369
7429
|
direction: a < i ? "up" : "down"
|
|
@@ -7371,13 +7431,13 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7371
7431
|
},
|
|
7372
7432
|
children: /* @__PURE__ */ Q(qs, { size: 16 })
|
|
7373
7433
|
}), m ? /* @__PURE__ */ Q("div", {
|
|
7374
|
-
class: Z("markup-thread-menu-list",
|
|
7375
|
-
inert:
|
|
7434
|
+
class: Z("markup-thread-menu-list", A && "is-leaving"),
|
|
7435
|
+
inert: A || void 0,
|
|
7376
7436
|
children: [o ? /* @__PURE__ */ Q("button", {
|
|
7377
7437
|
type: "button",
|
|
7378
7438
|
class: "markup-thread-menu-item",
|
|
7379
7439
|
onClick: () => {
|
|
7380
|
-
|
|
7440
|
+
O({
|
|
7381
7441
|
type: "start-edit",
|
|
7382
7442
|
commentId: t._id,
|
|
7383
7443
|
body: t.body
|
|
@@ -7388,7 +7448,7 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7388
7448
|
type: "button",
|
|
7389
7449
|
class: Z("markup-thread-menu-item", h && "is-danger"),
|
|
7390
7450
|
onClick: () => {
|
|
7391
|
-
|
|
7451
|
+
D.kind === "comment-menu" && (D.confirmDelete ? (O({ type: "dismiss" }), y(t._id)) : O({ type: "arm-comment-delete" }));
|
|
7392
7452
|
},
|
|
7393
7453
|
children: h ? "Confirm delete" : "Delete…"
|
|
7394
7454
|
}) : null]
|
|
@@ -7397,24 +7457,24 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7397
7457
|
})
|
|
7398
7458
|
]
|
|
7399
7459
|
}),
|
|
7400
|
-
l &&
|
|
7460
|
+
l && D.kind === "editing" ? /* @__PURE__ */ Q("form", {
|
|
7401
7461
|
class: "markup-comment-edit-form",
|
|
7402
7462
|
onSubmit: async (e) => {
|
|
7403
|
-
if (e.preventDefault(),
|
|
7404
|
-
let n =
|
|
7463
|
+
if (e.preventDefault(), D.kind !== "editing") return;
|
|
7464
|
+
let n = D.draft.trim();
|
|
7405
7465
|
if (!n || n === t.body) {
|
|
7406
|
-
|
|
7466
|
+
O({ type: "dismiss" });
|
|
7407
7467
|
return;
|
|
7408
7468
|
}
|
|
7409
7469
|
try {
|
|
7410
|
-
await v(t._id, n),
|
|
7470
|
+
await v(t._id, n), O({ type: "dismiss" });
|
|
7411
7471
|
} catch {}
|
|
7412
7472
|
},
|
|
7413
|
-
children: [/* @__PURE__ */ Q(
|
|
7473
|
+
children: [/* @__PURE__ */ Q(ll, {
|
|
7414
7474
|
class: "markup-comment-edit-input",
|
|
7415
7475
|
label: "Edit comment",
|
|
7416
|
-
value:
|
|
7417
|
-
onChange: (e) =>
|
|
7476
|
+
value: D.draft,
|
|
7477
|
+
onChange: (e) => O({
|
|
7418
7478
|
type: "update-draft",
|
|
7419
7479
|
draft: e
|
|
7420
7480
|
}),
|
|
@@ -7426,32 +7486,32 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7426
7486
|
children: [/* @__PURE__ */ Q("button", {
|
|
7427
7487
|
type: "button",
|
|
7428
7488
|
class: "markup-btn markup-btn-ghost",
|
|
7429
|
-
onClick: () =>
|
|
7489
|
+
onClick: () => O({ type: "dismiss" }),
|
|
7430
7490
|
disabled: c,
|
|
7431
7491
|
children: "Cancel"
|
|
7432
7492
|
}), /* @__PURE__ */ Q("button", {
|
|
7433
7493
|
type: "submit",
|
|
7434
7494
|
class: "markup-btn markup-btn-primary",
|
|
7435
|
-
disabled: c ||
|
|
7495
|
+
disabled: c || D.draft.trim().length === 0,
|
|
7436
7496
|
children: "Save"
|
|
7437
7497
|
})]
|
|
7438
7498
|
})]
|
|
7439
|
-
}) : /* @__PURE__ */ Q(
|
|
7499
|
+
}) : /* @__PURE__ */ Q(rl, {
|
|
7440
7500
|
body: t.body,
|
|
7441
7501
|
mentions: t.mentions
|
|
7442
7502
|
}),
|
|
7443
7503
|
n === 0 && e.screenshotUrl ? /* @__PURE__ */ Q("button", {
|
|
7444
7504
|
type: "button",
|
|
7445
7505
|
class: "markup-comment-screenshot",
|
|
7446
|
-
onClick: () =>
|
|
7506
|
+
onClick: () => T.current?.showModal(),
|
|
7447
7507
|
children: /* @__PURE__ */ Q("img", {
|
|
7448
7508
|
src: e.screenshotUrl,
|
|
7449
7509
|
alt: "Screenshot"
|
|
7450
7510
|
})
|
|
7451
7511
|
}) : null,
|
|
7452
|
-
!l && t.reactions.length > 0 ? /* @__PURE__ */ Q(
|
|
7512
|
+
!l && t.reactions.length > 0 ? /* @__PURE__ */ Q(Rl, {
|
|
7453
7513
|
comment: t,
|
|
7454
|
-
isResolved:
|
|
7514
|
+
isResolved: te,
|
|
7455
7515
|
onToggle: (e) => b(t._id, e)
|
|
7456
7516
|
}) : null
|
|
7457
7517
|
]
|
|
@@ -7459,15 +7519,15 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7459
7519
|
})
|
|
7460
7520
|
}),
|
|
7461
7521
|
e.screenshotUrl ? /* @__PURE__ */ Q("dialog", {
|
|
7462
|
-
ref:
|
|
7522
|
+
ref: T,
|
|
7463
7523
|
class: "markup-lightbox",
|
|
7464
|
-
onClick: () =>
|
|
7524
|
+
onClick: () => T.current?.close(),
|
|
7465
7525
|
children: [/* @__PURE__ */ Q("button", {
|
|
7466
7526
|
type: "button",
|
|
7467
7527
|
class: "markup-lightbox-close markup-icon-btn",
|
|
7468
7528
|
"aria-label": "Close screenshot",
|
|
7469
7529
|
onClick: (e) => {
|
|
7470
|
-
e.stopPropagation(),
|
|
7530
|
+
e.stopPropagation(), T.current?.close();
|
|
7471
7531
|
},
|
|
7472
7532
|
children: /* @__PURE__ */ Q(Ws, { size: 16 })
|
|
7473
7533
|
}), /* @__PURE__ */ Q("img", {
|
|
@@ -7492,7 +7552,7 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7492
7552
|
children: "team"
|
|
7493
7553
|
}) : null
|
|
7494
7554
|
]
|
|
7495
|
-
}), /* @__PURE__ */ Q(
|
|
7555
|
+
}), /* @__PURE__ */ Q(dl, {
|
|
7496
7556
|
label: "Reply",
|
|
7497
7557
|
placeholder: "Write a reply…",
|
|
7498
7558
|
submitLabel: "Reply",
|
|
@@ -7502,7 +7562,7 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7502
7562
|
onSubmit: _,
|
|
7503
7563
|
members: f
|
|
7504
7564
|
})]
|
|
7505
|
-
}) : /* @__PURE__ */ Q(
|
|
7565
|
+
}) : /* @__PURE__ */ Q(kc, {
|
|
7506
7566
|
mode: n,
|
|
7507
7567
|
isPending: c,
|
|
7508
7568
|
isConnecting: a,
|
|
@@ -7515,7 +7575,7 @@ function Ol({ thread: e, authorName: t, authorPromptMode: n, currentClientId: r,
|
|
|
7515
7575
|
]
|
|
7516
7576
|
});
|
|
7517
7577
|
}
|
|
7518
|
-
function
|
|
7578
|
+
function Ll({ comment: e, pickerOpen: t, pickerLeaving: n, pickerDirection: r, pickerSide: i, pickerRef: a, onPickerClick: o, onPickerSelect: s }) {
|
|
7519
7579
|
return /* @__PURE__ */ Q("div", {
|
|
7520
7580
|
class: Z("markup-reaction-picker-wrap", t && "is-open", t && r === "up" && "is-up", i && "is-side"),
|
|
7521
7581
|
ref: a,
|
|
@@ -7530,7 +7590,7 @@ function kl({ comment: e, pickerOpen: t, pickerLeaving: n, pickerDirection: r, p
|
|
|
7530
7590
|
class: Z("markup-reaction-picker", n && "is-leaving"),
|
|
7531
7591
|
role: "menu",
|
|
7532
7592
|
inert: n || void 0,
|
|
7533
|
-
children:
|
|
7593
|
+
children: Pl.map((t) => /* @__PURE__ */ Q("button", {
|
|
7534
7594
|
type: "button",
|
|
7535
7595
|
role: "menuitem",
|
|
7536
7596
|
class: Z("markup-reaction-picker-item", (e.reactions.find((e) => e.emoji === t)?.mine ?? !1) && "is-mine"),
|
|
@@ -7540,11 +7600,11 @@ function kl({ comment: e, pickerOpen: t, pickerLeaving: n, pickerDirection: r, p
|
|
|
7540
7600
|
}) : null]
|
|
7541
7601
|
});
|
|
7542
7602
|
}
|
|
7543
|
-
function
|
|
7603
|
+
function Rl({ comment: e, isResolved: t, onToggle: n }) {
|
|
7544
7604
|
return /* @__PURE__ */ Q("div", {
|
|
7545
7605
|
class: "markup-reactions",
|
|
7546
7606
|
children: e.reactions.map((e) => {
|
|
7547
|
-
let r =
|
|
7607
|
+
let r = zl(e.reactors, e.mine, e.count, e.emoji);
|
|
7548
7608
|
return /* @__PURE__ */ Q("button", {
|
|
7549
7609
|
type: "button",
|
|
7550
7610
|
class: Z("markup-reaction-chip", e.mine && "is-mine"),
|
|
@@ -7565,14 +7625,14 @@ function Al({ comment: e, isResolved: t, onToggle: n }) {
|
|
|
7565
7625
|
})
|
|
7566
7626
|
});
|
|
7567
7627
|
}
|
|
7568
|
-
function
|
|
7628
|
+
function zl(e, t, n, r) {
|
|
7569
7629
|
let i = e.slice(), a = i.length + +!!t, o = Math.max(0, n - a);
|
|
7570
7630
|
return o > 0 && i.push(`${o} other${o === 1 ? "" : "s"}`), t && i.push("you"), i.length === 0 ? `${n} reacted with ${r}` : `${i.length === 1 ? i[0] : `${i.slice(0, -1).join(", ")} and ${i[i.length - 1]}`} reacted with ${r}`;
|
|
7571
7631
|
}
|
|
7572
|
-
function
|
|
7632
|
+
function Bl(e, t, n) {
|
|
7573
7633
|
return Math.max(t, Math.min(n, e));
|
|
7574
7634
|
}
|
|
7575
|
-
function
|
|
7635
|
+
function Vl({ name: e, image: t, tone: n }) {
|
|
7576
7636
|
let [r, i] = B(null);
|
|
7577
7637
|
return /* @__PURE__ */ Q("span", {
|
|
7578
7638
|
class: "markup-comment-avatar",
|
|
@@ -7588,11 +7648,11 @@ function Nl({ name: e, image: t, tone: n }) {
|
|
|
7588
7648
|
onError: () => i(t)
|
|
7589
7649
|
}) : /* @__PURE__ */ Q("span", {
|
|
7590
7650
|
class: "markup-avatar-initials",
|
|
7591
|
-
children:
|
|
7651
|
+
children: Hl(e)
|
|
7592
7652
|
})
|
|
7593
7653
|
});
|
|
7594
7654
|
}
|
|
7595
|
-
function
|
|
7655
|
+
function Hl(e) {
|
|
7596
7656
|
let t = e.trim();
|
|
7597
7657
|
if (!t) return "??";
|
|
7598
7658
|
let n = t.split(/\s+/).filter(Boolean), r = n[0] ?? "";
|
|
@@ -7600,12 +7660,12 @@ function Pl(e) {
|
|
|
7600
7660
|
let i = n[n.length - 1] ?? "";
|
|
7601
7661
|
return ((r[0] ?? "") + (i[0] ?? "")).toUpperCase();
|
|
7602
7662
|
}
|
|
7603
|
-
function
|
|
7663
|
+
function Ul(e) {
|
|
7604
7664
|
let t = 0;
|
|
7605
7665
|
for (let n = 0; n < e.length; n++) t = t * 31 + e.charCodeAt(n) | 0;
|
|
7606
7666
|
return Math.abs(t) % 5 + 1;
|
|
7607
7667
|
}
|
|
7608
|
-
function
|
|
7668
|
+
function Wl(e) {
|
|
7609
7669
|
let t = Date.now() - e, n = Math.floor(t / 1e3);
|
|
7610
7670
|
if (n < 60) return "just now";
|
|
7611
7671
|
let r = Math.floor(n / 60);
|
|
@@ -7622,7 +7682,7 @@ function Il(e) {
|
|
|
7622
7682
|
year: "numeric"
|
|
7623
7683
|
});
|
|
7624
7684
|
}
|
|
7625
|
-
function
|
|
7685
|
+
function Gl(e) {
|
|
7626
7686
|
return new Date(e).toLocaleDateString([], {
|
|
7627
7687
|
month: "long",
|
|
7628
7688
|
day: "numeric",
|
|
@@ -7633,17 +7693,19 @@ function Ll(e) {
|
|
|
7633
7693
|
}
|
|
7634
7694
|
//#endregion
|
|
7635
7695
|
//#region src/runtime/ui/toolbar.tsx
|
|
7636
|
-
function
|
|
7696
|
+
function Kl(e) {
|
|
7637
7697
|
e.stopPropagation();
|
|
7638
7698
|
}
|
|
7639
|
-
function
|
|
7640
|
-
Rl(e), e.target?.closest?.(".markup-tb-btn") && e.preventDefault();
|
|
7641
|
-
}
|
|
7642
|
-
function Bl({ isActive: e, onToggle: t, onHide: n, position: r = "bottom-right", unreadCount: i = 0, showInbox: a = !1, onOpenInbox: o, inboxOpen: s = !1, pinsVisible: c = !0, onTogglePins: l, identityButton: u, overflowButton: d, isLeaving: f = !1 }) {
|
|
7699
|
+
function ql({ isActive: e, onToggle: t, onHide: n, position: r = "bottom-right", unreadCount: i = 0, showInbox: a = !1, onOpenInbox: o, inboxOpen: s = !1, pinsVisible: c = !0, onTogglePins: l, identityButton: u, overflowButton: d, isLeaving: f = !1 }) {
|
|
7643
7700
|
let p = U(0);
|
|
7644
7701
|
i > 0 && (p.current = i);
|
|
7645
|
-
let m =
|
|
7646
|
-
|
|
7702
|
+
let m = U(null);
|
|
7703
|
+
H(() => {
|
|
7704
|
+
let e = m.current;
|
|
7705
|
+
return e ? yc(e) : void 0;
|
|
7706
|
+
}, []);
|
|
7707
|
+
let h = r === "bottom-left" ? "markup-toolbar-left" : r === "bottom-center" ? "markup-toolbar-center" : "markup-toolbar-right";
|
|
7708
|
+
function g(e) {
|
|
7647
7709
|
if (e.preventDefault(), e.stopPropagation(), (e.metaKey || e.ctrlKey) && n) {
|
|
7648
7710
|
n();
|
|
7649
7711
|
return;
|
|
@@ -7651,15 +7713,16 @@ function Bl({ isActive: e, onToggle: t, onHide: n, position: r = "bottom-right",
|
|
|
7651
7713
|
t();
|
|
7652
7714
|
}
|
|
7653
7715
|
return /* @__PURE__ */ Q("div", {
|
|
7654
|
-
|
|
7716
|
+
ref: m,
|
|
7717
|
+
class: Z("markup-toolbar", h, f && "is-leaving"),
|
|
7655
7718
|
role: "toolbar",
|
|
7656
7719
|
"aria-label": "Markup feedback toolbar",
|
|
7657
7720
|
"aria-hidden": f,
|
|
7658
7721
|
inert: f ? "" : void 0,
|
|
7659
|
-
onPointerDown:
|
|
7660
|
-
onMouseDown:
|
|
7661
|
-
onPointerUp:
|
|
7662
|
-
onMouseUp:
|
|
7722
|
+
onPointerDown: Kl,
|
|
7723
|
+
onMouseDown: Kl,
|
|
7724
|
+
onPointerUp: Kl,
|
|
7725
|
+
onMouseUp: Kl,
|
|
7663
7726
|
children: [
|
|
7664
7727
|
/* @__PURE__ */ Q("button", {
|
|
7665
7728
|
type: "button",
|
|
@@ -7668,7 +7731,7 @@ function Bl({ isActive: e, onToggle: t, onHide: n, position: r = "bottom-right",
|
|
|
7668
7731
|
"data-armed": e ? "true" : void 0,
|
|
7669
7732
|
title: e ? "Cancel placing markup" : "Leave a markup",
|
|
7670
7733
|
"aria-pressed": e,
|
|
7671
|
-
onClick:
|
|
7734
|
+
onClick: g,
|
|
7672
7735
|
children: Q(e ? Ws : Qs, { size: 16 })
|
|
7673
7736
|
}),
|
|
7674
7737
|
a ? /* @__PURE__ */ Q("button", {
|
|
@@ -7722,8 +7785,8 @@ function Bl({ isActive: e, onToggle: t, onHide: n, position: r = "bottom-right",
|
|
|
7722
7785
|
}
|
|
7723
7786
|
//#endregion
|
|
7724
7787
|
//#region src/runtime/ui/app.tsx
|
|
7725
|
-
var
|
|
7726
|
-
function
|
|
7788
|
+
var Jl = [], Yl = [], Xl = [], Zl = [{ key: "toolbar" }], Ql = [];
|
|
7789
|
+
function $l(e) {
|
|
7727
7790
|
let t = {
|
|
7728
7791
|
clientId: `markup_user_${e.identity.id}`,
|
|
7729
7792
|
name: e.identity.name,
|
|
@@ -7749,14 +7812,14 @@ function Kl(e) {
|
|
|
7749
7812
|
} : {}
|
|
7750
7813
|
};
|
|
7751
7814
|
}
|
|
7752
|
-
function
|
|
7815
|
+
function eu() {
|
|
7753
7816
|
let e = document.activeElement;
|
|
7754
7817
|
for (; e && e.shadowRoot && e.shadowRoot.activeElement;) e = e.shadowRoot.activeElement;
|
|
7755
7818
|
if (!e) return !1;
|
|
7756
7819
|
let t = e.tagName;
|
|
7757
7820
|
return t === "INPUT" || t === "TEXTAREA" || t === "SELECT" || e.isContentEditable;
|
|
7758
7821
|
}
|
|
7759
|
-
var
|
|
7822
|
+
var tu = Vr({
|
|
7760
7823
|
visible: {
|
|
7761
7824
|
"hide-with-toast": () => ({ kind: "hidden-with-toast" }),
|
|
7762
7825
|
toggle: () => ({ kind: "hidden" })
|
|
@@ -7767,26 +7830,26 @@ var Jl = Vr({
|
|
|
7767
7830
|
},
|
|
7768
7831
|
hidden: { toggle: () => ({ kind: "visible" }) }
|
|
7769
7832
|
});
|
|
7770
|
-
function
|
|
7833
|
+
function nu(e) {
|
|
7771
7834
|
return ra(e), e;
|
|
7772
7835
|
}
|
|
7773
|
-
var
|
|
7836
|
+
var ru = Vr({
|
|
7774
7837
|
unresolved: {
|
|
7775
|
-
"mint-success": (e, t) =>
|
|
7838
|
+
"mint-success": (e, t) => nu({
|
|
7776
7839
|
kind: "anon",
|
|
7777
7840
|
identity: t.identity
|
|
7778
7841
|
}),
|
|
7779
|
-
"signed-in": (e, t) =>
|
|
7842
|
+
"signed-in": (e, t) => nu({
|
|
7780
7843
|
kind: "verified",
|
|
7781
7844
|
identity: t.identity
|
|
7782
7845
|
})
|
|
7783
7846
|
},
|
|
7784
7847
|
anon: {
|
|
7785
|
-
"signed-in": (e, t) =>
|
|
7848
|
+
"signed-in": (e, t) => nu({
|
|
7786
7849
|
kind: "verified",
|
|
7787
7850
|
identity: t.identity
|
|
7788
7851
|
}),
|
|
7789
|
-
"author-set": (e, t) =>
|
|
7852
|
+
"author-set": (e, t) => nu({
|
|
7790
7853
|
kind: "anon",
|
|
7791
7854
|
identity: {
|
|
7792
7855
|
...e.identity,
|
|
@@ -7794,35 +7857,35 @@ var Xl = Vr({
|
|
|
7794
7857
|
email: t.email
|
|
7795
7858
|
}
|
|
7796
7859
|
}),
|
|
7797
|
-
"forget-me": () =>
|
|
7860
|
+
"forget-me": () => nu({ kind: "unresolved" })
|
|
7798
7861
|
},
|
|
7799
7862
|
verified: {
|
|
7800
|
-
"signed-in": (e, t) =>
|
|
7863
|
+
"signed-in": (e, t) => nu({
|
|
7801
7864
|
kind: "verified",
|
|
7802
7865
|
identity: t.identity
|
|
7803
7866
|
}),
|
|
7804
|
-
unauthorized: (e) =>
|
|
7867
|
+
unauthorized: (e) => nu({
|
|
7805
7868
|
kind: "recovering",
|
|
7806
7869
|
preserved: {
|
|
7807
7870
|
name: e.identity.name,
|
|
7808
7871
|
email: e.identity.email
|
|
7809
7872
|
}
|
|
7810
7873
|
}),
|
|
7811
|
-
"signed-out": () =>
|
|
7874
|
+
"signed-out": () => nu({ kind: "unresolved" })
|
|
7812
7875
|
},
|
|
7813
7876
|
recovering: {
|
|
7814
|
-
"mint-success": (e, t) =>
|
|
7877
|
+
"mint-success": (e, t) => nu({
|
|
7815
7878
|
kind: "anon",
|
|
7816
7879
|
identity: t.identity
|
|
7817
7880
|
}),
|
|
7818
|
-
"signed-in": (e, t) =>
|
|
7881
|
+
"signed-in": (e, t) => nu({
|
|
7819
7882
|
kind: "verified",
|
|
7820
7883
|
identity: t.identity
|
|
7821
7884
|
})
|
|
7822
7885
|
}
|
|
7823
7886
|
});
|
|
7824
|
-
function
|
|
7825
|
-
let [o, s] = B(() => ya(a)), [c, l] = B(() => xa(a)), [u, d] = B([]), [f, p] = B(!1), m = rt(() => na(), []), [h, g] = Hr(
|
|
7887
|
+
function iu({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r, dashboardUrl: i, routeParams: a = Jl }) {
|
|
7888
|
+
let [o, s] = B(() => ya(a)), [c, l] = B(() => xa(a)), [u, d] = B([]), [f, p] = B(!1), m = rt(() => na(), []), [h, g] = Hr(ru, m.state), [_, v] = B(null);
|
|
7826
7889
|
V(() => {
|
|
7827
7890
|
let n = !1;
|
|
7828
7891
|
return Hi(e, t).then((e) => {
|
|
@@ -7831,27 +7894,27 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
7831
7894
|
n = !0;
|
|
7832
7895
|
};
|
|
7833
7896
|
}, [e, t]);
|
|
7834
|
-
let [y, b] = B(n), [x, C] = B(!0), [w,
|
|
7835
|
-
|
|
7897
|
+
let [y, b] = B(n), [x, C] = B(!0), [w, T] = B(!1), [E, D] = B(!0), [O, ee] = B(!1), [k, A] = B(null), j = W(() => A(null), []), M = U(h);
|
|
7898
|
+
M.current = h, Bs(h, e, t, (e) => g({
|
|
7836
7899
|
type: "signed-in",
|
|
7837
7900
|
identity: e
|
|
7838
7901
|
}), () => g({ type: "unauthorized" }));
|
|
7839
|
-
let
|
|
7902
|
+
let N = rt(() => Fi({
|
|
7840
7903
|
apiUrl: e,
|
|
7841
7904
|
apiKey: t,
|
|
7842
7905
|
getToken: () => {
|
|
7843
|
-
let e =
|
|
7906
|
+
let e = M.current;
|
|
7844
7907
|
return e.kind !== "verified" || e.identity.token == null ? null : {
|
|
7845
7908
|
token: e.identity.token,
|
|
7846
7909
|
expiresAt: e.identity.tokenExpiresAt
|
|
7847
7910
|
};
|
|
7848
7911
|
},
|
|
7849
7912
|
getStorageMode: () => {
|
|
7850
|
-
let e =
|
|
7913
|
+
let e = M.current;
|
|
7851
7914
|
return e.kind === "verified" ? e.identity.storage : null;
|
|
7852
7915
|
},
|
|
7853
7916
|
getAnonToken: () => {
|
|
7854
|
-
let e =
|
|
7917
|
+
let e = M.current;
|
|
7855
7918
|
return e.kind === "anon" ? e.identity.anonToken : null;
|
|
7856
7919
|
},
|
|
7857
7920
|
onUnauthorized: () => {
|
|
@@ -7861,18 +7924,18 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
7861
7924
|
e,
|
|
7862
7925
|
t,
|
|
7863
7926
|
g
|
|
7864
|
-
]), [
|
|
7927
|
+
]), [P, F] = B({ kind: "idle" }), [te, ne] = B([]);
|
|
7865
7928
|
V(() => {
|
|
7866
7929
|
let e = !1;
|
|
7867
|
-
return
|
|
7868
|
-
e ||
|
|
7930
|
+
return N.listMembers().then((t) => {
|
|
7931
|
+
e || ne(t.members);
|
|
7869
7932
|
}).catch(() => {}), () => {
|
|
7870
7933
|
e = !0;
|
|
7871
7934
|
};
|
|
7872
|
-
}, [
|
|
7935
|
+
}, [N]);
|
|
7873
7936
|
let [re, ie] = B(0), [ae, oe] = Hr(sa, { kind: "idle" }), [se, ce] = B(!1), le = U(0), ue = W(() => {
|
|
7874
7937
|
let e = le.current;
|
|
7875
|
-
oe({ type: "fetch" }),
|
|
7938
|
+
oe({ type: "fetch" }), N.listNotifications().then((t) => {
|
|
7876
7939
|
le.current === e && oe({
|
|
7877
7940
|
type: "loaded",
|
|
7878
7941
|
items: t.notifications
|
|
@@ -7883,12 +7946,12 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
7883
7946
|
error: t instanceof Error ? t.message : "Failed to load."
|
|
7884
7947
|
});
|
|
7885
7948
|
});
|
|
7886
|
-
}, [
|
|
7949
|
+
}, [N, oe]), de = W((e) => {
|
|
7887
7950
|
le.current += 1, oe({
|
|
7888
7951
|
type: "patch",
|
|
7889
7952
|
update: e
|
|
7890
7953
|
});
|
|
7891
|
-
}, [oe]), fe = Yr(), pe = Yr(), me = Yr(), he = Yr(), ge = Yr(), { run: _e, reset: ve } = fe, { run: ye } = pe, { run: xe, reset: Se } = me, { run: Ce } = he, { run: we } = ge, Te = ge.isPending, Ee = fe.isPending, De = fe.error ?? pe.error ?? me.error, [Oe, ke] = Hr(
|
|
7954
|
+
}, [oe]), fe = Yr(), pe = Yr(), me = Yr(), he = Yr(), ge = Yr(), { run: _e, reset: ve } = fe, { run: ye } = pe, { run: xe, reset: Se } = me, { run: Ce } = he, { run: we } = ge, Te = ge.isPending, Ee = fe.isPending, De = fe.error ?? pe.error ?? me.error, [Oe, ke] = Hr(tu, { kind: "visible" }), Ae = Oe.kind !== "visible", [je, I] = B(0), [Me, Ne] = B(0), L = U(null), Pe = aa(h), Fe = h.kind === "verified", Ie = h.kind === "unresolved" || h.kind === "recovering", Le = ia(h), [Re, ze] = B(Li), [Be, Ve] = B(null);
|
|
7892
7955
|
V(() => {
|
|
7893
7956
|
Ve(null), le.current += 1, oe({ type: "reset" });
|
|
7894
7957
|
}, [
|
|
@@ -7909,7 +7972,7 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
7909
7972
|
if (h.kind !== "unresolved" && h.kind !== "recovering") return;
|
|
7910
7973
|
let e = h.kind === "recovering" ? h.preserved : m.preserved, t = !1, n = null, r = 1e3;
|
|
7911
7974
|
function i() {
|
|
7912
|
-
|
|
7975
|
+
N.mintAnonIdentity().then(({ clientId: n, token: r }) => {
|
|
7913
7976
|
if (t) return;
|
|
7914
7977
|
let i = {
|
|
7915
7978
|
clientId: n,
|
|
@@ -7929,12 +7992,12 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
7929
7992
|
t = !0, n && clearTimeout(n);
|
|
7930
7993
|
};
|
|
7931
7994
|
}, [
|
|
7932
|
-
|
|
7995
|
+
N,
|
|
7933
7996
|
h,
|
|
7934
7997
|
g,
|
|
7935
7998
|
m
|
|
7936
7999
|
]);
|
|
7937
|
-
let { token: R, isCurrent: Ge } = Is(
|
|
8000
|
+
let { token: R, isCurrent: Ge } = Is(N, h), [Ke, qe] = B(null);
|
|
7938
8001
|
V(() => {
|
|
7939
8002
|
let t = new Br(e.replace(/\.convex\.site(\/.*)?$/, ".convex.cloud"));
|
|
7940
8003
|
return qe(t), () => {
|
|
@@ -7949,7 +8012,7 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
7949
8012
|
subscriptionToken: R,
|
|
7950
8013
|
route: o,
|
|
7951
8014
|
viewerClientId: Le,
|
|
7952
|
-
includeResolved:
|
|
8015
|
+
includeResolved: O
|
|
7953
8016
|
}, (e) => {
|
|
7954
8017
|
e !== void 0 && (d(e), p(!0));
|
|
7955
8018
|
});
|
|
@@ -7958,7 +8021,7 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
7958
8021
|
R,
|
|
7959
8022
|
o,
|
|
7960
8023
|
Le,
|
|
7961
|
-
|
|
8024
|
+
O,
|
|
7962
8025
|
ve,
|
|
7963
8026
|
Se
|
|
7964
8027
|
]), V(() => {
|
|
@@ -7983,7 +8046,7 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
7983
8046
|
]), V(() => {
|
|
7984
8047
|
if (Je.current || !f) return;
|
|
7985
8048
|
let e = wa();
|
|
7986
|
-
e !== null && (u.find((t) => t._id === e) &&
|
|
8049
|
+
e !== null && (u.find((t) => t._id === e) && F({
|
|
7987
8050
|
kind: "thread",
|
|
7988
8051
|
threadId: e
|
|
7989
8052
|
}), Ea()), Je.current = !0;
|
|
@@ -7995,7 +8058,7 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
7995
8058
|
}
|
|
7996
8059
|
return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
|
|
7997
8060
|
}, [ke]), V(() => {
|
|
7998
|
-
Ae &&
|
|
8061
|
+
Ae && A(null);
|
|
7999
8062
|
}, [Ae]), V(() => {
|
|
8000
8063
|
if (Oe.kind !== "hidden-with-toast") return;
|
|
8001
8064
|
let e = window.setTimeout(() => ke({ type: "dismiss-toast" }), 5e3);
|
|
@@ -8020,24 +8083,24 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8020
8083
|
};
|
|
8021
8084
|
}, []);
|
|
8022
8085
|
let z = W(() => {
|
|
8023
|
-
ve(), Se(), be("comment_started"),
|
|
8086
|
+
ve(), Se(), be("comment_started"), F({ kind: "placing" });
|
|
8024
8087
|
}, [ve, Se]);
|
|
8025
8088
|
V(() => {
|
|
8026
8089
|
function e(e) {
|
|
8027
|
-
e.key === "c" && (e.metaKey || e.ctrlKey || e.altKey || e.shiftKey ||
|
|
8090
|
+
e.key === "c" && (e.metaKey || e.ctrlKey || e.altKey || e.shiftKey || P.kind === "idle" && (Ae || eu() || (e.preventDefault(), z())));
|
|
8028
8091
|
}
|
|
8029
8092
|
return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
|
|
8030
8093
|
}, [
|
|
8031
|
-
|
|
8094
|
+
P.kind,
|
|
8032
8095
|
Ae,
|
|
8033
8096
|
z
|
|
8034
8097
|
]);
|
|
8035
8098
|
let Ye = W(() => {
|
|
8036
|
-
|
|
8099
|
+
F({ kind: "idle" }), ve(), Se();
|
|
8037
8100
|
}, [ve, Se]), Xe = U(0), Ze = W((e, t, n) => {
|
|
8038
8101
|
let i = t + window.scrollX, a = n + window.scrollY, o = ++Xe.current;
|
|
8039
|
-
if (r?.enabled === !1 || !
|
|
8040
|
-
|
|
8102
|
+
if (r?.enabled === !1 || !E) {
|
|
8103
|
+
F({
|
|
8041
8104
|
kind: "composing-new",
|
|
8042
8105
|
coords: e,
|
|
8043
8106
|
pageX: i,
|
|
@@ -8051,7 +8114,7 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8051
8114
|
});
|
|
8052
8115
|
return;
|
|
8053
8116
|
}
|
|
8054
|
-
|
|
8117
|
+
F({
|
|
8055
8118
|
kind: "composing-new",
|
|
8056
8119
|
coords: e,
|
|
8057
8120
|
pageX: i,
|
|
@@ -8071,7 +8134,7 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8071
8134
|
x: t,
|
|
8072
8135
|
y: n
|
|
8073
8136
|
}, c).then((e) => {
|
|
8074
|
-
|
|
8137
|
+
F((t) => t.kind !== "composing-new" || t.captureToken !== o ? t : {
|
|
8075
8138
|
...t,
|
|
8076
8139
|
screenshot: e?.blob ?? null,
|
|
8077
8140
|
isScreenshotCapturing: !1,
|
|
@@ -8080,7 +8143,7 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8080
8143
|
screenshotRedactedSelectors: e?.redactedSelectors ?? []
|
|
8081
8144
|
}), be("screenshot_captured", { ok: e != null });
|
|
8082
8145
|
});
|
|
8083
|
-
}, [r,
|
|
8146
|
+
}, [r, E]), Qe = W((e, t) => {
|
|
8084
8147
|
g({
|
|
8085
8148
|
type: "author-set",
|
|
8086
8149
|
name: e,
|
|
@@ -8088,7 +8151,7 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8088
8151
|
});
|
|
8089
8152
|
}, [g]), $e = pe.isPending, et = W(async () => {
|
|
8090
8153
|
be("sign_in_started"), await ye(async () => {
|
|
8091
|
-
let n =
|
|
8154
|
+
let n = $l(await fa({
|
|
8092
8155
|
apiUrl: e,
|
|
8093
8156
|
apiKey: t,
|
|
8094
8157
|
useCookies: _ === !0
|
|
@@ -8106,17 +8169,17 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8106
8169
|
ye,
|
|
8107
8170
|
g
|
|
8108
8171
|
]), tt = W(async (e, t) => {
|
|
8109
|
-
if (
|
|
8172
|
+
if (P.kind !== "composing-new") return;
|
|
8110
8173
|
let n = oa(h);
|
|
8111
8174
|
n && await _e(async () => {
|
|
8112
8175
|
let r;
|
|
8113
|
-
if (t &&
|
|
8114
|
-
let { uploadUrl: e } = await
|
|
8176
|
+
if (t && P.screenshot) {
|
|
8177
|
+
let { uploadUrl: e } = await N.getScreenshotUploadUrl().catch(We), t;
|
|
8115
8178
|
try {
|
|
8116
8179
|
t = await fetch(e, {
|
|
8117
8180
|
method: "POST",
|
|
8118
|
-
headers: { "Content-Type":
|
|
8119
|
-
body:
|
|
8181
|
+
headers: { "Content-Type": P.screenshot.type || "image/png" },
|
|
8182
|
+
body: P.screenshot,
|
|
8120
8183
|
signal: AbortSignal.timeout(6e4)
|
|
8121
8184
|
});
|
|
8122
8185
|
} catch (e) {
|
|
@@ -8126,17 +8189,17 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8126
8189
|
let { storageId: n } = await t.json();
|
|
8127
8190
|
r = n;
|
|
8128
8191
|
}
|
|
8129
|
-
let i = Gr(e), a = await
|
|
8192
|
+
let i = Gr(e), a = await N.createThread({
|
|
8130
8193
|
url: window.location.href,
|
|
8131
8194
|
route: o,
|
|
8132
|
-
anchorSelector:
|
|
8133
|
-
anchorText:
|
|
8134
|
-
anchorX:
|
|
8135
|
-
anchorY:
|
|
8136
|
-
anchorOffsetX:
|
|
8137
|
-
anchorOffsetY:
|
|
8138
|
-
viewportW:
|
|
8139
|
-
viewportY:
|
|
8195
|
+
anchorSelector: P.coords.anchorSelector,
|
|
8196
|
+
anchorText: P.coords.anchorText,
|
|
8197
|
+
anchorX: P.coords.anchorX,
|
|
8198
|
+
anchorY: P.coords.anchorY,
|
|
8199
|
+
anchorOffsetX: P.coords.anchorOffsetX,
|
|
8200
|
+
anchorOffsetY: P.coords.anchorOffsetY,
|
|
8201
|
+
viewportW: P.coords.viewportW,
|
|
8202
|
+
viewportY: P.coords.viewportY,
|
|
8140
8203
|
userAgent: navigator.userAgent,
|
|
8141
8204
|
authorName: n.name,
|
|
8142
8205
|
authorEmail: n.email,
|
|
@@ -8147,44 +8210,44 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8147
8210
|
d((e) => [...e, a.thread]), be("comment_submitted", {
|
|
8148
8211
|
hasScreenshot: r != null,
|
|
8149
8212
|
hasMentions: i.length > 0
|
|
8150
|
-
}),
|
|
8213
|
+
}), F({
|
|
8151
8214
|
kind: "thread",
|
|
8152
8215
|
threadId: a.thread._id
|
|
8153
8216
|
});
|
|
8154
8217
|
});
|
|
8155
8218
|
}, [
|
|
8156
|
-
M,
|
|
8157
|
-
h,
|
|
8158
8219
|
N,
|
|
8220
|
+
h,
|
|
8221
|
+
P,
|
|
8159
8222
|
We,
|
|
8160
8223
|
o,
|
|
8161
8224
|
_e
|
|
8162
8225
|
]), nt = W(async () => {
|
|
8163
|
-
if (
|
|
8164
|
-
let e =
|
|
8226
|
+
if (P.kind !== "thread") return;
|
|
8227
|
+
let e = P.threadId;
|
|
8165
8228
|
await _e(async () => {
|
|
8166
|
-
await
|
|
8229
|
+
await N.deleteThread(e), d((t) => t.filter((t) => t._id !== e)), F({ kind: "idle" });
|
|
8167
8230
|
});
|
|
8168
8231
|
}, [
|
|
8169
|
-
M,
|
|
8170
8232
|
N,
|
|
8233
|
+
P,
|
|
8171
8234
|
_e
|
|
8172
8235
|
]), H = W(async () => {
|
|
8173
|
-
if (
|
|
8174
|
-
let e =
|
|
8236
|
+
if (P.kind !== "thread") return;
|
|
8237
|
+
let e = P.threadId;
|
|
8175
8238
|
await _e(async () => {
|
|
8176
|
-
await
|
|
8239
|
+
await N.resolveThread(e, Le), d((t) => t.filter((t) => t._id !== e)), be("thread_resolved"), F({ kind: "idle" });
|
|
8177
8240
|
});
|
|
8178
8241
|
}, [
|
|
8179
|
-
M,
|
|
8180
8242
|
N,
|
|
8243
|
+
P,
|
|
8181
8244
|
Le,
|
|
8182
8245
|
_e
|
|
8183
8246
|
]), it = W((e) => {
|
|
8184
8247
|
if (e.readAt ?? (ie((e) => Math.max(0, e - 1)), de((t) => t.map((t) => t._id === e._id ? {
|
|
8185
8248
|
...t,
|
|
8186
8249
|
readAt: Date.now()
|
|
8187
|
-
} : t)),
|
|
8250
|
+
} : t)), N.markNotificationRead(e._id).catch(() => {})), u.some((t) => t._id === e.threadId)) F({
|
|
8188
8251
|
kind: "thread",
|
|
8189
8252
|
threadId: e.threadId
|
|
8190
8253
|
});
|
|
@@ -8193,21 +8256,21 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8193
8256
|
t && (window.location.href = t);
|
|
8194
8257
|
}
|
|
8195
8258
|
}, [
|
|
8196
|
-
|
|
8259
|
+
N,
|
|
8197
8260
|
de,
|
|
8198
8261
|
u
|
|
8199
8262
|
]), at = W(() => {
|
|
8200
8263
|
ce(!0), ie(0), de((e) => e.map((e) => e.readAt == null ? {
|
|
8201
8264
|
...e,
|
|
8202
8265
|
readAt: Date.now()
|
|
8203
|
-
} : e)),
|
|
8204
|
-
}, [
|
|
8205
|
-
if (
|
|
8266
|
+
} : e)), N.markAllNotificationsRead().catch(() => {}).finally(() => ce(!1));
|
|
8267
|
+
}, [N, de]), ot = W(async (e) => {
|
|
8268
|
+
if (P.kind !== "thread") return;
|
|
8206
8269
|
let t = oa(h);
|
|
8207
8270
|
if (!t) return;
|
|
8208
|
-
let n =
|
|
8271
|
+
let n = P.threadId;
|
|
8209
8272
|
await _e(async () => {
|
|
8210
|
-
let r = Gr(e), i = await
|
|
8273
|
+
let r = Gr(e), i = await N.addComment(n, {
|
|
8211
8274
|
body: e,
|
|
8212
8275
|
authorName: t.name,
|
|
8213
8276
|
authorEmail: t.email,
|
|
@@ -8216,63 +8279,63 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8216
8279
|
d((e) => e.map((e) => e._id === n ? i.thread : e)), be("reply_submitted", { hasMentions: r.length > 0 });
|
|
8217
8280
|
});
|
|
8218
8281
|
}, [
|
|
8219
|
-
M,
|
|
8220
|
-
h,
|
|
8221
8282
|
N,
|
|
8283
|
+
h,
|
|
8284
|
+
P,
|
|
8222
8285
|
We,
|
|
8223
8286
|
_e
|
|
8224
8287
|
]), st = W(async (e, t) => {
|
|
8225
|
-
if (
|
|
8226
|
-
let n =
|
|
8288
|
+
if (P.kind !== "thread" || h.kind !== "anon" && h.kind !== "verified") return;
|
|
8289
|
+
let n = P.threadId;
|
|
8227
8290
|
await _e(async () => {
|
|
8228
|
-
let r = Gr(t), i = await
|
|
8291
|
+
let r = Gr(t), i = await N.editComment(n, e, {
|
|
8229
8292
|
body: t,
|
|
8230
8293
|
mentions: r.length > 0 ? r : void 0
|
|
8231
8294
|
});
|
|
8232
8295
|
d((e) => e.map((e) => e._id === n ? i.thread : e));
|
|
8233
8296
|
}, { rethrow: !0 });
|
|
8234
8297
|
}, [
|
|
8235
|
-
M,
|
|
8236
|
-
h,
|
|
8237
8298
|
N,
|
|
8299
|
+
h,
|
|
8300
|
+
P,
|
|
8238
8301
|
_e
|
|
8239
8302
|
]), ct = W(async (e) => {
|
|
8240
|
-
if (
|
|
8241
|
-
let t =
|
|
8303
|
+
if (P.kind !== "thread" || h.kind !== "anon" && h.kind !== "verified") return;
|
|
8304
|
+
let t = P.threadId;
|
|
8242
8305
|
await _e(async () => {
|
|
8243
|
-
let n = await
|
|
8306
|
+
let n = await N.deleteComment(t, e);
|
|
8244
8307
|
d((e) => e.map((e) => e._id === t ? n.thread : e));
|
|
8245
8308
|
});
|
|
8246
8309
|
}, [
|
|
8247
|
-
M,
|
|
8248
|
-
h,
|
|
8249
8310
|
N,
|
|
8311
|
+
h,
|
|
8312
|
+
P,
|
|
8250
8313
|
_e
|
|
8251
8314
|
]), lt = W(async (e, t) => {
|
|
8252
|
-
if (
|
|
8315
|
+
if (P.kind !== "thread") return;
|
|
8253
8316
|
if (!He) {
|
|
8254
8317
|
Ve("sign_in_required");
|
|
8255
8318
|
return;
|
|
8256
8319
|
}
|
|
8257
8320
|
let n = oa(h);
|
|
8258
8321
|
if (!n) return;
|
|
8259
|
-
let r =
|
|
8322
|
+
let r = P.threadId;
|
|
8260
8323
|
await xe(async () => {
|
|
8261
|
-
let i = await
|
|
8324
|
+
let i = await N.toggleReaction(e, {
|
|
8262
8325
|
emoji: t,
|
|
8263
8326
|
authorName: n.name
|
|
8264
8327
|
}).catch(We);
|
|
8265
8328
|
d((e) => e.map((e) => e._id === r ? i.thread : e)), be("reaction_added");
|
|
8266
8329
|
});
|
|
8267
8330
|
}, [
|
|
8268
|
-
|
|
8331
|
+
N,
|
|
8269
8332
|
He,
|
|
8270
8333
|
h,
|
|
8271
|
-
|
|
8334
|
+
P,
|
|
8272
8335
|
We,
|
|
8273
8336
|
xe
|
|
8274
|
-
]), [ut, dt] = B(!1), ft = W(async () => await Ce(async () => (await
|
|
8275
|
-
|
|
8337
|
+
]), [ut, dt] = B(!1), ft = W(async () => await Ce(async () => (await N.forgetMe(), F({ kind: "idle" }), g({ type: "forget-me" }), dt(!0), !0)) === !0, [
|
|
8338
|
+
N,
|
|
8276
8339
|
Ce,
|
|
8277
8340
|
g
|
|
8278
8341
|
]);
|
|
@@ -8283,10 +8346,10 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8283
8346
|
}, [ut]);
|
|
8284
8347
|
let [G, pt] = B(!1), mt = W(async () => {
|
|
8285
8348
|
await we(async () => {
|
|
8286
|
-
await
|
|
8349
|
+
await N.signOut(), F({ kind: "idle" }), g({ type: "signed-out" }), pt(!0);
|
|
8287
8350
|
});
|
|
8288
8351
|
}, [
|
|
8289
|
-
|
|
8352
|
+
N,
|
|
8290
8353
|
we,
|
|
8291
8354
|
g
|
|
8292
8355
|
]);
|
|
@@ -8295,13 +8358,13 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8295
8358
|
let e = window.setTimeout(() => pt(!1), 5e3);
|
|
8296
8359
|
return () => window.clearTimeout(e);
|
|
8297
8360
|
}, [G]);
|
|
8298
|
-
let ht =
|
|
8361
|
+
let ht = P.kind === "thread" ? u.find((e) => e._id === P.threadId) ?? null : null, gt = Fe || Le != null && Le === ht?.authorClientId, _t = P.kind === "thread" ? P.threadId : null, vt = rt(() => w ? u.filter((e) => e._id === _t || Ca(e.url, c, a) === void 0) : u, [
|
|
8299
8362
|
u,
|
|
8300
8363
|
w,
|
|
8301
8364
|
c,
|
|
8302
8365
|
_t,
|
|
8303
8366
|
a
|
|
8304
|
-
]), yt = x &&
|
|
8367
|
+
]), yt = x && P.kind !== "placing" ? u.length - vt.length : 0, bt = U(/* @__PURE__ */ new Map()), xt = rt(() => {
|
|
8305
8368
|
let e = bt.current, t = vt.map((t) => {
|
|
8306
8369
|
let { point: n, memory: r } = Ti({
|
|
8307
8370
|
anchorX: t.anchorX,
|
|
@@ -8333,7 +8396,7 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8333
8396
|
elements: xt.flatMap((e) => e.point.element ? [e.point.element] : [])
|
|
8334
8397
|
};
|
|
8335
8398
|
}, [xt]);
|
|
8336
|
-
let Ct = vt.some((e) => e.anchorSelector != null), wt = $r(
|
|
8399
|
+
let Ct = vt.some((e) => e.anchorSelector != null), wt = $r(P.kind !== "placing" && !Ae && x ? xt : Yl, (e) => e.thread._id, 140), Tt = $r(!Ae || P.kind === "placing" || P.kind === "composing-new" ? Zl : Ql, (e) => e.key, 160), Et = [];
|
|
8337
8400
|
Oe.kind === "hidden-with-toast" && Et.push({
|
|
8338
8401
|
key: "hud-hidden",
|
|
8339
8402
|
body: /* @__PURE__ */ Q(S, { children: [
|
|
@@ -8355,7 +8418,7 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8355
8418
|
key: "signed-out",
|
|
8356
8419
|
body: "Signed out — commenting anonymously again."
|
|
8357
8420
|
});
|
|
8358
|
-
let Dt = $r(Et, (e) => e.key, 220), Ot = $r(
|
|
8421
|
+
let Dt = $r(Et, (e) => e.key, 220), Ot = $r(P.kind === "thread" && ht ? [ht] : Xl, (e) => e._id, 160), K = ei(P.kind === "composing-new" ? P : null, 160), kt = ei(k, 140);
|
|
8359
8422
|
return V(() => {
|
|
8360
8423
|
if (!Ct) return;
|
|
8361
8424
|
let e = null, t = !1;
|
|
@@ -8375,9 +8438,9 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8375
8438
|
r.disconnect(), e != null && cancelAnimationFrame(e);
|
|
8376
8439
|
};
|
|
8377
8440
|
}, [Ct]), V(() => {
|
|
8378
|
-
|
|
8441
|
+
P.kind === "thread" && ht == null && Ye();
|
|
8379
8442
|
}, [
|
|
8380
|
-
|
|
8443
|
+
P,
|
|
8381
8444
|
ht,
|
|
8382
8445
|
Ye
|
|
8383
8446
|
]), /* @__PURE__ */ Q("div", {
|
|
@@ -8388,8 +8451,8 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8388
8451
|
/* @__PURE__ */ Q("div", {
|
|
8389
8452
|
class: "markup-pins-layer",
|
|
8390
8453
|
children: [wt.map(({ key: e, value: { thread: t, point: n }, isLeaving: r, enterDelayMs: i }) => {
|
|
8391
|
-
let o = !r &&
|
|
8392
|
-
return /* @__PURE__ */ Q(
|
|
8454
|
+
let o = !r && P.kind === "thread" && P.threadId === t._id, s = t.comments.reduce((e, t) => e + +!t.deleted, 0);
|
|
8455
|
+
return /* @__PURE__ */ Q(kl, {
|
|
8393
8456
|
pageX: n.pageX,
|
|
8394
8457
|
pageY: n.pageY,
|
|
8395
8458
|
count: s,
|
|
@@ -8400,23 +8463,23 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8400
8463
|
enterDelayMs: i,
|
|
8401
8464
|
otherLocation: Ca(t.url, c, a),
|
|
8402
8465
|
onClick: () => {
|
|
8403
|
-
be("thread_opened", { commentCount: s }),
|
|
8466
|
+
be("thread_opened", { commentCount: s }), F({
|
|
8404
8467
|
kind: "thread",
|
|
8405
8468
|
threadId: t._id
|
|
8406
8469
|
});
|
|
8407
8470
|
}
|
|
8408
8471
|
}, e);
|
|
8409
|
-
}), K ? /* @__PURE__ */ Q(
|
|
8472
|
+
}), K ? /* @__PURE__ */ Q(Al, {
|
|
8410
8473
|
pageX: K.value.pageX,
|
|
8411
8474
|
pageY: K.value.pageY,
|
|
8412
8475
|
isLeaving: K.isLeaving
|
|
8413
8476
|
}) : null]
|
|
8414
8477
|
}),
|
|
8415
|
-
|
|
8478
|
+
P.kind === "placing" ? /* @__PURE__ */ Q(jl, {
|
|
8416
8479
|
onPlace: Ze,
|
|
8417
8480
|
onCancel: Ye
|
|
8418
8481
|
}) : null,
|
|
8419
|
-
Ot.map(({ key: e, value: t, isLeaving: n }) => /* @__PURE__ */ Q(
|
|
8482
|
+
Ot.map(({ key: e, value: t, isLeaving: n }) => /* @__PURE__ */ Q(Il, {
|
|
8420
8483
|
thread: t,
|
|
8421
8484
|
isLeaving: n,
|
|
8422
8485
|
authorName: Pe,
|
|
@@ -8429,7 +8492,7 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8429
8492
|
isPending: Ee,
|
|
8430
8493
|
error: De,
|
|
8431
8494
|
isHidden: Ae,
|
|
8432
|
-
members:
|
|
8495
|
+
members: te,
|
|
8433
8496
|
onAuthor: Qe,
|
|
8434
8497
|
onSignIn: et,
|
|
8435
8498
|
onSignOut: mt,
|
|
@@ -8441,7 +8504,7 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8441
8504
|
onDelete: nt,
|
|
8442
8505
|
onResolve: H
|
|
8443
8506
|
}, e)),
|
|
8444
|
-
K ? /* @__PURE__ */ Q(
|
|
8507
|
+
K ? /* @__PURE__ */ Q(ml, {
|
|
8445
8508
|
isLeaving: K.isLeaving,
|
|
8446
8509
|
pageX: K.value.pageX,
|
|
8447
8510
|
pageY: K.value.pageY,
|
|
@@ -8457,29 +8520,29 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8457
8520
|
screenshotFailed: K.value.screenshotFailed,
|
|
8458
8521
|
screenshotRedactedCount: K.value.screenshotRedactedCount,
|
|
8459
8522
|
screenshotRedactedSelectors: K.value.screenshotRedactedSelectors,
|
|
8460
|
-
members:
|
|
8523
|
+
members: te,
|
|
8461
8524
|
onAuthor: Qe,
|
|
8462
8525
|
onSignIn: et,
|
|
8463
8526
|
onSignOut: mt,
|
|
8464
8527
|
onSubmit: tt,
|
|
8465
8528
|
onClose: Ye
|
|
8466
8529
|
}) : null,
|
|
8467
|
-
Tt.map((t) => /* @__PURE__ */ Q(
|
|
8530
|
+
Tt.map((t) => /* @__PURE__ */ Q(ql, {
|
|
8468
8531
|
isLeaving: t.isLeaving,
|
|
8469
|
-
isActive:
|
|
8470
|
-
onToggle: () =>
|
|
8532
|
+
isActive: P.kind === "placing",
|
|
8533
|
+
onToggle: () => P.kind === "placing" ? Ye() : z(),
|
|
8471
8534
|
onHide: () => ke({ type: "hide-with-toast" }),
|
|
8472
8535
|
position: y,
|
|
8473
8536
|
showInbox: Fe,
|
|
8474
8537
|
unreadCount: Fe ? re : 0,
|
|
8475
|
-
inboxOpen:
|
|
8538
|
+
inboxOpen: k === "inbox",
|
|
8476
8539
|
onOpenInbox: () => {
|
|
8477
|
-
let e =
|
|
8478
|
-
|
|
8540
|
+
let e = k === "inbox" ? null : "inbox";
|
|
8541
|
+
A(e), e && (be("notifications_opened", { unreadCount: re }), ue());
|
|
8479
8542
|
},
|
|
8480
8543
|
pinsVisible: x,
|
|
8481
8544
|
onTogglePins: () => C((e) => !e),
|
|
8482
|
-
identityButton: /* @__PURE__ */ Q(
|
|
8545
|
+
identityButton: /* @__PURE__ */ Q(Sc, {
|
|
8483
8546
|
identity: h,
|
|
8484
8547
|
position: y,
|
|
8485
8548
|
isSigningIn: $e,
|
|
@@ -8490,17 +8553,17 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8490
8553
|
onSignOut: mt,
|
|
8491
8554
|
onForgetMe: ft
|
|
8492
8555
|
}),
|
|
8493
|
-
overflowButton: /* @__PURE__ */ Q(
|
|
8556
|
+
overflowButton: /* @__PURE__ */ Q(Cl, {
|
|
8494
8557
|
position: y,
|
|
8495
8558
|
onSetPosition: b,
|
|
8496
|
-
autoCapture:
|
|
8559
|
+
autoCapture: E && r?.enabled !== !1,
|
|
8497
8560
|
autoCaptureLocked: r?.enabled === !1,
|
|
8498
|
-
onToggleAutoCapture: () =>
|
|
8561
|
+
onToggleAutoCapture: () => D((e) => !e),
|
|
8499
8562
|
isUrlScoped: w,
|
|
8500
8563
|
hiddenByUrlScope: yt,
|
|
8501
|
-
onToggleUrlScope: () =>
|
|
8502
|
-
showResolved:
|
|
8503
|
-
onToggleShowResolved: () =>
|
|
8564
|
+
onToggleUrlScope: () => T((e) => !e),
|
|
8565
|
+
showResolved: O,
|
|
8566
|
+
onToggleShowResolved: () => ee((e) => !e),
|
|
8504
8567
|
onHideForSession: () => ke({ type: "hide-with-toast" }),
|
|
8505
8568
|
identity: h,
|
|
8506
8569
|
apiUrl: e,
|
|
@@ -8508,28 +8571,28 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8508
8571
|
isForgettingMe: he.isPending,
|
|
8509
8572
|
forgetMeError: he.error,
|
|
8510
8573
|
onForgetMe: ft,
|
|
8511
|
-
version: "1.27.
|
|
8574
|
+
version: "1.27.3",
|
|
8512
8575
|
dashboardUrl: i
|
|
8513
8576
|
})
|
|
8514
8577
|
}, t.key)),
|
|
8515
|
-
kt?.value === "inbox" && Fe ? /* @__PURE__ */ Q(
|
|
8578
|
+
kt?.value === "inbox" && Fe ? /* @__PURE__ */ Q(Ol, {
|
|
8516
8579
|
kind: "inbox",
|
|
8517
8580
|
label: "Inbox",
|
|
8518
8581
|
position: y,
|
|
8519
8582
|
ignoreToolbarKind: "inbox",
|
|
8520
8583
|
isLeaving: kt.isLeaving,
|
|
8521
|
-
onClose:
|
|
8522
|
-
children: /* @__PURE__ */ Q(
|
|
8584
|
+
onClose: j,
|
|
8585
|
+
children: /* @__PURE__ */ Q(gl, {
|
|
8523
8586
|
state: ae,
|
|
8524
8587
|
isMarkingAll: se,
|
|
8525
|
-
onBack:
|
|
8588
|
+
onBack: j,
|
|
8526
8589
|
onItemClick: (e) => {
|
|
8527
|
-
|
|
8590
|
+
j(), it(e);
|
|
8528
8591
|
},
|
|
8529
8592
|
onMarkAllRead: at
|
|
8530
8593
|
})
|
|
8531
8594
|
}) : null,
|
|
8532
|
-
Dt.map((e) => /* @__PURE__ */ Q(
|
|
8595
|
+
Dt.map((e) => /* @__PURE__ */ Q(au, {
|
|
8533
8596
|
position: y,
|
|
8534
8597
|
isLeaving: e.isLeaving,
|
|
8535
8598
|
children: e.value.body
|
|
@@ -8537,7 +8600,7 @@ function Zl({ apiUrl: e, apiKey: t, position: n = "bottom-right", screenshots: r
|
|
|
8537
8600
|
]
|
|
8538
8601
|
});
|
|
8539
8602
|
}
|
|
8540
|
-
function
|
|
8603
|
+
function au({ position: e, isLeaving: t, children: n }) {
|
|
8541
8604
|
return /* @__PURE__ */ Q("div", {
|
|
8542
8605
|
class: Z("markup-hud-hidden-toast", e === "bottom-left" ? "markup-hud-hidden-toast-left" : e === "bottom-center" ? "markup-hud-hidden-toast-center" : "markup-hud-hidden-toast-right", t && "is-leaving"),
|
|
8543
8606
|
role: "status",
|
|
@@ -8548,7 +8611,7 @@ function Ql({ position: e, isLeaving: t, children: n }) {
|
|
|
8548
8611
|
}
|
|
8549
8612
|
//#endregion
|
|
8550
8613
|
//#region src/runtime/mount.tsx
|
|
8551
|
-
function
|
|
8614
|
+
function ou(e, t) {
|
|
8552
8615
|
e.style.position = "fixed", e.style.inset = "0", e.style.zIndex = "2147483647", e.style.pointerEvents = "none", Re(e, t.theme ?? "auto");
|
|
8553
8616
|
let n = Ue(), r = e.attachShadow({ mode: "open" }), i = document.createElement("style");
|
|
8554
8617
|
i.textContent = le, r.appendChild(i);
|
|
@@ -8556,44 +8619,54 @@ function $l(e, t) {
|
|
|
8556
8619
|
a.className = "markup-shadow-root", r.appendChild(a), je({
|
|
8557
8620
|
apiUrl: t.apiUrl,
|
|
8558
8621
|
apiKey: t.apiKey,
|
|
8559
|
-
widgetVersion: "1.27.
|
|
8622
|
+
widgetVersion: "1.27.3"
|
|
8560
8623
|
}), ye(t.analytics === !1 ? null : {
|
|
8561
8624
|
apiUrl: t.apiUrl,
|
|
8562
8625
|
apiKey: t.apiKey,
|
|
8563
|
-
widgetVersion: "1.27.
|
|
8626
|
+
widgetVersion: "1.27.3"
|
|
8564
8627
|
}), be("widget_loaded");
|
|
8565
8628
|
let { theme: o, analytics: s, ...c } = t;
|
|
8566
8629
|
return ce(/* @__PURE__ */ Q(Ce, {
|
|
8567
8630
|
onError: (e) => I(e, { context: "render" }),
|
|
8568
|
-
children: /* @__PURE__ */ Q(
|
|
8631
|
+
children: /* @__PURE__ */ Q(iu, { ...c })
|
|
8569
8632
|
}), a), () => {
|
|
8570
8633
|
n(), je(null), ye(null), ce(null, a);
|
|
8571
8634
|
};
|
|
8572
8635
|
}
|
|
8573
8636
|
//#endregion
|
|
8574
8637
|
//#region src/widget.ts
|
|
8575
|
-
var
|
|
8576
|
-
function
|
|
8638
|
+
var su = null, cu = null, lu = null, uu = null, du = null, fu = !1;
|
|
8639
|
+
function pu(e) {
|
|
8640
|
+
return JSON.stringify(e, (e, t) => typeof t == "object" && t && !Array.isArray(t) ? Object.fromEntries(Object.entries(t).sort(([e], [t]) => e < t ? -1 : +(e > t))) : t);
|
|
8641
|
+
}
|
|
8642
|
+
function mu(e) {
|
|
8577
8643
|
if (!e.apiUrl || !e.apiKey) return console.warn("[markup] init() requires both apiUrl and apiKey, so the widget was not mounted"), () => {};
|
|
8578
|
-
e.fab != null && !
|
|
8579
|
-
let t = ()
|
|
8580
|
-
|
|
8644
|
+
e.fab != null && !fu && (fu = !0, console.warn("[markup] the `fab` option is ignored and will be removed in the next major. The toolbar replaced the floating action button. Remove it from your config."));
|
|
8645
|
+
let t = pu(e);
|
|
8646
|
+
if (du && t === uu && (lu !== null || cu?.isConnected === !0)) return du;
|
|
8647
|
+
hu(), uu = t;
|
|
8648
|
+
let n = () => {
|
|
8649
|
+
du === n && hu();
|
|
8650
|
+
};
|
|
8651
|
+
du = n;
|
|
8652
|
+
let r = () => {
|
|
8653
|
+
if (lu = null, !document.body) return;
|
|
8581
8654
|
let t = document.createElement("div");
|
|
8582
|
-
t.id = "markup-widget", document.body.appendChild(t),
|
|
8655
|
+
t.id = "markup-widget", document.body.appendChild(t), cu = t, su = ou(t, e);
|
|
8583
8656
|
};
|
|
8584
8657
|
if (document.readyState === "loading" || !document.body) {
|
|
8585
|
-
let e = () =>
|
|
8586
|
-
|
|
8587
|
-
} else
|
|
8588
|
-
return
|
|
8658
|
+
let e = () => r();
|
|
8659
|
+
lu = () => document.removeEventListener("DOMContentLoaded", e), document.addEventListener("DOMContentLoaded", e, { once: !0 });
|
|
8660
|
+
} else r();
|
|
8661
|
+
return n;
|
|
8589
8662
|
}
|
|
8590
|
-
function
|
|
8591
|
-
|
|
8663
|
+
function hu() {
|
|
8664
|
+
lu &&= (lu(), null), su &&= (su(), null), cu?.parentNode && cu.parentNode.removeChild(cu), cu = null, uu = null, du = null;
|
|
8592
8665
|
}
|
|
8593
8666
|
if (typeof document < "u") {
|
|
8594
8667
|
let e = document.currentScript ?? document.querySelector("script[data-markup-widget=\"true\"]"), t = e?.dataset.apiUrl, n = e?.dataset.apiKey;
|
|
8595
8668
|
if (t && n) {
|
|
8596
|
-
let r = e?.dataset.position, i = e?.dataset.theme, a = e?.dataset.fab, o = e?.dataset.dashboardUrl, s = e?.dataset.analytics !== "false", c = e?.dataset.routeParams?.split(",").map((e) => e.trim()).filter((e) => e !== ""), l = () =>
|
|
8669
|
+
let r = e?.dataset.position, i = e?.dataset.theme, a = e?.dataset.fab, o = e?.dataset.dashboardUrl, s = e?.dataset.analytics !== "false", c = e?.dataset.routeParams?.split(",").map((e) => e.trim()).filter((e) => e !== ""), l = () => mu({
|
|
8597
8670
|
apiUrl: t,
|
|
8598
8671
|
apiKey: n,
|
|
8599
8672
|
position: r,
|
|
@@ -8607,6 +8680,6 @@ if (typeof document < "u") {
|
|
|
8607
8680
|
}
|
|
8608
8681
|
}
|
|
8609
8682
|
//#endregion
|
|
8610
|
-
export {
|
|
8683
|
+
export { hu as destroy, mu as init };
|
|
8611
8684
|
|
|
8612
8685
|
//# sourceMappingURL=widget.js.map
|