@popgrids/embed 0.0.3 → 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.
- package/AGENTS.md +14 -0
- package/dist/assets/wordmark-svg.d.ts +7 -0
- package/dist/assets/wordmark-svg.d.ts.map +1 -0
- package/dist/components/pop-account-switcher.d.ts +31 -0
- package/dist/components/pop-account-switcher.d.ts.map +1 -0
- package/dist/components/pop-auth-code.d.ts +22 -0
- package/dist/components/pop-auth-code.d.ts.map +1 -0
- package/dist/components/pop-auth-email.d.ts +18 -0
- package/dist/components/pop-auth-email.d.ts.map +1 -0
- package/dist/components/pop-auth-join.d.ts +20 -0
- package/dist/components/pop-auth-join.d.ts.map +1 -0
- package/dist/components/pop-auth-no-code.d.ts +14 -0
- package/dist/components/pop-auth-no-code.d.ts.map +1 -0
- package/dist/components/pop-auth-panel.d.ts +17 -7
- package/dist/components/pop-auth-panel.d.ts.map +1 -1
- package/dist/components/pop-button-link.d.ts +43 -0
- package/dist/components/pop-button-link.d.ts.map +1 -0
- package/dist/components/pop-comment-bar.d.ts +2 -0
- package/dist/components/pop-comment-bar.d.ts.map +1 -1
- package/dist/components/pop-comment-icon.d.ts +3 -0
- package/dist/components/pop-comment-icon.d.ts.map +1 -1
- package/dist/components/pop-comment-thread.d.ts.map +1 -1
- package/dist/components/pop-comment.d.ts +2 -0
- package/dist/components/pop-comment.d.ts.map +1 -1
- package/dist/components/pop-feed.d.ts +15 -0
- package/dist/components/pop-feed.d.ts.map +1 -1
- package/dist/components/pop-grid.d.ts +9 -0
- package/dist/components/pop-grid.d.ts.map +1 -1
- package/dist/components/pop-widget.d.ts.map +1 -1
- package/dist/components/refs.d.ts +8 -0
- package/dist/components/refs.d.ts.map +1 -0
- package/dist/embed.js +2612 -1721
- package/dist/embed.js.map +1 -1
- package/dist/index.cjs +1033 -131
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1439 -552
- package/dist/index.js.map +1 -1
- package/dist/lib/backoff.d.ts +11 -0
- package/dist/lib/backoff.d.ts.map +1 -0
- package/dist/lib/popup-auth.d.ts +10 -4
- package/dist/lib/popup-auth.d.ts.map +1 -1
- package/dist/store/embed-auth-store.d.ts +201 -0
- package/dist/store/embed-auth-store.d.ts.map +1 -0
- package/dist/store/grid-store.d.ts +26 -1
- package/dist/store/grid-store.d.ts.map +1 -1
- package/dist/types/models.d.ts +14 -2
- package/dist/types/models.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/store/auth-store.d.ts +0 -8
- package/dist/store/auth-store.d.ts.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,171 +1,1194 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
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
|
-
},
|
|
8
|
-
|
|
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
|
-
},
|
|
11
|
-
let n = window.open(
|
|
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
|
-
},
|
|
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
|
|
18
|
-
let
|
|
19
|
-
return typeof
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
},
|
|
26
|
-
|
|
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,
|
|
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
|
-
},
|
|
52
|
+
}, c = (e) => {
|
|
35
53
|
if (e.origin === a) {
|
|
36
|
-
if (
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
60
|
+
n?.onAuthSuccess?.(t), s("resolve");
|
|
61
|
+
return;
|
|
52
62
|
}
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
59
|
-
},
|
|
60
|
-
window.removeEventListener("message",
|
|
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",
|
|
63
|
-
}),
|
|
64
|
-
await
|
|
65
|
-
},
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
|
88
|
-
|
|
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
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
|
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
|
-
},
|
|
1167
|
+
}, U = (e, t) => {
|
|
151
1168
|
let n = e?.previewCount ?? t;
|
|
152
|
-
return n > 0 ? n :
|
|
153
|
-
},
|
|
154
|
-
|
|
155
|
-
|
|
1169
|
+
return n > 0 ? n : V;
|
|
1170
|
+
}, Xe = (e, t) => e && {
|
|
1171
|
+
...e,
|
|
1172
|
+
...t
|
|
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(() => {
|
|
156
1176
|
let e = this.replyingTo.value;
|
|
157
1177
|
return e ? this.comments.value.find((t) => t.id === e) ?? null : null;
|
|
158
|
-
}), this.editingComment =
|
|
1178
|
+
}), this.editingComment = o(() => {
|
|
159
1179
|
let e = this.editingCommentId.value;
|
|
160
1180
|
return e ? this.comments.value.find((t) => t.id === e) ?? null : null;
|
|
161
|
-
}), this.previewComments =
|
|
162
|
-
let 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));
|
|
163
1183
|
for (let i of r) {
|
|
164
1184
|
let r = i.author;
|
|
165
1185
|
if (!(!r?.id || t.has(r.id)) && (t.add(r.id), n.push(r), n.length >= e)) break;
|
|
166
1186
|
}
|
|
167
1187
|
return n.reverse();
|
|
168
|
-
}), this.apiUrl =
|
|
1188
|
+
}), this.apiUrl = e.apiUrl, this.publicKey = e.publicKey, this.pageUrl = e.pageUrl, this.externalId = e.externalId?.trim() || null, this.authStore = e.authStore;
|
|
1189
|
+
}
|
|
1190
|
+
setOverrides(e) {
|
|
1191
|
+
this._overrides.value = e;
|
|
169
1192
|
}
|
|
170
1193
|
identityParams() {
|
|
171
1194
|
let e = new URLSearchParams({ pageUrl: this.pageUrl });
|
|
@@ -178,11 +1201,11 @@ var de = 3e4, w = 3, T = (e) => {
|
|
|
178
1201
|
async load() {
|
|
179
1202
|
this.loading.value = !0, this.error.value = null;
|
|
180
1203
|
try {
|
|
181
|
-
let e = await
|
|
1204
|
+
let e = await this.authStore.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}`);
|
|
182
1205
|
if (!e.ok) return this.error.value = "There was a problem loading the PopGrid", !1;
|
|
183
1206
|
let t = await e.json();
|
|
184
|
-
this.
|
|
185
|
-
let n = await
|
|
1207
|
+
this._fetchedGrid.value = t.grid, this.connectRealtime();
|
|
1208
|
+
let n = await this.authStore.fetchWithToken(`/api/v1/embed/grids/${this.publicKey}/comments?${this.identityParams()}`);
|
|
186
1209
|
if (n.ok) {
|
|
187
1210
|
let e = await n.json();
|
|
188
1211
|
this.comments.value = e.comments;
|
|
@@ -195,9 +1218,8 @@ var de = 3e4, w = 3, T = (e) => {
|
|
|
195
1218
|
}
|
|
196
1219
|
}
|
|
197
1220
|
async postComment(e, t) {
|
|
198
|
-
let n =
|
|
1221
|
+
let n = await this.authStore.authorizedFetch(`/api/v1/embed/grids/${this.publicKey}/comments`, {
|
|
199
1222
|
method: "POST",
|
|
200
|
-
credentials: "include",
|
|
201
1223
|
headers: { "Content-Type": "application/json" },
|
|
202
1224
|
body: JSON.stringify({
|
|
203
1225
|
body: e,
|
|
@@ -205,46 +1227,51 @@ var de = 3e4, w = 3, T = (e) => {
|
|
|
205
1227
|
externalId: this.externalId ?? void 0,
|
|
206
1228
|
parentCommentId: t
|
|
207
1229
|
})
|
|
208
|
-
})
|
|
209
|
-
if (
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
let i = await r.json();
|
|
215
|
-
return this.upsertComment(i.comment), i.comment.author && !g.value && (g.value = {
|
|
216
|
-
id: i.comment.author.id,
|
|
217
|
-
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 ?? "",
|
|
218
1236
|
email: "",
|
|
219
|
-
image:
|
|
220
|
-
}),
|
|
1237
|
+
image: r.comment.author.image
|
|
1238
|
+
}), r.comment;
|
|
221
1239
|
}
|
|
222
1240
|
destroy() {
|
|
223
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);
|
|
224
1242
|
}
|
|
225
|
-
connectRealtime() {
|
|
1243
|
+
async connectRealtime() {
|
|
226
1244
|
let e = this.grid.value?.connectUrl;
|
|
227
1245
|
if (!e || this.disposed) return;
|
|
228
1246
|
this.socket &&= (this.socket.onopen = null, this.socket.onmessage = null, this.socket.onclose = null, this.socket.onerror = null, this.socket.close(), null);
|
|
229
|
-
let t =
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
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 = () => {
|
|
233
1260
|
this.reconnectAttempt = 0;
|
|
234
|
-
},
|
|
1261
|
+
}, r.onmessage = (e) => {
|
|
235
1262
|
try {
|
|
236
1263
|
let t = JSON.parse(String(e.data));
|
|
237
1264
|
t.type === "comment.created" && t.comment ? this.upsertComment(t.comment) : t.type === "comment.updated" && t.comment && this.updateCommentInList(t.comment);
|
|
238
1265
|
} catch {}
|
|
239
|
-
},
|
|
1266
|
+
}, r.onclose = () => {
|
|
240
1267
|
this.disposed || this.scheduleReconnect();
|
|
241
|
-
},
|
|
242
|
-
|
|
1268
|
+
}, r.onerror = () => {
|
|
1269
|
+
r.close();
|
|
243
1270
|
};
|
|
244
1271
|
}
|
|
245
1272
|
scheduleReconnect() {
|
|
246
1273
|
if (this.disposed || this.reconnectTimer) return;
|
|
247
|
-
let e =
|
|
1274
|
+
let e = d(this.reconnectAttempt, 1e3, Ye);
|
|
248
1275
|
this.reconnectAttempt += 1, this.reconnectTimer = setTimeout(() => {
|
|
249
1276
|
this.reconnectTimer = null, this.connectRealtime();
|
|
250
1277
|
}, e);
|
|
@@ -253,288 +1280,40 @@ var de = 3e4, w = 3, T = (e) => {
|
|
|
253
1280
|
this.comments.value.some((t) => t.id === e.id) || (this.comments.value = [...this.comments.value, e]);
|
|
254
1281
|
}
|
|
255
1282
|
async editComment(e, t) {
|
|
256
|
-
let n =
|
|
1283
|
+
let n = await this.authStore.authorizedFetch(`/api/v1/embed/grids/${this.publicKey}/comments/${e}`, {
|
|
257
1284
|
method: "PATCH",
|
|
258
|
-
credentials: "include",
|
|
259
1285
|
headers: { "Content-Type": "application/json" },
|
|
260
1286
|
body: JSON.stringify({
|
|
261
1287
|
body: t,
|
|
262
1288
|
pageUrl: this.pageUrl,
|
|
263
1289
|
externalId: this.externalId ?? void 0
|
|
264
1290
|
})
|
|
265
|
-
})
|
|
266
|
-
if (r.status === 401) {
|
|
267
|
-
if (!await x(this.apiUrl, this.publicKey)) return null;
|
|
268
|
-
r = await n();
|
|
269
|
-
}
|
|
270
|
-
if (!r.ok) return null;
|
|
271
|
-
let i = await r.json();
|
|
272
|
-
return this.updateCommentInList(i.comment), i.comment;
|
|
273
|
-
}
|
|
274
|
-
async deleteComment(e) {
|
|
275
|
-
let t = async () => fetch(`${this.apiUrl}/api/v1/embed/grids/${this.publicKey}/comments/${e}?${this.identityParams()}`, {
|
|
276
|
-
method: "DELETE",
|
|
277
|
-
credentials: "include"
|
|
278
|
-
}), n = await t();
|
|
279
|
-
if (n.status === 401) {
|
|
280
|
-
if (!await x(this.apiUrl, this.publicKey)) return null;
|
|
281
|
-
n = await t();
|
|
282
|
-
}
|
|
1291
|
+
});
|
|
283
1292
|
if (!n.ok) return null;
|
|
284
1293
|
let r = await n.json();
|
|
285
1294
|
return this.updateCommentInList(r.comment), r.comment;
|
|
286
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
|
+
}
|
|
287
1302
|
async flagComment(e) {
|
|
288
|
-
|
|
289
|
-
method: "POST",
|
|
290
|
-
credentials: "include"
|
|
291
|
-
}), n = await t();
|
|
292
|
-
if (n.status === 401) {
|
|
293
|
-
if (!await x(this.apiUrl, this.publicKey)) return !1;
|
|
294
|
-
n = await t();
|
|
295
|
-
}
|
|
296
|
-
return n.ok;
|
|
1303
|
+
return (await this.authStore.authorizedFetch(`/api/v1/embed/grids/${this.publicKey}/comments/${e}/flag?${this.identityParams()}`, { method: "POST" })).ok;
|
|
297
1304
|
}
|
|
298
1305
|
updateCommentInList(e) {
|
|
299
1306
|
this.comments.value = this.comments.value.map((t) => t.id === e.id ? e : t);
|
|
300
1307
|
}
|
|
301
|
-
}, fe = "@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}}", pe = "@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}}", me = "@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;
|
|
302
|
-
function M() {
|
|
303
|
-
if (typeof window > "u" || typeof document > "u") return !1;
|
|
304
|
-
let e = document.documentElement.classList.contains("dark") || document.body.classList.contains("dark"), t = document.documentElement.classList.contains("light") || document.body.classList.contains("light");
|
|
305
|
-
return e ? !0 : t ? !1 : (j ||= window.matchMedia("(prefers-color-scheme: dark)"), j.matches);
|
|
306
|
-
}
|
|
307
|
-
function N() {
|
|
308
|
-
let e = M();
|
|
309
|
-
e !== O && (O = e, k.forEach((e) => {
|
|
310
|
-
let t = O || !!e.closest(".dark");
|
|
311
|
-
e.classList.toggle("dark", t);
|
|
312
|
-
}));
|
|
313
|
-
}
|
|
314
|
-
var P = () => {
|
|
315
|
-
N();
|
|
316
|
-
};
|
|
317
|
-
function he(e) {
|
|
318
|
-
if (typeof window > "u" || typeof document > "u") return;
|
|
319
|
-
k.size === 0 && (O = M(), A = new MutationObserver(() => {
|
|
320
|
-
N();
|
|
321
|
-
}), A.observe(document.documentElement, {
|
|
322
|
-
attributes: !0,
|
|
323
|
-
attributeFilter: ["class"]
|
|
324
|
-
}), A.observe(document.body, {
|
|
325
|
-
attributes: !0,
|
|
326
|
-
attributeFilter: ["class"]
|
|
327
|
-
}), j = window.matchMedia("(prefers-color-scheme: dark)"), j.addEventListener("change", P)), k.add(e);
|
|
328
|
-
let t = O || !!e.closest(".dark");
|
|
329
|
-
e.classList.toggle("dark", t);
|
|
330
|
-
}
|
|
331
|
-
function ge(e) {
|
|
332
|
-
k.delete(e), k.size === 0 && (A &&= (A.disconnect(), null), j &&= (j.removeEventListener("change", P), null));
|
|
333
|
-
}
|
|
334
|
-
//#endregion
|
|
335
|
-
//#region src/components/base-element.ts
|
|
336
|
-
function F(e) {
|
|
337
|
-
let t = new CSSStyleSheet();
|
|
338
|
-
return t.replaceSync(e), t;
|
|
339
|
-
}
|
|
340
|
-
var _e = F(fe), ve = F(pe), ye = F(me), I = class extends HTMLElement {
|
|
341
|
-
get styleSheets() {
|
|
342
|
-
return [];
|
|
343
|
-
}
|
|
344
|
-
constructor() {
|
|
345
|
-
super(), this.baseStyleSheets = [
|
|
346
|
-
_e,
|
|
347
|
-
ve,
|
|
348
|
-
ye
|
|
349
|
-
], this._hasRendered = !1, this._disposables = [], this.events = {}, this.attachShadow({ mode: "open" }), this.shadowRoot && (this.shadowRoot.adoptedStyleSheets = this.styles);
|
|
350
|
-
}
|
|
351
|
-
attributeChangedCallback(e, t, n) {
|
|
352
|
-
if (t === n) return;
|
|
353
|
-
let r = `on${e.split("-").map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join("")}Changed`;
|
|
354
|
-
typeof this[r] == "function" && this[r](n, t);
|
|
355
|
-
}
|
|
356
|
-
addEffect(e) {
|
|
357
|
-
this._disposables.push(t(e));
|
|
358
|
-
}
|
|
359
|
-
connectedCallback() {
|
|
360
|
-
he(this), r(() => {
|
|
361
|
-
this.render(), this._bindEvents(), this.setupEffects();
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
disconnectedCallback() {
|
|
365
|
-
ge(this), this._disposables.forEach((e) => e()), this._disposables = [];
|
|
366
|
-
}
|
|
367
|
-
_bindEvents() {
|
|
368
|
-
let e = this.shadowRoot;
|
|
369
|
-
e && Object.keys(this.events).forEach((t) => {
|
|
370
|
-
e.addEventListener(t, this);
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
|
-
handleEvent(e) {
|
|
374
|
-
let t = this.events[e.type];
|
|
375
|
-
t && typeof this[t] == "function" && this[t](e);
|
|
376
|
-
}
|
|
377
|
-
emit(e, t = {}) {
|
|
378
|
-
this.dispatchEvent(new CustomEvent(e, {
|
|
379
|
-
bubbles: !0,
|
|
380
|
-
composed: !0,
|
|
381
|
-
...t
|
|
382
|
-
}));
|
|
383
|
-
}
|
|
384
|
-
get styles() {
|
|
385
|
-
return [...this.baseStyleSheets, ...this.styleSheets];
|
|
386
|
-
}
|
|
387
|
-
setupEffects() {}
|
|
388
|
-
render() {
|
|
389
|
-
this.shadowRoot && (this.shadowRoot.innerHTML = this.getTemplate(), this._hasRendered = !0);
|
|
390
|
-
}
|
|
391
|
-
hideElement(e, t, n = !0) {
|
|
392
|
-
if (!this.shadowRoot || !this._hasRendered) return;
|
|
393
|
-
let r = this.shadowRoot.querySelector(e);
|
|
394
|
-
if (!r) {
|
|
395
|
-
console.warn(`Element not found for selector: ${e}`);
|
|
396
|
-
return;
|
|
397
|
-
}
|
|
398
|
-
n ? r.classList.toggle("hidden", t) : r.classList.toggle("invisible", t);
|
|
399
|
-
}
|
|
400
|
-
setText(e, t) {
|
|
401
|
-
let n = this.shadowRoot?.querySelector(e);
|
|
402
|
-
n && n.textContent !== String(t) && (n.textContent = String(t));
|
|
403
|
-
}
|
|
404
|
-
setAttr(e, t, n) {
|
|
405
|
-
let r = this.shadowRoot?.querySelector(e);
|
|
406
|
-
r && (n === null ? r.removeAttribute(t) : r.getAttribute(t) !== n && r.setAttribute(t, n));
|
|
407
|
-
}
|
|
408
|
-
toggleClass(e, t, n) {
|
|
409
|
-
let r = this.shadowRoot?.querySelector(e);
|
|
410
|
-
r && r.classList.toggle(t, n);
|
|
411
|
-
}
|
|
412
|
-
getElement(e) {
|
|
413
|
-
return this.shadowRoot?.querySelector(e) ?? null;
|
|
414
|
-
}
|
|
415
|
-
};
|
|
416
|
-
//#endregion
|
|
417
|
-
//#region \0@oxc-project+runtime@0.133.0/helpers/esm/decorate.js
|
|
418
|
-
function L(e, t, n, r) {
|
|
419
|
-
var i = arguments.length, a = i < 3 ? t : r === null ? r = Object.getOwnPropertyDescriptor(t, n) : r, o;
|
|
420
|
-
if (typeof Reflect == "object" && typeof Reflect.decorate == "function") a = Reflect.decorate(e, t, n, r);
|
|
421
|
-
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);
|
|
422
|
-
return i > 3 && a && Object.defineProperty(t, n, a), a;
|
|
423
|
-
}
|
|
424
|
-
//#endregion
|
|
425
|
-
//#region src/components/pop-auth-panel.ts
|
|
426
|
-
var be = 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 {
|
|
427
|
-
constructor(...e) {
|
|
428
|
-
super(...e), this.events = { click: "onClick" };
|
|
429
|
-
}
|
|
430
|
-
get styleSheets() {
|
|
431
|
-
return [be];
|
|
432
|
-
}
|
|
433
|
-
onClick(e) {
|
|
434
|
-
e.target.closest(".join-btn") && this.handleJoin();
|
|
435
|
-
}
|
|
436
|
-
setupEffects() {
|
|
437
|
-
this.addEffect(() => {
|
|
438
|
-
let e = v.value, t = _.value, n = this.getElement(".join-btn");
|
|
439
|
-
n && (n.disabled = e, n.textContent = e ? "Signing in…" : "Join the Conversation");
|
|
440
|
-
let r = this.getElement(".error");
|
|
441
|
-
r && (t ? (r.hidden = !1, r.textContent = t) : (r.hidden = !0, r.textContent = ""));
|
|
442
|
-
});
|
|
443
|
-
}
|
|
444
|
-
async handleJoin() {
|
|
445
|
-
se(), await x(this.gridStore.apiUrl, this.gridStore.publicKey);
|
|
446
|
-
}
|
|
447
|
-
getTemplate() {
|
|
448
|
-
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 ";
|
|
449
|
-
}
|
|
450
|
-
};
|
|
451
|
-
L([C(D)], R.prototype, "gridStore", void 0), customElements.get("pop-auth-panel") || customElements.define("pop-auth-panel", R);
|
|
452
|
-
//#endregion
|
|
453
|
-
//#region src/assets/popgrids-letter-p.png?inline
|
|
454
|
-
var xe = "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("."), Se = (e) => typeof e == "number" ? z[e % z.length] ?? "#e5e7eb" : z[Math.floor(Math.random() * z.length)];
|
|
455
|
-
function Ce(e) {
|
|
456
|
-
let t = new TextEncoder().encode(e), n = 2166136261;
|
|
457
|
-
for (let e = 0; e < t.length; e++) {
|
|
458
|
-
let r = t[e] ?? 0;
|
|
459
|
-
n ^= r, n = Math.imul(n, 16777619);
|
|
460
|
-
}
|
|
461
|
-
return n >>> 0;
|
|
462
|
-
}
|
|
463
|
-
function we(e) {
|
|
464
|
-
return z[Ce(e) % z.length] ?? "#e5e7eb";
|
|
465
|
-
}
|
|
466
|
-
//#endregion
|
|
467
|
-
//#region src/components/pop-comment-avatar.ts
|
|
468
|
-
var Te = 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"), Ee = class extends I {
|
|
469
|
-
constructor() {
|
|
470
|
-
super(), this._backgroundColor = Se() ?? "#e5e7eb";
|
|
471
|
-
}
|
|
472
|
-
static get observedAttributes() {
|
|
473
|
-
return [
|
|
474
|
-
"size",
|
|
475
|
-
"data-color-key",
|
|
476
|
-
"deleted"
|
|
477
|
-
];
|
|
478
|
-
}
|
|
479
|
-
onSizeChanged() {
|
|
480
|
-
this.render();
|
|
481
|
-
}
|
|
482
|
-
onDataColorKeyChanged() {
|
|
483
|
-
this.render();
|
|
484
|
-
}
|
|
485
|
-
onDeletedChanged() {
|
|
486
|
-
this.render();
|
|
487
|
-
}
|
|
488
|
-
get styleSheets() {
|
|
489
|
-
return [Te];
|
|
490
|
-
}
|
|
491
|
-
get size() {
|
|
492
|
-
return this.getAttribute("size") || "md";
|
|
493
|
-
}
|
|
494
|
-
set size(e) {
|
|
495
|
-
this.setAttribute("size", e);
|
|
496
|
-
}
|
|
497
|
-
get deleted() {
|
|
498
|
-
return this.hasAttribute("deleted");
|
|
499
|
-
}
|
|
500
|
-
set deleted(e) {
|
|
501
|
-
e ? this.setAttribute("deleted", "") : this.removeAttribute("deleted");
|
|
502
|
-
}
|
|
503
|
-
getTemplate() {
|
|
504
|
-
let e = this.size, t = this.deleted, n = this.getAttribute("data-color-key"), r = t ? "var(--pop-muted-foreground, #e5e7eb)" : n ? we(n) : this._backgroundColor;
|
|
505
|
-
return `
|
|
506
|
-
<div class="comment-avatar comment-avatar--size-${e}" part="base">
|
|
507
|
-
<div class="comment-avatar__background mask mask-squircle" part="background"></div>
|
|
508
|
-
${t ? `<div
|
|
509
|
-
class="comment-avatar__content mask mask-squircle"
|
|
510
|
-
part="content"
|
|
511
|
-
style="background-color: ${r}; opacity: 0.15"
|
|
512
|
-
><img class="comment-avatar__deleted-mark" src="${xe}" alt="Deleted user" /></div>` : `<slot
|
|
513
|
-
class="comment-avatar__content mask mask-squircle"
|
|
514
|
-
part="content"
|
|
515
|
-
style="background-color: ${r};"
|
|
516
|
-
></slot>`}
|
|
517
|
-
</div>
|
|
518
|
-
`;
|
|
519
|
-
}
|
|
520
|
-
};
|
|
521
|
-
customElements.get("pop-comment-avatar") || customElements.define("pop-comment-avatar", Ee);
|
|
522
|
-
//#endregion
|
|
523
|
-
//#region src/helpers/author.ts
|
|
524
|
-
function B(e) {
|
|
525
|
-
return e ? e.split(" ").map((e) => e[0] ?? "").join("").toUpperCase().slice(0, 2) : "?";
|
|
526
|
-
}
|
|
527
|
-
//#endregion
|
|
528
|
-
//#region src/components/pop-comment-bar.ts
|
|
529
|
-
var De = 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"), V = "<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>", H = 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 {
|
|
530
1309
|
constructor(...e) {
|
|
531
1310
|
super(...e), this.events = { click: "onClick" };
|
|
532
1311
|
}
|
|
533
1312
|
get styleSheets() {
|
|
534
|
-
return [
|
|
1313
|
+
return [Ze];
|
|
535
1314
|
}
|
|
536
1315
|
onClick(e) {
|
|
537
|
-
e.target.closest("
|
|
1316
|
+
e.target.closest(A("send")) && this.handleSend();
|
|
538
1317
|
}
|
|
539
1318
|
setupEffects() {
|
|
540
1319
|
let e = null, t = null;
|
|
@@ -556,21 +1335,12 @@ var De = F("\n :host {\n background: var(--pop-background);\n border-top:
|
|
|
556
1335
|
}
|
|
557
1336
|
t = e?.id ?? null;
|
|
558
1337
|
}), this.addEffect(() => {
|
|
559
|
-
let e =
|
|
560
|
-
if (!t) return;
|
|
561
|
-
let n = this.gridStore.replyingToComment.value?.author;
|
|
562
|
-
if (
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
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>`;
|
|
566
|
-
} else if (n) {
|
|
567
|
-
t.classList.add("has-reply");
|
|
568
|
-
let r = n.id ?? n.name ?? "", i = e?.id ?? e?.name ?? "";
|
|
569
|
-
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>`);
|
|
570
|
-
} else {
|
|
571
|
-
t.classList.remove("has-reply");
|
|
572
|
-
let n = e?.id ?? e?.name ?? "";
|
|
573
|
-
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);
|
|
574
1344
|
}
|
|
575
1345
|
});
|
|
576
1346
|
}
|
|
@@ -589,30 +1359,39 @@ var De = F("\n :host {\n background: var(--pop-background);\n border-top:
|
|
|
589
1359
|
}
|
|
590
1360
|
getTemplate() {
|
|
591
1361
|
return `
|
|
592
|
-
<div class="logo-watermark">${
|
|
1362
|
+
<div class="logo-watermark">${Qe}</div>
|
|
593
1363
|
<div class="bar">
|
|
594
|
-
<div class="bar__user">
|
|
595
|
-
<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>
|
|
596
1371
|
</div>
|
|
597
1372
|
<div class="bar__input-wrap">
|
|
598
1373
|
<pop-comment-input></pop-comment-input>
|
|
599
1374
|
</div>
|
|
600
|
-
<
|
|
601
|
-
|
|
602
|
-
|
|
1375
|
+
<pop-comment-icon
|
|
1376
|
+
class="bar__send"
|
|
1377
|
+
data-ref="send"
|
|
1378
|
+
theme="neutral"
|
|
1379
|
+
variant="send"
|
|
1380
|
+
aria-label="Send comment"
|
|
1381
|
+
></pop-comment-icon>
|
|
603
1382
|
</div>
|
|
604
1383
|
`;
|
|
605
1384
|
}
|
|
606
1385
|
};
|
|
607
|
-
|
|
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);
|
|
608
1387
|
//#endregion
|
|
609
1388
|
//#region src/components/pop-comment-icon.ts
|
|
610
|
-
var Oe = 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 display: none;\n height: calc(100% + 3px);\n inset: -1.5px;\n transform-origin: center;\n transform: scale(var(--pop-comment-icon-scale));\n transition: all 200ms ease-out;\n width: calc(100% + 3px);\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 @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 transition: transform var(--pop-ease-pop-hover) var(--pop-duration-pop-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: 100ms;\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-black);\n --pop-comment-icon-color-active: var(--pop-comment-color-black);\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-hover);\n --pop-comment-icon-background-active: var(--pop-comment-bg-singular-hover);\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"), ke = 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 {
|
|
611
1390
|
constructor(...e) {
|
|
612
1391
|
super(...e), this.events = { click: "onClick" };
|
|
613
1392
|
}
|
|
614
1393
|
get styleSheets() {
|
|
615
|
-
return [
|
|
1394
|
+
return [$e];
|
|
616
1395
|
}
|
|
617
1396
|
static get observedAttributes() {
|
|
618
1397
|
return [
|
|
@@ -622,9 +1401,13 @@ var Oe = F("\n :host {\n /* Mode-level theme colors (defaults for light mode
|
|
|
622
1401
|
"theme",
|
|
623
1402
|
"variant",
|
|
624
1403
|
"type",
|
|
625
|
-
"disabled"
|
|
1404
|
+
"disabled",
|
|
1405
|
+
"aria-label"
|
|
626
1406
|
];
|
|
627
1407
|
}
|
|
1408
|
+
onAriaLabelChanged() {
|
|
1409
|
+
this.render();
|
|
1410
|
+
}
|
|
628
1411
|
onCounterChanged() {
|
|
629
1412
|
this.render();
|
|
630
1413
|
}
|
|
@@ -688,6 +1471,12 @@ var Oe = F("\n :host {\n /* Mode-level theme colors (defaults for light mode
|
|
|
688
1471
|
set disabled(e) {
|
|
689
1472
|
e ? this.setAttribute("disabled", "") : this.removeAttribute("disabled");
|
|
690
1473
|
}
|
|
1474
|
+
get ariaLabel() {
|
|
1475
|
+
return this.getAttribute("aria-label");
|
|
1476
|
+
}
|
|
1477
|
+
set ariaLabel(e) {
|
|
1478
|
+
e === null ? this.removeAttribute("aria-label") : this.setAttribute("aria-label", e);
|
|
1479
|
+
}
|
|
691
1480
|
onClick(e) {
|
|
692
1481
|
if (this.disabled) {
|
|
693
1482
|
e.preventDefault(), e.stopImmediatePropagation();
|
|
@@ -706,15 +1495,18 @@ var Oe = F("\n :host {\n /* Mode-level theme colors (defaults for light mode
|
|
|
706
1495
|
this.theme ? `comment-icon--theme-${this.theme}` : "",
|
|
707
1496
|
this.variant ? `comment-icon--variant-${this.variant}` : ""
|
|
708
1497
|
].filter(Boolean).join(" "), n = this.iconUrl ? `<img src="${this.iconUrl}" alt="" class="comment-icon__icon-image" />
|
|
709
|
-
<slot class="comment-icon__icon" name="icon">${this.icon}</slot>` : `<slot class="comment-icon__icon" name="icon">${this.icon}</slot
|
|
1498
|
+
<slot class="comment-icon__icon" name="icon">${this.icon}</slot>` : `<slot class="comment-icon__icon" name="icon">${this.icon}</slot>`, r = this.ariaLabel ? `aria-label="${this.ariaLabel}"` : "";
|
|
710
1499
|
return `
|
|
711
1500
|
<button
|
|
712
1501
|
class="${t}"
|
|
713
1502
|
part="base"
|
|
714
1503
|
type="${this.type}"
|
|
715
1504
|
${e}
|
|
1505
|
+
${r}
|
|
716
1506
|
>
|
|
717
|
-
<pop-focus-indicator
|
|
1507
|
+
<pop-focus-indicator
|
|
1508
|
+
class="comment-icon__focus-indicator mask mask-squircle"
|
|
1509
|
+
></pop-focus-indicator>
|
|
718
1510
|
<div class="comment-icon__inner mask mask-squircle">
|
|
719
1511
|
<div class="comment-icon__icon-container" part="icon">${n}</div>
|
|
720
1512
|
</div>
|
|
@@ -722,10 +1514,10 @@ var Oe = F("\n :host {\n /* Mode-level theme colors (defaults for light mode
|
|
|
722
1514
|
`;
|
|
723
1515
|
}
|
|
724
1516
|
};
|
|
725
|
-
customElements.get("pop-comment-icon") || customElements.define("pop-comment-icon",
|
|
1517
|
+
customElements.get("pop-comment-icon") || customElements.define("pop-comment-icon", et);
|
|
726
1518
|
//#endregion
|
|
727
1519
|
//#region src/components/pop-comment-input.ts
|
|
728
|
-
var
|
|
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 {
|
|
729
1521
|
constructor(...e) {
|
|
730
1522
|
super(...e), this.events = {
|
|
731
1523
|
input: "onInput",
|
|
@@ -733,7 +1525,7 @@ var Ae = F("\n :host {\n display: flex;\n flex: 1;\n min-width: 0;\n
|
|
|
733
1525
|
};
|
|
734
1526
|
}
|
|
735
1527
|
get styleSheets() {
|
|
736
|
-
return [
|
|
1528
|
+
return [tt];
|
|
737
1529
|
}
|
|
738
1530
|
onInput(e) {
|
|
739
1531
|
let t = e.target;
|
|
@@ -766,18 +1558,18 @@ var Ae = F("\n :host {\n display: flex;\n flex: 1;\n min-width: 0;\n
|
|
|
766
1558
|
return "\n <textarea rows=\"1\" placeholder=\"Comment\"></textarea>\n ";
|
|
767
1559
|
}
|
|
768
1560
|
};
|
|
769
|
-
|
|
1561
|
+
j([b(W)], K.prototype, "gridStore", void 0), customElements.get("pop-comment-input") || customElements.define("pop-comment-input", K);
|
|
770
1562
|
//#endregion
|
|
771
1563
|
//#region src/components/pop-comment-thread.ts
|
|
772
|
-
var
|
|
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 {
|
|
773
1565
|
constructor(...e) {
|
|
774
1566
|
super(...e), this._showAll = !1, this.events = { click: "onClick" };
|
|
775
1567
|
}
|
|
776
1568
|
get styleSheets() {
|
|
777
|
-
return [
|
|
1569
|
+
return [nt];
|
|
778
1570
|
}
|
|
779
1571
|
onClick(e) {
|
|
780
|
-
e.target.closest("
|
|
1572
|
+
e.target.closest(A("more")) && (this._showAll = !0, this.render());
|
|
781
1573
|
}
|
|
782
1574
|
setupEffects() {
|
|
783
1575
|
this.addEffect(() => {
|
|
@@ -788,11 +1580,11 @@ var je = F("\n :host {\n display: block;\n\n --pop-thread-link: rgba(0, 0
|
|
|
788
1580
|
getTemplate() {
|
|
789
1581
|
let e = this.getAttribute("comment-id");
|
|
790
1582
|
if (!e) return "";
|
|
791
|
-
let t = this.gridStore.repliesFor(e), n = this._showAll || t.length <=
|
|
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">
|
|
792
1584
|
<div class="thread__more-dot"></div>
|
|
793
|
-
<button
|
|
1585
|
+
<pop-button-link data-ref="more" size="sm" theme="default">
|
|
794
1586
|
Show ${r} more ${r === 1 ? "reply" : "replies"}
|
|
795
|
-
</button>
|
|
1587
|
+
</pop-button-link>
|
|
796
1588
|
</div>` : "";
|
|
797
1589
|
return `
|
|
798
1590
|
<div class="thread">
|
|
@@ -805,19 +1597,19 @@ var je = F("\n :host {\n display: block;\n\n --pop-thread-link: rgba(0, 0
|
|
|
805
1597
|
`;
|
|
806
1598
|
}
|
|
807
1599
|
};
|
|
808
|
-
|
|
1600
|
+
j([b(W)], J.prototype, "gridStore", void 0), customElements.get("pop-comment-thread") || customElements.define("pop-comment-thread", J);
|
|
809
1601
|
//#endregion
|
|
810
1602
|
//#region src/helpers/time.ts
|
|
811
|
-
function
|
|
1603
|
+
function Y(e) {
|
|
812
1604
|
let t = e instanceof Date ? e : new Date(e), n = (Date.now() - t.getTime()) / 1e3;
|
|
813
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`;
|
|
814
1606
|
}
|
|
815
1607
|
//#endregion
|
|
816
1608
|
//#region src/components/pop-comment.ts
|
|
817
|
-
var
|
|
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 {
|
|
818
1610
|
constructor(...e) {
|
|
819
1611
|
super(...e), this.events = { click: "onClick" }, this._expanded = !1, this._dropdownOpen = !1, this._onOutsideClick = (e) => {
|
|
820
|
-
let t = e.composedPath(), n = this.getElement("
|
|
1612
|
+
let t = e.composedPath(), n = this.getElement(A("dropdown")), r = this.getElement(A("menu-trigger"));
|
|
821
1613
|
n && r && !t.includes(n) && !t.includes(r) && this.closeDropdown();
|
|
822
1614
|
}, this._timeUpdateTimer = null;
|
|
823
1615
|
}
|
|
@@ -837,39 +1629,39 @@ var Me = F("\n :host {\n display: block;\n width: 100%;\n --pop-commen
|
|
|
837
1629
|
return this.size === "sm" ? "xs" : "sm";
|
|
838
1630
|
}
|
|
839
1631
|
get styleSheets() {
|
|
840
|
-
return [
|
|
1632
|
+
return [rt];
|
|
841
1633
|
}
|
|
842
1634
|
toggleDropdown() {
|
|
843
1635
|
this._dropdownOpen ? this.closeDropdown() : this.openDropdown();
|
|
844
1636
|
}
|
|
845
1637
|
openDropdown() {
|
|
846
1638
|
this._dropdownOpen = !0;
|
|
847
|
-
let
|
|
848
|
-
if (
|
|
849
|
-
|
|
850
|
-
let
|
|
851
|
-
|
|
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, {
|
|
852
1644
|
placement: "bottom-end",
|
|
853
1645
|
middleware: [
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
1646
|
+
r(4),
|
|
1647
|
+
n(),
|
|
1648
|
+
a({ padding: 8 })
|
|
857
1649
|
],
|
|
858
1650
|
strategy: "fixed"
|
|
859
|
-
}).then(({ x:
|
|
860
|
-
Object.assign(
|
|
861
|
-
left: `${
|
|
862
|
-
top: `${
|
|
1651
|
+
}).then(({ x: e, y: t }) => {
|
|
1652
|
+
Object.assign(i.style, {
|
|
1653
|
+
left: `${e}px`,
|
|
1654
|
+
top: `${t}px`,
|
|
863
1655
|
position: "fixed"
|
|
864
1656
|
});
|
|
865
1657
|
});
|
|
866
1658
|
};
|
|
867
|
-
this._floatingCleanup =
|
|
1659
|
+
this._floatingCleanup = e(o, i, s), document.addEventListener("mousedown", this._onOutsideClick);
|
|
868
1660
|
}
|
|
869
1661
|
}
|
|
870
1662
|
closeDropdown() {
|
|
871
1663
|
this._dropdownOpen = !1;
|
|
872
|
-
let e = this.getElement("
|
|
1664
|
+
let e = this.getElement(A("dropdown"));
|
|
873
1665
|
e && e.classList.remove("is-open"), this._floatingCleanup &&= (this._floatingCleanup(), void 0), document.removeEventListener("mousedown", this._onOutsideClick);
|
|
874
1666
|
}
|
|
875
1667
|
async deleteComment() {
|
|
@@ -882,31 +1674,31 @@ var Me = F("\n :host {\n display: block;\n width: 100%;\n --pop-commen
|
|
|
882
1674
|
}
|
|
883
1675
|
onClick(e) {
|
|
884
1676
|
let t = e.target;
|
|
885
|
-
if (t.closest("
|
|
1677
|
+
if (t.closest(A("menu-trigger"))) {
|
|
886
1678
|
e.stopPropagation(), this.toggleDropdown();
|
|
887
1679
|
return;
|
|
888
1680
|
}
|
|
889
|
-
let n = t.closest("
|
|
1681
|
+
let n = t.closest(A("dropdown-item"));
|
|
890
1682
|
if (n) {
|
|
891
1683
|
e.stopPropagation();
|
|
892
1684
|
let t = n.getAttribute("data-action"), r = this.getAttribute("comment-id");
|
|
893
1685
|
t === "edit" && r ? (this.gridStore.replyingTo.value = null, this.gridStore.editingCommentId.value = r) : t === "delete" ? this.deleteComment() : t === "flag" && this.flagComment(), this.closeDropdown();
|
|
894
1686
|
return;
|
|
895
1687
|
}
|
|
896
|
-
if (t.closest("
|
|
1688
|
+
if (t.closest(A("dropdown"))) {
|
|
897
1689
|
e.stopPropagation();
|
|
898
1690
|
return;
|
|
899
1691
|
}
|
|
900
|
-
if (!
|
|
1692
|
+
if (!this.authStore.currentUser.value) return;
|
|
901
1693
|
let r = this.getAttribute("comment-id");
|
|
902
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());
|
|
903
1695
|
}
|
|
904
1696
|
expandText() {
|
|
905
|
-
let e = this.getElement("
|
|
1697
|
+
let e = this.getElement(A("text"));
|
|
906
1698
|
if (!this._expanded && e) {
|
|
907
1699
|
let t = e.offsetHeight;
|
|
908
1700
|
this._expanded = !0, this.render();
|
|
909
|
-
let n = this.getElement("
|
|
1701
|
+
let n = this.getElement(A("text"));
|
|
910
1702
|
if (n) {
|
|
911
1703
|
let e = n.scrollHeight;
|
|
912
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(() => {
|
|
@@ -925,8 +1717,8 @@ var Me = F("\n :host {\n display: block;\n width: 100%;\n --pop-commen
|
|
|
925
1717
|
let t = this.gridStore.comments.value.find((t) => t.id === e);
|
|
926
1718
|
if (!t) return;
|
|
927
1719
|
let n = () => {
|
|
928
|
-
let e = this.getElement("
|
|
929
|
-
e && (e.textContent =
|
|
1720
|
+
let e = this.getElement(A("timestamp"));
|
|
1721
|
+
e && (e.textContent = Y(t.createdAt));
|
|
930
1722
|
let r = Date.now() - (typeof t.createdAt == "number" ? t.createdAt : Date.parse(String(t.createdAt))), i = 6e4;
|
|
931
1723
|
i = r < 6e4 ? 5e3 : r < 36e5 ? 6e4 : 18e5, this._timeUpdateTimer = setTimeout(n, i);
|
|
932
1724
|
}, r = Date.now() - (typeof t.createdAt == "number" ? t.createdAt : Date.parse(String(t.createdAt))) < 6e4 ? 5e3 : 6e4;
|
|
@@ -937,7 +1729,7 @@ var Me = F("\n :host {\n display: block;\n width: 100%;\n --pop-commen
|
|
|
937
1729
|
}
|
|
938
1730
|
setupEffects() {
|
|
939
1731
|
this.addEffect(() => {
|
|
940
|
-
let e = this.getAttribute("comment-id"), t =
|
|
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;
|
|
941
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(() => {
|
|
942
1734
|
let t = this.shadowRoot?.querySelector(`#comment-${e}`);
|
|
943
1735
|
t ? t.scrollIntoView({
|
|
@@ -955,8 +1747,8 @@ var Me = F("\n :host {\n display: block;\n width: 100%;\n --pop-commen
|
|
|
955
1747
|
if (!e) return "";
|
|
956
1748
|
let t = this.gridStore.comments.value.find((t) => t.id === e);
|
|
957
1749
|
if (!t) return "";
|
|
958
|
-
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"}" />` :
|
|
959
|
-
<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">
|
|
960
1752
|
<svg
|
|
961
1753
|
width="18"
|
|
962
1754
|
height="18"
|
|
@@ -999,9 +1791,9 @@ var Me = F("\n :host {\n display: block;\n width: 100%;\n --pop-commen
|
|
|
999
1791
|
/>
|
|
1000
1792
|
</svg>
|
|
1001
1793
|
</button>
|
|
1002
|
-
<div class="comment__dropdown">
|
|
1003
|
-
${
|
|
1004
|
-
<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>
|
|
1005
1797
|
</div>
|
|
1006
1798
|
</div>` : "";
|
|
1007
1799
|
return `
|
|
@@ -1025,31 +1817,34 @@ var Me = F("\n :host {\n display: block;\n width: 100%;\n --pop-commen
|
|
|
1025
1817
|
<div class="comment__user-name">
|
|
1026
1818
|
${n ? "[Deleted]" : r ? "[Deleted user]" : t.author?.name ?? ""}
|
|
1027
1819
|
</div>
|
|
1028
|
-
<div class="comment__timestamp">${
|
|
1820
|
+
<div class="comment__timestamp" data-ref="timestamp">${Y(t.createdAt)}</div>
|
|
1029
1821
|
</div>
|
|
1030
|
-
${
|
|
1822
|
+
${f}
|
|
1031
1823
|
</div>
|
|
1032
|
-
<div class="comment__text${this._expanded ? " expanded" : ""}">${t.body}</div>
|
|
1824
|
+
<div class="comment__text${this._expanded ? " expanded" : ""}" data-ref="text">${t.body}</div>
|
|
1033
1825
|
</div>
|
|
1034
1826
|
</div>
|
|
1035
1827
|
`;
|
|
1036
1828
|
}
|
|
1037
1829
|
};
|
|
1038
|
-
|
|
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);
|
|
1039
1831
|
//#endregion
|
|
1040
1832
|
//#region src/components/pop-feed.ts
|
|
1041
|
-
var
|
|
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 {
|
|
1042
1834
|
constructor(...e) {
|
|
1043
|
-
super(...e), this._footerChild = null, this._wasOpen = !1;
|
|
1835
|
+
super(...e), this._footerChild = null, this._wasOpen = !1, this._noticeRetryAt = null, this.events = { click: "onClick" };
|
|
1044
1836
|
}
|
|
1045
1837
|
get styleSheets() {
|
|
1046
|
-
return [
|
|
1838
|
+
return [it];
|
|
1839
|
+
}
|
|
1840
|
+
onClick(e) {
|
|
1841
|
+
e.target.closest(A("notice")) && this.authStore.authErrorRetryAt.value === null && this.authStore.dismissAuthError();
|
|
1047
1842
|
}
|
|
1048
1843
|
connectedCallback() {
|
|
1049
1844
|
super.connectedCallback(), document.addEventListener("mousedown", this), document.addEventListener("keydown", this);
|
|
1050
1845
|
}
|
|
1051
1846
|
disconnectedCallback() {
|
|
1052
|
-
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();
|
|
1053
1848
|
}
|
|
1054
1849
|
handleEvent(e) {
|
|
1055
1850
|
if (e.type === "mousedown") {
|
|
@@ -1065,107 +1860,198 @@ var Ne = F("\n :host {\n display: flex;\n background: var(--pop-backgroun
|
|
|
1065
1860
|
onOutsideClick(e) {
|
|
1066
1861
|
if (!this.gridStore.open.value) return;
|
|
1067
1862
|
let t = e.composedPath(), n = this.getRootNode(), r = n instanceof ShadowRoot ? n.host : null;
|
|
1068
|
-
!t.includes(this) && (!r || !t.includes(r))
|
|
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
|
+
}
|
|
1069
1870
|
}
|
|
1070
1871
|
onKeyDown(e) {
|
|
1071
|
-
e.key === "Escape"
|
|
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
|
+
}
|
|
1072
1883
|
}
|
|
1073
1884
|
setupEffects() {
|
|
1074
1885
|
this.addEffect(() => {
|
|
1075
1886
|
let e = this.gridStore.open.value;
|
|
1076
|
-
e && !this._wasOpen && this.gridStore.grid.value &&
|
|
1887
|
+
e && !this._wasOpen && this.gridStore.grid.value && this.authStore.connectAuthChannel(), !e && this._wasOpen && this.authStore.clearAuthError(), this._wasOpen = e, this.update();
|
|
1077
1888
|
});
|
|
1078
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
|
+
}
|
|
1079
1905
|
update() {
|
|
1080
1906
|
this.gridStore.open.value ? this.setAttribute("open", "") : this.removeAttribute("open");
|
|
1081
|
-
let e = this.getElement("
|
|
1907
|
+
let e = this.getElement(A("main"));
|
|
1082
1908
|
if (e) {
|
|
1083
1909
|
let t = this.gridStore.topLevelComments.value;
|
|
1084
|
-
if (t.length === 0) e.querySelector("
|
|
1910
|
+
if (t.length === 0) e.querySelector(A("empty")) || (e.innerHTML = "<div class=\"feed__empty\" data-ref=\"empty\">Waiting for your thoughts…</div>");
|
|
1085
1911
|
else {
|
|
1086
1912
|
let n = Array.from(e.querySelectorAll("pop-comment-thread")).map((e) => e.getAttribute("comment-id")), r = t.map((e) => e.id);
|
|
1087
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(""));
|
|
1088
1914
|
}
|
|
1089
1915
|
}
|
|
1090
|
-
let t = this.getElement("
|
|
1091
|
-
if (
|
|
1092
|
-
let e =
|
|
1093
|
-
|
|
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}>`);
|
|
1094
1927
|
}
|
|
1095
1928
|
}
|
|
1096
1929
|
getTemplate() {
|
|
1097
|
-
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 ";
|
|
1098
1931
|
}
|
|
1099
1932
|
};
|
|
1100
|
-
|
|
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);
|
|
1101
1934
|
//#endregion
|
|
1102
1935
|
//#region node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
|
|
1103
|
-
function
|
|
1936
|
+
function at() {
|
|
1104
1937
|
return typeof window < "u";
|
|
1105
1938
|
}
|
|
1106
|
-
function
|
|
1939
|
+
function ot(e) {
|
|
1107
1940
|
var t;
|
|
1108
1941
|
return (e == null || (t = e.ownerDocument) == null ? void 0 : t.defaultView) || window;
|
|
1109
1942
|
}
|
|
1110
|
-
function
|
|
1111
|
-
return
|
|
1943
|
+
function st(e) {
|
|
1944
|
+
return at() ? e instanceof Element || e instanceof ot(e).Element : !1;
|
|
1112
1945
|
}
|
|
1113
|
-
var
|
|
1114
|
-
function
|
|
1115
|
-
let t =
|
|
1116
|
-
return
|
|
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 || "");
|
|
1117
1950
|
}
|
|
1118
|
-
function
|
|
1119
|
-
return
|
|
1951
|
+
function ft() {
|
|
1952
|
+
return ut ??= typeof CSS < "u" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none"), ut;
|
|
1120
1953
|
}
|
|
1121
|
-
function
|
|
1122
|
-
return
|
|
1954
|
+
function pt(e) {
|
|
1955
|
+
return ot(e).getComputedStyle(e);
|
|
1123
1956
|
}
|
|
1124
1957
|
//#endregion
|
|
1125
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
|
|
1126
|
-
function
|
|
1127
|
-
return
|
|
1959
|
+
function mt(e) {
|
|
1960
|
+
return ht(e);
|
|
1128
1961
|
}
|
|
1129
|
-
function
|
|
1962
|
+
function $(e) {
|
|
1130
1963
|
return e.assignedSlot ? e.assignedSlot : e.parentNode instanceof ShadowRoot ? e.parentNode.host : e.parentNode;
|
|
1131
1964
|
}
|
|
1132
|
-
function
|
|
1133
|
-
for (let t = e; t; t =
|
|
1134
|
-
for (let 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)) {
|
|
1135
1968
|
if (!(t instanceof Element)) continue;
|
|
1136
1969
|
let e = getComputedStyle(t);
|
|
1137
|
-
if (e.display !== "contents" && (e.position !== "static" ||
|
|
1970
|
+
if (e.display !== "contents" && (e.position !== "static" || dt(e) || t.tagName === "BODY")) return t;
|
|
1138
1971
|
}
|
|
1139
1972
|
return null;
|
|
1140
1973
|
}
|
|
1141
1974
|
//#endregion
|
|
1142
1975
|
//#region src/components/pop-grid.ts
|
|
1143
|
-
var
|
|
1976
|
+
var gt = "https://www.popgrids.io", _t = new Set([
|
|
1977
|
+
"start",
|
|
1978
|
+
"center",
|
|
1979
|
+
"end"
|
|
1980
|
+
]), vt = new Set(["sm", "lg"]), yt = new Set([
|
|
1981
|
+
"auto",
|
|
1982
|
+
"up",
|
|
1983
|
+
"down"
|
|
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 {
|
|
1144
1985
|
constructor(...e) {
|
|
1145
1986
|
super(...e), this._initialized = !1;
|
|
1146
1987
|
}
|
|
1147
1988
|
get styleSheets() {
|
|
1148
|
-
return [
|
|
1989
|
+
return [bt];
|
|
1990
|
+
}
|
|
1991
|
+
static get observedAttributes() {
|
|
1992
|
+
return [
|
|
1993
|
+
"data-align",
|
|
1994
|
+
"data-layout",
|
|
1995
|
+
"data-position",
|
|
1996
|
+
"data-icon",
|
|
1997
|
+
"data-preview-count"
|
|
1998
|
+
];
|
|
1149
1999
|
}
|
|
1150
2000
|
connectedCallback() {
|
|
1151
2001
|
if (this._initialized) return;
|
|
1152
2002
|
this._initialized = !0;
|
|
1153
|
-
let e = this.getAttribute("data-key") ?? this.getAttribute("public-key") ?? "", t = this.getAttribute("data-api-url") ?? this.getAttribute("api-url") ??
|
|
1154
|
-
this.
|
|
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({
|
|
1155
2008
|
apiUrl: t,
|
|
1156
2009
|
publicKey: e,
|
|
1157
2010
|
pageUrl: n,
|
|
1158
|
-
externalId: r
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
2011
|
+
externalId: r,
|
|
2012
|
+
authStore: this._authStore
|
|
2013
|
+
}), y(this, this._store), super.connectedCallback(), this._store.setOverrides(this._readOverridesFromAttributes()), this._store.load();
|
|
2014
|
+
}
|
|
2015
|
+
_readOverridesFromAttributes() {
|
|
2016
|
+
let e = {}, t = this.getAttribute("data-align");
|
|
2017
|
+
t && _t.has(t) && (e.align = t);
|
|
2018
|
+
let n = this.getAttribute("data-layout");
|
|
2019
|
+
n && vt.has(n) && (e.layout = n);
|
|
2020
|
+
let r = this.getAttribute("data-position");
|
|
2021
|
+
r && yt.has(r) && (e.position = r);
|
|
2022
|
+
let i = this.getAttribute("data-icon");
|
|
2023
|
+
i && (e.icon = i);
|
|
2024
|
+
let a = this.getAttribute("data-preview-count");
|
|
2025
|
+
if (a !== null) {
|
|
2026
|
+
let t = Number(a);
|
|
2027
|
+
Number.isInteger(t) && t > 0 && (e.previewCount = t);
|
|
2028
|
+
}
|
|
2029
|
+
return e;
|
|
2030
|
+
}
|
|
2031
|
+
_applyOverridesFromAttributes() {
|
|
2032
|
+
this._store && this._store.setOverrides(this._readOverridesFromAttributes());
|
|
2033
|
+
}
|
|
2034
|
+
onDataAlignChanged() {
|
|
2035
|
+
this._applyOverridesFromAttributes();
|
|
2036
|
+
}
|
|
2037
|
+
onDataLayoutChanged() {
|
|
2038
|
+
this._applyOverridesFromAttributes();
|
|
2039
|
+
}
|
|
2040
|
+
onDataPositionChanged() {
|
|
2041
|
+
this._applyOverridesFromAttributes();
|
|
2042
|
+
}
|
|
2043
|
+
onDataIconChanged() {
|
|
2044
|
+
this._applyOverridesFromAttributes();
|
|
2045
|
+
}
|
|
2046
|
+
onDataPreviewCountChanged() {
|
|
2047
|
+
this._applyOverridesFromAttributes();
|
|
1162
2048
|
}
|
|
1163
2049
|
disconnectedCallback() {
|
|
1164
|
-
this._floatingCleanup?.(), this._store.destroy(),
|
|
2050
|
+
this._floatingCleanup?.(), this._store.destroy(), this._authStore.destroy(), ye(this), super.disconnectedCallback();
|
|
1165
2051
|
}
|
|
1166
2052
|
setupEffects() {
|
|
1167
2053
|
this.addEffect(() => {
|
|
1168
|
-
let e = this._store.grid.value, t = this.getElement("
|
|
2054
|
+
let e = this._store.grid.value, t = this.getElement(A("grid"));
|
|
1169
2055
|
if (!t) return;
|
|
1170
2056
|
let n = Array.from(t.classList).filter((e) => e.startsWith("grid--"));
|
|
1171
2057
|
if (n.length > 0 && t.classList.remove(...n), e) {
|
|
@@ -1174,53 +2060,53 @@ var Ue = "https://www.popgrids.io", We = F("\n :host {\n display: block;\n
|
|
|
1174
2060
|
t.classList.add(`grid--preview-${n}`);
|
|
1175
2061
|
}
|
|
1176
2062
|
}), this.addEffect(() => {
|
|
1177
|
-
let
|
|
1178
|
-
if (this._floatingCleanup &&= (this._floatingCleanup(), void 0), !
|
|
1179
|
-
let
|
|
1180
|
-
if (!
|
|
1181
|
-
let
|
|
1182
|
-
if (!
|
|
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;
|
|
1183
2069
|
let l = [];
|
|
1184
|
-
l = [
|
|
1185
|
-
mainAxis:
|
|
2070
|
+
l = [r({
|
|
2071
|
+
mainAxis: c.position === "down" ? -16 : -54,
|
|
1186
2072
|
crossAxis: -18
|
|
1187
|
-
})], (!
|
|
2073
|
+
})], (!c.position || c.position === "auto") && l.push(n({
|
|
1188
2074
|
fallbackPlacements: ["bottom-start", "top-start"],
|
|
1189
2075
|
fallbackStrategy: "bestFit",
|
|
1190
2076
|
padding: 16
|
|
1191
2077
|
}));
|
|
1192
|
-
let u = (e) =>
|
|
1193
|
-
|
|
1194
|
-
placement:
|
|
2078
|
+
let u = (e) => i.getOffsetParent(e, mt), d = () => {
|
|
2079
|
+
t(o, s, {
|
|
2080
|
+
placement: c.position === "down" ? "bottom-start" : "top-start",
|
|
1195
2081
|
middleware: l,
|
|
1196
2082
|
strategy: "fixed",
|
|
1197
2083
|
platform: {
|
|
1198
|
-
...
|
|
2084
|
+
...i,
|
|
1199
2085
|
getOffsetParent: u
|
|
1200
2086
|
}
|
|
1201
|
-
}).then(({ x: e, y: t, placement:
|
|
1202
|
-
|
|
2087
|
+
}).then(({ x: e, y: t, placement: n }) => {
|
|
2088
|
+
s.setAttribute("data-current-placement", n), Object.assign(s.style, {
|
|
1203
2089
|
left: `${e}px`,
|
|
1204
2090
|
top: `${t}px`
|
|
1205
2091
|
});
|
|
1206
2092
|
});
|
|
1207
2093
|
};
|
|
1208
|
-
this._floatingCleanup =
|
|
2094
|
+
this._floatingCleanup = e(o, s, d);
|
|
1209
2095
|
});
|
|
1210
2096
|
}
|
|
1211
2097
|
getTemplate() {
|
|
1212
|
-
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 ";
|
|
1213
2099
|
}
|
|
1214
2100
|
};
|
|
1215
|
-
customElements.get("pop-grid") || customElements.define("pop-grid",
|
|
2101
|
+
customElements.get("pop-grid") || customElements.define("pop-grid", xt);
|
|
1216
2102
|
//#endregion
|
|
1217
2103
|
//#region src/components/pop-widget.ts
|
|
1218
|
-
var
|
|
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 {
|
|
1219
2105
|
constructor(...e) {
|
|
1220
2106
|
super(...e), this.events = { click: "onClick" };
|
|
1221
2107
|
}
|
|
1222
2108
|
get styleSheets() {
|
|
1223
|
-
return [
|
|
2109
|
+
return [St];
|
|
1224
2110
|
}
|
|
1225
2111
|
onClick() {
|
|
1226
2112
|
this.gridStore.error.value || (this.gridStore.open.value = !this.gridStore.open.value);
|
|
@@ -1235,15 +2121,15 @@ var Ke = F("\n :host {\n --error-badge-bg: #fef2f2;\n --error-badge-text:
|
|
|
1235
2121
|
getTemplate() {
|
|
1236
2122
|
if (this.gridStore.loading.value) return "<div class=\"widget\"><div class=\"skeleton mask mask-squircle\"></div></div>";
|
|
1237
2123
|
if (this.gridStore.error.value) return "<div class=\"error-badge\">Error: there was a problem loading the PopGrid</div>";
|
|
1238
|
-
let e = this.gridStore.previewAvatars.value, t = this.gridStore.comments.value.length;
|
|
2124
|
+
let e = this.gridStore.previewAvatars.value, t = this.gridStore.comments.value.length, n = this.gridStore.grid.value, r = n?.layout === "lg" ? "md" : "xs", i = n?.icon === "brand" ? "brand" : "neutral";
|
|
1239
2125
|
return `
|
|
1240
2126
|
<div class="widget">
|
|
1241
2127
|
${e.map((t, n) => {
|
|
1242
|
-
let
|
|
1243
|
-
return t?.image ? `<pop-comment-avatar size="
|
|
2128
|
+
let i = e.length + n, a = t?.id ?? t?.name ?? "";
|
|
2129
|
+
return t?.image ? `<pop-comment-avatar size="${r}" style="z-index: ${i}" data-color-key="${a}">
|
|
1244
2130
|
<img src="${t.image}" alt="${t.name ?? "User"}" />
|
|
1245
|
-
</pop-comment-avatar>` : `<pop-comment-avatar size="
|
|
1246
|
-
${
|
|
2131
|
+
</pop-comment-avatar>` : `<pop-comment-avatar size="${r}" style="z-index: ${i}" data-color-key="${a}">
|
|
2132
|
+
${u(t?.name)}
|
|
1247
2133
|
</pop-comment-avatar>`;
|
|
1248
2134
|
}).join("")}
|
|
1249
2135
|
<div class="count mask mask-squircle">
|
|
@@ -1254,13 +2140,14 @@ var Ke = F("\n :host {\n --error-badge-bg: #fef2f2;\n --error-badge-text:
|
|
|
1254
2140
|
</div>
|
|
1255
2141
|
</span>
|
|
1256
2142
|
</div>
|
|
2143
|
+
<pop-comment-icon variant="add" theme="${i}" size="xs"></pop-comment-icon>
|
|
1257
2144
|
</div>
|
|
1258
2145
|
`;
|
|
1259
2146
|
}
|
|
1260
2147
|
};
|
|
1261
2148
|
//#endregion
|
|
1262
2149
|
//#region src/index.ts
|
|
1263
|
-
if (
|
|
2150
|
+
if (j([b(W)], Ct.prototype, "gridStore", void 0), customElements.get("pop-widget") || customElements.define("pop-widget", Ct), typeof document < "u") {
|
|
1264
2151
|
let e = "https://rsms.me/inter/inter.css";
|
|
1265
2152
|
if (!document.querySelector(`link[href="${e}"]`)) {
|
|
1266
2153
|
let t = document.createElement("link");
|