@popgrids/embed 0.0.4 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/AGENTS.md +14 -0
  2. package/dist/assets/wordmark-svg.d.ts +7 -0
  3. package/dist/assets/wordmark-svg.d.ts.map +1 -0
  4. package/dist/components/pop-account-switcher.d.ts +31 -0
  5. package/dist/components/pop-account-switcher.d.ts.map +1 -0
  6. package/dist/components/pop-auth-code.d.ts +22 -0
  7. package/dist/components/pop-auth-code.d.ts.map +1 -0
  8. package/dist/components/pop-auth-email.d.ts +18 -0
  9. package/dist/components/pop-auth-email.d.ts.map +1 -0
  10. package/dist/components/pop-auth-join.d.ts +20 -0
  11. package/dist/components/pop-auth-join.d.ts.map +1 -0
  12. package/dist/components/pop-auth-no-code.d.ts +14 -0
  13. package/dist/components/pop-auth-no-code.d.ts.map +1 -0
  14. package/dist/components/pop-auth-panel.d.ts +17 -7
  15. package/dist/components/pop-auth-panel.d.ts.map +1 -1
  16. package/dist/components/pop-button-link.d.ts +43 -0
  17. package/dist/components/pop-button-link.d.ts.map +1 -0
  18. package/dist/components/pop-comment-bar.d.ts +2 -0
  19. package/dist/components/pop-comment-bar.d.ts.map +1 -1
  20. package/dist/components/pop-comment-thread.d.ts.map +1 -1
  21. package/dist/components/pop-comment.d.ts +2 -0
  22. package/dist/components/pop-comment.d.ts.map +1 -1
  23. package/dist/components/pop-feed.d.ts +15 -0
  24. package/dist/components/pop-feed.d.ts.map +1 -1
  25. package/dist/components/pop-grid.d.ts +1 -0
  26. package/dist/components/pop-grid.d.ts.map +1 -1
  27. package/dist/components/refs.d.ts +8 -0
  28. package/dist/components/refs.d.ts.map +1 -0
  29. package/dist/embed.js +2572 -1755
  30. package/dist/embed.js.map +1 -1
  31. package/dist/index.cjs +999 -118
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.d.ts +1 -1
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +1360 -547
  36. package/dist/index.js.map +1 -1
  37. package/dist/lib/backoff.d.ts +11 -0
  38. package/dist/lib/backoff.d.ts.map +1 -0
  39. package/dist/lib/popup-auth.d.ts +10 -4
  40. package/dist/lib/popup-auth.d.ts.map +1 -1
  41. package/dist/store/embed-auth-store.d.ts +201 -0
  42. package/dist/store/embed-auth-store.d.ts.map +1 -0
  43. package/dist/store/grid-store.d.ts +3 -0
  44. package/dist/store/grid-store.d.ts.map +1 -1
  45. package/dist/types/models.d.ts +12 -0
  46. package/dist/types/models.d.ts.map +1 -1
  47. package/package.json +1 -1
  48. package/dist/store/auth-store.d.ts +0 -8
  49. package/dist/store/auth-store.d.ts.map +0 -1
