@monetize.software/sdk 3.0.0-alpha.7 → 3.0.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{PaywallUI-BYquPomD.js → PaywallUI-BhQpWSWN.js} +871 -902
- package/dist/chunks/PaywallUI-BhQpWSWN.js.map +1 -0
- package/dist/chunks/PaywallUI-C7Wp2TiR.js +26 -0
- package/dist/chunks/PaywallUI-C7Wp2TiR.js.map +1 -0
- package/dist/chunks/ar-7cgIM-Vl.js +2 -0
- package/dist/chunks/ar-7cgIM-Vl.js.map +1 -0
- package/dist/chunks/{ar-nh4l4WDE.js → ar-B2Wg_IrC.js} +5 -4
- package/dist/chunks/ar-B2Wg_IrC.js.map +1 -0
- package/dist/chunks/{cs-2UYO2rWf.js → cs-BNo9Dx0Q.js} +3 -2
- package/dist/chunks/cs-BNo9Dx0Q.js.map +1 -0
- package/dist/chunks/cs-S05PC5AC.js +2 -0
- package/dist/chunks/cs-S05PC5AC.js.map +1 -0
- package/dist/chunks/da-Bi4zBG14.js +2 -0
- package/dist/chunks/da-Bi4zBG14.js.map +1 -0
- package/dist/chunks/{da-BD0O_HfV.js → da-Do9Lq6En.js} +3 -2
- package/dist/chunks/da-Do9Lq6En.js.map +1 -0
- package/dist/chunks/{de-BkCiXPsn.js → de-C8pDZNvx.js} +4 -2
- package/dist/chunks/de-C8pDZNvx.js.map +1 -0
- package/dist/chunks/de-nCDB6D2W.js +2 -0
- package/dist/chunks/de-nCDB6D2W.js.map +1 -0
- package/dist/chunks/el-BrKaa978.js +2 -0
- package/dist/chunks/el-BrKaa978.js.map +1 -0
- package/dist/chunks/{el-cIcxTp07.js → el-DzMNX-_P.js} +3 -2
- package/dist/chunks/el-DzMNX-_P.js.map +1 -0
- package/dist/chunks/es-B-Wtyzrl.js +2 -0
- package/dist/chunks/es-B-Wtyzrl.js.map +1 -0
- package/dist/chunks/{es-CJBC_jrV.js → es-YrKt-q4w.js} +4 -2
- package/dist/chunks/es-YrKt-q4w.js.map +1 -0
- package/dist/chunks/{fi-DyV7ynBf.js → fi-Bh44pwZ4.js} +3 -2
- package/dist/chunks/fi-Bh44pwZ4.js.map +1 -0
- package/dist/chunks/fi-D1SGXjnO.js +2 -0
- package/dist/chunks/fi-D1SGXjnO.js.map +1 -0
- package/dist/chunks/{fr-BLQ4AIu7.js → fr-Bc0pw4ws.js} +4 -2
- package/dist/chunks/fr-Bc0pw4ws.js.map +1 -0
- package/dist/chunks/fr-BhYf-iKk.js +2 -0
- package/dist/chunks/fr-BhYf-iKk.js.map +1 -0
- package/dist/chunks/he-BXAaFv6Y.js +2 -0
- package/dist/chunks/he-BXAaFv6Y.js.map +1 -0
- package/dist/chunks/{he-Bg-Bqi7r.js → he-Bfm-bhe3.js} +3 -2
- package/dist/chunks/he-Bfm-bhe3.js.map +1 -0
- package/dist/chunks/{hi-wQeE43oY.js → hi-D-O-B9Dn.js} +5 -4
- package/dist/chunks/hi-D-O-B9Dn.js.map +1 -0
- package/dist/chunks/hi-xblDO0O7.js +2 -0
- package/dist/chunks/hi-xblDO0O7.js.map +1 -0
- package/dist/chunks/{hu-D9qxzu0r.js → hu-CmIuAbLL.js} +3 -2
- package/dist/chunks/hu-CmIuAbLL.js.map +1 -0
- package/dist/chunks/hu-Wa46p0y4.js +2 -0
- package/dist/chunks/hu-Wa46p0y4.js.map +1 -0
- package/dist/chunks/id-CQEo5X94.js +2 -0
- package/dist/chunks/id-CQEo5X94.js.map +1 -0
- package/dist/chunks/{id-Rx_wYvqy.js → id-DN7IES-A.js} +3 -2
- package/dist/chunks/id-DN7IES-A.js.map +1 -0
- package/dist/chunks/it-8AYCm0xz.js +2 -0
- package/dist/chunks/it-8AYCm0xz.js.map +1 -0
- package/dist/chunks/{it-B1SRPZ3e.js → it-Cz5Nmqx5.js} +4 -2
- package/dist/chunks/it-Cz5Nmqx5.js.map +1 -0
- package/dist/chunks/{ja-DiItm8te.js → ja-BH9BlBh2.js} +4 -2
- package/dist/chunks/ja-BH9BlBh2.js.map +1 -0
- package/dist/chunks/ja-q-COVayn.js +2 -0
- package/dist/chunks/ja-q-COVayn.js.map +1 -0
- package/dist/chunks/ko-B6HRCscZ.js +2 -0
- package/dist/chunks/ko-B6HRCscZ.js.map +1 -0
- package/dist/chunks/{ko-CdGFWAKX.js → ko-CYV9QuYs.js} +4 -2
- package/dist/chunks/ko-CYV9QuYs.js.map +1 -0
- package/dist/chunks/{nl-CmZ3vEvj.js → nl-BvkB900D.js} +4 -2
- package/dist/chunks/nl-BvkB900D.js.map +1 -0
- package/dist/chunks/nl-CAd6_xlm.js +2 -0
- package/dist/chunks/nl-CAd6_xlm.js.map +1 -0
- package/dist/chunks/{no-BuxByZpq.js → no-3s9_ormb.js} +3 -2
- package/dist/chunks/no-3s9_ormb.js.map +1 -0
- package/dist/chunks/no-CAmz6bz6.js +2 -0
- package/dist/chunks/no-CAmz6bz6.js.map +1 -0
- package/dist/chunks/{pl-jZFCnDb8.js → pl-C9WTGQtb.js} +3 -2
- package/dist/chunks/pl-C9WTGQtb.js.map +1 -0
- package/dist/chunks/pl-DqUSTCaF.js +2 -0
- package/dist/chunks/pl-DqUSTCaF.js.map +1 -0
- package/dist/chunks/pt-8ARZnH0_.js +2 -0
- package/dist/chunks/pt-8ARZnH0_.js.map +1 -0
- package/dist/chunks/{pt-Cld7MwIW.js → pt-uFVUv_Op.js} +4 -2
- package/dist/chunks/pt-uFVUv_Op.js.map +1 -0
- package/dist/chunks/{ro-CuKDqj3C.js → ro-BrqQ8Au-.js} +3 -2
- package/dist/chunks/ro-BrqQ8Au-.js.map +1 -0
- package/dist/chunks/ro-D-NMbp2F.js +2 -0
- package/dist/chunks/ro-D-NMbp2F.js.map +1 -0
- package/dist/chunks/ru-8gbHPh0g.js +2 -0
- package/dist/chunks/ru-8gbHPh0g.js.map +1 -0
- package/dist/chunks/{ru-B7cjqJUm.js → ru-DK594dA8.js} +11 -2
- package/dist/chunks/ru-DK594dA8.js.map +1 -0
- package/dist/chunks/{sv-D9y-M1Fo.js → sv-CHNH8-mq.js} +3 -2
- package/dist/chunks/sv-CHNH8-mq.js.map +1 -0
- package/dist/chunks/sv-D8a8hmx9.js +2 -0
- package/dist/chunks/sv-D8a8hmx9.js.map +1 -0
- package/dist/chunks/th-DfjUK0Y7.js +2 -0
- package/dist/chunks/th-DfjUK0Y7.js.map +1 -0
- package/dist/chunks/{th-D9umBjEy.js → th-l24Pm5q-.js} +3 -2
- package/dist/chunks/th-l24Pm5q-.js.map +1 -0
- package/dist/chunks/{tr-BddMywiw.js → tr-ADpigSY5.js} +3 -2
- package/dist/chunks/tr-ADpigSY5.js.map +1 -0
- package/dist/chunks/tr-BdBpz4tL.js +2 -0
- package/dist/chunks/tr-BdBpz4tL.js.map +1 -0
- package/dist/chunks/{uk-Dbd31hFt.js → uk-CGqo4jek.js} +11 -2
- package/dist/chunks/uk-CGqo4jek.js.map +1 -0
- package/dist/chunks/uk-Cx1zv1ao.js +2 -0
- package/dist/chunks/uk-Cx1zv1ao.js.map +1 -0
- package/dist/chunks/{vi-Do3BMOdh.js → vi-Dk9bTu6f.js} +3 -2
- package/dist/chunks/vi-Dk9bTu6f.js.map +1 -0
- package/dist/chunks/vi-oe2dW21I.js +2 -0
- package/dist/chunks/vi-oe2dW21I.js.map +1 -0
- package/dist/chunks/zh-CwczPMPp.js +2 -0
- package/dist/chunks/zh-CwczPMPp.js.map +1 -0
- package/dist/chunks/{zh-gQSYLZI3.js → zh-LDkEV2D9.js} +3 -1
- package/dist/chunks/zh-LDkEV2D9.js.map +1 -0
- package/dist/core.cjs +1 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.ts +21 -13
- package/dist/core.js +188 -168
- package/dist/core.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +52 -29
- package/dist/index.js +1 -1
- package/dist/ui.cjs +1 -1
- package/dist/ui.d.ts +52 -29
- package/dist/ui.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/PaywallUI-BYquPomD.js.map +0 -1
- package/dist/chunks/PaywallUI-Cl9sz_xA.js +0 -26
- package/dist/chunks/PaywallUI-Cl9sz_xA.js.map +0 -1
- package/dist/chunks/ar-BUQInJ5a.js +0 -2
- package/dist/chunks/ar-BUQInJ5a.js.map +0 -1
- package/dist/chunks/ar-nh4l4WDE.js.map +0 -1
- package/dist/chunks/cs-2UYO2rWf.js.map +0 -1
- package/dist/chunks/cs-i5K4KTFV.js +0 -2
- package/dist/chunks/cs-i5K4KTFV.js.map +0 -1
- package/dist/chunks/da-BD0O_HfV.js.map +0 -1
- package/dist/chunks/da-CZbhtVJO.js +0 -2
- package/dist/chunks/da-CZbhtVJO.js.map +0 -1
- package/dist/chunks/de-Bc-GoLgC.js +0 -2
- package/dist/chunks/de-Bc-GoLgC.js.map +0 -1
- package/dist/chunks/de-BkCiXPsn.js.map +0 -1
- package/dist/chunks/el-CcMEbl_F.js +0 -2
- package/dist/chunks/el-CcMEbl_F.js.map +0 -1
- package/dist/chunks/el-cIcxTp07.js.map +0 -1
- package/dist/chunks/es-BvYmomAz.js +0 -2
- package/dist/chunks/es-BvYmomAz.js.map +0 -1
- package/dist/chunks/es-CJBC_jrV.js.map +0 -1
- package/dist/chunks/fi-DyV7ynBf.js.map +0 -1
- package/dist/chunks/fi-aZR-qmZN.js +0 -2
- package/dist/chunks/fi-aZR-qmZN.js.map +0 -1
- package/dist/chunks/fr-BLQ4AIu7.js.map +0 -1
- package/dist/chunks/fr-BgbFAgHx.js +0 -2
- package/dist/chunks/fr-BgbFAgHx.js.map +0 -1
- package/dist/chunks/he-Bg-Bqi7r.js.map +0 -1
- package/dist/chunks/he-CQ4yCuja.js +0 -2
- package/dist/chunks/he-CQ4yCuja.js.map +0 -1
- package/dist/chunks/hi-DtUsj1c-.js +0 -2
- package/dist/chunks/hi-DtUsj1c-.js.map +0 -1
- package/dist/chunks/hi-wQeE43oY.js.map +0 -1
- package/dist/chunks/hu-D9qxzu0r.js.map +0 -1
- package/dist/chunks/hu-DXtscQ8_.js +0 -2
- package/dist/chunks/hu-DXtscQ8_.js.map +0 -1
- package/dist/chunks/id-BByOYpeo.js +0 -2
- package/dist/chunks/id-BByOYpeo.js.map +0 -1
- package/dist/chunks/id-Rx_wYvqy.js.map +0 -1
- package/dist/chunks/it-52Ip42pa.js +0 -2
- package/dist/chunks/it-52Ip42pa.js.map +0 -1
- package/dist/chunks/it-B1SRPZ3e.js.map +0 -1
- package/dist/chunks/ja-CMC3Parn.js +0 -2
- package/dist/chunks/ja-CMC3Parn.js.map +0 -1
- package/dist/chunks/ja-DiItm8te.js.map +0 -1
- package/dist/chunks/ko-3qY21q40.js +0 -2
- package/dist/chunks/ko-3qY21q40.js.map +0 -1
- package/dist/chunks/ko-CdGFWAKX.js.map +0 -1
- package/dist/chunks/nl-Borc5nw1.js +0 -2
- package/dist/chunks/nl-Borc5nw1.js.map +0 -1
- package/dist/chunks/nl-CmZ3vEvj.js.map +0 -1
- package/dist/chunks/no-BuxByZpq.js.map +0 -1
- package/dist/chunks/no-Do2iGedg.js +0 -2
- package/dist/chunks/no-Do2iGedg.js.map +0 -1
- package/dist/chunks/pl-jZFCnDb8.js.map +0 -1
- package/dist/chunks/pl-mRaky_7k.js +0 -2
- package/dist/chunks/pl-mRaky_7k.js.map +0 -1
- package/dist/chunks/pt-Cld7MwIW.js.map +0 -1
- package/dist/chunks/pt-DilDTXfs.js +0 -2
- package/dist/chunks/pt-DilDTXfs.js.map +0 -1
- package/dist/chunks/ro-CuKDqj3C.js.map +0 -1
- package/dist/chunks/ro-DF2uzPIB.js +0 -2
- package/dist/chunks/ro-DF2uzPIB.js.map +0 -1
- package/dist/chunks/ru-B7cjqJUm.js.map +0 -1
- package/dist/chunks/ru-YeaXnTO-.js +0 -2
- package/dist/chunks/ru-YeaXnTO-.js.map +0 -1
- package/dist/chunks/sv-2pHEvuSe.js +0 -2
- package/dist/chunks/sv-2pHEvuSe.js.map +0 -1
- package/dist/chunks/sv-D9y-M1Fo.js.map +0 -1
- package/dist/chunks/th-D9umBjEy.js.map +0 -1
- package/dist/chunks/th-u2QSDF0G.js +0 -2
- package/dist/chunks/th-u2QSDF0G.js.map +0 -1
- package/dist/chunks/tr-BddMywiw.js.map +0 -1
- package/dist/chunks/tr-Bhgm6_ti.js +0 -2
- package/dist/chunks/tr-Bhgm6_ti.js.map +0 -1
- package/dist/chunks/uk-7vwqsaVK.js +0 -2
- package/dist/chunks/uk-7vwqsaVK.js.map +0 -1
- package/dist/chunks/uk-Dbd31hFt.js.map +0 -1
- package/dist/chunks/vi-CJefLP_g.js +0 -2
- package/dist/chunks/vi-CJefLP_g.js.map +0 -1
- package/dist/chunks/vi-Do3BMOdh.js.map +0 -1
- package/dist/chunks/zh-D5C3BzYL.js +0 -2
- package/dist/chunks/zh-D5C3BzYL.js.map +0 -1
- package/dist/chunks/zh-gQSYLZI3.js.map +0 -1
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { PaywallError as
|
|
2
|
-
import { render as
|
|
3
|
-
import { jsx as
|
|
4
|
-
import { useContext as
|
|
5
|
-
const
|
|
6
|
-
function
|
|
1
|
+
import { PaywallError as O, BillingClient as Ut, EventTracker as Dt, AuthClient as ct } from "../core.js";
|
|
2
|
+
import { render as Y, h as dt, createContext as Nt } from "preact";
|
|
3
|
+
import { jsx as a, jsxs as c, Fragment as ot } from "preact/jsx-runtime";
|
|
4
|
+
import { useContext as $t, useState as b, useEffect as E, useRef as F, useMemo as Ht, useLayoutEffect as Vt } from "preact/hooks";
|
|
5
|
+
const ut = 3600 * 1e3;
|
|
6
|
+
function X(e) {
|
|
7
7
|
return `paywall-${e}-trial-time-first-open`;
|
|
8
8
|
}
|
|
9
|
-
function
|
|
9
|
+
function J(e) {
|
|
10
10
|
return `paywall-${e}-skip-times`;
|
|
11
11
|
}
|
|
12
|
-
class
|
|
13
|
-
constructor(t, r,
|
|
14
|
-
this.storage = t, this.paywallId = r, this.config =
|
|
12
|
+
class Ct {
|
|
13
|
+
constructor(t, r, n) {
|
|
14
|
+
this.storage = t, this.paywallId = r, this.config = n;
|
|
15
15
|
}
|
|
16
16
|
async check() {
|
|
17
17
|
return this.config.mode === "time" ? this.checkTime() : this.checkOpens();
|
|
@@ -20,11 +20,11 @@ class It {
|
|
|
20
20
|
return this.config.mode === "time" ? this.recordTime() : this.recordOpens();
|
|
21
21
|
}
|
|
22
22
|
async reset() {
|
|
23
|
-
await this.storage.removeItem(this.config.mode === "time" ?
|
|
23
|
+
await this.storage.removeItem(this.config.mode === "time" ? X(this.paywallId) : J(this.paywallId));
|
|
24
24
|
}
|
|
25
25
|
async checkTime() {
|
|
26
|
-
const t = this.config.payload *
|
|
27
|
-
if (!
|
|
26
|
+
const t = this.config.payload * ut, r = await this.storage.getItem(X(this.paywallId)), n = r ? Number(r) : null;
|
|
27
|
+
if (!n || !Number.isFinite(n))
|
|
28
28
|
return {
|
|
29
29
|
mode: "time",
|
|
30
30
|
blocked: !0,
|
|
@@ -33,18 +33,18 @@ class It {
|
|
|
33
33
|
remainingMs: t,
|
|
34
34
|
totalMs: t
|
|
35
35
|
};
|
|
36
|
-
const i =
|
|
36
|
+
const i = n + t, o = Math.max(0, i - Date.now());
|
|
37
37
|
return {
|
|
38
38
|
mode: "time",
|
|
39
39
|
blocked: o > 0,
|
|
40
|
-
startedAt:
|
|
40
|
+
startedAt: n,
|
|
41
41
|
expiresAt: i,
|
|
42
42
|
remainingMs: o,
|
|
43
43
|
totalMs: t
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
46
|
async checkOpens() {
|
|
47
|
-
const t = this.config.payload, r = await this.storage.getItem(
|
|
47
|
+
const t = this.config.payload, r = await this.storage.getItem(J(this.paywallId)), n = r ? Number(r) : 0, i = Number.isFinite(n) ? n : 0, o = i < t, s = Math.max(0, t - i);
|
|
48
48
|
return {
|
|
49
49
|
mode: "opens",
|
|
50
50
|
blocked: o,
|
|
@@ -53,8 +53,8 @@ class It {
|
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
55
|
async recordTime() {
|
|
56
|
-
const t = this.config.payload *
|
|
57
|
-
let i =
|
|
56
|
+
const t = this.config.payload * ut, r = X(this.paywallId), n = await this.storage.getItem(r);
|
|
57
|
+
let i = n ? Number(n) : null;
|
|
58
58
|
(!i || !Number.isFinite(i)) && (i = Date.now(), await this.storage.setItem(r, String(i)));
|
|
59
59
|
const o = i + t, s = Math.max(0, o - Date.now());
|
|
60
60
|
return {
|
|
@@ -67,23 +67,23 @@ class It {
|
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
69
|
async recordOpens() {
|
|
70
|
-
const t = this.config.payload, r =
|
|
70
|
+
const t = this.config.payload, r = J(this.paywallId), n = await this.storage.getItem(r), i = n ? Number(n) : 0, o = Number.isFinite(i) ? i : 0, s = Math.min(t, o + 1);
|
|
71
71
|
await this.storage.setItem(r, String(s));
|
|
72
|
-
const
|
|
72
|
+
const d = Math.max(0, t - s);
|
|
73
73
|
return {
|
|
74
74
|
mode: "opens",
|
|
75
75
|
blocked: s < t,
|
|
76
|
-
remainingActions:
|
|
76
|
+
remainingActions: d,
|
|
77
77
|
totalActions: t
|
|
78
78
|
};
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
-
let
|
|
81
|
+
let pt = !1;
|
|
82
82
|
class Gt {
|
|
83
|
-
constructor(t, r,
|
|
84
|
-
|
|
83
|
+
constructor(t, r, n) {
|
|
84
|
+
pt || (pt = !0, console.warn(
|
|
85
85
|
'[paywall] trial.storage="server" is not implemented yet — falling back to client storage. State lives in localStorage; users can reset trial by clearing site data.'
|
|
86
|
-
)), this.fallback = new
|
|
86
|
+
)), this.fallback = new Ct(t, r, n);
|
|
87
87
|
}
|
|
88
88
|
check() {
|
|
89
89
|
return this.fallback.check();
|
|
@@ -96,16 +96,16 @@ class Gt {
|
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
function qt(e, t, r) {
|
|
99
|
-
return r.storage === "server" ? new Gt(e, t, r) : new
|
|
99
|
+
return r.storage === "server" ? new Gt(e, t, r) : new Ct(e, t, r);
|
|
100
100
|
}
|
|
101
|
-
const At = '/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-slate-950:oklch(12.9% .042 264.695);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--blur-sm:8px;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:host{all:initial;color-scheme:light;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*,:before,:after{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box}button{cursor:pointer;font-family:inherit}button:disabled{cursor:not-allowed}[role=button],[role=radio]{cursor:pointer}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.-top-2{top:calc(var(--spacing) * -2)}.-top-\\[9px\\]{top:-9px}.-top-\\[10px\\]{top:-10px}.top-1\\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.-right-\\[6px\\]{right:-6px}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.left-1\\/2{left:50%}.z-10{z-index:10}.z-\\[1\\]{z-index:1}.z-\\[2147483647\\]{z-index:2147483647}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.-mt-3{margin-top:calc(var(--spacing) * -3)}.mt-0\\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.-mb-2{margin-bottom:calc(var(--spacing) * -2)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1{height:calc(var(--spacing) * 1)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-6\\.5{height:calc(var(--spacing) * 6.5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-\\[22px\\]{height:22px}.h-full{height:100%}.h-px{height:1px}.max-h-\\[calc\\(100dvh-1rem\\)\\]{max-height:calc(100dvh - 1rem)}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-\\[2\\.4em\\]{min-height:2.4em}.min-h-\\[120px\\]{min-height:120px}.w-1{width:calc(var(--spacing) * 1)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-6\\.5{width:calc(var(--spacing) * 6.5)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-full{width:100%}.max-w-\\[18rem\\]{max-width:18rem}.max-w-\\[20rem\\]{max-width:20rem}.max-w-\\[75\\%\\]{max-width:75%}.max-w-\\[320px\\]{max-width:320px}.max-w-\\[360px\\]{max-width:360px}.max-w-\\[400px\\]{max-width:400px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\\[pw-fade-in_180ms_ease-out\\]{animation:.18s ease-out pw-fade-in}.animate-\\[pw-scale-in_220ms_cubic-bezier\\(0\\.16\\,1\\,0\\.3\\,1\\)\\]{animation:.22s cubic-bezier(.16,1,.3,1) pw-scale-in}.animate-ping{animation:var(--animate-ping)}.animate-spin{animation:var(--animate-spin)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-x-1\\.5{column-gap:calc(var(--spacing) * 1.5)}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-y-1{row-gap:calc(var(--spacing) * 1)}.self-center{align-self:center}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\\[9px\\]{border-radius:9px}.rounded-\\[11px\\]{border-radius:11px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-tl-xl{border-top-left-radius:var(--radius-xl)}.rounded-tr-xl{border-top-right-radius:var(--radius-xl)}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.border,.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\\[2\\.5px\\]{border-style:var(--tw-border-style);border-width:2.5px}.border-\\[3px\\]{border-style:var(--tw-border-style);border-width:3px}.border-\\[5px\\]{border-style:var(--tw-border-style);border-width:5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b,.border-b-1{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\\[var\\(--pw-accent\\)\\]{border-color:var(--pw-accent)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-white{border-color:var(--color-white)}.border-white\\/40{border-color:#fff6}@supports (color:color-mix(in lab,red,red)){.border-white\\/40{border-color:color-mix(in oklab,var(--color-white) 40%,transparent)}}.border-t-\\[var\\(--pw-accent\\)\\]{border-top-color:var(--pw-accent)}.border-t-gray-700{border-top-color:var(--color-gray-700)}.border-t-white{border-top-color:var(--color-white)}.bg-\\[color-mix\\(in_srgb\\,var\\(--pw-accent\\)_6\\%\\,white\\)\\]{background-color:var(--pw-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\\[color-mix\\(in_srgb\\,var\\(--pw-accent\\)_6\\%\\,white\\)\\]{background-color:color-mix(in srgb,var(--pw-accent) 6%,white)}}.bg-\\[var\\(--pw-accent\\)\\]{background-color:var(--pw-accent)}.bg-black\\/20{background-color:#0003}@supports (color:color-mix(in lab,red,red)){.bg-black\\/20{background-color:color-mix(in oklab,var(--color-black) 20%,transparent)}}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\\/60{background-color:#f9fafb99}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\\/60{background-color:color-mix(in oklab,var(--color-gray-50) 60%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-red-50{background-color:var(--color-red-50)}.bg-slate-950\\/50{background-color:#02061880}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\\/50{background-color:color-mix(in oklab,var(--color-slate-950) 50%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\\/80{background-color:#fffc}@supports (color:color-mix(in lab,red,red)){.bg-white\\/80{background-color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.p-2{padding:calc(var(--spacing) * 2)}.p-3\\.5{padding:calc(var(--spacing) * 3.5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\\.5{padding-block:calc(var(--spacing) * 3.5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-3\\.5{padding-top:calc(var(--spacing) * 3.5)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pr-12{padding-right:calc(var(--spacing) * 12)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-3\\.5{padding-bottom:calc(var(--spacing) * 3.5)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[0\\.9375rem\\]{font-size:.9375rem}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[12px\\]{font-size:12px}.text-\\[13px\\]{font-size:13px}.text-\\[15px\\]{font-size:15px}.text-\\[22px\\]{font-size:22px}.text-\\[26px\\]{font-size:26px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-balance{text-wrap:balance}.whitespace-nowrap{white-space:nowrap}.text-\\[var\\(--pw-accent\\)\\]{color:var(--pw-accent)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-700{color:var(--color-emerald-700)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-800\\/70{color:#1e2939b3}@supports (color:color-mix(in lab,red,red)){.text-gray-800\\/70{color:color-mix(in oklab,var(--color-gray-800) 70%,transparent)}}.text-gray-900{color:var(--color-gray-900)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-gray-400{-webkit-text-decoration-color:var(--color-gray-400);text-decoration-color:var(--color-gray-400)}.decoration-\\[1\\.5px\\]{text-decoration-thickness:1.5px}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_0_2px_rgba\\(239\\,68\\,68\\,0\\.5\\)\\]{--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444480);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-8{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(8px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.\\!filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.placeholder\\:text-gray-500::placeholder{color:var(--color-gray-500)}@media(hover:hover){.hover\\:-translate-y-px:hover{--tw-translate-y:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\\:bg-gray-50\\/60:hover{background-color:#f9fafb99}@supports (color:color-mix(in lab,red,red)){.hover\\:bg-gray-50\\/60:hover{background-color:color-mix(in oklab,var(--color-gray-50) 60%,transparent)}}.hover\\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\\:bg-gray-200\\/60:hover{background-color:#e5e7eb99}@supports (color:color-mix(in lab,red,red)){.hover\\:bg-gray-200\\/60:hover{background-color:color-mix(in oklab,var(--color-gray-200) 60%,transparent)}}.hover\\:bg-white:hover{background-color:var(--color-white)}.hover\\:text-gray-700:hover{color:var(--color-gray-700)}.hover\\:text-gray-900:hover{color:var(--color-gray-900)}.hover\\:text-red-600:hover{color:var(--color-red-600)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-80:hover{opacity:.8}.hover\\:opacity-90:hover{opacity:.9}.hover\\:brightness-105:hover{--tw-brightness:brightness(105%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\\:bg-gray-200\\/60:focus{background-color:#e5e7eb99}@supports (color:color-mix(in lab,red,red)){.focus\\:bg-gray-200\\/60:focus{background-color:color-mix(in oklab,var(--color-gray-200) 60%,transparent)}}.focus\\:shadow-\\[0_0_0_2px_color-mix\\(in_srgb\\,var\\(--pw-accent\\)_30\\%\\,transparent\\)\\]:focus{--tw-shadow:0 0 0 2px var(--tw-shadow-color,var(--pw-accent))}@supports (color:color-mix(in lab,red,red)){.focus\\:shadow-\\[0_0_0_2px_color-mix\\(in_srgb\\,var\\(--pw-accent\\)_30\\%\\,transparent\\)\\]:focus{--tw-shadow:0 0 0 2px var(--tw-shadow-color,color-mix(in srgb,var(--pw-accent) 30%,transparent))}}.focus\\:shadow-\\[0_0_0_2px_color-mix\\(in_srgb\\,var\\(--pw-accent\\)_30\\%\\,transparent\\)\\]:focus{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:opacity-80:focus-visible{opacity:.8}.focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-\\[var\\(--pw-accent\\)\\]:focus-visible{--tw-ring-color:var(--pw-accent)}.focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\\:ring-inset:focus-visible{--tw-ring-inset:inset}.active\\:scale-\\[0\\.98\\]:active{scale:.98}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-60:disabled{opacity:.6}@media(hover:hover){.disabled\\:hover\\:translate-y-0:disabled:hover{--tw-translate-y:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.disabled\\:hover\\:brightness-100:disabled:hover{--tw-brightness:brightness(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}@media(min-width:40rem){.sm\\:max-h-\\[calc\\(100dvh-2rem\\)\\]{max-height:calc(100dvh - 2rem)}.sm\\:p-4{padding:calc(var(--spacing) * 4)}.sm\\:p-8{padding:calc(var(--spacing) * 8)}.sm\\:px-8{padding-inline:calc(var(--spacing) * 8)}.sm\\:pt-8{padding-top:calc(var(--spacing) * 8)}.sm\\:pb-4{padding-bottom:calc(var(--spacing) * 4)}.sm\\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}}}.pw-cta-shimmer:before{content:"";z-index:1;background:linear-gradient(90deg,#0000,#ffffff59 50%,#0000);width:100%;height:100%;animation:3s infinite pw-cta-shimmer;position:absolute;top:0;left:-100%}@keyframes pw-cta-shimmer{0%{left:-100%}to{left:100%}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}';
|
|
102
|
-
let
|
|
101
|
+
const It = '/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-600:oklch(57.7% .245 27.325);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-slate-950:oklch(12.9% .042 264.695);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--blur-sm:8px;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:host{all:initial;color-scheme:light;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*,:before,:after{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box}button{cursor:pointer;font-family:inherit}button:disabled{cursor:not-allowed}[role=button],[role=radio]{cursor:pointer}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.-top-2{top:calc(var(--spacing) * -2)}.-top-\\[9px\\]{top:-9px}.-top-\\[10px\\]{top:-10px}.top-1\\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.-right-\\[6px\\]{right:-6px}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.left-1\\/2{left:50%}.z-10{z-index:10}.z-\\[1\\]{z-index:1}.z-\\[2147483647\\]{z-index:2147483647}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.-mt-3{margin-top:calc(var(--spacing) * -3)}.mt-0\\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.-mb-2{margin-bottom:calc(var(--spacing) * -2)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1{height:calc(var(--spacing) * 1)}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-6\\.5{height:calc(var(--spacing) * 6.5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-\\[22px\\]{height:22px}.h-full{height:100%}.h-px{height:1px}.max-h-\\[calc\\(100dvh-1rem\\)\\]{max-height:calc(100dvh - 1rem)}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-\\[2\\.4em\\]{min-height:2.4em}.min-h-\\[120px\\]{min-height:120px}.w-1{width:calc(var(--spacing) * 1)}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-6\\.5{width:calc(var(--spacing) * 6.5)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-full{width:100%}.max-w-\\[18rem\\]{max-width:18rem}.max-w-\\[20rem\\]{max-width:20rem}.max-w-\\[75\\%\\]{max-width:75%}.max-w-\\[320px\\]{max-width:320px}.max-w-\\[360px\\]{max-width:360px}.max-w-\\[400px\\]{max-width:400px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\\[pw-fade-in_180ms_ease-out\\]{animation:.18s ease-out pw-fade-in}.animate-\\[pw-scale-in_220ms_cubic-bezier\\(0\\.16\\,1\\,0\\.3\\,1\\)\\]{animation:.22s cubic-bezier(.16,1,.3,1) pw-scale-in}.animate-ping{animation:var(--animate-ping)}.animate-spin{animation:var(--animate-spin)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-x-1\\.5{column-gap:calc(var(--spacing) * 1.5)}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-y-1{row-gap:calc(var(--spacing) * 1)}.self-center{align-self:center}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\\[9px\\]{border-radius:9px}.rounded-\\[11px\\]{border-radius:11px}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-tl-xl{border-top-left-radius:var(--radius-xl)}.rounded-tr-xl{border-top-right-radius:var(--radius-xl)}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.border,.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\\[2\\.5px\\]{border-style:var(--tw-border-style);border-width:2.5px}.border-\\[3px\\]{border-style:var(--tw-border-style);border-width:3px}.border-\\[5px\\]{border-style:var(--tw-border-style);border-width:5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b,.border-b-1{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\\[var\\(--pw-accent\\)\\]{border-color:var(--pw-accent)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-white{border-color:var(--color-white)}.border-white\\/40{border-color:#fff6}@supports (color:color-mix(in lab,red,red)){.border-white\\/40{border-color:color-mix(in oklab,var(--color-white) 40%,transparent)}}.border-t-\\[var\\(--pw-accent\\)\\]{border-top-color:var(--pw-accent)}.border-t-gray-700{border-top-color:var(--color-gray-700)}.border-t-white{border-top-color:var(--color-white)}.bg-\\[color-mix\\(in_srgb\\,var\\(--pw-accent\\)_6\\%\\,white\\)\\]{background-color:var(--pw-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\\[color-mix\\(in_srgb\\,var\\(--pw-accent\\)_6\\%\\,white\\)\\]{background-color:color-mix(in srgb,var(--pw-accent) 6%,white)}}.bg-black\\/20{background-color:#0003}@supports (color:color-mix(in lab,red,red)){.bg-black\\/20{background-color:color-mix(in oklab,var(--color-black) 20%,transparent)}}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\\/60{background-color:#f9fafb99}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\\/60{background-color:color-mix(in oklab,var(--color-gray-50) 60%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-red-50{background-color:var(--color-red-50)}.bg-slate-950\\/50{background-color:#02061880}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\\/50{background-color:color-mix(in oklab,var(--color-slate-950) 50%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\\/80{background-color:#fffc}@supports (color:color-mix(in lab,red,red)){.bg-white\\/80{background-color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.p-2{padding:calc(var(--spacing) * 2)}.p-3\\.5{padding:calc(var(--spacing) * 3.5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\\.5{padding-block:calc(var(--spacing) * 3.5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-3\\.5{padding-top:calc(var(--spacing) * 3.5)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pr-12{padding-right:calc(var(--spacing) * 12)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-3\\.5{padding-bottom:calc(var(--spacing) * 3.5)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[0\\.9375rem\\]{font-size:.9375rem}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[12px\\]{font-size:12px}.text-\\[13px\\]{font-size:13px}.text-\\[15px\\]{font-size:15px}.text-\\[22px\\]{font-size:22px}.text-\\[26px\\]{font-size:26px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-balance{text-wrap:balance}.whitespace-nowrap{white-space:nowrap}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-700{color:var(--color-emerald-700)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-800\\/70{color:#1e2939b3}@supports (color:color-mix(in lab,red,red)){.text-gray-800\\/70{color:color-mix(in oklab,var(--color-gray-800) 70%,transparent)}}.text-gray-900{color:var(--color-gray-900)}.text-red-600{color:var(--color-red-600)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-gray-400{-webkit-text-decoration-color:var(--color-gray-400);text-decoration-color:var(--color-gray-400)}.decoration-\\[1\\.5px\\]{text-decoration-thickness:1.5px}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_0_2px_rgba\\(239\\,68\\,68\\,0\\.5\\)\\]{--tw-shadow:0 0 0 2px var(--tw-shadow-color,#ef444480);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-8{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(8px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.\\!filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.placeholder\\:text-gray-500::placeholder{color:var(--color-gray-500)}@media(hover:hover){.hover\\:-translate-y-px:hover{--tw-translate-y:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\\:bg-gray-50\\/60:hover{background-color:#f9fafb99}@supports (color:color-mix(in lab,red,red)){.hover\\:bg-gray-50\\/60:hover{background-color:color-mix(in oklab,var(--color-gray-50) 60%,transparent)}}.hover\\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\\:bg-gray-200\\/60:hover{background-color:#e5e7eb99}@supports (color:color-mix(in lab,red,red)){.hover\\:bg-gray-200\\/60:hover{background-color:color-mix(in oklab,var(--color-gray-200) 60%,transparent)}}.hover\\:bg-white:hover{background-color:var(--color-white)}.hover\\:text-gray-700:hover{color:var(--color-gray-700)}.hover\\:text-gray-900:hover{color:var(--color-gray-900)}.hover\\:text-red-600:hover{color:var(--color-red-600)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-80:hover{opacity:.8}.hover\\:brightness-105:hover{--tw-brightness:brightness(105%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\\:bg-gray-200\\/60:focus{background-color:#e5e7eb99}@supports (color:color-mix(in lab,red,red)){.focus\\:bg-gray-200\\/60:focus{background-color:color-mix(in oklab,var(--color-gray-200) 60%,transparent)}}.focus\\:shadow-\\[0_0_0_2px_color-mix\\(in_srgb\\,var\\(--pw-accent\\)_30\\%\\,transparent\\)\\]:focus{--tw-shadow:0 0 0 2px var(--tw-shadow-color,var(--pw-accent))}@supports (color:color-mix(in lab,red,red)){.focus\\:shadow-\\[0_0_0_2px_color-mix\\(in_srgb\\,var\\(--pw-accent\\)_30\\%\\,transparent\\)\\]:focus{--tw-shadow:0 0 0 2px var(--tw-shadow-color,color-mix(in srgb,var(--pw-accent) 30%,transparent))}}.focus\\:shadow-\\[0_0_0_2px_color-mix\\(in_srgb\\,var\\(--pw-accent\\)_30\\%\\,transparent\\)\\]:focus{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:opacity-80:focus-visible{opacity:.8}.focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-\\[var\\(--pw-accent\\)\\]:focus-visible{--tw-ring-color:var(--pw-accent)}.focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\\:ring-inset:focus-visible{--tw-ring-inset:inset}.active\\:scale-\\[0\\.98\\]:active{scale:.98}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-60:disabled{opacity:.6}@media(hover:hover){.disabled\\:hover\\:translate-y-0:disabled:hover{--tw-translate-y:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.disabled\\:hover\\:brightness-100:disabled:hover{--tw-brightness:brightness(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}@media(min-width:40rem){.sm\\:max-h-\\[calc\\(100dvh-2rem\\)\\]{max-height:calc(100dvh - 2rem)}.sm\\:p-4{padding:calc(var(--spacing) * 4)}.sm\\:p-8{padding:calc(var(--spacing) * 8)}.sm\\:px-8{padding-inline:calc(var(--spacing) * 8)}.sm\\:pt-5{padding-top:calc(var(--spacing) * 5)}.sm\\:pt-8{padding-top:calc(var(--spacing) * 8)}.sm\\:pb-4{padding-bottom:calc(var(--spacing) * 4)}.sm\\:pb-8{padding-bottom:calc(var(--spacing) * 8)}.sm\\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}}}.pw-cta-shimmer:before{content:"";z-index:1;background:linear-gradient(90deg,#0000,#ffffff59 50%,#0000);width:100%;height:100%;animation:3s infinite pw-cta-shimmer;position:absolute;top:0;left:-100%}@keyframes pw-cta-shimmer{0%{left:-100%}to{left:100%}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}';
|
|
102
|
+
let ht = !1;
|
|
103
103
|
function Wt() {
|
|
104
|
-
if (
|
|
104
|
+
if (ht || (ht = !0, typeof CSS > "u" || typeof CSS.registerProperty != "function")) return;
|
|
105
105
|
let e;
|
|
106
106
|
try {
|
|
107
107
|
const t = new CSSStyleSheet();
|
|
108
|
-
t.replaceSync(
|
|
108
|
+
t.replaceSync(It), e = t.cssRules;
|
|
109
109
|
} catch {
|
|
110
110
|
return;
|
|
111
111
|
}
|
|
@@ -127,9 +127,9 @@ function Zt(e, t, r = {}) {
|
|
|
127
127
|
if (typeof document > "u")
|
|
128
128
|
throw new Error("mountShadow called in non-DOM environment");
|
|
129
129
|
Wt();
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
const i =
|
|
130
|
+
const n = r.host ?? document.createElement("div");
|
|
131
|
+
n.setAttribute("data-paywall-host", ""), n.style.cssText = r.inline ? "all: initial; position: absolute; inset: 0; z-index: 1; pointer-events: none;" : "all: initial; position: fixed; inset: 0; z-index: 2147483647; pointer-events: none;", !n.isConnected && !r.inline && document.body.appendChild(n);
|
|
132
|
+
const i = n.attachShadow({ mode: r.shadowMode ?? "closed" }), o = `
|
|
133
133
|
:host {
|
|
134
134
|
all: initial !important;
|
|
135
135
|
display: block !important;
|
|
@@ -148,23 +148,23 @@ function Zt(e, t, r = {}) {
|
|
|
148
148
|
visibility: visible !important;
|
|
149
149
|
}
|
|
150
150
|
`, s = document.createElement("style");
|
|
151
|
-
s.textContent = o +
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
let
|
|
155
|
-
return
|
|
151
|
+
s.textContent = o + It + (r.injectCss ?? ""), i.appendChild(s);
|
|
152
|
+
const d = document.createElement("div");
|
|
153
|
+
d.style.pointerEvents = "auto", i.appendChild(d);
|
|
154
|
+
let l = t;
|
|
155
|
+
return Y(dt(e, l), d), {
|
|
156
156
|
shadowRoot: i,
|
|
157
|
-
update(
|
|
158
|
-
|
|
157
|
+
update(g) {
|
|
158
|
+
l = { ...l, ...g }, Y(dt(e, l), d);
|
|
159
159
|
},
|
|
160
160
|
unmount() {
|
|
161
|
-
|
|
161
|
+
Y(null, d), n.remove();
|
|
162
162
|
}
|
|
163
163
|
};
|
|
164
164
|
}
|
|
165
165
|
const Kt = (e, t, r) => {
|
|
166
|
-
const
|
|
167
|
-
return
|
|
166
|
+
const n = e[t];
|
|
167
|
+
return n ? typeof n == "function" ? n() : Promise.resolve(n) : new Promise((i, o) => {
|
|
168
168
|
(typeof queueMicrotask == "function" ? queueMicrotask : setTimeout)(
|
|
169
169
|
o.bind(
|
|
170
170
|
null,
|
|
@@ -202,126 +202,130 @@ const Kt = (e, t, r) => {
|
|
|
202
202
|
"th",
|
|
203
203
|
"vi",
|
|
204
204
|
"he"
|
|
205
|
-
],
|
|
206
|
-
function
|
|
205
|
+
], At = (e, t, r) => Lt(t, r), Mt = Nt({ t: At, locale: "en" });
|
|
206
|
+
function Lt(e, t) {
|
|
207
207
|
if (!t) return e;
|
|
208
208
|
let r = e;
|
|
209
|
-
for (const [
|
|
210
|
-
r = r.split(`{${
|
|
209
|
+
for (const [n, i] of Object.entries(t))
|
|
210
|
+
r = r.split(`{${n}}`).join(String(i));
|
|
211
211
|
return r;
|
|
212
212
|
}
|
|
213
|
-
const
|
|
214
|
-
function
|
|
213
|
+
const Q = /* @__PURE__ */ new Map(), tt = /* @__PURE__ */ new Map();
|
|
214
|
+
function Pt(e) {
|
|
215
215
|
return Yt.includes(e);
|
|
216
216
|
}
|
|
217
217
|
function Xt(e) {
|
|
218
218
|
const t = [];
|
|
219
219
|
if (typeof navigator < "u" && navigator.language) {
|
|
220
220
|
t.push(navigator.language);
|
|
221
|
-
const
|
|
222
|
-
|
|
221
|
+
const n = navigator.language.split("-")[0];
|
|
222
|
+
n && n !== navigator.language && t.push(n);
|
|
223
223
|
}
|
|
224
224
|
const r = e.settings.locale_default;
|
|
225
225
|
if (r) {
|
|
226
226
|
t.push(r);
|
|
227
|
-
const
|
|
228
|
-
|
|
227
|
+
const n = r.split("-")[0];
|
|
228
|
+
n && n !== r && t.push(n);
|
|
229
229
|
}
|
|
230
|
-
for (const
|
|
231
|
-
if (
|
|
230
|
+
for (const n of t)
|
|
231
|
+
if (Pt(n)) return n;
|
|
232
232
|
return null;
|
|
233
233
|
}
|
|
234
|
-
function Jt(e) {
|
|
235
|
-
return !!e.locales &&
|
|
234
|
+
function Jt(e, t) {
|
|
235
|
+
return !!e.locales && e.locales[t] !== void 0;
|
|
236
236
|
}
|
|
237
237
|
async function Qt(e) {
|
|
238
|
-
const t =
|
|
238
|
+
const t = Q.get(e);
|
|
239
239
|
if (t) return t;
|
|
240
|
-
const r =
|
|
240
|
+
const r = tt.get(e);
|
|
241
241
|
if (r) return r;
|
|
242
|
-
const
|
|
242
|
+
const n = Kt(/* @__PURE__ */ Object.assign({ "./locales/ar.ts": () => import("./ar-B2Wg_IrC.js"), "./locales/cs.ts": () => import("./cs-BNo9Dx0Q.js"), "./locales/da.ts": () => import("./da-Do9Lq6En.js"), "./locales/de.ts": () => import("./de-C8pDZNvx.js"), "./locales/el.ts": () => import("./el-DzMNX-_P.js"), "./locales/es.ts": () => import("./es-YrKt-q4w.js"), "./locales/fi.ts": () => import("./fi-Bh44pwZ4.js"), "./locales/fr.ts": () => import("./fr-Bc0pw4ws.js"), "./locales/he.ts": () => import("./he-Bfm-bhe3.js"), "./locales/hi.ts": () => import("./hi-D-O-B9Dn.js"), "./locales/hu.ts": () => import("./hu-CmIuAbLL.js"), "./locales/id.ts": () => import("./id-DN7IES-A.js"), "./locales/it.ts": () => import("./it-Cz5Nmqx5.js"), "./locales/ja.ts": () => import("./ja-BH9BlBh2.js"), "./locales/ko.ts": () => import("./ko-CYV9QuYs.js"), "./locales/nl.ts": () => import("./nl-BvkB900D.js"), "./locales/no.ts": () => import("./no-3s9_ormb.js"), "./locales/pl.ts": () => import("./pl-C9WTGQtb.js"), "./locales/pt.ts": () => import("./pt-uFVUv_Op.js"), "./locales/ro.ts": () => import("./ro-BrqQ8Au-.js"), "./locales/ru.ts": () => import("./ru-DK594dA8.js"), "./locales/sv.ts": () => import("./sv-CHNH8-mq.js"), "./locales/th.ts": () => import("./th-l24Pm5q-.js"), "./locales/tr.ts": () => import("./tr-ADpigSY5.js"), "./locales/uk.ts": () => import("./uk-CGqo4jek.js"), "./locales/vi.ts": () => import("./vi-Dk9bTu6f.js"), "./locales/zh.ts": () => import("./zh-LDkEV2D9.js") }), `./locales/${e}.ts`, 3).then((i) => {
|
|
243
243
|
const o = i.default ?? {};
|
|
244
|
-
return
|
|
244
|
+
return Q.set(e, o), o;
|
|
245
245
|
}).catch((i) => {
|
|
246
246
|
console.warn(`[paywall] failed to load locale chunk "${e}"`, i);
|
|
247
247
|
const o = {};
|
|
248
|
-
return
|
|
248
|
+
return Q.set(e, o), o;
|
|
249
249
|
}).finally(() => {
|
|
250
|
-
|
|
250
|
+
tt.delete(e);
|
|
251
251
|
});
|
|
252
|
-
return
|
|
252
|
+
return tt.set(e, n), n;
|
|
253
253
|
}
|
|
254
254
|
function te({ bootstrap: e, forceLocale: t, children: r }) {
|
|
255
|
-
const [
|
|
256
|
-
|
|
257
|
-
const
|
|
258
|
-
|
|
259
|
-
|
|
255
|
+
const [n, i] = b("en"), [o, s] = b(null);
|
|
256
|
+
E(() => {
|
|
257
|
+
const g = (t && Pt(t) ? t : null) ?? (() => {
|
|
258
|
+
if (!e) return null;
|
|
259
|
+
const u = Xt(e);
|
|
260
|
+
return !u || !Jt(e, u) ? null : u;
|
|
261
|
+
})();
|
|
262
|
+
if (!g) {
|
|
263
|
+
(o !== null || n !== "en") && (i("en"), s(null));
|
|
260
264
|
return;
|
|
261
265
|
}
|
|
262
|
-
if (
|
|
263
|
-
let
|
|
264
|
-
return Qt(
|
|
265
|
-
|
|
266
|
+
if (g === n && o) return;
|
|
267
|
+
let p = !1;
|
|
268
|
+
return Qt(g).then((u) => {
|
|
269
|
+
p || (i(g), s(u));
|
|
266
270
|
}), () => {
|
|
267
|
-
|
|
271
|
+
p = !0;
|
|
268
272
|
};
|
|
269
273
|
}, [e, t]);
|
|
270
|
-
const
|
|
271
|
-
locale:
|
|
272
|
-
t: o ? (
|
|
274
|
+
const d = {
|
|
275
|
+
locale: n,
|
|
276
|
+
t: o ? (l, g, p) => Lt(o[l] ?? g, p) : At
|
|
273
277
|
};
|
|
274
|
-
return /* @__PURE__ */
|
|
278
|
+
return /* @__PURE__ */ a(Mt.Provider, { value: d, children: r });
|
|
275
279
|
}
|
|
276
280
|
function v() {
|
|
277
|
-
return
|
|
281
|
+
return $t(Mt);
|
|
278
282
|
}
|
|
279
|
-
const
|
|
283
|
+
const gt = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
280
284
|
function ee({
|
|
281
285
|
open: e,
|
|
282
286
|
onClose: t,
|
|
283
287
|
labelledBy: r,
|
|
284
|
-
brandColor:
|
|
288
|
+
brandColor: n,
|
|
285
289
|
topBanner: i,
|
|
286
290
|
allowClose: o = !0,
|
|
287
291
|
hideCloseButton: s = !1,
|
|
288
|
-
inline:
|
|
289
|
-
children:
|
|
292
|
+
inline: d = !1,
|
|
293
|
+
children: l
|
|
290
294
|
}) {
|
|
291
|
-
const { t:
|
|
292
|
-
return
|
|
295
|
+
const { t: g } = v(), p = F(null), u = F(null);
|
|
296
|
+
return E(() => {
|
|
293
297
|
if (!e) return;
|
|
294
|
-
|
|
295
|
-
const
|
|
296
|
-
|
|
297
|
-
const
|
|
298
|
-
if (
|
|
298
|
+
u.current = document.activeElement ?? null;
|
|
299
|
+
const h = p.current;
|
|
300
|
+
h && (h.querySelector(gt) ?? h).focus({ preventScroll: !0 });
|
|
301
|
+
const m = (_) => {
|
|
302
|
+
if (_.key === "Escape") {
|
|
299
303
|
if (!o) return;
|
|
300
|
-
|
|
304
|
+
_.stopPropagation(), t();
|
|
301
305
|
return;
|
|
302
306
|
}
|
|
303
|
-
if (
|
|
304
|
-
const
|
|
305
|
-
|
|
306
|
-
).filter((
|
|
307
|
-
if (
|
|
308
|
-
|
|
307
|
+
if (_.key !== "Tab" || !p.current) return;
|
|
308
|
+
const S = Array.from(
|
|
309
|
+
p.current.querySelectorAll(gt)
|
|
310
|
+
).filter((z) => !z.hasAttribute("disabled") && z.tabIndex !== -1);
|
|
311
|
+
if (S.length === 0) {
|
|
312
|
+
_.preventDefault();
|
|
309
313
|
return;
|
|
310
314
|
}
|
|
311
|
-
const
|
|
312
|
-
|
|
315
|
+
const A = S[0], R = S[S.length - 1], P = document.activeElement;
|
|
316
|
+
_.shiftKey && P === A ? (_.preventDefault(), R.focus()) : !_.shiftKey && P === R && (_.preventDefault(), A.focus());
|
|
313
317
|
};
|
|
314
|
-
document.addEventListener("keydown",
|
|
315
|
-
const
|
|
316
|
-
return
|
|
317
|
-
document.removeEventListener("keydown",
|
|
318
|
+
document.addEventListener("keydown", m, !0);
|
|
319
|
+
const j = document.body.style.overflow;
|
|
320
|
+
return d || (document.body.style.overflow = "hidden"), () => {
|
|
321
|
+
document.removeEventListener("keydown", m, !0), d || (document.body.style.overflow = j), u.current?.focus?.({ preventScroll: !0 });
|
|
318
322
|
};
|
|
319
|
-
}, [e, t, o,
|
|
323
|
+
}, [e, t, o, d]), e ? /* @__PURE__ */ c(
|
|
320
324
|
"div",
|
|
321
325
|
{
|
|
322
|
-
class: `${
|
|
323
|
-
onClick: (
|
|
324
|
-
o &&
|
|
326
|
+
class: `${d ? "absolute z-[1]" : "fixed z-[2147483647]"} inset-0 flex items-center justify-center bg-slate-950/50 p-2 sm:p-4 backdrop-blur-md animate-[pw-fade-in_180ms_ease-out]`,
|
|
327
|
+
onClick: (h) => {
|
|
328
|
+
o && h.target === h.currentTarget && t();
|
|
325
329
|
},
|
|
326
330
|
"data-pw-root": !0,
|
|
327
331
|
children: [
|
|
@@ -329,13 +333,13 @@ function ee({
|
|
|
329
333
|
"div",
|
|
330
334
|
{
|
|
331
335
|
class: "relative flex w-full max-w-[400px] flex-col animate-[pw-scale-in_220ms_cubic-bezier(0.16,1,0.3,1)]",
|
|
332
|
-
style: { "--pw-accent":
|
|
336
|
+
style: { "--pw-accent": n ?? "#3b82f6" },
|
|
333
337
|
children: [
|
|
334
338
|
i,
|
|
335
339
|
/* @__PURE__ */ c(
|
|
336
340
|
"div",
|
|
337
341
|
{
|
|
338
|
-
ref:
|
|
342
|
+
ref: p,
|
|
339
343
|
role: "dialog",
|
|
340
344
|
"aria-modal": "true",
|
|
341
345
|
"aria-labelledby": r,
|
|
@@ -345,15 +349,15 @@ function ee({
|
|
|
345
349
|
boxShadow: "0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.1)"
|
|
346
350
|
},
|
|
347
351
|
children: [
|
|
348
|
-
|
|
349
|
-
o && !s ? /* @__PURE__ */
|
|
352
|
+
l,
|
|
353
|
+
o && !s ? /* @__PURE__ */ a(
|
|
350
354
|
"button",
|
|
351
355
|
{
|
|
352
356
|
type: "button",
|
|
353
357
|
onClick: t,
|
|
354
|
-
"aria-label":
|
|
358
|
+
"aria-label": g("modal.close_aria", "Close"),
|
|
355
359
|
class: "absolute right-3 top-3 z-10 flex h-8 w-8 items-center justify-center rounded-full bg-white/80 text-gray-500 backdrop-blur-sm transition-colors hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
|
|
356
|
-
children: /* @__PURE__ */
|
|
360
|
+
children: /* @__PURE__ */ a("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ a(
|
|
357
361
|
"path",
|
|
358
362
|
{
|
|
359
363
|
d: "M3 3l10 10M13 3L3 13",
|
|
@@ -370,7 +374,7 @@ function ee({
|
|
|
370
374
|
]
|
|
371
375
|
}
|
|
372
376
|
),
|
|
373
|
-
/* @__PURE__ */
|
|
377
|
+
/* @__PURE__ */ a("style", { children: `
|
|
374
378
|
@keyframes pw-fade-in { from { opacity: 0 } to { opacity: 1 } }
|
|
375
379
|
@keyframes pw-scale-in {
|
|
376
380
|
from { opacity: 0; transform: translateY(12px) scale(0.96) }
|
|
@@ -393,9 +397,9 @@ function re(e, t) {
|
|
|
393
397
|
return t("auth.continue_with_facebook", "Continue with Facebook");
|
|
394
398
|
}
|
|
395
399
|
}
|
|
396
|
-
function
|
|
397
|
-
const
|
|
398
|
-
if (!(e instanceof
|
|
400
|
+
function ft(e, t, r) {
|
|
401
|
+
const n = t === "signup" ? r("auth.signup_failed", "Sign-up failed") : r("auth.signin_failed", "Sign-in failed");
|
|
402
|
+
if (!(e instanceof O)) return n;
|
|
399
403
|
switch (e.code) {
|
|
400
404
|
case "invalid_credentials":
|
|
401
405
|
return r("auth.invalid_credentials", "Invalid email or password");
|
|
@@ -414,7 +418,7 @@ function wt(e, t, r) {
|
|
|
414
418
|
case "over_request_rate_limit":
|
|
415
419
|
case "rate_limited":
|
|
416
420
|
case "http_429":
|
|
417
|
-
return r("auth.rate_limited", "Too many requests. Please try again
|
|
421
|
+
return r("auth.rate_limited", "Too many requests. Please try again later.");
|
|
418
422
|
case "network_error":
|
|
419
423
|
return r("auth.network_error", "Network error. Please check your connection and try again.");
|
|
420
424
|
case "upstream":
|
|
@@ -424,16 +428,16 @@ function wt(e, t, r) {
|
|
|
424
428
|
case "http_504":
|
|
425
429
|
return r("auth.service_unavailable", "Service is temporarily unavailable. Please try again.");
|
|
426
430
|
default:
|
|
427
|
-
return
|
|
431
|
+
return n;
|
|
428
432
|
}
|
|
429
433
|
}
|
|
430
|
-
function
|
|
431
|
-
const r = t.auth,
|
|
434
|
+
function Tt({ block: e, ctx: t }) {
|
|
435
|
+
const r = t.auth, n = t.authSession, i = e.allow_signup !== !1, o = e.allow_password_reset !== !1, s = e.hide_when_authenticated !== !1;
|
|
432
436
|
if (!r)
|
|
433
437
|
return typeof console < "u" && console.warn("[paywall] auth_panel rendered without AuthClient — pass `auth: true` to PaywallUI"), null;
|
|
434
|
-
const
|
|
435
|
-
return
|
|
436
|
-
}) }) : /* @__PURE__ */
|
|
438
|
+
const d = n && !n.user.is_anonymous ? n : null;
|
|
439
|
+
return d && s ? null : d ? /* @__PURE__ */ a(ie, { email: d.user.email ?? "", onSignOut: () => r.signOut().catch(() => {
|
|
440
|
+
}) }) : /* @__PURE__ */ a(
|
|
437
441
|
ne,
|
|
438
442
|
{
|
|
439
443
|
block: e,
|
|
@@ -447,10 +451,10 @@ function ie({ email: e, onSignOut: t }) {
|
|
|
447
451
|
const { t: r } = v();
|
|
448
452
|
return /* @__PURE__ */ c("div", { class: "flex items-center justify-between gap-3 rounded-2xl bg-gray-100 px-4 py-3", children: [
|
|
449
453
|
/* @__PURE__ */ c("div", { class: "flex flex-col", children: [
|
|
450
|
-
/* @__PURE__ */
|
|
451
|
-
/* @__PURE__ */
|
|
454
|
+
/* @__PURE__ */ a("span", { class: "text-[10px] font-semibold uppercase tracking-wider text-gray-500", children: r("auth.signed_in", "Signed in") }),
|
|
455
|
+
/* @__PURE__ */ a("span", { class: "text-sm font-medium text-gray-900", children: e })
|
|
452
456
|
] }),
|
|
453
|
-
/* @__PURE__ */
|
|
457
|
+
/* @__PURE__ */ a(
|
|
454
458
|
"button",
|
|
455
459
|
{
|
|
456
460
|
type: "button",
|
|
@@ -461,166 +465,166 @@ function ie({ email: e, onSignOut: t }) {
|
|
|
461
465
|
)
|
|
462
466
|
] });
|
|
463
467
|
}
|
|
464
|
-
function ne({ block: e, allowSignup: t, allowReset: r, ctx:
|
|
465
|
-
const { t: i } = v(), o =
|
|
466
|
-
|
|
468
|
+
function ne({ block: e, allowSignup: t, allowReset: r, ctx: n }) {
|
|
469
|
+
const { t: i } = v(), o = n.auth, s = e.providers ?? [], d = n.initialAuthMode === "signup" && t ? "signup" : "signin", [l, g] = b(d), [p, u] = b(""), [x, y] = b(""), [k, h] = b(""), [m, j] = b(""), [_, S] = b(null), A = F(!1), [R, P] = b(null), [z, U] = b(null), [B, T] = b(!1), [M, D] = b(null);
|
|
470
|
+
E(() => {
|
|
467
471
|
if (typeof o.getLastLogin != "function") return;
|
|
468
|
-
let
|
|
472
|
+
let I = !1;
|
|
469
473
|
return o.getLastLogin().then(
|
|
470
|
-
(
|
|
471
|
-
|
|
474
|
+
(L) => {
|
|
475
|
+
I || !L || (D(L), L.email && u((H) => H === "" ? L.email : H));
|
|
472
476
|
},
|
|
473
477
|
() => {
|
|
474
478
|
}
|
|
475
479
|
), () => {
|
|
476
|
-
|
|
480
|
+
I = !0;
|
|
477
481
|
};
|
|
478
482
|
}, [o]);
|
|
479
|
-
const
|
|
480
|
-
|
|
481
|
-
},
|
|
482
|
-
if (
|
|
483
|
-
|
|
484
|
-
if (!h.trim()) return;
|
|
485
|
-
D(!0);
|
|
486
|
-
return;
|
|
487
|
-
}
|
|
488
|
-
if (l === "signup" && p !== _) {
|
|
489
|
-
I(i("auth.passwords_mismatch", "Passwords don't match"));
|
|
490
|
-
return;
|
|
491
|
-
}
|
|
492
|
-
y("email");
|
|
483
|
+
const N = (I) => {
|
|
484
|
+
g(I), P(null), U(null), T(!1);
|
|
485
|
+
}, Z = async (I) => {
|
|
486
|
+
if (I.preventDefault(), !(A.current || _)) {
|
|
487
|
+
A.current = !0;
|
|
493
488
|
try {
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
489
|
+
if (P(null), U(null), l === "signup" && !B) {
|
|
490
|
+
if (!p.trim()) return;
|
|
491
|
+
T(!0);
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
494
|
+
if (l === "signup" && x !== k) {
|
|
495
|
+
P(i("auth.passwords_mismatch", "Passwords don't match"));
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
498
|
+
S("email");
|
|
499
|
+
try {
|
|
500
|
+
l === "signin" ? await o.signInWithEmail({ email: p, password: x }) : l === "signup" ? (await o.signUp({ email: p, password: x })).kind === "confirmation_required" && (y(""), g("signup_verify"), U(i("auth.check_email_message", "Check your email for a confirmation code."))) : l === "forgot" ? (await o.requestPasswordReset({ email: p }), g("reset_sent"), U(
|
|
501
|
+
i("auth.reset_sent_message", "If that email exists, a reset code has been sent.")
|
|
502
|
+
)) : l === "signup_verify" ? await o.verifyOtp({ email: p, token: m, type: "email" }) : l === "reset_verify" && (await o.verifyOtp({
|
|
503
|
+
email: p,
|
|
504
|
+
token: m,
|
|
505
|
+
type: x ? "recovery" : "email"
|
|
506
|
+
}), x && await o.updatePassword({ password: x }));
|
|
507
|
+
} catch (L) {
|
|
508
|
+
P(ft(L, l === "signup" ? "signup" : l === "signup_verify" || l === "reset_verify" ? "otp" : l === "forgot" ? "reset" : "signin", i));
|
|
509
|
+
} finally {
|
|
510
|
+
S(null);
|
|
511
|
+
}
|
|
503
512
|
} finally {
|
|
504
|
-
|
|
513
|
+
A.current = !1;
|
|
505
514
|
}
|
|
506
515
|
}
|
|
507
|
-
},
|
|
508
|
-
if (!
|
|
509
|
-
|
|
516
|
+
}, w = async (I) => {
|
|
517
|
+
if (!(A.current || _)) {
|
|
518
|
+
A.current = !0, S(I), P(null), U(null);
|
|
510
519
|
try {
|
|
511
520
|
await o.signInWithOAuth({
|
|
512
|
-
provider:
|
|
513
|
-
onPopupOpened: () =>
|
|
521
|
+
provider: I,
|
|
522
|
+
onPopupOpened: () => S(null)
|
|
514
523
|
});
|
|
515
|
-
} catch (
|
|
516
|
-
if (
|
|
524
|
+
} catch (L) {
|
|
525
|
+
if (L instanceof O && (L.code === "oauth_cancelled" || L.code === "oauth_timeout"))
|
|
517
526
|
return;
|
|
518
|
-
|
|
527
|
+
P(ft(L, "signin", i));
|
|
519
528
|
} finally {
|
|
520
|
-
|
|
529
|
+
A.current = !1, S(null);
|
|
521
530
|
}
|
|
522
531
|
}
|
|
523
|
-
},
|
|
532
|
+
}, f = s.length > 0 && (l === "signin" || l === "signup"), C = l === "signin" || l === "signup" || l === "forgot", K = l === "signin" || l === "signup" && B;
|
|
524
533
|
return /* @__PURE__ */ c("div", { class: "flex flex-col gap-5", children: [
|
|
525
|
-
/* @__PURE__ */
|
|
526
|
-
|
|
527
|
-
s.map((
|
|
534
|
+
/* @__PURE__ */ a(ae, { mode: l, customHeading: e.heading, customSubheading: e.subheading }),
|
|
535
|
+
f ? /* @__PURE__ */ c("div", { class: "flex flex-col gap-2.5", children: [
|
|
536
|
+
s.map((I) => /* @__PURE__ */ c("div", { class: "relative", children: [
|
|
528
537
|
/* @__PURE__ */ c(
|
|
529
538
|
"button",
|
|
530
539
|
{
|
|
531
540
|
type: "button",
|
|
532
|
-
onClick: () =>
|
|
533
|
-
disabled:
|
|
541
|
+
onClick: () => w(I),
|
|
542
|
+
disabled: _ !== null,
|
|
534
543
|
class: "flex h-12 w-full items-center justify-center gap-2.5 rounded-full border-1 border-gray-200 bg-white px-5 text-base font-medium text-gray-900 transition-all hover:border-gray-300 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-60 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
|
|
535
544
|
children: [
|
|
536
|
-
|
|
537
|
-
/* @__PURE__ */
|
|
545
|
+
_ === I ? /* @__PURE__ */ a("span", { class: "inline-block h-4 w-4 animate-spin rounded-full border-2 border-gray-300 border-t-gray-700" }) : /* @__PURE__ */ a(fe, { provider: I }),
|
|
546
|
+
/* @__PURE__ */ a("span", { children: re(I, i) })
|
|
538
547
|
]
|
|
539
548
|
}
|
|
540
549
|
),
|
|
541
|
-
|
|
542
|
-
] },
|
|
543
|
-
/* @__PURE__ */
|
|
550
|
+
M?.method === I ? /* @__PURE__ */ a(pe, { email: M.email }) : null
|
|
551
|
+
] }, I)),
|
|
552
|
+
/* @__PURE__ */ a(ge, {})
|
|
544
553
|
] }) : null,
|
|
545
|
-
/* @__PURE__ */ c("form", { onSubmit:
|
|
546
|
-
|
|
547
|
-
|
|
554
|
+
/* @__PURE__ */ c("form", { onSubmit: Z, class: "flex flex-col gap-3", children: [
|
|
555
|
+
C && /* @__PURE__ */ a(
|
|
556
|
+
wt,
|
|
548
557
|
{
|
|
549
558
|
type: "email",
|
|
550
559
|
placeholder: i("auth.email", "Email address"),
|
|
551
|
-
value:
|
|
552
|
-
onInput:
|
|
560
|
+
value: p,
|
|
561
|
+
onInput: u,
|
|
553
562
|
autocomplete: "email",
|
|
554
563
|
required: !0
|
|
555
564
|
}
|
|
556
565
|
),
|
|
557
|
-
|
|
558
|
-
|
|
566
|
+
K && /* @__PURE__ */ a(
|
|
567
|
+
et,
|
|
559
568
|
{
|
|
560
569
|
placeholder: i("auth.password", "Password"),
|
|
561
|
-
value:
|
|
562
|
-
onInput:
|
|
570
|
+
value: x,
|
|
571
|
+
onInput: y,
|
|
563
572
|
autocomplete: l === "signin" ? "current-password" : "new-password",
|
|
564
573
|
required: !0
|
|
565
574
|
}
|
|
566
575
|
),
|
|
567
|
-
l === "signup" &&
|
|
568
|
-
|
|
576
|
+
l === "signup" && B && /* @__PURE__ */ a(
|
|
577
|
+
et,
|
|
569
578
|
{
|
|
570
579
|
placeholder: i("auth.repeat_password", "Repeat password"),
|
|
571
|
-
value:
|
|
572
|
-
onInput:
|
|
580
|
+
value: k,
|
|
581
|
+
onInput: h,
|
|
573
582
|
autocomplete: "new-password",
|
|
574
583
|
required: !0
|
|
575
584
|
}
|
|
576
585
|
),
|
|
577
|
-
l === "reset_verify" && /* @__PURE__ */
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
l
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
label: se(l, O, e.submit_label ?? e.heading, i)
|
|
613
|
-
}
|
|
614
|
-
),
|
|
615
|
-
l === "signin" && R?.method === "email" ? /* @__PURE__ */ n(bt, { email: R.email }) : null
|
|
616
|
-
] })
|
|
586
|
+
(l === "signup_verify" || l === "reset_verify") && /* @__PURE__ */ a(
|
|
587
|
+
wt,
|
|
588
|
+
{
|
|
589
|
+
type: "text",
|
|
590
|
+
placeholder: i("auth.confirmation_code", "Confirmation code"),
|
|
591
|
+
value: m,
|
|
592
|
+
onInput: j,
|
|
593
|
+
autocomplete: "one-time-code",
|
|
594
|
+
inputMode: "numeric",
|
|
595
|
+
required: !0
|
|
596
|
+
}
|
|
597
|
+
),
|
|
598
|
+
l === "reset_verify" && /* @__PURE__ */ a(
|
|
599
|
+
et,
|
|
600
|
+
{
|
|
601
|
+
placeholder: i(
|
|
602
|
+
"auth.new_password_optional",
|
|
603
|
+
"New password (optional — only for password reset)"
|
|
604
|
+
),
|
|
605
|
+
value: x,
|
|
606
|
+
onInput: y,
|
|
607
|
+
autocomplete: "new-password"
|
|
608
|
+
}
|
|
609
|
+
),
|
|
610
|
+
l === "reset_sent" && z && /* @__PURE__ */ a("p", { class: "rounded-2xl bg-gray-100 px-4 py-3 text-sm text-gray-600", children: z }),
|
|
611
|
+
l === "signin" && r && /* @__PURE__ */ a("div", { class: "flex justify-end text-sm", children: /* @__PURE__ */ a(W, { onClick: () => N("forgot"), children: i("auth.forgot_password", "Forgot password?") }) }),
|
|
612
|
+
R && /* @__PURE__ */ a("p", { class: "text-sm text-red-600", children: R }),
|
|
613
|
+
z && l !== "reset_sent" && /* @__PURE__ */ a("p", { class: "text-sm text-gray-500", children: z }),
|
|
614
|
+
l !== "reset_sent" && /* @__PURE__ */ a(
|
|
615
|
+
ce,
|
|
616
|
+
{
|
|
617
|
+
busy: _ === "email",
|
|
618
|
+
label: se(l, B, e.submit_label ?? e.heading, i)
|
|
619
|
+
}
|
|
620
|
+
)
|
|
617
621
|
] }),
|
|
618
|
-
/* @__PURE__ */
|
|
622
|
+
/* @__PURE__ */ a(
|
|
619
623
|
le,
|
|
620
624
|
{
|
|
621
625
|
mode: l,
|
|
622
626
|
allowSignup: t,
|
|
623
|
-
onSwitch:
|
|
627
|
+
onSwitch: N
|
|
624
628
|
}
|
|
625
629
|
)
|
|
626
630
|
] });
|
|
@@ -630,10 +634,10 @@ function ae({
|
|
|
630
634
|
customHeading: t,
|
|
631
635
|
customSubheading: r
|
|
632
636
|
}) {
|
|
633
|
-
const { t:
|
|
637
|
+
const { t: n } = v(), i = oe(e, n), o = e === "signin" || e === "signup", s = o && t ? t : i.title, d = o && r !== void 0 ? r || null : i.subtitle;
|
|
634
638
|
return /* @__PURE__ */ c("div", { class: "flex flex-col gap-2", children: [
|
|
635
|
-
/* @__PURE__ */
|
|
636
|
-
|
|
639
|
+
/* @__PURE__ */ a("h2", { class: "text-3xl font-bold tracking-tight text-gray-900", children: s }),
|
|
640
|
+
d ? /* @__PURE__ */ a("p", { class: "text-base leading-relaxed text-gray-600", children: d }) : null
|
|
637
641
|
] });
|
|
638
642
|
}
|
|
639
643
|
function oe(e, t) {
|
|
@@ -669,21 +673,30 @@ function oe(e, t) {
|
|
|
669
673
|
"Enter the code from your email and a new password."
|
|
670
674
|
)
|
|
671
675
|
};
|
|
676
|
+
case "signup_verify":
|
|
677
|
+
return {
|
|
678
|
+
title: t("auth.confirm_email_title", "Confirm your email"),
|
|
679
|
+
subtitle: t(
|
|
680
|
+
"auth.confirm_email_subtitle",
|
|
681
|
+
"Enter the code we sent to your email to finish creating your account."
|
|
682
|
+
)
|
|
683
|
+
};
|
|
672
684
|
}
|
|
673
685
|
}
|
|
674
|
-
function se(e, t, r,
|
|
686
|
+
function se(e, t, r, n) {
|
|
675
687
|
if (e === "signin" && r) return r;
|
|
676
688
|
switch (e) {
|
|
677
689
|
case "signin":
|
|
678
|
-
return
|
|
690
|
+
return n("auth.log_in", "Sign In");
|
|
679
691
|
case "signup":
|
|
680
|
-
return t ?
|
|
692
|
+
return t ? n("auth.create_account", "Create Account") : n("auth.sign_up", "Sign Up");
|
|
681
693
|
case "forgot":
|
|
682
|
-
return
|
|
694
|
+
return n("auth.send_reset", "Send Reset Email");
|
|
695
|
+
case "signup_verify":
|
|
683
696
|
case "reset_verify":
|
|
684
|
-
return
|
|
697
|
+
return n("auth.verify", "Verify");
|
|
685
698
|
default:
|
|
686
|
-
return
|
|
699
|
+
return n("cta.continue", "Continue");
|
|
687
700
|
}
|
|
688
701
|
}
|
|
689
702
|
function le({
|
|
@@ -691,26 +704,26 @@ function le({
|
|
|
691
704
|
allowSignup: t,
|
|
692
705
|
onSwitch: r
|
|
693
706
|
}) {
|
|
694
|
-
const { t:
|
|
707
|
+
const { t: n } = v();
|
|
695
708
|
return e === "signin" && t ? /* @__PURE__ */ c("p", { class: "text-center text-sm text-gray-600", children: [
|
|
696
|
-
|
|
709
|
+
n("auth.no_account", "Don't have an account?"),
|
|
697
710
|
" ",
|
|
698
|
-
/* @__PURE__ */
|
|
699
|
-
] }) : e === "signup" ? /* @__PURE__ */ c("p", { class: "text-center text-sm text-gray-600", children: [
|
|
700
|
-
|
|
711
|
+
/* @__PURE__ */ a(W, { onClick: () => r("signup"), children: n("auth.sign_up_link", "Sign Up") })
|
|
712
|
+
] }) : e === "signup" || e === "signup_verify" ? /* @__PURE__ */ c("p", { class: "text-center text-sm text-gray-600", children: [
|
|
713
|
+
n("auth.have_account", "Already have an account?"),
|
|
701
714
|
" ",
|
|
702
|
-
/* @__PURE__ */
|
|
715
|
+
/* @__PURE__ */ a(W, { onClick: () => r("signin"), children: n("auth.log_in_link", "Log In") })
|
|
703
716
|
] }) : e === "forgot" || e === "reset_sent" || e === "reset_verify" ? /* @__PURE__ */ c("p", { class: "text-center text-sm text-gray-600", children: [
|
|
704
|
-
|
|
717
|
+
n("auth.no_account", "Don't have an account?"),
|
|
705
718
|
" ",
|
|
706
|
-
/* @__PURE__ */
|
|
719
|
+
/* @__PURE__ */ a(W, { onClick: () => r("signup"), children: n("auth.sign_up_link", "Sign Up") })
|
|
707
720
|
] }) : null;
|
|
708
721
|
}
|
|
709
722
|
function W({
|
|
710
723
|
onClick: e,
|
|
711
724
|
children: t
|
|
712
725
|
}) {
|
|
713
|
-
return /* @__PURE__ */
|
|
726
|
+
return /* @__PURE__ */ a(
|
|
714
727
|
"button",
|
|
715
728
|
{
|
|
716
729
|
type: "button",
|
|
@@ -722,7 +735,7 @@ function W({
|
|
|
722
735
|
);
|
|
723
736
|
}
|
|
724
737
|
function ce({ busy: e, label: t }) {
|
|
725
|
-
return /* @__PURE__ */
|
|
738
|
+
return /* @__PURE__ */ a(
|
|
726
739
|
"button",
|
|
727
740
|
{
|
|
728
741
|
type: "submit",
|
|
@@ -732,18 +745,18 @@ function ce({ busy: e, label: t }) {
|
|
|
732
745
|
background: "linear-gradient(135deg, color-mix(in srgb, var(--pw-accent) 55%, white) 0%, var(--pw-accent) 55%, color-mix(in srgb, var(--pw-accent) 90%, black) 100%)",
|
|
733
746
|
boxShadow: "0 0 20px 0 color-mix(in srgb, var(--pw-accent) 25%, transparent), inset 0 0 8px 0 color-mix(in srgb, white 25%, transparent)"
|
|
734
747
|
},
|
|
735
|
-
children: e ? /* @__PURE__ */
|
|
748
|
+
children: e ? /* @__PURE__ */ a("span", { class: "relative z-10 inline-block h-4 w-4 animate-spin rounded-full border-2 border-white/40 border-t-white" }) : /* @__PURE__ */ a("span", { class: "relative z-10", children: t })
|
|
736
749
|
}
|
|
737
750
|
);
|
|
738
751
|
}
|
|
739
|
-
function
|
|
740
|
-
return /* @__PURE__ */
|
|
752
|
+
function wt({ type: e, placeholder: t, value: r, onInput: n, autocomplete: i, inputMode: o, required: s }) {
|
|
753
|
+
return /* @__PURE__ */ a(
|
|
741
754
|
"input",
|
|
742
755
|
{
|
|
743
756
|
type: e,
|
|
744
757
|
value: r,
|
|
745
758
|
placeholder: t,
|
|
746
|
-
onInput: (
|
|
759
|
+
onInput: (d) => n(d.target.value),
|
|
747
760
|
autocomplete: i,
|
|
748
761
|
inputMode: o,
|
|
749
762
|
required: s,
|
|
@@ -751,43 +764,43 @@ function mt({ type: e, placeholder: t, value: r, onInput: a, autocomplete: i, in
|
|
|
751
764
|
}
|
|
752
765
|
);
|
|
753
766
|
}
|
|
754
|
-
function
|
|
755
|
-
const { t: o } = v(), [s,
|
|
756
|
-
|
|
757
|
-
const
|
|
758
|
-
|
|
767
|
+
function et({ placeholder: e, value: t, onInput: r, autocomplete: n, required: i }) {
|
|
768
|
+
const { t: o } = v(), [s, d] = b(!1), l = F(null);
|
|
769
|
+
E(() => {
|
|
770
|
+
const u = l.current;
|
|
771
|
+
u && u.value !== t && (u.value = t);
|
|
759
772
|
}, [s, t]);
|
|
760
|
-
const
|
|
773
|
+
const g = o("auth.show_password", "Show password"), p = o("auth.hide_password", "Hide password");
|
|
761
774
|
return /* @__PURE__ */ c("div", { class: "relative", children: [
|
|
762
|
-
/* @__PURE__ */
|
|
775
|
+
/* @__PURE__ */ a(
|
|
763
776
|
"input",
|
|
764
777
|
{
|
|
765
|
-
ref:
|
|
778
|
+
ref: l,
|
|
766
779
|
type: s ? "text" : "password",
|
|
767
780
|
value: t,
|
|
768
781
|
placeholder: e,
|
|
769
|
-
onInput: (
|
|
770
|
-
autocomplete:
|
|
782
|
+
onInput: (u) => r(u.target.value),
|
|
783
|
+
autocomplete: n,
|
|
771
784
|
required: i,
|
|
772
785
|
class: "h-14 w-full rounded-2xl bg-gray-100 pl-5 pr-12 text-base text-gray-900 outline-none transition-all placeholder:text-gray-500 hover:bg-gray-200/60 focus:bg-gray-200/60 focus:shadow-[0_0_0_2px_color-mix(in_srgb,var(--pw-accent)_30%,transparent)]"
|
|
773
786
|
}
|
|
774
787
|
),
|
|
775
|
-
/* @__PURE__ */
|
|
788
|
+
/* @__PURE__ */ a(
|
|
776
789
|
"button",
|
|
777
790
|
{
|
|
778
791
|
type: "button",
|
|
779
|
-
onClick: () =>
|
|
780
|
-
"aria-label": s ?
|
|
792
|
+
onClick: () => d((u) => !u),
|
|
793
|
+
"aria-label": s ? p : g,
|
|
781
794
|
tabIndex: -1,
|
|
782
795
|
class: "absolute right-4 top-1/2 -translate-y-1/2 flex h-6 w-6 items-center justify-center rounded text-gray-500 transition-colors hover:text-gray-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
|
|
783
|
-
children: s ? /* @__PURE__ */
|
|
796
|
+
children: s ? /* @__PURE__ */ a(ue, {}) : /* @__PURE__ */ a(de, {})
|
|
784
797
|
}
|
|
785
798
|
)
|
|
786
799
|
] });
|
|
787
800
|
}
|
|
788
801
|
function de() {
|
|
789
802
|
return /* @__PURE__ */ c("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
790
|
-
/* @__PURE__ */
|
|
803
|
+
/* @__PURE__ */ a(
|
|
791
804
|
"path",
|
|
792
805
|
{
|
|
793
806
|
d: "M1.667 10S4.583 4.167 10 4.167 18.333 10 18.333 10 15.417 15.833 10 15.833 1.667 10 1.667 10Z",
|
|
@@ -797,12 +810,12 @@ function de() {
|
|
|
797
810
|
"stroke-linejoin": "round"
|
|
798
811
|
}
|
|
799
812
|
),
|
|
800
|
-
/* @__PURE__ */
|
|
813
|
+
/* @__PURE__ */ a("circle", { cx: "10", cy: "10", r: "2.5", stroke: "currentColor", "stroke-width": "1.5" })
|
|
801
814
|
] });
|
|
802
815
|
}
|
|
803
816
|
function ue() {
|
|
804
817
|
return /* @__PURE__ */ c("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
805
|
-
/* @__PURE__ */
|
|
818
|
+
/* @__PURE__ */ a(
|
|
806
819
|
"path",
|
|
807
820
|
{
|
|
808
821
|
d: "M8.236 4.293A6.96 6.96 0 0 1 10 4.167C15.417 4.167 18.333 10 18.333 10a13.5 13.5 0 0 1-1.92 2.755M11.768 11.768A2.5 2.5 0 0 1 8.233 8.233",
|
|
@@ -812,7 +825,7 @@ function ue() {
|
|
|
812
825
|
"stroke-linejoin": "round"
|
|
813
826
|
}
|
|
814
827
|
),
|
|
815
|
-
/* @__PURE__ */
|
|
828
|
+
/* @__PURE__ */ a(
|
|
816
829
|
"path",
|
|
817
830
|
{
|
|
818
831
|
d: "M14.953 14.953A8.84 8.84 0 0 1 10 15.833C4.583 15.833 1.667 10 1.667 10a13.5 13.5 0 0 1 3.38-3.953M1.667 1.667l16.666 16.666",
|
|
@@ -824,45 +837,46 @@ function ue() {
|
|
|
824
837
|
)
|
|
825
838
|
] });
|
|
826
839
|
}
|
|
827
|
-
function
|
|
828
|
-
const { t } = v(), r = e ? t("auth.last_used", "Last · {email}", { email:
|
|
829
|
-
return /* @__PURE__ */
|
|
840
|
+
function pe({ email: e }) {
|
|
841
|
+
const { t } = v(), r = e ? t("auth.last_used", "Last · {email}", { email: he(e) }) : t("auth.last_used_no_email", "Last");
|
|
842
|
+
return /* @__PURE__ */ a("span", { class: "pointer-events-none absolute -top-2 right-3 max-w-[75%] truncate rounded-full bg-gray-900 px-2 py-0.5 text-[10px] font-semibold tracking-wide text-white shadow-sm", children: r });
|
|
830
843
|
}
|
|
831
|
-
function
|
|
844
|
+
function he(e) {
|
|
832
845
|
const [t, r] = e.split("@");
|
|
833
846
|
return r ? `${t.slice(0, 3)}*****@${r}` : e;
|
|
834
847
|
}
|
|
835
|
-
function
|
|
848
|
+
function ge() {
|
|
836
849
|
const { t: e } = v();
|
|
837
850
|
return /* @__PURE__ */ c("div", { class: "flex items-center gap-3 py-1 text-sm text-gray-400", children: [
|
|
838
|
-
/* @__PURE__ */
|
|
839
|
-
/* @__PURE__ */
|
|
840
|
-
/* @__PURE__ */
|
|
851
|
+
/* @__PURE__ */ a("div", { class: "h-px flex-1 bg-gray-200" }),
|
|
852
|
+
/* @__PURE__ */ a("span", { children: e("auth.or", "or") }),
|
|
853
|
+
/* @__PURE__ */ a("div", { class: "h-px flex-1 bg-gray-200" })
|
|
841
854
|
] });
|
|
842
855
|
}
|
|
843
|
-
function
|
|
856
|
+
function fe({ provider: e }) {
|
|
844
857
|
return e === "google" ? /* @__PURE__ */ c("svg", { width: "20", height: "20", viewBox: "0 0 18 18", "aria-hidden": "true", children: [
|
|
845
|
-
/* @__PURE__ */
|
|
846
|
-
/* @__PURE__ */
|
|
847
|
-
/* @__PURE__ */
|
|
848
|
-
/* @__PURE__ */
|
|
858
|
+
/* @__PURE__ */ a("path", { fill: "#4285F4", d: "M17.64 9.2c0-.64-.06-1.25-.16-1.84H9v3.49h4.84a4.14 4.14 0 0 1-1.79 2.71v2.26h2.9c1.7-1.56 2.69-3.87 2.69-6.62Z" }),
|
|
859
|
+
/* @__PURE__ */ a("path", { fill: "#34A853", d: "M9 18c2.43 0 4.47-.8 5.96-2.18l-2.9-2.26c-.8.54-1.83.86-3.06.86-2.36 0-4.36-1.59-5.07-3.74H.92v2.33A9 9 0 0 0 9 18Z" }),
|
|
860
|
+
/* @__PURE__ */ a("path", { fill: "#FBBC05", d: "M3.93 10.68a5.4 5.4 0 0 1 0-3.36V4.99H.92a9 9 0 0 0 0 8.02l3-2.33Z" }),
|
|
861
|
+
/* @__PURE__ */ a("path", { fill: "#EA4335", d: "M9 3.58c1.32 0 2.5.45 3.44 1.34l2.58-2.58A9 9 0 0 0 .92 4.99l3.01 2.33C4.64 5.17 6.64 3.58 9 3.58Z" })
|
|
849
862
|
] }) : e === "apple" ? (
|
|
850
863
|
// viewBox 0 0 24 24 даёт воздух сверху/снизу пути, поэтому визуально
|
|
851
864
|
// Apple-яблоко выглядит меньше Google. Компенсируем увеличенным
|
|
852
865
|
// width/height — 26×26 даёт примерно equal optical size с Google 20×20.
|
|
853
|
-
/* @__PURE__ */
|
|
854
|
-
) : e === "github" ? /* @__PURE__ */
|
|
866
|
+
/* @__PURE__ */ a("svg", { width: "26", height: "26", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ a("path", { d: "M17.05 20.28c-.98.95-2.05.8-3.08.35-1.09-.46-2.09-.48-3.24 0-1.44.62-2.2.44-3.06-.35C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09zM12 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z" }) })
|
|
867
|
+
) : e === "github" ? /* @__PURE__ */ a("svg", { width: "20", height: "20", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ a("path", { d: "M8 0C3.6 0 0 3.6 0 8a8 8 0 0 0 5.5 7.6c.4.1.5-.2.5-.4v-1.5c-2.2.5-2.7-1-2.7-1-.4-.9-.9-1.2-.9-1.2-.7-.5.1-.5.1-.5.8.1 1.2.8 1.2.8.7 1.2 1.9.9 2.4.7 0-.5.3-.9.5-1.1-1.8-.2-3.6-.9-3.6-4 0-.9.3-1.6.8-2.1-.1-.2-.4-1 .1-2.1 0 0 .7-.2 2.2.8a7.6 7.6 0 0 1 4 0c1.5-1 2.2-.8 2.2-.8.4 1.1.2 1.9.1 2.1.5.5.8 1.2.8 2.1 0 3.1-1.9 3.7-3.6 3.9.3.3.6.8.6 1.6V15c0 .2.1.5.6.4A8 8 0 0 0 16 8c0-4.4-3.6-8-8-8Z" }) }) : /* @__PURE__ */ a("svg", { width: "18", height: "20", viewBox: "0 0 14 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ a("path", { d: "M14 2.7C14 1.2 12.8 0 11.3 0H2.7C1.2 0 0 1.2 0 2.7v10.6C0 14.8 1.2 16 2.7 16h4V9.8H4.7v-2H6.7V6.4c0-2 1.2-3.1 3-3.1.9 0 1.7.1 2 .2V5h-1.4c-.8 0-1 .4-1 1v1.5h2.4l-.3 2H9.3V16h2c1.5 0 2.7-1.2 2.7-2.7V2.7Z" }) });
|
|
855
868
|
}
|
|
856
|
-
function
|
|
869
|
+
function we({
|
|
857
870
|
block: e,
|
|
858
871
|
bootstrap: t,
|
|
859
872
|
auth: r,
|
|
860
|
-
authSession:
|
|
873
|
+
authSession: n,
|
|
861
874
|
onBack: i,
|
|
862
875
|
showBack: o = !0,
|
|
863
|
-
intent: s = "preauth"
|
|
876
|
+
intent: s = "preauth",
|
|
877
|
+
initialMode: d
|
|
864
878
|
}) {
|
|
865
|
-
const { t: l } = v(),
|
|
879
|
+
const { t: l } = v(), g = {
|
|
866
880
|
bootstrap: t,
|
|
867
881
|
selectedPriceId: null,
|
|
868
882
|
setSelectedPriceId: () => {
|
|
@@ -870,8 +884,9 @@ function fe({
|
|
|
870
884
|
onAction: () => {
|
|
871
885
|
},
|
|
872
886
|
auth: r,
|
|
873
|
-
authSession:
|
|
874
|
-
|
|
887
|
+
authSession: n,
|
|
888
|
+
initialAuthMode: d
|
|
889
|
+
}, p = s === "restore" ? {
|
|
875
890
|
...e,
|
|
876
891
|
heading: l("auth.restore_purchases_heading", "Restore Purchases"),
|
|
877
892
|
subheading: l(
|
|
@@ -892,12 +907,12 @@ function fe({
|
|
|
892
907
|
submit_label: l("auth.log_in", "Sign In")
|
|
893
908
|
} : e;
|
|
894
909
|
return /* @__PURE__ */ c("div", { class: "relative flex-1 min-h-0 overflow-y-auto p-6 sm:p-8", children: [
|
|
895
|
-
o ? /* @__PURE__ */
|
|
896
|
-
/* @__PURE__ */
|
|
910
|
+
o ? /* @__PURE__ */ a(me, { onClick: i, ariaLabel: l("nav.back_aria", "Back") }) : null,
|
|
911
|
+
/* @__PURE__ */ a(Tt, { block: p, ctx: g })
|
|
897
912
|
] });
|
|
898
913
|
}
|
|
899
|
-
function
|
|
900
|
-
return /* @__PURE__ */
|
|
914
|
+
function me({ onClick: e, ariaLabel: t }) {
|
|
915
|
+
return /* @__PURE__ */ a(
|
|
901
916
|
"button",
|
|
902
917
|
{
|
|
903
918
|
type: "button",
|
|
@@ -905,7 +920,7 @@ function we({ onClick: e, ariaLabel: t }) {
|
|
|
905
920
|
"aria-label": t,
|
|
906
921
|
class: "absolute right-4 top-4 z-10 flex h-8 w-8 items-center justify-center rounded-full text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
|
|
907
922
|
children: /* @__PURE__ */ c("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
908
|
-
/* @__PURE__ */
|
|
923
|
+
/* @__PURE__ */ a(
|
|
909
924
|
"path",
|
|
910
925
|
{
|
|
911
926
|
d: "M5 8h8a4 4 0 0 1 0 8H9",
|
|
@@ -915,7 +930,7 @@ function we({ onClick: e, ariaLabel: t }) {
|
|
|
915
930
|
"stroke-linejoin": "round"
|
|
916
931
|
}
|
|
917
932
|
),
|
|
918
|
-
/* @__PURE__ */
|
|
933
|
+
/* @__PURE__ */ a(
|
|
919
934
|
"path",
|
|
920
935
|
{
|
|
921
936
|
d: "M8 4 4 8l4 4",
|
|
@@ -929,71 +944,8 @@ function we({ onClick: e, ariaLabel: t }) {
|
|
|
929
944
|
}
|
|
930
945
|
);
|
|
931
946
|
}
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
onSuccess: t,
|
|
935
|
-
onBack: r,
|
|
936
|
-
heading: a,
|
|
937
|
-
description: i
|
|
938
|
-
}) {
|
|
939
|
-
const { t: o } = v(), s = a ?? o("anon.heading_default", "Continue as guest"), l = i ?? o("anon.description_default", "Setting up your guest session…"), [u, h] = b({ kind: "signing-in" }), d = F(!0);
|
|
940
|
-
T(() => () => {
|
|
941
|
-
d.current = !1;
|
|
942
|
-
}, []);
|
|
943
|
-
const p = () => {
|
|
944
|
-
h({ kind: "signing-in" }), (async () => {
|
|
945
|
-
try {
|
|
946
|
-
const x = await e.signInAnonymously();
|
|
947
|
-
if (!d.current) return;
|
|
948
|
-
t(x);
|
|
949
|
-
} catch (x) {
|
|
950
|
-
if (!d.current) return;
|
|
951
|
-
h({
|
|
952
|
-
kind: "error",
|
|
953
|
-
message: x instanceof Error ? x.message : "Anonymous sign-in failed"
|
|
954
|
-
});
|
|
955
|
-
}
|
|
956
|
-
})();
|
|
957
|
-
};
|
|
958
|
-
return T(() => {
|
|
959
|
-
p();
|
|
960
|
-
}, []), /* @__PURE__ */ c("div", { class: "flex flex-col gap-3", children: [
|
|
961
|
-
r ? /* @__PURE__ */ n(
|
|
962
|
-
"button",
|
|
963
|
-
{
|
|
964
|
-
type: "button",
|
|
965
|
-
onClick: r,
|
|
966
|
-
class: "-ml-1 self-start rounded-md px-1.5 py-0.5 text-xs font-medium text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
|
|
967
|
-
children: o("nav.back", "← Back")
|
|
968
|
-
}
|
|
969
|
-
) : null,
|
|
970
|
-
/* @__PURE__ */ c("div", { class: "flex flex-col gap-1", children: [
|
|
971
|
-
/* @__PURE__ */ n("h2", { class: "text-xl font-semibold text-gray-900", children: s }),
|
|
972
|
-
/* @__PURE__ */ n("p", { class: "text-sm text-gray-500", children: l })
|
|
973
|
-
] }),
|
|
974
|
-
u.kind === "signing-in" ? /* @__PURE__ */ n("div", { class: "flex items-center justify-center py-6", children: /* @__PURE__ */ n(be, {}) }) : null,
|
|
975
|
-
u.kind === "error" ? /* @__PURE__ */ c("div", { class: "flex flex-col gap-3", children: [
|
|
976
|
-
/* @__PURE__ */ n("div", { class: "rounded-lg bg-red-50 px-3 py-2 text-sm text-red-700", children: u.message }),
|
|
977
|
-
/* @__PURE__ */ n(
|
|
978
|
-
"button",
|
|
979
|
-
{
|
|
980
|
-
type: "button",
|
|
981
|
-
onClick: p,
|
|
982
|
-
class: "self-start rounded-md bg-[var(--pw-accent)] px-3 py-1.5 text-sm font-medium text-white hover:opacity-90 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)] focus-visible:ring-offset-2",
|
|
983
|
-
children: o("anon.try_again", "Try again")
|
|
984
|
-
}
|
|
985
|
-
)
|
|
986
|
-
] }) : null
|
|
987
|
-
] });
|
|
988
|
-
}
|
|
989
|
-
function be() {
|
|
990
|
-
return /* @__PURE__ */ c("svg", { class: "h-5 w-5 animate-spin text-[var(--pw-accent)]", viewBox: "0 0 24 24", fill: "none", children: [
|
|
991
|
-
/* @__PURE__ */ n("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", "stroke-width": "3", "stroke-opacity": "0.2" }),
|
|
992
|
-
/* @__PURE__ */ n("path", { d: "M22 12a10 10 0 0 0-10-10", stroke: "currentColor", "stroke-width": "3", "stroke-linecap": "round" })
|
|
993
|
-
] });
|
|
994
|
-
}
|
|
995
|
-
const jt = (e) => `pw-offer-${e}-start`;
|
|
996
|
-
function et(e) {
|
|
947
|
+
const Et = (e) => `pw-offer-${e}-start`;
|
|
948
|
+
function rt(e) {
|
|
997
949
|
const t = e - Date.now();
|
|
998
950
|
return t <= 0 ? { days: 0, hours: 0, minutes: 0, seconds: 0, expired: !0 } : {
|
|
999
951
|
days: Math.floor(t / (1e3 * 60 * 60 * 24)),
|
|
@@ -1003,7 +955,7 @@ function et(e) {
|
|
|
1003
955
|
expired: !1
|
|
1004
956
|
};
|
|
1005
957
|
}
|
|
1006
|
-
function
|
|
958
|
+
function be(e) {
|
|
1007
959
|
if (e.expires_at) {
|
|
1008
960
|
const t = Date.parse(e.expires_at);
|
|
1009
961
|
return Number.isFinite(t) ? t : null;
|
|
@@ -1011,7 +963,7 @@ function xe(e) {
|
|
|
1011
963
|
if (e.duration_minutes && e.duration_minutes > 0) {
|
|
1012
964
|
if (typeof window > "u") return null;
|
|
1013
965
|
try {
|
|
1014
|
-
const t =
|
|
966
|
+
const t = Et(e.id);
|
|
1015
967
|
let r = window.localStorage.getItem(t);
|
|
1016
968
|
return r || (r = (/* @__PURE__ */ new Date()).toISOString(), window.localStorage.setItem(t, r)), Date.parse(r) + e.duration_minutes * 6e4;
|
|
1017
969
|
} catch {
|
|
@@ -1020,39 +972,39 @@ function xe(e) {
|
|
|
1020
972
|
}
|
|
1021
973
|
return null;
|
|
1022
974
|
}
|
|
1023
|
-
function
|
|
975
|
+
function jt(e, t) {
|
|
1024
976
|
if (!e || e.length === 0) return null;
|
|
1025
977
|
if (t) {
|
|
1026
|
-
const r = e.find((
|
|
978
|
+
const r = e.find((n) => n.id === t);
|
|
1027
979
|
if (r) return r;
|
|
1028
980
|
}
|
|
1029
981
|
return e.find((r) => r.expires_at || r.duration_minutes) ?? null;
|
|
1030
982
|
}
|
|
1031
|
-
function
|
|
1032
|
-
const t = e ?
|
|
1033
|
-
() => t !== null ?
|
|
983
|
+
function zt(e) {
|
|
984
|
+
const t = e ? be(e) : null, [r, n] = b(
|
|
985
|
+
() => t !== null ? rt(t) : null
|
|
1034
986
|
), i = F(t);
|
|
1035
|
-
return i.current = t,
|
|
987
|
+
return i.current = t, E(() => {
|
|
1036
988
|
if (t === null) {
|
|
1037
|
-
|
|
989
|
+
n(null);
|
|
1038
990
|
return;
|
|
1039
991
|
}
|
|
1040
|
-
|
|
992
|
+
n(rt(t));
|
|
1041
993
|
const o = setInterval(() => {
|
|
1042
|
-
const s =
|
|
1043
|
-
if (
|
|
994
|
+
const s = rt(i.current ?? 0);
|
|
995
|
+
if (n(s), s.expired && (clearInterval(o), e?.duration_minutes && typeof window < "u"))
|
|
1044
996
|
try {
|
|
1045
|
-
window.localStorage.removeItem(
|
|
997
|
+
window.localStorage.removeItem(Et(e.id));
|
|
1046
998
|
} catch {
|
|
1047
999
|
}
|
|
1048
1000
|
}, 1e3);
|
|
1049
1001
|
return () => clearInterval(o);
|
|
1050
1002
|
}, [t, e?.duration_minutes, e?.id]), r;
|
|
1051
1003
|
}
|
|
1052
|
-
function
|
|
1053
|
-
const { t: r } = v(),
|
|
1054
|
-
if (!
|
|
1055
|
-
const o = e.title ??
|
|
1004
|
+
function xe({ block: e, ctx: t }) {
|
|
1005
|
+
const { t: r } = v(), n = jt(t.bootstrap.offers, e.offer_id), i = zt(n);
|
|
1006
|
+
if (!n || i === null || i.expired && !e.force) return null;
|
|
1007
|
+
const o = e.title ?? n.label ?? r("offer.limited_time", "Limited-time offer"), s = n.discount_percent ? `${o} ${n.discount_percent}%` : o;
|
|
1056
1008
|
return /* @__PURE__ */ c(
|
|
1057
1009
|
"div",
|
|
1058
1010
|
{
|
|
@@ -1063,34 +1015,34 @@ function ve({ block: e, ctx: t }) {
|
|
|
1063
1015
|
},
|
|
1064
1016
|
role: "status",
|
|
1065
1017
|
children: [
|
|
1066
|
-
/* @__PURE__ */
|
|
1067
|
-
/* @__PURE__ */
|
|
1068
|
-
/* @__PURE__ */
|
|
1018
|
+
/* @__PURE__ */ a(Ot, {}),
|
|
1019
|
+
/* @__PURE__ */ a("span", { children: s }),
|
|
1020
|
+
/* @__PURE__ */ a(Bt, { value: i, t: r })
|
|
1069
1021
|
]
|
|
1070
1022
|
}
|
|
1071
1023
|
);
|
|
1072
1024
|
}
|
|
1073
|
-
function
|
|
1025
|
+
function Bt({ value: e, t }) {
|
|
1074
1026
|
return /* @__PURE__ */ c("div", { class: "flex items-center gap-1 font-mono text-sm", children: [
|
|
1075
|
-
e.days > 0 ? /* @__PURE__ */ c(
|
|
1076
|
-
/* @__PURE__ */
|
|
1077
|
-
/* @__PURE__ */
|
|
1027
|
+
e.days > 0 ? /* @__PURE__ */ c(ot, { children: [
|
|
1028
|
+
/* @__PURE__ */ a(V, { children: String(e.days) }),
|
|
1029
|
+
/* @__PURE__ */ a("span", { class: "text-xs", children: t("countdown.d", "d") })
|
|
1078
1030
|
] }) : null,
|
|
1079
|
-
/* @__PURE__ */
|
|
1080
|
-
/* @__PURE__ */
|
|
1081
|
-
/* @__PURE__ */
|
|
1082
|
-
/* @__PURE__ */
|
|
1083
|
-
/* @__PURE__ */
|
|
1084
|
-
/* @__PURE__ */
|
|
1031
|
+
/* @__PURE__ */ a(V, { children: String(e.hours).padStart(2, "0") }),
|
|
1032
|
+
/* @__PURE__ */ a("span", { class: "text-xs", children: t("countdown.h", "h") }),
|
|
1033
|
+
/* @__PURE__ */ a(V, { children: String(e.minutes).padStart(2, "0") }),
|
|
1034
|
+
/* @__PURE__ */ a("span", { class: "text-xs", children: t("countdown.m", "m") }),
|
|
1035
|
+
/* @__PURE__ */ a(V, { children: String(e.seconds).padStart(2, "0") }),
|
|
1036
|
+
/* @__PURE__ */ a("span", { class: "text-xs", children: t("countdown.s", "s") })
|
|
1085
1037
|
] });
|
|
1086
1038
|
}
|
|
1087
|
-
function
|
|
1088
|
-
return /* @__PURE__ */
|
|
1039
|
+
function V({ children: e }) {
|
|
1040
|
+
return /* @__PURE__ */ a("span", { class: "rounded bg-black/20 px-1.5 py-0.5 text-xs font-bold", children: e });
|
|
1089
1041
|
}
|
|
1090
1042
|
function ye({ offer: e }) {
|
|
1091
|
-
const { t } = v(), r =
|
|
1043
|
+
const { t } = v(), r = zt(e);
|
|
1092
1044
|
if (r === null || r.expired) return null;
|
|
1093
|
-
const
|
|
1045
|
+
const n = e.label ?? t("offer.limited_time", "Limited-time offer"), i = e.discount_percent ? `${n} ${e.discount_percent}%` : n;
|
|
1094
1046
|
return /* @__PURE__ */ c(
|
|
1095
1047
|
"div",
|
|
1096
1048
|
{
|
|
@@ -1101,15 +1053,15 @@ function ye({ offer: e }) {
|
|
|
1101
1053
|
},
|
|
1102
1054
|
role: "status",
|
|
1103
1055
|
children: [
|
|
1104
|
-
/* @__PURE__ */
|
|
1105
|
-
/* @__PURE__ */
|
|
1106
|
-
/* @__PURE__ */
|
|
1056
|
+
/* @__PURE__ */ a(Ot, {}),
|
|
1057
|
+
/* @__PURE__ */ a("span", { children: i }),
|
|
1058
|
+
/* @__PURE__ */ a(Bt, { value: r, t })
|
|
1107
1059
|
]
|
|
1108
1060
|
}
|
|
1109
1061
|
);
|
|
1110
1062
|
}
|
|
1111
|
-
function
|
|
1112
|
-
return /* @__PURE__ */
|
|
1063
|
+
function Ot() {
|
|
1064
|
+
return /* @__PURE__ */ a(
|
|
1113
1065
|
"svg",
|
|
1114
1066
|
{
|
|
1115
1067
|
width: "16",
|
|
@@ -1117,7 +1069,7 @@ function Ft() {
|
|
|
1117
1069
|
viewBox: "0 0 12 12",
|
|
1118
1070
|
fill: "none",
|
|
1119
1071
|
"aria-hidden": "true",
|
|
1120
|
-
children: /* @__PURE__ */
|
|
1072
|
+
children: /* @__PURE__ */ a(
|
|
1121
1073
|
"path",
|
|
1122
1074
|
{
|
|
1123
1075
|
fill: "currentColor",
|
|
@@ -1127,44 +1079,41 @@ function Ft() {
|
|
|
1127
1079
|
}
|
|
1128
1080
|
);
|
|
1129
1081
|
}
|
|
1130
|
-
const
|
|
1131
|
-
function _e({ client: e, authSession: t, origin: r, onBack:
|
|
1132
|
-
const { t: i } = v(), o = t?.user.email ?? "", s = o || null, [
|
|
1133
|
-
const
|
|
1134
|
-
return
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
min: rt,
|
|
1139
|
-
max: it
|
|
1140
|
-
})), (w.length < 1 || w.length > nt) && (A.message = i("support.message_length", "{min}–{max} characters", {
|
|
1082
|
+
const mt = 3, bt = 200, xt = 5e3, it = 5, ve = 10 * 1024 * 1024, yt = ["image/jpeg", "image/png", "image/webp"], ke = /.+@.+\..+/;
|
|
1083
|
+
function _e({ client: e, authSession: t, origin: r, onBack: n }) {
|
|
1084
|
+
const { t: i } = v(), o = t?.user.email ?? "", s = o || null, [d, l] = b(o), [g, p] = b(""), [u, x] = b(""), [y, k] = b([]), [h, m] = b(!1), [j, _] = b(null), [S, A] = b({}), R = () => {
|
|
1085
|
+
const T = {}, M = (s ?? d).trim(), D = g.trim(), N = u.trim();
|
|
1086
|
+
return M ? ke.test(M.toLowerCase()) || (T.email = i("support.invalid_email", "Invalid email")) : T.email = i("support.required", "Required"), (D.length < mt || D.length > bt) && (T.subject = i("support.subject_length", "{min}–{max} characters", {
|
|
1087
|
+
min: mt,
|
|
1088
|
+
max: bt
|
|
1089
|
+
})), (N.length < 1 || N.length > xt) && (T.message = i("support.message_length", "{min}–{max} characters", {
|
|
1141
1090
|
min: 1,
|
|
1142
|
-
max:
|
|
1143
|
-
})),
|
|
1144
|
-
},
|
|
1145
|
-
if (
|
|
1146
|
-
|
|
1091
|
+
max: xt
|
|
1092
|
+
})), A(T), Object.keys(T).length === 0;
|
|
1093
|
+
}, P = async (T) => {
|
|
1094
|
+
if (T.preventDefault(), !h && R()) {
|
|
1095
|
+
m(!0), A((M) => ({ ...M, submit: void 0 }));
|
|
1147
1096
|
try {
|
|
1148
|
-
const
|
|
1097
|
+
const M = (s ?? d).trim();
|
|
1149
1098
|
await e.createSupportTicket({
|
|
1150
|
-
subject:
|
|
1151
|
-
content:
|
|
1152
|
-
email:
|
|
1153
|
-
files:
|
|
1154
|
-
}),
|
|
1155
|
-
} catch (
|
|
1156
|
-
const
|
|
1157
|
-
|
|
1099
|
+
subject: g.trim(),
|
|
1100
|
+
content: u.trim(),
|
|
1101
|
+
email: M || void 0,
|
|
1102
|
+
files: y.length > 0 ? y : void 0
|
|
1103
|
+
}), _(M);
|
|
1104
|
+
} catch (M) {
|
|
1105
|
+
const D = M instanceof O && M.message || "Failed to send. Please try again.";
|
|
1106
|
+
A((N) => ({ ...N, submit: D }));
|
|
1158
1107
|
} finally {
|
|
1159
|
-
|
|
1108
|
+
m(!1);
|
|
1160
1109
|
}
|
|
1161
1110
|
}
|
|
1162
|
-
},
|
|
1163
|
-
|
|
1164
|
-
},
|
|
1165
|
-
return
|
|
1111
|
+
}, z = () => {
|
|
1112
|
+
p(""), x(""), k([]), A({}), _(null);
|
|
1113
|
+
}, U = "flex flex-col gap-3 bg-white px-6 pb-6 pt-3 sm:px-8", B = { boxShadow: "0 -4px 12px -4px rgba(15,23,42,0.06)" };
|
|
1114
|
+
return j ? /* @__PURE__ */ c("div", { class: "relative flex-1 min-h-0 flex flex-col", children: [
|
|
1166
1115
|
/* @__PURE__ */ c("div", { class: "flex-1 min-h-0 overflow-y-auto flex flex-col items-center gap-4 px-6 pb-3 pt-6 sm:px-8 sm:pb-4 sm:pt-8 text-center", children: [
|
|
1167
|
-
/* @__PURE__ */
|
|
1116
|
+
/* @__PURE__ */ a(
|
|
1168
1117
|
"div",
|
|
1169
1118
|
{
|
|
1170
1119
|
class: "flex h-14 w-14 items-center justify-center rounded-full",
|
|
@@ -1174,7 +1123,7 @@ function _e({ client: e, authSession: t, origin: r, onBack: a }) {
|
|
|
1174
1123
|
boxShadow: "0 0 0 8px color-mix(in srgb, var(--pw-accent) 12%, transparent), 0 8px 20px -6px color-mix(in srgb, var(--pw-accent) 45%, transparent)"
|
|
1175
1124
|
},
|
|
1176
1125
|
"aria-hidden": "true",
|
|
1177
|
-
children: /* @__PURE__ */
|
|
1126
|
+
children: /* @__PURE__ */ a("svg", { viewBox: "0 0 24 24", class: "h-7 w-7", children: /* @__PURE__ */ a(
|
|
1178
1127
|
"path",
|
|
1179
1128
|
{
|
|
1180
1129
|
fill: "currentColor",
|
|
@@ -1183,32 +1132,32 @@ function _e({ client: e, authSession: t, origin: r, onBack: a }) {
|
|
|
1183
1132
|
) })
|
|
1184
1133
|
}
|
|
1185
1134
|
),
|
|
1186
|
-
/* @__PURE__ */
|
|
1135
|
+
/* @__PURE__ */ a("div", { class: "text-lg font-semibold tracking-tight text-gray-900", children: i("support.success_heading", "Request submitted") }),
|
|
1187
1136
|
/* @__PURE__ */ c("div", { class: "max-w-[320px] text-sm leading-relaxed text-gray-500", children: [
|
|
1188
1137
|
i(
|
|
1189
1138
|
"support.success_message_prefix",
|
|
1190
1139
|
"We've received your message and will respond to"
|
|
1191
1140
|
),
|
|
1192
1141
|
" ",
|
|
1193
|
-
/* @__PURE__ */
|
|
1142
|
+
/* @__PURE__ */ a("b", { class: "text-gray-700", children: j }),
|
|
1194
1143
|
"."
|
|
1195
1144
|
] })
|
|
1196
1145
|
] }),
|
|
1197
|
-
/* @__PURE__ */
|
|
1198
|
-
/* @__PURE__ */
|
|
1146
|
+
/* @__PURE__ */ a("div", { class: U, style: B, children: /* @__PURE__ */ c("div", { class: "flex items-center justify-center gap-3", children: [
|
|
1147
|
+
/* @__PURE__ */ a(
|
|
1199
1148
|
"button",
|
|
1200
1149
|
{
|
|
1201
1150
|
type: "button",
|
|
1202
|
-
onClick:
|
|
1151
|
+
onClick: n,
|
|
1203
1152
|
class: "rounded-xl px-3 py-2 text-sm font-medium text-gray-600 transition-colors hover:bg-gray-100 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
|
|
1204
1153
|
children: r === "standalone" ? i("support.done_button", "Done") : i("nav.back_aria", "Back")
|
|
1205
1154
|
}
|
|
1206
1155
|
),
|
|
1207
|
-
/* @__PURE__ */
|
|
1156
|
+
/* @__PURE__ */ a(
|
|
1208
1157
|
"button",
|
|
1209
1158
|
{
|
|
1210
1159
|
type: "button",
|
|
1211
|
-
onClick:
|
|
1160
|
+
onClick: z,
|
|
1212
1161
|
class: "flex h-10 items-center justify-center rounded-xl px-4 text-sm font-semibold text-white transition-all hover:-translate-y-px hover:brightness-105 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--pw-accent)]",
|
|
1213
1162
|
style: {
|
|
1214
1163
|
background: "linear-gradient(180deg, color-mix(in srgb, var(--pw-accent) 92%, white), var(--pw-accent))",
|
|
@@ -1218,78 +1167,78 @@ function _e({ client: e, authSession: t, origin: r, onBack: a }) {
|
|
|
1218
1167
|
}
|
|
1219
1168
|
)
|
|
1220
1169
|
] }) })
|
|
1221
|
-
] }) : /* @__PURE__ */ c("form", { onSubmit:
|
|
1222
|
-
/* @__PURE__ */
|
|
1223
|
-
/* @__PURE__ */
|
|
1170
|
+
] }) : /* @__PURE__ */ c("form", { onSubmit: P, class: "relative flex-1 min-h-0 flex flex-col", children: [
|
|
1171
|
+
/* @__PURE__ */ a(Se, { onClick: n, ariaLabel: i("nav.back_aria", "Back") }),
|
|
1172
|
+
/* @__PURE__ */ a("div", { class: "flex-1 min-h-0 overflow-y-auto px-6 pb-3 pt-6 sm:px-8 sm:pb-4 sm:pt-8", children: /* @__PURE__ */ c("div", { class: "flex flex-col gap-5", children: [
|
|
1224
1173
|
/* @__PURE__ */ c("div", { class: "flex flex-col gap-2 pr-10", children: [
|
|
1225
|
-
/* @__PURE__ */
|
|
1226
|
-
/* @__PURE__ */
|
|
1174
|
+
/* @__PURE__ */ a("h2", { class: "text-3xl font-bold tracking-tight text-gray-900", children: i("support.heading", "Support") }),
|
|
1175
|
+
/* @__PURE__ */ a("p", { class: "text-base leading-relaxed text-gray-600", children: i("support.instruction", "Please fill out the form below to submit your support request.") })
|
|
1227
1176
|
] }),
|
|
1228
1177
|
/* @__PURE__ */ c("div", { class: "flex flex-col gap-3", children: [
|
|
1229
1178
|
s ? /* @__PURE__ */ c("div", { class: "rounded-2xl bg-gray-100 px-5 py-3 text-sm text-gray-600", children: [
|
|
1230
1179
|
i("support.sending_as", "Sending as"),
|
|
1231
1180
|
" ",
|
|
1232
|
-
/* @__PURE__ */
|
|
1233
|
-
] }) : /* @__PURE__ */
|
|
1234
|
-
|
|
1181
|
+
/* @__PURE__ */ a("b", { class: "font-medium text-gray-900", children: s })
|
|
1182
|
+
] }) : /* @__PURE__ */ a(
|
|
1183
|
+
vt,
|
|
1235
1184
|
{
|
|
1236
1185
|
type: "email",
|
|
1237
1186
|
placeholder: i("support.email_placeholder", "Enter your email *"),
|
|
1238
|
-
value:
|
|
1239
|
-
onInput:
|
|
1240
|
-
error:
|
|
1187
|
+
value: d,
|
|
1188
|
+
onInput: l,
|
|
1189
|
+
error: S.email,
|
|
1241
1190
|
autocomplete: "email",
|
|
1242
1191
|
required: !0
|
|
1243
1192
|
}
|
|
1244
1193
|
),
|
|
1245
|
-
/* @__PURE__ */
|
|
1246
|
-
|
|
1194
|
+
/* @__PURE__ */ a(
|
|
1195
|
+
vt,
|
|
1247
1196
|
{
|
|
1248
1197
|
type: "text",
|
|
1249
1198
|
placeholder: i("support.subject_placeholder", "Enter your subject *"),
|
|
1250
|
-
value:
|
|
1251
|
-
onInput:
|
|
1252
|
-
error:
|
|
1199
|
+
value: g,
|
|
1200
|
+
onInput: p,
|
|
1201
|
+
error: S.subject,
|
|
1253
1202
|
required: !0
|
|
1254
1203
|
}
|
|
1255
1204
|
),
|
|
1256
|
-
/* @__PURE__ */
|
|
1205
|
+
/* @__PURE__ */ a(
|
|
1257
1206
|
Ce,
|
|
1258
1207
|
{
|
|
1259
1208
|
placeholder: i("support.message_placeholder", "Enter your message *"),
|
|
1260
|
-
value:
|
|
1209
|
+
value: u,
|
|
1261
1210
|
onInput: x,
|
|
1262
|
-
error:
|
|
1211
|
+
error: S.message,
|
|
1263
1212
|
required: !0
|
|
1264
1213
|
}
|
|
1265
1214
|
),
|
|
1266
|
-
/* @__PURE__ */
|
|
1215
|
+
/* @__PURE__ */ a(Ie, { files: y, onChange: k, disabled: h })
|
|
1267
1216
|
] })
|
|
1268
1217
|
] }) }),
|
|
1269
|
-
/* @__PURE__ */ c("div", { class:
|
|
1270
|
-
|
|
1218
|
+
/* @__PURE__ */ c("div", { class: U, style: B, children: [
|
|
1219
|
+
S.submit && /* @__PURE__ */ a("p", { class: "text-sm text-red-600", children: S.submit }),
|
|
1271
1220
|
/* @__PURE__ */ c("div", { class: "flex items-center justify-end gap-3", children: [
|
|
1272
|
-
/* @__PURE__ */
|
|
1221
|
+
/* @__PURE__ */ a(
|
|
1273
1222
|
"button",
|
|
1274
1223
|
{
|
|
1275
1224
|
type: "button",
|
|
1276
|
-
onClick:
|
|
1277
|
-
disabled:
|
|
1225
|
+
onClick: n,
|
|
1226
|
+
disabled: h,
|
|
1278
1227
|
class: "rounded-full px-4 py-2 text-base font-medium text-gray-700 transition-colors hover:bg-gray-100 disabled:cursor-not-allowed disabled:opacity-60 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
|
|
1279
1228
|
children: r === "standalone" ? i("support.close_button", "Close") : i("nav.back_aria", "Back")
|
|
1280
1229
|
}
|
|
1281
1230
|
),
|
|
1282
|
-
/* @__PURE__ */
|
|
1231
|
+
/* @__PURE__ */ a(
|
|
1283
1232
|
"button",
|
|
1284
1233
|
{
|
|
1285
1234
|
type: "submit",
|
|
1286
|
-
disabled:
|
|
1235
|
+
disabled: h,
|
|
1287
1236
|
class: "pw-cta-shimmer relative flex h-12 items-center justify-center overflow-hidden rounded-full px-8 text-base font-semibold text-white transition-transform duration-150 active:scale-[0.98] disabled:cursor-not-allowed disabled:opacity-60 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--pw-accent)]",
|
|
1288
1237
|
style: {
|
|
1289
1238
|
background: "linear-gradient(135deg, color-mix(in srgb, var(--pw-accent) 55%, white) 0%, var(--pw-accent) 55%, color-mix(in srgb, var(--pw-accent) 90%, black) 100%)",
|
|
1290
1239
|
boxShadow: "0 0 20px 0 color-mix(in srgb, var(--pw-accent) 25%, transparent), inset 0 0 8px 0 color-mix(in srgb, white 25%, transparent)"
|
|
1291
1240
|
},
|
|
1292
|
-
children:
|
|
1241
|
+
children: h ? /* @__PURE__ */ a("span", { class: "relative z-10 inline-block h-4 w-4 animate-spin rounded-full border-2 border-white/40 border-t-white" }) : /* @__PURE__ */ a("span", { class: "relative z-10", children: i("support.send_button", "Send") })
|
|
1293
1242
|
}
|
|
1294
1243
|
)
|
|
1295
1244
|
] })
|
|
@@ -1297,7 +1246,7 @@ function _e({ client: e, authSession: t, origin: r, onBack: a }) {
|
|
|
1297
1246
|
] });
|
|
1298
1247
|
}
|
|
1299
1248
|
function Se({ onClick: e, ariaLabel: t }) {
|
|
1300
|
-
return /* @__PURE__ */
|
|
1249
|
+
return /* @__PURE__ */ a(
|
|
1301
1250
|
"button",
|
|
1302
1251
|
{
|
|
1303
1252
|
type: "button",
|
|
@@ -1305,7 +1254,7 @@ function Se({ onClick: e, ariaLabel: t }) {
|
|
|
1305
1254
|
"aria-label": t,
|
|
1306
1255
|
class: "absolute right-4 top-4 z-10 flex h-8 w-8 items-center justify-center rounded-full text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
|
|
1307
1256
|
children: /* @__PURE__ */ c("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
1308
|
-
/* @__PURE__ */
|
|
1257
|
+
/* @__PURE__ */ a(
|
|
1309
1258
|
"path",
|
|
1310
1259
|
{
|
|
1311
1260
|
d: "M5 8h8a4 4 0 0 1 0 8H9",
|
|
@@ -1315,7 +1264,7 @@ function Se({ onClick: e, ariaLabel: t }) {
|
|
|
1315
1264
|
"stroke-linejoin": "round"
|
|
1316
1265
|
}
|
|
1317
1266
|
),
|
|
1318
|
-
/* @__PURE__ */
|
|
1267
|
+
/* @__PURE__ */ a(
|
|
1319
1268
|
"path",
|
|
1320
1269
|
{
|
|
1321
1270
|
d: "M8 4 4 8l4 4",
|
|
@@ -1329,40 +1278,40 @@ function Se({ onClick: e, ariaLabel: t }) {
|
|
|
1329
1278
|
}
|
|
1330
1279
|
);
|
|
1331
1280
|
}
|
|
1332
|
-
function
|
|
1281
|
+
function vt({
|
|
1333
1282
|
type: e,
|
|
1334
1283
|
placeholder: t,
|
|
1335
1284
|
value: r,
|
|
1336
|
-
onInput:
|
|
1285
|
+
onInput: n,
|
|
1337
1286
|
error: i,
|
|
1338
1287
|
autocomplete: o,
|
|
1339
1288
|
required: s
|
|
1340
1289
|
}) {
|
|
1341
1290
|
return /* @__PURE__ */ c("div", { children: [
|
|
1342
|
-
/* @__PURE__ */
|
|
1291
|
+
/* @__PURE__ */ a(
|
|
1343
1292
|
"input",
|
|
1344
1293
|
{
|
|
1345
1294
|
type: e,
|
|
1346
1295
|
value: r,
|
|
1347
1296
|
placeholder: t,
|
|
1348
|
-
onInput: (
|
|
1297
|
+
onInput: (d) => n(d.target.value),
|
|
1349
1298
|
autocomplete: o,
|
|
1350
1299
|
required: s,
|
|
1351
1300
|
class: `h-14 w-full rounded-2xl bg-gray-100 px-5 text-base text-gray-900 outline-none transition-all placeholder:text-gray-500 hover:bg-gray-200/60 focus:bg-gray-200/60 ${i ? "shadow-[0_0_0_2px_rgba(239,68,68,0.5)]" : "focus:shadow-[0_0_0_2px_color-mix(in_srgb,var(--pw-accent)_30%,transparent)]"}`
|
|
1352
1301
|
}
|
|
1353
1302
|
),
|
|
1354
|
-
i && /* @__PURE__ */
|
|
1303
|
+
i && /* @__PURE__ */ a("span", { class: "mt-1 ml-2 block text-sm text-red-600", children: i })
|
|
1355
1304
|
] });
|
|
1356
1305
|
}
|
|
1357
1306
|
function Ce({
|
|
1358
1307
|
placeholder: e,
|
|
1359
1308
|
value: t,
|
|
1360
1309
|
onInput: r,
|
|
1361
|
-
error:
|
|
1310
|
+
error: n,
|
|
1362
1311
|
required: i
|
|
1363
1312
|
}) {
|
|
1364
1313
|
return /* @__PURE__ */ c("div", { children: [
|
|
1365
|
-
/* @__PURE__ */
|
|
1314
|
+
/* @__PURE__ */ a(
|
|
1366
1315
|
"textarea",
|
|
1367
1316
|
{
|
|
1368
1317
|
value: t,
|
|
@@ -1370,92 +1319,92 @@ function Ce({
|
|
|
1370
1319
|
onInput: (o) => r(o.target.value),
|
|
1371
1320
|
required: i,
|
|
1372
1321
|
rows: 5,
|
|
1373
|
-
class: `min-h-[120px] w-full rounded-2xl bg-gray-100 px-5 py-3.5 text-base leading-relaxed text-gray-900 outline-none transition-all placeholder:text-gray-500 hover:bg-gray-200/60 focus:bg-gray-200/60 ${
|
|
1322
|
+
class: `min-h-[120px] w-full rounded-2xl bg-gray-100 px-5 py-3.5 text-base leading-relaxed text-gray-900 outline-none transition-all placeholder:text-gray-500 hover:bg-gray-200/60 focus:bg-gray-200/60 ${n ? "shadow-[0_0_0_2px_rgba(239,68,68,0.5)]" : "focus:shadow-[0_0_0_2px_color-mix(in_srgb,var(--pw-accent)_30%,transparent)]"}`
|
|
1374
1323
|
}
|
|
1375
1324
|
),
|
|
1376
|
-
|
|
1325
|
+
n && /* @__PURE__ */ a("span", { class: "mt-1 ml-2 block text-sm text-red-600", children: n })
|
|
1377
1326
|
] });
|
|
1378
1327
|
}
|
|
1379
1328
|
function Ie({ files: e, onChange: t, disabled: r }) {
|
|
1380
|
-
const { t:
|
|
1381
|
-
if (!
|
|
1382
|
-
|
|
1383
|
-
const
|
|
1384
|
-
if (e.length +
|
|
1385
|
-
|
|
1329
|
+
const { t: n } = v(), i = F(null), [o, s] = b(!1), [d, l] = b(null), g = (p) => {
|
|
1330
|
+
if (!p || r) return;
|
|
1331
|
+
l(null);
|
|
1332
|
+
const u = Array.from(p);
|
|
1333
|
+
if (e.length + u.length > it) {
|
|
1334
|
+
l(n("support.too_many_files", "Up to {max} files", { max: it }));
|
|
1386
1335
|
return;
|
|
1387
1336
|
}
|
|
1388
|
-
const x =
|
|
1389
|
-
(
|
|
1337
|
+
const x = u.filter(
|
|
1338
|
+
(y) => yt.includes(y.type) && y.size <= ve
|
|
1390
1339
|
);
|
|
1391
|
-
if (x.length !==
|
|
1392
|
-
|
|
1340
|
+
if (x.length !== u.length) {
|
|
1341
|
+
l(n("support.invalid_file", "Only JPEG/PNG/WebP, ≤ 10MB each"));
|
|
1393
1342
|
return;
|
|
1394
1343
|
}
|
|
1395
1344
|
t([...e, ...x]);
|
|
1396
1345
|
};
|
|
1397
1346
|
return /* @__PURE__ */ c("div", { children: [
|
|
1398
|
-
/* @__PURE__ */
|
|
1347
|
+
/* @__PURE__ */ a("span", { class: "text-xs font-medium text-gray-700", children: n("support.attachments_label", "Attachments (optional)") }),
|
|
1399
1348
|
/* @__PURE__ */ c(
|
|
1400
1349
|
"div",
|
|
1401
1350
|
{
|
|
1402
1351
|
role: "button",
|
|
1403
1352
|
tabIndex: 0,
|
|
1404
|
-
"aria-label":
|
|
1353
|
+
"aria-label": n("support.attachments_aria", "Attachments upload"),
|
|
1405
1354
|
onClick: () => !r && i.current?.click(),
|
|
1406
|
-
onDragOver: (
|
|
1407
|
-
|
|
1355
|
+
onDragOver: (p) => {
|
|
1356
|
+
p.preventDefault(), r || s(!0);
|
|
1408
1357
|
},
|
|
1409
1358
|
onDragLeave: () => s(!1),
|
|
1410
|
-
onDrop: (
|
|
1411
|
-
|
|
1359
|
+
onDrop: (p) => {
|
|
1360
|
+
p.preventDefault(), s(!1), g(p.dataTransfer?.files ?? null);
|
|
1412
1361
|
},
|
|
1413
1362
|
class: `mt-1.5 cursor-pointer rounded-2xl border border-dashed p-3.5 text-center transition-all ${o ? "border-[var(--pw-accent)] bg-[color-mix(in_srgb,var(--pw-accent)_6%,white)]" : "border-gray-300 hover:border-gray-400 hover:bg-gray-50/60"} ${r ? "cursor-not-allowed opacity-60" : ""}`,
|
|
1414
1363
|
children: [
|
|
1415
|
-
/* @__PURE__ */
|
|
1416
|
-
/* @__PURE__ */
|
|
1417
|
-
max:
|
|
1364
|
+
/* @__PURE__ */ a("div", { class: "text-xs text-gray-500", children: n("support.dropzone_text", "Drop images here or click to select") }),
|
|
1365
|
+
/* @__PURE__ */ a("div", { class: "mt-0.5 text-[11px] text-gray-400", children: n("support.file_requirements", "JPEG/PNG/WebP, up to {max} files, ≤ 10MB each", {
|
|
1366
|
+
max: it
|
|
1418
1367
|
}) })
|
|
1419
1368
|
]
|
|
1420
1369
|
}
|
|
1421
1370
|
),
|
|
1422
|
-
/* @__PURE__ */
|
|
1371
|
+
/* @__PURE__ */ a(
|
|
1423
1372
|
"input",
|
|
1424
1373
|
{
|
|
1425
1374
|
ref: i,
|
|
1426
1375
|
type: "file",
|
|
1427
1376
|
multiple: !0,
|
|
1428
|
-
accept:
|
|
1377
|
+
accept: yt.join(","),
|
|
1429
1378
|
class: "hidden",
|
|
1430
|
-
onChange: (
|
|
1431
|
-
|
|
1379
|
+
onChange: (p) => {
|
|
1380
|
+
g(p.target.files), p.currentTarget.value = "";
|
|
1432
1381
|
}
|
|
1433
1382
|
}
|
|
1434
1383
|
),
|
|
1435
|
-
|
|
1436
|
-
e.length > 0 && /* @__PURE__ */
|
|
1384
|
+
d && /* @__PURE__ */ a("p", { class: "mt-1 text-xs text-red-600", children: d }),
|
|
1385
|
+
e.length > 0 && /* @__PURE__ */ a("ul", { class: "mt-2 flex flex-col gap-1", children: e.map((p, u) => /* @__PURE__ */ c(
|
|
1437
1386
|
"li",
|
|
1438
1387
|
{
|
|
1439
1388
|
class: "flex items-center justify-between gap-2 rounded bg-gray-50 px-2 py-1 text-xs",
|
|
1440
1389
|
children: [
|
|
1441
|
-
/* @__PURE__ */
|
|
1442
|
-
/* @__PURE__ */
|
|
1390
|
+
/* @__PURE__ */ a("span", { class: "truncate text-gray-700", children: p.name }),
|
|
1391
|
+
/* @__PURE__ */ a(
|
|
1443
1392
|
"button",
|
|
1444
1393
|
{
|
|
1445
1394
|
type: "button",
|
|
1446
1395
|
onClick: () => {
|
|
1447
1396
|
const x = [...e];
|
|
1448
|
-
x.splice(
|
|
1397
|
+
x.splice(u, 1), t(x);
|
|
1449
1398
|
},
|
|
1450
1399
|
disabled: r,
|
|
1451
1400
|
class: "text-gray-500 hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-60",
|
|
1452
|
-
"aria-label":
|
|
1401
|
+
"aria-label": n("support.remove_file_aria", "Remove {filename}", { filename: p.name }),
|
|
1453
1402
|
children: "✕"
|
|
1454
1403
|
}
|
|
1455
1404
|
)
|
|
1456
1405
|
]
|
|
1457
1406
|
},
|
|
1458
|
-
`${
|
|
1407
|
+
`${p.name}-${p.size}-${u}`
|
|
1459
1408
|
)) })
|
|
1460
1409
|
] });
|
|
1461
1410
|
}
|
|
@@ -1470,15 +1419,15 @@ const Ae = {
|
|
|
1470
1419
|
month: "Get Monthly Plan",
|
|
1471
1420
|
year: "Get Yearly Plan"
|
|
1472
1421
|
};
|
|
1473
|
-
function Le(e, t, r,
|
|
1474
|
-
if (t === "close") return
|
|
1475
|
-
if (!e) return
|
|
1422
|
+
function Le(e, t, r, n) {
|
|
1423
|
+
if (t === "close") return n("cta.close", "Close");
|
|
1424
|
+
if (!e) return n("cta.continue", "Continue");
|
|
1476
1425
|
if (!r && e.trial_days && e.interval && e.interval !== "lifetime")
|
|
1477
|
-
return
|
|
1426
|
+
return n("cta.start_trial", "Start {days}-Day Free Trial", { days: e.trial_days });
|
|
1478
1427
|
if (!e.interval || e.interval === "lifetime")
|
|
1479
|
-
return
|
|
1428
|
+
return n("cta.get_lifetime_access", "Get Lifetime Access");
|
|
1480
1429
|
const i = Ae[e.interval];
|
|
1481
|
-
return i ?
|
|
1430
|
+
return i ? n(i, Me[e.interval]) : n("cta.get_plan_generic", "Get {interval} Plan", {
|
|
1482
1431
|
interval: Pe(e.interval)
|
|
1483
1432
|
});
|
|
1484
1433
|
}
|
|
@@ -1486,7 +1435,7 @@ function Pe(e) {
|
|
|
1486
1435
|
return e.length ? e[0].toUpperCase() + e.slice(1) : e;
|
|
1487
1436
|
}
|
|
1488
1437
|
function Te({ block: e, ctx: t }) {
|
|
1489
|
-
const { t: r } = v(), [
|
|
1438
|
+
const { t: r } = v(), [n, i] = b(!1), o = e.priceId ?? t.selectedPriceId, s = n || e.action === "checkout" && !o, d = o ? t.bootstrap.prices.find((u) => u.id === o) ?? null : null, l = t.bootstrap.user?.had_previous_trial ?? !1, g = e.label ?? Le(d, e.action, l, r);
|
|
1490
1439
|
return /* @__PURE__ */ c(
|
|
1491
1440
|
"button",
|
|
1492
1441
|
{
|
|
@@ -1508,7 +1457,7 @@ function Te({ block: e, ctx: t }) {
|
|
|
1508
1457
|
boxShadow: "0 0 20px 0 color-mix(in srgb, var(--pw-accent) 25%, transparent), inset 0 0 8px 0 color-mix(in srgb, white 25%, transparent)"
|
|
1509
1458
|
},
|
|
1510
1459
|
children: [
|
|
1511
|
-
/* @__PURE__ */
|
|
1460
|
+
/* @__PURE__ */ a(
|
|
1512
1461
|
"span",
|
|
1513
1462
|
{
|
|
1514
1463
|
class: "absolute inset-0 opacity-40",
|
|
@@ -1518,19 +1467,19 @@ function Te({ block: e, ctx: t }) {
|
|
|
1518
1467
|
"aria-hidden": "true"
|
|
1519
1468
|
}
|
|
1520
1469
|
),
|
|
1521
|
-
|
|
1470
|
+
n ? /* @__PURE__ */ a("span", { class: "relative z-10 inline-block h-4 w-4 animate-spin rounded-full border-2 border-white/40 border-t-white" }) : /* @__PURE__ */ a("span", { class: "relative z-10", children: g })
|
|
1522
1471
|
]
|
|
1523
1472
|
}
|
|
1524
1473
|
);
|
|
1525
1474
|
}
|
|
1526
1475
|
function Ee({ ctx: e }) {
|
|
1527
|
-
const { t } = v(), r = e.authSession,
|
|
1476
|
+
const { t } = v(), r = e.authSession, n = e.auth, [i, o] = b(!1), s = () => e.onAction("support");
|
|
1528
1477
|
if (r && !r.user.is_anonymous) {
|
|
1529
|
-
const
|
|
1530
|
-
if (!(!
|
|
1478
|
+
const d = async () => {
|
|
1479
|
+
if (!(!n || i)) {
|
|
1531
1480
|
o(!0);
|
|
1532
1481
|
try {
|
|
1533
|
-
await
|
|
1482
|
+
await n.signOut();
|
|
1534
1483
|
} catch {
|
|
1535
1484
|
} finally {
|
|
1536
1485
|
o(!1);
|
|
@@ -1541,19 +1490,19 @@ function Ee({ ctx: e }) {
|
|
|
1541
1490
|
/* @__PURE__ */ c("span", { children: [
|
|
1542
1491
|
t("session.signed_in_as_prefix", "Signed in as"),
|
|
1543
1492
|
" ",
|
|
1544
|
-
/* @__PURE__ */
|
|
1493
|
+
/* @__PURE__ */ a("b", { class: "font-medium text-gray-700", children: r.user.email })
|
|
1545
1494
|
] }),
|
|
1546
1495
|
/* @__PURE__ */ c("div", { class: "flex items-center justify-center gap-3", children: [
|
|
1547
|
-
/* @__PURE__ */
|
|
1548
|
-
/* @__PURE__ */
|
|
1549
|
-
/* @__PURE__ */
|
|
1496
|
+
/* @__PURE__ */ a(G, { onClick: d, disabled: !n || i, children: i ? t("session.signing_out", "Signing out…") : t("session.sign_out", "Sign Out") }),
|
|
1497
|
+
/* @__PURE__ */ a(kt, {}),
|
|
1498
|
+
/* @__PURE__ */ a(G, { onClick: s, children: t("session.contact_support", "Contact Support") })
|
|
1550
1499
|
] })
|
|
1551
1500
|
] });
|
|
1552
1501
|
}
|
|
1553
1502
|
return /* @__PURE__ */ c("div", { class: "-mt-3 flex items-center justify-center gap-3 pt-1 text-center text-[13px]", children: [
|
|
1554
|
-
/* @__PURE__ */
|
|
1555
|
-
/* @__PURE__ */
|
|
1556
|
-
/* @__PURE__ */
|
|
1503
|
+
/* @__PURE__ */ a(G, { onClick: () => e.onAction("restore"), children: t("session.restore_purchases", "Restore purchases") }),
|
|
1504
|
+
/* @__PURE__ */ a(kt, {}),
|
|
1505
|
+
/* @__PURE__ */ a(G, { onClick: s, children: t("session.contact_support", "Contact Support") })
|
|
1557
1506
|
] });
|
|
1558
1507
|
}
|
|
1559
1508
|
function G({
|
|
@@ -1561,7 +1510,7 @@ function G({
|
|
|
1561
1510
|
disabled: t,
|
|
1562
1511
|
children: r
|
|
1563
1512
|
}) {
|
|
1564
|
-
return /* @__PURE__ */
|
|
1513
|
+
return /* @__PURE__ */ a(
|
|
1565
1514
|
"button",
|
|
1566
1515
|
{
|
|
1567
1516
|
type: "button",
|
|
@@ -1574,11 +1523,11 @@ function G({
|
|
|
1574
1523
|
);
|
|
1575
1524
|
}
|
|
1576
1525
|
function kt() {
|
|
1577
|
-
return /* @__PURE__ */
|
|
1526
|
+
return /* @__PURE__ */ a("span", { class: "h-1 w-1 rounded-full bg-gray-300", "aria-hidden": "true" });
|
|
1578
1527
|
}
|
|
1579
1528
|
function je({ block: e }) {
|
|
1580
|
-
return e.items.length ? /* @__PURE__ */
|
|
1581
|
-
/* @__PURE__ */
|
|
1529
|
+
return e.items.length ? /* @__PURE__ */ a("ul", { class: "flex flex-col gap-2.5", role: "list", children: e.items.map((t) => /* @__PURE__ */ c("li", { class: "flex items-start gap-3 text-sm text-gray-700", children: [
|
|
1530
|
+
/* @__PURE__ */ a(
|
|
1582
1531
|
"svg",
|
|
1583
1532
|
{
|
|
1584
1533
|
width: "18",
|
|
@@ -1587,7 +1536,7 @@ function je({ block: e }) {
|
|
|
1587
1536
|
fill: "none",
|
|
1588
1537
|
class: "mt-0.5 flex-shrink-0 text-emerald-500",
|
|
1589
1538
|
"aria-hidden": "true",
|
|
1590
|
-
children: /* @__PURE__ */
|
|
1539
|
+
children: /* @__PURE__ */ a(
|
|
1591
1540
|
"path",
|
|
1592
1541
|
{
|
|
1593
1542
|
d: "M4 10.5l3.5 3.5 8.5-8.5",
|
|
@@ -1600,23 +1549,23 @@ function je({ block: e }) {
|
|
|
1600
1549
|
}
|
|
1601
1550
|
),
|
|
1602
1551
|
/* @__PURE__ */ c("div", { class: "flex flex-col gap-0.5", children: [
|
|
1603
|
-
/* @__PURE__ */
|
|
1604
|
-
t.desc ? /* @__PURE__ */
|
|
1552
|
+
/* @__PURE__ */ a("span", { class: "font-medium leading-snug text-gray-900", children: t.name }),
|
|
1553
|
+
t.desc ? /* @__PURE__ */ a("span", { class: "text-xs leading-relaxed text-gray-400", children: t.desc }) : null
|
|
1605
1554
|
] })
|
|
1606
1555
|
] }, t.id)) }) : null;
|
|
1607
1556
|
}
|
|
1608
1557
|
function ze({ block: e }) {
|
|
1609
|
-
const { t } = v(), r = e.title ?? t("pricing.money_back", "30-day money-back guarantee"),
|
|
1558
|
+
const { t } = v(), r = e.title ?? t("pricing.money_back", "30-day money-back guarantee"), n = e.subtitle, i = (e.icon ?? "dollar_shield") !== "none", o = Be(r);
|
|
1610
1559
|
return /* @__PURE__ */ c("div", { class: "flex flex-col items-center gap-1.5 border-b-1 pb-4 mb-1 border-gray-100", children: [
|
|
1611
1560
|
/* @__PURE__ */ c("div", { class: "inline-flex items-center gap-2 text-[12px] text-gray-700", children: [
|
|
1612
|
-
i ? /* @__PURE__ */
|
|
1561
|
+
i ? /* @__PURE__ */ a(Oe, {}) : null,
|
|
1613
1562
|
o ? /* @__PURE__ */ c("span", { children: [
|
|
1614
|
-
/* @__PURE__ */
|
|
1563
|
+
/* @__PURE__ */ a("b", { class: "font-bold text-gray-900", children: o.bold }),
|
|
1615
1564
|
" ",
|
|
1616
|
-
/* @__PURE__ */
|
|
1617
|
-
] }) : /* @__PURE__ */
|
|
1565
|
+
/* @__PURE__ */ a("span", { class: "font-medium", children: o.rest })
|
|
1566
|
+
] }) : /* @__PURE__ */ a("span", { class: "font-medium", children: r })
|
|
1618
1567
|
] }),
|
|
1619
|
-
|
|
1568
|
+
n ? /* @__PURE__ */ a("span", { class: "text-center text-xs leading-relaxed text-gray-500", children: n }) : null
|
|
1620
1569
|
] });
|
|
1621
1570
|
}
|
|
1622
1571
|
function Be(e) {
|
|
@@ -1635,7 +1584,7 @@ function Oe() {
|
|
|
1635
1584
|
class: "flex-shrink-0 text-emerald-500",
|
|
1636
1585
|
"aria-hidden": "true",
|
|
1637
1586
|
children: [
|
|
1638
|
-
/* @__PURE__ */
|
|
1587
|
+
/* @__PURE__ */ a(
|
|
1639
1588
|
"path",
|
|
1640
1589
|
{
|
|
1641
1590
|
d: "M12 2 4 5v6c0 5.25 3.5 9.5 8 11 4.5-1.5 8-5.75 8-11V5l-8-3Z",
|
|
@@ -1644,7 +1593,7 @@ function Oe() {
|
|
|
1644
1593
|
"stroke-linejoin": "round"
|
|
1645
1594
|
}
|
|
1646
1595
|
),
|
|
1647
|
-
/* @__PURE__ */
|
|
1596
|
+
/* @__PURE__ */ a(
|
|
1648
1597
|
"path",
|
|
1649
1598
|
{
|
|
1650
1599
|
d: "m9 12 2 2 4-4",
|
|
@@ -1658,20 +1607,20 @@ function Oe() {
|
|
|
1658
1607
|
}
|
|
1659
1608
|
);
|
|
1660
1609
|
}
|
|
1661
|
-
const
|
|
1610
|
+
const Ft = 24, Fe = 16, Re = 2;
|
|
1662
1611
|
function Ue(e, t) {
|
|
1663
1612
|
const r = t * Re;
|
|
1664
|
-
let
|
|
1665
|
-
for (e.style.fontSize = `${
|
|
1666
|
-
|
|
1613
|
+
let n = Ft;
|
|
1614
|
+
for (e.style.fontSize = `${n}px`; e.scrollHeight > r && n > Fe; )
|
|
1615
|
+
n -= 1, e.style.fontSize = `${n}px`;
|
|
1667
1616
|
}
|
|
1668
1617
|
function De({ block: e, ctx: t }) {
|
|
1669
|
-
const r = e.level ?? 1,
|
|
1670
|
-
return
|
|
1618
|
+
const r = e.level ?? 1, n = `h${r}`, i = r === 1 ? "text-[22px] sm:text-2xl font-semibold leading-tight text-center text-balance text-gray-800" : r === 2 ? "text-xl font-semibold leading-snug text-gray-900 tracking-tight" : "text-base font-medium text-gray-900", o = F(null), s = r === 1 && !!t.bootstrap.settings.title_auto_fit;
|
|
1619
|
+
return E(() => {
|
|
1671
1620
|
if (!s || !o.current) return;
|
|
1672
|
-
const
|
|
1673
|
-
Ue(o.current,
|
|
1674
|
-
}, [s, e.text]), /* @__PURE__ */ n
|
|
1621
|
+
const d = getComputedStyle(o.current), l = parseFloat(d.lineHeight) || Ft * 1.5;
|
|
1622
|
+
Ue(o.current, l);
|
|
1623
|
+
}, [s, e.text]), /* @__PURE__ */ a(n, { ref: o, class: i, children: e.text });
|
|
1675
1624
|
}
|
|
1676
1625
|
function Ne(e) {
|
|
1677
1626
|
const t = e.local ?? { currency: e.currency, amount: e.amount };
|
|
@@ -1681,10 +1630,10 @@ function Ne(e) {
|
|
|
1681
1630
|
}
|
|
1682
1631
|
return { amount: t.amount, currency: t.currency };
|
|
1683
1632
|
}
|
|
1684
|
-
function
|
|
1633
|
+
function nt(e, t) {
|
|
1685
1634
|
const r = e % 1 !== 0 ? 2 : 0;
|
|
1686
1635
|
try {
|
|
1687
|
-
const
|
|
1636
|
+
const n = new Intl.NumberFormat(void 0, {
|
|
1688
1637
|
style: "currency",
|
|
1689
1638
|
currency: t,
|
|
1690
1639
|
currencyDisplay: "narrowSymbol",
|
|
@@ -1692,20 +1641,20 @@ function ot(e, t) {
|
|
|
1692
1641
|
minimumFractionDigits: r
|
|
1693
1642
|
}).formatToParts(e);
|
|
1694
1643
|
let i = "", o = "";
|
|
1695
|
-
for (const s of
|
|
1644
|
+
for (const s of n)
|
|
1696
1645
|
s.type === "currency" ? i = s.value : s.type !== "literal" && (o += s.value);
|
|
1697
1646
|
return { currency: i || t, amount: o.trim() };
|
|
1698
1647
|
} catch {
|
|
1699
1648
|
return { currency: t, amount: String(e) };
|
|
1700
1649
|
}
|
|
1701
1650
|
}
|
|
1702
|
-
function
|
|
1703
|
-
const { amount: r, currency:
|
|
1651
|
+
function st(e, t) {
|
|
1652
|
+
const { amount: r, currency: n } = Ne(e);
|
|
1704
1653
|
if (!t) {
|
|
1705
|
-
const { currency:
|
|
1706
|
-
return { currency:
|
|
1654
|
+
const { currency: d, amount: l } = nt(r, n);
|
|
1655
|
+
return { currency: d, amount: l, originalAmount: null };
|
|
1707
1656
|
}
|
|
1708
|
-
const i = r * (1 - t / 100), o =
|
|
1657
|
+
const i = r * (1 - t / 100), o = nt(i, n), s = nt(r, n);
|
|
1709
1658
|
return {
|
|
1710
1659
|
currency: o.currency,
|
|
1711
1660
|
amount: o.amount,
|
|
@@ -1721,42 +1670,42 @@ function q(e, t) {
|
|
|
1721
1670
|
(i) => i.price_id == null && i.discount_percent && i.discount_percent > 0
|
|
1722
1671
|
) ?? null);
|
|
1723
1672
|
}
|
|
1724
|
-
function
|
|
1673
|
+
function Rt(e, t) {
|
|
1725
1674
|
if (e.label) return e.label.toUpperCase();
|
|
1726
1675
|
if (!e.interval || e.interval === "lifetime")
|
|
1727
1676
|
return t("pricing.plan_label.lifetime", "LIFETIME");
|
|
1728
|
-
const
|
|
1677
|
+
const n = {
|
|
1729
1678
|
day: { key: "pricing.plan_label.daily", fallback: "DAILY PLAN" },
|
|
1730
1679
|
week: { key: "pricing.plan_label.weekly", fallback: "WEEKLY PLAN" },
|
|
1731
1680
|
month: { key: "pricing.plan_label.monthly", fallback: "MONTHLY PLAN" },
|
|
1732
1681
|
year: { key: "pricing.plan_label.yearly", fallback: "YEARLY PLAN" }
|
|
1733
1682
|
}[e.interval];
|
|
1734
|
-
return
|
|
1683
|
+
return n ? t(n.key, n.fallback) : `${e.interval.toUpperCase()} PLAN`;
|
|
1735
1684
|
}
|
|
1736
|
-
function
|
|
1685
|
+
function lt(e, t) {
|
|
1737
1686
|
if (!e.interval || e.interval === "lifetime")
|
|
1738
1687
|
return t("pricing.interval.lifetime_short", "lifetime");
|
|
1739
1688
|
if (e.interval === "year") return t("pricing.interval.month", "month");
|
|
1740
1689
|
const r = e.interval_count ?? 1;
|
|
1741
1690
|
return r === 1 ? t(`pricing.interval.${e.interval}`, e.interval) : `${r} ${e.interval}s`;
|
|
1742
1691
|
}
|
|
1743
|
-
function
|
|
1744
|
-
const { t: r } = v(),
|
|
1692
|
+
function $e({ block: e, ctx: t }) {
|
|
1693
|
+
const { t: r } = v(), n = e.priceIds && e.priceIds.length > 0 ? new Set(e.priceIds) : null, i = t.bootstrap.prices.filter((s) => !n || n.has(s.id));
|
|
1745
1694
|
if (i.length === 0)
|
|
1746
|
-
return /* @__PURE__ */
|
|
1695
|
+
return /* @__PURE__ */ a("p", { class: "text-sm text-gray-500", children: r("pricing.no_prices", "No prices available.") });
|
|
1747
1696
|
const o = e.popular_label ?? r("pricing.most_popular", "Most popular");
|
|
1748
1697
|
if (e.view === "compact")
|
|
1749
|
-
return /* @__PURE__ */
|
|
1698
|
+
return /* @__PURE__ */ a(
|
|
1750
1699
|
"div",
|
|
1751
1700
|
{
|
|
1752
1701
|
class: "flex w-full flex-col rounded-xl border border-gray-200 bg-gray-50",
|
|
1753
1702
|
role: "radiogroup",
|
|
1754
1703
|
"aria-label": r("pricing.plans_aria", "Plans"),
|
|
1755
|
-
children: i.map((s,
|
|
1756
|
-
|
|
1704
|
+
children: i.map((s, d) => /* @__PURE__ */ a(
|
|
1705
|
+
Ve,
|
|
1757
1706
|
{
|
|
1758
1707
|
price: s,
|
|
1759
|
-
isLast:
|
|
1708
|
+
isLast: d === i.length - 1,
|
|
1760
1709
|
isPopular: e.popular_price_id === s.id,
|
|
1761
1710
|
popularLabel: o,
|
|
1762
1711
|
offer: q(t.bootstrap.offers, s.id),
|
|
@@ -1771,49 +1720,49 @@ function He({ block: e, ctx: t }) {
|
|
|
1771
1720
|
}
|
|
1772
1721
|
);
|
|
1773
1722
|
if (e.view === "horizontal") {
|
|
1774
|
-
const s = Math.min(i.length, 3),
|
|
1775
|
-
(
|
|
1723
|
+
const s = Math.min(i.length, 3), d = i.some(
|
|
1724
|
+
(l) => (q(t.bootstrap.offers, l.id)?.discount_percent ?? 0) > 0
|
|
1776
1725
|
);
|
|
1777
|
-
return /* @__PURE__ */
|
|
1726
|
+
return /* @__PURE__ */ a(
|
|
1778
1727
|
"div",
|
|
1779
1728
|
{
|
|
1780
1729
|
class: "grid items-stretch gap-2",
|
|
1781
1730
|
style: { gridTemplateColumns: `repeat(${s}, minmax(0, 1fr))` },
|
|
1782
1731
|
role: "radiogroup",
|
|
1783
1732
|
"aria-label": r("pricing.plans_aria", "Plans"),
|
|
1784
|
-
children: i.map((
|
|
1733
|
+
children: i.map((l) => /* @__PURE__ */ a(
|
|
1785
1734
|
Ge,
|
|
1786
1735
|
{
|
|
1787
|
-
price:
|
|
1788
|
-
isPopular: e.popular_price_id ===
|
|
1736
|
+
price: l,
|
|
1737
|
+
isPopular: e.popular_price_id === l.id,
|
|
1789
1738
|
popularLabel: o,
|
|
1790
|
-
offer: q(t.bootstrap.offers,
|
|
1791
|
-
reserveStrikeRow:
|
|
1792
|
-
selected: t.selectedPriceId ===
|
|
1739
|
+
offer: q(t.bootstrap.offers, l.id),
|
|
1740
|
+
reserveStrikeRow: d,
|
|
1741
|
+
selected: t.selectedPriceId === l.id,
|
|
1793
1742
|
onSelect: () => {
|
|
1794
|
-
t.setSelectedPriceId(
|
|
1743
|
+
t.setSelectedPriceId(l.id), t.onAction("price_selected", { priceId: l.id, price: l });
|
|
1795
1744
|
},
|
|
1796
1745
|
t: r
|
|
1797
1746
|
},
|
|
1798
|
-
|
|
1747
|
+
l.id
|
|
1799
1748
|
))
|
|
1800
1749
|
}
|
|
1801
1750
|
);
|
|
1802
1751
|
}
|
|
1803
|
-
return /* @__PURE__ */
|
|
1752
|
+
return /* @__PURE__ */ a(
|
|
1804
1753
|
"div",
|
|
1805
1754
|
{
|
|
1806
1755
|
class: "flex flex-col gap-2",
|
|
1807
1756
|
role: "radiogroup",
|
|
1808
1757
|
"aria-label": r("pricing.plans_aria", "Plans"),
|
|
1809
1758
|
children: i.map((s) => {
|
|
1810
|
-
const
|
|
1759
|
+
const d = t.selectedPriceId === s.id, l = e.popular_price_id === s.id, p = q(t.bootstrap.offers, s.id)?.discount_percent ?? null, { currency: u, amount: x, originalAmount: y } = st(s, p);
|
|
1811
1760
|
return /* @__PURE__ */ c(
|
|
1812
1761
|
"button",
|
|
1813
1762
|
{
|
|
1814
1763
|
type: "button",
|
|
1815
1764
|
role: "radio",
|
|
1816
|
-
"aria-checked":
|
|
1765
|
+
"aria-checked": d,
|
|
1817
1766
|
onClick: () => {
|
|
1818
1767
|
t.setSelectedPriceId(s.id), t.onAction("price_selected", { priceId: s.id, price: s });
|
|
1819
1768
|
},
|
|
@@ -1822,26 +1771,26 @@ function He({ block: e, ctx: t }) {
|
|
|
1822
1771
|
// Везде border 2px — selection выражается только цветом, layout
|
|
1823
1772
|
// не прыгает (равная толщина у selected/unselected). Цветовая
|
|
1824
1773
|
// разница accent vs gray достаточно сильная для visual hierarchy.
|
|
1825
|
-
|
|
1774
|
+
d ? "border-[var(--pw-accent)] bg-transparent" : "border-gray-200 bg-transparent hover:bg-gray-50"
|
|
1826
1775
|
].join(" "),
|
|
1827
1776
|
children: [
|
|
1828
|
-
/* @__PURE__ */
|
|
1777
|
+
/* @__PURE__ */ a(
|
|
1829
1778
|
"span",
|
|
1830
1779
|
{
|
|
1831
1780
|
class: [
|
|
1832
1781
|
"flex h-6.5 w-6.5 flex-shrink-0 items-center justify-center rounded-full border transition-colors",
|
|
1833
|
-
|
|
1782
|
+
d ? "border-[var(--pw-accent)] text-white" : "border-gray-300 bg-transparent text-transparent",
|
|
1834
1783
|
// Popular-label badge сидит absolute сверху-справа карточки и
|
|
1835
1784
|
// визуально сдвигает центр content'а вниз. flex items-center
|
|
1836
1785
|
// на карточке держит галочку по геометрическому центру, что
|
|
1837
1786
|
// делает её визуально выше — компенсируем небольшим mt'ом.
|
|
1838
|
-
|
|
1787
|
+
l ? "mt-3" : ""
|
|
1839
1788
|
].join(" "),
|
|
1840
|
-
style:
|
|
1789
|
+
style: d ? {
|
|
1841
1790
|
background: "linear-gradient(135deg, color-mix(in srgb, var(--pw-accent) 70%, white) 0%, var(--pw-accent) 50%, color-mix(in srgb, var(--pw-accent) 85%, black) 100%)"
|
|
1842
1791
|
} : void 0,
|
|
1843
1792
|
"aria-hidden": "true",
|
|
1844
|
-
children: /* @__PURE__ */
|
|
1793
|
+
children: /* @__PURE__ */ a(
|
|
1845
1794
|
"svg",
|
|
1846
1795
|
{
|
|
1847
1796
|
width: "14",
|
|
@@ -1849,8 +1798,8 @@ function He({ block: e, ctx: t }) {
|
|
|
1849
1798
|
viewBox: "0 0 17 12",
|
|
1850
1799
|
fill: "none",
|
|
1851
1800
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1852
|
-
class:
|
|
1853
|
-
children: /* @__PURE__ */
|
|
1801
|
+
class: d ? "opacity-100" : "opacity-0",
|
|
1802
|
+
children: /* @__PURE__ */ a(
|
|
1854
1803
|
"path",
|
|
1855
1804
|
{
|
|
1856
1805
|
d: "M16.5234 0.476562C16.9805 0.898438 16.9805 1.63672 16.5234 2.05859L7.52344 11.0586C7.10156 11.5156 6.36328 11.5156 5.94141 11.0586L1.44141 6.55859C0.984375 6.13672 0.984375 5.39844 1.44141 4.97656C1.86328 4.51953 2.60156 4.51953 3.02344 4.97656L6.75 8.66797L14.9414 0.476562C15.3633 0.0195312 16.1016 0.0195312 16.5234 0.476562Z",
|
|
@@ -1863,35 +1812,35 @@ function He({ block: e, ctx: t }) {
|
|
|
1863
1812
|
),
|
|
1864
1813
|
/* @__PURE__ */ c("div", { class: "flex flex-1 flex-col gap-0.5", children: [
|
|
1865
1814
|
/* @__PURE__ */ c("div", { class: "flex flex-wrap items-center gap-x-2 gap-y-1", children: [
|
|
1866
|
-
/* @__PURE__ */
|
|
1867
|
-
|
|
1815
|
+
/* @__PURE__ */ a("span", { class: "text-xs font-normal uppercase tracking-normal text-gray-800/70", children: Rt(s, r) }),
|
|
1816
|
+
y ? (
|
|
1868
1817
|
// opacity-60 приглушает strike: глаз сначала ловит label
|
|
1869
1818
|
// и discount-badge, потом main price; original «бывшая цена»
|
|
1870
1819
|
// — третичная информация, не должна конкурировать с label.
|
|
1871
|
-
/* @__PURE__ */
|
|
1820
|
+
/* @__PURE__ */ a("span", { class: "text-[15px] font-normal text-gray-400 opacity-60 line-through decoration-gray-400 decoration-[1.5px]", children: y })
|
|
1872
1821
|
) : null,
|
|
1873
|
-
|
|
1822
|
+
p ? (
|
|
1874
1823
|
// Emerald pill — фиксированный «успех/выгода», не зависит от
|
|
1875
1824
|
// brand_color. Читается даже на тёмных бренд-акцентах.
|
|
1876
1825
|
/* @__PURE__ */ c("span", { class: "rounded-full bg-emerald-100 px-2.5 py-1 text-xs font-bold leading-none text-emerald-700", children: [
|
|
1877
1826
|
"-",
|
|
1878
|
-
|
|
1827
|
+
p,
|
|
1879
1828
|
"%"
|
|
1880
1829
|
] })
|
|
1881
1830
|
) : null
|
|
1882
1831
|
] }),
|
|
1883
|
-
/* @__PURE__ */
|
|
1884
|
-
/* @__PURE__ */
|
|
1832
|
+
/* @__PURE__ */ a("div", { class: "flex items-baseline gap-2 flex-wrap", children: /* @__PURE__ */ c("span", { class: "text-[26px] leading-tight whitespace-nowrap text-gray-800 font-medium", children: [
|
|
1833
|
+
/* @__PURE__ */ a("span", { class: "opacity-90", children: u }),
|
|
1885
1834
|
x,
|
|
1886
1835
|
/* @__PURE__ */ c("span", { class: "text-sm font-normal text-gray-500", children: [
|
|
1887
1836
|
" ",
|
|
1888
1837
|
"/ ",
|
|
1889
|
-
|
|
1838
|
+
lt(s, r)
|
|
1890
1839
|
] })
|
|
1891
1840
|
] }) }),
|
|
1892
|
-
s.description ? /* @__PURE__ */
|
|
1841
|
+
s.description ? /* @__PURE__ */ a("span", { class: "mt-1 text-xs leading-relaxed text-gray-500", children: s.description }) : null
|
|
1893
1842
|
] }),
|
|
1894
|
-
|
|
1843
|
+
l ? /* @__PURE__ */ a(
|
|
1895
1844
|
"span",
|
|
1896
1845
|
{
|
|
1897
1846
|
class: "absolute -top-[9px] -right-[6px] rounded-[11px] border-[5px] border-white px-2 py-1 text-[12px] font-semibold text-white",
|
|
@@ -1907,20 +1856,20 @@ function He({ block: e, ctx: t }) {
|
|
|
1907
1856
|
}
|
|
1908
1857
|
);
|
|
1909
1858
|
}
|
|
1910
|
-
function
|
|
1859
|
+
function He(e, t) {
|
|
1911
1860
|
return e.label ? e.label : !e.interval || e.interval === "lifetime" ? t("pricing.interval.lifetime_short", "lifetime") : t(`pricing.interval.${e.interval}`, e.interval);
|
|
1912
1861
|
}
|
|
1913
|
-
function
|
|
1862
|
+
function Ve({
|
|
1914
1863
|
price: e,
|
|
1915
1864
|
isLast: t,
|
|
1916
1865
|
isPopular: r,
|
|
1917
|
-
popularLabel:
|
|
1866
|
+
popularLabel: n,
|
|
1918
1867
|
offer: i,
|
|
1919
1868
|
selected: o,
|
|
1920
1869
|
onSelect: s,
|
|
1921
|
-
t:
|
|
1870
|
+
t: d
|
|
1922
1871
|
}) {
|
|
1923
|
-
const
|
|
1872
|
+
const l = i?.discount_percent ?? null, { currency: g, amount: p, originalAmount: u } = st(e, l);
|
|
1924
1873
|
return /* @__PURE__ */ c(
|
|
1925
1874
|
"button",
|
|
1926
1875
|
{
|
|
@@ -1930,7 +1879,7 @@ function $e({
|
|
|
1930
1879
|
onClick: s,
|
|
1931
1880
|
class: "group relative inline-flex w-full max-w-[360px] mx-auto items-center justify-between gap-4 px-4 pt-3.5 text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-[var(--pw-accent)]",
|
|
1932
1881
|
children: [
|
|
1933
|
-
/* @__PURE__ */
|
|
1882
|
+
/* @__PURE__ */ a(
|
|
1934
1883
|
"span",
|
|
1935
1884
|
{
|
|
1936
1885
|
class: [
|
|
@@ -1941,7 +1890,7 @@ function $e({
|
|
|
1941
1890
|
background: "linear-gradient(135deg, color-mix(in srgb, var(--pw-accent) 70%, white) 0%, var(--pw-accent) 50%, color-mix(in srgb, var(--pw-accent) 85%, black) 100%)"
|
|
1942
1891
|
} : void 0,
|
|
1943
1892
|
"aria-hidden": "true",
|
|
1944
|
-
children: /* @__PURE__ */
|
|
1893
|
+
children: /* @__PURE__ */ a(
|
|
1945
1894
|
"svg",
|
|
1946
1895
|
{
|
|
1947
1896
|
width: "14",
|
|
@@ -1950,7 +1899,7 @@ function $e({
|
|
|
1950
1899
|
fill: "none",
|
|
1951
1900
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1952
1901
|
class: o ? "opacity-100" : "opacity-0",
|
|
1953
|
-
children: /* @__PURE__ */
|
|
1902
|
+
children: /* @__PURE__ */ a(
|
|
1954
1903
|
"path",
|
|
1955
1904
|
{
|
|
1956
1905
|
d: "M16.5234 0.476562C16.9805 0.898438 16.9805 1.63672 16.5234 2.05859L7.52344 11.0586C7.10156 11.5156 6.36328 11.5156 5.94141 11.0586L1.44141 6.55859C0.984375 6.13672 0.984375 5.39844 1.44141 4.97656C1.86328 4.51953 2.60156 4.51953 3.02344 4.97656L6.75 8.66797L14.9414 0.476562C15.3633 0.0195312 16.1016 0.0195312 16.5234 0.476562Z",
|
|
@@ -1970,12 +1919,12 @@ function $e({
|
|
|
1970
1919
|
].join(" "),
|
|
1971
1920
|
children: [
|
|
1972
1921
|
/* @__PURE__ */ c("div", { class: "flex flex-wrap items-center gap-1 gap-x-1.5", children: [
|
|
1973
|
-
/* @__PURE__ */
|
|
1922
|
+
/* @__PURE__ */ a("span", { class: "text-base font-normal capitalize text-gray-800", children: He(e, d) }),
|
|
1974
1923
|
r ? (
|
|
1975
1924
|
// Pastel brand-mix pill — точно как `badge` в TelegramPricingRadio.
|
|
1976
1925
|
// Низкий visual weight: pill про "имя плана" (most popular), а не
|
|
1977
1926
|
// про savings — не должна конкурировать с -X% discount-pill.
|
|
1978
|
-
/* @__PURE__ */
|
|
1927
|
+
/* @__PURE__ */ a(
|
|
1979
1928
|
"span",
|
|
1980
1929
|
{
|
|
1981
1930
|
class: "rounded-[9px] px-2 py-1 text-[10px] font-bold",
|
|
@@ -1983,26 +1932,26 @@ function $e({
|
|
|
1983
1932
|
background: "linear-gradient(160deg, color-mix(in srgb, var(--pw-accent) 6%, white) 0%, color-mix(in srgb, var(--pw-accent) 15%, white) 100%)",
|
|
1984
1933
|
color: "var(--pw-accent)"
|
|
1985
1934
|
},
|
|
1986
|
-
children:
|
|
1935
|
+
children: n
|
|
1987
1936
|
}
|
|
1988
1937
|
)
|
|
1989
1938
|
) : null,
|
|
1990
|
-
|
|
1939
|
+
l ? /* @__PURE__ */ c("span", { class: "rounded-md bg-emerald-100 px-1.5 py-0.5 text-[10px] font-bold leading-none text-emerald-700", children: [
|
|
1991
1940
|
"-",
|
|
1992
|
-
|
|
1941
|
+
l,
|
|
1993
1942
|
"%"
|
|
1994
1943
|
] }) : null
|
|
1995
1944
|
] }),
|
|
1996
|
-
/* @__PURE__ */
|
|
1945
|
+
/* @__PURE__ */ a("div", { class: "flex-1" }),
|
|
1997
1946
|
/* @__PURE__ */ c("span", { class: "flex items-baseline gap-1.5 text-base font-normal text-gray-600", children: [
|
|
1998
|
-
|
|
1947
|
+
u ? /* @__PURE__ */ a("span", { class: "text-xs text-gray-400 line-through decoration-gray-400 decoration-[1.5px]", children: u }) : null,
|
|
1999
1948
|
/* @__PURE__ */ c("span", { class: "whitespace-nowrap", children: [
|
|
2000
|
-
/* @__PURE__ */
|
|
2001
|
-
|
|
1949
|
+
/* @__PURE__ */ a("span", { class: "opacity-90", children: g }),
|
|
1950
|
+
p,
|
|
2002
1951
|
/* @__PURE__ */ c("span", { class: "text-xs text-gray-400", children: [
|
|
2003
1952
|
" ",
|
|
2004
1953
|
"/ ",
|
|
2005
|
-
|
|
1954
|
+
lt(e, d)
|
|
2006
1955
|
] })
|
|
2007
1956
|
] })
|
|
2008
1957
|
] })
|
|
@@ -2017,13 +1966,13 @@ function Ge({
|
|
|
2017
1966
|
price: e,
|
|
2018
1967
|
isPopular: t,
|
|
2019
1968
|
popularLabel: r,
|
|
2020
|
-
offer:
|
|
1969
|
+
offer: n,
|
|
2021
1970
|
reserveStrikeRow: i,
|
|
2022
1971
|
selected: o,
|
|
2023
1972
|
onSelect: s,
|
|
2024
|
-
t:
|
|
1973
|
+
t: d
|
|
2025
1974
|
}) {
|
|
2026
|
-
const
|
|
1975
|
+
const l = n?.discount_percent ?? null, { currency: g, amount: p, originalAmount: u } = st(e, l);
|
|
2027
1976
|
return /* @__PURE__ */ c(
|
|
2028
1977
|
"button",
|
|
2029
1978
|
{
|
|
@@ -2037,24 +1986,24 @@ function Ge({
|
|
|
2037
1986
|
].join(" "),
|
|
2038
1987
|
style: o ? { background: "color-mix(in srgb, var(--pw-accent) 6%, transparent)" } : void 0,
|
|
2039
1988
|
children: [
|
|
2040
|
-
/* @__PURE__ */
|
|
1989
|
+
/* @__PURE__ */ a("span", { class: "flex min-h-[2.4em] items-center text-[10px] font-normal uppercase leading-tight text-gray-800/70", children: Rt(e, d) }),
|
|
2041
1990
|
i ? /* @__PURE__ */ c("div", { class: "flex h-[22px] items-center justify-center gap-1.5", children: [
|
|
2042
|
-
|
|
2043
|
-
|
|
1991
|
+
u ? /* @__PURE__ */ a("span", { class: "text-[12px] text-gray-400 line-through decoration-gray-400 decoration-[1.5px]", children: u }) : null,
|
|
1992
|
+
l ? /* @__PURE__ */ c("span", { class: "rounded-md bg-emerald-100 px-1.5 py-0.5 text-[10px] font-bold leading-none text-emerald-700", children: [
|
|
2044
1993
|
"-",
|
|
2045
|
-
|
|
1994
|
+
l,
|
|
2046
1995
|
"%"
|
|
2047
1996
|
] }) : null
|
|
2048
1997
|
] }) : null,
|
|
2049
1998
|
/* @__PURE__ */ c("span", { class: "text-[26px] leading-none whitespace-nowrap text-gray-800 font-medium", children: [
|
|
2050
|
-
/* @__PURE__ */
|
|
2051
|
-
|
|
1999
|
+
/* @__PURE__ */ a("span", { class: "opacity-90", children: g }),
|
|
2000
|
+
p
|
|
2052
2001
|
] }),
|
|
2053
2002
|
/* @__PURE__ */ c("span", { class: "text-xs font-normal text-gray-500", children: [
|
|
2054
2003
|
"/ ",
|
|
2055
|
-
|
|
2004
|
+
lt(e, d)
|
|
2056
2005
|
] }),
|
|
2057
|
-
t ? /* @__PURE__ */
|
|
2006
|
+
t ? /* @__PURE__ */ a(
|
|
2058
2007
|
"span",
|
|
2059
2008
|
{
|
|
2060
2009
|
class: "absolute -top-[10px] left-1/2 -translate-x-1/2 whitespace-nowrap rounded-[11px] border-[3px] border-white px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-white",
|
|
@@ -2067,7 +2016,7 @@ function Ge({
|
|
|
2067
2016
|
);
|
|
2068
2017
|
}
|
|
2069
2018
|
function qe({ block: e }) {
|
|
2070
|
-
return /* @__PURE__ */
|
|
2019
|
+
return /* @__PURE__ */ a("p", { class: "text-[0.9375rem] leading-relaxed text-gray-600", children: e.text });
|
|
2071
2020
|
}
|
|
2072
2021
|
const We = {
|
|
2073
2022
|
week: 0.25,
|
|
@@ -2082,13 +2031,13 @@ function Ke({ block: e, ctx: t }) {
|
|
|
2082
2031
|
if (!e.queries.length) return null;
|
|
2083
2032
|
const i = t.bootstrap.prices.find((s) => s.id === t.selectedPriceId)?.interval ?? null, o = i ? We[i] : void 0;
|
|
2084
2033
|
return /* @__PURE__ */ c("div", { class: "flex flex-col gap-2", children: [
|
|
2085
|
-
/* @__PURE__ */
|
|
2034
|
+
/* @__PURE__ */ a("div", { class: "text-sm font-semibold text-gray-800", children: !i || i === "lifetime" ? r("pricing.included_total", "Included for lifetime:") : r("pricing.included_per", "Included per {interval}:", {
|
|
2086
2035
|
interval: Ze(i, r)
|
|
2087
2036
|
}) }),
|
|
2088
|
-
/* @__PURE__ */
|
|
2089
|
-
const
|
|
2037
|
+
/* @__PURE__ */ a("ul", { class: "flex flex-col gap-2", role: "list", children: e.queries.map((s) => {
|
|
2038
|
+
const d = Number.isFinite(s.count) ? s.count : 0, l = o !== void 0 ? Math.round(d * o) : d;
|
|
2090
2039
|
return /* @__PURE__ */ c("li", { class: `flex gap-3 ${s.desc ? "items-start" : "items-center"}`, children: [
|
|
2091
|
-
/* @__PURE__ */
|
|
2040
|
+
/* @__PURE__ */ a(
|
|
2092
2041
|
"svg",
|
|
2093
2042
|
{
|
|
2094
2043
|
width: "18",
|
|
@@ -2097,7 +2046,7 @@ function Ke({ block: e, ctx: t }) {
|
|
|
2097
2046
|
fill: "none",
|
|
2098
2047
|
class: `flex-shrink-0 text-emerald-500 ${s.desc ? "mt-0.5" : ""}`,
|
|
2099
2048
|
"aria-hidden": "true",
|
|
2100
|
-
children: /* @__PURE__ */
|
|
2049
|
+
children: /* @__PURE__ */ a(
|
|
2101
2050
|
"path",
|
|
2102
2051
|
{
|
|
2103
2052
|
d: "M4 10.5l3.5 3.5 8.5-8.5",
|
|
@@ -2110,12 +2059,12 @@ function Ke({ block: e, ctx: t }) {
|
|
|
2110
2059
|
}
|
|
2111
2060
|
),
|
|
2112
2061
|
/* @__PURE__ */ c("div", { children: [
|
|
2113
|
-
/* @__PURE__ */
|
|
2062
|
+
/* @__PURE__ */ a("span", { class: "font-semibold text-gray-900 text-sm", children: l }),
|
|
2114
2063
|
" ",
|
|
2115
|
-
/* @__PURE__ */
|
|
2116
|
-
s.desc ? /* @__PURE__ */ c(
|
|
2117
|
-
/* @__PURE__ */
|
|
2118
|
-
/* @__PURE__ */
|
|
2064
|
+
/* @__PURE__ */ a("span", { class: "text-sm text-gray-800", children: s.name }),
|
|
2065
|
+
s.desc ? /* @__PURE__ */ c(ot, { children: [
|
|
2066
|
+
/* @__PURE__ */ a("br", {}),
|
|
2067
|
+
/* @__PURE__ */ a("span", { class: "text-xs text-gray-400", children: s.desc })
|
|
2119
2068
|
] }) : null
|
|
2120
2069
|
] })
|
|
2121
2070
|
] }, s.id);
|
|
@@ -2125,51 +2074,51 @@ function Ke({ block: e, ctx: t }) {
|
|
|
2125
2074
|
const Ye = {
|
|
2126
2075
|
heading: De,
|
|
2127
2076
|
text: qe,
|
|
2128
|
-
price_grid:
|
|
2077
|
+
price_grid: $e,
|
|
2129
2078
|
cta_button: Te,
|
|
2130
|
-
auth_panel:
|
|
2079
|
+
auth_panel: Tt,
|
|
2131
2080
|
current_session: Ee,
|
|
2132
2081
|
features_list: je,
|
|
2133
2082
|
tokenization_gate: Ke,
|
|
2134
2083
|
guarantee_badge: ze,
|
|
2135
|
-
offer_banner:
|
|
2084
|
+
offer_banner: xe
|
|
2136
2085
|
};
|
|
2137
|
-
function Xe({ layout: e, bootstrap: t, onAction: r, auth:
|
|
2138
|
-
const s =
|
|
2139
|
-
for (const
|
|
2140
|
-
if (
|
|
2141
|
-
return
|
|
2086
|
+
function Xe({ layout: e, bootstrap: t, onAction: r, auth: n, authSession: i, hasTopBanner: o }) {
|
|
2087
|
+
const s = Ht(() => {
|
|
2088
|
+
for (const k of e.blocks)
|
|
2089
|
+
if (k.type === "price_grid" && k.popular_price_id && t.prices.some((h) => h.id === k.popular_price_id))
|
|
2090
|
+
return k.popular_price_id;
|
|
2142
2091
|
return t.prices[0]?.id ?? null;
|
|
2143
|
-
}, [e.blocks, t.prices]), [
|
|
2092
|
+
}, [e.blocks, t.prices]), [d, l] = b(s), g = {
|
|
2144
2093
|
bootstrap: t,
|
|
2145
|
-
selectedPriceId:
|
|
2146
|
-
setSelectedPriceId:
|
|
2094
|
+
selectedPriceId: d,
|
|
2095
|
+
setSelectedPriceId: l,
|
|
2147
2096
|
onAction: r,
|
|
2148
|
-
auth:
|
|
2097
|
+
auth: n,
|
|
2149
2098
|
authSession: i
|
|
2150
|
-
},
|
|
2151
|
-
const
|
|
2152
|
-
return
|
|
2099
|
+
}, p = e.blocks.findIndex((k) => k.type === "cta_button"), u = p === -1 ? e.blocks : e.blocks.slice(0, p), x = p === -1 ? [] : e.blocks.slice(p), y = (k, h) => {
|
|
2100
|
+
const m = Ye[k.type];
|
|
2101
|
+
return m ? /* @__PURE__ */ a(m, { block: k, ctx: g }, `${k.type}-${h}`) : (typeof console < "u" && console.warn(`[paywall] unknown block type: ${k.type}`), null);
|
|
2153
2102
|
};
|
|
2154
|
-
return /* @__PURE__ */ c(
|
|
2155
|
-
/* @__PURE__ */
|
|
2103
|
+
return /* @__PURE__ */ c(ot, { children: [
|
|
2104
|
+
/* @__PURE__ */ a("div", { class: "flex-1 min-h-0 overflow-y-auto px-6 pb-3 pt-6 sm:px-8 sm:pb-4 sm:pt-8", children: /* @__PURE__ */ a("div", { class: "flex flex-col gap-6", children: u.map(y) }) }),
|
|
2156
2105
|
x.length > 0 ? (
|
|
2157
2106
|
// Тонкий shadow-top вместо border-t — создаёт depth, читается как
|
|
2158
2107
|
// «footer закреплён к низу dialog'а». Линия выглядела как divider
|
|
2159
2108
|
// в обычном flow, не передавала sticky-character.
|
|
2160
|
-
/* @__PURE__ */
|
|
2109
|
+
/* @__PURE__ */ a(
|
|
2161
2110
|
"div",
|
|
2162
2111
|
{
|
|
2163
2112
|
class: "flex flex-col gap-4 bg-white px-6 pb-6 pt-3 sm:px-8",
|
|
2164
2113
|
style: { boxShadow: "0 -4px 12px -4px rgba(15,23,42,0.06)" },
|
|
2165
|
-
children: x.map((
|
|
2114
|
+
children: x.map((k, h) => y(k, u.length + h))
|
|
2166
2115
|
}
|
|
2167
2116
|
)
|
|
2168
2117
|
) : null
|
|
2169
2118
|
] });
|
|
2170
2119
|
}
|
|
2171
|
-
function Je(e, t, r,
|
|
2172
|
-
return e ?
|
|
2120
|
+
function Je(e, t, r, n) {
|
|
2121
|
+
return e ? n ? { open: !0, view: "purchased", error: null } : t.status === "idle" || t.status === "loading" ? { open: !0, view: "loading", error: null } : t.status === "error" ? { open: !0, view: "error", error: t.error } : r.kind === "support" ? { open: !0, view: "support", error: null } : r.kind === "auth_gate" ? { open: !0, view: "auth", error: null } : r.kind === "awaiting_payment" ? { open: !0, view: "awaiting_payment", error: null } : r.kind === "popup_blocked" ? { open: !0, view: "popup_blocked", error: null } : r.kind === "purchase_success" ? { open: !0, view: "purchased", error: null } : r.kind === "verifying" ? { open: !0, view: "loading", error: null } : { open: !0, view: "layout", error: null } : { open: !1, view: null, error: null };
|
|
2173
2122
|
}
|
|
2174
2123
|
function Qe(e, t) {
|
|
2175
2124
|
return e.open === t.open && e.view === t.view && e.error === t.error;
|
|
@@ -2178,153 +2127,154 @@ function tr({
|
|
|
2178
2127
|
client: e,
|
|
2179
2128
|
open: t,
|
|
2180
2129
|
onClose: r,
|
|
2181
|
-
onEvent:
|
|
2130
|
+
onEvent: n,
|
|
2182
2131
|
initialView: i,
|
|
2183
|
-
|
|
2184
|
-
|
|
2132
|
+
initialAuthMode: o,
|
|
2133
|
+
purchased: s,
|
|
2134
|
+
renew: d,
|
|
2185
2135
|
onState: l,
|
|
2186
|
-
inline:
|
|
2187
|
-
locale:
|
|
2136
|
+
inline: g,
|
|
2137
|
+
locale: p
|
|
2188
2138
|
}) {
|
|
2189
|
-
const [
|
|
2139
|
+
const [u, x] = b({ status: "idle" }), [y, k] = b(
|
|
2190
2140
|
() => e.auth?.getCachedSession() ?? null
|
|
2191
|
-
), [
|
|
2192
|
-
|
|
2141
|
+
), [h, m] = b(() => i === "support" ? { kind: "support", origin: "standalone" } : i === "auth" ? { kind: "auth_gate", origin: "standalone" } : { kind: "layout" }), j = F(!1), _ = F(null);
|
|
2142
|
+
E(() => {
|
|
2193
2143
|
if (!l) return;
|
|
2194
|
-
const w = Je(t,
|
|
2195
|
-
|
|
2196
|
-
}, [t,
|
|
2144
|
+
const w = Je(t, u, h, s), f = _.current;
|
|
2145
|
+
f && Qe(f, w) || (_.current = w, l(w));
|
|
2146
|
+
}, [t, u, h, s, l]), E(() => {
|
|
2197
2147
|
if (e.auth)
|
|
2198
|
-
return e.auth.onAuthChange((w,
|
|
2199
|
-
}, [e.auth]),
|
|
2148
|
+
return e.auth.onAuthChange((w, f) => k(f));
|
|
2149
|
+
}, [e.auth]), E(() => {
|
|
2200
2150
|
if (typeof e.onBootstrapChange == "function")
|
|
2201
2151
|
return e.onBootstrapChange((w) => {
|
|
2202
|
-
|
|
2203
|
-
(
|
|
2152
|
+
x(
|
|
2153
|
+
(f) => f.status === "ready" ? { status: "ready", data: w } : f
|
|
2204
2154
|
);
|
|
2205
2155
|
});
|
|
2206
|
-
}, [e]),
|
|
2207
|
-
if (!t ||
|
|
2156
|
+
}, [e]), E(() => {
|
|
2157
|
+
if (!t || u.status === "ready" || u.status === "loading") return;
|
|
2208
2158
|
let w = !1;
|
|
2209
|
-
return
|
|
2210
|
-
w || (
|
|
2159
|
+
return x({ status: "loading" }), e.bootstrap().then((f) => {
|
|
2160
|
+
w || (x({ status: "ready", data: f }), n("ready", f), f.user?.has_active_subscription && !d && !i && (n("purchase_completed", {
|
|
2211
2161
|
priceId: null,
|
|
2212
2162
|
sessionId: null,
|
|
2213
2163
|
restored: !0
|
|
2214
|
-
}),
|
|
2215
|
-
}).catch((
|
|
2164
|
+
}), m({ kind: "purchase_success", restored: !0 })));
|
|
2165
|
+
}).catch((f) => {
|
|
2216
2166
|
if (w) return;
|
|
2217
|
-
const
|
|
2218
|
-
|
|
2167
|
+
const C = f instanceof O ? f : new O("unknown", "Failed to load paywall", { cause: f });
|
|
2168
|
+
x({ status: "error", error: C }), n("error", C);
|
|
2219
2169
|
}), () => {
|
|
2220
2170
|
w = !0;
|
|
2221
2171
|
};
|
|
2222
|
-
}, [t, e]),
|
|
2172
|
+
}, [t, e]), Vt(() => {
|
|
2223
2173
|
if (!t) {
|
|
2224
|
-
|
|
2174
|
+
m({ kind: "layout" }), j.current = !1;
|
|
2225
2175
|
return;
|
|
2226
2176
|
}
|
|
2227
|
-
i === "support" ?
|
|
2177
|
+
i === "support" ? m({ kind: "support", origin: "standalone" }) : i === "auth" && m({ kind: "auth_gate", origin: "standalone" });
|
|
2228
2178
|
}, [t, i]);
|
|
2229
|
-
const
|
|
2179
|
+
const S = async (w) => {
|
|
2230
2180
|
try {
|
|
2231
|
-
const
|
|
2181
|
+
const f = await e.createCheckout({
|
|
2232
2182
|
priceId: w,
|
|
2233
|
-
ignoreActivePurchase:
|
|
2183
|
+
ignoreActivePurchase: d === !0
|
|
2234
2184
|
});
|
|
2235
|
-
if (
|
|
2236
|
-
const
|
|
2237
|
-
if (
|
|
2185
|
+
if (n("checkout_started", { priceId: w, url: f.url, acquiring: f.acquiring }), typeof window > "u" || !f.url) return;
|
|
2186
|
+
const C = window.open(f.url, "_blank");
|
|
2187
|
+
if (C) {
|
|
2238
2188
|
try {
|
|
2239
|
-
|
|
2189
|
+
C.opener = null;
|
|
2240
2190
|
} catch {
|
|
2241
2191
|
}
|
|
2242
|
-
|
|
2192
|
+
m({ kind: "awaiting_payment", priceId: w, url: f.url });
|
|
2243
2193
|
} else
|
|
2244
|
-
|
|
2245
|
-
} catch (
|
|
2246
|
-
if (
|
|
2194
|
+
m({ kind: "popup_blocked", priceId: w, url: f.url });
|
|
2195
|
+
} catch (f) {
|
|
2196
|
+
if (f instanceof O && f.code === "already_purchased") {
|
|
2247
2197
|
try {
|
|
2248
2198
|
await e.getUser({ force: !0 });
|
|
2249
2199
|
} catch {
|
|
2250
2200
|
}
|
|
2251
|
-
|
|
2201
|
+
n("purchase_completed", { priceId: w, sessionId: null, restored: !0 }), m({ kind: "purchase_success", restored: !0 });
|
|
2252
2202
|
return;
|
|
2253
2203
|
}
|
|
2254
|
-
const
|
|
2255
|
-
|
|
2204
|
+
const C = f instanceof O ? f : new O("checkout_failed", "Checkout failed", { cause: f });
|
|
2205
|
+
n("error", C), m({ kind: "layout" });
|
|
2256
2206
|
}
|
|
2257
|
-
},
|
|
2207
|
+
}, A = (w, f) => {
|
|
2258
2208
|
if (typeof window > "u") return;
|
|
2259
|
-
const
|
|
2260
|
-
if (
|
|
2209
|
+
const C = window.open(f, "_blank");
|
|
2210
|
+
if (C) {
|
|
2261
2211
|
try {
|
|
2262
|
-
|
|
2212
|
+
C.opener = null;
|
|
2263
2213
|
} catch {
|
|
2264
2214
|
}
|
|
2265
|
-
|
|
2215
|
+
m({ kind: "awaiting_payment", priceId: w, url: f });
|
|
2266
2216
|
}
|
|
2267
2217
|
};
|
|
2268
|
-
|
|
2269
|
-
if (
|
|
2270
|
-
|
|
2271
|
-
const w =
|
|
2272
|
-
|
|
2273
|
-
if (!
|
|
2218
|
+
E(() => {
|
|
2219
|
+
if (h.kind !== "auth_gate" || !y || y.user.is_anonymous || j.current) return;
|
|
2220
|
+
j.current = !0;
|
|
2221
|
+
const w = h.pendingCheckout, f = h.origin;
|
|
2222
|
+
m({ kind: "verifying" }), (async () => {
|
|
2223
|
+
if (!d)
|
|
2274
2224
|
try {
|
|
2275
2225
|
if ((await e.getUser({ force: !0 })).has_active_subscription) {
|
|
2276
|
-
|
|
2226
|
+
n("purchase_completed", {
|
|
2277
2227
|
priceId: w?.priceId ?? null,
|
|
2278
2228
|
sessionId: null,
|
|
2279
2229
|
restored: !0
|
|
2280
|
-
}),
|
|
2230
|
+
}), m({ kind: "purchase_success", restored: !0 });
|
|
2281
2231
|
return;
|
|
2282
2232
|
}
|
|
2283
2233
|
} catch {
|
|
2284
2234
|
}
|
|
2285
2235
|
if (!w) {
|
|
2286
|
-
|
|
2236
|
+
f === "standalone" ? r() : m({ kind: "layout" });
|
|
2287
2237
|
return;
|
|
2288
2238
|
}
|
|
2289
|
-
await
|
|
2239
|
+
await S(w.priceId);
|
|
2290
2240
|
})().finally(() => {
|
|
2291
|
-
|
|
2241
|
+
j.current = !1;
|
|
2292
2242
|
});
|
|
2293
|
-
}, [
|
|
2294
|
-
const
|
|
2243
|
+
}, [y, h]);
|
|
2244
|
+
const R = async (w, f) => {
|
|
2295
2245
|
if (w === "close") {
|
|
2296
2246
|
r();
|
|
2297
2247
|
return;
|
|
2298
2248
|
}
|
|
2299
2249
|
if (w === "price_selected") {
|
|
2300
|
-
|
|
2250
|
+
n("price_selected", f);
|
|
2301
2251
|
return;
|
|
2302
2252
|
}
|
|
2303
2253
|
if (w === "restore") {
|
|
2304
2254
|
if (!e.auth) return;
|
|
2305
|
-
const
|
|
2306
|
-
if (
|
|
2307
|
-
|
|
2255
|
+
const C = e.auth.getCachedSession();
|
|
2256
|
+
if (C && !C.user.is_anonymous) return;
|
|
2257
|
+
m({ kind: "auth_gate", intent: "restore" });
|
|
2308
2258
|
return;
|
|
2309
2259
|
}
|
|
2310
2260
|
if (w === "support") {
|
|
2311
|
-
|
|
2261
|
+
m({ kind: "support", origin: "layout" });
|
|
2312
2262
|
return;
|
|
2313
2263
|
}
|
|
2314
|
-
if (w === "checkout" &&
|
|
2315
|
-
const
|
|
2316
|
-
if (!
|
|
2317
|
-
|
|
2264
|
+
if (w === "checkout" && u.status === "ready") {
|
|
2265
|
+
const C = f?.priceId;
|
|
2266
|
+
if (!C) {
|
|
2267
|
+
n("error", new O("no_price", "No price selected"));
|
|
2318
2268
|
return;
|
|
2319
2269
|
}
|
|
2320
|
-
const
|
|
2321
|
-
if (
|
|
2322
|
-
|
|
2270
|
+
const K = u.data.settings.checkout_mode ?? "guest", I = e.auth?.getCachedSession() ?? null, L = !!I && !I.user.is_anonymous;
|
|
2271
|
+
if (K === "preauth" && !!e.auth && !L) {
|
|
2272
|
+
m({ kind: "auth_gate", pendingCheckout: { priceId: C } });
|
|
2323
2273
|
return;
|
|
2324
2274
|
}
|
|
2325
|
-
await
|
|
2275
|
+
await S(C);
|
|
2326
2276
|
}
|
|
2327
|
-
},
|
|
2277
|
+
}, P = u.status === "ready" ? u.data.settings.brand_color : null, z = u.status === "ready" ? u.data.settings.allow_close !== !1 : !0, B = h.kind === "layout" && u.status === "ready" ? jt(u.data.offers) : null, T = B ? /* @__PURE__ */ a(ye, { offer: B }) : null, M = {
|
|
2328
2278
|
type: "auth_panel",
|
|
2329
2279
|
// Заголовок не задаём — AuthGate сам решит по intent'у (restore →
|
|
2330
2280
|
// "Restore Purchases", остальные → дефолтный "Welcome back!").
|
|
@@ -2333,75 +2283,67 @@ function tr({
|
|
|
2333
2283
|
// Не скрываем при наличии сессии — auto-resume useEffect отрабатывает быстрее,
|
|
2334
2284
|
// чем хотим показывать "Signed in as ..." промежуточным экраном.
|
|
2335
2285
|
hide_when_authenticated: !1,
|
|
2336
|
-
providers:
|
|
2337
|
-
},
|
|
2286
|
+
providers: u.status === "ready" ? u.data.settings.auth_providers : void 0
|
|
2287
|
+
}, D = h.kind === "support" ? /* @__PURE__ */ a(
|
|
2338
2288
|
_e,
|
|
2339
2289
|
{
|
|
2340
2290
|
client: e,
|
|
2341
|
-
authSession:
|
|
2342
|
-
origin:
|
|
2291
|
+
authSession: y,
|
|
2292
|
+
origin: h.origin,
|
|
2343
2293
|
onBack: () => {
|
|
2344
|
-
|
|
2294
|
+
h.origin === "standalone" ? r() : m({ kind: "layout" });
|
|
2345
2295
|
}
|
|
2346
2296
|
}
|
|
2347
|
-
) : null,
|
|
2348
|
-
return /* @__PURE__ */
|
|
2297
|
+
) : null, N = h.kind === "auth_gate" && h.origin !== "standalone" || h.kind === "support", Z = u.status === "ready" ? u.data : null;
|
|
2298
|
+
return /* @__PURE__ */ a(te, { bootstrap: Z, forceLocale: p, children: /* @__PURE__ */ a(
|
|
2349
2299
|
ee,
|
|
2350
2300
|
{
|
|
2351
2301
|
open: t,
|
|
2352
2302
|
onClose: r,
|
|
2353
|
-
brandColor:
|
|
2354
|
-
topBanner:
|
|
2355
|
-
allowClose:
|
|
2356
|
-
hideCloseButton:
|
|
2357
|
-
inline:
|
|
2303
|
+
brandColor: P,
|
|
2304
|
+
topBanner: T,
|
|
2305
|
+
allowClose: z,
|
|
2306
|
+
hideCloseButton: N,
|
|
2307
|
+
inline: g,
|
|
2358
2308
|
labelledBy: "pw-title",
|
|
2359
|
-
children:
|
|
2360
|
-
|
|
2309
|
+
children: s ? /* @__PURE__ */ a(_t, { onContinue: r }) : h.kind === "purchase_success" ? /* @__PURE__ */ a(_t, { restored: h.restored, onContinue: r }) : D || (u.status === "loading" || u.status === "idle" || h.kind === "verifying" ? /* @__PURE__ */ a(er, { verifying: h.kind === "verifying" }) : u.status === "error" ? /* @__PURE__ */ a(rr, { message: u.error.message }) : h.kind === "auth_gate" && e.auth ? /* @__PURE__ */ a(
|
|
2310
|
+
we,
|
|
2361
2311
|
{
|
|
2362
|
-
block:
|
|
2363
|
-
bootstrap:
|
|
2312
|
+
block: M,
|
|
2313
|
+
bootstrap: u.data,
|
|
2364
2314
|
auth: e.auth,
|
|
2365
|
-
authSession:
|
|
2366
|
-
showBack:
|
|
2367
|
-
intent:
|
|
2315
|
+
authSession: y,
|
|
2316
|
+
showBack: h.origin !== "standalone",
|
|
2317
|
+
intent: h.intent ?? (h.origin === "standalone" ? "standalone" : "preauth"),
|
|
2318
|
+
initialMode: h.origin === "standalone" ? o : void 0,
|
|
2368
2319
|
onBack: () => {
|
|
2369
|
-
|
|
2320
|
+
h.origin === "standalone" ? r() : m({ kind: "layout" });
|
|
2370
2321
|
}
|
|
2371
2322
|
}
|
|
2372
|
-
) :
|
|
2373
|
-
me,
|
|
2374
|
-
{
|
|
2375
|
-
auth: e.auth,
|
|
2376
|
-
onSuccess: () => {
|
|
2377
|
-
g.origin === "standalone" ? r() : f({ kind: "layout" });
|
|
2378
|
-
},
|
|
2379
|
-
onBack: g.origin === "standalone" ? void 0 : () => f({ kind: "layout" })
|
|
2380
|
-
}
|
|
2381
|
-
) : g.kind === "awaiting_payment" ? /* @__PURE__ */ n(
|
|
2323
|
+
) : h.kind === "awaiting_payment" ? /* @__PURE__ */ a(
|
|
2382
2324
|
nr,
|
|
2383
2325
|
{
|
|
2384
2326
|
client: e,
|
|
2385
|
-
onBack: () =>
|
|
2327
|
+
onBack: () => m({ kind: "layout" }),
|
|
2386
2328
|
onReopen: () => {
|
|
2387
2329
|
if (typeof window > "u") return;
|
|
2388
|
-
const w = window.open(
|
|
2330
|
+
const w = window.open(h.url, "_blank");
|
|
2389
2331
|
if (w)
|
|
2390
2332
|
try {
|
|
2391
2333
|
w.opener = null;
|
|
2392
2334
|
} catch {
|
|
2393
2335
|
}
|
|
2394
2336
|
},
|
|
2395
|
-
onRetry: () =>
|
|
2337
|
+
onRetry: () => S(h.priceId)
|
|
2396
2338
|
}
|
|
2397
|
-
) :
|
|
2339
|
+
) : h.kind === "popup_blocked" ? /* @__PURE__ */ a(ir, { onReopen: () => A(h.priceId, h.url) }) : /* @__PURE__ */ a(
|
|
2398
2340
|
Xe,
|
|
2399
2341
|
{
|
|
2400
|
-
layout:
|
|
2401
|
-
bootstrap:
|
|
2402
|
-
onAction:
|
|
2342
|
+
layout: u.data.layout,
|
|
2343
|
+
bootstrap: u.data,
|
|
2344
|
+
onAction: R,
|
|
2403
2345
|
auth: e.auth,
|
|
2404
|
-
authSession:
|
|
2346
|
+
authSession: y
|
|
2405
2347
|
}
|
|
2406
2348
|
))
|
|
2407
2349
|
}
|
|
@@ -2410,39 +2352,39 @@ function tr({
|
|
|
2410
2352
|
function er({ verifying: e }) {
|
|
2411
2353
|
const { t } = v();
|
|
2412
2354
|
return /* @__PURE__ */ c("div", { class: "flex flex-col items-center justify-center gap-3 py-12", children: [
|
|
2413
|
-
/* @__PURE__ */
|
|
2414
|
-
/* @__PURE__ */
|
|
2355
|
+
/* @__PURE__ */ a("span", { class: "inline-block h-7 w-7 animate-spin rounded-full border-[2.5px] border-gray-200 border-t-[var(--pw-accent)]" }),
|
|
2356
|
+
/* @__PURE__ */ a("span", { class: "text-xs font-medium tracking-wide text-gray-500", children: e ? t("modal.verifying_subscription", "Checking your subscription…") : t("modal.loading", "Loading…") })
|
|
2415
2357
|
] });
|
|
2416
2358
|
}
|
|
2417
2359
|
function rr({ message: e }) {
|
|
2418
2360
|
const { t } = v();
|
|
2419
2361
|
return /* @__PURE__ */ c("div", { class: "flex flex-col items-center gap-2 py-8 text-center", children: [
|
|
2420
|
-
/* @__PURE__ */
|
|
2421
|
-
/* @__PURE__ */
|
|
2422
|
-
/* @__PURE__ */
|
|
2362
|
+
/* @__PURE__ */ a("div", { class: "flex h-11 w-11 items-center justify-center rounded-full bg-red-50", children: /* @__PURE__ */ c("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
2363
|
+
/* @__PURE__ */ a("path", { d: "M10 6v5M10 14h.01", stroke: "#dc2626", "stroke-width": "2", "stroke-linecap": "round" }),
|
|
2364
|
+
/* @__PURE__ */ a("circle", { cx: "10", cy: "10", r: "8", stroke: "#dc2626", "stroke-width": "1.75" })
|
|
2423
2365
|
] }) }),
|
|
2424
|
-
/* @__PURE__ */
|
|
2425
|
-
/* @__PURE__ */
|
|
2366
|
+
/* @__PURE__ */ a("p", { class: "text-sm font-semibold tracking-tight text-gray-900", children: t("modal.error_generic", "Something went wrong") }),
|
|
2367
|
+
/* @__PURE__ */ a("p", { class: "text-xs leading-relaxed text-gray-500", children: e })
|
|
2426
2368
|
] });
|
|
2427
2369
|
}
|
|
2428
2370
|
function ir({ onReopen: e }) {
|
|
2429
2371
|
const { t } = v();
|
|
2430
2372
|
return /* @__PURE__ */ c("div", { class: "flex flex-col items-center gap-3 py-8 text-center", children: [
|
|
2431
|
-
/* @__PURE__ */
|
|
2373
|
+
/* @__PURE__ */ a(
|
|
2432
2374
|
"div",
|
|
2433
2375
|
{
|
|
2434
2376
|
class: "flex h-11 w-11 items-center justify-center rounded-full",
|
|
2435
2377
|
style: { background: "color-mix(in srgb, var(--pw-accent) 12%, white)", color: "var(--pw-accent)" },
|
|
2436
2378
|
"aria-hidden": "true",
|
|
2437
2379
|
children: /* @__PURE__ */ c("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: [
|
|
2438
|
-
/* @__PURE__ */
|
|
2439
|
-
/* @__PURE__ */
|
|
2380
|
+
/* @__PURE__ */ a("path", { d: "M4 5h12v10H4z", stroke: "currentColor", "stroke-width": "1.75", "stroke-linejoin": "round" }),
|
|
2381
|
+
/* @__PURE__ */ a("path", { d: "M7 9l3 3 4-5", stroke: "currentColor", "stroke-width": "1.75", "stroke-linecap": "round", "stroke-linejoin": "round" })
|
|
2440
2382
|
] })
|
|
2441
2383
|
}
|
|
2442
2384
|
),
|
|
2443
|
-
/* @__PURE__ */
|
|
2444
|
-
/* @__PURE__ */
|
|
2445
|
-
/* @__PURE__ */
|
|
2385
|
+
/* @__PURE__ */ a("p", { class: "text-sm font-semibold tracking-tight text-gray-900", children: t("payment.popup_blocked_title", "Allow popups to continue") }),
|
|
2386
|
+
/* @__PURE__ */ a("p", { class: "max-w-[18rem] text-xs leading-relaxed text-gray-500", children: t("payment.popup_blocked_message", "Your browser blocked the checkout tab. Click below to open it.") }),
|
|
2387
|
+
/* @__PURE__ */ a(
|
|
2446
2388
|
"button",
|
|
2447
2389
|
{
|
|
2448
2390
|
type: "button",
|
|
@@ -2461,32 +2403,32 @@ function nr({
|
|
|
2461
2403
|
client: e,
|
|
2462
2404
|
onBack: t,
|
|
2463
2405
|
onReopen: r,
|
|
2464
|
-
onRetry:
|
|
2406
|
+
onRetry: n
|
|
2465
2407
|
}) {
|
|
2466
|
-
const { t: i } = v(), [o, s] = b(!1), [
|
|
2467
|
-
|
|
2468
|
-
|
|
2408
|
+
const { t: i } = v(), [o, s] = b(!1), [d, l] = b(!1), g = F(null);
|
|
2409
|
+
E(() => () => {
|
|
2410
|
+
g.current !== null && clearTimeout(g.current);
|
|
2469
2411
|
}, []);
|
|
2470
|
-
const
|
|
2412
|
+
const p = async () => {
|
|
2471
2413
|
if (!o) {
|
|
2472
|
-
s(!0),
|
|
2414
|
+
s(!0), l(!1);
|
|
2473
2415
|
try {
|
|
2474
2416
|
if ((await e.getUser({ force: !0 })).has_active_subscription) {
|
|
2475
2417
|
typeof window < "u" && window.postMessage({ type: "paywall_purchase" }, "*");
|
|
2476
2418
|
return;
|
|
2477
2419
|
}
|
|
2478
|
-
|
|
2479
|
-
|
|
2420
|
+
l(!0), g.current !== null && clearTimeout(g.current), g.current = setTimeout(() => {
|
|
2421
|
+
l(!1), g.current = null;
|
|
2480
2422
|
}, 5e3);
|
|
2481
2423
|
} catch {
|
|
2482
|
-
|
|
2424
|
+
l(!0);
|
|
2483
2425
|
} finally {
|
|
2484
2426
|
s(!1);
|
|
2485
2427
|
}
|
|
2486
2428
|
}
|
|
2487
2429
|
};
|
|
2488
|
-
return /* @__PURE__ */ c("div", { class: "flex flex-col gap-3", children: [
|
|
2489
|
-
/* @__PURE__ */
|
|
2430
|
+
return /* @__PURE__ */ c("div", { class: "flex flex-col gap-3 px-6 pb-6 pt-4 sm:px-8 sm:pb-8 sm:pt-5", children: [
|
|
2431
|
+
/* @__PURE__ */ a(
|
|
2490
2432
|
"button",
|
|
2491
2433
|
{
|
|
2492
2434
|
type: "button",
|
|
@@ -2497,7 +2439,7 @@ function nr({
|
|
|
2497
2439
|
),
|
|
2498
2440
|
/* @__PURE__ */ c("div", { class: "flex flex-col items-center gap-3 py-6 text-center", children: [
|
|
2499
2441
|
/* @__PURE__ */ c("div", { class: "relative flex h-12 w-12 items-center justify-center", children: [
|
|
2500
|
-
/* @__PURE__ */
|
|
2442
|
+
/* @__PURE__ */ a(
|
|
2501
2443
|
"span",
|
|
2502
2444
|
{
|
|
2503
2445
|
class: "absolute inset-0 animate-ping rounded-full opacity-40",
|
|
@@ -2505,18 +2447,18 @@ function nr({
|
|
|
2505
2447
|
"aria-hidden": "true"
|
|
2506
2448
|
}
|
|
2507
2449
|
),
|
|
2508
|
-
/* @__PURE__ */
|
|
2450
|
+
/* @__PURE__ */ a("span", { class: "relative inline-block h-7 w-7 animate-spin rounded-full border-[2.5px] border-gray-200 border-t-[var(--pw-accent)]" })
|
|
2509
2451
|
] }),
|
|
2510
|
-
/* @__PURE__ */
|
|
2511
|
-
/* @__PURE__ */
|
|
2452
|
+
/* @__PURE__ */ a("p", { class: "text-sm font-semibold tracking-tight text-gray-900", children: i("payment.awaiting_title", "Complete payment in the new tab") }),
|
|
2453
|
+
/* @__PURE__ */ a("p", { class: "max-w-[20rem] text-xs leading-relaxed text-gray-500", children: i(
|
|
2512
2454
|
"payment.awaiting_subtitle",
|
|
2513
2455
|
"We'll detect your payment automatically — or click below once you're done."
|
|
2514
2456
|
) }),
|
|
2515
|
-
/* @__PURE__ */
|
|
2457
|
+
/* @__PURE__ */ a(
|
|
2516
2458
|
"button",
|
|
2517
2459
|
{
|
|
2518
2460
|
type: "button",
|
|
2519
|
-
onClick:
|
|
2461
|
+
onClick: p,
|
|
2520
2462
|
disabled: o,
|
|
2521
2463
|
class: "mt-1 rounded-xl px-5 py-2.5 text-sm font-semibold text-white transition-all hover:-translate-y-px hover:brightness-105 disabled:cursor-not-allowed disabled:opacity-60 disabled:hover:translate-y-0 disabled:hover:brightness-100 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--pw-accent)]",
|
|
2522
2464
|
style: {
|
|
@@ -2526,11 +2468,11 @@ function nr({
|
|
|
2526
2468
|
children: o ? i("payment.checking", "Checking…") : i("payment.ive_paid", "I've paid")
|
|
2527
2469
|
}
|
|
2528
2470
|
),
|
|
2529
|
-
|
|
2471
|
+
d ? /* @__PURE__ */ a("p", { class: "text-xs leading-relaxed text-gray-500", children: i("payment.still_processing", "Payment is still being processed. Please try again in a moment.") }) : null
|
|
2530
2472
|
] }),
|
|
2531
2473
|
/* @__PURE__ */ c("div", { class: "rounded-2xl border border-gray-200 bg-gray-50/60 p-3.5", children: [
|
|
2532
|
-
/* @__PURE__ */
|
|
2533
|
-
/* @__PURE__ */
|
|
2474
|
+
/* @__PURE__ */ a("p", { class: "text-xs leading-relaxed text-gray-600", children: i("payment.popup_help_text", "Checkout window didn't open or got blocked? Click here to open it again.") }),
|
|
2475
|
+
/* @__PURE__ */ a(
|
|
2534
2476
|
"button",
|
|
2535
2477
|
{
|
|
2536
2478
|
type: "button",
|
|
@@ -2540,11 +2482,11 @@ function nr({
|
|
|
2540
2482
|
}
|
|
2541
2483
|
)
|
|
2542
2484
|
] }),
|
|
2543
|
-
/* @__PURE__ */
|
|
2485
|
+
/* @__PURE__ */ a(
|
|
2544
2486
|
"button",
|
|
2545
2487
|
{
|
|
2546
2488
|
type: "button",
|
|
2547
|
-
onClick:
|
|
2489
|
+
onClick: n,
|
|
2548
2490
|
class: "self-center rounded-md px-2 py-1 text-xs text-gray-500 underline-offset-2 hover:text-gray-900 hover:underline focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
|
|
2549
2491
|
children: i("payment.tab_closed_retry", "Tab closed? Try again")
|
|
2550
2492
|
}
|
|
@@ -2557,7 +2499,7 @@ function _t({
|
|
|
2557
2499
|
}) {
|
|
2558
2500
|
const { t: r } = v();
|
|
2559
2501
|
return /* @__PURE__ */ c("div", { class: "flex flex-col items-center gap-3 py-8 text-center", children: [
|
|
2560
|
-
/* @__PURE__ */
|
|
2502
|
+
/* @__PURE__ */ a(
|
|
2561
2503
|
"div",
|
|
2562
2504
|
{
|
|
2563
2505
|
class: "flex h-14 w-14 items-center justify-center rounded-full ring-8",
|
|
@@ -2568,7 +2510,7 @@ function _t({
|
|
|
2568
2510
|
boxShadow: "0 0 0 8px rgba(74,222,128,0.12), 0 8px 20px -6px rgba(22,163,74,0.45)"
|
|
2569
2511
|
},
|
|
2570
2512
|
"aria-hidden": "true",
|
|
2571
|
-
children: /* @__PURE__ */
|
|
2513
|
+
children: /* @__PURE__ */ a("svg", { width: "28", height: "28", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ a(
|
|
2572
2514
|
"path",
|
|
2573
2515
|
{
|
|
2574
2516
|
d: "M5 13l4 4L19 7",
|
|
@@ -2580,12 +2522,12 @@ function _t({
|
|
|
2580
2522
|
) })
|
|
2581
2523
|
}
|
|
2582
2524
|
),
|
|
2583
|
-
/* @__PURE__ */
|
|
2584
|
-
/* @__PURE__ */
|
|
2525
|
+
/* @__PURE__ */ a("p", { id: "pw-title", class: "mt-1 text-lg font-semibold tracking-tight text-gray-900", children: t ? r("modal.purchase_restored_title", "Subscription restored") : r("modal.purchase_success_title", "Payment received") }),
|
|
2526
|
+
/* @__PURE__ */ a("p", { class: "text-sm leading-relaxed text-gray-500", children: t ? r(
|
|
2585
2527
|
"modal.purchase_restored_subtitle",
|
|
2586
2528
|
"Welcome back — your subscription is already active."
|
|
2587
2529
|
) : r("modal.purchase_success_subtitle", "Your subscription is now active.") }),
|
|
2588
|
-
/* @__PURE__ */
|
|
2530
|
+
/* @__PURE__ */ a(
|
|
2589
2531
|
"button",
|
|
2590
2532
|
{
|
|
2591
2533
|
type: "button",
|
|
@@ -2652,16 +2594,16 @@ class lr {
|
|
|
2652
2594
|
function cr() {
|
|
2653
2595
|
return !(typeof document > "u" || typeof window > "u" || typeof location < "u" && location.protocol === "chrome-extension:");
|
|
2654
2596
|
}
|
|
2655
|
-
const
|
|
2597
|
+
const at = { open: !1, view: null, error: null }, $ = {
|
|
2656
2598
|
status: "paywall_status",
|
|
2657
2599
|
priceId: "paywall_price_id",
|
|
2658
2600
|
sessionId: "paywall_session_id"
|
|
2659
2601
|
};
|
|
2660
2602
|
class yr {
|
|
2661
2603
|
constructor(t) {
|
|
2662
|
-
this.handle = null, this.isOpen = !1, this.listeners = /* @__PURE__ */ new Map(), this.userUnsub = null, this.authUnsub = null, this.watcher = null, this.tracker = null, this.purchased = !1, this.trialStore = null, this.trialStoreConfig = null, this.lastTrialStatus = null, this.trialExpiredFired = !1, this.lastVisibility = null, this.currentState =
|
|
2663
|
-
const { auth: r, ownsAuth:
|
|
2664
|
-
this.auth = r, this.ownsAuth =
|
|
2604
|
+
this.handle = null, this.isOpen = !1, this.listeners = /* @__PURE__ */ new Map(), this.userUnsub = null, this.authUnsub = null, this.watcher = null, this.tracker = null, this.purchased = !1, this.trialStore = null, this.trialStoreConfig = null, this.lastTrialStatus = null, this.trialExpiredFired = !1, this.lastVisibility = null, this.currentState = at, this.stateListeners = /* @__PURE__ */ new Set();
|
|
2605
|
+
const { auth: r, ownsAuth: n } = dr(t);
|
|
2606
|
+
this.auth = r, this.ownsAuth = n, this.billing = t.client ?? new Ut({ ...t, auth: this.auth }), this.host = t.host, this.shadowMode = t.shadowMode ?? "closed", this.mountThenLoad = t.mountThenLoad ?? !0, this.inline = t.inline === !0, this.forceLocale = t.locale ?? null, this.userUnsub = this.billing.onUserChange((i) => {
|
|
2665
2607
|
this.emit("userChange", i);
|
|
2666
2608
|
}), this.auth && (this.authUnsub = this.auth.onAuthChange((i, o) => {
|
|
2667
2609
|
this.emit("authChange", { event: i, session: o });
|
|
@@ -2671,9 +2613,9 @@ class yr {
|
|
|
2671
2613
|
if (t === !1) return;
|
|
2672
2614
|
const r = typeof t == "object" && t !== null ? t : {};
|
|
2673
2615
|
if (r.enabled === !1) return;
|
|
2674
|
-
const
|
|
2675
|
-
this.tracker = new
|
|
2676
|
-
endpoint:
|
|
2616
|
+
const n = r.endpoint ?? `${this.billing.apiOrigin}/api/v1/paywall/${this.billing.paywallId}/events`;
|
|
2617
|
+
this.tracker = new Dt({
|
|
2618
|
+
endpoint: n,
|
|
2677
2619
|
paywallId: this.billing.paywallId,
|
|
2678
2620
|
capabilities: this.billing.capabilities,
|
|
2679
2621
|
getVisitorId: () => this.billing.getVisitorId(),
|
|
@@ -2772,17 +2714,17 @@ class yr {
|
|
|
2772
2714
|
r !== this.forceLocale && (this.forceLocale = r, this.handle && this.handle.update({ locale: r }));
|
|
2773
2715
|
}
|
|
2774
2716
|
on(t, r) {
|
|
2775
|
-
let
|
|
2776
|
-
return
|
|
2717
|
+
let n = this.listeners.get(t);
|
|
2718
|
+
return n || (n = /* @__PURE__ */ new Set(), this.listeners.set(t, n)), n.add(r), () => n.delete(r);
|
|
2777
2719
|
}
|
|
2778
2720
|
off(t, r) {
|
|
2779
2721
|
this.listeners.get(t)?.delete(r);
|
|
2780
2722
|
}
|
|
2781
2723
|
emit(t, ...r) {
|
|
2782
|
-
const
|
|
2783
|
-
if (!
|
|
2724
|
+
const n = this.listeners.get(t);
|
|
2725
|
+
if (!n) return;
|
|
2784
2726
|
const i = r[0];
|
|
2785
|
-
for (const o of
|
|
2727
|
+
for (const o of n)
|
|
2786
2728
|
try {
|
|
2787
2729
|
o(i);
|
|
2788
2730
|
} catch (s) {
|
|
@@ -2839,43 +2781,63 @@ class yr {
|
|
|
2839
2781
|
this.auth && this.openInternal("auth", { ...t, skipTrial: !0 });
|
|
2840
2782
|
}
|
|
2841
2783
|
/**
|
|
2842
|
-
*
|
|
2843
|
-
* `
|
|
2844
|
-
*
|
|
2845
|
-
*
|
|
2846
|
-
*
|
|
2847
|
-
*
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
|
|
2851
|
-
|
|
2852
|
-
|
|
2784
|
+
* Шорткат над `openAuth()` — открывает модалку сразу на signin-форме.
|
|
2785
|
+
* Эквивалент `openAuth()` (signin — дефолт). Существует для симметрии с
|
|
2786
|
+
* `openSignup()` и читаемости host-кода:
|
|
2787
|
+
* - `paywall.openSignin()` — «вход в существующий аккаунт»
|
|
2788
|
+
* - `paywall.openSignup()` — «новая регистрация»
|
|
2789
|
+
* Без managed-auth — no-op.
|
|
2790
|
+
*/
|
|
2791
|
+
openSignin(t = {}) {
|
|
2792
|
+
this.auth && this.openInternal("auth", { ...t, skipTrial: !0, authMode: "signin" });
|
|
2793
|
+
}
|
|
2794
|
+
/**
|
|
2795
|
+
* Открывает модалку с auth-gate сразу в режиме регистрации (signup-mode
|
|
2796
|
+
* AuthPanel'а — email/password/repeat). Если в paywall layout админ
|
|
2797
|
+
* отключил allow_signup, AuthPanel игнорит mode и стартует с signin —
|
|
2798
|
+
* соблюдается admin-конфиг.
|
|
2799
|
+
* Без managed-auth — no-op.
|
|
2800
|
+
*/
|
|
2801
|
+
openSignup(t = {}) {
|
|
2802
|
+
this.auth && this.openInternal("auth", { ...t, skipTrial: !0, authMode: "signup" });
|
|
2803
|
+
}
|
|
2804
|
+
/**
|
|
2805
|
+
* Headless anonymous signin без открытия модалки. Внутри:
|
|
2806
|
+
* idempotent (если уже анон — instant return) → resume через сохранённый
|
|
2807
|
+
* refresh_token → fresh /auth/anonymous/signin. Дедуплицирует
|
|
2808
|
+
* параллельные вызовы внутри AuthClient'а.
|
|
2853
2809
|
*
|
|
2854
|
-
*
|
|
2855
|
-
*
|
|
2856
|
-
*
|
|
2810
|
+
* Удобно для host-кнопок типа «Continue as guest» — host сам управляет
|
|
2811
|
+
* loading-стейтом на своей кнопке, без полупустой модалки со спиннером.
|
|
2812
|
+
* Без managed-auth — резолвится rejected promise'ом (нет AuthClient'а
|
|
2813
|
+
* чтобы делать signin).
|
|
2857
2814
|
*/
|
|
2858
|
-
|
|
2859
|
-
this.auth
|
|
2815
|
+
signInAnonymously() {
|
|
2816
|
+
return this.auth ? this.auth.signInAnonymously() : Promise.reject(
|
|
2817
|
+
new O(
|
|
2818
|
+
"invalid_config",
|
|
2819
|
+
"signInAnonymously requires managed-auth. Pass `auth: true` to PaywallUI."
|
|
2820
|
+
)
|
|
2821
|
+
);
|
|
2860
2822
|
}
|
|
2861
2823
|
openInternal(t, r) {
|
|
2862
2824
|
r.identity && this.billing.setIdentity(r.identity), this.purchased = !1;
|
|
2863
|
-
const
|
|
2864
|
-
if (
|
|
2865
|
-
this.mountAndShow(t, { renew: o });
|
|
2825
|
+
const n = r.skipTrial === !0 || t === "support", i = r.skipVisibility === !0 || t === "support" || t === "auth", o = r.renew === !0;
|
|
2826
|
+
if (n && i) {
|
|
2827
|
+
this.mountAndShow(t, { renew: o, authMode: r.authMode });
|
|
2866
2828
|
return;
|
|
2867
2829
|
}
|
|
2868
2830
|
const s = this.billing.getCachedBootstrap();
|
|
2869
2831
|
if (s) {
|
|
2870
|
-
this.runOpenGates(t, s, { skipTrial:
|
|
2832
|
+
this.runOpenGates(t, s, { skipTrial: n, skipVisibility: i, renew: o });
|
|
2871
2833
|
return;
|
|
2872
2834
|
}
|
|
2873
2835
|
if (this.mountThenLoad) {
|
|
2874
|
-
this.mountAndShow(t, { renew: o }), this.billing.bootstrap().then((
|
|
2836
|
+
this.mountAndShow(t, { renew: o }), this.billing.bootstrap().then((d) => this.runDelayedGates(d, { skipTrial: n, skipVisibility: i })).catch(() => {
|
|
2875
2837
|
});
|
|
2876
2838
|
return;
|
|
2877
2839
|
}
|
|
2878
|
-
this.billing.bootstrap().then((
|
|
2840
|
+
this.billing.bootstrap().then((d) => this.runOpenGates(t, d, { skipTrial: n, skipVisibility: i, renew: o })).catch(() => {
|
|
2879
2841
|
this.mountAndShow(t, { renew: o });
|
|
2880
2842
|
});
|
|
2881
2843
|
}
|
|
@@ -2892,9 +2854,9 @@ class yr {
|
|
|
2892
2854
|
}
|
|
2893
2855
|
}
|
|
2894
2856
|
if (r.skipTrial) return;
|
|
2895
|
-
const
|
|
2896
|
-
if (!
|
|
2897
|
-
const i = this.ensureTrialStore(
|
|
2857
|
+
const n = t.settings.trial;
|
|
2858
|
+
if (!n) return;
|
|
2859
|
+
const i = this.ensureTrialStore(n);
|
|
2898
2860
|
i.check().then(async (o) => {
|
|
2899
2861
|
if (this.isOpen && (this.lastTrialStatus = o, o.mode !== "none")) {
|
|
2900
2862
|
if (o.blocked) {
|
|
@@ -2913,40 +2875,40 @@ class yr {
|
|
|
2913
2875
|
// вести trial-стейт «осталось N показов» под юзером, который вообще не
|
|
2914
2876
|
// должен увидеть пейвол по таргетингу — бессмысленно: при возврате в
|
|
2915
2877
|
// правильную страну он окажется со «слипшимся» триал-счётчиком.
|
|
2916
|
-
runOpenGates(t, r,
|
|
2917
|
-
if (!
|
|
2878
|
+
runOpenGates(t, r, n) {
|
|
2879
|
+
if (!n.skipVisibility) {
|
|
2918
2880
|
const i = r.settings.visibility;
|
|
2919
2881
|
if (i && (this.lastVisibility = i, !i.visible)) {
|
|
2920
2882
|
this.emit("visibility_blocked", i);
|
|
2921
2883
|
return;
|
|
2922
2884
|
}
|
|
2923
2885
|
}
|
|
2924
|
-
if (
|
|
2925
|
-
this.mountAndShow(t, { renew:
|
|
2886
|
+
if (n.skipTrial) {
|
|
2887
|
+
this.mountAndShow(t, { renew: n.renew });
|
|
2926
2888
|
return;
|
|
2927
2889
|
}
|
|
2928
|
-
this.gateThroughTrial(t, r,
|
|
2890
|
+
this.gateThroughTrial(t, r, n.renew);
|
|
2929
2891
|
}
|
|
2930
|
-
gateThroughTrial(t, r,
|
|
2892
|
+
gateThroughTrial(t, r, n) {
|
|
2931
2893
|
const i = r.settings.trial;
|
|
2932
2894
|
if (!i) {
|
|
2933
|
-
this.mountAndShow(t, { renew:
|
|
2895
|
+
this.mountAndShow(t, { renew: n });
|
|
2934
2896
|
return;
|
|
2935
2897
|
}
|
|
2936
2898
|
const o = this.ensureTrialStore(i);
|
|
2937
2899
|
o.check().then(async (s) => {
|
|
2938
2900
|
if (this.lastTrialStatus = s, s.mode === "none") {
|
|
2939
|
-
this.mountAndShow(t, { renew:
|
|
2901
|
+
this.mountAndShow(t, { renew: n });
|
|
2940
2902
|
return;
|
|
2941
2903
|
}
|
|
2942
2904
|
if (s.blocked) {
|
|
2943
|
-
const
|
|
2944
|
-
this.lastTrialStatus =
|
|
2905
|
+
const d = await o.recordBlock();
|
|
2906
|
+
this.lastTrialStatus = d, this.emit("trial_blocked", d);
|
|
2945
2907
|
return;
|
|
2946
2908
|
}
|
|
2947
|
-
this.trialExpiredFired || (this.trialExpiredFired = !0, this.emit("trial_expired")), this.mountAndShow(t, { renew:
|
|
2909
|
+
this.trialExpiredFired || (this.trialExpiredFired = !0, this.emit("trial_expired")), this.mountAndShow(t, { renew: n });
|
|
2948
2910
|
}).catch((s) => {
|
|
2949
|
-
typeof console < "u" && console.warn("[paywall] trial check failed", s), this.mountAndShow(t, { renew:
|
|
2911
|
+
typeof console < "u" && console.warn("[paywall] trial check failed", s), this.mountAndShow(t, { renew: n });
|
|
2950
2912
|
});
|
|
2951
2913
|
}
|
|
2952
2914
|
ensureTrialStore(t) {
|
|
@@ -2957,9 +2919,15 @@ class yr {
|
|
|
2957
2919
|
return this.trialStore = typeof r == "function" ? r.call(this.billing, t) : qt(this.billing.getStorage(), this.billing.paywallId, t), this.trialStore;
|
|
2958
2920
|
}
|
|
2959
2921
|
mountAndShow(t, r = {}) {
|
|
2960
|
-
const
|
|
2922
|
+
const n = r.renew === !0, i = r.authMode;
|
|
2961
2923
|
if (this.handle) {
|
|
2962
|
-
this.isOpen = !0, this.handle.update({
|
|
2924
|
+
this.isOpen = !0, this.handle.update({
|
|
2925
|
+
open: !0,
|
|
2926
|
+
initialView: t,
|
|
2927
|
+
initialAuthMode: i,
|
|
2928
|
+
purchased: !1,
|
|
2929
|
+
renew: n
|
|
2930
|
+
}), this.emit("open");
|
|
2963
2931
|
return;
|
|
2964
2932
|
}
|
|
2965
2933
|
this.isOpen = !0, this.handle = Zt(
|
|
@@ -2968,13 +2936,14 @@ class yr {
|
|
|
2968
2936
|
client: this.billing,
|
|
2969
2937
|
open: !0,
|
|
2970
2938
|
initialView: t,
|
|
2939
|
+
initialAuthMode: i,
|
|
2971
2940
|
purchased: !1,
|
|
2972
|
-
renew:
|
|
2941
|
+
renew: n,
|
|
2973
2942
|
onClose: () => this.close(),
|
|
2974
|
-
onEvent: (
|
|
2975
|
-
this.emit(
|
|
2943
|
+
onEvent: (o, s) => {
|
|
2944
|
+
this.emit(o, s), o === "checkout_started" && this.startUserWatcher();
|
|
2976
2945
|
},
|
|
2977
|
-
onState: (
|
|
2946
|
+
onState: (o) => this.applyState(o),
|
|
2978
2947
|
inline: this.inline,
|
|
2979
2948
|
locale: this.forceLocale
|
|
2980
2949
|
},
|
|
@@ -2987,8 +2956,8 @@ class yr {
|
|
|
2987
2956
|
for (const r of this.stateListeners)
|
|
2988
2957
|
try {
|
|
2989
2958
|
r(t);
|
|
2990
|
-
} catch (
|
|
2991
|
-
console.warn("[paywall] onStateChange listener threw",
|
|
2959
|
+
} catch (n) {
|
|
2960
|
+
console.warn("[paywall] onStateChange listener threw", n);
|
|
2992
2961
|
}
|
|
2993
2962
|
}
|
|
2994
2963
|
}
|
|
@@ -3015,10 +2984,10 @@ class yr {
|
|
|
3015
2984
|
*/
|
|
3016
2985
|
onStateChange(t, r = {}) {
|
|
3017
2986
|
this.stateListeners.add(t);
|
|
3018
|
-
const
|
|
3019
|
-
if (
|
|
2987
|
+
const n = r.immediate ?? "microtask";
|
|
2988
|
+
if (n !== "none") {
|
|
3020
2989
|
const i = this.currentState;
|
|
3021
|
-
if (
|
|
2990
|
+
if (n === "sync")
|
|
3022
2991
|
try {
|
|
3023
2992
|
t(i);
|
|
3024
2993
|
} catch (o) {
|
|
@@ -3108,20 +3077,20 @@ class yr {
|
|
|
3108
3077
|
user: s
|
|
3109
3078
|
};
|
|
3110
3079
|
}
|
|
3111
|
-
const
|
|
3112
|
-
if (
|
|
3080
|
+
const n = r.user ?? null;
|
|
3081
|
+
if (n?.has_active_subscription)
|
|
3113
3082
|
return {
|
|
3114
3083
|
access: "granted",
|
|
3115
3084
|
reason: "has_subscription",
|
|
3116
3085
|
visibility: r.settings.visibility ?? null,
|
|
3117
3086
|
trial: null,
|
|
3118
|
-
user:
|
|
3087
|
+
user: n
|
|
3119
3088
|
};
|
|
3120
3089
|
let i = null;
|
|
3121
3090
|
if (!t.skipVisibility) {
|
|
3122
3091
|
const s = r.settings.visibility;
|
|
3123
3092
|
if (s && (i = s, this.lastVisibility = s, !s.visible))
|
|
3124
|
-
return { access: "granted", reason: "visibility_blocked", visibility: i, trial: null, user:
|
|
3093
|
+
return { access: "granted", reason: "visibility_blocked", visibility: i, trial: null, user: n };
|
|
3125
3094
|
}
|
|
3126
3095
|
let o = null;
|
|
3127
3096
|
if (!t.skipTrial) {
|
|
@@ -3129,12 +3098,12 @@ class yr {
|
|
|
3129
3098
|
if (s)
|
|
3130
3099
|
try {
|
|
3131
3100
|
if (o = await this.ensureTrialStore(s).check(), this.lastTrialStatus = o, o.blocked)
|
|
3132
|
-
return { access: "granted", reason: "trial_blocked", visibility: i, trial: o, user:
|
|
3133
|
-
} catch (
|
|
3134
|
-
typeof console < "u" && console.warn("[paywall] getAccess: trial check failed",
|
|
3101
|
+
return { access: "granted", reason: "trial_blocked", visibility: i, trial: o, user: n };
|
|
3102
|
+
} catch (d) {
|
|
3103
|
+
typeof console < "u" && console.warn("[paywall] getAccess: trial check failed", d);
|
|
3135
3104
|
}
|
|
3136
3105
|
}
|
|
3137
|
-
return { access: "blocked", reason: "no_subscription", visibility: i, trial: o, user:
|
|
3106
|
+
return { access: "blocked", reason: "no_subscription", visibility: i, trial: o, user: n };
|
|
3138
3107
|
}
|
|
3139
3108
|
/** Сбросить состояние триала в storage. Полезно для дев-режима / админ-кнопки
|
|
3140
3109
|
* «прогнать сценарий заново». В проде хост обычно не дёргает. */
|
|
@@ -3167,7 +3136,7 @@ class yr {
|
|
|
3167
3136
|
}), this.watcher.start());
|
|
3168
3137
|
}
|
|
3169
3138
|
close() {
|
|
3170
|
-
!this.isOpen || !this.handle || (this.isOpen = !1, this.purchased = !1, this.handle.update({ open: !1, purchased: !1 }), this.applyState(
|
|
3139
|
+
!this.isOpen || !this.handle || (this.isOpen = !1, this.purchased = !1, this.handle.update({ open: !1, purchased: !1 }), this.applyState(at), this.emit("close"));
|
|
3171
3140
|
}
|
|
3172
3141
|
/**
|
|
3173
3142
|
* Сканирует текущий URL на маркеры возврата с checkout и эмитит
|
|
@@ -3177,23 +3146,23 @@ class yr {
|
|
|
3177
3146
|
*/
|
|
3178
3147
|
checkReturn() {
|
|
3179
3148
|
if (typeof window > "u") return;
|
|
3180
|
-
const t = new URL(window.location.href), r = St(t.hash.replace(/^#/, "")),
|
|
3149
|
+
const t = new URL(window.location.href), r = St(t.hash.replace(/^#/, "")), n = St(t.search.replace(/^\?/, "")), i = r ?? n;
|
|
3181
3150
|
i && (i.status === "paid" ? (this.emit("purchase_completed", {
|
|
3182
3151
|
priceId: i.priceId,
|
|
3183
3152
|
sessionId: i.sessionId
|
|
3184
3153
|
}), gr(i)) : (i.status === "failed" || i.status === "cancelled") && this.emit("purchase_failed", { reason: i.status }), fr(t));
|
|
3185
3154
|
}
|
|
3186
3155
|
destroy() {
|
|
3187
|
-
this.tracker?.destroy(), this.tracker = null, this.listeners.clear(), this.stateListeners.clear(), this.watcher?.stop(), this.watcher = null, this.userUnsub?.(), this.userUnsub = null, this.authUnsub?.(), this.authUnsub = null, this.ownsAuth && this.auth && this.auth.destroy?.(), this.ownsAuth = !1, this.billing.destroy?.(), this.handle?.unmount(), this.handle = null, this.isOpen = !1, this.currentState =
|
|
3156
|
+
this.tracker?.destroy(), this.tracker = null, this.listeners.clear(), this.stateListeners.clear(), this.watcher?.stop(), this.watcher = null, this.userUnsub?.(), this.userUnsub = null, this.authUnsub?.(), this.authUnsub = null, this.ownsAuth && this.auth && this.auth.destroy?.(), this.ownsAuth = !1, this.billing.destroy?.(), this.handle?.unmount(), this.handle = null, this.isOpen = !1, this.currentState = at;
|
|
3188
3157
|
}
|
|
3189
3158
|
}
|
|
3190
3159
|
function dr(e) {
|
|
3191
3160
|
if (!e.auth) return { auth: void 0, ownsAuth: !1 };
|
|
3192
|
-
if (e.auth instanceof
|
|
3161
|
+
if (e.auth instanceof ct || ur(e.auth))
|
|
3193
3162
|
return { auth: e.auth, ownsAuth: !1 };
|
|
3194
3163
|
const t = e.auth === !0 ? {} : e.auth;
|
|
3195
3164
|
return {
|
|
3196
|
-
auth: new
|
|
3165
|
+
auth: new ct({
|
|
3197
3166
|
paywallId: e.paywallId,
|
|
3198
3167
|
apiOrigin: t.apiOrigin ?? e.apiOrigin,
|
|
3199
3168
|
storage: t.storage ?? e.storage,
|
|
@@ -3216,11 +3185,11 @@ function hr(e, t) {
|
|
|
3216
3185
|
}
|
|
3217
3186
|
function St(e) {
|
|
3218
3187
|
if (!e) return null;
|
|
3219
|
-
const t = new URLSearchParams(e), r = t.get(
|
|
3188
|
+
const t = new URLSearchParams(e), r = t.get($.status);
|
|
3220
3189
|
return r ? {
|
|
3221
3190
|
status: r,
|
|
3222
|
-
priceId: t.get(
|
|
3223
|
-
sessionId: t.get(
|
|
3191
|
+
priceId: t.get($.priceId),
|
|
3192
|
+
sessionId: t.get($.sessionId)
|
|
3224
3193
|
} : null;
|
|
3225
3194
|
}
|
|
3226
3195
|
function gr(e) {
|
|
@@ -3239,10 +3208,10 @@ function gr(e) {
|
|
|
3239
3208
|
}
|
|
3240
3209
|
}
|
|
3241
3210
|
function fr(e) {
|
|
3242
|
-
const t = (
|
|
3243
|
-
if (!
|
|
3244
|
-
const o = new URLSearchParams(
|
|
3245
|
-
o.delete(
|
|
3211
|
+
const t = (n, i) => {
|
|
3212
|
+
if (!n) return "";
|
|
3213
|
+
const o = new URLSearchParams(n.replace(/^[?#]/, ""));
|
|
3214
|
+
o.delete($.status), o.delete($.priceId), o.delete($.sessionId);
|
|
3246
3215
|
const s = o.toString();
|
|
3247
3216
|
return s ? i + s : "";
|
|
3248
3217
|
}, r = e.pathname + t(e.search, "?") + t(e.hash, "#");
|
|
@@ -3252,4 +3221,4 @@ export {
|
|
|
3252
3221
|
yr as P,
|
|
3253
3222
|
Ye as b
|
|
3254
3223
|
};
|
|
3255
|
-
//# sourceMappingURL=PaywallUI-
|
|
3224
|
+
//# sourceMappingURL=PaywallUI-BhQpWSWN.js.map
|