package/dist/index.js CHANGED
@@ -1,174 +1,1191 @@
1
- import { computed as e, effect as t, signal as n, untracked as r } from "@preact/signals-core";
2
- import { autoUpdate as i, computePosition as a, flip as o, offset as s, platform as c, shift as l } from "@floating-ui/dom";
3
- var u = "/embed/auth/login", d = "popgrids-auth", f = "popup,width=480,height=640", ee = 300 * 1e3, te = 250, p = class extends Error {
1
+ import { autoUpdate as e, computePosition as t, flip as n, offset as r, platform as i, shift as a } from "@floating-ui/dom";
2
+ import { computed as o, effect as s, signal as c, untracked as l } from "@preact/signals-core";
3
+ //#region src/helpers/author.ts
4
+ function u(e) {
5
+ return e ? e.split(" ").map((e) => e[0] ?? "").join("").toUpperCase().slice(0, 2) : "?";
6
+ }
7
+ //#endregion
8
+ //#region src/lib/backoff.ts
9
+ function d(e, t, n) {
10
+ let r = Math.min(t * 2 ** e, n);
11
+ return Math.floor(Math.random() * r);
12
+ }
13
+ var f = "/embed/auth/login", ee = "popgrids-auth", te = "popup,width=480,height=640", ne = 300 * 1e3, re = 250, p = class extends Error {
4
14
  constructor(e) {
5
15
  super(e), this.name = "PopupAuthError";
6
16
  }
7
- }, m = (e, t, n) => {
8
- let r = new URL(u, e);
17
+ }, ie = class extends p {
18
+ constructor(e = "Sign-in was cancelled") {
19
+ super(e), this.name = "PopupAuthCancelledError";
20
+ }
21
+ }, ae = (e, t, n) => {
22
+ let r = new URL(f, e);
9
23
  return r.searchParams.set("publicKey", t), r.searchParams.set("returnOrigin", n), r.toString();
10
- }, ne = (e, t) => {
11
- let n = window.open(m(e, t, window.location.origin), d, f);
24
+ }, oe = (e, t) => {
25
+ let n = window.open(ae(e, t, window.location.origin), ee, te);
12
26
  if (!n) throw new p("Popup blocked. Allow popups for this site and try again.");
13
27
  return n;
14
- }, h = (e, t) => typeof e == "object" && !!e && "type" in e && "source" in e && e.type === t && e.source === "popgrids-embed", re = (e) => {
28
+ }, m = (e, t) => typeof e == "object" && !!e && "type" in e && "source" in e && e.type === t && e.source === "popgrids-embed", se = (e) => {
15
29
  if (typeof e != "object" || !e || !("user" in e)) return null;
16
- let t = e.user;
17
- if (typeof t != "object" || !t || !("id" in t)) return null;
18
- let n = t;
19
- return typeof n.id == "string" ? {
20
- id: n.id,
21
- name: typeof n.name == "string" ? n.name : "",
22
- email: typeof n.email == "string" ? n.email : "",
23
- image: typeof n.image == "string" ? n.image : null
24
- } : null;
25
- }, ie = (e, t, n) => new Promise((r, i) => {
26
- let a = new URL(e).origin, o = !1, s = !1, c = !1, l = (e, t) => {
30
+ let t = e, n = t.user;
31
+ if (typeof n != "object" || !n || !("id" in n)) return null;
32
+ let r = n;
33
+ return typeof r.id != "string" || typeof t.token != "string" || typeof t.expiresAt != "number" ? null : {
34
+ user: {
35
+ id: r.id,
36
+ name: typeof r.name == "string" ? r.name : "",
37
+ email: typeof r.email == "string" ? r.email : "",
38
+ image: typeof r.image == "string" ? r.image : null
39
+ },
40
+ token: t.token,
41
+ expiresAt: t.expiresAt
42
+ };
43
+ }, ce = (e, t, n) => new Promise((r, i) => {
44
+ let a = new URL(e).origin, o = !1, s = (e, t) => {
27
45
  if (!o) {
28
- if (o = !0, m(), e === "resolve") {
46
+ if (o = !0, d(), e === "resolve") {
29
47
  r();
30
48
  return;
31
49
  }
32
50
  i(t ?? new p("Sign-in failed"));
33
51
  }
34
- }, u = (e) => {
52
+ }, c = (e) => {
35
53
  if (e.origin === a) {
36
- if (h(e.data, "popgrids:auth:success")) {
37
- s = !0;
38
- let t = re(e.data);
39
- t && n?.onAuthUser?.(t), l("resolve");
40
- return;
41
- }
42
- h(e.data, "popgrids:auth:error") && (s = !0, l("reject", new p(typeof e.data == "object" && e.data !== null && "error" in e.data && typeof e.data.error == "string" ? e.data.error : "Sign-in failed")));
43
- }
44
- }, d = window.setInterval(() => {
45
- t.closed && (c || (c = !0, (async () => {
46
- if (await new Promise((e) => window.setTimeout(e, te)), !(s || o)) {
47
- if (n?.verifySignedIn && await n.verifySignedIn()) {
48
- l("resolve");
54
+ if (m(e.data, "popgrids:auth:success")) {
55
+ let t = se(e.data);
56
+ if (!t) {
57
+ s("reject", new p("Sign-in failed"));
49
58
  return;
50
59
  }
51
- l("reject", new p("Sign-in was cancelled"));
60
+ n?.onAuthSuccess?.(t), s("resolve");
61
+ return;
52
62
  }
53
- })()));
54
- }, 300), f = window.setTimeout(() => {
63
+ m(e.data, "popgrids:auth:error") && s("reject", new p(typeof e.data == "object" && e.data !== null && "error" in e.data && typeof e.data.error == "string" ? e.data.error : "Sign-in failed"));
64
+ }
65
+ }, l = window.setInterval(() => {
66
+ !t.closed || o || (clearInterval(l), window.setTimeout(() => {
67
+ o || s("reject", new ie());
68
+ }, re));
69
+ }, 300), u = window.setTimeout(() => {
55
70
  try {
56
71
  t.close();
57
72
  } catch {}
58
- l("reject", new p("Sign-in timed out"));
59
- }, ee), m = () => {
60
- window.removeEventListener("message", u), clearInterval(d), clearTimeout(f);
73
+ s("reject", new p("Sign-in timed out"));
74
+ }, ne), d = () => {
75
+ window.removeEventListener("message", c), clearInterval(l), clearTimeout(u);
61
76
  };
62
- window.addEventListener("message", u);
63
- }), ae = async (e, t, n) => {
64
- await ie(e, ne(e, t), n);
65
- }, g = n(null), _ = n(null), v = n(!1), oe = [
66
- 0,
67
- 150,
68
- 400
69
- ], y = [
70
- 0,
71
- 100,
72
- 200,
73
- 400,
74
- 800,
75
- 1500,
76
- 2500,
77
- 4e3
78
- ];
79
- async function b(e, t, n = oe) {
80
- if (!e || !t) return g.value = null, !1;
81
- let r = new URL(`/api/v1/embed/grids/${t}/session`, e);
82
- r.searchParams.set("pageUrl", window.location.href);
83
- for (let e = 0; e < n.length; e++) {
84
- let t = n[e] ?? 0;
85
- t > 0 && await new Promise((e) => window.setTimeout(e, t));
77
+ window.addEventListener("message", c);
78
+ }), le = async (e, t, n) => {
79
+ await ce(e, oe(e, t), n);
80
+ }, ue = "X-PopGrids-Embed-Token", de = 300 * 1e3, fe = "OTP_EXPIRED", pe = "TOO_MANY_ATTEMPTS", me = "INVALID_OTP", h = "Dismiss", he = 60, ge = "Can’t reach PopGrids. Check your connection and try again.", _e = 3e4, g = (e) => `popgrids:embed-session:${e}`, ve = (e) => typeof e == "object" && !!e && typeof e.token == "string" && typeof e.expiresAt == "number" && !!e.user, _ = class e {
81
+ static {
82
+ this.instances = /* @__PURE__ */ new Set();
83
+ }
84
+ static {
85
+ this.syncing = !1;
86
+ }
87
+ applyExternalChange(e) {
88
+ if (e === null) {
89
+ this.currentUser.value && this.handleSignedOut();
90
+ return;
91
+ }
86
92
  try {
87
- let e = await fetch(r, { credentials: "include" });
88
- if (!e.ok) continue;
89
- if (g.value = (await e.json()).user ?? null, g.value !== null) return !0;
93
+ let t = JSON.parse(e);
94
+ ve(t) && t.expiresAt > Date.now() && this.writeStoredSession(t);
90
95
  } catch {}
91
96
  }
92
- return g.value = null, !1;
93
- }
94
- async function x(e, t) {
95
- _.value = null, v.value = !0;
96
- try {
97
- return await ae(e, t, {
98
- onAuthUser: (e) => {
99
- g.value = e;
100
- },
101
- verifySignedIn: () => b(e, t, y)
102
- }), g.value ? !0 : await b(e, t, y);
103
- } catch (e) {
104
- return _.value = e instanceof Error ? e.message : "Sign-in failed", !1;
105
- } finally {
106
- v.value = !1;
97
+ notifySiblings(t) {
98
+ if (!e.syncing) {
99
+ e.syncing = !0;
100
+ try {
101
+ for (let n of e.instances) n !== this && n.publicKey === this.publicKey && n.applyExternalChange(t);
102
+ } finally {
103
+ e.syncing = !1;
104
+ }
105
+ }
107
106
  }
108
- }
109
- function se() {
110
- _.value = null;
111
- }
112
- //#endregion
113
- //#region src/store/registry.ts
114
- var S = /* @__PURE__ */ new WeakMap(), ce = (e, t, n = t.constructor) => {
115
- let r = S.get(e);
116
- r || (r = /* @__PURE__ */ new Map(), S.set(e, r)), r.set(n, t);
117
- }, le = (e) => {
118
- S.delete(e);
119
- }, ue = (e, t) => {
107
+ constructor(t) {
108
+ this.currentUser = c(null), this.authError = c(null), this.authErrorAction = c(h), this.authNoticeDismissals = c(0), this.authErrorRetryAt = c(null), this.authPending = c(!1), this.organizations = c([]), this.organizationsLoading = c(!1), this.authView = c("idle"), this.otpEmail = c(""), this.otpPending = c(!1), this.otpError = c(null), this.otpExpiresAt = c(null), this.authSocket = null, this.authReconnectAttempt = 0, this.authReconnectTimer = null, this.destroyed = !1, this.onStorageEvent = (e) => {
109
+ e.storageArea !== window.localStorage || e.key !== g(this.publicKey) || this.applyExternalChange(e.newValue);
110
+ }, this.resolveInlineSignIn = null, this.inlineSignInPromise = null, this.apiUrl = t.apiUrl, this.publicKey = t.publicKey, this.session = this.readStoredSession(), this.currentUser.value = this.session?.user ?? null, window.addEventListener("storage", this.onStorageEvent), e.instances.add(this);
111
+ }
112
+ destroy() {
113
+ this.destroyed = !0, this.closeAuthChannel(), window.removeEventListener("storage", this.onStorageEvent), e.instances.delete(this);
114
+ }
115
+ readStoredSession() {
116
+ try {
117
+ let e = window.localStorage.getItem(g(this.publicKey));
118
+ if (!e) return null;
119
+ let t = JSON.parse(e);
120
+ return ve(t) ? t.expiresAt <= Date.now() ? (this.clearStoredSession(), null) : t : null;
121
+ } catch {
122
+ return null;
123
+ }
124
+ }
125
+ persistSession(e) {
126
+ this.session = e;
127
+ try {
128
+ window.localStorage.setItem(g(this.publicKey), JSON.stringify(e));
129
+ } catch {}
130
+ this.notifySiblings(JSON.stringify(e));
131
+ }
132
+ writeStoredSession(e) {
133
+ this.persistSession(e), this.currentUser.value = e.user, this.authError.value = null, this.organizations.value = [];
134
+ let t = this.authSocket !== null || this.authReconnectTimer !== null;
135
+ this.closeAuthChannel(), t && this.connectAuthChannel();
136
+ }
137
+ clearStoredSession() {
138
+ this.session = null;
139
+ try {
140
+ window.localStorage.removeItem(g(this.publicKey));
141
+ } catch {}
142
+ this.notifySiblings(null), this.organizations.value = [], this.closeAuthChannel();
143
+ }
144
+ get token() {
145
+ return this.session ? this.session.expiresAt <= Date.now() ? (this.handleSignedOut(), null) : this.session.token : null;
146
+ }
147
+ async fetchWithToken(e, t = {}) {
148
+ let n = new Headers(t.headers), r = this.token;
149
+ return r && n.set(ue, r), fetch(new URL(e, this.apiUrl), {
150
+ ...t,
151
+ headers: n
152
+ });
153
+ }
154
+ async authorizedFetch(e, t = {}) {
155
+ let n = await this.fetchWithToken(e, t);
156
+ if (n.status === 401) {
157
+ if (!await this.requestInlineSignIn()) return n;
158
+ n = await this.fetchWithToken(e, t);
159
+ }
160
+ return n;
161
+ }
162
+ async readError(e) {
163
+ try {
164
+ let t = await e.json();
165
+ return {
166
+ message: typeof t.error == "string" && t.error ? t.error : "Something went wrong. Please try again.",
167
+ code: typeof t.code == "string" ? t.code : void 0,
168
+ retryAfter: typeof t.retryAfter == "number" ? t.retryAfter : void 0
169
+ };
170
+ } catch {}
171
+ return { message: "Something went wrong. Please try again." };
172
+ }
173
+ startEmailSignIn() {
174
+ this.otpError.value = null, this.authView.value = "email";
175
+ }
176
+ backToIdle() {
177
+ this.otpError.value = null, this.otpEmail.value = "", this.otpExpiresAt.value = null, this.authView.value = "idle", this.resolveInlineSignIn?.(!1);
178
+ }
179
+ backToEmail() {
180
+ this.otpError.value = null, this.authView.value = "email";
181
+ }
182
+ expireOtp() {
183
+ this.authView.value = "email", this.otpExpiresAt.value = null, this.otpError.value = null;
184
+ }
185
+ backToCode() {
186
+ this.authView.value = "code";
187
+ }
188
+ showNoCode() {
189
+ this.authView.value = "no-code";
190
+ }
191
+ async sendOtp(e) {
192
+ this.otpPending.value = !0, this.otpError.value = null;
193
+ try {
194
+ let t = await fetch(new URL(`/api/v1/embed/grids/${this.publicKey}/auth/otp/send`, this.apiUrl), {
195
+ method: "POST",
196
+ headers: { "Content-Type": "application/json" },
197
+ body: JSON.stringify({ email: e })
198
+ });
199
+ if (!t.ok) {
200
+ let { message: e, retryAfter: n } = await this.readError(t);
201
+ return t.status === 429 ? this.showRateLimited(n) : this.otpError.value = e, !1;
202
+ }
203
+ return this.otpEmail.value = e, this.otpExpiresAt.value = Date.now() + de, this.authView.value = "code", !0;
204
+ } catch {
205
+ return this.showAuthError(ge), !1;
206
+ } finally {
207
+ this.otpPending.value = !1;
208
+ }
209
+ }
210
+ async resendOtp() {
211
+ return this.otpEmail.value ? this.sendOtp(this.otpEmail.value) : !1;
212
+ }
213
+ async verifyOtp(e) {
214
+ this.otpPending.value = !0, this.otpError.value = null;
215
+ try {
216
+ let t = await fetch(new URL(`/api/v1/embed/grids/${this.publicKey}/auth/otp/verify`, this.apiUrl), {
217
+ method: "POST",
218
+ headers: { "Content-Type": "application/json" },
219
+ body: JSON.stringify({
220
+ email: this.otpEmail.value,
221
+ otp: e
222
+ })
223
+ });
224
+ if (!t.ok) {
225
+ let { message: e, code: n, retryAfter: r } = await this.readError(t);
226
+ return t.status === 429 ? this.showRateLimited(r) : n === pe ? (this.expireOtp(), this.showAuthError("Too many attempts.", "Request a new code")) : n === fe ? this.expireOtp() : n === me ? this.otpError.value = "Invalid code" : this.otpError.value = e, !1;
227
+ }
228
+ let n = await t.json();
229
+ return this.writeStoredSession(n), this.authView.value = "idle", this.otpEmail.value = "", this.otpExpiresAt.value = null, this.resolveInlineSignIn?.(!0), !0;
230
+ } catch {
231
+ return this.showAuthError(ge), !1;
232
+ } finally {
233
+ this.otpPending.value = !1;
234
+ }
235
+ }
236
+ async requestSignIn() {
237
+ this.authError.value = null, this.authPending.value = !0;
238
+ try {
239
+ return await le(this.apiUrl, this.publicKey, { onAuthSuccess: ({ user: e, token: t, expiresAt: n }) => {
240
+ this.writeStoredSession({
241
+ token: t,
242
+ expiresAt: n,
243
+ user: e
244
+ });
245
+ } }), this.currentUser.value !== null;
246
+ } catch (e) {
247
+ return e instanceof ie || this.showAuthError(e instanceof Error ? e.message : "Sign-in failed"), !1;
248
+ } finally {
249
+ this.authPending.value = !1;
250
+ }
251
+ }
252
+ requestInlineSignIn() {
253
+ return this.inlineSignInPromise ? this.inlineSignInPromise : (this.startEmailSignIn(), this.inlineSignInPromise = new Promise((e) => {
254
+ this.resolveInlineSignIn = (t) => {
255
+ this.inlineSignInPromise = null, this.resolveInlineSignIn = null, e(t);
256
+ };
257
+ }), this.inlineSignInPromise);
258
+ }
259
+ showAuthError(e, t = h, n) {
260
+ this.authErrorAction.value = t, this.authErrorRetryAt.value = n === void 0 ? null : Date.now() + n * 1e3, this.authError.value = e;
261
+ }
262
+ showRateLimited(e) {
263
+ this.showAuthError("Too many requests.", h, e ?? he);
264
+ }
265
+ dismissAuthError() {
266
+ this.clearAuthError(), this.authNoticeDismissals.value += 1;
267
+ }
268
+ clearAuthError() {
269
+ this.authError.value = null;
270
+ }
271
+ async loadOrganizations() {
272
+ if (!this.currentUser.value) {
273
+ this.organizations.value = [];
274
+ return;
275
+ }
276
+ if (!this.organizationsLoading.value) {
277
+ this.organizationsLoading.value = !0;
278
+ try {
279
+ let e = await this.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/auth/organizations`);
280
+ if (!e.ok) return;
281
+ let t = await e.json();
282
+ this.organizations.value = t.organizations;
283
+ } catch {} finally {
284
+ this.organizationsLoading.value = !1;
285
+ }
286
+ }
287
+ }
288
+ async switchOrganization(e) {
289
+ let t = await this.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/auth/organizations/${e}`, { method: "POST" });
290
+ if (!t.ok) return t.status === 401 && this.handleSignedOut(), !1;
291
+ let n = await t.json();
292
+ return this.currentUser.value = n.user, this.session && this.persistSession({
293
+ ...this.session,
294
+ user: n.user
295
+ }), !0;
296
+ }
297
+ async signOutEverywhere() {
298
+ let e = await this.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/auth/sign-out`, { method: "POST" });
299
+ return e.ok && this.handleSignedOut({ silent: !0 }), e.ok;
300
+ }
301
+ handleSignedOut(e) {
302
+ let t = this.currentUser.value !== null;
303
+ this.clearStoredSession(), this.currentUser.value = null, this.authView.value = "idle", t && !e?.silent && this.showAuthError("You were signed out. Sign in again to keep commenting.");
304
+ }
305
+ async connectAuthChannel() {
306
+ if (this.destroyed || this.authSocket || !this.currentUser.value) return;
307
+ let e = null, t = !1;
308
+ try {
309
+ let n = await this.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/auth/connect-ticket`, { method: "POST" });
310
+ if (n.ok) {
311
+ let t = await n.json();
312
+ e = t.ticket, this.currentUser.value = t.user, this.session && t.expiresAt && t.expiresAt !== this.session.expiresAt && this.persistSession({
313
+ ...this.session,
314
+ user: t.user,
315
+ expiresAt: t.expiresAt
316
+ });
317
+ } else n.status === 401 && (t = !0);
318
+ } catch {}
319
+ if (t) {
320
+ this.handleSignedOut();
321
+ return;
322
+ }
323
+ if (!e || this.destroyed || !this.currentUser.value) {
324
+ this.scheduleAuthReconnect();
325
+ return;
326
+ }
327
+ let n = new URL(`/api/v1/embed/grids/${this.publicKey}/auth/connect`, this.apiUrl);
328
+ n.protocol = n.protocol === "https:" ? "wss:" : "ws:", n.searchParams.set("ticket", e);
329
+ let r = new WebSocket(n.toString());
330
+ this.authSocket = r, r.onopen = () => {
331
+ this.authReconnectAttempt = 0;
332
+ }, r.onmessage = (e) => {
333
+ try {
334
+ JSON.parse(String(e.data)).type === "session.revoked" && this.handleSignedOut();
335
+ } catch {}
336
+ }, r.onclose = () => {
337
+ this.authSocket = null, !(this.destroyed || !this.currentUser.value) && this.scheduleAuthReconnect();
338
+ }, r.onerror = () => {
339
+ r.close();
340
+ };
341
+ }
342
+ scheduleAuthReconnect() {
343
+ if (this.destroyed || this.authReconnectTimer || !this.currentUser.value) return;
344
+ let e = d(this.authReconnectAttempt, 1e3, _e);
345
+ this.authReconnectAttempt += 1, this.authReconnectTimer = setTimeout(() => {
346
+ this.authReconnectTimer = null, this.connectAuthChannel();
347
+ }, e);
348
+ }
349
+ closeAuthChannel() {
350
+ this.authReconnectTimer &&= (clearTimeout(this.authReconnectTimer), null), this.authSocket &&= (this.authSocket.onopen = null, this.authSocket.onmessage = null, this.authSocket.onclose = null, this.authSocket.onerror = null, this.authSocket.close(), null);
351
+ }
352
+ }, v = /* @__PURE__ */ new WeakMap(), y = (e, t, n = t.constructor) => {
353
+ let r = v.get(e);
354
+ r || (r = /* @__PURE__ */ new Map(), v.set(e, r)), r.set(n, t);
355
+ }, ye = (e) => {
356
+ v.delete(e);
357
+ }, be = (e, t) => {
120
358
  let n = e;
121
359
  for (; n;) {
122
- let e = S.get(n)?.get(t);
360
+ let e = v.get(n)?.get(t);
123
361
  if (e) return e;
124
362
  let r = n.getRootNode();
125
363
  if (!(r instanceof ShadowRoot)) break;
126
364
  n = r.host;
127
365
  }
128
- return null;
366
+ return null;
367
+ };
368
+ function b(e) {
369
+ return function(t, n) {
370
+ let r = Symbol("context_" + (e.name || "store"));
371
+ Object.defineProperty(t, n, {
372
+ get() {
373
+ if (this[r]) return this[r];
374
+ let t = be(this, e);
375
+ if (!t) throw console.error(`[Context] resolveStore failed! isConnected: ${this.isConnected}`, this), Error(`[Context] Store for key "${e.name || e}" not resolved on <${this.localName}>.`);
376
+ return this[r] = t, t;
377
+ },
378
+ enumerable: !0,
379
+ configurable: !0
380
+ });
381
+ };
382
+ }
383
+ //#endregion
384
+ //#region src/styles/base.css?inline
385
+ var xe = "@layer base{:host{box-sizing:border-box;color:var(--pop-foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--pop-color-brand-midnight-100:oklch(96.58% .0161 262.75);--pop-color-brand-midnight-900:oklch(15% .03 255.43);--pop-color-brand-midnight-800:oklch(19% .05 255.43);--pop-color-brand-ocean-400:oklch(63% .19 255.43);--pop-color-brand-ocean-100:oklch(91% .05 255.43);--pop-color-brand-forest-900:oklch(38.66% .0698 180.75);--pop-color-brand-forest-700:oklch(45% .15 165.43);--pop-color-brand-forest-100:oklch(97% .04 165.43);--pop-color-brand-highlight-400:oklch(88% .25 105.43);--pop-color-brand-pumpkin-500:oklch(62% .18 45.43);--pop-color-brand-pumpkin-200:oklch(89% .08 45.43);--pop-color-brand-lemon-300:oklch(91% .12 85.43);--pop-color-brand-lemon-100:oklch(97% .04 85.43);--pop-duration-bouncy:1s;--pop-duration-card-highlight:.6s;--pop-duration-gentle:.833s;--pop-duration-menu:.4s;--pop-duration-pop-hover:.6s;--pop-duration-pop-text:.3s;--pop-duration-quick:.833s;--pop-duration-slow:1.167s;--pop-ease-bouncy:linear(0, .011, .045 1.3%, .184 2.7%, .911 7.4%, 1.153 9.4%, 1.301 11.2%, 1.342, 1.362 13%, 1.363, 1.355 14.4%, 1.306 16%, 1.028 21%, .939 23%, .89 24.7%, .876, .868 26.4%, .869, .882 29%, .907 30.5%, 1.014 35.9%, 1.038, 1.048 39.8% 41.1%, 1.043 42.5%, .995 49.3%, .987, .983 53.2%, .984 55.9%, 1.002 62.7%, 1.006 66.4%, .998 79.7%, 1);--pop-ease-card-highlight:linear(0, .008, .031 1.8%, .127 3.9%, .671 11.8%, .881 15.5%, .959, 1.02 19.2%, 1.064, 1.093 23.2%, 1.102, 1.108, 1.108, 1.104 28.7%, 1.089 31.4%, 1.038 38.1%, 1.016 41.5%, .999 45.4%, .99 49.6%, .989 55.3%, 1.001 74.9%, 1);--pop-ease-gentle:linear(0, .007, .026, .059 4.5%, .106 6.3%, .209 9.5%, .558 19.3%, .658, .742, .812, .87, .918, .957, .986 41.6%, 1.007 45.3%, 1.021 49.4%, 1.027 54% 60.9%, 1.007 83.2%, 1);--pop-ease-menu:linear(0, .0034 0.81%, .0278 2.42%, .097 4.84%, .5361 15.32%, .655 18.55%, .7314, .7964 23.39%, .8662, .9185, .9561, .9818, .9984, 1.0083 42.74%, 1.014 46.77%, 1.0145 53.22%, 1.0053 68.55%, 1.0019 77.42%, .9998 100%);--pop-ease-pop-hover:linear(0, .008, .031 1.8%, .127 3.9%, .671 11.8%, .881 15.5%, .959, 1.02 19.2%, 1.064, 1.093 23.2%, 1.102, 1.108, 1.108, 1.104 28.7%, 1.089 31.4%, 1.038 38.1%, 1.016 41.5%, .999 45.4%, .99 49.6%, .989 55.3%, 1.001 74.9%, 1);--pop-ease-pop-text:linear(0, .0051 0.99%, .0261, .0607 3.61%, .1192 5.26%, .2531 8.21%, .6509 16.1%, .7652 18.73%, .8512, .9232 23.33%, .9881 25.96%, 1.0305 28.26%, 1.0642 30.88%, 1.0782 32.53%, 1.089, 1.094 36.47%, 1.0942, 1.0896 41.07%, 1.0804 43.7%, 1.0354 53.23%, 1.0181 57.5%, 1.0061 61.44%, .9974 65.71%, .9925 70.31%, .991 75.9%, .9996 99.88%);--pop-ease-quick:linear(0, .008, .031 1.8%, .127 3.9%, .671 11.8%, .881 15.5%, .959, 1.02 19.2%, 1.064, 1.093 23.2%, 1.102, 1.108, 1.108, 1.104 28.7%, 1.089 31.4%, 1.038 38.1%, 1.016 41.5%, .999 45.4%, .99 49.6%, .989 55.3%, 1.001 74.9%, 1);--pop-ease-slow:linear(0, .005, .02 2%, .081 4.5%, .469 15.2%, .567, .65, .722 24.4%, .784, .835 31.1%, .878 34.9%, .914 39.1%, .942 43.8%, .964 49.1%, .979 55.4%, .989 62.4%, .995 71.1%, 1);--pop-shadow-xs:0px 1px 2px 0px #1018280d;--pop-shadow-sm:0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f;--pop-shadow-md:0px 4px 8px -2px #1018281a, 0px 2px 4px -2px #1018280f;--pop-shadow-lg:0px 12px 16px -4px #10182814, 0px 4px 6px -2px #10182808;--pop-shadow-xl:0px 20px 24px -4px #10182814, 0px 8px 8px -4px #10182808;--pop-shadow-2xl:0px 24px 48px -12px #1018282e;--pop-shadow-3xl:0px 32px 48px -12px #10182852;--pop-shadow-4xl:0px 24px 32px -12px #10182847;--pop-radius-none:0;--pop-radius-xxs:.125rem;--pop-radius-xs:.25rem;--pop-radius-sm:.375rem;--pop-radius-md:.5rem;--pop-radius-lg:.625rem;--pop-radius-xl:.75rem;--pop-radius-2xl:1rem;--pop-radius-3xl:1.25rem;--pop-radius-4xl:1.5rem;--pop-radius-full:9999px;--pop-radius:.625rem;--pop-background:oklch(100% 0 0);--pop-foreground:oklch(0% 0 0);--pop-card:oklch(100% 0 0);--pop-card-foreground:oklch(14.5% 0 0);--pop-popover:oklch(100% 0 0);--pop-popover-foreground:oklch(0% 0 0);--pop-primary:var(--pop-color-brand-forest-900);--pop-primary-foreground:oklch(98.5% 0 0);--pop-secondary:oklch(97% 0 0);--pop-secondary-foreground:oklch(20.5% 0 0);--pop-muted:oklch(97% 0 0);--pop-muted-foreground:oklch(71.52% .0233 256.76);--pop-accent:oklch(97% 0 0);--pop-accent-foreground:oklch(20.5% 0 0);--pop-destructive:var(--color-error-600);--pop-border:oklch(11.01% .0763 264.05/.102);--pop-input:oklch(92.2% 0 0);--pop-ring:oklch(53.67% .2286 262.17);--pop-chart-1:oklch(64.6% .222 41.116);--pop-chart-2:oklch(60% .118 184.704);--pop-chart-3:oklch(39.8% .07 227.392);--pop-chart-4:oklch(82.8% .189 84.429);--pop-chart-5:oklch(76.9% .188 70.08);--pop-sidebar:oklch(98.5% 0 0);--pop-sidebar-foreground:oklch(14.5% 0 0);--pop-sidebar-primary:oklch(20.5% 0 0);--pop-sidebar-primary-foreground:oklch(98.5% 0 0);--pop-sidebar-accent:oklch(97% 0 0);--pop-sidebar-accent-foreground:oklch(20.5% 0 0);--pop-sidebar-border:oklch(92.2% 0 0);--pop-sidebar-ring:oklch(70.8% 0 0);font-family:Inter,sans-serif;font-size:16px}@media (prefers-color-scheme:dark){:host{--pop-background:oklch(15% .03 255.43);--pop-foreground:oklch(66% .006 255.43);--pop-card:oklch(20.5% 0 0);--pop-card-foreground:oklch(98.5% 0 0);--pop-popover:oklch(15% .03 255.43);--pop-popover-foreground:oklch(66% .006 255.43);--pop-primary:oklch(92.2% 0 0);--pop-primary-foreground:oklch(20.5% 0 0);--pop-secondary:oklch(26.9% 0 0);--pop-secondary-foreground:oklch(98.5% 0 0);--pop-muted:oklch(26.9% 0 0);--pop-muted-foreground:oklch(66% .006 255.43);--pop-accent:oklch(26.9% 0 0);--pop-accent-foreground:oklch(98.5% 0 0);--pop-destructive:var(--color-error-400);--pop-border:oklch(100% 0 0/.1);--pop-input:oklch(100% 0 0/.15);--pop-ring:oklch(53.67% .2286 262.17);--pop-chart-1:oklch(48.8% .243 264.376);--pop-chart-2:oklch(69.6% .17 162.48);--pop-chart-3:oklch(76.9% .188 70.08);--pop-chart-4:oklch(62.7% .265 303.9);--pop-chart-5:oklch(64.5% .246 16.439);--pop-sidebar:oklch(20.5% 0 0);--pop-sidebar-foreground:oklch(98.5% 0 0);--pop-sidebar-primary:oklch(48.8% .243 264.376);--pop-sidebar-primary-foreground:oklch(98.5% 0 0);--pop-sidebar-accent:oklch(26.9% 0 0);--pop-sidebar-accent-foreground:oklch(98.5% 0 0);--pop-sidebar-border:oklch(100% 0 0/.1);--pop-sidebar-ring:oklch(55.6% 0 0)}}:host(.dark){--pop-background:oklch(15% .03 255.43);--pop-foreground:oklch(66% .006 255.43);--pop-card:oklch(20.5% 0 0);--pop-card-foreground:oklch(98.5% 0 0);--pop-popover:oklch(15% .03 255.43);--pop-popover-foreground:oklch(66% .006 255.43);--pop-primary:oklch(92.2% 0 0);--pop-primary-foreground:oklch(20.5% 0 0);--pop-secondary:oklch(26.9% 0 0);--pop-secondary-foreground:oklch(98.5% 0 0);--pop-muted:oklch(26.9% 0 0);--pop-muted-foreground:oklch(66% .006 255.43);--pop-accent:oklch(26.9% 0 0);--pop-accent-foreground:oklch(98.5% 0 0);--pop-destructive:var(--color-error-400);--pop-border:oklch(100% 0 0/.1);--pop-input:oklch(100% 0 0/.15);--pop-ring:oklch(53.67% .2286 262.17);--pop-chart-1:oklch(48.8% .243 264.376);--pop-chart-2:oklch(69.6% .17 162.48);--pop-chart-3:oklch(76.9% .188 70.08);--pop-chart-4:oklch(62.7% .265 303.9);--pop-chart-5:oklch(64.5% .246 16.439);--pop-sidebar:oklch(20.5% 0 0);--pop-sidebar-foreground:oklch(98.5% 0 0);--pop-sidebar-primary:oklch(48.8% .243 264.376);--pop-sidebar-primary-foreground:oklch(98.5% 0 0);--pop-sidebar-accent:oklch(26.9% 0 0);--pop-sidebar-accent-foreground:oklch(98.5% 0 0);--pop-sidebar-border:oklch(100% 0 0/.1);--pop-sidebar-ring:oklch(55.6% 0 0)}*,:before,:after{box-sizing:inherit}html,body{margin:0;padding:0}svg{display:block}strong{font-weight:600}p{margin:0;padding:0}button{cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin:0;padding:0;display:flex}.m-0{margin:0}.text-heading{font-feature-settings:\"liga\" off, \"clig\" off;letter-spacing:-.08px;text-align:center;align-self:stretch;max-width:320px;font-size:13px;font-style:normal;font-weight:600;line-height:18px}.text-xs{font-size:12px;line-height:18px}.w-full{width:100%}}", Se = "@layer components{.btn{background-color:var(--pop-primary);color:var(--pop-primary-foreground);cursor:pointer;text-align:center;border:0;border-radius:4px;justify-content:center;align-items:center;gap:.625rem;height:auto;padding:.625rem 1.25rem;font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px;transition:background-color .2s,color .2s;display:flex}.btn:focus-visible{outline:2px solid var(--pop-ring);outline-offset:2px}}", Ce = "@layer components{.mask{-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.mask-squircle{-webkit-mask-image:url(\"data:image/svg+xml,%3csvg width='160' height='160' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M 0 80 C 0 14.12 14.12 0 80 0 C 145.88 0 160 14.12 160 80 C 160 145.88 145.88 160 80 160 C 14.12 160 0 145.88 0 80 Z'/%3e%3c/svg%3e\");mask-image:url(\"data:image/svg+xml,%3csvg width='160' height='160' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M 0 80 C 0 14.12 14.12 0 80 0 C 145.88 0 160 14.12 160 80 C 160 145.88 145.88 160 80 160 C 14.12 160 0 145.88 0 80 Z'/%3e%3c/svg%3e\")}}", x = !1, S = /* @__PURE__ */ new Set(), C = null, w = null;
386
+ function T() {
387
+ if (typeof window > "u" || typeof document > "u") return !1;
388
+ let e = document.documentElement.classList.contains("dark") || document.body.classList.contains("dark"), t = document.documentElement.classList.contains("light") || document.body.classList.contains("light");
389
+ return e ? !0 : t ? !1 : (w ||= window.matchMedia("(prefers-color-scheme: dark)"), w.matches);
390
+ }
391
+ function E() {
392
+ let e = T();
393
+ e !== x && (x = e, S.forEach((e) => {
394
+ let t = x || !!e.closest(".dark");
395
+ e.classList.toggle("dark", t);
396
+ }));
397
+ }
398
+ var D = () => {
399
+ E();
400
+ };
401
+ function we(e) {
402
+ if (typeof window > "u" || typeof document > "u") return;
403
+ S.size === 0 && (x = T(), C = new MutationObserver(() => {
404
+ E();
405
+ }), C.observe(document.documentElement, {
406
+ attributes: !0,
407
+ attributeFilter: ["class"]
408
+ }), C.observe(document.body, {
409
+ attributes: !0,
410
+ attributeFilter: ["class"]
411
+ }), w = window.matchMedia("(prefers-color-scheme: dark)"), w.addEventListener("change", D)), S.add(e);
412
+ let t = x || !!e.closest(".dark");
413
+ e.classList.toggle("dark", t);
414
+ }
415
+ function Te(e) {
416
+ S.delete(e), S.size === 0 && (C &&= (C.disconnect(), null), w &&= (w.removeEventListener("change", D), null));
417
+ }
418
+ //#endregion
419
+ //#region src/components/base-element.ts
420
+ function O(e) {
421
+ let t = new CSSStyleSheet();
422
+ return t.replaceSync(e), t;
423
+ }
424
+ var Ee = O(xe), De = O(Se), Oe = O(Ce), k = class extends HTMLElement {
425
+ get styleSheets() {
426
+ return [];
427
+ }
428
+ constructor() {
429
+ super(), this.baseStyleSheets = [
430
+ Ee,
431
+ De,
432
+ Oe
433
+ ], this._hasRendered = !1, this._disposables = [], this.events = {}, this.attachShadow({ mode: "open" }), this.shadowRoot && (this.shadowRoot.adoptedStyleSheets = this.styles);
434
+ }
435
+ attributeChangedCallback(e, t, n) {
436
+ if (t === n) return;
437
+ let r = `on${e.split("-").map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join("")}Changed`;
438
+ typeof this[r] == "function" && this[r](n, t);
439
+ }
440
+ addEffect(e) {
441
+ this._disposables.push(s(e));
442
+ }
443
+ connectedCallback() {
444
+ we(this), l(() => {
445
+ this.render(), this._bindEvents(), this.setupEffects();
446
+ });
447
+ }
448
+ disconnectedCallback() {
449
+ Te(this), this._disposables.forEach((e) => e()), this._disposables = [];
450
+ }
451
+ _bindEvents() {
452
+ let e = this.shadowRoot;
453
+ e && Object.keys(this.events).forEach((t) => {
454
+ e.addEventListener(t, this);
455
+ });
456
+ }
457
+ handleEvent(e) {
458
+ let t = this.events[e.type];
459
+ t && typeof this[t] == "function" && this[t](e);
460
+ }
461
+ emit(e, t = {}) {
462
+ this.dispatchEvent(new CustomEvent(e, {
463
+ bubbles: !0,
464
+ composed: !0,
465
+ ...t
466
+ }));
467
+ }
468
+ get styles() {
469
+ return [...this.baseStyleSheets, ...this.styleSheets];
470
+ }
471
+ setupEffects() {}
472
+ render() {
473
+ this.shadowRoot && (this.shadowRoot.innerHTML = this.getTemplate(), this._hasRendered = !0);
474
+ }
475
+ hideElement(e, t, n = !0) {
476
+ if (!this.shadowRoot || !this._hasRendered) return;
477
+ let r = this.shadowRoot.querySelector(e);
478
+ if (!r) {
479
+ console.warn(`Element not found for selector: ${e}`);
480
+ return;
481
+ }
482
+ n ? r.classList.toggle("hidden", t) : r.classList.toggle("invisible", t);
483
+ }
484
+ setText(e, t) {
485
+ let n = this.shadowRoot?.querySelector(e);
486
+ n && n.textContent !== String(t) && (n.textContent = String(t));
487
+ }
488
+ setAttr(e, t, n) {
489
+ let r = this.shadowRoot?.querySelector(e);
490
+ r && (n === null ? r.removeAttribute(t) : r.getAttribute(t) !== n && r.setAttribute(t, n));
491
+ }
492
+ toggleClass(e, t, n) {
493
+ let r = this.shadowRoot?.querySelector(e);
494
+ r && r.classList.toggle(t, n);
495
+ }
496
+ getElement(e) {
497
+ return this.shadowRoot?.querySelector(e) ?? null;
498
+ }
499
+ }, A = (e) => `[data-ref="${e}"]`;
500
+ //#endregion
501
+ //#region \0@oxc-project+runtime@0.133.0/helpers/esm/decorate.js
502
+ function j(e, t, n, r) {
503
+ var i = arguments.length, a = i < 3 ? t : r === null ? r = Object.getOwnPropertyDescriptor(t, n) : r, o;
504
+ if (typeof Reflect == "object" && typeof Reflect.decorate == "function") a = Reflect.decorate(e, t, n, r);
505
+ else for (var s = e.length - 1; s >= 0; s--) (o = e[s]) && (a = (i < 3 ? o(a) : i > 3 ? o(t, n, a) : o(t, n)) || a);
506
+ return i > 3 && a && Object.defineProperty(t, n, a), a;
507
+ }
508
+ //#endregion
509
+ //#region src/components/pop-account-switcher.ts
510
+ var ke = O("\n :host {\n display: block;\n\n --pop-switcher-hover: rgba(0, 0, 32, 0.04);\n }\n\n @media (prefers-color-scheme: dark) {\n :host {\n --pop-switcher-hover: rgba(255, 255, 255, 0.06);\n }\n }\n\n :host(.dark) {\n --pop-switcher-hover: rgba(255, 255, 255, 0.06);\n }\n\n .switcher {\n position: relative;\n }\n\n .switcher__trigger {\n background: none;\n border-radius: 9999px;\n border: none;\n cursor: pointer;\n display: block;\n padding: 0;\n }\n\n .switcher__dropdown {\n /* Overridden inline once floating-ui resolves an actual side (see\n openDropdown) — these defaults match this trigger's common case: an\n avatar near the bottom of the widget, menu opening upward above it. */\n --switcher-origin: bottom left;\n --switcher-slide-y: 6px;\n\n background-color: var(--pop-background);\n border-radius: 6px;\n box-shadow: var(--pop-shadow-xl);\n display: flex;\n flex-direction: column;\n font-family: Inter, sans-serif;\n gap: 2px;\n opacity: 0;\n padding: 6px;\n pointer-events: none;\n position: fixed;\n transform: scale(0.95) translateY(var(--switcher-slide-y));\n transform-origin: var(--switcher-origin);\n transition:\n opacity var(--pop-duration-quick) var(--pop-ease-quick),\n transform var(--pop-duration-quick) var(--pop-ease-quick),\n visibility 0s linear var(--pop-duration-quick);\n visibility: hidden;\n width: 200px;\n z-index: 1000;\n }\n\n .switcher__dropdown.is-open {\n opacity: 1;\n pointer-events: auto;\n transform: scale(1) translateY(0);\n transition:\n opacity var(--pop-duration-quick) var(--pop-ease-quick),\n transform var(--pop-duration-quick) var(--pop-ease-quick),\n visibility 0s linear 0s;\n visibility: visible;\n }\n\n .switcher__item {\n align-items: center;\n background: none;\n border-radius: 4px;\n border: none;\n color: var(--pop-foreground);\n cursor: pointer;\n display: flex;\n font-size: 13px;\n font-weight: 500;\n gap: 8px;\n overflow: hidden;\n padding: 6px 8px;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n }\n\n .switcher__item:hover {\n background-color: var(--pop-switcher-hover);\n }\n\n .switcher__item.is-active {\n font-weight: 700;\n }\n\n .switcher__divider {\n background-color: var(--pop-border);\n height: 1px;\n margin: 4px 2px;\n }\n\n .switcher__item--sign-out {\n color: var(--pop-destructive);\n }\n\n .switcher__loading {\n align-items: center;\n color: var(--pop-muted-foreground);\n display: flex;\n font-size: 13px;\n font-weight: 500;\n gap: 8px;\n padding: 6px 8px;\n }\n\n .switcher__spinner {\n animation: pop-switcher-spin 0.6s linear infinite;\n border: 2px solid var(--pop-border);\n border-radius: 9999px;\n border-top-color: var(--pop-foreground);\n flex-shrink: 0;\n height: 12px;\n width: 12px;\n }\n\n @keyframes pop-switcher-spin {\n to {\n transform: rotate(360deg);\n }\n }\n"), M = class extends k {
511
+ constructor(...e) {
512
+ super(...e), this.events = { click: "onClick" }, this._dropdownOpen = !1, this._onOutsideClick = (e) => {
513
+ let t = e.composedPath(), n = this.getElement(A("dropdown")), r = this.getElement(A("trigger"));
514
+ n && r && !t.includes(n) && !t.includes(r) && this.closeDropdown();
515
+ };
516
+ }
517
+ get styleSheets() {
518
+ return [ke];
519
+ }
520
+ disconnectedCallback() {
521
+ this.closeDropdown(), super.disconnectedCallback();
522
+ }
523
+ setupEffects() {
524
+ this.addEffect(() => {
525
+ let e = this.authStore.currentUser.value, t = this.authStore.organizations.value, n = this.getElement(A("avatar"));
526
+ if (n && (n.setAttribute("data-color-key", e?.id ?? e?.name ?? ""), n.innerHTML = e?.image ? `<img src="${e.image}" alt="${e.name ?? "User"}'s avatar">` : u(e?.name)), !e) {
527
+ this.closeDropdown();
528
+ return;
529
+ }
530
+ let r = this.authStore.organizationsLoading.value, i = this.getElement(A("dropdown"));
531
+ i && (i.innerHTML = `
532
+ ${t.length === 0 && r ? "<div class=\"switcher__loading\"><span class=\"switcher__spinner\"></span>Loading accounts…</div>" : t.map((t) => `
533
+ <button class="switcher__item${t.id === e.id ? " is-active" : ""}" data-ref="item" type="button" data-org-id="${t.id}">
534
+ ${t.name}
535
+ </button>
536
+ `).join("")}
537
+ ${t.length > 0 ? "<div class=\"switcher__divider\"></div>" : ""}
538
+ <button class="switcher__item switcher__item--sign-out" data-ref="item" type="button" data-action="sign-out">Sign out</button>
539
+ `);
540
+ });
541
+ }
542
+ toggleDropdown() {
543
+ this._dropdownOpen ? this.closeDropdown() : this.openDropdown();
544
+ }
545
+ openDropdown() {
546
+ if (!this.authStore.currentUser.value) return;
547
+ this.authStore.organizations.value.length === 0 && this.authStore.loadOrganizations(), this._dropdownOpen = !0;
548
+ let i = this.getElement(A("dropdown")), o = this.getElement(A("trigger"));
549
+ if (i && o) {
550
+ i.classList.add("is-open");
551
+ let s = () => {
552
+ t(o, i, {
553
+ placement: "bottom-start",
554
+ middleware: [
555
+ r(4),
556
+ n(),
557
+ a({ padding: 8 })
558
+ ],
559
+ strategy: "fixed"
560
+ }).then(({ x: e, y: t, placement: n }) => {
561
+ Object.assign(i.style, {
562
+ left: `${e}px`,
563
+ top: `${t}px`,
564
+ position: "fixed"
565
+ });
566
+ let r = n.startsWith("top");
567
+ i.style.setProperty("--switcher-origin", r ? "bottom left" : "top left"), i.style.setProperty("--switcher-slide-y", r ? "6px" : "-6px");
568
+ });
569
+ };
570
+ this._floatingCleanup = e(o, i, s), document.addEventListener("mousedown", this._onOutsideClick);
571
+ }
572
+ }
573
+ closeDropdown() {
574
+ this._dropdownOpen = !1;
575
+ let e = this.getElement(A("dropdown"));
576
+ e && e.classList.remove("is-open"), this._floatingCleanup &&= (this._floatingCleanup(), void 0), document.removeEventListener("mousedown", this._onOutsideClick);
577
+ }
578
+ onClick(e) {
579
+ let t = e.target;
580
+ if (t.closest(A("trigger"))) {
581
+ e.stopPropagation(), this.toggleDropdown();
582
+ return;
583
+ }
584
+ let n = t.closest(A("item"));
585
+ if (n) {
586
+ if (e.stopPropagation(), this.closeDropdown(), n.getAttribute("data-action") === "sign-out") {
587
+ this.authStore.signOutEverywhere();
588
+ return;
589
+ }
590
+ let t = n.getAttribute("data-org-id");
591
+ t && this.authStore.switchOrganization(t);
592
+ }
593
+ }
594
+ getTemplate() {
595
+ return "\n <div class=\"switcher\">\n <button\n class=\"switcher__trigger\"\n data-ref=\"trigger\"\n type=\"button\"\n aria-label=\"Account options\"\n >\n <pop-comment-avatar size=\"xs\" data-ref=\"avatar\"></pop-comment-avatar>\n </button>\n <div class=\"switcher__dropdown\" data-ref=\"dropdown\"></div>\n </div>\n ";
596
+ }
597
+ };
598
+ j([b(_)], M.prototype, "authStore", void 0), customElements.get("pop-account-switcher") || customElements.define("pop-account-switcher", M);
599
+ //#endregion
600
+ //#region src/components/pop-auth-code.ts
601
+ var N = 6, Ae = O("\n :host {\n border-top: 1px solid var(--pop-sidebar-border);\n display: block;\n padding: 20px 24px;\n font-family: Inter, sans-serif;\n text-align: center;\n }\n\n .code__body {\n align-items: center;\n align-self: stretch;\n display: flex;\n flex-direction: column;\n gap: 8px;\n justify-content: center;\n }\n\n .code__container {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 16px;\n justify-content: center;\n }\n\n .code__heading {\n color: var(--pop-foreground);\n font-feature-settings:\n \"liga\" off,\n \"clig\" off;\n font-size: 13px;\n font-weight: 600;\n letter-spacing: -0.08px;\n line-height: 18px;\n margin: 0;\n }\n\n .code__digits {\n display: flex;\n gap: 6px;\n justify-content: center;\n }\n\n .code__digits .code__digit:nth-child(3) {\n margin-right: 10px;\n }\n\n .code__digit {\n -webkit-appearance: none;\n appearance: none;\n background: var(--pop-background);\n border-radius: var(--pop-radius-md, 8px);\n border: 1px solid color-mix(in srgb, var(--pop-foreground) 56%, transparent);\n color: var(--pop-foreground);\n font-family: inherit;\n font-size: 24px;\n font-weight: 500;\n height: 40px;\n line-height: 36px;\n text-align: center;\n width: 40px;\n }\n\n .code__digit:focus-visible {\n border: 2px solid var(--pop-foreground);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--pop-ring, #155eef) 60%, transparent);\n outline: none;\n }\n\n .code__digit:disabled {\n opacity: 0.6;\n }\n\n .code__copy,\n .code__expiry {\n color: var(--pop-foreground);\n font-size: 12px;\n line-height: 18px;\n margin: 0;\n }\n\n .code__error {\n color: var(--pop-auth-error, #dc2626);\n font-size: 12px;\n line-height: 16px;\n }\n\n .code__footer {\n align-items: center;\n display: flex;\n justify-content: space-between;\n width: 100%;\n }\n\n .code__expiry strong {\n font-weight: 600;\n }\n"), P = class extends k {
602
+ constructor(...e) {
603
+ super(...e), this.events = {
604
+ input: "onInput",
605
+ keydown: "onKeyDown",
606
+ click: "onClick"
607
+ };
608
+ }
609
+ get styleSheets() {
610
+ return [Ae];
611
+ }
612
+ connectedCallback() {
613
+ super.connectedCallback(), this.getDigitInputs()[0]?.focus();
614
+ }
615
+ getDigitInputs() {
616
+ return Array.from(this.shadowRoot?.querySelectorAll(A("digit")) ?? []);
617
+ }
618
+ onInput(e) {
619
+ let t = e.target;
620
+ t.matches(A("digit")) && (t.value = t.value.replace(/[^0-9]/g, "").slice(0, 1), t.value && t.nextElementSibling?.focus(), this.maybeSubmit());
621
+ }
622
+ onKeyDown(e) {
623
+ let t = e.target;
624
+ t.matches(A("digit")) && e.key === "Backspace" && !t.value && t.previousElementSibling?.focus();
625
+ }
626
+ onClick(e) {
627
+ let t = e.target;
628
+ if (t.closest(A("no-code"))) {
629
+ this.authStore.showNoCode();
630
+ return;
631
+ }
632
+ if (t.closest(A("back"))) {
633
+ this.authStore.backToEmail();
634
+ return;
635
+ }
636
+ }
637
+ maybeSubmit() {
638
+ let e = this.getDigitInputs().map((e) => e.value);
639
+ e.some((e) => !e) || this.authStore.verifyOtp(e.join(""));
640
+ }
641
+ renderCountdown(e) {
642
+ let t = e - Date.now();
643
+ if (t <= 0) return !0;
644
+ let n = this.getElement(A("expiry"));
645
+ if (!n) return !1;
646
+ let r = Math.ceil(t / 1e3), i = Math.floor(r / 60), a = r % 60;
647
+ return n.innerHTML = `Code expires in <strong>${i}:${String(a).padStart(2, "0")}</strong>`, !1;
648
+ }
649
+ setupEffects() {
650
+ let e = this.authStore.authNoticeDismissals.peek();
651
+ this.addEffect(() => {
652
+ let t = this.authStore.authNoticeDismissals.value;
653
+ t !== e && (e = t, queueMicrotask(() => {
654
+ let e = this.getDigitInputs();
655
+ (e.find((e) => !e.value) ?? e[0])?.focus({ preventScroll: !0 });
656
+ }));
657
+ }), this.addEffect(() => {
658
+ let e = this.authStore.otpExpiresAt.value;
659
+ if (!e) return;
660
+ this.renderCountdown(e);
661
+ let t = window.setInterval(() => {
662
+ this.renderCountdown(e) && (window.clearInterval(t), this.authStore.expireOtp());
663
+ }, 1e3);
664
+ return () => window.clearInterval(t);
665
+ }), this.addEffect(() => {
666
+ let e = this.authStore.otpPending.value, t = this.getDigitInputs();
667
+ t.forEach((t) => {
668
+ t.disabled = e;
669
+ }), !e && !this.shadowRoot?.activeElement && (t.find((e) => !e.value) ?? t[0])?.focus({ preventScroll: !0 });
670
+ }), this.addEffect(() => {
671
+ let e = this.authStore.otpError.value, t = this.getElement(A("error"));
672
+ if (t && (t.hidden = !e, t.textContent = e ?? ""), e) {
673
+ let e = this.getDigitInputs();
674
+ e.forEach((e) => {
675
+ e.value = "";
676
+ }), e[0]?.focus();
677
+ }
678
+ });
679
+ }
680
+ getTemplate() {
681
+ return `
682
+ <div class="code__container" role="group" aria-labelledby="code-title">
683
+ <p class="code__heading" id="code-title">Enter Verification Code</p>
684
+ <div class="code__digits" role="group" aria-labelledby="code-title">${Array.from({ length: N }).map((e, t) => `<input class="code__digit" data-ref="digit" type="text" inputmode="numeric" maxlength="1" autocomplete="one-time-code" aria-label="Digit ${t + 1} of ${N}" />`).join("")}</div>
685
+ <div class="code__body">
686
+ <p class="code__copy">
687
+ A verification code has been sent to your email. Enter code to continue.
688
+ </p>
689
+ <p class="code__expiry" data-ref="expiry" role="timer"></p>
690
+ </div>
691
+ <div class="code__error" data-ref="error" role="alert" hidden></div>
692
+ <div class="code__footer">
693
+ <pop-button-link data-ref="back" size="sm" theme="default">Back</pop-button-link>
694
+ <pop-button-link data-ref="no-code" size="sm" theme="default" primary>
695
+ No verification code?
696
+ </pop-button-link>
697
+ </div>
698
+ </div>
699
+ `;
700
+ }
701
+ };
702
+ j([b(_)], P.prototype, "authStore", void 0), customElements.get("pop-auth-code") || customElements.define("pop-auth-code", P);
703
+ //#endregion
704
+ //#region src/assets/apple-icon.png?inline
705
+ var je = "data:image/png;base64,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", Me = "data:image/png;base64,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", F = "<svg\n width=\"100\"\n height=\"16\"\n viewBox=\"0 0 75 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <path\n d=\"M4.58333 0.265686C1.0463 0.265686 0 2.5714 0 5.47711C0 6.55283 0.115741 7.6114 0.25 8.67426C0.300926 9.08997 0.282407 9.54854 0.365741 9.96426C0.583333 11.0571 1.69444 11.5628 2.77315 11.5628C4.25 11.5628 5.23148 10.7014 5.23148 9.3214C5.23148 8.52426 4.94907 8.0014 4.13426 7.69283C4.08333 7.67569 4.03241 7.66283 4.03241 7.59854C4.03241 7.4914 4.21759 7.41426 4.33333 7.41426C4.73148 7.41426 5.36111 7.78283 5.91204 7.78283C8.06944 7.78283 9.26389 5.86283 9.26389 4.06283C9.26389 1.44854 7.18518 0.265686 4.58333 0.265686ZM4.56481 5.91854C4.43056 5.91854 4.31481 5.8114 4.31481 5.68711C4.31481 5.51997 4.56481 5.39569 4.64815 5.25854C4.8287 4.94997 4.87963 4.42711 4.87963 4.07569C4.87963 3.65997 4.76389 2.89283 4.48148 2.58426C4.39815 2.49426 4.28241 2.44711 4.28241 2.32283C4.28241 2.19854 4.41667 2.0914 4.5463 2.0914C5.11111 2.0914 5.39352 3.62997 5.39352 4.02854C5.39352 4.45711 5.24537 5.91854 4.56481 5.91854Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M14.9259 0.527108C11.4074 0.527108 9.2963 2.83282 9.2963 5.99568C9.2963 9.15854 11.4028 11.4643 14.9259 11.4643C18.4491 11.4643 20.537 9.12854 20.537 5.99568C20.537 2.86282 18.412 0.527108 14.9259 0.527108ZM15.0787 9.89997C15.0232 9.96425 14.912 10.0843 14.7778 10.0843C14.6435 10.0843 14.5139 9.97711 14.5139 9.85282C14.5139 9.80568 14.9445 9.20568 15.0139 9.02139C15.2778 8.29711 15.3287 7.51282 15.3287 6.74568C15.3287 5.71711 15.1296 4.39282 14.4491 3.54854C14.3148 3.39425 13.9028 3.10282 13.9028 2.93568C13.9028 2.81139 14.0185 2.70425 14.1528 2.70425C14.2685 2.70425 14.3843 2.79854 14.4676 2.85854C15.5278 3.67282 15.8472 5.53282 15.8472 6.74568C15.8472 7.69711 15.8056 9.08568 15.0833 9.89568L15.0787 9.89997Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M25.375 0.265686C21.838 0.265686 20.7917 2.5714 20.7917 5.47711C20.7917 6.55283 20.9074 7.6114 21.0417 8.67426C21.0926 9.08997 21.0741 9.54854 21.1574 9.96426C21.375 11.0571 22.4861 11.5628 23.5648 11.5628C25.0417 11.5628 26.0231 10.7014 26.0231 9.3214C26.0231 8.52426 25.7407 8.0014 24.9259 7.69283C24.875 7.67569 24.8241 7.66283 24.8241 7.59854C24.8241 7.4914 25.0092 7.41426 25.125 7.41426C25.5231 7.41426 26.1528 7.78283 26.7037 7.78283C28.8611 7.78283 30.0555 5.86283 30.0555 4.06283C30.0555 1.44854 27.9815 0.265686 25.375 0.265686ZM25.3611 5.91854C25.2268 5.91854 25.1111 5.8114 25.1111 5.68711C25.1111 5.51997 25.3611 5.39569 25.4444 5.25854C25.625 4.94997 25.6759 4.42711 25.6759 4.07569C25.6759 3.65997 25.5602 2.89283 25.2778 2.58426C25.1944 2.49426 25.0787 2.44711 25.0787 2.32283C25.0787 2.19854 25.213 2.0914 25.3426 2.0914C25.9074 2.0914 26.1898 3.62997 26.1898 4.02854C26.1898 4.45711 26.0417 5.91854 25.3611 5.91854Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M37.3843 4.81284C36.1898 4.81284 34.5278 5.31855 34.5278 6.64284C34.5278 7.39713 35.125 8.5157 36.0741 8.5157C36.6713 8.5157 37.0556 8.08713 37.2546 8.08713C37.3056 8.08713 37.3519 8.11713 37.3519 8.16427C37.3519 8.60998 36.4213 8.81141 36.0556 8.81141C34.7778 8.81141 34.0972 7.7957 34.0972 6.71998C34.0972 5.39998 35.4398 4.38427 36.8009 4.38427C37.1991 4.38427 37.6158 4.49141 38.0139 4.49141C39.1945 4.49141 40.0371 3.50998 40.0371 2.46427C40.0371 0.728554 37.8148 0.329982 36.3333 0.329982C32.3982 0.329982 30.1065 2.6957 30.1065 6.29141C30.1065 9.61284 31.9676 11.73 35.6528 11.73C38.0417 11.73 40.6482 10.7786 40.6482 8.19427C40.6482 6.42855 39.4028 4.81284 37.3796 4.81284H37.3843Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M48.3611 7.42711C48.0602 7.42711 47.8148 7.53426 47.5648 7.53426C47.5139 7.53426 47.5 7.48711 47.5 7.45712C47.5 7.34997 47.5509 7.30283 47.6342 7.27283C47.9167 7.18283 48.2176 7.11854 48.4954 6.99426C49.7592 6.4414 50.5046 5.45569 50.5046 4.15283C50.5046 1.79997 48.3287 0.372829 45.9398 0.372829C45.0741 0.372829 44.2315 0.604257 43.5 0.972829C41.5092 1.9714 41.125 3.40283 41.0092 5.35283C40.9583 6.11997 40.9583 6.8914 40.9583 7.65854V9.51854C40.9583 10.6843 41.787 11.6228 43.0972 11.6228C44.0416 11.6228 44.8889 10.9928 45.1065 10.1614C45.2222 9.66854 45.1574 9.08569 45.1574 8.60997C45.1574 8.56283 45.1759 8.54997 45.2222 8.54997C45.2685 8.54997 45.3241 8.57997 45.3565 8.59711C45.9398 9.90426 46.7361 11.5628 48.5417 11.5628C49.787 11.5628 50.8148 10.7485 50.8148 9.56569C50.8148 8.38283 49.6204 7.4314 48.3565 7.4314L48.3611 7.42711ZM45.6574 5.91854C45.5231 5.91854 45.4074 5.8114 45.4074 5.68711C45.4074 5.51997 45.6574 5.39569 45.7407 5.25854C45.9213 4.94997 45.9722 4.42711 45.9722 4.07569C45.9722 3.65997 45.8565 2.89283 45.5741 2.58426C45.4907 2.49426 45.3935 2.44711 45.3935 2.32283C45.3935 2.19854 45.5092 2.0914 45.6435 2.0914C46.2083 2.0914 46.4907 3.62997 46.4907 4.02854C46.4907 4.45711 46.3565 5.91854 45.662 5.91854H45.6574Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M54.8056 0.865677C54.4074 0.621391 53.8426 0.497105 53.3611 0.497105C52.3148 0.497105 51.4167 1.26425 51.3009 2.21996C51.2685 2.49853 51.2824 2.75996 51.2824 3.05139V5.66139L51.2315 8.41282V9.77996C51.2315 10.8557 52.2269 11.7 53.375 11.7C54.2222 11.7 55.1528 11.2071 55.4676 10.47C55.6482 10.0542 55.6667 9.47139 55.6667 9.02568V7.82568L55.6852 5.42996V3.03425C55.6852 2.14282 55.6667 1.43568 54.8056 0.865677Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M58.9445 0.402828C57.25 0.402828 56.4028 1.13997 56.4028 2.7214V3.3514L56.4213 4.59426V5.22426C56.4213 5.69997 56.4213 6.14568 56.4028 6.6214C56.3704 7.1914 56.287 7.75711 56.287 8.34426C56.287 10.4957 57.4815 11.5414 59.7917 11.5414C63.3426 11.5414 65.75 10.1271 65.75 6.60854C65.75 2.36568 63.5417 0.398542 58.9445 0.398542V0.402828ZM60.537 8.9014C60.4028 8.9014 60.287 8.79426 60.287 8.66997C60.287 8.62283 60.3056 8.59283 60.338 8.54568C60.7685 7.88568 60.8843 6.96426 60.8843 6.20997C60.8843 5.50283 60.8009 4.45711 60.3194 3.90426C60.2361 3.77997 60.0695 3.68997 60.0695 3.53569C60.0695 3.4114 60.1852 3.30426 60.3194 3.30426C60.5694 3.30426 60.9167 3.88711 61.0185 4.08854C61.3333 4.76569 61.3843 5.50283 61.3843 6.22283C61.3843 6.66854 61.1343 8.89711 60.537 8.89711V8.9014Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M73.5046 5.85855C72.5417 5.78141 71.162 5.47284 70.4167 4.88998C70.3194 4.81284 70.1528 4.7057 70.1528 4.56855C70.1528 4.52141 70.1713 4.44427 70.2361 4.44427C70.4167 4.44427 71.5787 5.3057 72.5787 5.3057C73.8426 5.3057 75 4.39713 75 3.20141C75 1.23427 72.1806 0.437125 70.4676 0.437125C67.9259 0.437125 66.037 1.95855 66.037 4.37141C66.037 4.89427 66.1204 5.61427 66.537 6.01713C66.7361 6.21855 67.0694 6.21855 67.3333 6.21855C68.3287 6.21855 69.5926 6.50998 70.1204 7.35427C70.1713 7.43141 70.2176 7.5557 70.2176 7.6457C70.2176 7.6757 70.2176 7.72284 70.1852 7.7057C70.088 7.6757 70.0046 7.59855 69.9352 7.53855C69.3519 7.0157 68.5555 6.49284 67.713 6.49284C66.4491 6.49284 66.0046 7.6157 66.0046 8.59713C66.0046 10.5771 67.9306 11.67 69.8889 11.67C72.213 11.67 75 10.2557 75 7.84284C75 6.95141 74.5833 5.95284 73.5046 5.86284V5.85855Z\"\n fill=\"currentColor\"\n />\n</svg>", Ne = /^[^\s@]+@[^\s@]+\.[^\s@]+$/, Pe = O("\n :host {\n display: block;\n padding: 20px 24px;\n border-top: 1px solid var(--pop-sidebar-border);\n background: var(--pop-background);\n }\n\n .email__container {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n }\n\n .email__logo {\n color: var(--pop-foreground);\n display: flex;\n justify-content: center;\n }\n\n .email__form {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .email__input {\n -webkit-appearance: none;\n appearance: none;\n background: var(--pop-background);\n border: 1px solid var(--pop-input);\n border-radius: 6px;\n color: var(--pop-foreground);\n font-family: inherit;\n font-size: 14px;\n padding: 10px 12px;\n width: 100%;\n height: 40px;\n }\n\n .email__input::placeholder {\n color: var(--pop-muted-foreground);\n }\n\n .email__input:focus-visible {\n outline: 2px solid var(--pop-ring);\n outline-offset: -1px;\n }\n\n .email__submit {\n width: 100%;\n }\n\n .email__socials {\n align-items: center;\n display: flex;\n gap: 32px;\n justify-content: center;\n }\n\n .email__social {\n align-items: center;\n cursor: pointer;\n display: flex;\n height: 32px;\n justify-content: center;\n padding: 0;\n width: 32px;\n transition: transform 0.15s ease-out;\n }\n\n .email__social:hover {\n transform: scale(1.125);\n }\n\n .email__social img {\n width: 100%;\n height: 100%;\n }\n\n .email__error {\n color: var(--pop-auth-error, #dc2626);\n font-size: 12px;\n line-height: 16px;\n text-align: center;\n }\n\n .email__about {\n display: block;\n color: var(--pop-muted-foreground);\n font-size: 12px;\n text-align: center;\n margin-top: 14px;\n text-decoration: none;\n }\n\n .email__about:hover {\n color: var(--pop-foreground);\n }\n"), I = class extends k {
706
+ constructor(...e) {
707
+ super(...e), this.events = {
708
+ click: "onClick",
709
+ submit: "onSubmit"
710
+ };
711
+ }
712
+ get styleSheets() {
713
+ return [Pe];
714
+ }
715
+ connectedCallback() {
716
+ super.connectedCallback();
717
+ let e = this.getElement(A("input"));
718
+ e && (e.value = this.authStore.otpEmail.value), this.focusEmailInputWhenVisible();
719
+ }
720
+ focusEmailInputWhenVisible() {
721
+ let e = this.getElement(A("input"));
722
+ if (!e) return;
723
+ let t = () => {
724
+ e.isConnected && e.focus({ preventScroll: !0 });
725
+ }, n = this.closest(".panel__card")?.getAnimations() ?? [];
726
+ if (n.length === 0) {
727
+ t();
728
+ return;
729
+ }
730
+ Promise.allSettled(n.map((e) => e.finished)).then(t);
731
+ }
732
+ onClick(e) {
733
+ let t = e.target;
734
+ if (t.closest(A("google"))) {
735
+ this.authStore.requestSignIn();
736
+ return;
737
+ }
738
+ if (t.closest(A("apple"))) {
739
+ this.authStore.requestSignIn();
740
+ return;
741
+ }
742
+ }
743
+ onSubmit(e) {
744
+ e.preventDefault(), this.handleContinue();
745
+ }
746
+ async handleContinue() {
747
+ let e = this.getElement(A("input"));
748
+ if (!e) return;
749
+ let t = e.value.trim();
750
+ if (!Ne.test(t)) {
751
+ this.authStore.otpError.value = "Enter a valid email address.";
752
+ return;
753
+ }
754
+ await this.authStore.sendOtp(t);
755
+ }
756
+ setupEffects() {
757
+ let e = this.authStore.authNoticeDismissals.peek();
758
+ this.addEffect(() => {
759
+ let t = this.authStore.authNoticeDismissals.value;
760
+ t !== e && (e = t, queueMicrotask(() => {
761
+ this.getElement(A("input"))?.focus({ preventScroll: !0 });
762
+ }));
763
+ }), this.addEffect(() => {
764
+ let e = this.authStore.otpPending.value, t = this.authStore.otpError.value, n = this.getElement(A("submit"));
765
+ n && (n.disabled = e, n.textContent = e ? "Sending code…" : "Continue");
766
+ let r = this.getElement(A("error"));
767
+ r && (r.hidden = !t, r.textContent = t ?? "");
768
+ });
769
+ }
770
+ getTemplate() {
771
+ return `
772
+ <form class="email__container">
773
+ <div class="email__logo" role="img" aria-label="PopGrids">${F}</div>
774
+ <p class="text-heading">Small communities, big connections 👋</p>
775
+ <input
776
+ class="email__input"
777
+ data-ref="input"
778
+ type="email"
779
+ aria-label="Email address"
780
+ placeholder="Email"
781
+ autocomplete="email"
782
+ required
783
+ />
784
+ <button class="btn email__submit" data-ref="submit" type="submit">Continue</button>
785
+ <div class="email__error" data-ref="error" role="alert" hidden></div>
786
+ <div class="email__socials">
787
+ <button
788
+ class="email__social email__social--apple"
789
+ data-ref="apple"
790
+ type="button"
791
+ aria-label="Continue with Apple"
792
+ >
793
+ <img src="${je}" alt="" width="64" height="64" loading="lazy" />
794
+ </button>
795
+ <button
796
+ class="email__social email__social--google"
797
+ data-ref="google"
798
+ type="button"
799
+ aria-label="Continue with Google"
800
+ >
801
+ <img src="${Me}" alt="" width="64" height="64" loading="lazy" />
802
+ </button>
803
+ </div>
804
+ <pop-button-link href="https://www.popgrids.io" target="_blank" rel="noopener noreferrer">
805
+ What’s PopGrids?
806
+ </pop-button-link>
807
+ </form>
808
+ `;
809
+ }
810
+ };
811
+ j([b(_)], I.prototype, "authStore", void 0), customElements.get("pop-auth-email") || customElements.define("pop-auth-email", I);
812
+ //#endregion
813
+ //#region src/components/pop-auth-join.ts
814
+ var Fe = O("\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n }\n\n .auth-join {\n -webkit-appearance: none;\n align-items: flex-start;\n appearance: none;\n background-color: lightgray;\n background-color: var(--pop-background, #fff);\n background-image: url(\"data:image/gif;base64,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\"), none;\n background-position: calc(100% - 88px) center;\n background-repeat: no-repeat, repeat;\n background-size:\n 8.215% 59.149%,\n auto;\n border: none;\n cursor: pointer;\n display: flex;\n flex-direction: column;\n gap: var(--spacing-sm, 6px);\n justify-content: flex-end;\n padding: 16px 8px;\n width: 100%;\n }\n\n /* Keyboard users still get a ring when they Tab here, drawn inside the bar\n so the feed's overflow:hidden can't clip it. A programmatic hand-back\n of focus (restoreFocus, after Esc/Back from a card) opts out via\n data-restored: the visitor didn't navigate here, and the ring around\n the whole bar read as an error state. */\n .auth-join:focus-visible {\n outline: 2px solid var(--pop-ring);\n outline-offset: -2px;\n }\n\n :host([data-restored]) .auth-join:focus-visible {\n outline: none;\n }\n\n .auth-join__actions {\n align-items: center;\n align-self: stretch;\n color: var(--pop-foreground, #000);\n display: flex;\n font-family: Inter, sans-serif;\n font-feature-settings:\n \"liga\" off,\n \"clig\" off;\n font-size: 13px;\n font-weight: 600;\n justify-content: space-between;\n letter-spacing: -0.08px;\n line-height: 18px;\n padding: 0px 8px;\n }\n\n .auth-join__logo {\n align-items: center;\n color: var(--pop-foreground, #000);\n display: flex;\n flex-direction: column;\n height: 12px;\n justify-content: center;\n padding: 0;\n pointer-events: none;\n width: 75px;\n }\n"), L = class extends k {
815
+ constructor(...e) {
816
+ super(...e), this.events = {
817
+ click: "onClick",
818
+ keydown: "onKeyDown",
819
+ focusout: "onFocusOut"
820
+ };
821
+ }
822
+ get styleSheets() {
823
+ return [Fe];
824
+ }
825
+ restoreFocus() {
826
+ this.setAttribute("data-restored", ""), this.getElement(A("join"))?.focus({ preventScroll: !0 });
827
+ }
828
+ onKeyDown() {
829
+ this.removeAttribute("data-restored");
830
+ }
831
+ onFocusOut() {
832
+ this.removeAttribute("data-restored");
833
+ }
834
+ onClick(e) {
835
+ e.target.closest(A("join")) && this.handleJoin();
836
+ }
837
+ setupEffects() {
838
+ this.addEffect(() => {
839
+ let e = this.authStore.authPending.value, t = this.getElement(A("join"));
840
+ t && (t.disabled = e), this.setText(A("label"), e ? "Signing in…" : "Join the Conversation");
841
+ });
842
+ }
843
+ handleJoin() {
844
+ this.authStore.clearAuthError(), this.authStore.startEmailSignIn();
845
+ }
846
+ getTemplate() {
847
+ return `
848
+ <button class="auth-join" data-ref="join" type="button">
849
+ <div class="auth-join__actions">
850
+ <span data-ref="label">Join the Conversation</span>
851
+ <span class="auth-join__logo" aria-hidden="true">${F}</span>
852
+ </div>
853
+ </button>
854
+ `;
855
+ }
856
+ };
857
+ j([b(_)], L.prototype, "authStore", void 0), customElements.get("pop-auth-join") || customElements.define("pop-auth-join", L);
858
+ //#endregion
859
+ //#region src/components/pop-auth-no-code.ts
860
+ var Ie = O("\n :host {\n border-top: 1px solid var(--pop-sidebar-border);\n display: block;\n padding: 20px 24px;\n font-family: Inter, sans-serif;\n text-align: center;\n }\n\n .no-code__body {\n align-items: flex-start;\n align-self: stretch;\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .no-code__container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n justify-content: center;\n align-items: center;\n }\n\n .no-code__list {\n list-style: none;\n margin: 0;\n padding: 0;\n text-align: left;\n }\n\n .no-code__footer {\n align-items: center;\n display: flex;\n justify-content: space-between;\n width: 100%;\n }\n"), R = class extends k {
861
+ constructor(...e) {
862
+ super(...e), this.events = { click: "onClick" };
863
+ }
864
+ get styleSheets() {
865
+ return [Ie];
866
+ }
867
+ connectedCallback() {
868
+ super.connectedCallback(), this.getElement("#no-code-title")?.focus();
869
+ }
870
+ setupEffects() {
871
+ let e = this.authStore.authNoticeDismissals.peek();
872
+ this.addEffect(() => {
873
+ let t = this.authStore.authNoticeDismissals.value;
874
+ t !== e && (e = t, queueMicrotask(() => this.getElement("#no-code-title")?.focus({ preventScroll: !0 })));
875
+ });
876
+ }
877
+ onClick(e) {
878
+ let t = e.target;
879
+ if (t.closest(A("resend"))) {
880
+ this.authStore.resendOtp();
881
+ return;
882
+ }
883
+ if (t.closest(A("back"))) {
884
+ this.authStore.backToCode();
885
+ return;
886
+ }
887
+ }
888
+ getTemplate() {
889
+ return "\n <div\n class=\"no-code__container text-xs\"\n role=\"group\"\n aria-labelledby=\"no-code-title\"\n >\n <p class=\"text-heading m-0\" id=\"no-code-title\" tabindex=\"-1\">Steps to Take</p>\n <div class=\"no-code__body\">\n <ul class=\"no-code__list\">\n <li><strong>Check spam/junk</strong> – it might be there.</li>\n <li><strong>Verify email</strong> – check your email for typos.</li>\n <li><strong>Wait a moment</strong> – emails take a few mins.</li>\n <li><strong>Whitelist us</strong> – it may be blocked.</li>\n </ul>\n <p class=\"m-0\">Still no code?</p>\n </div>\n <div class=\"no-code__footer\">\n <pop-button-link data-ref=\"back\" size=\"sm\" theme=\"default\">Back</pop-button-link>\n <pop-button-link\n class=\"no-code__contact\"\n size=\"sm\"\n theme=\"default\"\n href=\"mailto:hello@popgrids.io?subject=Verification%20Code%20Issue\"\n >Contact Support</pop-button-link\n >\n <pop-button-link data-ref=\"resend\" size=\"sm\" theme=\"default\" primary>\n Resend Code\n </pop-button-link>\n </div>\n </div>\n ";
890
+ }
891
+ };
892
+ j([b(_)], R.prototype, "authStore", void 0), customElements.get("pop-auth-no-code") || customElements.define("pop-auth-no-code", R);
893
+ //#endregion
894
+ //#region src/assets/watermark@2x.png
895
+ var Le = "data:image/png;base64,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", Re = O("\n :host {\n display: block;\n position: relative;\n\n --pop-auth-border: var(--pop-border, rgba(0, 0, 32, 0.04));\n --pop-auth-logo: rgba(0, 0, 32, 0.35);\n }\n\n @media (prefers-color-scheme: dark) {\n :host {\n --pop-auth-border: var(--pop-border, rgba(255, 255, 255, 0.1));\n --pop-auth-logo: rgba(255, 255, 255, 0.35);\n }\n }\n\n :host(.dark) {\n --pop-auth-border: var(--pop-border, rgba(255, 255, 255, 0.1));\n --pop-auth-logo: rgba(255, 255, 255, 0.35);\n }\n\n /* Deliberately no background here. .panel's own box grows to match\n whichever of panel__join/panel__card is taller for the duration of a\n transition (the exiting one stays display:block until it finishes\n sliding away), so an opaque .panel would cover the comment list behind\n it for that whole 833ms. Leaving it transparent lets join/card's own\n (opaque) boxes show through everywhere except where they themselves\n render, so the comment list stays visible around them mid-transition. */\n .panel {\n position: relative;\n }\n\n /* Positioned relative to panel__join-group (below), not .panel — .panel's\n own box grows to match whichever of join/card is taller mid-transition,\n so a fixed offset from *it* would float away from the join bar it's\n meant to sit above. Anchoring to the group instead means it's part of\n the same box that's actually animating, so it stays put above the join\n bar and fades/slides with it, in sync, the same as border-top below. */\n .watermark {\n position: absolute;\n top: -22px;\n left: 2px;\n padding: 2px 6px;\n }\n\n /* pop-auth-join (+ its watermark) and the card (email/code/no-code) are\n two independent, always-mounted elements stacked in the same grid cell\n so they can overlap mid-transition — one slides down off-screen while\n the other slides up into place, instead of one instantly replacing the\n other. */\n .panel__stack {\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: 1fr;\n }\n\n .panel__join-group,\n .panel__card {\n /* Grid items default to align-self: stretch — during the brief window\n where both are display:block at once (mid-transition), the row\n auto-sizes to the taller of the two and would stretch the shorter\n one's box to match, pinning its content at the top instead of the\n bottom until the row shrinks back down. Anchor both to the end\n (bottom) of the shared cell instead, matching .feed__footer's own\n grid-stack treatment in pop-feed.ts. */\n grid-area: 1 / 1;\n align-self: end;\n }\n\n .panel__card {\n position: relative;\n }\n\n /* The transform/opacity/display transition lives on this wrapper, not\n directly on <pop-auth-join>, so the watermark (absolutely positioned\n inside it) rides along as part of the same animating box instead of\n needing its own separate, easy-to-desync transition. */\n .panel__join-group {\n position: relative;\n transform: translateY(0);\n opacity: 1;\n transition:\n transform var(--pop-duration-quick) var(--pop-ease-quick),\n opacity var(--pop-duration-quick) var(--pop-ease-quick),\n display var(--pop-duration-quick) allow-discrete;\n\n @starting-style {\n transform: translateY(100%);\n opacity: 0;\n }\n }\n\n .panel--card .panel__join-group {\n display: none;\n transform: translateY(100%);\n opacity: 0;\n }\n\n /* border-top lives on the join bar's own box (not the outer .panel) so it\n enters/leaves in lockstep with the bar itself — it used to live on\n .panel, toggled instantly by the panel--card class while the actual\n slide took 833ms, so the border would snap on/off out of sync with\n the content still animating underneath it. */\n .panel__join {\n border-top: 1px solid var(--pop-auth-border);\n }\n\n /* Same reasoning as border-top above: the card's own background/radius\n live on its own box (not toggled via panel--card on the static outer\n .panel) so they're always in sync with its display/opacity/transform\n state instead of snapping the instant the view changes. */\n .panel__card {\n display: none;\n background: var(--pop-background);\n border-radius: var(--pop-radius-2xl) var(--pop-radius-2xl) 0 0;\n transform: translateY(100%);\n opacity: 0;\n transition:\n transform var(--pop-duration-quick) var(--pop-ease-quick),\n opacity var(--pop-duration-quick) var(--pop-ease-quick),\n height var(--pop-duration-quick) var(--pop-ease-quick),\n display var(--pop-duration-quick) allow-discrete;\n }\n\n /* --pop-ease-quick overshoots 1 (peaks ~1.1), so the card's translateY and\n height briefly travel past their resting values and lift its bottom edge\n off the feed's bottom, exposing the comment list underneath. This\n backing extends the card's background below its box to cover that gap;\n the feed host's overflow:hidden clips it once the card settles. A\n box-shadow rather than a pseudo-element on purpose: an absolutely\n positioned descendant below the card counts toward its scrollHeight,\n which swapCardContent measures to animate the card's height — a shadow\n doesn't. */\n .panel__card {\n box-shadow: 0 100px 0 0 var(--pop-background);\n }\n\n .panel--card .panel__card {\n display: block;\n transform: translateY(0);\n opacity: 1;\n\n @starting-style {\n transform: translateY(100%);\n opacity: 0;\n }\n }\n"), z = class extends k {
896
+ constructor(...e) {
897
+ super(...e), this._child = null, this._prevView = "idle", this._heightAnimationFrame = null, this._heightTransitionEnd = null;
898
+ }
899
+ get styleSheets() {
900
+ return [Re];
901
+ }
902
+ disconnectedCallback() {
903
+ this.cancelCardHeightAnimation(), super.disconnectedCallback();
904
+ }
905
+ cancelCardHeightAnimation() {
906
+ this._heightAnimationFrame !== null && (window.cancelAnimationFrame(this._heightAnimationFrame), this._heightAnimationFrame = null);
907
+ let e = this.getElement(A("card"));
908
+ this._heightTransitionEnd &&= (e?.removeEventListener("transitionend", this._heightTransitionEnd), null);
909
+ }
910
+ swapCardContent(e, t, n) {
911
+ this.cancelCardHeightAnimation();
912
+ let r = e.getBoundingClientRect().height;
913
+ e.style.height = `${r}px`, t.innerHTML = `<${n}></${n}>`, this._heightAnimationFrame = window.requestAnimationFrame(() => {
914
+ this._heightAnimationFrame = null;
915
+ let n = t.getBoundingClientRect().height;
916
+ if (Math.abs(n - r) < 1) {
917
+ e.style.height = "";
918
+ return;
919
+ }
920
+ this._heightTransitionEnd = (t) => {
921
+ t.target !== e || t.propertyName !== "height" || (e.style.height = "", e.removeEventListener("transitionend", this._heightTransitionEnd), this._heightTransitionEnd = null);
922
+ }, e.addEventListener("transitionend", this._heightTransitionEnd), e.style.height = `${n}px`;
923
+ });
924
+ }
925
+ setupEffects() {
926
+ this.addEffect(() => {
927
+ let e = this.authStore.authView.value, t = e === "email" ? "pop-auth-email" : e === "code" ? "pop-auth-code" : e === "no-code" ? "pop-auth-no-code" : null, n = e === "idle" && this._prevView !== "idle" && this.getElement(A("card"))?.matches(":focus-within");
928
+ this.toggleClass(A("panel"), "panel--card", t !== null), n && this.getElement("pop-auth-join")?.restoreFocus();
929
+ let r = this._prevView === "idle" && e !== "idle", i = this.getElement(A("card-content"));
930
+ if (i && t && (this._child !== t || r)) {
931
+ let e = this.getElement(A("card"));
932
+ this._child = t, e && this._prevView !== "idle" ? this.swapCardContent(e, i, t) : i.innerHTML = `<${t}></${t}>`;
933
+ }
934
+ this._prevView = e;
935
+ });
936
+ }
937
+ getTemplate() {
938
+ return `
939
+ <div class="panel" data-ref="panel">
940
+ <div class="panel__stack">
941
+ <div class="panel__join-group">
942
+ <div class="watermark">
943
+ <img src="${Le}" alt="PopGrids Watermark" width="64" height="11" />
944
+ </div>
945
+ <pop-auth-join class="panel__join"></pop-auth-join>
946
+ </div>
947
+ <div class="panel__card" data-ref="card">
948
+ <div data-ref="card-content"></div>
949
+ </div>
950
+ </div>
951
+ </div>
952
+ `;
953
+ }
954
+ };
955
+ j([b(_)], z.prototype, "authStore", void 0), customElements.get("pop-auth-panel") || customElements.define("pop-auth-panel", z);
956
+ //#endregion
957
+ //#region src/components/pop-button-link.ts
958
+ var ze = O("\n :host {\n display: inline-flex;\n max-width: 100%;\n }\n\n .btn-link {\n position: relative;\n align-items: center;\n background-color: transparent;\n border-style: solid;\n border-color: transparent;\n border-top-width: 1px;\n border-bottom-width: 1px;\n border-left-width: 4px;\n border-right-width: 4px;\n border-radius: var(--pop-radius-xs, 4px);\n cursor: pointer;\n display: inline-flex;\n flex-shrink: 0;\n font-weight: 500;\n gap: 6px;\n justify-content: center;\n max-width: 100%;\n outline: none;\n text-decoration: none;\n transform: translateY(-1px);\n transition: all 150ms cubic-bezier(0.4, 0, 0.2, 1);\n white-space: nowrap;\n }\n\n /* Sizes */\n .btn-link--size-sm,\n .btn-link--size-md {\n font-size: 14px;\n line-height: 20px;\n letter-spacing: 0;\n }\n\n .btn-link--size-lg {\n font-size: 16px;\n line-height: 24px;\n letter-spacing: 0;\n }\n\n /* Themes */\n .btn-link--theme-default {\n color: var(--pop-foreground);\n }\n\n .btn-link--theme-default.btn-link--primary {\n color: var(--pop-foreground);\n }\n\n .btn-link--theme-white {\n color: white;\n }\n\n .btn-link--theme-black {\n color: black;\n }\n\n /* Hover State */\n .btn-link--theme-default:hover,\n .btn-link--theme-black:hover {\n background-color: color-mix(in srgb, var(--pop-foreground) 10%, transparent);\n }\n\n .btn-link--theme-white:hover {\n background-color: color-mix(in srgb, white 16%, transparent);\n }\n\n /* Focus State */\n .btn-link:focus-visible {\n background-color: var(--pop-ring);\n color: white !important;\n }\n\n /* Disabled State */\n .btn-link:disabled,\n .btn-link.is-disabled {\n color: color-mix(in srgb, var(--pop-foreground) 35%, transparent) !important;\n background-color: transparent !important;\n border-color: transparent !important;\n cursor: not-allowed;\n pointer-events: none;\n }\n\n .btn-link__icon {\n align-items: center;\n display: inline-flex;\n flex-shrink: 0;\n justify-content: center;\n }\n\n .btn-link__icon ::slotted(*) {\n display: block;\n height: 18px;\n pointer-events: none;\n width: 18px;\n }\n\n :host([size=\"sm\"]) .btn-link__icon ::slotted(*) {\n height: 16px;\n width: 16px;\n }\n\n :host([size=\"lg\"]) .btn-link__icon ::slotted(*) {\n height: 20px;\n width: 20px;\n }\n\n .btn-link__label {\n min-width: 0;\n overflow: hidden;\n position: relative;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n"), Be = new Set([
959
+ "sm",
960
+ "md",
961
+ "lg"
962
+ ]), Ve = new Set([
963
+ "default",
964
+ "white",
965
+ "black"
966
+ ]), He = class extends k {
967
+ constructor(...e) {
968
+ super(...e), this.events = { click: "onClick" };
969
+ }
970
+ get styleSheets() {
971
+ return [ze];
972
+ }
973
+ static get observedAttributes() {
974
+ return [
975
+ "href",
976
+ "size",
977
+ "theme",
978
+ "primary",
979
+ "disabled",
980
+ "type",
981
+ "target",
982
+ "rel"
983
+ ];
984
+ }
985
+ onHrefChanged() {
986
+ this.render();
987
+ }
988
+ onSizeChanged() {
989
+ this.render();
990
+ }
991
+ onThemeChanged() {
992
+ this.render();
993
+ }
994
+ onPrimaryChanged() {
995
+ this.render();
996
+ }
997
+ onDisabledChanged() {
998
+ this.render();
999
+ }
1000
+ onTypeChanged() {
1001
+ this.render();
1002
+ }
1003
+ onTargetChanged() {
1004
+ this.render();
1005
+ }
1006
+ onRelChanged() {
1007
+ this.render();
1008
+ }
1009
+ get href() {
1010
+ return this.getAttribute("href");
1011
+ }
1012
+ set href(e) {
1013
+ e === null ? this.removeAttribute("href") : this.setAttribute("href", e);
1014
+ }
1015
+ get size() {
1016
+ let e = this.getAttribute("size");
1017
+ return e && Be.has(e) ? e : "md";
1018
+ }
1019
+ set size(e) {
1020
+ this.setAttribute("size", e);
1021
+ }
1022
+ get theme() {
1023
+ let e = this.getAttribute("theme");
1024
+ return e && Ve.has(e) ? e : "default";
1025
+ }
1026
+ set theme(e) {
1027
+ this.setAttribute("theme", e);
1028
+ }
1029
+ get primary() {
1030
+ return this.hasAttribute("primary");
1031
+ }
1032
+ set primary(e) {
1033
+ e ? this.setAttribute("primary", "") : this.removeAttribute("primary");
1034
+ }
1035
+ get disabled() {
1036
+ return this.hasAttribute("disabled");
1037
+ }
1038
+ set disabled(e) {
1039
+ e ? this.setAttribute("disabled", "") : this.removeAttribute("disabled");
1040
+ }
1041
+ get type() {
1042
+ let e = this.getAttribute("type");
1043
+ return e === "submit" || e === "reset" ? e : "button";
1044
+ }
1045
+ set type(e) {
1046
+ this.setAttribute("type", e);
1047
+ }
1048
+ onClick(e) {
1049
+ this.disabled && (e.preventDefault(), e.stopImmediatePropagation());
1050
+ }
1051
+ hasSlotted(e) {
1052
+ return this.querySelector(`:scope > [slot="${e}"]`) !== null;
1053
+ }
1054
+ hasLabel() {
1055
+ return Array.from(this.childNodes).some((e) => e.nodeType === Node.ELEMENT_NODE ? !e.hasAttribute("slot") : e.nodeType === Node.TEXT_NODE && !!e.textContent?.trim());
1056
+ }
1057
+ getTemplate() {
1058
+ let e = [
1059
+ "btn-link",
1060
+ `btn-link--size-${this.size}`,
1061
+ `btn-link--theme-${this.theme}`,
1062
+ this.primary ? "btn-link--primary" : "",
1063
+ this.disabled ? "is-disabled" : ""
1064
+ ].filter(Boolean).join(" "), t = this.hasSlotted("leading") ? "<span class=\"btn-link__icon\"><slot name=\"leading\"></slot></span>" : "", n = this.hasSlotted("trailing") ? "<span class=\"btn-link__icon\"><slot name=\"trailing\"></slot></span>" : "", r = `${t}${this.hasLabel() ? "<span class=\"btn-link__label\"><slot></slot></span>" : ""}${n}`;
1065
+ if (this.href !== null) {
1066
+ let t = this.disabled ? "aria-disabled=\"true\" tabindex=\"-1\"" : "", n = this.getAttribute("target"), i = this.getAttribute("rel");
1067
+ return `
1068
+ <a
1069
+ class="${e}"
1070
+ part="link"
1071
+ href="${this.href}"
1072
+ ${n ? `target="${n}"` : ""}
1073
+ ${i ? `rel="${i}"` : ""}
1074
+ ${t}
1075
+ >${r}</a
1076
+ >
1077
+ `;
1078
+ }
1079
+ return `
1080
+ <button
1081
+ class="${e}"
1082
+ part="link"
1083
+ type="${this.type}"
1084
+ ${this.disabled ? "disabled" : ""}
1085
+ >
1086
+ ${r}
1087
+ </button>
1088
+ `;
1089
+ }
1090
+ };
1091
+ customElements.get("pop-button-link") || customElements.define("pop-button-link", He);
1092
+ //#endregion
1093
+ //#region src/assets/popgrids-letter-p.png?inline
1094
+ var Ue = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD8AAABMCAYAAADa6W+wAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAUuSURBVHgB5ZyBceIwEEX3bq4AOsAdQAdxKggl+Co4rgKcCkgqgFRAUgGkAqACOxVAKvDpg+VRHEmWQSubuTezg8Ega7UrebWS+UG8jIXEQoZCovI9lcd1ciHHUnZCPsrXXflZ7xkISYSshByEFJ5kLWRO54bsHRGdK+dTYZNkQhbUg4aI6FyRoiNBQyQUGLj3jMJYuleNMC4v1gel67Ig/WCq5Qe144+QlM6Wb2QwGNB4PD7JaDQ6veIzKZLj8XiSPM9Pr/v9nna73UnwWUtyIb+FbMgjM3K0QBzHxXq9Lg6HQ3Et2+22WCwWpzJdr1/KjDzRqLiwZDGbzbwobCLLslNDRFEUrAEmTReBVVCxkLRohIsbICLLiA5roxJdAm9zaIAJXUBmKhCtHtraJjAuNHjBgVrcBcDsFhSXoD4NDbB2VTyyFNI7xSUODTB1UX5hKmA+nxd9Bl0AYxGZ3X9wkdWTJCluARjIYv2ULrG6T3eHhabT6SkY4sASFB1aWx23FJ+IULcqm6MBUKbF+rFO+ZQCje6qa6J8jsjQYv2FTvmMAvb1yWRSXePp6anwzWq1cnb9MQXo6yqwthyZ0Q04y9e5/k9F+VjnCpiGCrckDjCtFV51OpZTWN/lo/4Gxqryd7pvCNckTkS/rI7f39/JN5b6j1TltU10d3dHnKjl+7Y8sHhtpS+iHm3f4JyfS2RIytHvMV4ZdMt+1lvhS9OUaSdu5DUuSFk5l60hksoPWv7QK9I1kb/zjU2HRsuHIFQj17FanusWV4fD4i5I5Ye6k8PhkELAqbxlHDn2os9L5Tm6mUX5vBfKy/s7x/U+Pz9Np7q3/GazqY7VaI+j/Br7zpV/e3urjjmiSUvUWJ3QRkHcqAlHzL58g+iUzAmNLxOboGAgur+/rwYkjgnU6+ur6VROXVpezbLA6hw5A9dMTnDlZRoLinPk8CwTmm85vE76PCdIvRn0ympdQL8YGWI6y0GD1atVGzngaePLrmLua8FAaqEaBTsb7bl4fHy0hbTPdB7pv7AmjYtwraZw0eDu6OuRqrTV7T8+PuhWkHGDhUeqWV0qr43+b6XPI4RVAyYNGyHL+odS+Vz3i1tQ/vn5uUlxnPitO/FL+cL3XzEkFAFmWsjRY28eZnKXTKBQBgY3y6xN8pcM+km0O66wlhZiUMJ1lstlY1yB8y335KU2peUOTKRQtvWTyOGJypJv4FGwmlD42zl4Aq6rZnQhFyxnYYBLXb4YEemXpjlx2ENziSBaTaglncT3nhtgTS23nEkyXYEhdl417KJwtfaUrkCrPPbOhEDdqNBS6ZQcd4HbWOkugN0NIWhhfRhpQR4eM/mlHGujPEvq1ysNOXu4tHzaKidPqLO6XPcFrkCnDgIdy/IYUryYiubkEVV5bSwbSnlgW04mBhqVDxnfh16tVZXXhk8hLW9bVCQGemV5y7VyCkAnUR5APEHmezkL9RxeZ4Oey5qab5yUVxcTuXh5eTGd2lMgnkjjepg/c9JmdYWT2FQJjo3BEsusLqPAbHUV4VpMTNPUZvUFBSYxVMT7vvsGxWH1iDpgTYbbDjzg2i6AXBweMSH77C2hjsAUy/psPLwASce2OD4GuqIA2B4hxzRyrrzHbfBb8I2ZGJKODw8PVeJRxujysXDcw/FYOBKWDhFjLuSeAkV1NlJqn125RjLqqJ+bSOk/VVwSEe9fRSzJQx6Om4T8NgLKiunGSMh8O3QR/Damjmn7hyF14KpxKSM6d49IOa/7u6dX6snfPf0DiVL6IWhCmZ4AAAAASUVORK5CYII=", B = /* @__PURE__ */ "#DDD0BE.#E9DCBB.#E9DCBB.#C7D1B0.#C6D0CB.#E9DCBB.#C7D1B0.#E9DCBB.#DFC2C0.#CFD4C6.#D7E3E8.#CFD4C6.#D6B3B3.#E9DCBB.#CFCBDC.#BFD6D7.#E3D2C6.#D1E2E7.#D6B3B3.#BFD6D7.#E9DCBB.#C7D1B0.#DFC2C0.#D1E2E7.#CFD4C6.#E9DCBB.#D7E3E8.#CFD4C6.#C6D0CB.#E9DCBB.#C7D1B0.#E9DCBB.#CFCBDC.#E3D2C6.#E9DCBB".split("."), We = (e) => typeof e == "number" ? B[e % B.length] ?? "#e5e7eb" : B[Math.floor(Math.random() * B.length)];
1095
+ function Ge(e) {
1096
+ let t = new TextEncoder().encode(e), n = 2166136261;
1097
+ for (let e = 0; e < t.length; e++) {
1098
+ let r = t[e] ?? 0;
1099
+ n ^= r, n = Math.imul(n, 16777619);
1100
+ }
1101
+ return n >>> 0;
1102
+ }
1103
+ function Ke(e) {
1104
+ return B[Ge(e) % B.length] ?? "#e5e7eb";
1105
+ }
1106
+ //#endregion
1107
+ //#region src/components/pop-comment-avatar.ts
1108
+ var qe = O("\n :host {\n display: block;\n\n --comment-avatar-border-size: 1px;\n --comment-avatar-border-color: var(--color-background, #fff);\n --comment-avatar-size: 32px;\n }\n\n .comment-avatar {\n align-items: center;\n display: flex;\n flex-shrink: 0;\n isolation: isolate;\n justify-content: center;\n position: relative;\n width: calc(var(--comment-avatar-size) + calc(var(--comment-avatar-border-size) * 2));\n height: calc(var(--comment-avatar-size) + calc(var(--comment-avatar-border-size) * 2));\n }\n\n .comment-avatar--size-xs {\n --comment-avatar-size: 32px;\n }\n\n .comment-avatar--size-sm {\n --comment-avatar-size: 56px;\n }\n\n .comment-avatar--size-md {\n --comment-avatar-size: 80px;\n }\n\n .comment-avatar--size-lg {\n --comment-avatar-size: 120px;\n }\n\n .comment-avatar--size-xl {\n --comment-avatar-size: 140px;\n }\n\n .comment-avatar__background {\n background-color: var(--comment-avatar-border-color);\n position: absolute;\n top: 0;\n left: 0;\n z-index: 10;\n width: 100%;\n height: 100%;\n }\n\n /**\n * Content\n */\n\n .comment-avatar__content {\n align-items: center;\n background-color: var(--color-surface-bg-default);\n display: flex;\n justify-content: center;\n overflow: hidden;\n position: relative;\n height: var(--comment-avatar-size);\n width: var(--comment-avatar-size);\n z-index: 20;\n\n /* Initials styling */\n font-family: Inter, sans-serif;\n font-weight: 600;\n color: #374151;\n font-size: calc(var(--comment-avatar-size) * 0.35);\n line-height: 1;\n }\n\n .comment-avatar__content::slotted(img) {\n -webkit-user-drag: none;\n align-self: stretch;\n flex: 1 0 0;\n height: var(--comment-avatar-size);\n object-fit: cover;\n pointer-events: none;\n position: absolute;\n user-select: none;\n width: var(--comment-avatar-size);\n }\n\n .comment-avatar__deleted-mark {\n -webkit-user-drag: none;\n bottom: -3px;\n height: auto;\n left: 0;\n object-fit: cover;\n pointer-events: none;\n position: absolute;\n user-select: none;\n width: 100%;\n transform: scale(0.57);\n }\n"), Je = class extends k {
1109
+ constructor() {
1110
+ super(), this._backgroundColor = We() ?? "#e5e7eb";
1111
+ }
1112
+ static get observedAttributes() {
1113
+ return [
1114
+ "size",
1115
+ "data-color-key",
1116
+ "deleted"
1117
+ ];
1118
+ }
1119
+ onSizeChanged() {
1120
+ this.render();
1121
+ }
1122
+ onDataColorKeyChanged() {
1123
+ this.render();
1124
+ }
1125
+ onDeletedChanged() {
1126
+ this.render();
1127
+ }
1128
+ get styleSheets() {
1129
+ return [qe];
1130
+ }
1131
+ get size() {
1132
+ return this.getAttribute("size") || "md";
1133
+ }
1134
+ set size(e) {
1135
+ this.setAttribute("size", e);
1136
+ }
1137
+ get deleted() {
1138
+ return this.hasAttribute("deleted");
1139
+ }
1140
+ set deleted(e) {
1141
+ e ? this.setAttribute("deleted", "") : this.removeAttribute("deleted");
1142
+ }
1143
+ getTemplate() {
1144
+ let e = this.size, t = this.deleted, n = this.getAttribute("data-color-key"), r = t ? "var(--pop-muted-foreground, #e5e7eb)" : n ? Ke(n) : this._backgroundColor;
1145
+ return `
1146
+ <div class="comment-avatar comment-avatar--size-${e}" part="base">
1147
+ <div class="comment-avatar__background mask mask-squircle" part="background"></div>
1148
+ ${t ? `<div
1149
+ class="comment-avatar__content mask mask-squircle"
1150
+ part="content"
1151
+ style="background-color: ${r}; opacity: 0.15"
1152
+ ><img class="comment-avatar__deleted-mark" src="${Ue}" alt="Deleted user" /></div>` : `<slot
1153
+ class="comment-avatar__content mask mask-squircle"
1154
+ part="content"
1155
+ style="background-color: ${r};"
1156
+ ></slot>`}
1157
+ </div>
1158
+ `;
1159
+ }
129
1160
  };
130
- function C(e) {
131
- return function(t, n) {
132
- let r = Symbol("context_" + (e.name || "store"));
133
- Object.defineProperty(t, n, {
134
- get() {
135
- if (this[r]) return this[r];
136
- let t = ue(this, e);
137
- if (!t) throw console.error(`[Context] resolveStore failed! isConnected: ${this.isConnected}`, this), Error(`[Context] Store for key "${e.name || e}" not resolved on <${this.localName}>.`);
138
- return this[r] = t, t;
139
- },
140
- enumerable: !0,
141
- configurable: !0
142
- });
143
- };
144
- }
1161
+ customElements.get("pop-comment-avatar") || customElements.define("pop-comment-avatar", Je);
145
1162
  //#endregion
146
1163
  //#region src/store/grid-store.ts
147
- var de = 3e4, w = 3, T = (e) => {
1164
+ var Ye = 3e4, V = 3, H = (e) => {
148
1165
  let t = typeof e.createdAt == "number" ? e.createdAt : Date.parse(String(e.createdAt));
149
1166
  return Number.isFinite(t) ? t : 0;
150
- }, E = (e, t) => {
1167
+ }, U = (e, t) => {
151
1168
  let n = e?.previewCount ?? t;
152
- return n > 0 ? n : w;
153
- }, fe = (e, t) => e && {
1169
+ return n > 0 ? n : V;
1170
+ }, Xe = (e, t) => e && {
154
1171
  ...e,
155
1172
  ...t
156
- }, D = class {
157
- constructor(t) {
158
- this.previewCount = w, this._fetchedGrid = n(null), this._overrides = n({}), this.grid = e(() => fe(this._fetchedGrid.value, this._overrides.value)), this.comments = n([]), this.loading = n(!0), this.error = n(null), this.open = n(!1), this.replyingTo = n(null), this.editingCommentId = n(null), this.scrollingCommentId = n(null), this.socket = null, this.reconnectAttempt = 0, this.reconnectTimer = null, this.disposed = !1, this.topLevelComments = e(() => this.comments.value.filter((e) => e.parentCommentId === null).sort((e, t) => String(e.sortKey).localeCompare(String(t.sortKey)))), this.replyingToComment = e(() => {
1173
+ }, W = class {
1174
+ constructor(e) {
1175
+ this.previewCount = V, this._fetchedGrid = c(null), this._overrides = c({}), this.grid = o(() => Xe(this._fetchedGrid.value, this._overrides.value)), this.comments = c([]), this.loading = c(!0), this.error = c(null), this.open = c(!1), this.replyingTo = c(null), this.editingCommentId = c(null), this.scrollingCommentId = c(null), this.socket = null, this.reconnectAttempt = 0, this.reconnectTimer = null, this.disposed = !1, this.topLevelComments = o(() => this.comments.value.filter((e) => e.parentCommentId === null).sort((e, t) => String(e.sortKey).localeCompare(String(t.sortKey)))), this.replyingToComment = o(() => {
159
1176
  let e = this.replyingTo.value;
160
1177
  return e ? this.comments.value.find((t) => t.id === e) ?? null : null;
161
- }), this.editingComment = e(() => {
1178
+ }), this.editingComment = o(() => {
162
1179
  let e = this.editingCommentId.value;
163
1180
  return e ? this.comments.value.find((t) => t.id === e) ?? null : null;
164
- }), this.previewComments = e(() => this.topLevelComments.value.slice(0, E(this.grid.value, this.previewCount))), this.previewAvatars = e(() => {
165
- let e = E(this.grid.value, this.previewCount), t = /* @__PURE__ */ new Set(), n = [], r = [...this.comments.value].sort((e, t) => T(t) - T(e));
1181
+ }), this.previewComments = o(() => this.topLevelComments.value.slice(0, U(this.grid.value, this.previewCount))), this.previewAvatars = o(() => {
1182
+ let e = U(this.grid.value, this.previewCount), t = /* @__PURE__ */ new Set(), n = [], r = [...this.comments.value].sort((e, t) => H(t) - H(e));
166
1183
  for (let i of r) {
167
1184
  let r = i.author;
168
1185
  if (!(!r?.id || t.has(r.id)) && (t.add(r.id), n.push(r), n.length >= e)) break;
169
1186
  }
170
1187
  return n.reverse();
171
- }), this.apiUrl = t.apiUrl, this.publicKey = t.publicKey, this.pageUrl = t.pageUrl, this.externalId = t.externalId?.trim() || null;
1188
+ }), this.apiUrl = e.apiUrl, this.publicKey = e.publicKey, this.pageUrl = e.pageUrl, this.externalId = e.externalId?.trim() || null, this.authStore = e.authStore;
172
1189
  }
173
1190
  setOverrides(e) {
174
1191
  this._overrides.value = e;
@@ -184,11 +1201,11 @@ var de = 3e4, w = 3, T = (e) => {
184
1201
  async load() {
185
1202
  this.loading.value = !0, this.error.value = null;
186
1203
  try {
187
- let e = await fetch(`${this.apiUrl}/api/v1/embed/grids/${this.publicKey}`, { credentials: "include" });
1204
+ let e = await this.authStore.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}`);
188
1205
  if (!e.ok) return this.error.value = "There was a problem loading the PopGrid", !1;
189
1206
  let t = await e.json();
190
1207
  this._fetchedGrid.value = t.grid, this.connectRealtime();
191
- let n = await fetch(`${this.apiUrl}/api/v1/embed/grids/${this.publicKey}/comments?${this.identityParams()}`, { credentials: "include" });
1208
+ let n = await this.authStore.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/comments?${this.identityParams()}`);
192
1209
  if (n.ok) {
193
1210
  let e = await n.json();
194
1211
  this.comments.value = e.comments;
@@ -201,9 +1218,8 @@ var de = 3e4, w = 3, T = (e) => {
201
1218
  }
202
1219
  }
203
1220
  async postComment(e, t) {
204
- let n = async () => fetch(`${this.apiUrl}/api/v1/embed/grids/${this.publicKey}/comments`, {
1221
+ let n = await this.authStore.authorizedFetch(`/api/v1/embed/grids/${this.publicKey}/comments`, {
205
1222
  method: "POST",
206
- credentials: "include",
207
1223
  headers: { "Content-Type": "application/json" },
208
1224
  body: JSON.stringify({
209
1225
  body: e,
@@ -211,46 +1227,51 @@ var de = 3e4, w = 3, T = (e) => {
211
1227
  externalId: this.externalId ?? void 0,
212
1228
  parentCommentId: t
213
1229
  })
214
- }), r = await n();
215
- if (r.status === 401) {
216
- if (!await x(this.apiUrl, this.publicKey)) return null;
217
- r = await n();
218
- }
219
- if (!r.ok) return null;
220
- let i = await r.json();
221
- return this.upsertComment(i.comment), i.comment.author && !g.value && (g.value = {
222
- id: i.comment.author.id,
223
- name: i.comment.author.name ?? "",
1230
+ });
1231
+ if (!n.ok) return null;
1232
+ let r = await n.json();
1233
+ return this.upsertComment(r.comment), r.comment.author && !this.authStore.currentUser.value && (this.authStore.currentUser.value = {
1234
+ id: r.comment.author.id,
1235
+ name: r.comment.author.name ?? "",
224
1236
  email: "",
225
- image: i.comment.author.image
226
- }), i.comment;
1237
+ image: r.comment.author.image
1238
+ }), r.comment;
227
1239
  }
228
1240
  destroy() {
229
1241
  this.disposed = !0, this.reconnectTimer &&= (clearTimeout(this.reconnectTimer), null), this.socket &&= (this.socket.onopen = null, this.socket.onmessage = null, this.socket.onclose = null, this.socket.onerror = null, this.socket.close(), null);
230
1242
  }
231
- connectRealtime() {
1243
+ async connectRealtime() {
232
1244
  let e = this.grid.value?.connectUrl;
233
1245
  if (!e || this.disposed) return;
234
1246
  this.socket &&= (this.socket.onopen = null, this.socket.onmessage = null, this.socket.onclose = null, this.socket.onerror = null, this.socket.close(), null);
235
- let t = new URL(e, this.apiUrl);
236
- t.protocol = t.protocol === "https:" ? "wss:" : "ws:", t.searchParams.set("pageUrl", this.pageUrl), this.externalId && t.searchParams.set("externalId", this.externalId);
237
- let n = new WebSocket(t.toString());
238
- this.socket = n, n.onopen = () => {
1247
+ let t = null;
1248
+ try {
1249
+ let e = await this.authStore.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/connect-ticket`, { method: "POST" });
1250
+ e.ok && (t = (await e.json()).ticket);
1251
+ } catch {}
1252
+ if (!t || this.disposed) {
1253
+ this.scheduleReconnect();
1254
+ return;
1255
+ }
1256
+ let n = new URL(e, this.apiUrl);
1257
+ n.protocol = n.protocol === "https:" ? "wss:" : "ws:", n.searchParams.set("ticket", t), n.searchParams.set("pageUrl", this.pageUrl), this.externalId && n.searchParams.set("externalId", this.externalId);
1258
+ let r = new WebSocket(n.toString());
1259
+ this.socket = r, r.onopen = () => {
239
1260
  this.reconnectAttempt = 0;
240
- }, n.onmessage = (e) => {
1261
+ }, r.onmessage = (e) => {
241
1262
  try {
242
1263
  let t = JSON.parse(String(e.data));
243
1264
  t.type === "comment.created" && t.comment ? this.upsertComment(t.comment) : t.type === "comment.updated" && t.comment && this.updateCommentInList(t.comment);
244
1265
  } catch {}
245
- }, n.onclose = () => {
1266
+ }, r.onclose = () => {
246
1267
  this.disposed || this.scheduleReconnect();
247
- }, n.onerror = () => {
248
- n.close();
1268
+ }, r.onerror = () => {
1269
+ r.close();
249
1270
  };
250
1271
  }
251
1272
  scheduleReconnect() {
252
1273
  if (this.disposed || this.reconnectTimer) return;
253
- let e = Math.min(1e3 * 2 ** this.reconnectAttempt, de);
1274
+ let e = d(this.reconnectAttempt, 1e3, Ye);
254
1275
  this.reconnectAttempt += 1, this.reconnectTimer = setTimeout(() => {
255
1276
  this.reconnectTimer = null, this.connectRealtime();
256
1277
  }, e);
@@ -259,288 +1280,40 @@ var de = 3e4, w = 3, T = (e) => {
259
1280
  this.comments.value.some((t) => t.id === e.id) || (this.comments.value = [...this.comments.value, e]);
260
1281
  }
261
1282
  async editComment(e, t) {
262
- let n = async () => fetch(`${this.apiUrl}/api/v1/embed/grids/${this.publicKey}/comments/${e}`, {
1283
+ let n = await this.authStore.authorizedFetch(`/api/v1/embed/grids/${this.publicKey}/comments/${e}`, {
263
1284
  method: "PATCH",
264
- credentials: "include",
265
1285
  headers: { "Content-Type": "application/json" },
266
1286
  body: JSON.stringify({
267
1287
  body: t,
268
1288
  pageUrl: this.pageUrl,
269
1289
  externalId: this.externalId ?? void 0
270
1290
  })
271
- }), r = await n();
272
- if (r.status === 401) {
273
- if (!await x(this.apiUrl, this.publicKey)) return null;
274
- r = await n();
275
- }
276
- if (!r.ok) return null;
277
- let i = await r.json();
278
- return this.updateCommentInList(i.comment), i.comment;
279
- }
280
- async deleteComment(e) {
281
- let t = async () => fetch(`${this.apiUrl}/api/v1/embed/grids/${this.publicKey}/comments/${e}?${this.identityParams()}`, {
282
- method: "DELETE",
283
- credentials: "include"
284
- }), n = await t();
285
- if (n.status === 401) {
286
- if (!await x(this.apiUrl, this.publicKey)) return null;
287
- n = await t();
288
- }
1291
+ });
289
1292
  if (!n.ok) return null;
290
1293
  let r = await n.json();
291
1294
  return this.updateCommentInList(r.comment), r.comment;
292
1295
  }
1296
+ async deleteComment(e) {
1297
+ let t = await this.authStore.authorizedFetch(`/api/v1/embed/grids/${this.publicKey}/comments/${e}?${this.identityParams()}`, { method: "DELETE" });
1298
+ if (!t.ok) return null;
1299
+ let n = await t.json();
1300
+ return this.updateCommentInList(n.comment), n.comment;
1301
+ }
293
1302
  async flagComment(e) {
294
- let t = async () => fetch(`${this.apiUrl}/api/v1/embed/grids/${this.publicKey}/comments/${e}/flag?${this.identityParams()}`, {
295
- method: "POST",
296
- credentials: "include"
297
- }), n = await t();
298
- if (n.status === 401) {
299
- if (!await x(this.apiUrl, this.publicKey)) return !1;
300
- n = await t();
301
- }
302
- return n.ok;
1303
+ return (await this.authStore.authorizedFetch(`/api/v1/embed/grids/${this.publicKey}/comments/${e}/flag?${this.identityParams()}`, { method: "POST" })).ok;
303
1304
  }
304
1305
  updateCommentInList(e) {
305
1306
  this.comments.value = this.comments.value.map((t) => t.id === e.id ? e : t);
306
1307
  }
307
- }, pe = "@layer base{:host{box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--pop-color-brand-midnight-100:oklch(96.58% .0161 262.75);--pop-color-brand-midnight-900:oklch(15% .03 255.43);--pop-color-brand-midnight-800:oklch(19% .05 255.43);--pop-color-brand-ocean-400:oklch(63% .19 255.43);--pop-color-brand-ocean-100:oklch(91% .05 255.43);--pop-color-brand-forest-900:oklch(38.66% .0698 180.75);--pop-color-brand-forest-700:oklch(45% .15 165.43);--pop-color-brand-forest-100:oklch(97% .04 165.43);--pop-color-brand-highlight-400:oklch(88% .25 105.43);--pop-color-brand-pumpkin-500:oklch(62% .18 45.43);--pop-color-brand-pumpkin-200:oklch(89% .08 45.43);--pop-color-brand-lemon-300:oklch(91% .12 85.43);--pop-color-brand-lemon-100:oklch(97% .04 85.43);--pop-duration-bouncy:1s;--pop-duration-card-highlight:.6s;--pop-duration-gentle:.833s;--pop-duration-menu:.4s;--pop-duration-pop-hover:.6s;--pop-duration-pop-text:.3s;--pop-duration-quick:.833s;--pop-duration-slow:1.167s;--pop-ease-bouncy:linear(0, .011, .045 1.3%, .184 2.7%, .911 7.4%, 1.153 9.4%, 1.301 11.2%, 1.342, 1.362 13%, 1.363, 1.355 14.4%, 1.306 16%, 1.028 21%, .939 23%, .89 24.7%, .876, .868 26.4%, .869, .882 29%, .907 30.5%, 1.014 35.9%, 1.038, 1.048 39.8% 41.1%, 1.043 42.5%, .995 49.3%, .987, .983 53.2%, .984 55.9%, 1.002 62.7%, 1.006 66.4%, .998 79.7%, 1);--pop-ease-card-highlight:linear(0, .008, .031 1.8%, .127 3.9%, .671 11.8%, .881 15.5%, .959, 1.02 19.2%, 1.064, 1.093 23.2%, 1.102, 1.108, 1.108, 1.104 28.7%, 1.089 31.4%, 1.038 38.1%, 1.016 41.5%, .999 45.4%, .99 49.6%, .989 55.3%, 1.001 74.9%, 1);--pop-ease-gentle:linear(0, .007, .026, .059 4.5%, .106 6.3%, .209 9.5%, .558 19.3%, .658, .742, .812, .87, .918, .957, .986 41.6%, 1.007 45.3%, 1.021 49.4%, 1.027 54% 60.9%, 1.007 83.2%, 1);--pop-ease-menu:linear(0, .0034 0.81%, .0278 2.42%, .097 4.84%, .5361 15.32%, .655 18.55%, .7314, .7964 23.39%, .8662, .9185, .9561, .9818, .9984, 1.0083 42.74%, 1.014 46.77%, 1.0145 53.22%, 1.0053 68.55%, 1.0019 77.42%, .9998 100%);--pop-ease-pop-hover:linear(0, .008, .031 1.8%, .127 3.9%, .671 11.8%, .881 15.5%, .959, 1.02 19.2%, 1.064, 1.093 23.2%, 1.102, 1.108, 1.108, 1.104 28.7%, 1.089 31.4%, 1.038 38.1%, 1.016 41.5%, .999 45.4%, .99 49.6%, .989 55.3%, 1.001 74.9%, 1);--pop-ease-pop-text:linear(0, .0051 0.99%, .0261, .0607 3.61%, .1192 5.26%, .2531 8.21%, .6509 16.1%, .7652 18.73%, .8512, .9232 23.33%, .9881 25.96%, 1.0305 28.26%, 1.0642 30.88%, 1.0782 32.53%, 1.089, 1.094 36.47%, 1.0942, 1.0896 41.07%, 1.0804 43.7%, 1.0354 53.23%, 1.0181 57.5%, 1.0061 61.44%, .9974 65.71%, .9925 70.31%, .991 75.9%, .9996 99.88%);--pop-ease-quick:linear(0, .008, .031 1.8%, .127 3.9%, .671 11.8%, .881 15.5%, .959, 1.02 19.2%, 1.064, 1.093 23.2%, 1.102, 1.108, 1.108, 1.104 28.7%, 1.089 31.4%, 1.038 38.1%, 1.016 41.5%, .999 45.4%, .99 49.6%, .989 55.3%, 1.001 74.9%, 1);--pop-ease-slow:linear(0, .005, .02 2%, .081 4.5%, .469 15.2%, .567, .65, .722 24.4%, .784, .835 31.1%, .878 34.9%, .914 39.1%, .942 43.8%, .964 49.1%, .979 55.4%, .989 62.4%, .995 71.1%, 1);--pop-shadow-xs:0px 1px 2px 0px #1018280d;--pop-shadow-sm:0px 1px 3px 0px #1018281a, 0px 1px 2px 0px #1018280f;--pop-shadow-md:0px 4px 8px -2px #1018281a, 0px 2px 4px -2px #1018280f;--pop-shadow-lg:0px 12px 16px -4px #10182814, 0px 4px 6px -2px #10182808;--pop-shadow-xl:0px 20px 24px -4px #10182814, 0px 8px 8px -4px #10182808;--pop-shadow-2xl:0px 24px 48px -12px #1018282e;--pop-shadow-3xl:0px 32px 48px -12px #10182852;--pop-shadow-4xl:0px 24px 32px -12px #10182847;--pop-radius-none:0;--pop-radius-xxs:.125rem;--pop-radius-xs:.25rem;--pop-radius-sm:.375rem;--pop-radius-md:.5rem;--pop-radius-lg:.625rem;--pop-radius-xl:.75rem;--pop-radius-2xl:1rem;--pop-radius-3xl:1.25rem;--pop-radius-4xl:1.5rem;--pop-radius-full:9999px;--pop-radius:.625rem;--pop-background:oklch(100% 0 0);--pop-foreground:oklch(0% 0 0);--pop-card:oklch(100% 0 0);--pop-card-foreground:oklch(14.5% 0 0);--pop-popover:oklch(100% 0 0);--pop-popover-foreground:oklch(0% 0 0);--pop-primary:oklch(20.5% 0 0);--pop-primary-foreground:oklch(98.5% 0 0);--pop-secondary:oklch(97% 0 0);--pop-secondary-foreground:oklch(20.5% 0 0);--pop-muted:oklch(97% 0 0);--pop-muted-foreground:oklch(71.52% .0233 256.76);--pop-accent:oklch(97% 0 0);--pop-accent-foreground:oklch(20.5% 0 0);--pop-destructive:var(--color-error-600);--pop-border:oklch(11.01% .0763 264.05/.102);--pop-input:oklch(92.2% 0 0);--pop-ring:oklch(62.3% .214 259.815);--pop-chart-1:oklch(64.6% .222 41.116);--pop-chart-2:oklch(60% .118 184.704);--pop-chart-3:oklch(39.8% .07 227.392);--pop-chart-4:oklch(82.8% .189 84.429);--pop-chart-5:oklch(76.9% .188 70.08);--pop-sidebar:oklch(98.5% 0 0);--pop-sidebar-foreground:oklch(14.5% 0 0);--pop-sidebar-primary:oklch(20.5% 0 0);--pop-sidebar-primary-foreground:oklch(98.5% 0 0);--pop-sidebar-accent:oklch(97% 0 0);--pop-sidebar-accent-foreground:oklch(20.5% 0 0);--pop-sidebar-border:oklch(92.2% 0 0);--pop-sidebar-ring:oklch(70.8% 0 0);font-family:Inter,sans-serif;font-size:16px}@media (prefers-color-scheme:dark){:host{--pop-background:oklch(15% .03 255.43);--pop-foreground:oklch(66% .006 255.43);--pop-card:oklch(20.5% 0 0);--pop-card-foreground:oklch(98.5% 0 0);--pop-popover:oklch(15% .03 255.43);--pop-popover-foreground:oklch(66% .006 255.43);--pop-primary:oklch(92.2% 0 0);--pop-primary-foreground:oklch(20.5% 0 0);--pop-secondary:oklch(26.9% 0 0);--pop-secondary-foreground:oklch(98.5% 0 0);--pop-muted:oklch(26.9% 0 0);--pop-muted-foreground:oklch(66% .006 255.43);--pop-accent:oklch(26.9% 0 0);--pop-accent-foreground:oklch(98.5% 0 0);--pop-destructive:var(--color-error-400);--pop-border:oklch(100% 0 0/.1);--pop-input:oklch(100% 0 0/.15);--pop-ring:oklch(62.3% .214 259.815);--pop-chart-1:oklch(48.8% .243 264.376);--pop-chart-2:oklch(69.6% .17 162.48);--pop-chart-3:oklch(76.9% .188 70.08);--pop-chart-4:oklch(62.7% .265 303.9);--pop-chart-5:oklch(64.5% .246 16.439);--pop-sidebar:oklch(20.5% 0 0);--pop-sidebar-foreground:oklch(98.5% 0 0);--pop-sidebar-primary:oklch(48.8% .243 264.376);--pop-sidebar-primary-foreground:oklch(98.5% 0 0);--pop-sidebar-accent:oklch(26.9% 0 0);--pop-sidebar-accent-foreground:oklch(98.5% 0 0);--pop-sidebar-border:oklch(100% 0 0/.1);--pop-sidebar-ring:oklch(55.6% 0 0)}}:host(.dark){--pop-background:oklch(15% .03 255.43);--pop-foreground:oklch(66% .006 255.43);--pop-card:oklch(20.5% 0 0);--pop-card-foreground:oklch(98.5% 0 0);--pop-popover:oklch(15% .03 255.43);--pop-popover-foreground:oklch(66% .006 255.43);--pop-primary:oklch(92.2% 0 0);--pop-primary-foreground:oklch(20.5% 0 0);--pop-secondary:oklch(26.9% 0 0);--pop-secondary-foreground:oklch(98.5% 0 0);--pop-muted:oklch(26.9% 0 0);--pop-muted-foreground:oklch(66% .006 255.43);--pop-accent:oklch(26.9% 0 0);--pop-accent-foreground:oklch(98.5% 0 0);--pop-destructive:var(--color-error-400);--pop-border:oklch(100% 0 0/.1);--pop-input:oklch(100% 0 0/.15);--pop-ring:oklch(62.3% .214 259.815);--pop-chart-1:oklch(48.8% .243 264.376);--pop-chart-2:oklch(69.6% .17 162.48);--pop-chart-3:oklch(76.9% .188 70.08);--pop-chart-4:oklch(62.7% .265 303.9);--pop-chart-5:oklch(64.5% .246 16.439);--pop-sidebar:oklch(20.5% 0 0);--pop-sidebar-foreground:oklch(98.5% 0 0);--pop-sidebar-primary:oklch(48.8% .243 264.376);--pop-sidebar-primary-foreground:oklch(98.5% 0 0);--pop-sidebar-accent:oklch(26.9% 0 0);--pop-sidebar-accent-foreground:oklch(98.5% 0 0);--pop-sidebar-border:oklch(100% 0 0/.1);--pop-sidebar-ring:oklch(55.6% 0 0)}*,:before,:after{box-sizing:inherit}html,body{margin:0;padding:0}svg{display:block}p{margin:0;padding:0}button{cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin:0;padding:0;display:flex}}", me = "@layer components{.btn{text-align:center;cursor:pointer;border:0;border-radius:4px;justify-content:center;align-items:center;gap:.625rem;height:auto;padding:.625rem 1.25rem;transition:background-color .2s,color .2s;display:flex}.btn-link{border-radius:var(--pop-radius-xs,4px);cursor:pointer;background-color:#0000;border-style:solid;border-color:#0000;justify-content:center;align-items:center;gap:2px;font-weight:500;text-decoration:none;transition:background-color .2s,border-color .2s,color .2s;display:inline-flex}.btn-link--size-sm{letter-spacing:-.08px;border-width:1px 2px;font-size:13px;line-height:18px}.btn-link--size-md{letter-spacing:0;border-width:1px 3px;font-size:14px;line-height:20px}.btn-link--size-lg{letter-spacing:0;border-width:1px 4px;font-size:16px;line-height:24px}.btn-link--theme-default{color:color-mix(in srgb, var(--pop-foreground) 50%, transparent)}.btn-link--theme-default.btn-link--primary{color:var(--pop-foreground)}.btn-link--theme-white{color:#fff}.btn-link--theme-black{color:#000}.btn-link--theme-default:hover,.btn-link--theme-black:hover{background-color:color-mix(in srgb, var(--pop-foreground) 10%, transparent);border-color:color-mix(in srgb, var(--pop-foreground) 10%, transparent)}.btn-link--theme-default:not(.btn-link--primary):hover{color:var(--pop-foreground)}.btn-link--theme-white:hover{background-color:#ffffff29;border-color:#ffffff29}.btn-link:active{background-color:#0000;border-color:#0000}.btn-link--theme-default:not(.btn-link--primary):active{color:color-mix(in srgb, var(--pop-foreground) 50%, transparent)}.btn-link:focus-visible{background-color:var(--pop-ring,#155eef);border-color:var(--pop-ring,#155eef);outline:none;color:#fff!important}.btn-link:disabled,.btn-link.is-disabled{cursor:not-allowed;pointer-events:none;color:color-mix(in srgb, var(--pop-foreground) 35%, transparent)!important;background-color:#0000!important;border-color:#0000!important}.btn:focus-visible{outline-offset:2px;outline:2px solid}}", he = "@layer components{.mask{-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.mask-squircle{-webkit-mask-image:url(\"data:image/svg+xml,%3csvg width='160' height='160' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M 0 80 C 0 14.12 14.12 0 80 0 C 145.88 0 160 14.12 160 80 C 160 145.88 145.88 160 80 160 C 14.12 160 0 145.88 0 80 Z'/%3e%3c/svg%3e\");mask-image:url(\"data:image/svg+xml,%3csvg width='160' height='160' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M 0 80 C 0 14.12 14.12 0 80 0 C 145.88 0 160 14.12 160 80 C 160 145.88 145.88 160 80 160 C 14.12 160 0 145.88 0 80 Z'/%3e%3c/svg%3e\")}}", O = !1, k = /* @__PURE__ */ new Set(), A = null, j = null;
308
- function M() {
309
- if (typeof window > "u" || typeof document > "u") return !1;
310
- let e = document.documentElement.classList.contains("dark") || document.body.classList.contains("dark"), t = document.documentElement.classList.contains("light") || document.body.classList.contains("light");
311
- return e ? !0 : t ? !1 : (j ||= window.matchMedia("(prefers-color-scheme: dark)"), j.matches);
312
- }
313
- function N() {
314
- let e = M();
315
- e !== O && (O = e, k.forEach((e) => {
316
- let t = O || !!e.closest(".dark");
317
- e.classList.toggle("dark", t);
318
- }));
319
- }
320
- var P = () => {
321
- N();
322
- };
323
- function ge(e) {
324
- if (typeof window > "u" || typeof document > "u") return;
325
- k.size === 0 && (O = M(), A = new MutationObserver(() => {
326
- N();
327
- }), A.observe(document.documentElement, {
328
- attributes: !0,
329
- attributeFilter: ["class"]
330
- }), A.observe(document.body, {
331
- attributes: !0,
332
- attributeFilter: ["class"]
333
- }), j = window.matchMedia("(prefers-color-scheme: dark)"), j.addEventListener("change", P)), k.add(e);
334
- let t = O || !!e.closest(".dark");
335
- e.classList.toggle("dark", t);
336
- }
337
- function _e(e) {
338
- k.delete(e), k.size === 0 && (A &&= (A.disconnect(), null), j &&= (j.removeEventListener("change", P), null));
339
- }
340
- //#endregion
341
- //#region src/components/base-element.ts
342
- function F(e) {
343
- let t = new CSSStyleSheet();
344
- return t.replaceSync(e), t;
345
- }
346
- var ve = F(pe), ye = F(me), be = F(he), I = class extends HTMLElement {
347
- get styleSheets() {
348
- return [];
349
- }
350
- constructor() {
351
- super(), this.baseStyleSheets = [
352
- ve,
353
- ye,
354
- be
355
- ], this._hasRendered = !1, this._disposables = [], this.events = {}, this.attachShadow({ mode: "open" }), this.shadowRoot && (this.shadowRoot.adoptedStyleSheets = this.styles);
356
- }
357
- attributeChangedCallback(e, t, n) {
358
- if (t === n) return;
359
- let r = `on${e.split("-").map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join("")}Changed`;
360
- typeof this[r] == "function" && this[r](n, t);
361
- }
362
- addEffect(e) {
363
- this._disposables.push(t(e));
364
- }
365
- connectedCallback() {
366
- ge(this), r(() => {
367
- this.render(), this._bindEvents(), this.setupEffects();
368
- });
369
- }
370
- disconnectedCallback() {
371
- _e(this), this._disposables.forEach((e) => e()), this._disposables = [];
372
- }
373
- _bindEvents() {
374
- let e = this.shadowRoot;
375
- e && Object.keys(this.events).forEach((t) => {
376
- e.addEventListener(t, this);
377
- });
378
- }
379
- handleEvent(e) {
380
- let t = this.events[e.type];
381
- t && typeof this[t] == "function" && this[t](e);
382
- }
383
- emit(e, t = {}) {
384
- this.dispatchEvent(new CustomEvent(e, {
385
- bubbles: !0,
386
- composed: !0,
387
- ...t
388
- }));
389
- }
390
- get styles() {
391
- return [...this.baseStyleSheets, ...this.styleSheets];
392
- }
393
- setupEffects() {}
394
- render() {
395
- this.shadowRoot && (this.shadowRoot.innerHTML = this.getTemplate(), this._hasRendered = !0);
396
- }
397
- hideElement(e, t, n = !0) {
398
- if (!this.shadowRoot || !this._hasRendered) return;
399
- let r = this.shadowRoot.querySelector(e);
400
- if (!r) {
401
- console.warn(`Element not found for selector: ${e}`);
402
- return;
403
- }
404
- n ? r.classList.toggle("hidden", t) : r.classList.toggle("invisible", t);
405
- }
406
- setText(e, t) {
407
- let n = this.shadowRoot?.querySelector(e);
408
- n && n.textContent !== String(t) && (n.textContent = String(t));
409
- }
410
- setAttr(e, t, n) {
411
- let r = this.shadowRoot?.querySelector(e);
412
- r && (n === null ? r.removeAttribute(t) : r.getAttribute(t) !== n && r.setAttribute(t, n));
413
- }
414
- toggleClass(e, t, n) {
415
- let r = this.shadowRoot?.querySelector(e);
416
- r && r.classList.toggle(t, n);
417
- }
418
- getElement(e) {
419
- return this.shadowRoot?.querySelector(e) ?? null;
420
- }
421
- };
422
- //#endregion
423
- //#region \0@oxc-project+runtime@0.133.0/helpers/esm/decorate.js
424
- function L(e, t, n, r) {
425
- var i = arguments.length, a = i < 3 ? t : r === null ? r = Object.getOwnPropertyDescriptor(t, n) : r, o;
426
- if (typeof Reflect == "object" && typeof Reflect.decorate == "function") a = Reflect.decorate(e, t, n, r);
427
- else for (var s = e.length - 1; s >= 0; s--) (o = e[s]) && (a = (i < 3 ? o(a) : i > 3 ? o(t, n, a) : o(t, n)) || a);
428
- return i > 3 && a && Object.defineProperty(t, n, a), a;
429
- }
430
- //#endregion
431
- //#region src/components/pop-auth-panel.ts
432
- var xe = F("\n :host {\n display: block;\n position: relative;\n\n --pop-auth-border: var(--pop-border, rgba(0, 0, 32, 0.04));\n --pop-auth-watermark: rgba(0, 0, 32, 0.4);\n --pop-auth-btn: #000000;\n --pop-auth-logo: rgba(0, 0, 32, 0.35);\n --pop-auth-error: #dc2626;\n }\n\n @media (prefers-color-scheme: dark) {\n :host {\n --pop-auth-border: var(--pop-border, rgba(255, 255, 255, 0.1));\n --pop-auth-watermark: rgba(255, 255, 255, 0.4);\n --pop-auth-btn: #ffffff;\n --pop-auth-logo: rgba(255, 255, 255, 0.35);\n --pop-auth-error: var(--pop-destructive, #f87171);\n }\n }\n\n :host(.dark) {\n --pop-auth-border: var(--pop-border, rgba(255, 255, 255, 0.1));\n --pop-auth-watermark: rgba(255, 255, 255, 0.4);\n --pop-auth-btn: #ffffff;\n --pop-auth-logo: rgba(255, 255, 255, 0.35);\n --pop-auth-error: var(--pop-destructive, #f87171);\n }\n\n .panel {\n position: relative;\n border-top: 1px solid var(--pop-auth-border);\n }\n\n .watermark {\n position: absolute;\n top: -16px;\n left: 8px;\n font-family: Inter, sans-serif;\n font-size: 8px;\n font-weight: 700;\n letter-spacing: 1px;\n color: var(--pop-auth-watermark);\n text-transform: uppercase;\n backdrop-filter: blur(4px);\n border-radius: 9999px;\n padding: 2px 6px;\n pointer-events: none;\n }\n\n .actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px;\n }\n\n .join-btn {\n font-family: Inter, sans-serif;\n font-size: 13px;\n font-weight: 600;\n color: var(--pop-auth-btn);\n background: none;\n border: none;\n cursor: pointer;\n padding: 0;\n letter-spacing: -0.08px;\n line-height: 18px;\n }\n\n .join-btn:disabled {\n opacity: 0.6;\n cursor: default;\n }\n\n .logo {\n font-family: Inter, sans-serif;\n font-size: 9px;\n font-weight: 700;\n letter-spacing: 1.5px;\n color: var(--pop-auth-logo);\n text-transform: uppercase;\n }\n\n .error {\n padding: 0 16px 12px;\n font-family: Inter, sans-serif;\n font-size: 12px;\n line-height: 16px;\n color: var(--pop-auth-error);\n text-align: center;\n }\n"), R = class extends I {
433
- constructor(...e) {
434
- super(...e), this.events = { click: "onClick" };
435
- }
436
- get styleSheets() {
437
- return [xe];
438
- }
439
- onClick(e) {
440
- e.target.closest(".join-btn") && this.handleJoin();
441
- }
442
- setupEffects() {
443
- this.addEffect(() => {
444
- let e = v.value, t = _.value, n = this.getElement(".join-btn");
445
- n && (n.disabled = e, n.textContent = e ? "Signing in…" : "Join the Conversation");
446
- let r = this.getElement(".error");
447
- r && (t ? (r.hidden = !1, r.textContent = t) : (r.hidden = !0, r.textContent = ""));
448
- });
449
- }
450
- async handleJoin() {
451
- se(), await x(this.gridStore.apiUrl, this.gridStore.publicKey);
452
- }
453
- getTemplate() {
454
- return "\n <div class=\"panel\">\n <div class=\"watermark\">Popgrids</div>\n <div class=\"actions\">\n <button class=\"join-btn\" type=\"button\">Join the Conversation</button>\n <span class=\"logo\">POPGRIDS</span>\n </div>\n <div class=\"error\" hidden></div>\n </div>\n ";
455
- }
456
- };
457
- L([C(D)], R.prototype, "gridStore", void 0), customElements.get("pop-auth-panel") || customElements.define("pop-auth-panel", R);
458
- //#endregion
459
- //#region src/assets/popgrids-letter-p.png?inline
460
- var Se = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD8AAABMCAYAAADa6W+wAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAUuSURBVHgB5ZyBceIwEEX3bq4AOsAdQAdxKggl+Co4rgKcCkgqgFRAUgGkAqACOxVAKvDpg+VRHEmWQSubuTezg8Ega7UrebWS+UG8jIXEQoZCovI9lcd1ciHHUnZCPsrXXflZ7xkISYSshByEFJ5kLWRO54bsHRGdK+dTYZNkQhbUg4aI6FyRoiNBQyQUGLj3jMJYuleNMC4v1gel67Ig/WCq5Qe144+QlM6Wb2QwGNB4PD7JaDQ6veIzKZLj8XiSPM9Pr/v9nna73UnwWUtyIb+FbMgjM3K0QBzHxXq9Lg6HQ3Et2+22WCwWpzJdr1/KjDzRqLiwZDGbzbwobCLLslNDRFEUrAEmTReBVVCxkLRohIsbICLLiA5roxJdAm9zaIAJXUBmKhCtHtraJjAuNHjBgVrcBcDsFhSXoD4NDbB2VTyyFNI7xSUODTB1UX5hKmA+nxd9Bl0AYxGZ3X9wkdWTJCluARjIYv2ULrG6T3eHhabT6SkY4sASFB1aWx23FJ+IULcqm6MBUKbF+rFO+ZQCje6qa6J8jsjQYv2FTvmMAvb1yWRSXePp6anwzWq1cnb9MQXo6yqwthyZ0Q04y9e5/k9F+VjnCpiGCrckDjCtFV51OpZTWN/lo/4Gxqryd7pvCNckTkS/rI7f39/JN5b6j1TltU10d3dHnKjl+7Y8sHhtpS+iHm3f4JyfS2RIytHvMV4ZdMt+1lvhS9OUaSdu5DUuSFk5l60hksoPWv7QK9I1kb/zjU2HRsuHIFQj17FanusWV4fD4i5I5Ye6k8PhkELAqbxlHDn2os9L5Tm6mUX5vBfKy/s7x/U+Pz9Np7q3/GazqY7VaI+j/Br7zpV/e3urjjmiSUvUWJ3QRkHcqAlHzL58g+iUzAmNLxOboGAgur+/rwYkjgnU6+ur6VROXVpezbLA6hw5A9dMTnDlZRoLinPk8CwTmm85vE76PCdIvRn0ympdQL8YGWI6y0GD1atVGzngaePLrmLua8FAaqEaBTsb7bl4fHy0hbTPdB7pv7AmjYtwraZw0eDu6OuRqrTV7T8+PuhWkHGDhUeqWV0qr43+b6XPI4RVAyYNGyHL+odS+Vz3i1tQ/vn5uUlxnPitO/FL+cL3XzEkFAFmWsjRY28eZnKXTKBQBgY3y6xN8pcM+km0O66wlhZiUMJ1lstlY1yB8y335KU2peUOTKRQtvWTyOGJypJv4FGwmlD42zl4Aq6rZnQhFyxnYYBLXb4YEemXpjlx2ENziSBaTaglncT3nhtgTS23nEkyXYEhdl417KJwtfaUrkCrPPbOhEDdqNBS6ZQcd4HbWOkugN0NIWhhfRhpQR4eM/mlHGujPEvq1ysNOXu4tHzaKidPqLO6XPcFrkCnDgIdy/IYUryYiubkEVV5bSwbSnlgW04mBhqVDxnfh16tVZXXhk8hLW9bVCQGemV5y7VyCkAnUR5APEHmezkL9RxeZ4Oey5qab5yUVxcTuXh5eTGd2lMgnkjjepg/c9JmdYWT2FQJjo3BEsusLqPAbHUV4VpMTNPUZvUFBSYxVMT7vvsGxWH1iDpgTYbbDjzg2i6AXBweMSH77C2hjsAUy/psPLwASce2OD4GuqIA2B4hxzRyrrzHbfBb8I2ZGJKODw8PVeJRxujysXDcw/FYOBKWDhFjLuSeAkV1NlJqn125RjLqqJ+bSOk/VVwSEe9fRSzJQx6Om4T8NgLKiunGSMh8O3QR/Damjmn7hyF14KpxKSM6d49IOa/7u6dX6snfPf0DiVL6IWhCmZ4AAAAASUVORK5CYII=", z = /* @__PURE__ */ "#DDD0BE.#E9DCBB.#E9DCBB.#C7D1B0.#C6D0CB.#E9DCBB.#C7D1B0.#E9DCBB.#DFC2C0.#CFD4C6.#D7E3E8.#CFD4C6.#D6B3B3.#E9DCBB.#CFCBDC.#BFD6D7.#E3D2C6.#D1E2E7.#D6B3B3.#BFD6D7.#E9DCBB.#C7D1B0.#DFC2C0.#D1E2E7.#CFD4C6.#E9DCBB.#D7E3E8.#CFD4C6.#C6D0CB.#E9DCBB.#C7D1B0.#E9DCBB.#CFCBDC.#E3D2C6.#E9DCBB".split("."), Ce = (e) => typeof e == "number" ? z[e % z.length] ?? "#e5e7eb" : z[Math.floor(Math.random() * z.length)];
461
- function we(e) {
462
- let t = new TextEncoder().encode(e), n = 2166136261;
463
- for (let e = 0; e < t.length; e++) {
464
- let r = t[e] ?? 0;
465
- n ^= r, n = Math.imul(n, 16777619);
466
- }
467
- return n >>> 0;
468
- }
469
- function Te(e) {
470
- return z[we(e) % z.length] ?? "#e5e7eb";
471
- }
472
- //#endregion
473
- //#region src/components/pop-comment-avatar.ts
474
- var Ee = F("\n :host {\n display: block;\n\n --comment-avatar-border-size: 1px;\n --comment-avatar-border-color: var(--color-background, #fff);\n --comment-avatar-size: 32px;\n }\n\n .comment-avatar {\n align-items: center;\n display: flex;\n flex-shrink: 0;\n isolation: isolate;\n justify-content: center;\n position: relative;\n width: calc(var(--comment-avatar-size) + calc(var(--comment-avatar-border-size) * 2));\n height: calc(var(--comment-avatar-size) + calc(var(--comment-avatar-border-size) * 2));\n }\n\n .comment-avatar--size-xs {\n --comment-avatar-size: 32px;\n }\n\n .comment-avatar--size-sm {\n --comment-avatar-size: 56px;\n }\n\n .comment-avatar--size-md {\n --comment-avatar-size: 80px;\n }\n\n .comment-avatar--size-lg {\n --comment-avatar-size: 120px;\n }\n\n .comment-avatar--size-xl {\n --comment-avatar-size: 140px;\n }\n\n .comment-avatar__background {\n background-color: var(--comment-avatar-border-color);\n position: absolute;\n top: 0;\n left: 0;\n z-index: 10;\n width: 100%;\n height: 100%;\n }\n\n /**\n * Content\n */\n\n .comment-avatar__content {\n align-items: center;\n background-color: var(--color-surface-bg-default);\n display: flex;\n justify-content: center;\n overflow: hidden;\n position: relative;\n height: var(--comment-avatar-size);\n width: var(--comment-avatar-size);\n z-index: 20;\n\n /* Initials styling */\n font-family: Inter, sans-serif;\n font-weight: 600;\n color: #374151;\n font-size: calc(var(--comment-avatar-size) * 0.35);\n line-height: 1;\n }\n\n .comment-avatar__content::slotted(img) {\n -webkit-user-drag: none;\n align-self: stretch;\n flex: 1 0 0;\n height: var(--comment-avatar-size);\n object-fit: cover;\n pointer-events: none;\n position: absolute;\n user-select: none;\n width: var(--comment-avatar-size);\n }\n\n .comment-avatar__deleted-mark {\n -webkit-user-drag: none;\n bottom: -3px;\n height: auto;\n left: 0;\n object-fit: cover;\n pointer-events: none;\n position: absolute;\n user-select: none;\n width: 100%;\n transform: scale(0.57);\n }\n"), De = class extends I {
475
- constructor() {
476
- super(), this._backgroundColor = Ce() ?? "#e5e7eb";
477
- }
478
- static get observedAttributes() {
479
- return [
480
- "size",
481
- "data-color-key",
482
- "deleted"
483
- ];
484
- }
485
- onSizeChanged() {
486
- this.render();
487
- }
488
- onDataColorKeyChanged() {
489
- this.render();
490
- }
491
- onDeletedChanged() {
492
- this.render();
493
- }
494
- get styleSheets() {
495
- return [Ee];
496
- }
497
- get size() {
498
- return this.getAttribute("size") || "md";
499
- }
500
- set size(e) {
501
- this.setAttribute("size", e);
502
- }
503
- get deleted() {
504
- return this.hasAttribute("deleted");
505
- }
506
- set deleted(e) {
507
- e ? this.setAttribute("deleted", "") : this.removeAttribute("deleted");
508
- }
509
- getTemplate() {
510
- let e = this.size, t = this.deleted, n = this.getAttribute("data-color-key"), r = t ? "var(--pop-muted-foreground, #e5e7eb)" : n ? Te(n) : this._backgroundColor;
511
- return `
512
- <div class="comment-avatar comment-avatar--size-${e}" part="base">
513
- <div class="comment-avatar__background mask mask-squircle" part="background"></div>
514
- ${t ? `<div
515
- class="comment-avatar__content mask mask-squircle"
516
- part="content"
517
- style="background-color: ${r}; opacity: 0.15"
518
- ><img class="comment-avatar__deleted-mark" src="${Se}" alt="Deleted user" /></div>` : `<slot
519
- class="comment-avatar__content mask mask-squircle"
520
- part="content"
521
- style="background-color: ${r};"
522
- ></slot>`}
523
- </div>
524
- `;
525
- }
526
- };
527
- customElements.get("pop-comment-avatar") || customElements.define("pop-comment-avatar", De);
528
- //#endregion
529
- //#region src/helpers/author.ts
530
- function B(e) {
531
- return e ? e.split(" ").map((e) => e[0] ?? "").join("").toUpperCase().slice(0, 2) : "?";
532
- }
533
- //#endregion
534
- //#region src/components/pop-comment-bar.ts
535
- var Oe = F("\n :host {\n background: var(--pop-background);\n border-top: 1px solid var(--pop-bar-input-bg);\n display: block;\n padding: 6px;\n position: relative;\n\n --pop-bar-avatar-bg: #e5e7eb;\n --pop-bar-avatar-color: #374151;\n --pop-bar-avatar-border: #ffffff;\n --pop-bar-input-bg: rgba(0, 0, 32, 0.04);\n --pop-bar-send-hover: rgba(0, 0, 32, 0.06);\n --pop-bar-send-color: #000000;\n --pop-bar-watermark: rgba(0, 0, 32, 0.1);\n }\n\n @media (prefers-color-scheme: dark) {\n :host {\n --pop-bar-avatar-bg: #1f2937;\n --pop-bar-avatar-color: #d1d5db;\n --pop-bar-avatar-border: var(--pop-popover, #151d2a);\n --pop-bar-input-bg: rgba(255, 255, 255, 0.05);\n --pop-bar-send-hover: rgba(255, 255, 255, 0.08);\n --pop-bar-send-color: #ffffff;\n --pop-bar-watermark: rgba(255, 255, 255, 0.1);\n }\n }\n\n :host(.dark) {\n --pop-bar-avatar-bg: #1f2937;\n --pop-bar-avatar-color: #d1d5db;\n --pop-bar-avatar-border: var(--pop-popover, #151d2a);\n --pop-bar-input-bg: rgba(255, 255, 255, 0.05);\n --pop-bar-send-hover: rgba(255, 255, 255, 0.08);\n --pop-bar-send-color: #ffffff;\n --pop-bar-watermark: rgba(255, 255, 255, 0.1);\n }\n\n .bar {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .bar__user {\n display: flex;\n align-items: center;\n align-self: flex-start;\n flex-shrink: 0;\n padding-top: 2px;\n }\n\n .bar__avatar {\n flex-shrink: 0;\n --comment-avatar-border-size: 0px;\n }\n\n .bar__avatar--reply {\n margin-right: -4px;\n z-index: 1;\n }\n\n .bar__avatar--user {\n z-index: 2;\n }\n\n .bar__user.has-reply .bar__avatar--user {\n --comment-avatar-border-size: 2px;\n --comment-avatar-border-color: var(--pop-bar-avatar-border);\n }\n\n .bar__input-wrap {\n flex: 1;\n min-width: 0;\n background: var(--pop-bar-input-bg);\n border-radius: 18px;\n overflow: hidden;\n display: flex;\n align-items: flex-end;\n padding: 4px 8px 4px 12px;\n max-height: 280px;\n }\n\n .bar__send {\n align-items: center;\n align-self: flex-end;\n background: none;\n border: none;\n cursor: pointer;\n display: flex;\n justify-content: center;\n padding-bottom: 2px;\n }\n\n .logo-watermark {\n position: absolute;\n top: -16px;\n left: 8px;\n font-family: Inter, sans-serif;\n font-size: 8px;\n font-weight: 700;\n letter-spacing: 1px;\n color: var(--pop-bar-watermark);\n text-transform: uppercase;\n border-radius: 9999px;\n padding: 2px 6px;\n pointer-events: none;\n user-select: none;\n }\n"), ke = "<svg width=\"64\" height=\"11\" viewBox=\"0 0 64 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M3.91111 0C0.892839 0 0 2.11357 0 4.77714C0 5.76321 0.0987654 6.73357 0.213333 7.70786C0.25679 8.08893 0.240988 8.50929 0.312099 8.89036C0.497778 9.89214 1.44593 10.3557 2.36642 10.3557C3.62667 10.3557 4.4642 9.56607 4.4642 8.30107C4.4642 7.57036 4.22321 7.09107 3.5279 6.80821C3.48444 6.7925 3.44099 6.78071 3.44099 6.72179C3.44099 6.62357 3.59901 6.55286 3.69778 6.55286C4.03753 6.55286 4.57481 6.89071 5.04494 6.89071C6.88593 6.89071 7.90519 5.13071 7.90519 3.48071C7.90519 1.08429 6.13136 0 3.91111 0ZM3.89531 5.18179C3.78074 5.18179 3.68198 5.08357 3.68198 4.96964C3.68198 4.81643 3.89531 4.7025 3.96642 4.57679C4.12049 4.29393 4.16395 3.81464 4.16395 3.4925C4.16395 3.11143 4.06519 2.40821 3.8242 2.12536C3.75309 2.04286 3.65432 1.99964 3.65432 1.88571C3.65432 1.77179 3.76889 1.67357 3.87951 1.67357C4.36148 1.67357 4.60247 3.08393 4.60247 3.44929C4.60247 3.84214 4.47605 5.18179 3.89531 5.18179Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n<path d=\"M12.7368 0.239637C9.73433 0.239637 7.93285 2.35321 7.93285 5.25249C7.93285 8.15178 9.73038 10.2654 12.7368 10.2654C15.7432 10.2654 17.5249 8.12428 17.5249 5.25249C17.5249 2.38071 15.7116 0.239637 12.7368 0.239637ZM12.8672 8.83142C12.8198 8.89035 12.7249 9.00035 12.6104 9.00035C12.4958 9.00035 12.3852 8.90214 12.3852 8.78821C12.3852 8.74499 12.7526 8.19499 12.8119 8.02607C13.037 7.36214 13.0805 6.64321 13.0805 5.93999C13.0805 4.99714 12.9106 3.78321 12.3299 3.00928C12.2153 2.86785 11.8637 2.60071 11.8637 2.44749C11.8637 2.33357 11.9625 2.23535 12.077 2.23535C12.1758 2.23535 12.2746 2.32178 12.3457 2.37678C13.2504 3.12321 13.523 4.82821 13.523 5.93999C13.523 6.81214 13.4874 8.08499 12.8711 8.82749L12.8672 8.83142Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n<path d=\"M21.6533 0C18.6351 0 17.7422 2.11357 17.7422 4.77714C17.7422 5.76321 17.841 6.73357 17.9555 7.70786C17.999 8.08893 17.9832 8.50929 18.0543 8.89036C18.24 9.89214 19.1881 10.3557 20.1086 10.3557C21.3689 10.3557 22.2064 9.56607 22.2064 8.30107C22.2064 7.57036 21.9654 7.09107 21.2701 6.80821C21.2267 6.7925 21.1832 6.78071 21.1832 6.72179C21.1832 6.62357 21.3412 6.55286 21.44 6.55286C21.7797 6.55286 22.317 6.89071 22.7871 6.89071C24.6281 6.89071 25.6474 5.13071 25.6474 3.48071C25.6474 1.08429 23.8775 0 21.6533 0ZM21.6415 5.18179C21.5269 5.18179 21.4281 5.08357 21.4281 4.96964C21.4281 4.81643 21.6415 4.7025 21.7126 4.57679C21.8667 4.29393 21.9101 3.81464 21.9101 3.4925C21.9101 3.11143 21.8113 2.40821 21.5704 2.12536C21.4992 2.04286 21.4005 1.99964 21.4005 1.88571C21.4005 1.77179 21.5151 1.67357 21.6257 1.67357C22.1076 1.67357 22.3486 3.08393 22.3486 3.44929C22.3486 3.84214 22.2222 5.18179 21.6415 5.18179Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n<path d=\"M31.9012 4.16822C30.882 4.16822 29.4637 4.6318 29.4637 5.84572C29.4637 6.53715 29.9733 7.56251 30.7832 7.56251C31.2929 7.56251 31.6208 7.16965 31.7906 7.16965C31.8341 7.16965 31.8736 7.19715 31.8736 7.24037C31.8736 7.64894 31.0795 7.83358 30.7674 7.83358C29.677 7.83358 29.0963 6.90251 29.0963 5.91644C29.0963 4.70644 30.242 3.77537 31.4035 3.77537C31.7432 3.77537 32.0988 3.87358 32.4385 3.87358C33.4459 3.87358 34.165 2.97394 34.165 2.01537C34.165 0.424295 32.2687 0.0589382 31.0045 0.0589382C27.6464 0.0589382 25.6909 2.22751 25.6909 5.52358C25.6909 8.56822 27.279 10.5089 30.4237 10.5089C32.4622 10.5089 34.6864 9.6368 34.6864 7.26787C34.6864 5.6493 33.6237 4.16822 31.8973 4.16822H31.9012Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n<path d=\"M41.2681 6.56464C41.0113 6.56464 40.802 6.66286 40.5886 6.66286C40.5452 6.66286 40.5333 6.61964 40.5333 6.59214C40.5333 6.49393 40.5768 6.45071 40.6479 6.42321C40.8889 6.34071 41.1457 6.28179 41.3827 6.16786C42.4612 5.66107 43.0973 4.7575 43.0973 3.56321C43.0973 1.40643 41.2405 0.0982143 39.202 0.0982143C38.4632 0.0982143 37.7442 0.310357 37.12 0.648214C35.4212 1.56357 35.0933 2.87571 34.9946 4.66321C34.9511 5.36643 34.9511 6.07357 34.9511 6.77679V8.48179C34.9511 9.55036 35.6583 10.4107 36.7763 10.4107C37.5822 10.4107 38.3052 9.83321 38.4909 9.07107C38.5896 8.61929 38.5343 8.085 38.5343 7.64893C38.5343 7.60571 38.5501 7.59393 38.5896 7.59393C38.6291 7.59393 38.6765 7.62143 38.7042 7.63714C39.202 8.83536 39.8815 10.3557 41.4222 10.3557C42.4849 10.3557 43.362 9.60929 43.362 8.525C43.362 7.44071 42.3427 6.56857 41.2642 6.56857L41.2681 6.56464ZM38.961 5.18179C38.8464 5.18179 38.7476 5.08357 38.7476 4.96964C38.7476 4.81643 38.961 4.7025 39.0321 4.57679C39.1862 4.29393 39.2296 3.81464 39.2296 3.4925C39.2296 3.11143 39.1309 2.40821 38.8899 2.12536C38.8188 2.04286 38.7358 1.99964 38.7358 1.88571C38.7358 1.77179 38.8346 1.67357 38.9491 1.67357C39.4311 1.67357 39.6721 3.08393 39.6721 3.44929C39.6721 3.84214 39.5575 5.18179 38.9649 5.18179H38.961Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n<path d=\"M46.7674 0.549991C46.4277 0.326063 45.9457 0.212134 45.5348 0.212134C44.642 0.212134 43.8756 0.915349 43.7768 1.79142C43.7491 2.04678 43.761 2.28642 43.761 2.55356V4.94606L43.7175 7.46821V8.72142C43.7175 9.70749 44.5669 10.4814 45.5467 10.4814C46.2696 10.4814 47.0637 10.0296 47.3324 9.35392C47.4864 8.97285 47.5022 8.43856 47.5022 8.02999V6.92999L47.518 4.73392V2.53785C47.518 1.72071 47.5022 1.07249 46.7674 0.549991Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n<path d=\"M50.2993 0.125713C48.8533 0.125713 48.1304 0.801428 48.1304 2.25107V2.82857L48.1462 3.96786V4.54536C48.1462 4.98143 48.1462 5.39 48.1304 5.82607C48.1027 6.34857 48.0316 6.86714 48.0316 7.40536C48.0316 9.3775 49.0509 10.3361 51.0222 10.3361C54.0523 10.3361 56.1067 9.03964 56.1067 5.81429C56.1067 1.925 54.2222 0.121785 50.2993 0.121785V0.125713ZM51.6583 7.91607C51.5437 7.91607 51.4449 7.81786 51.4449 7.70393C51.4449 7.66071 51.4608 7.83352 51.4884 7.59C51.8558 6.985 51.9546 6.14036 51.9546 5.44893C51.9546 4.80071 51.8835 3.84214 51.4726 3.33536C51.4015 3.22143 51.2593 3.13893 51.2593 2.9975C51.2593 2.88357 51.358 2.78536 51.4726 2.78536C51.6859 2.78536 51.9822 3.31964 52.0691 3.50428C52.3378 4.125 52.3812 4.80071 52.3812 5.46071C52.3812 5.86928 52.1679 7.91214 51.6583 7.91214V7.91607Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n<path d=\"M62.7239 5.1268C61.9022 5.05608 60.7249 4.77322 60.0889 4.23894C60.0059 4.16822 59.8637 4.07001 59.8637 3.9443C59.8637 3.90108 59.8795 3.83037 59.9348 3.83037C60.0889 3.83037 61.0805 4.62001 61.9338 4.62001C63.0123 4.62001 64 3.78715 64 2.69108C64 0.887867 61.5941 0.157152 60.1324 0.157152C57.9635 0.157152 56.3516 1.5518 56.3516 3.76358C56.3516 4.24287 56.4227 4.90287 56.7783 5.27215C56.9482 5.4568 57.2326 5.4568 57.4578 5.4568C58.3072 5.4568 59.3857 5.72394 59.836 6.49787C59.8795 6.56858 59.919 6.68251 59.919 6.76501C59.919 6.79251 59.919 6.83572 59.8914 6.82001C59.8084 6.79251 59.7373 6.7218 59.678 6.6668C59.1802 6.18751 58.5007 5.70822 57.7817 5.70822C56.7032 5.70822 56.324 6.73751 56.324 7.63715C56.324 9.45215 57.9674 10.4539 59.6385 10.4539C61.6217 10.4539 64 9.15751 64 6.94572C64 6.12858 63.6444 5.21322 62.7239 5.13072V5.1268Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n</svg>", V = class extends I {
1308
+ }, Ze = O("\n :host {\n background: var(--pop-background);\n border-top: 1px solid var(--pop-bar-input-bg);\n display: block;\n padding: 6px;\n position: relative;\n\n --pop-bar-avatar-bg: #e5e7eb;\n --pop-bar-avatar-color: #374151;\n --pop-bar-avatar-border: #ffffff;\n --pop-bar-input-bg: rgba(0, 0, 32, 0.04);\n --pop-bar-send-hover: rgba(0, 0, 32, 0.06);\n --pop-bar-send-color: #000000;\n --pop-bar-watermark: rgba(0, 0, 32, 0.1);\n }\n\n @media (prefers-color-scheme: dark) {\n :host {\n --pop-bar-avatar-bg: #1f2937;\n --pop-bar-avatar-color: #d1d5db;\n --pop-bar-avatar-border: var(--pop-popover, #151d2a);\n --pop-bar-input-bg: rgba(255, 255, 255, 0.05);\n --pop-bar-send-hover: rgba(255, 255, 255, 0.08);\n --pop-bar-send-color: #ffffff;\n --pop-bar-watermark: rgba(255, 255, 255, 0.1);\n }\n }\n\n :host(.dark) {\n --pop-bar-avatar-bg: #1f2937;\n --pop-bar-avatar-color: #d1d5db;\n --pop-bar-avatar-border: var(--pop-popover, #151d2a);\n --pop-bar-input-bg: rgba(255, 255, 255, 0.05);\n --pop-bar-send-hover: rgba(255, 255, 255, 0.08);\n --pop-bar-send-color: #ffffff;\n --pop-bar-watermark: rgba(255, 255, 255, 0.1);\n }\n\n .bar {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .bar__user {\n display: flex;\n align-items: center;\n align-self: flex-start;\n flex-shrink: 0;\n padding-top: 2px;\n }\n\n .bar__avatar {\n flex-shrink: 0;\n --comment-avatar-border-size: 0px;\n }\n\n .bar__avatar--reply {\n margin-right: -4px;\n z-index: 1;\n }\n\n .bar__avatar--reply.hidden {\n display: none;\n }\n\n .bar__avatar--user {\n z-index: 2;\n }\n\n .bar__user.has-reply .bar__avatar--user {\n --comment-avatar-border-size: 2px;\n --comment-avatar-border-color: var(--pop-bar-avatar-border);\n }\n\n .bar__input-wrap {\n flex: 1;\n min-width: 0;\n background: var(--pop-bar-input-bg);\n border-radius: 18px;\n overflow: hidden;\n display: flex;\n align-items: flex-end;\n padding: 4px 8px 4px 12px;\n max-height: 280px;\n }\n\n .bar__send {\n align-items: center;\n align-self: flex-end;\n background: none;\n border: none;\n cursor: pointer;\n display: flex;\n justify-content: center;\n padding-bottom: 2px;\n }\n\n .logo-watermark {\n position: absolute;\n top: -16px;\n left: 8px;\n font-family: Inter, sans-serif;\n font-size: 8px;\n font-weight: 700;\n letter-spacing: 1px;\n color: var(--pop-bar-watermark);\n text-transform: uppercase;\n border-radius: 9999px;\n padding: 2px 6px;\n pointer-events: none;\n user-select: none;\n }\n"), Qe = "<svg width=\"64\" height=\"11\" viewBox=\"0 0 64 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M3.91111 0C0.892839 0 0 2.11357 0 4.77714C0 5.76321 0.0987654 6.73357 0.213333 7.70786C0.25679 8.08893 0.240988 8.50929 0.312099 8.89036C0.497778 9.89214 1.44593 10.3557 2.36642 10.3557C3.62667 10.3557 4.4642 9.56607 4.4642 8.30107C4.4642 7.57036 4.22321 7.09107 3.5279 6.80821C3.48444 6.7925 3.44099 6.78071 3.44099 6.72179C3.44099 6.62357 3.59901 6.55286 3.69778 6.55286C4.03753 6.55286 4.57481 6.89071 5.04494 6.89071C6.88593 6.89071 7.90519 5.13071 7.90519 3.48071C7.90519 1.08429 6.13136 0 3.91111 0ZM3.89531 5.18179C3.78074 5.18179 3.68198 5.08357 3.68198 4.96964C3.68198 4.81643 3.89531 4.7025 3.96642 4.57679C4.12049 4.29393 4.16395 3.81464 4.16395 3.4925C4.16395 3.11143 4.06519 2.40821 3.8242 2.12536C3.75309 2.04286 3.65432 1.99964 3.65432 1.88571C3.65432 1.77179 3.76889 1.67357 3.87951 1.67357C4.36148 1.67357 4.60247 3.08393 4.60247 3.44929C4.60247 3.84214 4.47605 5.18179 3.89531 5.18179Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n<path d=\"M12.7368 0.239637C9.73433 0.239637 7.93285 2.35321 7.93285 5.25249C7.93285 8.15178 9.73038 10.2654 12.7368 10.2654C15.7432 10.2654 17.5249 8.12428 17.5249 5.25249C17.5249 2.38071 15.7116 0.239637 12.7368 0.239637ZM12.8672 8.83142C12.8198 8.89035 12.7249 9.00035 12.6104 9.00035C12.4958 9.00035 12.3852 8.90214 12.3852 8.78821C12.3852 8.74499 12.7526 8.19499 12.8119 8.02607C13.037 7.36214 13.0805 6.64321 13.0805 5.93999C13.0805 4.99714 12.9106 3.78321 12.3299 3.00928C12.2153 2.86785 11.8637 2.60071 11.8637 2.44749C11.8637 2.33357 11.9625 2.23535 12.077 2.23535C12.1758 2.23535 12.2746 2.32178 12.3457 2.37678C13.2504 3.12321 13.523 4.82821 13.523 5.93999C13.523 6.81214 13.4874 8.08499 12.8711 8.82749L12.8672 8.83142Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n<path d=\"M21.6533 0C18.6351 0 17.7422 2.11357 17.7422 4.77714C17.7422 5.76321 17.841 6.73357 17.9555 7.70786C17.999 8.08893 17.9832 8.50929 18.0543 8.89036C18.24 9.89214 19.1881 10.3557 20.1086 10.3557C21.3689 10.3557 22.2064 9.56607 22.2064 8.30107C22.2064 7.57036 21.9654 7.09107 21.2701 6.80821C21.2267 6.7925 21.1832 6.78071 21.1832 6.72179C21.1832 6.62357 21.3412 6.55286 21.44 6.55286C21.7797 6.55286 22.317 6.89071 22.7871 6.89071C24.6281 6.89071 25.6474 5.13071 25.6474 3.48071C25.6474 1.08429 23.8775 0 21.6533 0ZM21.6415 5.18179C21.5269 5.18179 21.4281 5.08357 21.4281 4.96964C21.4281 4.81643 21.6415 4.7025 21.7126 4.57679C21.8667 4.29393 21.9101 3.81464 21.9101 3.4925C21.9101 3.11143 21.8113 2.40821 21.5704 2.12536C21.4992 2.04286 21.4005 1.99964 21.4005 1.88571C21.4005 1.77179 21.5151 1.67357 21.6257 1.67357C22.1076 1.67357 22.3486 3.08393 22.3486 3.44929C22.3486 3.84214 22.2222 5.18179 21.6415 5.18179Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n<path d=\"M31.9012 4.16822C30.882 4.16822 29.4637 4.6318 29.4637 5.84572C29.4637 6.53715 29.9733 7.56251 30.7832 7.56251C31.2929 7.56251 31.6208 7.16965 31.7906 7.16965C31.8341 7.16965 31.8736 7.19715 31.8736 7.24037C31.8736 7.64894 31.0795 7.83358 30.7674 7.83358C29.677 7.83358 29.0963 6.90251 29.0963 5.91644C29.0963 4.70644 30.242 3.77537 31.4035 3.77537C31.7432 3.77537 32.0988 3.87358 32.4385 3.87358C33.4459 3.87358 34.165 2.97394 34.165 2.01537C34.165 0.424295 32.2687 0.0589382 31.0045 0.0589382C27.6464 0.0589382 25.6909 2.22751 25.6909 5.52358C25.6909 8.56822 27.279 10.5089 30.4237 10.5089C32.4622 10.5089 34.6864 9.6368 34.6864 7.26787C34.6864 5.6493 33.6237 4.16822 31.8973 4.16822H31.9012Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n<path d=\"M41.2681 6.56464C41.0113 6.56464 40.802 6.66286 40.5886 6.66286C40.5452 6.66286 40.5333 6.61964 40.5333 6.59214C40.5333 6.49393 40.5768 6.45071 40.6479 6.42321C40.8889 6.34071 41.1457 6.28179 41.3827 6.16786C42.4612 5.66107 43.0973 4.7575 43.0973 3.56321C43.0973 1.40643 41.2405 0.0982143 39.202 0.0982143C38.4632 0.0982143 37.7442 0.310357 37.12 0.648214C35.4212 1.56357 35.0933 2.87571 34.9946 4.66321C34.9511 5.36643 34.9511 6.07357 34.9511 6.77679V8.48179C34.9511 9.55036 35.6583 10.4107 36.7763 10.4107C37.5822 10.4107 38.3052 9.83321 38.4909 9.07107C38.5896 8.61929 38.5343 8.085 38.5343 7.64893C38.5343 7.60571 38.5501 7.59393 38.5896 7.59393C38.6291 7.59393 38.6765 7.62143 38.7042 7.63714C39.202 8.83536 39.8815 10.3557 41.4222 10.3557C42.4849 10.3557 43.362 9.60929 43.362 8.525C43.362 7.44071 42.3427 6.56857 41.2642 6.56857L41.2681 6.56464ZM38.961 5.18179C38.8464 5.18179 38.7476 5.08357 38.7476 4.96964C38.7476 4.81643 38.961 4.7025 39.0321 4.57679C39.1862 4.29393 39.2296 3.81464 39.2296 3.4925C39.2296 3.11143 39.1309 2.40821 38.8899 2.12536C38.8188 2.04286 38.7358 1.99964 38.7358 1.88571C38.7358 1.77179 38.8346 1.67357 38.9491 1.67357C39.4311 1.67357 39.6721 3.08393 39.6721 3.44929C39.6721 3.84214 39.5575 5.18179 38.9649 5.18179H38.961Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n<path d=\"M46.7674 0.549991C46.4277 0.326063 45.9457 0.212134 45.5348 0.212134C44.642 0.212134 43.8756 0.915349 43.7768 1.79142C43.7491 2.04678 43.761 2.28642 43.761 2.55356V4.94606L43.7175 7.46821V8.72142C43.7175 9.70749 44.5669 10.4814 45.5467 10.4814C46.2696 10.4814 47.0637 10.0296 47.3324 9.35392C47.4864 8.97285 47.5022 8.43856 47.5022 8.02999V6.92999L47.518 4.73392V2.53785C47.518 1.72071 47.5022 1.07249 46.7674 0.549991Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n<path d=\"M50.2993 0.125713C48.8533 0.125713 48.1304 0.801428 48.1304 2.25107V2.82857L48.1462 3.96786V4.54536C48.1462 4.98143 48.1462 5.39 48.1304 5.82607C48.1027 6.34857 48.0316 6.86714 48.0316 7.40536C48.0316 9.3775 49.0509 10.3361 51.0222 10.3361C54.0523 10.3361 56.1067 9.03964 56.1067 5.81429C56.1067 1.925 54.2222 0.121785 50.2993 0.121785V0.125713ZM51.6583 7.91607C51.5437 7.91607 51.4449 7.81786 51.4449 7.70393C51.4449 7.66071 51.4608 7.83352 51.4884 7.59C51.8558 6.985 51.9546 6.14036 51.9546 5.44893C51.9546 4.80071 51.8835 3.84214 51.4726 3.33536C51.4015 3.22143 51.2593 3.13893 51.2593 2.9975C51.2593 2.88357 51.358 2.78536 51.4726 2.78536C51.6859 2.78536 51.9822 3.31964 52.0691 3.50428C52.3378 4.125 52.3812 4.80071 52.3812 5.46071C52.3812 5.86928 52.1679 7.91214 51.6583 7.91214V7.91607Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n<path d=\"M62.7239 5.1268C61.9022 5.05608 60.7249 4.77322 60.0889 4.23894C60.0059 4.16822 59.8637 4.07001 59.8637 3.9443C59.8637 3.90108 59.8795 3.83037 59.9348 3.83037C60.0889 3.83037 61.0805 4.62001 61.9338 4.62001C63.0123 4.62001 64 3.78715 64 2.69108C64 0.887867 61.5941 0.157152 60.1324 0.157152C57.9635 0.157152 56.3516 1.5518 56.3516 3.76358C56.3516 4.24287 56.4227 4.90287 56.7783 5.27215C56.9482 5.4568 57.2326 5.4568 57.4578 5.4568C58.3072 5.4568 59.3857 5.72394 59.836 6.49787C59.8795 6.56858 59.919 6.68251 59.919 6.76501C59.919 6.79251 59.919 6.83572 59.8914 6.82001C59.8084 6.79251 59.7373 6.7218 59.678 6.6668C59.1802 6.18751 58.5007 5.70822 57.7817 5.70822C56.7032 5.70822 56.324 6.73751 56.324 7.63715C56.324 9.45215 57.9674 10.4539 59.6385 10.4539C61.6217 10.4539 64 9.15751 64 6.94572C64 6.12858 63.6444 5.21322 62.7239 5.13072V5.1268Z\" fill=\"#000020\" fill-opacity=\"0.1\"/>\n</svg>", G = class extends k {
536
1309
  constructor(...e) {
537
1310
  super(...e), this.events = { click: "onClick" };
538
1311
  }
539
1312
  get styleSheets() {
540
- return [Oe];
1313
+ return [Ze];
541
1314
  }
542
1315
  onClick(e) {
543
- e.target.closest(".bar__send") && this.handleSend();
1316
+ e.target.closest(A("send")) && this.handleSend();
544
1317
  }
545
1318
  setupEffects() {
546
1319
  let e = null, t = null;
@@ -562,21 +1335,12 @@ var Oe = F("\n :host {\n background: var(--pop-background);\n border-top:
562
1335
  }
563
1336
  t = e?.id ?? null;
564
1337
  }), this.addEffect(() => {
565
- let e = g.value, t = this.getElement(".bar__user");
566
- if (!t) return;
567
- let n = this.gridStore.replyingToComment.value?.author;
568
- if (this.gridStore.editingComment.value) {
569
- t.classList.remove("has-reply");
570
- let n = e?.id ?? e?.name ?? "";
571
- t.innerHTML = e?.image ? `<pop-comment-avatar size="xs" class="bar__avatar bar__avatar--user" data-color-key="${n}"><img src="${e.image}" alt="${e.name ?? "User"}'s avatar"></pop-comment-avatar>` : `<pop-comment-avatar size="xs" class="bar__avatar bar__avatar--user" data-color-key="${n}">${B(e?.name)}</pop-comment-avatar>`;
572
- } else if (n) {
573
- t.classList.add("has-reply");
574
- let r = n.id ?? n.name ?? "", i = e?.id ?? e?.name ?? "";
575
- t.innerHTML = (n.image ? `<pop-comment-avatar size="xs" class="bar__avatar bar__avatar--reply" data-color-key="${r}"><img src="${n.image}" alt="${n.name ?? "User"}'s avatar"></pop-comment-avatar>` : `<pop-comment-avatar size="xs" class="bar__avatar bar__avatar--reply" data-color-key="${r}">${B(n.name)}</pop-comment-avatar>`) + (e?.image ? `<pop-comment-avatar size="xs" class="bar__avatar bar__avatar--user" data-color-key="${i}"><img src="${e.image}" alt="${e.name ?? "User"}'s avatar"></pop-comment-avatar>` : `<pop-comment-avatar size="xs" class="bar__avatar bar__avatar--user" data-color-key="${i}">${B(e?.name)}</pop-comment-avatar>`);
576
- } else {
577
- t.classList.remove("has-reply");
578
- let n = e?.id ?? e?.name ?? "";
579
- t.innerHTML = e?.image ? `<pop-comment-avatar size="xs" class="bar__avatar bar__avatar--user" data-color-key="${n}"><img src="${e.image}" alt="${e.name ?? "User"}'s avatar"></pop-comment-avatar>` : `<pop-comment-avatar size="xs" class="bar__avatar bar__avatar--user" data-color-key="${n}">${B(e?.name)}</pop-comment-avatar>`;
1338
+ let e = this.getElement(A("user")), t = this.getElement(A("avatar-reply"));
1339
+ if (!e || !t) return;
1340
+ let n = this.gridStore.editingComment.value ? null : this.gridStore.replyingToComment.value?.author;
1341
+ if (e.classList.toggle("has-reply", !!n), t.classList.toggle("hidden", !n), n) {
1342
+ let e = n.id ?? n.name ?? "";
1343
+ t.setAttribute("data-color-key", e), t.innerHTML = n.image ? `<img src="${n.image}" alt="${n.name ?? "User"}'s avatar">` : u(n.name);
580
1344
  }
581
1345
  });
582
1346
  }
@@ -595,16 +1359,22 @@ var Oe = F("\n :host {\n background: var(--pop-background);\n border-top:
595
1359
  }
596
1360
  getTemplate() {
597
1361
  return `
598
- <div class="logo-watermark">${ke}</div>
1362
+ <div class="logo-watermark">${Qe}</div>
599
1363
  <div class="bar">
600
- <div class="bar__user">
601
- <pop-comment-avatar size="xs" class="bar__avatar bar__avatar--user">?</pop-comment-avatar>
1364
+ <div class="bar__user" data-ref="user">
1365
+ <pop-comment-avatar
1366
+ size="xs"
1367
+ class="bar__avatar bar__avatar--reply hidden"
1368
+ data-ref="avatar-reply"
1369
+ ></pop-comment-avatar>
1370
+ <pop-account-switcher class="bar__avatar bar__avatar--user"></pop-account-switcher>
602
1371
  </div>
603
1372
  <div class="bar__input-wrap">
604
1373
  <pop-comment-input></pop-comment-input>
605
1374
  </div>
606
1375
  <pop-comment-icon
607
1376
  class="bar__send"
1377
+ data-ref="send"
608
1378
  theme="neutral"
609
1379
  variant="send"
610
1380
  aria-label="Send comment"
@@ -613,15 +1383,15 @@ var Oe = F("\n :host {\n background: var(--pop-background);\n border-top:
613
1383
  `;
614
1384
  }
615
1385
  };
616
- L([C(D)], V.prototype, "gridStore", void 0), customElements.get("pop-comment-bar") || customElements.define("pop-comment-bar", V);
1386
+ j([b(W)], G.prototype, "gridStore", void 0), j([b(_)], G.prototype, "authStore", void 0), customElements.get("pop-comment-bar") || customElements.define("pop-comment-bar", G);
617
1387
  //#endregion
618
1388
  //#region src/components/pop-comment-icon.ts
619
- var Ae = F("\n :host {\n /* Mode-level theme colors (defaults for light mode) */\n --pop-comment-color-black: #000000;\n --pop-comment-color-white: #ffffff;\n --pop-comment-color-default: #000000;\n --pop-comment-color-reversed: #ffffff;\n --pop-comment-bg-singular-resting: #121926;\n --pop-comment-bg-singular-hover: rgba(0, 0, 32, 0.08);\n --pop-comment-bg-reversed: #121926;\n --pop-comment-bg-blank-resting: #ffffff;\n\n display: flex;\n\n --pop-comment-icon-scale: 1;\n --pop-comment-icon-scale-hover: 1.1875;\n --pop-comment-icon-scale-active: 0.9375;\n --pop-comment-icon-size: 32px;\n --pop-comment-icon-color: var(--pop-foreground, #000000);\n --pop-comment-icon-color-hover: var(--pop-foreground, #000000);\n --pop-comment-icon-color-active: var(--pop-foreground, #000000);\n --pop-comment-icon-color-focused: var(--pop-foreground, #000000);\n --pop-comment-icon-background: var(\n --color-surface-buttons-singular-bg-launch-icon-hover,\n rgba(0, 0, 32, 0.08)\n );\n --pop-comment-icon-background-hover: var(\n --color-surface-buttons-singular-bg-launch-icon-hover,\n rgba(0, 0, 32, 0.08)\n );\n --pop-comment-icon-background-active: var(\n --color-surface-buttons-singular-bg-launch-icon-hover,\n rgba(0, 0, 32, 0.08)\n );\n --pop-comment-icon-background-focused: var(\n --color-surface-buttons-singular-bg-launch-icon-hover,\n rgba(0, 0, 32, 0.08)\n );\n }\n\n @media (prefers-color-scheme: dark) {\n :host {\n /* Overrides for dark mode */\n --pop-comment-color-black: #ffffff;\n --pop-comment-color-white: #000000;\n --pop-comment-color-default: #ffffff;\n --pop-comment-color-reversed: #000000;\n --pop-comment-bg-singular-resting: #ffffff;\n --pop-comment-bg-singular-hover: rgba(255, 255, 255, 0.15);\n --pop-comment-bg-reversed: #ffffff;\n --pop-comment-bg-blank-resting: #121926;\n }\n }\n\n :host(.dark) {\n /* Overrides for dark mode (.dark class on host) */\n --pop-comment-color-black: #ffffff;\n --pop-comment-color-white: #000000;\n --pop-comment-color-default: #ffffff;\n --pop-comment-color-reversed: #000000;\n --pop-comment-bg-singular-resting: #ffffff;\n --pop-comment-bg-singular-hover: rgba(255, 255, 255, 0.15);\n --pop-comment-bg-reversed: #ffffff;\n --pop-comment-bg-blank-resting: #121926;\n }\n\n .comment-icon {\n align-items: center;\n background: transparent;\n border: none;\n display: inline-flex;\n height: var(--pop-comment-icon-size);\n justify-content: center;\n padding: 0;\n position: relative;\n transform-origin: center;\n width: var(--pop-comment-icon-size);\n }\n\n .comment-icon--size-sm {\n --pop-comment-icon-size: 24px;\n }\n\n .comment-icon:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .comment-icon__focus-indicator {\n background-color: var(--pop-ring);\n display: none;\n position: absolute;\n inset: -3px;\n pointer-events: none;\n transform-origin: center;\n transform: scale(var(--pop-comment-icon-scale));\n transition: all 200ms ease-out;\n width: calc(100% + 6px);\n }\n\n .comment-icon:focus-visible .comment-icon__focus-indicator {\n display: flex;\n }\n\n .comment-icon:focus-visible {\n outline: none;\n }\n\n .comment-icon__inner {\n align-items: center;\n background: var(--pop-comment-icon-background);\n color: var(--pop-comment-icon-color);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n height: var(--pop-comment-icon-size);\n justify-content: center;\n position: absolute;\n transform-origin: center;\n transition: all 200ms ease-out;\n transform: scale(var(--pop-comment-icon-scale));\n width: var(--pop-comment-icon-size);\n }\n\n .comment-icon__icon-container {\n align-items: center;\n display: flex;\n height: 100%;\n justify-content: center;\n transition: transform ease-out 150ms;\n width: 100%;\n }\n\n .comment-icon__icon-container svg {\n width: calc(var(--pop-comment-icon-size) * 0.6875);\n height: calc(var(--pop-comment-icon-size) * 0.6875);\n }\n\n .comment-icon--variant-close.comment-icon--theme-neutral .comment-icon__icon-container svg {\n width: var(--pop-comment-icon-size);\n height: var(--pop-comment-icon-size);\n }\n\n .comment-icon__icon-image {\n display: flex;\n width: var(--pop-comment-icon-size);\n height: var(--pop-comment-icon-size);\n }\n\n .comment-icon__icon {\n display: flex;\n }\n\n .comment-icon__icon-image + .comment-icon__icon {\n display: none;\n }\n\n .comment-icon .comment-icon__inner {\n transition: transform var(--pop-ease-pop-hover) var(--pop-duration-pop-hover);\n }\n\n @media (hover: hover) and (pointer: fine) {\n .comment-icon:hover .comment-icon__inner {\n background: var(--pop-comment-icon-background-hover);\n color: var(--pop-comment-icon-color-hover);\n transform: scale(var(--pop-comment-icon-scale-hover));\n }\n\n .comment-icon:hover .comment-icon__icon-image {\n display: none;\n }\n\n .comment-icon:hover .comment-icon__icon-image + .comment-icon__icon {\n display: flex;\n }\n }\n\n .comment-icon:active .comment-icon__inner {\n background: var(--pop-comment-icon-background-active);\n color: var(--pop-comment-icon-color-active);\n transform: scale(var(--pop-comment-icon-scale-active));\n transition-duration: 200ms;\n }\n\n .comment-icon:is(:focus-visible) .comment-icon__inner {\n background: var(--pop-comment-icon-background-focused);\n color: var(--pop-comment-icon-color-focused);\n }\n\n /* Brand / Add */\n .comment-icon--theme-brand.comment-icon--variant-add {\n --pop-comment-icon-color: var(--pop-comment-color-black);\n --pop-comment-icon-color-hover: var(--pop-comment-color-black);\n --pop-comment-icon-color-active: var(--pop-comment-color-black);\n --pop-comment-icon-color-focused: var(--pop-comment-color-black);\n --pop-comment-icon-background: transparent;\n --pop-comment-icon-background-hover: var(--pop-comment-bg-singular-hover);\n --pop-comment-icon-background-active: var(--pop-comment-bg-singular-hover);\n --pop-comment-icon-background-focused: transparent;\n }\n\n /* Brand / Close */\n .comment-icon--theme-brand.comment-icon--variant-close {\n --pop-comment-icon-color: var(--pop-comment-color-white);\n --pop-comment-icon-color-hover: var(--pop-comment-color-white);\n --pop-comment-icon-color-active: var(--pop-comment-color-white);\n --pop-comment-icon-color-focused: var(--pop-comment-color-white);\n --pop-comment-icon-background: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-hover: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-active: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-focused: var(--pop-comment-bg-singular-resting);\n }\n\n /* Neutral / Add */\n .comment-icon--theme-neutral.comment-icon--variant-add {\n --pop-comment-icon-color: var(--pop-comment-color-white);\n --pop-comment-icon-color-hover: var(--pop-comment-color-white);\n --pop-comment-icon-color-active: var(--pop-comment-color-white);\n --pop-comment-icon-color-focused: var(--pop-comment-color-white);\n --pop-comment-icon-background: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-hover: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-active: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-focused: var(--pop-comment-bg-singular-resting);\n }\n\n /* Neutral / Close */\n .comment-icon--theme-neutral.comment-icon--variant-close {\n --pop-comment-icon-color: var(--pop-comment-color-white);\n --pop-comment-icon-color-hover: var(--pop-comment-color-white);\n --pop-comment-icon-color-active: var(--pop-comment-color-white);\n --pop-comment-icon-color-focused: var(--pop-comment-color-white);\n --pop-comment-icon-background: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-hover: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-active: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-focused: var(--pop-comment-bg-singular-resting);\n }\n\n /* Neutral / Send */\n .comment-icon--theme-neutral.comment-icon--variant-send {\n --pop-comment-icon-color: var(--pop-comment-color-reversed);\n --pop-comment-icon-color-hover: var(--pop-comment-color-reversed);\n --pop-comment-icon-color-active: var(--pop-comment-color-reversed);\n --pop-comment-icon-color-focused: var(--pop-comment-color-reversed);\n --pop-comment-icon-background: var(--pop-comment-bg-reversed);\n --pop-comment-icon-background-hover: var(--pop-comment-bg-reversed);\n --pop-comment-icon-background-active: var(--pop-comment-bg-reversed);\n --pop-comment-icon-background-focused: var(--pop-comment-bg-reversed);\n }\n\n /* Neutral / More */\n .comment-icon--theme-neutral.comment-icon--variant-more {\n --pop-comment-icon-color: var(--pop-comment-color-default);\n --pop-comment-icon-color-hover: var(--pop-comment-color-reversed);\n --pop-comment-icon-color-active: var(--pop-comment-color-default);\n --pop-comment-icon-color-focused: var(--pop-comment-color-default);\n --pop-comment-icon-background: var(--pop-comment-bg-blank-resting);\n --pop-comment-icon-background-hover: var(--pop-comment-bg-reversed);\n --pop-comment-icon-background-active: var(--pop-comment-bg-blank-resting);\n --pop-comment-icon-background-focused: var(--pop-comment-bg-blank-resting);\n }\n\n /* Neutral / Cancel */\n .comment-icon--theme-neutral.comment-icon--variant-cancel {\n --pop-comment-icon-color: var(--pop-comment-color-default);\n --pop-comment-icon-color-hover: var(--pop-comment-color-default);\n --pop-comment-icon-color-active: var(--pop-comment-color-reversed);\n --pop-comment-icon-color-focused: var(--pop-comment-color-default);\n --pop-comment-icon-background: var(--pop-comment-bg-blank-resting);\n --pop-comment-icon-background-hover: var(--pop-comment-bg-blank-resting);\n --pop-comment-icon-background-active: var(--pop-comment-bg-reversed);\n --pop-comment-icon-background-focused: var(--pop-comment-bg-blank-resting);\n }\n"), je = class extends I {
1389
+ var $e = O("\n :host {\n /* Mode-level theme colors (defaults for light mode) */\n --pop-comment-color-black: #000000;\n --pop-comment-color-white: #ffffff;\n --pop-comment-color-default: #000000;\n --pop-comment-color-reversed: #ffffff;\n --pop-comment-bg-singular-resting: #121926;\n --pop-comment-bg-singular-hover: rgba(0, 0, 32, 0.08);\n --pop-comment-bg-reversed: #121926;\n --pop-comment-bg-blank-resting: #ffffff;\n\n display: flex;\n\n --pop-comment-icon-scale: 1;\n --pop-comment-icon-scale-hover: 1.1875;\n --pop-comment-icon-scale-active: 0.9375;\n --pop-comment-icon-size: 32px;\n --pop-comment-icon-color: var(--pop-foreground, #000000);\n --pop-comment-icon-color-hover: var(--pop-foreground, #000000);\n --pop-comment-icon-color-active: var(--pop-foreground, #000000);\n --pop-comment-icon-color-focused: var(--pop-foreground, #000000);\n --pop-comment-icon-background: var(\n --color-surface-buttons-singular-bg-launch-icon-hover,\n rgba(0, 0, 32, 0.08)\n );\n --pop-comment-icon-background-hover: var(\n --color-surface-buttons-singular-bg-launch-icon-hover,\n rgba(0, 0, 32, 0.08)\n );\n --pop-comment-icon-background-active: var(\n --color-surface-buttons-singular-bg-launch-icon-hover,\n rgba(0, 0, 32, 0.08)\n );\n --pop-comment-icon-background-focused: var(\n --color-surface-buttons-singular-bg-launch-icon-hover,\n rgba(0, 0, 32, 0.08)\n );\n }\n\n @media (prefers-color-scheme: dark) {\n :host {\n /* Overrides for dark mode */\n --pop-comment-color-black: #ffffff;\n --pop-comment-color-white: #000000;\n --pop-comment-color-default: #ffffff;\n --pop-comment-color-reversed: #000000;\n --pop-comment-bg-singular-resting: #ffffff;\n --pop-comment-bg-singular-hover: rgba(255, 255, 255, 0.15);\n --pop-comment-bg-reversed: #ffffff;\n --pop-comment-bg-blank-resting: #121926;\n }\n }\n\n :host(.dark) {\n /* Overrides for dark mode (.dark class on host) */\n --pop-comment-color-black: #ffffff;\n --pop-comment-color-white: #000000;\n --pop-comment-color-default: #ffffff;\n --pop-comment-color-reversed: #000000;\n --pop-comment-bg-singular-resting: #ffffff;\n --pop-comment-bg-singular-hover: rgba(255, 255, 255, 0.15);\n --pop-comment-bg-reversed: #ffffff;\n --pop-comment-bg-blank-resting: #121926;\n }\n\n .comment-icon {\n align-items: center;\n background: transparent;\n border: none;\n display: inline-flex;\n height: var(--pop-comment-icon-size);\n justify-content: center;\n padding: 0;\n position: relative;\n transform-origin: center;\n width: var(--pop-comment-icon-size);\n }\n\n .comment-icon--size-sm {\n --pop-comment-icon-size: 24px;\n }\n\n .comment-icon:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .comment-icon__focus-indicator {\n background-color: var(--pop-ring);\n display: none;\n position: absolute;\n inset: -3px;\n pointer-events: none;\n transform-origin: center;\n transform: scale(var(--pop-comment-icon-scale));\n transition: all 200ms ease-out;\n width: calc(100% + 6px);\n }\n\n .comment-icon:focus-visible .comment-icon__focus-indicator {\n display: flex;\n }\n\n .comment-icon:focus-visible {\n outline: none;\n }\n\n .comment-icon__inner {\n align-items: center;\n background: var(--pop-comment-icon-background);\n color: var(--pop-comment-icon-color);\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n height: var(--pop-comment-icon-size);\n justify-content: center;\n position: absolute;\n transform-origin: center;\n transition: all 200ms ease-out;\n transform: scale(var(--pop-comment-icon-scale));\n width: var(--pop-comment-icon-size);\n }\n\n .comment-icon__icon-container {\n align-items: center;\n display: flex;\n height: 100%;\n justify-content: center;\n transition: transform ease-out 150ms;\n width: 100%;\n }\n\n .comment-icon__icon-container svg {\n width: calc(var(--pop-comment-icon-size) * 0.6875);\n height: calc(var(--pop-comment-icon-size) * 0.6875);\n }\n\n .comment-icon--variant-close.comment-icon--theme-neutral .comment-icon__icon-container svg {\n width: var(--pop-comment-icon-size);\n height: var(--pop-comment-icon-size);\n }\n\n .comment-icon__icon-image {\n display: flex;\n width: var(--pop-comment-icon-size);\n height: var(--pop-comment-icon-size);\n }\n\n .comment-icon__icon {\n display: flex;\n }\n\n .comment-icon__icon-image + .comment-icon__icon {\n display: none;\n }\n\n .comment-icon .comment-icon__inner {\n transition: transform var(--pop-ease-pop-hover) var(--pop-duration-pop-hover);\n }\n\n @media (hover: hover) and (pointer: fine) {\n .comment-icon:hover .comment-icon__inner {\n background: var(--pop-comment-icon-background-hover);\n color: var(--pop-comment-icon-color-hover);\n transform: scale(var(--pop-comment-icon-scale-hover));\n }\n\n .comment-icon:hover .comment-icon__icon-image {\n display: none;\n }\n\n .comment-icon:hover .comment-icon__icon-image + .comment-icon__icon {\n display: flex;\n }\n }\n\n .comment-icon:active .comment-icon__inner {\n background: var(--pop-comment-icon-background-active);\n color: var(--pop-comment-icon-color-active);\n transform: scale(var(--pop-comment-icon-scale-active));\n transition-duration: 200ms;\n }\n\n .comment-icon:is(:focus-visible) .comment-icon__inner {\n background: var(--pop-comment-icon-background-focused);\n color: var(--pop-comment-icon-color-focused);\n }\n\n /* Brand / Add */\n .comment-icon--theme-brand.comment-icon--variant-add {\n --pop-comment-icon-color: var(--pop-comment-color-black);\n --pop-comment-icon-color-hover: var(--pop-comment-color-black);\n --pop-comment-icon-color-active: var(--pop-comment-color-black);\n --pop-comment-icon-color-focused: var(--pop-comment-color-black);\n --pop-comment-icon-background: transparent;\n --pop-comment-icon-background-hover: var(--pop-comment-bg-singular-hover);\n --pop-comment-icon-background-active: var(--pop-comment-bg-singular-hover);\n --pop-comment-icon-background-focused: transparent;\n }\n\n /* Brand / Close */\n .comment-icon--theme-brand.comment-icon--variant-close {\n --pop-comment-icon-color: var(--pop-comment-color-white);\n --pop-comment-icon-color-hover: var(--pop-comment-color-white);\n --pop-comment-icon-color-active: var(--pop-comment-color-white);\n --pop-comment-icon-color-focused: var(--pop-comment-color-white);\n --pop-comment-icon-background: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-hover: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-active: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-focused: var(--pop-comment-bg-singular-resting);\n }\n\n /* Neutral / Add */\n .comment-icon--theme-neutral.comment-icon--variant-add {\n --pop-comment-icon-color: var(--pop-comment-color-white);\n --pop-comment-icon-color-hover: var(--pop-comment-color-white);\n --pop-comment-icon-color-active: var(--pop-comment-color-white);\n --pop-comment-icon-color-focused: var(--pop-comment-color-white);\n --pop-comment-icon-background: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-hover: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-active: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-focused: var(--pop-comment-bg-singular-resting);\n }\n\n /* Neutral / Close */\n .comment-icon--theme-neutral.comment-icon--variant-close {\n --pop-comment-icon-color: var(--pop-comment-color-white);\n --pop-comment-icon-color-hover: var(--pop-comment-color-white);\n --pop-comment-icon-color-active: var(--pop-comment-color-white);\n --pop-comment-icon-color-focused: var(--pop-comment-color-white);\n --pop-comment-icon-background: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-hover: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-active: var(--pop-comment-bg-singular-resting);\n --pop-comment-icon-background-focused: var(--pop-comment-bg-singular-resting);\n }\n\n /* Neutral / Send */\n .comment-icon--theme-neutral.comment-icon--variant-send {\n --pop-comment-icon-color: var(--pop-comment-color-reversed);\n --pop-comment-icon-color-hover: var(--pop-comment-color-reversed);\n --pop-comment-icon-color-active: var(--pop-comment-color-reversed);\n --pop-comment-icon-color-focused: var(--pop-comment-color-reversed);\n --pop-comment-icon-background: var(--pop-comment-bg-reversed);\n --pop-comment-icon-background-hover: var(--pop-comment-bg-reversed);\n --pop-comment-icon-background-active: var(--pop-comment-bg-reversed);\n --pop-comment-icon-background-focused: var(--pop-comment-bg-reversed);\n }\n\n /* Neutral / More */\n .comment-icon--theme-neutral.comment-icon--variant-more {\n --pop-comment-icon-color: var(--pop-comment-color-default);\n --pop-comment-icon-color-hover: var(--pop-comment-color-reversed);\n --pop-comment-icon-color-active: var(--pop-comment-color-default);\n --pop-comment-icon-color-focused: var(--pop-comment-color-default);\n --pop-comment-icon-background: var(--pop-comment-bg-blank-resting);\n --pop-comment-icon-background-hover: var(--pop-comment-bg-reversed);\n --pop-comment-icon-background-active: var(--pop-comment-bg-blank-resting);\n --pop-comment-icon-background-focused: var(--pop-comment-bg-blank-resting);\n }\n\n /* Neutral / Cancel */\n .comment-icon--theme-neutral.comment-icon--variant-cancel {\n --pop-comment-icon-color: var(--pop-comment-color-default);\n --pop-comment-icon-color-hover: var(--pop-comment-color-default);\n --pop-comment-icon-color-active: var(--pop-comment-color-reversed);\n --pop-comment-icon-color-focused: var(--pop-comment-color-default);\n --pop-comment-icon-background: var(--pop-comment-bg-blank-resting);\n --pop-comment-icon-background-hover: var(--pop-comment-bg-blank-resting);\n --pop-comment-icon-background-active: var(--pop-comment-bg-reversed);\n --pop-comment-icon-background-focused: var(--pop-comment-bg-blank-resting);\n }\n"), et = class extends k {
620
1390
  constructor(...e) {
621
1391
  super(...e), this.events = { click: "onClick" };
622
1392
  }
623
1393
  get styleSheets() {
624
- return [Ae];
1394
+ return [$e];
625
1395
  }
626
1396
  static get observedAttributes() {
627
1397
  return [
@@ -744,10 +1514,10 @@ var Ae = F("\n :host {\n /* Mode-level theme colors (defaults for light mode
744
1514
  `;
745
1515
  }
746
1516
  };
747
- customElements.get("pop-comment-icon") || customElements.define("pop-comment-icon", je);
1517
+ customElements.get("pop-comment-icon") || customElements.define("pop-comment-icon", et);
748
1518
  //#endregion
749
1519
  //#region src/components/pop-comment-input.ts
750
- var Me = F("\n :host {\n display: flex;\n flex: 1;\n min-width: 0;\n align-items: flex-end;\n }\n\n textarea {\n flex: 1;\n min-width: 0;\n background: none;\n border: none;\n outline: none;\n resize: none;\n font-family: Inter, sans-serif;\n font-size: 13px;\n color: black;\n line-height: 18px;\n padding: 5px 0;\n max-height: 200px;\n overflow-y: auto;\n width: 100%;\n letter-spacing: -0.08px;\n }\n\n textarea::placeholder {\n color: #697586;\n }\n"), H = class extends I {
1520
+ var tt = O("\n :host {\n display: flex;\n flex: 1;\n min-width: 0;\n align-items: flex-end;\n }\n\n textarea {\n flex: 1;\n min-width: 0;\n background: none;\n border: none;\n outline: none;\n resize: none;\n font-family: Inter, sans-serif;\n font-size: 13px;\n color: black;\n line-height: 18px;\n padding: 5px 0;\n max-height: 200px;\n overflow-y: auto;\n width: 100%;\n letter-spacing: -0.08px;\n }\n\n textarea::placeholder {\n color: #697586;\n }\n"), K = class extends k {
751
1521
  constructor(...e) {
752
1522
  super(...e), this.events = {
753
1523
  input: "onInput",
@@ -755,7 +1525,7 @@ var Me = F("\n :host {\n display: flex;\n flex: 1;\n min-width: 0;\n
755
1525
  };
756
1526
  }
757
1527
  get styleSheets() {
758
- return [Me];
1528
+ return [tt];
759
1529
  }
760
1530
  onInput(e) {
761
1531
  let t = e.target;
@@ -788,18 +1558,18 @@ var Me = F("\n :host {\n display: flex;\n flex: 1;\n min-width: 0;\n
788
1558
  return "\n <textarea rows=\"1\" placeholder=\"Comment\"></textarea>\n ";
789
1559
  }
790
1560
  };
791
- L([C(D)], H.prototype, "gridStore", void 0), customElements.get("pop-comment-input") || customElements.define("pop-comment-input", H);
1561
+ j([b(W)], K.prototype, "gridStore", void 0), customElements.get("pop-comment-input") || customElements.define("pop-comment-input", K);
792
1562
  //#endregion
793
1563
  //#region src/components/pop-comment-thread.ts
794
- var Ne = F("\n :host {\n display: block;\n\n --pop-thread-link: rgba(0, 0, 32, 0.5);\n --pop-thread-link-hover: rgba(0, 0, 32, 0.8);\n }\n\n @media (prefers-color-scheme: dark) {\n :host {\n --pop-thread-link: rgba(255, 255, 255, 0.5);\n --pop-thread-link-hover: rgba(255, 255, 255, 0.8);\n }\n }\n\n :host(.dark) {\n --pop-thread-link: rgba(255, 255, 255, 0.5);\n --pop-thread-link-hover: rgba(255, 255, 255, 0.8);\n }\n\n .thread {\n align-items: stretch;\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .thread__replies {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding-left: 24px;\n }\n\n .thread__more {\n display: flex;\n align-items: center;\n font-size: 13px;\n gap: 6px;\n padding-left: 30px;\n transition: opacity 0.15s ease;\n width: 100%;\n }\n\n .thread__more:hover {\n opacity: 1;\n }\n\n .thread__more-dot {\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background: var(--pop-muted-foreground);\n flex-shrink: 0;\n opacity: 0.1;\n }\n"), U = 2, W = class extends I {
1564
+ var nt = O("\n :host {\n display: block;\n\n --pop-thread-link: rgba(0, 0, 32, 0.5);\n --pop-thread-link-hover: rgba(0, 0, 32, 0.8);\n }\n\n @media (prefers-color-scheme: dark) {\n :host {\n --pop-thread-link: rgba(255, 255, 255, 0.5);\n --pop-thread-link-hover: rgba(255, 255, 255, 0.8);\n }\n }\n\n :host(.dark) {\n --pop-thread-link: rgba(255, 255, 255, 0.5);\n --pop-thread-link-hover: rgba(255, 255, 255, 0.8);\n }\n\n .thread {\n align-items: stretch;\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .thread__replies {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding-left: 24px;\n }\n\n .thread__more {\n display: flex;\n align-items: center;\n font-size: 13px;\n gap: 6px;\n padding-left: 30px;\n transition: opacity 0.15s ease;\n width: 100%;\n }\n\n .thread__more:hover {\n opacity: 1;\n }\n\n .thread__more-dot {\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background: var(--pop-muted-foreground);\n flex-shrink: 0;\n opacity: 0.1;\n }\n"), q = 2, J = class extends k {
795
1565
  constructor(...e) {
796
1566
  super(...e), this._showAll = !1, this.events = { click: "onClick" };
797
1567
  }
798
1568
  get styleSheets() {
799
- return [Ne];
1569
+ return [nt];
800
1570
  }
801
1571
  onClick(e) {
802
- e.target.closest(".thread__more-btn") && (this._showAll = !0, this.render());
1572
+ e.target.closest(A("more")) && (this._showAll = !0, this.render());
803
1573
  }
804
1574
  setupEffects() {
805
1575
  this.addEffect(() => {
@@ -810,11 +1580,11 @@ var Ne = F("\n :host {\n display: block;\n\n --pop-thread-link: rgba(0, 0
810
1580
  getTemplate() {
811
1581
  let e = this.getAttribute("comment-id");
812
1582
  if (!e) return "";
813
- let t = this.gridStore.repliesFor(e), n = this._showAll || t.length <= U ? t : t.slice(0, U), r = t.length - n.length, i = r > 0 ? `<div class="thread__more">
1583
+ let t = this.gridStore.repliesFor(e), n = this._showAll || t.length <= q ? t : t.slice(0, q), r = t.length - n.length, i = r > 0 ? `<div class="thread__more">
814
1584
  <div class="thread__more-dot"></div>
815
- <button class="thread__more-btn btn-link btn-link--size-sm btn-link--theme-default" type="button">
1585
+ <pop-button-link data-ref="more" size="sm" theme="default">
816
1586
  Show ${r} more ${r === 1 ? "reply" : "replies"}
817
- </button>
1587
+ </pop-button-link>
818
1588
  </div>` : "";
819
1589
  return `
820
1590
  <div class="thread">
@@ -827,19 +1597,19 @@ var Ne = F("\n :host {\n display: block;\n\n --pop-thread-link: rgba(0, 0
827
1597
  `;
828
1598
  }
829
1599
  };
830
- L([C(D)], W.prototype, "gridStore", void 0), customElements.get("pop-comment-thread") || customElements.define("pop-comment-thread", W);
1600
+ j([b(W)], J.prototype, "gridStore", void 0), customElements.get("pop-comment-thread") || customElements.define("pop-comment-thread", J);
831
1601
  //#endregion
832
1602
  //#region src/helpers/time.ts
833
- function G(e) {
1603
+ function Y(e) {
834
1604
  let t = e instanceof Date ? e : new Date(e), n = (Date.now() - t.getTime()) / 1e3;
835
1605
  return n < 1 ? "now" : n < 60 ? `${Math.floor(n)}s` : n < 3600 ? `${Math.floor(n / 60)}m` : n < 86400 ? `${Math.floor(n / 3600)}h` : n < 604800 ? `${Math.floor(n / 86400)}d` : `${Math.floor(n / 604800)}w`;
836
1606
  }
837
1607
  //#endregion
838
1608
  //#region src/components/pop-comment.ts
839
- var Pe = F("\n :host {\n display: block;\n width: 100%;\n --pop-comment-hover: rgba(0, 0, 32, 0.04);\n }\n\n @media (prefers-color-scheme: dark) {\n :host {\n --pop-comment-hover: rgba(255, 255, 255, 0.04);\n }\n }\n\n .comment {\n display: flex;\n width: 100%;\n gap: 8px;\n align-items: center;\n background-color: transparent;\n border: none;\n padding: 0;\n border-radius: var(--pop-radius-md);\n outline: 6px solid transparent;\n text-align: left;\n transition:\n background-color 150ms ease,\n outline-color 150ms ease;\n }\n\n :host([data-size=\"sm\"]) .comment,\n :host:not([data-size]) .comment {\n --avatar-size: 32px;\n --width: 32px;\n gap: 8px;\n }\n\n :host([data-size=\"lg\"]) .comment {\n --avatar-size: 56px;\n --width: 56px;\n gap: 12px;\n }\n\n .comment--is-selected {\n background-color: var(--pop-muted);\n outline-color: var(--pop-muted);\n }\n\n :host(.is-signed-in) .comment {\n cursor: pointer;\n }\n\n @media (hover: hover) and (pointer: fine) {\n .comment:hover .comment__avatar {\n --avatar-translate-x: 2px;\n }\n\n .comment__avatar:hover {\n /* --avatar-scale: 1.06; */\n }\n\n .comment .comment__menu {\n display: none;\n }\n\n .comment:hover .comment__menu {\n display: flex;\n }\n }\n\n .comment--is-selected .comment__avatar {\n --avatar-translate-x: 2px;\n }\n\n .comment__avatar {\n --comment-avatar-border-size: 0;\n --avatar-translate-x: 0px;\n --avatar-scale: 1;\n width: var(--avatar-size);\n height: var(--avatar-size);\n transform: translateX(var(--avatar-translate-x)) scale(var(--avatar-scale));\n transition: transform var(--pop-duration-quick) var(--pop-ease-quick);\n }\n\n .comment__user {\n display: flex;\n width: var(--width);\n align-items: flex-start;\n gap: 10px;\n flex-shrink: 0;\n align-self: stretch;\n }\n\n .comment__content {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n flex: 1 0 0;\n align-self: stretch;\n }\n\n .comment__info {\n display: flex;\n align-items: flex-start;\n align-self: stretch;\n }\n\n .comment__menu {\n display: flex;\n justify-self: flex-end;\n }\n\n .comment__menu-trigger {\n background: none;\n border: none;\n cursor: pointer;\n border-radius: 9999px;\n aspect-ratio: 1;\n position: relative;\n }\n\n .comment__menu-trigger:before {\n content: \"\";\n height: 40px;\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 40px;\n }\n\n .comment__user-meta {\n display: flex;\n align-items: flex-start;\n gap: 4px;\n flex-shrink: 0;\n align-self: stretch;\n flex-grow: 1;\n }\n\n .comment__user-name {\n color: var(--pop-foreground);\n font-feature-settings:\n \"liga\" off,\n \"clig\" off;\n font-family: Inter, sans-serif;\n font-size: var(--text-widget-base, 13px);\n font-style: normal;\n font-weight: 500;\n line-height: var(--text-widget-base--line-height, 18px);\n letter-spacing: -0.08px;\n }\n\n .comment__timestamp {\n color: var(--pop-muted-foreground);\n font-feature-settings:\n \"liga\" off,\n \"clig\" off;\n font-family: Inter, sans-serif;\n font-size: var(--text-widget-base, 13px);\n font-style: normal;\n font-weight: 400;\n line-height: var(--text-widget-base--line-height, 18px);\n letter-spacing: -0.08px;\n opacity: 0.5;\n }\n\n .comment__text {\n align-self: stretch;\n color: var(--pop-foreground);\n font-feature-settings:\n \"liga\" off,\n \"clig\" off;\n font-family: Inter, sans-serif;\n font-size: 13px;\n font-style: normal;\n font-weight: 400;\n line-height: 18px;\n letter-spacing: -0.08px;\n text-align: left;\n\n /* Clamping when not expanded */\n display: -webkit-box;\n -webkit-line-clamp: 4;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .comment__text.expanded,\n .comment--is-selected .comment__text {\n -webkit-line-clamp: initial;\n display: block;\n }\n\n .comment__mention {\n color: #155eef;\n font-weight: 500;\n }\n\n .comment__menu {\n position: relative;\n }\n\n .comment__dropdown {\n background-color: var(--pop-background);\n border-radius: 6px;\n box-shadow: var(--pop-shadow-xl);\n display: none;\n flex-direction: column;\n gap: 6px;\n padding: 6px;\n pointer-events: auto;\n position: fixed;\n width: 120px;\n z-index: 1000;\n }\n\n .comment__dropdown.is-open {\n display: flex;\n }\n\n .comment__dropdown-item {\n align-items: center;\n background: none;\n border-radius: 4px;\n border: none;\n color: var(--pop-foreground);\n cursor: pointer;\n display: flex;\n flex: 1 0 0;\n font-family: Inter, sans-serif;\n font-size: 14px;\n font-weight: 500;\n justify-content: center;\n min-height: 40px;\n padding: 0 12px;\n text-align: left;\n transition: background-color 100ms ease;\n width: 100%;\n }\n\n .comment__dropdown-item:hover {\n background-color: var(--pop-comment-hover, rgba(0, 0, 0, 0.04));\n }\n\n .comment__dropdown-item--danger {\n color: #ef4444;\n }\n\n .comment__edit-form {\n display: flex;\n flex-direction: column;\n width: 100%;\n gap: 8px;\n margin-top: 4px;\n }\n\n .comment__edit-input {\n width: 100%;\n background: var(--pop-background, #ffffff);\n color: var(--pop-foreground, #000000);\n border: 1px solid var(--pop-border, #e4e4e7);\n border-radius: var(--pop-radius-sm, 4px);\n padding: 6px 8px;\n font-family: Inter, sans-serif;\n font-size: 13px;\n line-height: 18px;\n resize: vertical;\n outline: none;\n }\n\n .comment__edit-input:focus {\n border-color: var(--pop-ring, #000020);\n }\n\n .comment__edit-actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n }\n\n .comment__edit-save,\n .comment__edit-cancel {\n font-size: 12px;\n padding: 4px 8px;\n cursor: pointer;\n }\n\n .comment--deleted .comment__text {\n color: var(--pop-muted-foreground, #697586);\n font-style: italic;\n opacity: 0.8;\n }\n"), K = class extends I {
1609
+ var rt = O("\n :host {\n display: block;\n width: 100%;\n --pop-comment-hover: rgba(0, 0, 32, 0.04);\n }\n\n @media (prefers-color-scheme: dark) {\n :host {\n --pop-comment-hover: rgba(255, 255, 255, 0.04);\n }\n }\n\n .comment {\n display: flex;\n width: 100%;\n gap: 8px;\n align-items: center;\n background-color: transparent;\n border: none;\n padding: 0;\n border-radius: var(--pop-radius-md);\n outline: 6px solid transparent;\n text-align: left;\n transition:\n background-color 150ms ease,\n outline-color 150ms ease;\n }\n\n :host([data-size=\"sm\"]) .comment,\n :host:not([data-size]) .comment {\n --avatar-size: 32px;\n --width: 32px;\n gap: 8px;\n }\n\n :host([data-size=\"lg\"]) .comment {\n --avatar-size: 56px;\n --width: 56px;\n gap: 12px;\n }\n\n .comment--is-selected {\n background-color: var(--pop-muted);\n outline-color: var(--pop-muted);\n }\n\n :host(.is-signed-in) .comment {\n cursor: pointer;\n }\n\n @media (hover: hover) and (pointer: fine) {\n .comment:hover .comment__avatar {\n --avatar-translate-x: 2px;\n }\n\n .comment__avatar:hover {\n /* --avatar-scale: 1.06; */\n }\n\n .comment .comment__menu {\n display: none;\n }\n\n .comment:hover .comment__menu {\n display: flex;\n }\n }\n\n .comment--is-selected .comment__avatar {\n --avatar-translate-x: 2px;\n }\n\n .comment__avatar {\n --comment-avatar-border-size: 0;\n --avatar-translate-x: 0px;\n --avatar-scale: 1;\n width: var(--avatar-size);\n height: var(--avatar-size);\n transform: translateX(var(--avatar-translate-x)) scale(var(--avatar-scale));\n transition: transform var(--pop-duration-quick) var(--pop-ease-quick);\n }\n\n .comment__user {\n display: flex;\n width: var(--width);\n align-items: flex-start;\n gap: 10px;\n flex-shrink: 0;\n align-self: stretch;\n }\n\n .comment__content {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n flex: 1 0 0;\n align-self: stretch;\n }\n\n .comment__info {\n display: flex;\n align-items: flex-start;\n align-self: stretch;\n }\n\n .comment__menu {\n display: flex;\n justify-self: flex-end;\n }\n\n .comment__menu-trigger {\n background: none;\n border: none;\n cursor: pointer;\n border-radius: 9999px;\n aspect-ratio: 1;\n position: relative;\n }\n\n .comment__menu-trigger:before {\n content: \"\";\n height: 40px;\n left: 50%;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 40px;\n }\n\n .comment__user-meta {\n display: flex;\n align-items: flex-start;\n gap: 4px;\n flex-shrink: 0;\n align-self: stretch;\n flex-grow: 1;\n }\n\n .comment__user-name {\n color: var(--pop-foreground);\n font-feature-settings:\n \"liga\" off,\n \"clig\" off;\n font-family: Inter, sans-serif;\n font-size: var(--text-widget-base, 13px);\n font-style: normal;\n font-weight: 500;\n line-height: var(--text-widget-base--line-height, 18px);\n letter-spacing: -0.08px;\n }\n\n .comment__timestamp {\n color: var(--pop-muted-foreground);\n font-feature-settings:\n \"liga\" off,\n \"clig\" off;\n font-family: Inter, sans-serif;\n font-size: var(--text-widget-base, 13px);\n font-style: normal;\n font-weight: 400;\n line-height: var(--text-widget-base--line-height, 18px);\n letter-spacing: -0.08px;\n opacity: 0.5;\n }\n\n .comment__text {\n align-self: stretch;\n color: var(--pop-foreground);\n font-feature-settings:\n \"liga\" off,\n \"clig\" off;\n font-family: Inter, sans-serif;\n font-size: 13px;\n font-style: normal;\n font-weight: 400;\n line-height: 18px;\n letter-spacing: -0.08px;\n text-align: left;\n\n /* Clamping when not expanded */\n display: -webkit-box;\n -webkit-line-clamp: 4;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .comment__text.expanded,\n .comment--is-selected .comment__text {\n -webkit-line-clamp: initial;\n display: block;\n }\n\n .comment__mention {\n color: #155eef;\n font-weight: 500;\n }\n\n .comment__menu {\n position: relative;\n }\n\n .comment__dropdown {\n background-color: var(--pop-background);\n border-radius: 6px;\n box-shadow: var(--pop-shadow-xl);\n display: none;\n flex-direction: column;\n gap: 6px;\n padding: 6px;\n pointer-events: auto;\n position: fixed;\n width: 120px;\n z-index: 1000;\n }\n\n .comment__dropdown.is-open {\n display: flex;\n }\n\n .comment__dropdown-item {\n align-items: center;\n background: none;\n border-radius: 4px;\n border: none;\n color: var(--pop-foreground);\n cursor: pointer;\n display: flex;\n flex: 1 0 0;\n font-family: Inter, sans-serif;\n font-size: 14px;\n font-weight: 500;\n justify-content: center;\n min-height: 40px;\n padding: 0 12px;\n text-align: left;\n transition: background-color 100ms ease;\n width: 100%;\n }\n\n .comment__dropdown-item:hover {\n background-color: var(--pop-comment-hover, rgba(0, 0, 0, 0.04));\n }\n\n .comment__dropdown-item--danger {\n color: #ef4444;\n }\n\n .comment__edit-form {\n display: flex;\n flex-direction: column;\n width: 100%;\n gap: 8px;\n margin-top: 4px;\n }\n\n .comment__edit-input {\n width: 100%;\n background: var(--pop-background, #ffffff);\n color: var(--pop-foreground, #000000);\n border: 1px solid var(--pop-border, #e4e4e7);\n border-radius: var(--pop-radius-sm, 4px);\n padding: 6px 8px;\n font-family: Inter, sans-serif;\n font-size: 13px;\n line-height: 18px;\n resize: vertical;\n outline: none;\n }\n\n .comment__edit-input:focus {\n border-color: var(--pop-ring, #000020);\n }\n\n .comment__edit-actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n }\n\n .comment__edit-save,\n .comment__edit-cancel {\n font-size: 12px;\n padding: 4px 8px;\n cursor: pointer;\n }\n\n .comment--deleted .comment__text {\n color: var(--pop-muted-foreground, #697586);\n font-style: italic;\n opacity: 0.8;\n }\n"), X = class extends k {
840
1610
  constructor(...e) {
841
1611
  super(...e), this.events = { click: "onClick" }, this._expanded = !1, this._dropdownOpen = !1, this._onOutsideClick = (e) => {
842
- let t = e.composedPath(), n = this.getElement(".comment__dropdown"), r = this.getElement(".comment__menu-trigger");
1612
+ let t = e.composedPath(), n = this.getElement(A("dropdown")), r = this.getElement(A("menu-trigger"));
843
1613
  n && r && !t.includes(n) && !t.includes(r) && this.closeDropdown();
844
1614
  }, this._timeUpdateTimer = null;
845
1615
  }
@@ -859,39 +1629,39 @@ var Pe = F("\n :host {\n display: block;\n width: 100%;\n --pop-commen
859
1629
  return this.size === "sm" ? "xs" : "sm";
860
1630
  }
861
1631
  get styleSheets() {
862
- return [Pe];
1632
+ return [rt];
863
1633
  }
864
1634
  toggleDropdown() {
865
1635
  this._dropdownOpen ? this.closeDropdown() : this.openDropdown();
866
1636
  }
867
1637
  openDropdown() {
868
1638
  this._dropdownOpen = !0;
869
- let e = this.getElement(".comment__dropdown"), t = this.getElement(".comment__menu-trigger");
870
- if (e && t) {
871
- e.classList.add("is-open");
872
- let n = () => {
873
- a(t, e, {
1639
+ let i = this.getElement(A("dropdown")), o = this.getElement(A("menu-trigger"));
1640
+ if (i && o) {
1641
+ i.classList.add("is-open");
1642
+ let s = () => {
1643
+ t(o, i, {
874
1644
  placement: "bottom-end",
875
1645
  middleware: [
876
- s(4),
877
- o(),
878
- l({ padding: 8 })
1646
+ r(4),
1647
+ n(),
1648
+ a({ padding: 8 })
879
1649
  ],
880
1650
  strategy: "fixed"
881
- }).then(({ x: t, y: n }) => {
882
- Object.assign(e.style, {
883
- left: `${t}px`,
884
- top: `${n}px`,
1651
+ }).then(({ x: e, y: t }) => {
1652
+ Object.assign(i.style, {
1653
+ left: `${e}px`,
1654
+ top: `${t}px`,
885
1655
  position: "fixed"
886
1656
  });
887
1657
  });
888
1658
  };
889
- this._floatingCleanup = i(t, e, n), document.addEventListener("mousedown", this._onOutsideClick);
1659
+ this._floatingCleanup = e(o, i, s), document.addEventListener("mousedown", this._onOutsideClick);
890
1660
  }
891
1661
  }
892
1662
  closeDropdown() {
893
1663
  this._dropdownOpen = !1;
894
- let e = this.getElement(".comment__dropdown");
1664
+ let e = this.getElement(A("dropdown"));
895
1665
  e && e.classList.remove("is-open"), this._floatingCleanup &&= (this._floatingCleanup(), void 0), document.removeEventListener("mousedown", this._onOutsideClick);
896
1666
  }
897
1667
  async deleteComment() {
@@ -904,31 +1674,31 @@ var Pe = F("\n :host {\n display: block;\n width: 100%;\n --pop-commen
904
1674
  }
905
1675
  onClick(e) {
906
1676
  let t = e.target;
907
- if (t.closest(".comment__menu-trigger")) {
1677
+ if (t.closest(A("menu-trigger"))) {
908
1678
  e.stopPropagation(), this.toggleDropdown();
909
1679
  return;
910
1680
  }
911
- let n = t.closest(".comment__dropdown-item");
1681
+ let n = t.closest(A("dropdown-item"));
912
1682
  if (n) {
913
1683
  e.stopPropagation();
914
1684
  let t = n.getAttribute("data-action"), r = this.getAttribute("comment-id");
915
1685
  t === "edit" && r ? (this.gridStore.replyingTo.value = null, this.gridStore.editingCommentId.value = r) : t === "delete" ? this.deleteComment() : t === "flag" && this.flagComment(), this.closeDropdown();
916
1686
  return;
917
1687
  }
918
- if (t.closest(".comment__dropdown")) {
1688
+ if (t.closest(A("dropdown"))) {
919
1689
  e.stopPropagation();
920
1690
  return;
921
1691
  }
922
- if (!g.value) return;
1692
+ if (!this.authStore.currentUser.value) return;
923
1693
  let r = this.getAttribute("comment-id");
924
1694
  r && this.gridStore.comments.value.find((e) => e.id === r)?.status !== "deleted" && (this.gridStore.replyingTo.value === r ? this.gridStore.replyingTo.value = null : this.gridStore.replyingTo.value = r, this.expandText());
925
1695
  }
926
1696
  expandText() {
927
- let e = this.getElement(".comment__text");
1697
+ let e = this.getElement(A("text"));
928
1698
  if (!this._expanded && e) {
929
1699
  let t = e.offsetHeight;
930
1700
  this._expanded = !0, this.render();
931
- let n = this.getElement(".comment__text");
1701
+ let n = this.getElement(A("text"));
932
1702
  if (n) {
933
1703
  let e = n.scrollHeight;
934
1704
  n.style.height = `${t}px`, n.style.overflow = "hidden", n.offsetHeight, n.style.transition = "height var(--pop-duration-quick) var(--pop-ease-quick)", n.style.height = `${e}px`, setTimeout(() => {
@@ -947,8 +1717,8 @@ var Pe = F("\n :host {\n display: block;\n width: 100%;\n --pop-commen
947
1717
  let t = this.gridStore.comments.value.find((t) => t.id === e);
948
1718
  if (!t) return;
949
1719
  let n = () => {
950
- let e = this.getElement(".comment__timestamp");
951
- e && (e.textContent = G(t.createdAt));
1720
+ let e = this.getElement(A("timestamp"));
1721
+ e && (e.textContent = Y(t.createdAt));
952
1722
  let r = Date.now() - (typeof t.createdAt == "number" ? t.createdAt : Date.parse(String(t.createdAt))), i = 6e4;
953
1723
  i = r < 6e4 ? 5e3 : r < 36e5 ? 6e4 : 18e5, this._timeUpdateTimer = setTimeout(n, i);
954
1724
  }, r = Date.now() - (typeof t.createdAt == "number" ? t.createdAt : Date.parse(String(t.createdAt))) < 6e4 ? 5e3 : 6e4;
@@ -959,7 +1729,7 @@ var Pe = F("\n :host {\n display: block;\n width: 100%;\n --pop-commen
959
1729
  }
960
1730
  setupEffects() {
961
1731
  this.addEffect(() => {
962
- let e = this.getAttribute("comment-id"), t = g.value, n = this.gridStore.replyingTo.value, r = this.gridStore.editingCommentId.value, i = this.gridStore.scrollingCommentId.value;
1732
+ let e = this.getAttribute("comment-id"), t = this.authStore.currentUser.value, n = this.gridStore.replyingTo.value, r = this.gridStore.editingCommentId.value, i = this.gridStore.scrollingCommentId.value;
963
1733
  this.classList.toggle("is-signed-in", t !== null), this.classList.toggle("is-replying", e !== null && n === e), this.classList.toggle("is-editing", e !== null && r === e), this.gridStore.comments.value, this.render(), this.startTimeUpdates(), e && i === e && setTimeout(() => {
964
1734
  let t = this.shadowRoot?.querySelector(`#comment-${e}`);
965
1735
  t ? t.scrollIntoView({
@@ -977,8 +1747,8 @@ var Pe = F("\n :host {\n display: block;\n width: 100%;\n --pop-commen
977
1747
  if (!e) return "";
978
1748
  let t = this.gridStore.comments.value.find((t) => t.id === e);
979
1749
  if (!t) return "";
980
- let n = t.status === "deleted", r = t.authorDeleted === !0, i = n || r, a = i ? "" : t.author?.image ? `<img src="${t.author.image}" alt="${t.author.name ?? "User avatar"}" />` : B(t.author?.name), o = this.gridStore.replyingTo.value, s = e !== null && o === e, c = this.size, l = g.value && t.author && g.value.id === t.author.id, u = g.value && !n ? `<div class="comment__menu">
981
- <button class="comment__menu-trigger" type="button">
1750
+ let n = t.status === "deleted", r = t.authorDeleted === !0, i = n || r, a = i ? "" : t.author?.image ? `<img src="${t.author.image}" alt="${t.author.name ?? "User avatar"}" />` : u(t.author?.name), o = this.gridStore.replyingTo.value, s = e !== null && o === e, c = this.size, l = this.authStore.currentUser.value, d = l && t.author && l.id === t.author.id, f = l && !n ? `<div class="comment__menu">
1751
+ <button class="comment__menu-trigger" data-ref="menu-trigger" type="button">
982
1752
  <svg
983
1753
  width="18"
984
1754
  height="18"
@@ -1021,9 +1791,9 @@ var Pe = F("\n :host {\n display: block;\n width: 100%;\n --pop-commen
1021
1791
  />
1022
1792
  </svg>
1023
1793
  </button>
1024
- <div class="comment__dropdown">
1025
- ${l ? "<button class=\"comment__dropdown-item\" type=\"button\" data-action=\"edit\">Edit</button>\n <button class=\"comment__dropdown-item comment__dropdown-item--danger\" type=\"button\" data-action=\"delete\">Delete</button>" : ""}
1026
- <button class="comment__dropdown-item" type="button" data-action="flag">Flag</button>
1794
+ <div class="comment__dropdown" data-ref="dropdown">
1795
+ ${d ? "<button class=\"comment__dropdown-item\" data-ref=\"dropdown-item\" type=\"button\" data-action=\"edit\">Edit</button>\n <button class=\"comment__dropdown-item comment__dropdown-item--danger\" data-ref=\"dropdown-item\" type=\"button\" data-action=\"delete\">Delete</button>" : ""}
1796
+ <button class="comment__dropdown-item" data-ref="dropdown-item" type="button" data-action="flag">Flag</button>
1027
1797
  </div>
1028
1798
  </div>` : "";
1029
1799
  return `
@@ -1047,31 +1817,34 @@ var Pe = F("\n :host {\n display: block;\n width: 100%;\n --pop-commen
1047
1817
  <div class="comment__user-name">
1048
1818
  ${n ? "[Deleted]" : r ? "[Deleted user]" : t.author?.name ?? ""}
1049
1819
  </div>
1050
- <div class="comment__timestamp">${G(t.createdAt)}</div>
1820
+ <div class="comment__timestamp" data-ref="timestamp">${Y(t.createdAt)}</div>
1051
1821
  </div>
1052
- ${u}
1822
+ ${f}
1053
1823
  </div>
1054
- <div class="comment__text${this._expanded ? " expanded" : ""}">${t.body}</div>
1824
+ <div class="comment__text${this._expanded ? " expanded" : ""}" data-ref="text">${t.body}</div>
1055
1825
  </div>
1056
1826
  </div>
1057
1827
  `;
1058
1828
  }
1059
1829
  };
1060
- L([C(D)], K.prototype, "gridStore", void 0), customElements.get("pop-comment") || customElements.define("pop-comment", K);
1830
+ j([b(W)], X.prototype, "gridStore", void 0), j([b(_)], X.prototype, "authStore", void 0), customElements.get("pop-comment") || customElements.define("pop-comment", X);
1061
1831
  //#endregion
1062
1832
  //#region src/components/pop-feed.ts
1063
- var Fe = F("\n :host {\n display: flex;\n background: var(--pop-background);\n border-radius: var(--pop-radius-2xl);\n border: 1px solid var(--pop-background);\n box-shadow: var(--pop-shadow-3xl);\n display: block;\n left: 0;\n max-height: 400px;\n max-width: 400px;\n min-width: 343px;\n opacity: 0;\n overflow: hidden;\n padding: 0 4px 0 0;\n pointer-events: none;\n position: fixed;\n top: 0;\n width: 100%;\n z-index: 9999;\n transform: scale(0.94);\n transition:\n opacity var(--pop-duration-quick) var(--pop-ease-quick),\n transform var(--pop-duration-quick) var(--pop-ease-quick),\n display var(--pop-duration-quick) allow-discrete;\n }\n\n :host([data-current-placement=\"top-start\"]) {\n transform-origin: left bottom;\n }\n\n :host([data-current-placement=\"bottom-start\"]) {\n transform-origin: left top;\n }\n\n :host([data-current-placement=\"top-end\"]) {\n transform-origin: right bottom;\n }\n\n :host([data-current-placement=\"bottom-end\"]) {\n transform-origin: right top;\n }\n\n :host([data-current-placement=\"top\"]) {\n transform-origin: bottom;\n }\n\n :host([data-current-placement=\"bottom\"]) {\n transform-origin: top;\n }\n\n :host([open]) {\n opacity: 1;\n pointer-events: auto;\n transform: scale(1);\n\n @starting-style {\n display: flex;\n opacity: 0;\n transform: scale(0.94);\n }\n }\n\n .feed {\n display: grid;\n grid-template-rows: 1fr 50px;\n }\n\n .feed__content {\n align-items: flex-start;\n align-self: stretch;\n display: flex;\n gap: 8px;\n min-height: 80px;\n max-height: 290px;\n }\n\n .feed__empty {\n padding: 24px 16px 24px 8px;\n text-align: center;\n font-family: Inter, sans-serif;\n font-size: 13px;\n color: var(--pop-muted-foreground);\n line-height: 18px;\n }\n\n .feed__footer {\n position: absolute;\n bottom: 0;\n min-height: 50px;\n width: 100%;\n }\n\n .feed__main {\n align-items: stretch;\n align-self: stretch;\n display: flex;\n flex-direction: column;\n flex: 1 0 0;\n gap: 16px;\n min-height: 100%;\n overflow: hidden auto;\n padding: 8px 10px 8px 8px;\n }\n\n .feed__main::-webkit-scrollbar {\n width: 4px;\n }\n\n .feed__main::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .feed__main::-webkit-scrollbar-thumb {\n background: var(--pop-border);\n border-radius: 100px;\n }\n"), q = class extends I {
1833
+ var it = O("\n :host {\n display: flex;\n background: var(--pop-background);\n border-radius: var(--pop-radius-2xl);\n /* border: 1px solid var(--pop-background); */\n box-shadow: var(--pop-shadow-3xl);\n display: block;\n left: 0;\n max-height: 340px;\n max-width: 400px;\n min-width: 343px;\n opacity: 0;\n overflow: hidden;\n padding: 0;\n pointer-events: none;\n position: fixed;\n top: 0;\n width: 100%;\n z-index: 9999;\n transform: scale(0.94);\n transition:\n opacity var(--pop-duration-quick) var(--pop-ease-quick),\n transform var(--pop-duration-quick) var(--pop-ease-quick),\n display var(--pop-duration-quick) allow-discrete;\n }\n\n :host([data-current-placement=\"top-start\"]) {\n transform-origin: left bottom;\n }\n\n :host([data-current-placement=\"bottom-start\"]) {\n transform-origin: left top;\n }\n\n :host([data-current-placement=\"top-end\"]) {\n transform-origin: right bottom;\n }\n\n :host([data-current-placement=\"bottom-end\"]) {\n transform-origin: right top;\n }\n\n :host([data-current-placement=\"top\"]) {\n transform-origin: bottom;\n }\n\n :host([data-current-placement=\"bottom\"]) {\n transform-origin: top;\n }\n\n :host([open]) {\n opacity: 1;\n pointer-events: auto;\n transform: scale(1);\n\n @starting-style {\n display: flex;\n opacity: 0;\n transform: scale(0.94);\n }\n }\n\n /* .feed__content and .feed__footer are stacked in the same grid cell\n (see grid-area below) rather than laid out as flex siblings, so the\n footer can grow taller (email/code/no-code states) and overlay the\n comment list instead of pushing it — the grid row auto-sizes to\n whichever of the two is taller, which a manual absolute-position +\n fixed-height-reservation approach can't do without clipping against\n :host's overflow:hidden when the footer is the tall one. */\n .feed {\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: 1fr;\n /* height (not just max-height) gives the grid row a definite size to\n shrink to — otherwise an auto-height grid container sizes its 1fr\n row to content's max-content height regardless of max-height,\n clipping instead of scrolling. */\n height: fit-content(340px);\n max-height: 340px;\n }\n\n .feed__content {\n align-items: flex-start;\n /* stretch (not start) so .feed__main inherits a bounded height to\n scroll within, instead of growing to fit all comments. */\n align-self: stretch;\n display: flex;\n gap: 8px;\n grid-area: 1 / 1;\n min-height: 0;\n width: 100%;\n }\n\n .feed__empty {\n padding: 24px 16px 24px 8px;\n text-align: center;\n font-family: Inter, sans-serif;\n font-size: 13px;\n color: var(--pop-muted-foreground);\n line-height: 18px;\n }\n\n .feed__footer {\n align-self: end;\n grid-area: 1 / 1;\n width: 100%;\n z-index: 1;\n }\n\n /* Full-widget scrim for auth errors (e.g. \"You were signed out\"). Sits in\n the same grid cell as the content and footer, above both, so the message\n never takes layout space from the join bar. Click to dismiss. */\n .feed__notice {\n align-items: center;\n background: color-mix(in srgb, var(--pop-background) 80%, transparent);\n color: var(--pop-foreground);\n cursor: pointer;\n display: flex;\n font-family: Inter, sans-serif;\n font-size: 13px;\n grid-area: 1 / 1;\n justify-content: center;\n line-height: 18px;\n padding: 24px;\n text-align: center;\n z-index: 2;\n }\n\n .feed__notice-box {\n align-items: center;\n background: var(--pop-background);\n border: 1px solid var(--pop-border);\n border-radius: var(--pop-radius-sm);\n cursor: default;\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px;\n }\n\n .feed__notice-box:focus {\n outline: none;\n }\n\n .feed__notice[hidden] {\n display: none;\n }\n\n .feed__notice-dismiss {\n background: var(--pop-foreground);\n border: none;\n border-radius: var(--pop-radius-xs);\n color: var(--pop-background);\n cursor: pointer;\n font: inherit;\n font-weight: 600;\n padding: 6px 12px;\n }\n\n .feed__notice-dismiss:focus-visible {\n outline: 2px solid var(--pop-ring);\n outline-offset: 2px;\n }\n\n .feed__main {\n align-items: stretch;\n align-self: stretch;\n display: flex;\n flex-direction: column;\n flex: 1 1 0;\n gap: 16px;\n min-height: 0;\n overflow: hidden auto;\n /* Bottom padding reserves space for the idle \"Join the Conversation\"\n bar (~50px) so comments end above it, same as before this became an\n overlay — a taller auth-panel state then naturally covers more. */\n padding: 8px 10px 58px 8px;\n }\n\n .feed__main::-webkit-scrollbar {\n width: 4px;\n }\n\n .feed__main::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .feed__main::-webkit-scrollbar-thumb {\n background: var(--pop-border);\n border-radius: 100px;\n }\n"), Z = class extends k {
1064
1834
  constructor(...e) {
1065
- super(...e), this._footerChild = null, this._wasOpen = !1;
1835
+ super(...e), this._footerChild = null, this._wasOpen = !1, this._noticeRetryAt = null, this.events = { click: "onClick" };
1066
1836
  }
1067
1837
  get styleSheets() {
1068
- return [Fe];
1838
+ return [it];
1839
+ }
1840
+ onClick(e) {
1841
+ e.target.closest(A("notice")) && this.authStore.authErrorRetryAt.value === null && this.authStore.dismissAuthError();
1069
1842
  }
1070
1843
  connectedCallback() {
1071
1844
  super.connectedCallback(), document.addEventListener("mousedown", this), document.addEventListener("keydown", this);
1072
1845
  }
1073
1846
  disconnectedCallback() {
1074
- document.removeEventListener("mousedown", this), document.removeEventListener("keydown", this), super.disconnectedCallback();
1847
+ document.removeEventListener("mousedown", this), document.removeEventListener("keydown", this), window.clearInterval(this._noticeTimer), super.disconnectedCallback();
1075
1848
  }
1076
1849
  handleEvent(e) {
1077
1850
  if (e.type === "mousedown") {
@@ -1087,95 +1860,133 @@ var Fe = F("\n :host {\n display: flex;\n background: var(--pop-backgroun
1087
1860
  onOutsideClick(e) {
1088
1861
  if (!this.gridStore.open.value) return;
1089
1862
  let t = e.composedPath(), n = this.getRootNode(), r = n instanceof ShadowRoot ? n.host : null;
1090
- !t.includes(this) && (!r || !t.includes(r)) && (this.gridStore.open.value = !1);
1863
+ if (!t.includes(this) && (!r || !t.includes(r))) {
1864
+ if (this.authStore.authView.value !== "idle") {
1865
+ this.authStore.backToIdle();
1866
+ return;
1867
+ }
1868
+ this.gridStore.open.value = !1;
1869
+ }
1091
1870
  }
1092
1871
  onKeyDown(e) {
1093
- e.key === "Escape" && (this.gridStore.open.value = !1);
1872
+ if (e.key === "Escape") {
1873
+ if (this.authStore.authError.value) {
1874
+ this.authStore.clearAuthError();
1875
+ return;
1876
+ }
1877
+ if (this.authStore.authView.value !== "idle") {
1878
+ this.authStore.backToIdle();
1879
+ return;
1880
+ }
1881
+ this.gridStore.open.value = !1;
1882
+ }
1094
1883
  }
1095
1884
  setupEffects() {
1096
1885
  this.addEffect(() => {
1097
1886
  let e = this.gridStore.open.value;
1098
- e && !this._wasOpen && this.gridStore.grid.value && b(this.gridStore.apiUrl, this.gridStore.publicKey), this._wasOpen = e, this.update();
1887
+ e && !this._wasOpen && this.gridStore.grid.value && this.authStore.connectAuthChannel(), !e && this._wasOpen && this.authStore.clearAuthError(), this._wasOpen = e, this.update();
1099
1888
  });
1100
1889
  }
1890
+ syncNoticeCountdown(e) {
1891
+ if (e === this._noticeRetryAt) return;
1892
+ this._noticeRetryAt = e, window.clearInterval(this._noticeTimer);
1893
+ let t = this.getElement(A("notice-dismiss"));
1894
+ t && (t.hidden = e !== null);
1895
+ let n = this.getElement(A("notice-countdown"));
1896
+ if (n && (n.hidden = e === null), !n || e === null) return;
1897
+ let r = () => {
1898
+ let t = Math.max(0, Math.ceil((e - Date.now()) / 1e3));
1899
+ return n.textContent = `Try again in ${Math.floor(t / 60)}:${String(t % 60).padStart(2, "0")}`, t === 0;
1900
+ };
1901
+ r(), this._noticeTimer = window.setInterval(() => {
1902
+ r() && (window.clearInterval(this._noticeTimer), this.authStore.dismissAuthError());
1903
+ }, 1e3);
1904
+ }
1101
1905
  update() {
1102
1906
  this.gridStore.open.value ? this.setAttribute("open", "") : this.removeAttribute("open");
1103
- let e = this.getElement(".feed__main");
1907
+ let e = this.getElement(A("main"));
1104
1908
  if (e) {
1105
1909
  let t = this.gridStore.topLevelComments.value;
1106
- if (t.length === 0) e.querySelector(".feed__empty") || (e.innerHTML = "<div class=\"feed__empty\">Waiting for your thoughts…</div>");
1910
+ if (t.length === 0) e.querySelector(A("empty")) || (e.innerHTML = "<div class=\"feed__empty\" data-ref=\"empty\">Waiting for your thoughts…</div>");
1107
1911
  else {
1108
1912
  let n = Array.from(e.querySelectorAll("pop-comment-thread")).map((e) => e.getAttribute("comment-id")), r = t.map((e) => e.id);
1109
1913
  (n.length !== r.length || n.some((e, t) => e !== r[t])) && (e.innerHTML = t.map((e) => `<pop-comment-thread comment-id="${e.id}"></pop-comment-thread>`).join(""));
1110
1914
  }
1111
1915
  }
1112
- let t = this.getElement(".feed__footer");
1113
- if (t) {
1114
- let e = g.value === null ? "pop-auth-panel" : "pop-comment-bar";
1115
- this._footerChild !== e && (this._footerChild = e, t.innerHTML = `<${e}></${e}>`);
1916
+ let t = this.authStore.authError.value, n = this.getElement(A("notice"));
1917
+ if (n) {
1918
+ let e = n.hidden;
1919
+ n.hidden = !t, this.setText(A("notice-message"), t ?? "");
1920
+ let r = t ? this.authStore.authErrorRetryAt.value : null;
1921
+ t && this.setText(A("notice-dismiss"), this.authStore.authErrorAction.value), this.syncNoticeCountdown(r), this.getElement(A("content"))?.toggleAttribute("inert", !!t), this.getElement(A("footer"))?.toggleAttribute("inert", !!t), t && e && this.gridStore.open.value && this.getElement(A(r === null ? "notice-dismiss" : "notice-box"))?.focus();
1922
+ }
1923
+ let r = this.getElement(A("footer"));
1924
+ if (r) {
1925
+ let e = this.authStore.currentUser.value === null ? "pop-auth-panel" : "pop-comment-bar";
1926
+ this._footerChild !== e && (this._footerChild = e, r.innerHTML = `<${e}></${e}>`);
1116
1927
  }
1117
1928
  }
1118
1929
  getTemplate() {
1119
- return "\n <div class=\"feed\">\n <div class=\"feed__content\">\n <div class=\"feed__main\"></div>\n </div>\n <div class=\"feed__footer\"></div>\n </div>\n ";
1930
+ return "\n <div class=\"feed\">\n <div class=\"feed__content\" data-ref=\"content\">\n <div class=\"feed__main\" data-ref=\"main\"></div>\n </div>\n <div class=\"feed__footer\" data-ref=\"footer\"></div>\n <div class=\"feed__notice\" data-ref=\"notice\" role=\"alert\" hidden>\n <div class=\"feed__notice-box\" data-ref=\"notice-box\" tabindex=\"-1\">\n <span data-ref=\"notice-message\"></span>\n <span data-ref=\"notice-countdown\" role=\"timer\" hidden></span>\n <button class=\"feed__notice-dismiss\" data-ref=\"notice-dismiss\" type=\"button\">\n Dismiss\n </button>\n </div>\n </div>\n </div>\n ";
1120
1931
  }
1121
1932
  };
1122
- L([C(D)], q.prototype, "gridStore", void 0), customElements.get("pop-feed") || customElements.define("pop-feed", q);
1933
+ j([b(W)], Z.prototype, "gridStore", void 0), j([b(_)], Z.prototype, "authStore", void 0), customElements.get("pop-feed") || customElements.define("pop-feed", Z);
1123
1934
  //#endregion
1124
1935
  //#region node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
1125
- function Ie() {
1936
+ function at() {
1126
1937
  return typeof window < "u";
1127
1938
  }
1128
- function J(e) {
1939
+ function ot(e) {
1129
1940
  var t;
1130
1941
  return (e == null || (t = e.ownerDocument) == null ? void 0 : t.defaultView) || window;
1131
1942
  }
1132
- function Le(e) {
1133
- return Ie() ? e instanceof Element || e instanceof J(e).Element : !1;
1943
+ function st(e) {
1944
+ return at() ? e instanceof Element || e instanceof ot(e).Element : !1;
1134
1945
  }
1135
- var Re = /transform|translate|scale|rotate|perspective|filter/, ze = /paint|layout|strict|content/, Y = (e) => !!e && e !== "none", X;
1136
- function Be(e) {
1137
- let t = Le(e) ? He(e) : e;
1138
- return Y(t.transform) || Y(t.translate) || Y(t.scale) || Y(t.rotate) || Y(t.perspective) || !Ve() && (Y(t.backdropFilter) || Y(t.filter)) || Re.test(t.willChange || "") || ze.test(t.contain || "");
1946
+ var ct = /transform|translate|scale|rotate|perspective|filter/, lt = /paint|layout|strict|content/, Q = (e) => !!e && e !== "none", ut;
1947
+ function dt(e) {
1948
+ let t = st(e) ? pt(e) : e;
1949
+ return Q(t.transform) || Q(t.translate) || Q(t.scale) || Q(t.rotate) || Q(t.perspective) || !ft() && (Q(t.backdropFilter) || Q(t.filter)) || ct.test(t.willChange || "") || lt.test(t.contain || "");
1139
1950
  }
1140
- function Ve() {
1141
- return X ??= typeof CSS < "u" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none"), X;
1951
+ function ft() {
1952
+ return ut ??= typeof CSS < "u" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none"), ut;
1142
1953
  }
1143
- function He(e) {
1144
- return J(e).getComputedStyle(e);
1954
+ function pt(e) {
1955
+ return ot(e).getComputedStyle(e);
1145
1956
  }
1146
1957
  //#endregion
1147
1958
  //#region node_modules/.pnpm/composed-offset-position@0.0.6_@floating-ui+utils@0.2.11/node_modules/composed-offset-position/dist/composed-offset-position.browser.min.mjs
1148
- function Ue(e) {
1149
- return We(e);
1959
+ function mt(e) {
1960
+ return ht(e);
1150
1961
  }
1151
- function Z(e) {
1962
+ function $(e) {
1152
1963
  return e.assignedSlot ? e.assignedSlot : e.parentNode instanceof ShadowRoot ? e.parentNode.host : e.parentNode;
1153
1964
  }
1154
- function We(e) {
1155
- for (let t = e; t; t = Z(t)) if (t instanceof Element && getComputedStyle(t).display === "none") return null;
1156
- for (let t = Z(e); t; t = Z(t)) {
1965
+ function ht(e) {
1966
+ for (let t = e; t; t = $(t)) if (t instanceof Element && getComputedStyle(t).display === "none") return null;
1967
+ for (let t = $(e); t; t = $(t)) {
1157
1968
  if (!(t instanceof Element)) continue;
1158
1969
  let e = getComputedStyle(t);
1159
- if (e.display !== "contents" && (e.position !== "static" || Be(e) || t.tagName === "BODY")) return t;
1970
+ if (e.display !== "contents" && (e.position !== "static" || dt(e) || t.tagName === "BODY")) return t;
1160
1971
  }
1161
1972
  return null;
1162
1973
  }
1163
1974
  //#endregion
1164
1975
  //#region src/components/pop-grid.ts
1165
- var Ge = "https://www.popgrids.io", Q = new Set([
1976
+ var gt = "https://www.popgrids.io", _t = new Set([
1166
1977
  "start",
1167
1978
  "center",
1168
1979
  "end"
1169
- ]), Ke = new Set(["sm", "lg"]), qe = new Set([
1980
+ ]), vt = new Set(["sm", "lg"]), yt = new Set([
1170
1981
  "auto",
1171
1982
  "up",
1172
1983
  "down"
1173
- ]), Je = F("\n :host {\n display: block;\n position: relative;\n }\n\n .grid {\n display: flex;\n height: 100%;\n position: relative;\n width: 100%;\n }\n\n .grid--align-start {\n justify-content: flex-start;\n }\n\n .grid--align-center {\n justify-content: center;\n }\n\n .grid--align-end {\n justify-content: flex-end;\n }\n"), Ye = class extends I {
1984
+ ]), bt = O("\n :host {\n display: block;\n position: relative;\n }\n\n .grid {\n display: flex;\n height: 100%;\n position: relative;\n width: 100%;\n }\n\n .grid--align-start {\n justify-content: flex-start;\n }\n\n .grid--align-center {\n justify-content: center;\n }\n\n .grid--align-end {\n justify-content: flex-end;\n }\n"), xt = class extends k {
1174
1985
  constructor(...e) {
1175
1986
  super(...e), this._initialized = !1;
1176
1987
  }
1177
1988
  get styleSheets() {
1178
- return [Je];
1989
+ return [bt];
1179
1990
  }
1180
1991
  static get observedAttributes() {
1181
1992
  return [
@@ -1189,23 +2000,25 @@ var Ge = "https://www.popgrids.io", Q = new Set([
1189
2000
  connectedCallback() {
1190
2001
  if (this._initialized) return;
1191
2002
  this._initialized = !0;
1192
- let e = this.getAttribute("data-key") ?? this.getAttribute("public-key") ?? "", t = this.getAttribute("data-api-url") ?? this.getAttribute("api-url") ?? Ge, n = this.getAttribute("data-page-url") ?? this.getAttribute("page-url") ?? location.href, r = this.getAttribute("data-id");
1193
- this._store = new D({
2003
+ let e = this.getAttribute("data-key") ?? this.getAttribute("public-key") ?? "", t = this.getAttribute("data-api-url") ?? this.getAttribute("api-url") ?? gt, n = this.getAttribute("data-page-url") ?? this.getAttribute("page-url") ?? location.href, r = this.getAttribute("data-id");
2004
+ this._authStore = new _({
2005
+ apiUrl: t,
2006
+ publicKey: e
2007
+ }), y(this, this._authStore), this._store = new W({
1194
2008
  apiUrl: t,
1195
2009
  publicKey: e,
1196
2010
  pageUrl: n,
1197
- externalId: r
1198
- }), ce(this, this._store), super.connectedCallback(), this._store.setOverrides(this._readOverridesFromAttributes()), this._store.load().then((n) => {
1199
- n && b(t, e);
1200
- });
2011
+ externalId: r,
2012
+ authStore: this._authStore
2013
+ }), y(this, this._store), super.connectedCallback(), this._store.setOverrides(this._readOverridesFromAttributes()), this._store.load();
1201
2014
  }
1202
2015
  _readOverridesFromAttributes() {
1203
2016
  let e = {}, t = this.getAttribute("data-align");
1204
- t && Q.has(t) && (e.align = t);
2017
+ t && _t.has(t) && (e.align = t);
1205
2018
  let n = this.getAttribute("data-layout");
1206
- n && Ke.has(n) && (e.layout = n);
2019
+ n && vt.has(n) && (e.layout = n);
1207
2020
  let r = this.getAttribute("data-position");
1208
- r && qe.has(r) && (e.position = r);
2021
+ r && yt.has(r) && (e.position = r);
1209
2022
  let i = this.getAttribute("data-icon");
1210
2023
  i && (e.icon = i);
1211
2024
  let a = this.getAttribute("data-preview-count");
@@ -1234,11 +2047,11 @@ var Ge = "https://www.popgrids.io", Q = new Set([
1234
2047
  this._applyOverridesFromAttributes();
1235
2048
  }
1236
2049
  disconnectedCallback() {
1237
- this._floatingCleanup?.(), this._store.destroy(), le(this), super.disconnectedCallback();
2050
+ this._floatingCleanup?.(), this._store.destroy(), this._authStore.destroy(), ye(this), super.disconnectedCallback();
1238
2051
  }
1239
2052
  setupEffects() {
1240
2053
  this.addEffect(() => {
1241
- let e = this._store.grid.value, t = this.getElement(".grid");
2054
+ let e = this._store.grid.value, t = this.getElement(A("grid"));
1242
2055
  if (!t) return;
1243
2056
  let n = Array.from(t.classList).filter((e) => e.startsWith("grid--"));
1244
2057
  if (n.length > 0 && t.classList.remove(...n), e) {
@@ -1247,53 +2060,53 @@ var Ge = "https://www.popgrids.io", Q = new Set([
1247
2060
  t.classList.add(`grid--preview-${n}`);
1248
2061
  }
1249
2062
  }), this.addEffect(() => {
1250
- let e = this._store.open.value;
1251
- if (this._floatingCleanup &&= (this._floatingCleanup(), void 0), !e) return;
1252
- let t = this.getElement("pop-widget"), n = this.getElement("pop-feed");
1253
- if (!t || !n) return;
1254
- let r = this._store.grid.value;
1255
- if (!r) return;
2063
+ let a = this._store.open.value;
2064
+ if (this._floatingCleanup &&= (this._floatingCleanup(), void 0), !a) return;
2065
+ let o = this.getElement("pop-widget"), s = this.getElement("pop-feed");
2066
+ if (!o || !s) return;
2067
+ let c = this._store.grid.value;
2068
+ if (!c) return;
1256
2069
  let l = [];
1257
- l = [s({
1258
- mainAxis: r.position === "down" ? -16 : -54,
2070
+ l = [r({
2071
+ mainAxis: c.position === "down" ? -16 : -54,
1259
2072
  crossAxis: -18
1260
- })], (!r.position || r.position === "auto") && l.push(o({
2073
+ })], (!c.position || c.position === "auto") && l.push(n({
1261
2074
  fallbackPlacements: ["bottom-start", "top-start"],
1262
2075
  fallbackStrategy: "bestFit",
1263
2076
  padding: 16
1264
2077
  }));
1265
- let u = (e) => c.getOffsetParent(e, Ue), d = () => {
1266
- a(t, n, {
1267
- placement: r.position === "down" ? "bottom-start" : "top-start",
2078
+ let u = (e) => i.getOffsetParent(e, mt), d = () => {
2079
+ t(o, s, {
2080
+ placement: c.position === "down" ? "bottom-start" : "top-start",
1268
2081
  middleware: l,
1269
2082
  strategy: "fixed",
1270
2083
  platform: {
1271
- ...c,
2084
+ ...i,
1272
2085
  getOffsetParent: u
1273
2086
  }
1274
- }).then(({ x: e, y: t, placement: r }) => {
1275
- n.setAttribute("data-current-placement", r), Object.assign(n.style, {
2087
+ }).then(({ x: e, y: t, placement: n }) => {
2088
+ s.setAttribute("data-current-placement", n), Object.assign(s.style, {
1276
2089
  left: `${e}px`,
1277
2090
  top: `${t}px`
1278
2091
  });
1279
2092
  });
1280
2093
  };
1281
- this._floatingCleanup = i(t, n, d);
2094
+ this._floatingCleanup = e(o, s, d);
1282
2095
  });
1283
2096
  }
1284
2097
  getTemplate() {
1285
- return "\n <div class=\"grid\">\n <pop-widget></pop-widget>\n <pop-feed></pop-feed>\n </div>\n ";
2098
+ return "\n <div class=\"grid\" data-ref=\"grid\">\n <pop-widget></pop-widget>\n <pop-feed></pop-feed>\n </div>\n ";
1286
2099
  }
1287
2100
  };
1288
- customElements.get("pop-grid") || customElements.define("pop-grid", Ye);
2101
+ customElements.get("pop-grid") || customElements.define("pop-grid", xt);
1289
2102
  //#endregion
1290
2103
  //#region src/components/pop-widget.ts
1291
- var Xe = F("\n :host {\n --error-badge-bg: #fef2f2;\n --error-badge-text: #991b1b;\n --error-badge-border: #fecaca;\n\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n }\n\n @media (prefers-color-scheme: dark) {\n :host {\n --error-badge-bg: #450a0a;\n --error-badge-text: #fca5a5;\n --error-badge-border: #7f1d1d;\n }\n }\n\n :host(.dark) {\n --error-badge-bg: #450a0a;\n --error-badge-text: #fca5a5;\n --error-badge-border: #7f1d1d;\n }\n\n :host([data-error]) {\n cursor: default;\n }\n\n .error-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 10px;\n border-radius: var(--pop-radius-full);\n border: 1px solid var(--error-badge-border);\n background: var(--error-badge-bg);\n color: var(--error-badge-text);\n font-size: 12px;\n font-weight: 500;\n line-height: 16px;\n white-space: nowrap;\n }\n\n .widget {\n display: inline-flex;\n align-items: flex-start;\n }\n\n .widget > :not([hidden]) ~ :not([hidden]) {\n margin-left: -6px;\n }\n\n .skeleton {\n width: 32px;\n height: 32px;\n background: var(--pop-muted);\n animation: pulse 1.5s ease-in-out infinite;\n }\n\n @keyframes pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n }\n\n .count {\n --count-size: calc(32px + var(--count-border-size));\n --count-background: var(--pop-background);\n --count-border-color: rgba(0 0 32 / 16%);\n --count-border-size: 1px;\n --count-color: var(--pop-foreground);\n\n align-items: center;\n background-color: var(--pop-background);\n display: flex;\n flex-shrink: 0;\n justify-content: center;\n padding: calc(var(--count-border-size) / 2);\n position: relative;\n z-index: 10;\n\n width: calc(var(--count-size) + (calc(var(--count-border-size))));\n height: calc(var(--count-size) + (calc(var(--count-border-size))));\n }\n\n .count__background {\n background-color: var(--count-border-color);\n position: absolute;\n top: 0;\n left: 0;\n z-index: 10;\n width: 100%;\n height: 100%;\n }\n\n .count__content {\n align-items: center;\n background: var(--count-background);\n display: flex;\n justify-content: center;\n overflow: hidden;\n height: var(--count-size);\n width: var(--count-size);\n }\n\n .count__label {\n color: var(--count-color);\n font-size: 16px;\n font-style: normal;\n font-weight: 500;\n letter-spacing: -0.96px;\n line-height: 28px;\n text-align: center;\n user-select: none;\n }\n\n .count__label-container {\n align-items: center;\n background: var(--pop-background);\n display: flex;\n height: calc(100% - calc(var(--count-border-size) * 2));\n justify-content: center;\n position: relative;\n text-indent: calc(calc(var(--count-border-size) * 2) * -1);\n width: calc(100% - calc(var(--count-border-size) * 2));\n z-index: 20;\n }\n\n /* Above .count (z-index: 10) — otherwise it paints underneath despite\n * coming later in the widget's facepile, since z-index only applies to\n * positioned elements and this one had neither. */\n .widget pop-comment-icon {\n position: relative;\n z-index: 20;\n top: 1px;\n }\n"), $ = class extends I {
2104
+ var St = O("\n :host {\n --error-badge-bg: #fef2f2;\n --error-badge-text: #991b1b;\n --error-badge-border: #fecaca;\n\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n }\n\n @media (prefers-color-scheme: dark) {\n :host {\n --error-badge-bg: #450a0a;\n --error-badge-text: #fca5a5;\n --error-badge-border: #7f1d1d;\n }\n }\n\n :host(.dark) {\n --error-badge-bg: #450a0a;\n --error-badge-text: #fca5a5;\n --error-badge-border: #7f1d1d;\n }\n\n :host([data-error]) {\n cursor: default;\n }\n\n .error-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 10px;\n border-radius: var(--pop-radius-full);\n border: 1px solid var(--error-badge-border);\n background: var(--error-badge-bg);\n color: var(--error-badge-text);\n font-size: 12px;\n font-weight: 500;\n line-height: 16px;\n white-space: nowrap;\n }\n\n .widget {\n display: inline-flex;\n align-items: flex-start;\n }\n\n .widget > :not([hidden]) ~ :not([hidden]) {\n margin-left: -6px;\n }\n\n .skeleton {\n width: 32px;\n height: 32px;\n background: var(--pop-muted);\n animation: pulse 1.5s ease-in-out infinite;\n }\n\n @keyframes pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n }\n\n .count {\n --count-size: calc(32px + var(--count-border-size));\n --count-background: var(--pop-background);\n --count-border-color: rgba(0 0 32 / 16%);\n --count-border-size: 1px;\n --count-color: var(--pop-foreground);\n\n align-items: center;\n background-color: var(--pop-background);\n display: flex;\n flex-shrink: 0;\n justify-content: center;\n padding: calc(var(--count-border-size) / 2);\n position: relative;\n z-index: 10;\n\n width: calc(var(--count-size) + (calc(var(--count-border-size))));\n height: calc(var(--count-size) + (calc(var(--count-border-size))));\n }\n\n .count__background {\n background-color: var(--count-border-color);\n position: absolute;\n top: 0;\n left: 0;\n z-index: 10;\n width: 100%;\n height: 100%;\n }\n\n .count__content {\n align-items: center;\n background: var(--count-background);\n display: flex;\n justify-content: center;\n overflow: hidden;\n height: var(--count-size);\n width: var(--count-size);\n }\n\n .count__label {\n color: var(--count-color);\n font-size: 16px;\n font-style: normal;\n font-weight: 500;\n letter-spacing: -0.96px;\n line-height: 28px;\n text-align: center;\n user-select: none;\n }\n\n .count__label-container {\n align-items: center;\n background: var(--pop-background);\n display: flex;\n height: calc(100% - calc(var(--count-border-size) * 2));\n justify-content: center;\n position: relative;\n text-indent: calc(calc(var(--count-border-size) * 2) * -1);\n width: calc(100% - calc(var(--count-border-size) * 2));\n z-index: 20;\n }\n\n /* Above .count (z-index: 10) — otherwise it paints underneath despite\n * coming later in the widget's facepile, since z-index only applies to\n * positioned elements and this one had neither. */\n .widget pop-comment-icon {\n position: relative;\n z-index: 20;\n top: 1px;\n }\n"), Ct = class extends k {
1292
2105
  constructor(...e) {
1293
2106
  super(...e), this.events = { click: "onClick" };
1294
2107
  }
1295
2108
  get styleSheets() {
1296
- return [Xe];
2109
+ return [St];
1297
2110
  }
1298
2111
  onClick() {
1299
2112
  this.gridStore.error.value || (this.gridStore.open.value = !this.gridStore.open.value);
@@ -1316,7 +2129,7 @@ var Xe = F("\n :host {\n --error-badge-bg: #fef2f2;\n --error-badge-text:
1316
2129
  return t?.image ? `<pop-comment-avatar size="${r}" style="z-index: ${i}" data-color-key="${a}">
1317
2130
  <img src="${t.image}" alt="${t.name ?? "User"}" />
1318
2131
  </pop-comment-avatar>` : `<pop-comment-avatar size="${r}" style="z-index: ${i}" data-color-key="${a}">
1319
- ${B(t?.name)}
2132
+ ${u(t?.name)}
1320
2133
  </pop-comment-avatar>`;
1321
2134
  }).join("")}
1322
2135
  <div class="count mask mask-squircle">
@@ -1334,7 +2147,7 @@ var Xe = F("\n :host {\n --error-badge-bg: #fef2f2;\n --error-badge-text:
1334
2147
  };
1335
2148
  //#endregion
1336
2149
  //#region src/index.ts
1337
- if (L([C(D)], $.prototype, "gridStore", void 0), customElements.get("pop-widget") || customElements.define("pop-widget", $), typeof document < "u") {
2150
+ if (j([b(W)], Ct.prototype, "gridStore", void 0), customElements.get("pop-widget") || customElements.define("pop-widget", Ct), typeof document < "u") {
1338
2151
  let e = "https://rsms.me/inter/inter.css";
1339
2152
  if (!document.querySelector(`link[href="${e}"]`)) {
1340
2153
  let t = document.createElement("link");