@monetize.software/sdk 3.0.0-alpha.7 → 3.0.0-alpha.8
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-BrDiS6zg.js} +926 -962
- package/dist/chunks/PaywallUI-BrDiS6zg.js.map +1 -0
- package/dist/chunks/PaywallUI-Bvx8nRL0.js +26 -0
- package/dist/chunks/PaywallUI-Bvx8nRL0.js.map +1 -0
- package/dist/chunks/{ar-nh4l4WDE.js → ar-CHae8g-2.js} +4 -3
- package/dist/chunks/ar-CHae8g-2.js.map +1 -0
- package/dist/chunks/ar-E1mc8SO_.js +2 -0
- package/dist/chunks/ar-E1mc8SO_.js.map +1 -0
- package/dist/chunks/cs-Dccq6LAT.js +2 -0
- package/dist/chunks/cs-Dccq6LAT.js.map +1 -0
- package/dist/chunks/{cs-2UYO2rWf.js → cs-eZTedzaK.js} +2 -1
- package/dist/chunks/cs-eZTedzaK.js.map +1 -0
- package/dist/chunks/da-C_4MbEh5.js +2 -0
- package/dist/chunks/da-C_4MbEh5.js.map +1 -0
- package/dist/chunks/{da-BD0O_HfV.js → da-Dca6j8fp.js} +2 -1
- package/dist/chunks/da-Dca6j8fp.js.map +1 -0
- package/dist/chunks/{de-BkCiXPsn.js → de-BCjn3PUI.js} +3 -1
- package/dist/chunks/de-BCjn3PUI.js.map +1 -0
- package/dist/chunks/de-DulxcJj-.js +2 -0
- package/dist/chunks/de-DulxcJj-.js.map +1 -0
- package/dist/chunks/{el-cIcxTp07.js → el-BpXtDTez.js} +2 -1
- package/dist/chunks/el-BpXtDTez.js.map +1 -0
- package/dist/chunks/el-CVG_1iKB.js +2 -0
- package/dist/chunks/el-CVG_1iKB.js.map +1 -0
- package/dist/chunks/{es-CJBC_jrV.js → es-B3P4nlMw.js} +3 -1
- package/dist/chunks/es-B3P4nlMw.js.map +1 -0
- package/dist/chunks/es-ri0uKzUW.js +2 -0
- package/dist/chunks/es-ri0uKzUW.js.map +1 -0
- package/dist/chunks/{fi-DyV7ynBf.js → fi-BbQ_Bs0Z.js} +2 -1
- package/dist/chunks/fi-BbQ_Bs0Z.js.map +1 -0
- package/dist/chunks/fi-CNZqWHjw.js +2 -0
- package/dist/chunks/fi-CNZqWHjw.js.map +1 -0
- package/dist/chunks/{fr-BLQ4AIu7.js → fr-BKDUXceO.js} +3 -1
- package/dist/chunks/fr-BKDUXceO.js.map +1 -0
- package/dist/chunks/fr-CfFOw4hD.js +2 -0
- package/dist/chunks/fr-CfFOw4hD.js.map +1 -0
- package/dist/chunks/{he-Bg-Bqi7r.js → he-BVCHlTtT.js} +2 -1
- package/dist/chunks/he-BVCHlTtT.js.map +1 -0
- package/dist/chunks/he-DN2JEtQb.js +2 -0
- package/dist/chunks/he-DN2JEtQb.js.map +1 -0
- package/dist/chunks/hi-DxfOerNP.js +2 -0
- package/dist/chunks/hi-DxfOerNP.js.map +1 -0
- package/dist/chunks/{hi-wQeE43oY.js → hi-H_Hshh-7.js} +4 -3
- package/dist/chunks/hi-H_Hshh-7.js.map +1 -0
- package/dist/chunks/hu-BTImywuV.js +2 -0
- package/dist/chunks/{hu-DXtscQ8_.js.map → hu-BTImywuV.js.map} +1 -1
- package/dist/chunks/{hu-D9qxzu0r.js → hu-ZWiNfzvN.js} +2 -1
- package/dist/chunks/{hu-D9qxzu0r.js.map → hu-ZWiNfzvN.js.map} +1 -1
- package/dist/chunks/{id-Rx_wYvqy.js → id-DeiRYsJ1.js} +2 -1
- package/dist/chunks/id-DeiRYsJ1.js.map +1 -0
- package/dist/chunks/id-YFuArJA6.js +2 -0
- package/dist/chunks/id-YFuArJA6.js.map +1 -0
- package/dist/chunks/{it-B1SRPZ3e.js → it-UH9OzFhg.js} +3 -1
- package/dist/chunks/it-UH9OzFhg.js.map +1 -0
- package/dist/chunks/it-mhkzXBM9.js +2 -0
- package/dist/chunks/it-mhkzXBM9.js.map +1 -0
- package/dist/chunks/{ja-CMC3Parn.js → ja-6l_z_G9k.js} +2 -2
- package/dist/chunks/ja-6l_z_G9k.js.map +1 -0
- package/dist/chunks/{ja-DiItm8te.js → ja-BYC8FRN8.js} +3 -1
- package/dist/chunks/ja-BYC8FRN8.js.map +1 -0
- package/dist/chunks/{ko-CdGFWAKX.js → ko-Bjs2ZRcF.js} +3 -1
- package/dist/chunks/ko-Bjs2ZRcF.js.map +1 -0
- package/dist/chunks/ko-YAl4XwHu.js +2 -0
- package/dist/chunks/ko-YAl4XwHu.js.map +1 -0
- package/dist/chunks/nl-C-9zHtfb.js +2 -0
- package/dist/chunks/nl-C-9zHtfb.js.map +1 -0
- package/dist/chunks/{nl-CmZ3vEvj.js → nl-Ch5HFWQO.js} +3 -1
- package/dist/chunks/nl-Ch5HFWQO.js.map +1 -0
- package/dist/chunks/{no-BuxByZpq.js → no-CljpinWz.js} +2 -1
- package/dist/chunks/no-CljpinWz.js.map +1 -0
- package/dist/chunks/no-qzPitLlx.js +2 -0
- package/dist/chunks/no-qzPitLlx.js.map +1 -0
- package/dist/chunks/{pl-jZFCnDb8.js → pl-CUcSS0zZ.js} +2 -1
- package/dist/chunks/pl-CUcSS0zZ.js.map +1 -0
- package/dist/chunks/pl-MAIYeuhW.js +2 -0
- package/dist/chunks/pl-MAIYeuhW.js.map +1 -0
- package/dist/chunks/{pt-Cld7MwIW.js → pt-BHK0LwkC.js} +3 -1
- package/dist/chunks/pt-BHK0LwkC.js.map +1 -0
- package/dist/chunks/pt-DqDabE4v.js +2 -0
- package/dist/chunks/pt-DqDabE4v.js.map +1 -0
- package/dist/chunks/ro-BVs-lHH-.js +2 -0
- package/dist/chunks/ro-BVs-lHH-.js.map +1 -0
- package/dist/chunks/{ro-CuKDqj3C.js → ro-Bj8cwU2n.js} +2 -1
- package/dist/chunks/ro-Bj8cwU2n.js.map +1 -0
- package/dist/chunks/{ru-B7cjqJUm.js → ru-CgqNy0Gb.js} +10 -1
- package/dist/chunks/ru-CgqNy0Gb.js.map +1 -0
- package/dist/chunks/ru-DP7qDAmE.js +2 -0
- package/dist/chunks/ru-DP7qDAmE.js.map +1 -0
- package/dist/chunks/sv-B3QEYGgd.js +2 -0
- package/dist/chunks/sv-B3QEYGgd.js.map +1 -0
- package/dist/chunks/{sv-D9y-M1Fo.js → sv-H7jroOQ5.js} +2 -1
- package/dist/chunks/sv-H7jroOQ5.js.map +1 -0
- package/dist/chunks/{th-D9umBjEy.js → th-Dqm-gpGe.js} +2 -1
- package/dist/chunks/th-Dqm-gpGe.js.map +1 -0
- package/dist/chunks/th-DzQau9aW.js +2 -0
- package/dist/chunks/th-DzQau9aW.js.map +1 -0
- package/dist/chunks/{tr-BddMywiw.js → tr-D3zPcNtT.js} +2 -1
- package/dist/chunks/tr-D3zPcNtT.js.map +1 -0
- package/dist/chunks/tr-cG1YuE1E.js +2 -0
- package/dist/chunks/tr-cG1YuE1E.js.map +1 -0
- package/dist/chunks/{uk-Dbd31hFt.js → uk-CoIIs3QI.js} +10 -1
- package/dist/chunks/uk-CoIIs3QI.js.map +1 -0
- package/dist/chunks/uk-Cvbo0IBW.js +2 -0
- package/dist/chunks/uk-Cvbo0IBW.js.map +1 -0
- package/dist/chunks/vi-BRtYSBUp.js +2 -0
- package/dist/chunks/{vi-CJefLP_g.js.map → vi-BRtYSBUp.js.map} +1 -1
- package/dist/chunks/{vi-Do3BMOdh.js → vi-C_fruIbh.js} +2 -1
- package/dist/chunks/{vi-Do3BMOdh.js.map → vi-C_fruIbh.js.map} +1 -1
- 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.js +20 -20
- package/dist/core.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +31 -16
- package/dist/index.js +1 -1
- package/dist/ui.cjs +1 -1
- package/dist/ui.d.ts +31 -16
- 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-DXtscQ8_.js +0 -2
- 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.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/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 K, h as
|
|
3
|
-
import { jsx as
|
|
4
|
-
import { useContext as
|
|
5
|
-
const
|
|
1
|
+
import { PaywallError as F, BillingClient as Rt, EventTracker as Ut, AuthClient as lt } from "../core.js";
|
|
2
|
+
import { render as K, h as ct, createContext as Dt } from "preact";
|
|
3
|
+
import { jsx as a, jsxs as c, Fragment as at } from "preact/jsx-runtime";
|
|
4
|
+
import { useContext as Nt, useState as b, useEffect as j, useRef as R, useMemo as $t, useLayoutEffect as Ht } from "preact/hooks";
|
|
5
|
+
const dt = 3600 * 1e3;
|
|
6
6
|
function Y(e) {
|
|
7
7
|
return `paywall-${e}-trial-time-first-open`;
|
|
8
8
|
}
|
|
9
9
|
function X(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 St {
|
|
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();
|
|
@@ -23,8 +23,8 @@ class It {
|
|
|
23
23
|
await this.storage.removeItem(this.config.mode === "time" ? Y(this.paywallId) : X(this.paywallId));
|
|
24
24
|
}
|
|
25
25
|
async checkTime() {
|
|
26
|
-
const t = this.config.payload *
|
|
27
|
-
if (!
|
|
26
|
+
const t = this.config.payload * dt, r = await this.storage.getItem(Y(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(X(this.paywallId)),
|
|
47
|
+
const t = this.config.payload, r = await this.storage.getItem(X(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 * dt, r = Y(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 = X(this.paywallId),
|
|
70
|
+
const t = this.config.payload, r = X(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
|
|
82
|
-
class
|
|
83
|
-
constructor(t, r,
|
|
84
|
-
|
|
81
|
+
let ut = !1;
|
|
82
|
+
class Vt {
|
|
83
|
+
constructor(t, r, n) {
|
|
84
|
+
ut || (ut = !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 St(t, r, n);
|
|
87
87
|
}
|
|
88
88
|
check() {
|
|
89
89
|
return this.fallback.check();
|
|
@@ -95,17 +95,17 @@ class Gt {
|
|
|
95
95
|
return this.fallback.reset();
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
-
function
|
|
99
|
-
return r.storage === "server" ? new
|
|
98
|
+
function Gt(e, t, r) {
|
|
99
|
+
return r.storage === "server" ? new Vt(e, t, r) : new St(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
|
|
103
|
-
function
|
|
104
|
-
if (
|
|
101
|
+
const Ct = '/*! 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 pt = !1;
|
|
103
|
+
function qt() {
|
|
104
|
+
if (pt || (pt = !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(Ct), e = t.cssRules;
|
|
109
109
|
} catch {
|
|
110
110
|
return;
|
|
111
111
|
}
|
|
@@ -123,13 +123,13 @@ function Wt() {
|
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
|
-
function
|
|
126
|
+
function Wt(e, t, r = {}) {
|
|
127
127
|
if (typeof document > "u")
|
|
128
128
|
throw new Error("mountShadow called in non-DOM environment");
|
|
129
|
-
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
const i =
|
|
129
|
+
qt();
|
|
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 K(
|
|
151
|
+
s.textContent = o + Ct + (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 K(ct(e, l), d), {
|
|
156
156
|
shadowRoot: i,
|
|
157
|
-
update(
|
|
158
|
-
|
|
157
|
+
update(g) {
|
|
158
|
+
l = { ...l, ...g }, K(ct(e, l), d);
|
|
159
159
|
},
|
|
160
160
|
unmount() {
|
|
161
|
-
K(null,
|
|
161
|
+
K(null, d), n.remove();
|
|
162
162
|
}
|
|
163
163
|
};
|
|
164
164
|
}
|
|
165
|
-
const
|
|
166
|
-
const
|
|
167
|
-
return
|
|
165
|
+
const Zt = (e, t, r) => {
|
|
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,
|
|
@@ -174,7 +174,7 @@ const Kt = (e, t, r) => {
|
|
|
174
174
|
)
|
|
175
175
|
);
|
|
176
176
|
});
|
|
177
|
-
},
|
|
177
|
+
}, Kt = [
|
|
178
178
|
"ru",
|
|
179
179
|
"uk",
|
|
180
180
|
"de",
|
|
@@ -202,44 +202,44 @@ const Kt = (e, t, r) => {
|
|
|
202
202
|
"th",
|
|
203
203
|
"vi",
|
|
204
204
|
"he"
|
|
205
|
-
],
|
|
206
|
-
function
|
|
205
|
+
], It = (e, t, r) => Mt(t, r), At = Dt({ t: It, locale: "en" });
|
|
206
|
+
function Mt(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
213
|
const J = /* @__PURE__ */ new Map(), Q = /* @__PURE__ */ new Map();
|
|
214
|
-
function
|
|
215
|
-
return
|
|
214
|
+
function Lt(e) {
|
|
215
|
+
return Kt.includes(e);
|
|
216
216
|
}
|
|
217
|
-
function
|
|
217
|
+
function Yt(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 (Lt(n)) return n;
|
|
232
232
|
return null;
|
|
233
233
|
}
|
|
234
|
-
function
|
|
235
|
-
return !!e.locales &&
|
|
234
|
+
function Xt(e, t) {
|
|
235
|
+
return !!e.locales && e.locales[t] !== void 0;
|
|
236
236
|
}
|
|
237
|
-
async function
|
|
237
|
+
async function Jt(e) {
|
|
238
238
|
const t = J.get(e);
|
|
239
239
|
if (t) return t;
|
|
240
240
|
const r = Q.get(e);
|
|
241
241
|
if (r) return r;
|
|
242
|
-
const
|
|
242
|
+
const n = Zt(/* @__PURE__ */ Object.assign({ "./locales/ar.ts": () => import("./ar-CHae8g-2.js"), "./locales/cs.ts": () => import("./cs-eZTedzaK.js"), "./locales/da.ts": () => import("./da-Dca6j8fp.js"), "./locales/de.ts": () => import("./de-BCjn3PUI.js"), "./locales/el.ts": () => import("./el-BpXtDTez.js"), "./locales/es.ts": () => import("./es-B3P4nlMw.js"), "./locales/fi.ts": () => import("./fi-BbQ_Bs0Z.js"), "./locales/fr.ts": () => import("./fr-BKDUXceO.js"), "./locales/he.ts": () => import("./he-BVCHlTtT.js"), "./locales/hi.ts": () => import("./hi-H_Hshh-7.js"), "./locales/hu.ts": () => import("./hu-ZWiNfzvN.js"), "./locales/id.ts": () => import("./id-DeiRYsJ1.js"), "./locales/it.ts": () => import("./it-UH9OzFhg.js"), "./locales/ja.ts": () => import("./ja-BYC8FRN8.js"), "./locales/ko.ts": () => import("./ko-Bjs2ZRcF.js"), "./locales/nl.ts": () => import("./nl-Ch5HFWQO.js"), "./locales/no.ts": () => import("./no-CljpinWz.js"), "./locales/pl.ts": () => import("./pl-CUcSS0zZ.js"), "./locales/pt.ts": () => import("./pt-BHK0LwkC.js"), "./locales/ro.ts": () => import("./ro-Bj8cwU2n.js"), "./locales/ru.ts": () => import("./ru-CgqNy0Gb.js"), "./locales/sv.ts": () => import("./sv-H7jroOQ5.js"), "./locales/th.ts": () => import("./th-Dqm-gpGe.js"), "./locales/tr.ts": () => import("./tr-D3zPcNtT.js"), "./locales/uk.ts": () => import("./uk-CoIIs3QI.js"), "./locales/vi.ts": () => import("./vi-C_fruIbh.js"), "./locales/zh.ts": () => import("./zh-LDkEV2D9.js") }), `./locales/${e}.ts`, 3).then((i) => {
|
|
243
243
|
const o = i.default ?? {};
|
|
244
244
|
return J.set(e, o), o;
|
|
245
245
|
}).catch((i) => {
|
|
@@ -249,79 +249,83 @@ async function Qt(e) {
|
|
|
249
249
|
}).finally(() => {
|
|
250
250
|
Q.delete(e);
|
|
251
251
|
});
|
|
252
|
-
return Q.set(e,
|
|
253
|
-
}
|
|
254
|
-
function
|
|
255
|
-
const [
|
|
256
|
-
|
|
257
|
-
const
|
|
258
|
-
|
|
259
|
-
|
|
252
|
+
return Q.set(e, n), n;
|
|
253
|
+
}
|
|
254
|
+
function Qt({ bootstrap: e, forceLocale: t, children: r }) {
|
|
255
|
+
const [n, i] = b("en"), [o, s] = b(null);
|
|
256
|
+
j(() => {
|
|
257
|
+
const g = (t && Lt(t) ? t : null) ?? (() => {
|
|
258
|
+
if (!e) return null;
|
|
259
|
+
const u = Yt(e);
|
|
260
|
+
return !u || !Xt(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
|
|
265
|
-
|
|
266
|
+
if (g === n && o) return;
|
|
267
|
+
let p = !1;
|
|
268
|
+
return Jt(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) => Mt(o[l] ?? g, p) : It
|
|
273
277
|
};
|
|
274
|
-
return /* @__PURE__ */
|
|
278
|
+
return /* @__PURE__ */ a(At.Provider, { value: d, children: r });
|
|
275
279
|
}
|
|
276
280
|
function v() {
|
|
277
|
-
return
|
|
281
|
+
return Nt(At);
|
|
278
282
|
}
|
|
279
|
-
const
|
|
280
|
-
function
|
|
283
|
+
const ht = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
284
|
+
function te({
|
|
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 = R(null), u = R(null);
|
|
296
|
+
return j(() => {
|
|
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(ht) ?? 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(ht)
|
|
310
|
+
).filter((E) => !E.hasAttribute("disabled") && E.tabIndex !== -1);
|
|
311
|
+
if (S.length === 0) {
|
|
312
|
+
_.preventDefault();
|
|
309
313
|
return;
|
|
310
314
|
}
|
|
311
|
-
const
|
|
312
|
-
|
|
315
|
+
const T = S[0], L = S[S.length - 1], B = document.activeElement;
|
|
316
|
+
_.shiftKey && B === T ? (_.preventDefault(), L.focus()) : !_.shiftKey && B === L && (_.preventDefault(), T.focus());
|
|
313
317
|
};
|
|
314
|
-
document.addEventListener("keydown",
|
|
315
|
-
const
|
|
316
|
-
return
|
|
317
|
-
document.removeEventListener("keydown",
|
|
318
|
+
document.addEventListener("keydown", m, !0);
|
|
319
|
+
const z = document.body.style.overflow;
|
|
320
|
+
return d || (document.body.style.overflow = "hidden"), () => {
|
|
321
|
+
document.removeEventListener("keydown", m, !0), d || (document.body.style.overflow = z), 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) }
|
|
@@ -381,7 +385,7 @@ function ee({
|
|
|
381
385
|
}
|
|
382
386
|
) : null;
|
|
383
387
|
}
|
|
384
|
-
function
|
|
388
|
+
function ee(e, t) {
|
|
385
389
|
switch (e) {
|
|
386
390
|
case "google":
|
|
387
391
|
return t("auth.continue_with_google", "Continue with Google");
|
|
@@ -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 gt(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 F)) return n;
|
|
399
403
|
switch (e.code) {
|
|
400
404
|
case "invalid_credentials":
|
|
401
405
|
return r("auth.invalid_credentials", "Invalid email or password");
|
|
@@ -424,17 +428,17 @@ 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 Pt({ 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__ */
|
|
437
|
-
|
|
438
|
+
const d = n && !n.user.is_anonymous ? n : null;
|
|
439
|
+
return d && s ? null : d ? /* @__PURE__ */ a(re, { email: d.user.email ?? "", onSignOut: () => r.signOut().catch(() => {
|
|
440
|
+
}) }) : /* @__PURE__ */ a(
|
|
441
|
+
ie,
|
|
438
442
|
{
|
|
439
443
|
block: e,
|
|
440
444
|
allowSignup: i,
|
|
@@ -443,14 +447,14 @@ function Et({ block: e, ctx: t }) {
|
|
|
443
447
|
}
|
|
444
448
|
);
|
|
445
449
|
}
|
|
446
|
-
function
|
|
450
|
+
function re({ 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,182 +465,177 @@ function ie({ email: e, onSignOut: t }) {
|
|
|
461
465
|
)
|
|
462
466
|
] });
|
|
463
467
|
}
|
|
464
|
-
function
|
|
465
|
-
const { t: i } = v(), o =
|
|
466
|
-
|
|
468
|
+
function ie({ 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, z] = b(""), [_, S] = b(null), [T, L] = b(null), [B, E] = b(null), [U, D] = b(!1), [P, M] = b(null);
|
|
470
|
+
j(() => {
|
|
467
471
|
if (typeof o.getLastLogin != "function") return;
|
|
468
|
-
let
|
|
472
|
+
let I = !1;
|
|
469
473
|
return o.getLastLogin().then(
|
|
470
|
-
(
|
|
471
|
-
|
|
474
|
+
(A) => {
|
|
475
|
+
I || !A || (M(A), A.email && u((H) => H === "" ? A.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
|
-
if (
|
|
484
|
-
if (!
|
|
483
|
+
const O = (I) => {
|
|
484
|
+
g(I), L(null), E(null), D(!1);
|
|
485
|
+
}, N = async (I) => {
|
|
486
|
+
if (I.preventDefault(), !_) {
|
|
487
|
+
if (L(null), E(null), l === "signup" && !U) {
|
|
488
|
+
if (!p.trim()) return;
|
|
485
489
|
D(!0);
|
|
486
490
|
return;
|
|
487
491
|
}
|
|
488
|
-
if (l === "signup" &&
|
|
489
|
-
|
|
492
|
+
if (l === "signup" && x !== k) {
|
|
493
|
+
L(i("auth.passwords_mismatch", "Passwords don't match"));
|
|
490
494
|
return;
|
|
491
495
|
}
|
|
492
|
-
|
|
496
|
+
S("email");
|
|
493
497
|
try {
|
|
494
|
-
l === "signin" ? await o.signInWithEmail({ email:
|
|
498
|
+
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"), E(i("auth.check_email_message", "Check your email for a confirmation code."))) : l === "forgot" ? (await o.requestPasswordReset({ email: p }), g("reset_sent"), E(
|
|
495
499
|
i("auth.reset_sent_message", "If that email exists, a reset code has been sent.")
|
|
496
|
-
)) : l === "reset_verify" && (await o.verifyOtp({
|
|
497
|
-
email:
|
|
498
|
-
token:
|
|
499
|
-
type:
|
|
500
|
-
}),
|
|
501
|
-
} catch (
|
|
502
|
-
|
|
500
|
+
)) : l === "signup_verify" ? await o.verifyOtp({ email: p, token: m, type: "email" }) : l === "reset_verify" && (await o.verifyOtp({
|
|
501
|
+
email: p,
|
|
502
|
+
token: m,
|
|
503
|
+
type: x ? "recovery" : "email"
|
|
504
|
+
}), x && await o.updatePassword({ password: x }));
|
|
505
|
+
} catch (A) {
|
|
506
|
+
L(gt(A, l === "signup" ? "signup" : l === "signup_verify" || l === "reset_verify" ? "otp" : l === "forgot" ? "reset" : "signin", i));
|
|
503
507
|
} finally {
|
|
504
|
-
|
|
508
|
+
S(null);
|
|
505
509
|
}
|
|
506
510
|
}
|
|
507
|
-
},
|
|
508
|
-
if (!
|
|
509
|
-
|
|
511
|
+
}, Z = async (I) => {
|
|
512
|
+
if (!_) {
|
|
513
|
+
S(I), L(null), E(null);
|
|
510
514
|
try {
|
|
511
515
|
await o.signInWithOAuth({
|
|
512
|
-
provider:
|
|
513
|
-
onPopupOpened: () =>
|
|
516
|
+
provider: I,
|
|
517
|
+
onPopupOpened: () => S(null)
|
|
514
518
|
});
|
|
515
|
-
} catch (
|
|
516
|
-
if (
|
|
519
|
+
} catch (A) {
|
|
520
|
+
if (A instanceof F && (A.code === "oauth_cancelled" || A.code === "oauth_timeout"))
|
|
517
521
|
return;
|
|
518
|
-
|
|
522
|
+
L(gt(A, "signin", i));
|
|
519
523
|
} finally {
|
|
520
|
-
|
|
524
|
+
S(null);
|
|
521
525
|
}
|
|
522
526
|
}
|
|
523
|
-
}, w = s.length > 0 && (l === "signin" || l === "signup"),
|
|
527
|
+
}, w = s.length > 0 && (l === "signin" || l === "signup"), f = l === "signin" || l === "signup" || l === "forgot", C = l === "signin" || l === "signup" && U;
|
|
524
528
|
return /* @__PURE__ */ c("div", { class: "flex flex-col gap-5", children: [
|
|
525
|
-
/* @__PURE__ */
|
|
529
|
+
/* @__PURE__ */ a(ne, { mode: l, customHeading: e.heading, customSubheading: e.subheading }),
|
|
526
530
|
w ? /* @__PURE__ */ c("div", { class: "flex flex-col gap-2.5", children: [
|
|
527
|
-
s.map((
|
|
531
|
+
s.map((I) => /* @__PURE__ */ c("div", { class: "relative", children: [
|
|
528
532
|
/* @__PURE__ */ c(
|
|
529
533
|
"button",
|
|
530
534
|
{
|
|
531
535
|
type: "button",
|
|
532
|
-
onClick: () =>
|
|
533
|
-
disabled:
|
|
536
|
+
onClick: () => Z(I),
|
|
537
|
+
disabled: _ !== null,
|
|
534
538
|
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
539
|
children: [
|
|
536
|
-
|
|
537
|
-
/* @__PURE__ */
|
|
540
|
+
_ === 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(ge, { provider: I }),
|
|
541
|
+
/* @__PURE__ */ a("span", { children: ee(I, i) })
|
|
538
542
|
]
|
|
539
543
|
}
|
|
540
544
|
),
|
|
541
|
-
|
|
542
|
-
] },
|
|
543
|
-
/* @__PURE__ */
|
|
545
|
+
P?.method === I ? /* @__PURE__ */ a(ue, { email: P.email }) : null
|
|
546
|
+
] }, I)),
|
|
547
|
+
/* @__PURE__ */ a(he, {})
|
|
544
548
|
] }) : null,
|
|
545
|
-
/* @__PURE__ */ c("form", { onSubmit:
|
|
546
|
-
|
|
547
|
-
|
|
549
|
+
/* @__PURE__ */ c("form", { onSubmit: N, class: "flex flex-col gap-3", children: [
|
|
550
|
+
f && /* @__PURE__ */ a(
|
|
551
|
+
ft,
|
|
548
552
|
{
|
|
549
553
|
type: "email",
|
|
550
554
|
placeholder: i("auth.email", "Email address"),
|
|
551
|
-
value:
|
|
552
|
-
onInput:
|
|
555
|
+
value: p,
|
|
556
|
+
onInput: u,
|
|
553
557
|
autocomplete: "email",
|
|
554
558
|
required: !0
|
|
555
559
|
}
|
|
556
560
|
),
|
|
557
|
-
|
|
561
|
+
C && /* @__PURE__ */ a(
|
|
558
562
|
tt,
|
|
559
563
|
{
|
|
560
564
|
placeholder: i("auth.password", "Password"),
|
|
561
|
-
value:
|
|
562
|
-
onInput:
|
|
565
|
+
value: x,
|
|
566
|
+
onInput: y,
|
|
563
567
|
autocomplete: l === "signin" ? "current-password" : "new-password",
|
|
564
568
|
required: !0
|
|
565
569
|
}
|
|
566
570
|
),
|
|
567
|
-
l === "signup" &&
|
|
571
|
+
l === "signup" && U && /* @__PURE__ */ a(
|
|
568
572
|
tt,
|
|
569
573
|
{
|
|
570
574
|
placeholder: i("auth.repeat_password", "Repeat password"),
|
|
571
|
-
value:
|
|
572
|
-
onInput:
|
|
575
|
+
value: k,
|
|
576
|
+
onInput: h,
|
|
573
577
|
autocomplete: "new-password",
|
|
574
578
|
required: !0
|
|
575
579
|
}
|
|
576
580
|
),
|
|
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
|
-
] })
|
|
581
|
+
(l === "signup_verify" || l === "reset_verify") && /* @__PURE__ */ a(
|
|
582
|
+
ft,
|
|
583
|
+
{
|
|
584
|
+
type: "text",
|
|
585
|
+
placeholder: i("auth.confirmation_code", "Confirmation code"),
|
|
586
|
+
value: m,
|
|
587
|
+
onInput: z,
|
|
588
|
+
autocomplete: "one-time-code",
|
|
589
|
+
inputMode: "numeric",
|
|
590
|
+
required: !0
|
|
591
|
+
}
|
|
592
|
+
),
|
|
593
|
+
l === "reset_verify" && /* @__PURE__ */ a(
|
|
594
|
+
tt,
|
|
595
|
+
{
|
|
596
|
+
placeholder: i(
|
|
597
|
+
"auth.new_password_optional",
|
|
598
|
+
"New password (optional — only for password reset)"
|
|
599
|
+
),
|
|
600
|
+
value: x,
|
|
601
|
+
onInput: y,
|
|
602
|
+
autocomplete: "new-password"
|
|
603
|
+
}
|
|
604
|
+
),
|
|
605
|
+
l === "reset_sent" && B && /* @__PURE__ */ a("p", { class: "rounded-2xl bg-gray-100 px-4 py-3 text-sm text-gray-600", children: B }),
|
|
606
|
+
l === "signin" && r && /* @__PURE__ */ a("div", { class: "flex justify-end text-sm", children: /* @__PURE__ */ a(W, { onClick: () => O("forgot"), children: i("auth.forgot_password", "Forgot password?") }) }),
|
|
607
|
+
T && /* @__PURE__ */ a("p", { class: "text-sm text-red-600", children: T }),
|
|
608
|
+
B && l !== "reset_sent" && /* @__PURE__ */ a("p", { class: "text-sm text-gray-500", children: B }),
|
|
609
|
+
l !== "reset_sent" && /* @__PURE__ */ a(
|
|
610
|
+
le,
|
|
611
|
+
{
|
|
612
|
+
busy: _ === "email",
|
|
613
|
+
label: oe(l, U, e.submit_label ?? e.heading, i)
|
|
614
|
+
}
|
|
615
|
+
)
|
|
617
616
|
] }),
|
|
618
|
-
/* @__PURE__ */
|
|
619
|
-
|
|
617
|
+
/* @__PURE__ */ a(
|
|
618
|
+
se,
|
|
620
619
|
{
|
|
621
620
|
mode: l,
|
|
622
621
|
allowSignup: t,
|
|
623
|
-
onSwitch:
|
|
622
|
+
onSwitch: O
|
|
624
623
|
}
|
|
625
624
|
)
|
|
626
625
|
] });
|
|
627
626
|
}
|
|
628
|
-
function
|
|
627
|
+
function ne({
|
|
629
628
|
mode: e,
|
|
630
629
|
customHeading: t,
|
|
631
630
|
customSubheading: r
|
|
632
631
|
}) {
|
|
633
|
-
const { t:
|
|
632
|
+
const { t: n } = v(), i = ae(e, n), o = e === "signin" || e === "signup", s = o && t ? t : i.title, d = o && r !== void 0 ? r || null : i.subtitle;
|
|
634
633
|
return /* @__PURE__ */ c("div", { class: "flex flex-col gap-2", children: [
|
|
635
|
-
/* @__PURE__ */
|
|
636
|
-
|
|
634
|
+
/* @__PURE__ */ a("h2", { class: "text-3xl font-bold tracking-tight text-gray-900", children: s }),
|
|
635
|
+
d ? /* @__PURE__ */ a("p", { class: "text-base leading-relaxed text-gray-600", children: d }) : null
|
|
637
636
|
] });
|
|
638
637
|
}
|
|
639
|
-
function
|
|
638
|
+
function ae(e, t) {
|
|
640
639
|
switch (e) {
|
|
641
640
|
case "signin":
|
|
642
641
|
return {
|
|
@@ -669,48 +668,57 @@ function oe(e, t) {
|
|
|
669
668
|
"Enter the code from your email and a new password."
|
|
670
669
|
)
|
|
671
670
|
};
|
|
671
|
+
case "signup_verify":
|
|
672
|
+
return {
|
|
673
|
+
title: t("auth.confirm_email_title", "Confirm your email"),
|
|
674
|
+
subtitle: t(
|
|
675
|
+
"auth.confirm_email_subtitle",
|
|
676
|
+
"Enter the code we sent to your email to finish creating your account."
|
|
677
|
+
)
|
|
678
|
+
};
|
|
672
679
|
}
|
|
673
680
|
}
|
|
674
|
-
function
|
|
681
|
+
function oe(e, t, r, n) {
|
|
675
682
|
if (e === "signin" && r) return r;
|
|
676
683
|
switch (e) {
|
|
677
684
|
case "signin":
|
|
678
|
-
return
|
|
685
|
+
return n("auth.log_in", "Sign In");
|
|
679
686
|
case "signup":
|
|
680
|
-
return t ?
|
|
687
|
+
return t ? n("auth.create_account", "Create Account") : n("auth.sign_up", "Sign Up");
|
|
681
688
|
case "forgot":
|
|
682
|
-
return
|
|
689
|
+
return n("auth.send_reset", "Send Reset Email");
|
|
690
|
+
case "signup_verify":
|
|
683
691
|
case "reset_verify":
|
|
684
|
-
return
|
|
692
|
+
return n("auth.verify", "Verify");
|
|
685
693
|
default:
|
|
686
|
-
return
|
|
694
|
+
return n("cta.continue", "Continue");
|
|
687
695
|
}
|
|
688
696
|
}
|
|
689
|
-
function
|
|
697
|
+
function se({
|
|
690
698
|
mode: e,
|
|
691
699
|
allowSignup: t,
|
|
692
700
|
onSwitch: r
|
|
693
701
|
}) {
|
|
694
|
-
const { t:
|
|
702
|
+
const { t: n } = v();
|
|
695
703
|
return e === "signin" && t ? /* @__PURE__ */ c("p", { class: "text-center text-sm text-gray-600", children: [
|
|
696
|
-
|
|
704
|
+
n("auth.no_account", "Don't have an account?"),
|
|
697
705
|
" ",
|
|
698
|
-
/* @__PURE__ */
|
|
699
|
-
] }) : e === "signup" ? /* @__PURE__ */ c("p", { class: "text-center text-sm text-gray-600", children: [
|
|
700
|
-
|
|
706
|
+
/* @__PURE__ */ a(W, { onClick: () => r("signup"), children: n("auth.sign_up_link", "Sign Up") })
|
|
707
|
+
] }) : e === "signup" || e === "signup_verify" ? /* @__PURE__ */ c("p", { class: "text-center text-sm text-gray-600", children: [
|
|
708
|
+
n("auth.have_account", "Already have an account?"),
|
|
701
709
|
" ",
|
|
702
|
-
/* @__PURE__ */
|
|
710
|
+
/* @__PURE__ */ a(W, { onClick: () => r("signin"), children: n("auth.log_in_link", "Log In") })
|
|
703
711
|
] }) : e === "forgot" || e === "reset_sent" || e === "reset_verify" ? /* @__PURE__ */ c("p", { class: "text-center text-sm text-gray-600", children: [
|
|
704
|
-
|
|
712
|
+
n("auth.no_account", "Don't have an account?"),
|
|
705
713
|
" ",
|
|
706
|
-
/* @__PURE__ */
|
|
714
|
+
/* @__PURE__ */ a(W, { onClick: () => r("signup"), children: n("auth.sign_up_link", "Sign Up") })
|
|
707
715
|
] }) : null;
|
|
708
716
|
}
|
|
709
717
|
function W({
|
|
710
718
|
onClick: e,
|
|
711
719
|
children: t
|
|
712
720
|
}) {
|
|
713
|
-
return /* @__PURE__ */
|
|
721
|
+
return /* @__PURE__ */ a(
|
|
714
722
|
"button",
|
|
715
723
|
{
|
|
716
724
|
type: "button",
|
|
@@ -721,8 +729,8 @@ function W({
|
|
|
721
729
|
}
|
|
722
730
|
);
|
|
723
731
|
}
|
|
724
|
-
function
|
|
725
|
-
return /* @__PURE__ */
|
|
732
|
+
function le({ busy: e, label: t }) {
|
|
733
|
+
return /* @__PURE__ */ a(
|
|
726
734
|
"button",
|
|
727
735
|
{
|
|
728
736
|
type: "submit",
|
|
@@ -732,18 +740,18 @@ function ce({ busy: e, label: t }) {
|
|
|
732
740
|
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
741
|
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
742
|
},
|
|
735
|
-
children: e ? /* @__PURE__ */
|
|
743
|
+
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
744
|
}
|
|
737
745
|
);
|
|
738
746
|
}
|
|
739
|
-
function
|
|
740
|
-
return /* @__PURE__ */
|
|
747
|
+
function ft({ type: e, placeholder: t, value: r, onInput: n, autocomplete: i, inputMode: o, required: s }) {
|
|
748
|
+
return /* @__PURE__ */ a(
|
|
741
749
|
"input",
|
|
742
750
|
{
|
|
743
751
|
type: e,
|
|
744
752
|
value: r,
|
|
745
753
|
placeholder: t,
|
|
746
|
-
onInput: (
|
|
754
|
+
onInput: (d) => n(d.target.value),
|
|
747
755
|
autocomplete: i,
|
|
748
756
|
inputMode: o,
|
|
749
757
|
required: s,
|
|
@@ -751,43 +759,43 @@ function mt({ type: e, placeholder: t, value: r, onInput: a, autocomplete: i, in
|
|
|
751
759
|
}
|
|
752
760
|
);
|
|
753
761
|
}
|
|
754
|
-
function tt({ placeholder: e, value: t, onInput: r, autocomplete:
|
|
755
|
-
const { t: o } = v(), [s,
|
|
756
|
-
|
|
757
|
-
const
|
|
758
|
-
|
|
762
|
+
function tt({ placeholder: e, value: t, onInput: r, autocomplete: n, required: i }) {
|
|
763
|
+
const { t: o } = v(), [s, d] = b(!1), l = R(null);
|
|
764
|
+
j(() => {
|
|
765
|
+
const u = l.current;
|
|
766
|
+
u && u.value !== t && (u.value = t);
|
|
759
767
|
}, [s, t]);
|
|
760
|
-
const
|
|
768
|
+
const g = o("auth.show_password", "Show password"), p = o("auth.hide_password", "Hide password");
|
|
761
769
|
return /* @__PURE__ */ c("div", { class: "relative", children: [
|
|
762
|
-
/* @__PURE__ */
|
|
770
|
+
/* @__PURE__ */ a(
|
|
763
771
|
"input",
|
|
764
772
|
{
|
|
765
|
-
ref:
|
|
773
|
+
ref: l,
|
|
766
774
|
type: s ? "text" : "password",
|
|
767
775
|
value: t,
|
|
768
776
|
placeholder: e,
|
|
769
|
-
onInput: (
|
|
770
|
-
autocomplete:
|
|
777
|
+
onInput: (u) => r(u.target.value),
|
|
778
|
+
autocomplete: n,
|
|
771
779
|
required: i,
|
|
772
780
|
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
781
|
}
|
|
774
782
|
),
|
|
775
|
-
/* @__PURE__ */
|
|
783
|
+
/* @__PURE__ */ a(
|
|
776
784
|
"button",
|
|
777
785
|
{
|
|
778
786
|
type: "button",
|
|
779
|
-
onClick: () =>
|
|
780
|
-
"aria-label": s ?
|
|
787
|
+
onClick: () => d((u) => !u),
|
|
788
|
+
"aria-label": s ? p : g,
|
|
781
789
|
tabIndex: -1,
|
|
782
790
|
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__ */
|
|
791
|
+
children: s ? /* @__PURE__ */ a(de, {}) : /* @__PURE__ */ a(ce, {})
|
|
784
792
|
}
|
|
785
793
|
)
|
|
786
794
|
] });
|
|
787
795
|
}
|
|
788
|
-
function
|
|
796
|
+
function ce() {
|
|
789
797
|
return /* @__PURE__ */ c("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
790
|
-
/* @__PURE__ */
|
|
798
|
+
/* @__PURE__ */ a(
|
|
791
799
|
"path",
|
|
792
800
|
{
|
|
793
801
|
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 +805,12 @@ function de() {
|
|
|
797
805
|
"stroke-linejoin": "round"
|
|
798
806
|
}
|
|
799
807
|
),
|
|
800
|
-
/* @__PURE__ */
|
|
808
|
+
/* @__PURE__ */ a("circle", { cx: "10", cy: "10", r: "2.5", stroke: "currentColor", "stroke-width": "1.5" })
|
|
801
809
|
] });
|
|
802
810
|
}
|
|
803
|
-
function
|
|
811
|
+
function de() {
|
|
804
812
|
return /* @__PURE__ */ c("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
805
|
-
/* @__PURE__ */
|
|
813
|
+
/* @__PURE__ */ a(
|
|
806
814
|
"path",
|
|
807
815
|
{
|
|
808
816
|
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 +820,7 @@ function ue() {
|
|
|
812
820
|
"stroke-linejoin": "round"
|
|
813
821
|
}
|
|
814
822
|
),
|
|
815
|
-
/* @__PURE__ */
|
|
823
|
+
/* @__PURE__ */ a(
|
|
816
824
|
"path",
|
|
817
825
|
{
|
|
818
826
|
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,9 +832,9 @@ function ue() {
|
|
|
824
832
|
)
|
|
825
833
|
] });
|
|
826
834
|
}
|
|
827
|
-
function
|
|
835
|
+
function ue({ email: e }) {
|
|
828
836
|
const { t } = v(), r = e ? t("auth.last_used", "Last · {email}", { email: pe(e) }) : t("auth.last_used_no_email", "Last");
|
|
829
|
-
return /* @__PURE__ */
|
|
837
|
+
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
838
|
}
|
|
831
839
|
function pe(e) {
|
|
832
840
|
const [t, r] = e.split("@");
|
|
@@ -835,34 +843,35 @@ function pe(e) {
|
|
|
835
843
|
function he() {
|
|
836
844
|
const { t: e } = v();
|
|
837
845
|
return /* @__PURE__ */ c("div", { class: "flex items-center gap-3 py-1 text-sm text-gray-400", children: [
|
|
838
|
-
/* @__PURE__ */
|
|
839
|
-
/* @__PURE__ */
|
|
840
|
-
/* @__PURE__ */
|
|
846
|
+
/* @__PURE__ */ a("div", { class: "h-px flex-1 bg-gray-200" }),
|
|
847
|
+
/* @__PURE__ */ a("span", { children: e("auth.or", "or") }),
|
|
848
|
+
/* @__PURE__ */ a("div", { class: "h-px flex-1 bg-gray-200" })
|
|
841
849
|
] });
|
|
842
850
|
}
|
|
843
851
|
function ge({ provider: e }) {
|
|
844
852
|
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__ */
|
|
853
|
+
/* @__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" }),
|
|
854
|
+
/* @__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" }),
|
|
855
|
+
/* @__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" }),
|
|
856
|
+
/* @__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
857
|
] }) : e === "apple" ? (
|
|
850
858
|
// viewBox 0 0 24 24 даёт воздух сверху/снизу пути, поэтому визуально
|
|
851
859
|
// Apple-яблоко выглядит меньше Google. Компенсируем увеличенным
|
|
852
860
|
// width/height — 26×26 даёт примерно equal optical size с Google 20×20.
|
|
853
|
-
/* @__PURE__ */
|
|
854
|
-
) : e === "github" ? /* @__PURE__ */
|
|
861
|
+
/* @__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" }) })
|
|
862
|
+
) : 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
863
|
}
|
|
856
864
|
function fe({
|
|
857
865
|
block: e,
|
|
858
866
|
bootstrap: t,
|
|
859
867
|
auth: r,
|
|
860
|
-
authSession:
|
|
868
|
+
authSession: n,
|
|
861
869
|
onBack: i,
|
|
862
870
|
showBack: o = !0,
|
|
863
|
-
intent: s = "preauth"
|
|
871
|
+
intent: s = "preauth",
|
|
872
|
+
initialMode: d
|
|
864
873
|
}) {
|
|
865
|
-
const { t: l } = v(),
|
|
874
|
+
const { t: l } = v(), g = {
|
|
866
875
|
bootstrap: t,
|
|
867
876
|
selectedPriceId: null,
|
|
868
877
|
setSelectedPriceId: () => {
|
|
@@ -870,8 +879,9 @@ function fe({
|
|
|
870
879
|
onAction: () => {
|
|
871
880
|
},
|
|
872
881
|
auth: r,
|
|
873
|
-
authSession:
|
|
874
|
-
|
|
882
|
+
authSession: n,
|
|
883
|
+
initialAuthMode: d
|
|
884
|
+
}, p = s === "restore" ? {
|
|
875
885
|
...e,
|
|
876
886
|
heading: l("auth.restore_purchases_heading", "Restore Purchases"),
|
|
877
887
|
subheading: l(
|
|
@@ -892,12 +902,12 @@ function fe({
|
|
|
892
902
|
submit_label: l("auth.log_in", "Sign In")
|
|
893
903
|
} : e;
|
|
894
904
|
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__ */
|
|
905
|
+
o ? /* @__PURE__ */ a(we, { onClick: i, ariaLabel: l("nav.back_aria", "Back") }) : null,
|
|
906
|
+
/* @__PURE__ */ a(Pt, { block: p, ctx: g })
|
|
897
907
|
] });
|
|
898
908
|
}
|
|
899
909
|
function we({ onClick: e, ariaLabel: t }) {
|
|
900
|
-
return /* @__PURE__ */
|
|
910
|
+
return /* @__PURE__ */ a(
|
|
901
911
|
"button",
|
|
902
912
|
{
|
|
903
913
|
type: "button",
|
|
@@ -905,7 +915,7 @@ function we({ onClick: e, ariaLabel: t }) {
|
|
|
905
915
|
"aria-label": t,
|
|
906
916
|
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
917
|
children: /* @__PURE__ */ c("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
908
|
-
/* @__PURE__ */
|
|
918
|
+
/* @__PURE__ */ a(
|
|
909
919
|
"path",
|
|
910
920
|
{
|
|
911
921
|
d: "M5 8h8a4 4 0 0 1 0 8H9",
|
|
@@ -915,7 +925,7 @@ function we({ onClick: e, ariaLabel: t }) {
|
|
|
915
925
|
"stroke-linejoin": "round"
|
|
916
926
|
}
|
|
917
927
|
),
|
|
918
|
-
/* @__PURE__ */
|
|
928
|
+
/* @__PURE__ */ a(
|
|
919
929
|
"path",
|
|
920
930
|
{
|
|
921
931
|
d: "M8 4 4 8l4 4",
|
|
@@ -929,70 +939,7 @@ function we({ onClick: e, ariaLabel: t }) {
|
|
|
929
939
|
}
|
|
930
940
|
);
|
|
931
941
|
}
|
|
932
|
-
|
|
933
|
-
auth: e,
|
|
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`;
|
|
942
|
+
const Tt = (e) => `pw-offer-${e}-start`;
|
|
996
943
|
function et(e) {
|
|
997
944
|
const t = e - Date.now();
|
|
998
945
|
return t <= 0 ? { days: 0, hours: 0, minutes: 0, seconds: 0, expired: !0 } : {
|
|
@@ -1003,7 +950,7 @@ function et(e) {
|
|
|
1003
950
|
expired: !1
|
|
1004
951
|
};
|
|
1005
952
|
}
|
|
1006
|
-
function
|
|
953
|
+
function me(e) {
|
|
1007
954
|
if (e.expires_at) {
|
|
1008
955
|
const t = Date.parse(e.expires_at);
|
|
1009
956
|
return Number.isFinite(t) ? t : null;
|
|
@@ -1011,7 +958,7 @@ function xe(e) {
|
|
|
1011
958
|
if (e.duration_minutes && e.duration_minutes > 0) {
|
|
1012
959
|
if (typeof window > "u") return null;
|
|
1013
960
|
try {
|
|
1014
|
-
const t =
|
|
961
|
+
const t = Tt(e.id);
|
|
1015
962
|
let r = window.localStorage.getItem(t);
|
|
1016
963
|
return r || (r = (/* @__PURE__ */ new Date()).toISOString(), window.localStorage.setItem(t, r)), Date.parse(r) + e.duration_minutes * 6e4;
|
|
1017
964
|
} catch {
|
|
@@ -1020,39 +967,39 @@ function xe(e) {
|
|
|
1020
967
|
}
|
|
1021
968
|
return null;
|
|
1022
969
|
}
|
|
1023
|
-
function
|
|
970
|
+
function Et(e, t) {
|
|
1024
971
|
if (!e || e.length === 0) return null;
|
|
1025
972
|
if (t) {
|
|
1026
|
-
const r = e.find((
|
|
973
|
+
const r = e.find((n) => n.id === t);
|
|
1027
974
|
if (r) return r;
|
|
1028
975
|
}
|
|
1029
976
|
return e.find((r) => r.expires_at || r.duration_minutes) ?? null;
|
|
1030
977
|
}
|
|
1031
|
-
function
|
|
1032
|
-
const t = e ?
|
|
978
|
+
function jt(e) {
|
|
979
|
+
const t = e ? me(e) : null, [r, n] = b(
|
|
1033
980
|
() => t !== null ? et(t) : null
|
|
1034
|
-
), i =
|
|
1035
|
-
return i.current = t,
|
|
981
|
+
), i = R(t);
|
|
982
|
+
return i.current = t, j(() => {
|
|
1036
983
|
if (t === null) {
|
|
1037
|
-
|
|
984
|
+
n(null);
|
|
1038
985
|
return;
|
|
1039
986
|
}
|
|
1040
|
-
|
|
987
|
+
n(et(t));
|
|
1041
988
|
const o = setInterval(() => {
|
|
1042
989
|
const s = et(i.current ?? 0);
|
|
1043
|
-
if (
|
|
990
|
+
if (n(s), s.expired && (clearInterval(o), e?.duration_minutes && typeof window < "u"))
|
|
1044
991
|
try {
|
|
1045
|
-
window.localStorage.removeItem(
|
|
992
|
+
window.localStorage.removeItem(Tt(e.id));
|
|
1046
993
|
} catch {
|
|
1047
994
|
}
|
|
1048
995
|
}, 1e3);
|
|
1049
996
|
return () => clearInterval(o);
|
|
1050
997
|
}, [t, e?.duration_minutes, e?.id]), r;
|
|
1051
998
|
}
|
|
1052
|
-
function
|
|
1053
|
-
const { t: r } = v(),
|
|
1054
|
-
if (!
|
|
1055
|
-
const o = e.title ??
|
|
999
|
+
function be({ block: e, ctx: t }) {
|
|
1000
|
+
const { t: r } = v(), n = Et(t.bootstrap.offers, e.offer_id), i = jt(n);
|
|
1001
|
+
if (!n || i === null || i.expired && !e.force) return null;
|
|
1002
|
+
const o = e.title ?? n.label ?? r("offer.limited_time", "Limited-time offer"), s = n.discount_percent ? `${o} ${n.discount_percent}%` : o;
|
|
1056
1003
|
return /* @__PURE__ */ c(
|
|
1057
1004
|
"div",
|
|
1058
1005
|
{
|
|
@@ -1063,34 +1010,34 @@ function ve({ block: e, ctx: t }) {
|
|
|
1063
1010
|
},
|
|
1064
1011
|
role: "status",
|
|
1065
1012
|
children: [
|
|
1066
|
-
/* @__PURE__ */
|
|
1067
|
-
/* @__PURE__ */
|
|
1068
|
-
/* @__PURE__ */
|
|
1013
|
+
/* @__PURE__ */ a(Bt, {}),
|
|
1014
|
+
/* @__PURE__ */ a("span", { children: s }),
|
|
1015
|
+
/* @__PURE__ */ a(zt, { value: i, t: r })
|
|
1069
1016
|
]
|
|
1070
1017
|
}
|
|
1071
1018
|
);
|
|
1072
1019
|
}
|
|
1073
|
-
function
|
|
1020
|
+
function zt({ value: e, t }) {
|
|
1074
1021
|
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__ */
|
|
1022
|
+
e.days > 0 ? /* @__PURE__ */ c(at, { children: [
|
|
1023
|
+
/* @__PURE__ */ a(V, { children: String(e.days) }),
|
|
1024
|
+
/* @__PURE__ */ a("span", { class: "text-xs", children: t("countdown.d", "d") })
|
|
1078
1025
|
] }) : null,
|
|
1079
|
-
/* @__PURE__ */
|
|
1080
|
-
/* @__PURE__ */
|
|
1081
|
-
/* @__PURE__ */
|
|
1082
|
-
/* @__PURE__ */
|
|
1083
|
-
/* @__PURE__ */
|
|
1084
|
-
/* @__PURE__ */
|
|
1026
|
+
/* @__PURE__ */ a(V, { children: String(e.hours).padStart(2, "0") }),
|
|
1027
|
+
/* @__PURE__ */ a("span", { class: "text-xs", children: t("countdown.h", "h") }),
|
|
1028
|
+
/* @__PURE__ */ a(V, { children: String(e.minutes).padStart(2, "0") }),
|
|
1029
|
+
/* @__PURE__ */ a("span", { class: "text-xs", children: t("countdown.m", "m") }),
|
|
1030
|
+
/* @__PURE__ */ a(V, { children: String(e.seconds).padStart(2, "0") }),
|
|
1031
|
+
/* @__PURE__ */ a("span", { class: "text-xs", children: t("countdown.s", "s") })
|
|
1085
1032
|
] });
|
|
1086
1033
|
}
|
|
1087
|
-
function
|
|
1088
|
-
return /* @__PURE__ */
|
|
1034
|
+
function V({ children: e }) {
|
|
1035
|
+
return /* @__PURE__ */ a("span", { class: "rounded bg-black/20 px-1.5 py-0.5 text-xs font-bold", children: e });
|
|
1089
1036
|
}
|
|
1090
|
-
function
|
|
1091
|
-
const { t } = v(), r =
|
|
1037
|
+
function xe({ offer: e }) {
|
|
1038
|
+
const { t } = v(), r = jt(e);
|
|
1092
1039
|
if (r === null || r.expired) return null;
|
|
1093
|
-
const
|
|
1040
|
+
const n = e.label ?? t("offer.limited_time", "Limited-time offer"), i = e.discount_percent ? `${n} ${e.discount_percent}%` : n;
|
|
1094
1041
|
return /* @__PURE__ */ c(
|
|
1095
1042
|
"div",
|
|
1096
1043
|
{
|
|
@@ -1101,15 +1048,15 @@ function ye({ offer: e }) {
|
|
|
1101
1048
|
},
|
|
1102
1049
|
role: "status",
|
|
1103
1050
|
children: [
|
|
1104
|
-
/* @__PURE__ */
|
|
1105
|
-
/* @__PURE__ */
|
|
1106
|
-
/* @__PURE__ */
|
|
1051
|
+
/* @__PURE__ */ a(Bt, {}),
|
|
1052
|
+
/* @__PURE__ */ a("span", { children: i }),
|
|
1053
|
+
/* @__PURE__ */ a(zt, { value: r, t })
|
|
1107
1054
|
]
|
|
1108
1055
|
}
|
|
1109
1056
|
);
|
|
1110
1057
|
}
|
|
1111
|
-
function
|
|
1112
|
-
return /* @__PURE__ */
|
|
1058
|
+
function Bt() {
|
|
1059
|
+
return /* @__PURE__ */ a(
|
|
1113
1060
|
"svg",
|
|
1114
1061
|
{
|
|
1115
1062
|
width: "16",
|
|
@@ -1117,7 +1064,7 @@ function Ft() {
|
|
|
1117
1064
|
viewBox: "0 0 12 12",
|
|
1118
1065
|
fill: "none",
|
|
1119
1066
|
"aria-hidden": "true",
|
|
1120
|
-
children: /* @__PURE__ */
|
|
1067
|
+
children: /* @__PURE__ */ a(
|
|
1121
1068
|
"path",
|
|
1122
1069
|
{
|
|
1123
1070
|
fill: "currentColor",
|
|
@@ -1127,44 +1074,41 @@ function Ft() {
|
|
|
1127
1074
|
}
|
|
1128
1075
|
);
|
|
1129
1076
|
}
|
|
1130
|
-
const
|
|
1131
|
-
function
|
|
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", {
|
|
1077
|
+
const wt = 3, mt = 200, bt = 5e3, rt = 5, ye = 10 * 1024 * 1024, xt = ["image/jpeg", "image/png", "image/webp"], ve = /.+@.+\..+/;
|
|
1078
|
+
function ke({ client: e, authSession: t, origin: r, onBack: n }) {
|
|
1079
|
+
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), [z, _] = b(null), [S, T] = b({}), L = () => {
|
|
1080
|
+
const P = {}, M = (s ?? d).trim(), O = g.trim(), N = u.trim();
|
|
1081
|
+
return M ? ve.test(M.toLowerCase()) || (P.email = i("support.invalid_email", "Invalid email")) : P.email = i("support.required", "Required"), (O.length < wt || O.length > mt) && (P.subject = i("support.subject_length", "{min}–{max} characters", {
|
|
1082
|
+
min: wt,
|
|
1083
|
+
max: mt
|
|
1084
|
+
})), (N.length < 1 || N.length > bt) && (P.message = i("support.message_length", "{min}–{max} characters", {
|
|
1141
1085
|
min: 1,
|
|
1142
|
-
max:
|
|
1143
|
-
})),
|
|
1144
|
-
},
|
|
1145
|
-
if (
|
|
1146
|
-
|
|
1086
|
+
max: bt
|
|
1087
|
+
})), T(P), Object.keys(P).length === 0;
|
|
1088
|
+
}, B = async (P) => {
|
|
1089
|
+
if (P.preventDefault(), !h && L()) {
|
|
1090
|
+
m(!0), T((M) => ({ ...M, submit: void 0 }));
|
|
1147
1091
|
try {
|
|
1148
|
-
const
|
|
1092
|
+
const M = (s ?? d).trim();
|
|
1149
1093
|
await e.createSupportTicket({
|
|
1150
|
-
subject:
|
|
1151
|
-
content:
|
|
1152
|
-
email:
|
|
1153
|
-
files:
|
|
1154
|
-
}),
|
|
1155
|
-
} catch (
|
|
1156
|
-
const
|
|
1157
|
-
|
|
1094
|
+
subject: g.trim(),
|
|
1095
|
+
content: u.trim(),
|
|
1096
|
+
email: M || void 0,
|
|
1097
|
+
files: y.length > 0 ? y : void 0
|
|
1098
|
+
}), _(M);
|
|
1099
|
+
} catch (M) {
|
|
1100
|
+
const O = M instanceof F && M.message || "Failed to send. Please try again.";
|
|
1101
|
+
T((N) => ({ ...N, submit: O }));
|
|
1158
1102
|
} finally {
|
|
1159
|
-
|
|
1103
|
+
m(!1);
|
|
1160
1104
|
}
|
|
1161
1105
|
}
|
|
1162
|
-
},
|
|
1163
|
-
|
|
1164
|
-
},
|
|
1165
|
-
return
|
|
1106
|
+
}, E = () => {
|
|
1107
|
+
p(""), x(""), k([]), T({}), _(null);
|
|
1108
|
+
}, U = "flex flex-col gap-3 bg-white px-6 pb-6 pt-3 sm:px-8", D = { boxShadow: "0 -4px 12px -4px rgba(15,23,42,0.06)" };
|
|
1109
|
+
return z ? /* @__PURE__ */ c("div", { class: "relative flex-1 min-h-0 flex flex-col", children: [
|
|
1166
1110
|
/* @__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__ */
|
|
1111
|
+
/* @__PURE__ */ a(
|
|
1168
1112
|
"div",
|
|
1169
1113
|
{
|
|
1170
1114
|
class: "flex h-14 w-14 items-center justify-center rounded-full",
|
|
@@ -1174,7 +1118,7 @@ function _e({ client: e, authSession: t, origin: r, onBack: a }) {
|
|
|
1174
1118
|
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
1119
|
},
|
|
1176
1120
|
"aria-hidden": "true",
|
|
1177
|
-
children: /* @__PURE__ */
|
|
1121
|
+
children: /* @__PURE__ */ a("svg", { viewBox: "0 0 24 24", class: "h-7 w-7", children: /* @__PURE__ */ a(
|
|
1178
1122
|
"path",
|
|
1179
1123
|
{
|
|
1180
1124
|
fill: "currentColor",
|
|
@@ -1183,32 +1127,32 @@ function _e({ client: e, authSession: t, origin: r, onBack: a }) {
|
|
|
1183
1127
|
) })
|
|
1184
1128
|
}
|
|
1185
1129
|
),
|
|
1186
|
-
/* @__PURE__ */
|
|
1130
|
+
/* @__PURE__ */ a("div", { class: "text-lg font-semibold tracking-tight text-gray-900", children: i("support.success_heading", "Request submitted") }),
|
|
1187
1131
|
/* @__PURE__ */ c("div", { class: "max-w-[320px] text-sm leading-relaxed text-gray-500", children: [
|
|
1188
1132
|
i(
|
|
1189
1133
|
"support.success_message_prefix",
|
|
1190
1134
|
"We've received your message and will respond to"
|
|
1191
1135
|
),
|
|
1192
1136
|
" ",
|
|
1193
|
-
/* @__PURE__ */
|
|
1137
|
+
/* @__PURE__ */ a("b", { class: "text-gray-700", children: z }),
|
|
1194
1138
|
"."
|
|
1195
1139
|
] })
|
|
1196
1140
|
] }),
|
|
1197
|
-
/* @__PURE__ */
|
|
1198
|
-
/* @__PURE__ */
|
|
1141
|
+
/* @__PURE__ */ a("div", { class: U, style: D, children: /* @__PURE__ */ c("div", { class: "flex items-center justify-center gap-3", children: [
|
|
1142
|
+
/* @__PURE__ */ a(
|
|
1199
1143
|
"button",
|
|
1200
1144
|
{
|
|
1201
1145
|
type: "button",
|
|
1202
|
-
onClick:
|
|
1146
|
+
onClick: n,
|
|
1203
1147
|
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
1148
|
children: r === "standalone" ? i("support.done_button", "Done") : i("nav.back_aria", "Back")
|
|
1205
1149
|
}
|
|
1206
1150
|
),
|
|
1207
|
-
/* @__PURE__ */
|
|
1151
|
+
/* @__PURE__ */ a(
|
|
1208
1152
|
"button",
|
|
1209
1153
|
{
|
|
1210
1154
|
type: "button",
|
|
1211
|
-
onClick:
|
|
1155
|
+
onClick: E,
|
|
1212
1156
|
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
1157
|
style: {
|
|
1214
1158
|
background: "linear-gradient(180deg, color-mix(in srgb, var(--pw-accent) 92%, white), var(--pw-accent))",
|
|
@@ -1218,86 +1162,86 @@ function _e({ client: e, authSession: t, origin: r, onBack: a }) {
|
|
|
1218
1162
|
}
|
|
1219
1163
|
)
|
|
1220
1164
|
] }) })
|
|
1221
|
-
] }) : /* @__PURE__ */ c("form", { onSubmit:
|
|
1222
|
-
/* @__PURE__ */
|
|
1223
|
-
/* @__PURE__ */
|
|
1165
|
+
] }) : /* @__PURE__ */ c("form", { onSubmit: B, class: "relative flex-1 min-h-0 flex flex-col", children: [
|
|
1166
|
+
/* @__PURE__ */ a(_e, { onClick: n, ariaLabel: i("nav.back_aria", "Back") }),
|
|
1167
|
+
/* @__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
1168
|
/* @__PURE__ */ c("div", { class: "flex flex-col gap-2 pr-10", children: [
|
|
1225
|
-
/* @__PURE__ */
|
|
1226
|
-
/* @__PURE__ */
|
|
1169
|
+
/* @__PURE__ */ a("h2", { class: "text-3xl font-bold tracking-tight text-gray-900", children: i("support.heading", "Support") }),
|
|
1170
|
+
/* @__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
1171
|
] }),
|
|
1228
1172
|
/* @__PURE__ */ c("div", { class: "flex flex-col gap-3", children: [
|
|
1229
1173
|
s ? /* @__PURE__ */ c("div", { class: "rounded-2xl bg-gray-100 px-5 py-3 text-sm text-gray-600", children: [
|
|
1230
1174
|
i("support.sending_as", "Sending as"),
|
|
1231
1175
|
" ",
|
|
1232
|
-
/* @__PURE__ */
|
|
1233
|
-
] }) : /* @__PURE__ */
|
|
1176
|
+
/* @__PURE__ */ a("b", { class: "font-medium text-gray-900", children: s })
|
|
1177
|
+
] }) : /* @__PURE__ */ a(
|
|
1234
1178
|
yt,
|
|
1235
1179
|
{
|
|
1236
1180
|
type: "email",
|
|
1237
1181
|
placeholder: i("support.email_placeholder", "Enter your email *"),
|
|
1238
|
-
value:
|
|
1239
|
-
onInput:
|
|
1240
|
-
error:
|
|
1182
|
+
value: d,
|
|
1183
|
+
onInput: l,
|
|
1184
|
+
error: S.email,
|
|
1241
1185
|
autocomplete: "email",
|
|
1242
1186
|
required: !0
|
|
1243
1187
|
}
|
|
1244
1188
|
),
|
|
1245
|
-
/* @__PURE__ */
|
|
1189
|
+
/* @__PURE__ */ a(
|
|
1246
1190
|
yt,
|
|
1247
1191
|
{
|
|
1248
1192
|
type: "text",
|
|
1249
1193
|
placeholder: i("support.subject_placeholder", "Enter your subject *"),
|
|
1250
|
-
value:
|
|
1251
|
-
onInput:
|
|
1252
|
-
error:
|
|
1194
|
+
value: g,
|
|
1195
|
+
onInput: p,
|
|
1196
|
+
error: S.subject,
|
|
1253
1197
|
required: !0
|
|
1254
1198
|
}
|
|
1255
1199
|
),
|
|
1256
|
-
/* @__PURE__ */
|
|
1257
|
-
|
|
1200
|
+
/* @__PURE__ */ a(
|
|
1201
|
+
Se,
|
|
1258
1202
|
{
|
|
1259
1203
|
placeholder: i("support.message_placeholder", "Enter your message *"),
|
|
1260
|
-
value:
|
|
1204
|
+
value: u,
|
|
1261
1205
|
onInput: x,
|
|
1262
|
-
error:
|
|
1206
|
+
error: S.message,
|
|
1263
1207
|
required: !0
|
|
1264
1208
|
}
|
|
1265
1209
|
),
|
|
1266
|
-
/* @__PURE__ */
|
|
1210
|
+
/* @__PURE__ */ a(Ce, { files: y, onChange: k, disabled: h })
|
|
1267
1211
|
] })
|
|
1268
1212
|
] }) }),
|
|
1269
|
-
/* @__PURE__ */ c("div", { class:
|
|
1270
|
-
|
|
1213
|
+
/* @__PURE__ */ c("div", { class: U, style: D, children: [
|
|
1214
|
+
S.submit && /* @__PURE__ */ a("p", { class: "text-sm text-red-600", children: S.submit }),
|
|
1271
1215
|
/* @__PURE__ */ c("div", { class: "flex items-center justify-end gap-3", children: [
|
|
1272
|
-
/* @__PURE__ */
|
|
1216
|
+
/* @__PURE__ */ a(
|
|
1273
1217
|
"button",
|
|
1274
1218
|
{
|
|
1275
1219
|
type: "button",
|
|
1276
|
-
onClick:
|
|
1277
|
-
disabled:
|
|
1220
|
+
onClick: n,
|
|
1221
|
+
disabled: h,
|
|
1278
1222
|
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
1223
|
children: r === "standalone" ? i("support.close_button", "Close") : i("nav.back_aria", "Back")
|
|
1280
1224
|
}
|
|
1281
1225
|
),
|
|
1282
|
-
/* @__PURE__ */
|
|
1226
|
+
/* @__PURE__ */ a(
|
|
1283
1227
|
"button",
|
|
1284
1228
|
{
|
|
1285
1229
|
type: "submit",
|
|
1286
|
-
disabled:
|
|
1230
|
+
disabled: h,
|
|
1287
1231
|
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
1232
|
style: {
|
|
1289
1233
|
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
1234
|
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
1235
|
},
|
|
1292
|
-
children:
|
|
1236
|
+
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
1237
|
}
|
|
1294
1238
|
)
|
|
1295
1239
|
] })
|
|
1296
1240
|
] })
|
|
1297
1241
|
] });
|
|
1298
1242
|
}
|
|
1299
|
-
function
|
|
1300
|
-
return /* @__PURE__ */
|
|
1243
|
+
function _e({ onClick: e, ariaLabel: t }) {
|
|
1244
|
+
return /* @__PURE__ */ a(
|
|
1301
1245
|
"button",
|
|
1302
1246
|
{
|
|
1303
1247
|
type: "button",
|
|
@@ -1305,7 +1249,7 @@ function Se({ onClick: e, ariaLabel: t }) {
|
|
|
1305
1249
|
"aria-label": t,
|
|
1306
1250
|
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
1251
|
children: /* @__PURE__ */ c("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
1308
|
-
/* @__PURE__ */
|
|
1252
|
+
/* @__PURE__ */ a(
|
|
1309
1253
|
"path",
|
|
1310
1254
|
{
|
|
1311
1255
|
d: "M5 8h8a4 4 0 0 1 0 8H9",
|
|
@@ -1315,7 +1259,7 @@ function Se({ onClick: e, ariaLabel: t }) {
|
|
|
1315
1259
|
"stroke-linejoin": "round"
|
|
1316
1260
|
}
|
|
1317
1261
|
),
|
|
1318
|
-
/* @__PURE__ */
|
|
1262
|
+
/* @__PURE__ */ a(
|
|
1319
1263
|
"path",
|
|
1320
1264
|
{
|
|
1321
1265
|
d: "M8 4 4 8l4 4",
|
|
@@ -1333,36 +1277,36 @@ function yt({
|
|
|
1333
1277
|
type: e,
|
|
1334
1278
|
placeholder: t,
|
|
1335
1279
|
value: r,
|
|
1336
|
-
onInput:
|
|
1280
|
+
onInput: n,
|
|
1337
1281
|
error: i,
|
|
1338
1282
|
autocomplete: o,
|
|
1339
1283
|
required: s
|
|
1340
1284
|
}) {
|
|
1341
1285
|
return /* @__PURE__ */ c("div", { children: [
|
|
1342
|
-
/* @__PURE__ */
|
|
1286
|
+
/* @__PURE__ */ a(
|
|
1343
1287
|
"input",
|
|
1344
1288
|
{
|
|
1345
1289
|
type: e,
|
|
1346
1290
|
value: r,
|
|
1347
1291
|
placeholder: t,
|
|
1348
|
-
onInput: (
|
|
1292
|
+
onInput: (d) => n(d.target.value),
|
|
1349
1293
|
autocomplete: o,
|
|
1350
1294
|
required: s,
|
|
1351
1295
|
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
1296
|
}
|
|
1353
1297
|
),
|
|
1354
|
-
i && /* @__PURE__ */
|
|
1298
|
+
i && /* @__PURE__ */ a("span", { class: "mt-1 ml-2 block text-sm text-red-600", children: i })
|
|
1355
1299
|
] });
|
|
1356
1300
|
}
|
|
1357
|
-
function
|
|
1301
|
+
function Se({
|
|
1358
1302
|
placeholder: e,
|
|
1359
1303
|
value: t,
|
|
1360
1304
|
onInput: r,
|
|
1361
|
-
error:
|
|
1305
|
+
error: n,
|
|
1362
1306
|
required: i
|
|
1363
1307
|
}) {
|
|
1364
1308
|
return /* @__PURE__ */ c("div", { children: [
|
|
1365
|
-
/* @__PURE__ */
|
|
1309
|
+
/* @__PURE__ */ a(
|
|
1366
1310
|
"textarea",
|
|
1367
1311
|
{
|
|
1368
1312
|
value: t,
|
|
@@ -1370,56 +1314,56 @@ function Ce({
|
|
|
1370
1314
|
onInput: (o) => r(o.target.value),
|
|
1371
1315
|
required: i,
|
|
1372
1316
|
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 ${
|
|
1317
|
+
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
1318
|
}
|
|
1375
1319
|
),
|
|
1376
|
-
|
|
1320
|
+
n && /* @__PURE__ */ a("span", { class: "mt-1 ml-2 block text-sm text-red-600", children: n })
|
|
1377
1321
|
] });
|
|
1378
1322
|
}
|
|
1379
|
-
function
|
|
1380
|
-
const { t:
|
|
1381
|
-
if (!
|
|
1382
|
-
|
|
1383
|
-
const
|
|
1384
|
-
if (e.length +
|
|
1385
|
-
|
|
1323
|
+
function Ce({ files: e, onChange: t, disabled: r }) {
|
|
1324
|
+
const { t: n } = v(), i = R(null), [o, s] = b(!1), [d, l] = b(null), g = (p) => {
|
|
1325
|
+
if (!p || r) return;
|
|
1326
|
+
l(null);
|
|
1327
|
+
const u = Array.from(p);
|
|
1328
|
+
if (e.length + u.length > rt) {
|
|
1329
|
+
l(n("support.too_many_files", "Up to {max} files", { max: rt }));
|
|
1386
1330
|
return;
|
|
1387
1331
|
}
|
|
1388
|
-
const x =
|
|
1389
|
-
(
|
|
1332
|
+
const x = u.filter(
|
|
1333
|
+
(y) => xt.includes(y.type) && y.size <= ye
|
|
1390
1334
|
);
|
|
1391
|
-
if (x.length !==
|
|
1392
|
-
|
|
1335
|
+
if (x.length !== u.length) {
|
|
1336
|
+
l(n("support.invalid_file", "Only JPEG/PNG/WebP, ≤ 10MB each"));
|
|
1393
1337
|
return;
|
|
1394
1338
|
}
|
|
1395
1339
|
t([...e, ...x]);
|
|
1396
1340
|
};
|
|
1397
1341
|
return /* @__PURE__ */ c("div", { children: [
|
|
1398
|
-
/* @__PURE__ */
|
|
1342
|
+
/* @__PURE__ */ a("span", { class: "text-xs font-medium text-gray-700", children: n("support.attachments_label", "Attachments (optional)") }),
|
|
1399
1343
|
/* @__PURE__ */ c(
|
|
1400
1344
|
"div",
|
|
1401
1345
|
{
|
|
1402
1346
|
role: "button",
|
|
1403
1347
|
tabIndex: 0,
|
|
1404
|
-
"aria-label":
|
|
1348
|
+
"aria-label": n("support.attachments_aria", "Attachments upload"),
|
|
1405
1349
|
onClick: () => !r && i.current?.click(),
|
|
1406
|
-
onDragOver: (
|
|
1407
|
-
|
|
1350
|
+
onDragOver: (p) => {
|
|
1351
|
+
p.preventDefault(), r || s(!0);
|
|
1408
1352
|
},
|
|
1409
1353
|
onDragLeave: () => s(!1),
|
|
1410
|
-
onDrop: (
|
|
1411
|
-
|
|
1354
|
+
onDrop: (p) => {
|
|
1355
|
+
p.preventDefault(), s(!1), g(p.dataTransfer?.files ?? null);
|
|
1412
1356
|
},
|
|
1413
1357
|
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
1358
|
children: [
|
|
1415
|
-
/* @__PURE__ */
|
|
1416
|
-
/* @__PURE__ */
|
|
1417
|
-
max:
|
|
1359
|
+
/* @__PURE__ */ a("div", { class: "text-xs text-gray-500", children: n("support.dropzone_text", "Drop images here or click to select") }),
|
|
1360
|
+
/* @__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", {
|
|
1361
|
+
max: rt
|
|
1418
1362
|
}) })
|
|
1419
1363
|
]
|
|
1420
1364
|
}
|
|
1421
1365
|
),
|
|
1422
|
-
/* @__PURE__ */
|
|
1366
|
+
/* @__PURE__ */ a(
|
|
1423
1367
|
"input",
|
|
1424
1368
|
{
|
|
1425
1369
|
ref: i,
|
|
@@ -1427,66 +1371,66 @@ function Ie({ files: e, onChange: t, disabled: r }) {
|
|
|
1427
1371
|
multiple: !0,
|
|
1428
1372
|
accept: xt.join(","),
|
|
1429
1373
|
class: "hidden",
|
|
1430
|
-
onChange: (
|
|
1431
|
-
|
|
1374
|
+
onChange: (p) => {
|
|
1375
|
+
g(p.target.files), p.currentTarget.value = "";
|
|
1432
1376
|
}
|
|
1433
1377
|
}
|
|
1434
1378
|
),
|
|
1435
|
-
|
|
1436
|
-
e.length > 0 && /* @__PURE__ */
|
|
1379
|
+
d && /* @__PURE__ */ a("p", { class: "mt-1 text-xs text-red-600", children: d }),
|
|
1380
|
+
e.length > 0 && /* @__PURE__ */ a("ul", { class: "mt-2 flex flex-col gap-1", children: e.map((p, u) => /* @__PURE__ */ c(
|
|
1437
1381
|
"li",
|
|
1438
1382
|
{
|
|
1439
1383
|
class: "flex items-center justify-between gap-2 rounded bg-gray-50 px-2 py-1 text-xs",
|
|
1440
1384
|
children: [
|
|
1441
|
-
/* @__PURE__ */
|
|
1442
|
-
/* @__PURE__ */
|
|
1385
|
+
/* @__PURE__ */ a("span", { class: "truncate text-gray-700", children: p.name }),
|
|
1386
|
+
/* @__PURE__ */ a(
|
|
1443
1387
|
"button",
|
|
1444
1388
|
{
|
|
1445
1389
|
type: "button",
|
|
1446
1390
|
onClick: () => {
|
|
1447
1391
|
const x = [...e];
|
|
1448
|
-
x.splice(
|
|
1392
|
+
x.splice(u, 1), t(x);
|
|
1449
1393
|
},
|
|
1450
1394
|
disabled: r,
|
|
1451
1395
|
class: "text-gray-500 hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-60",
|
|
1452
|
-
"aria-label":
|
|
1396
|
+
"aria-label": n("support.remove_file_aria", "Remove {filename}", { filename: p.name }),
|
|
1453
1397
|
children: "✕"
|
|
1454
1398
|
}
|
|
1455
1399
|
)
|
|
1456
1400
|
]
|
|
1457
1401
|
},
|
|
1458
|
-
`${
|
|
1402
|
+
`${p.name}-${p.size}-${u}`
|
|
1459
1403
|
)) })
|
|
1460
1404
|
] });
|
|
1461
1405
|
}
|
|
1462
|
-
const
|
|
1406
|
+
const Ie = {
|
|
1463
1407
|
day: "cta.get_plan_daily",
|
|
1464
1408
|
week: "cta.get_plan_weekly",
|
|
1465
1409
|
month: "cta.get_plan_monthly",
|
|
1466
1410
|
year: "cta.get_plan_yearly"
|
|
1467
|
-
},
|
|
1411
|
+
}, Ae = {
|
|
1468
1412
|
day: "Get Daily Plan",
|
|
1469
1413
|
week: "Get Weekly Plan",
|
|
1470
1414
|
month: "Get Monthly Plan",
|
|
1471
1415
|
year: "Get Yearly Plan"
|
|
1472
1416
|
};
|
|
1473
|
-
function
|
|
1474
|
-
if (t === "close") return
|
|
1475
|
-
if (!e) return
|
|
1417
|
+
function Me(e, t, r, n) {
|
|
1418
|
+
if (t === "close") return n("cta.close", "Close");
|
|
1419
|
+
if (!e) return n("cta.continue", "Continue");
|
|
1476
1420
|
if (!r && e.trial_days && e.interval && e.interval !== "lifetime")
|
|
1477
|
-
return
|
|
1421
|
+
return n("cta.start_trial", "Start {days}-Day Free Trial", { days: e.trial_days });
|
|
1478
1422
|
if (!e.interval || e.interval === "lifetime")
|
|
1479
|
-
return
|
|
1480
|
-
const i =
|
|
1481
|
-
return i ?
|
|
1482
|
-
interval:
|
|
1423
|
+
return n("cta.get_lifetime_access", "Get Lifetime Access");
|
|
1424
|
+
const i = Ie[e.interval];
|
|
1425
|
+
return i ? n(i, Ae[e.interval]) : n("cta.get_plan_generic", "Get {interval} Plan", {
|
|
1426
|
+
interval: Le(e.interval)
|
|
1483
1427
|
});
|
|
1484
1428
|
}
|
|
1485
|
-
function
|
|
1429
|
+
function Le(e) {
|
|
1486
1430
|
return e.length ? e[0].toUpperCase() + e.slice(1) : e;
|
|
1487
1431
|
}
|
|
1488
|
-
function
|
|
1489
|
-
const { t: r } = v(), [
|
|
1432
|
+
function Pe({ block: e, ctx: t }) {
|
|
1433
|
+
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 ?? Me(d, e.action, l, r);
|
|
1490
1434
|
return /* @__PURE__ */ c(
|
|
1491
1435
|
"button",
|
|
1492
1436
|
{
|
|
@@ -1508,7 +1452,7 @@ function Te({ block: e, ctx: t }) {
|
|
|
1508
1452
|
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
1453
|
},
|
|
1510
1454
|
children: [
|
|
1511
|
-
/* @__PURE__ */
|
|
1455
|
+
/* @__PURE__ */ a(
|
|
1512
1456
|
"span",
|
|
1513
1457
|
{
|
|
1514
1458
|
class: "absolute inset-0 opacity-40",
|
|
@@ -1518,19 +1462,19 @@ function Te({ block: e, ctx: t }) {
|
|
|
1518
1462
|
"aria-hidden": "true"
|
|
1519
1463
|
}
|
|
1520
1464
|
),
|
|
1521
|
-
|
|
1465
|
+
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
1466
|
]
|
|
1523
1467
|
}
|
|
1524
1468
|
);
|
|
1525
1469
|
}
|
|
1526
|
-
function
|
|
1527
|
-
const { t } = v(), r = e.authSession,
|
|
1470
|
+
function Te({ ctx: e }) {
|
|
1471
|
+
const { t } = v(), r = e.authSession, n = e.auth, [i, o] = b(!1), s = () => e.onAction("support");
|
|
1528
1472
|
if (r && !r.user.is_anonymous) {
|
|
1529
|
-
const
|
|
1530
|
-
if (!(!
|
|
1473
|
+
const d = async () => {
|
|
1474
|
+
if (!(!n || i)) {
|
|
1531
1475
|
o(!0);
|
|
1532
1476
|
try {
|
|
1533
|
-
await
|
|
1477
|
+
await n.signOut();
|
|
1534
1478
|
} catch {
|
|
1535
1479
|
} finally {
|
|
1536
1480
|
o(!1);
|
|
@@ -1541,19 +1485,19 @@ function Ee({ ctx: e }) {
|
|
|
1541
1485
|
/* @__PURE__ */ c("span", { children: [
|
|
1542
1486
|
t("session.signed_in_as_prefix", "Signed in as"),
|
|
1543
1487
|
" ",
|
|
1544
|
-
/* @__PURE__ */
|
|
1488
|
+
/* @__PURE__ */ a("b", { class: "font-medium text-gray-700", children: r.user.email })
|
|
1545
1489
|
] }),
|
|
1546
1490
|
/* @__PURE__ */ c("div", { class: "flex items-center justify-center gap-3", children: [
|
|
1547
|
-
/* @__PURE__ */
|
|
1548
|
-
/* @__PURE__ */
|
|
1549
|
-
/* @__PURE__ */
|
|
1491
|
+
/* @__PURE__ */ a(G, { onClick: d, disabled: !n || i, children: i ? t("session.signing_out", "Signing out…") : t("session.sign_out", "Sign Out") }),
|
|
1492
|
+
/* @__PURE__ */ a(vt, {}),
|
|
1493
|
+
/* @__PURE__ */ a(G, { onClick: s, children: t("session.contact_support", "Contact Support") })
|
|
1550
1494
|
] })
|
|
1551
1495
|
] });
|
|
1552
1496
|
}
|
|
1553
1497
|
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__ */
|
|
1498
|
+
/* @__PURE__ */ a(G, { onClick: () => e.onAction("restore"), children: t("session.restore_purchases", "Restore purchases") }),
|
|
1499
|
+
/* @__PURE__ */ a(vt, {}),
|
|
1500
|
+
/* @__PURE__ */ a(G, { onClick: s, children: t("session.contact_support", "Contact Support") })
|
|
1557
1501
|
] });
|
|
1558
1502
|
}
|
|
1559
1503
|
function G({
|
|
@@ -1561,7 +1505,7 @@ function G({
|
|
|
1561
1505
|
disabled: t,
|
|
1562
1506
|
children: r
|
|
1563
1507
|
}) {
|
|
1564
|
-
return /* @__PURE__ */
|
|
1508
|
+
return /* @__PURE__ */ a(
|
|
1565
1509
|
"button",
|
|
1566
1510
|
{
|
|
1567
1511
|
type: "button",
|
|
@@ -1573,12 +1517,12 @@ function G({
|
|
|
1573
1517
|
}
|
|
1574
1518
|
);
|
|
1575
1519
|
}
|
|
1576
|
-
function
|
|
1577
|
-
return /* @__PURE__ */
|
|
1520
|
+
function vt() {
|
|
1521
|
+
return /* @__PURE__ */ a("span", { class: "h-1 w-1 rounded-full bg-gray-300", "aria-hidden": "true" });
|
|
1578
1522
|
}
|
|
1579
|
-
function
|
|
1580
|
-
return e.items.length ? /* @__PURE__ */
|
|
1581
|
-
/* @__PURE__ */
|
|
1523
|
+
function Ee({ block: e }) {
|
|
1524
|
+
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: [
|
|
1525
|
+
/* @__PURE__ */ a(
|
|
1582
1526
|
"svg",
|
|
1583
1527
|
{
|
|
1584
1528
|
width: "18",
|
|
@@ -1587,7 +1531,7 @@ function je({ block: e }) {
|
|
|
1587
1531
|
fill: "none",
|
|
1588
1532
|
class: "mt-0.5 flex-shrink-0 text-emerald-500",
|
|
1589
1533
|
"aria-hidden": "true",
|
|
1590
|
-
children: /* @__PURE__ */
|
|
1534
|
+
children: /* @__PURE__ */ a(
|
|
1591
1535
|
"path",
|
|
1592
1536
|
{
|
|
1593
1537
|
d: "M4 10.5l3.5 3.5 8.5-8.5",
|
|
@@ -1600,30 +1544,30 @@ function je({ block: e }) {
|
|
|
1600
1544
|
}
|
|
1601
1545
|
),
|
|
1602
1546
|
/* @__PURE__ */ c("div", { class: "flex flex-col gap-0.5", children: [
|
|
1603
|
-
/* @__PURE__ */
|
|
1604
|
-
t.desc ? /* @__PURE__ */
|
|
1547
|
+
/* @__PURE__ */ a("span", { class: "font-medium leading-snug text-gray-900", children: t.name }),
|
|
1548
|
+
t.desc ? /* @__PURE__ */ a("span", { class: "text-xs leading-relaxed text-gray-400", children: t.desc }) : null
|
|
1605
1549
|
] })
|
|
1606
1550
|
] }, t.id)) }) : null;
|
|
1607
1551
|
}
|
|
1608
|
-
function
|
|
1609
|
-
const { t } = v(), r = e.title ?? t("pricing.money_back", "30-day money-back guarantee"),
|
|
1552
|
+
function je({ block: e }) {
|
|
1553
|
+
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 = ze(r);
|
|
1610
1554
|
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
1555
|
/* @__PURE__ */ c("div", { class: "inline-flex items-center gap-2 text-[12px] text-gray-700", children: [
|
|
1612
|
-
i ? /* @__PURE__ */
|
|
1556
|
+
i ? /* @__PURE__ */ a(Be, {}) : null,
|
|
1613
1557
|
o ? /* @__PURE__ */ c("span", { children: [
|
|
1614
|
-
/* @__PURE__ */
|
|
1558
|
+
/* @__PURE__ */ a("b", { class: "font-bold text-gray-900", children: o.bold }),
|
|
1615
1559
|
" ",
|
|
1616
|
-
/* @__PURE__ */
|
|
1617
|
-
] }) : /* @__PURE__ */
|
|
1560
|
+
/* @__PURE__ */ a("span", { class: "font-medium", children: o.rest })
|
|
1561
|
+
] }) : /* @__PURE__ */ a("span", { class: "font-medium", children: r })
|
|
1618
1562
|
] }),
|
|
1619
|
-
|
|
1563
|
+
n ? /* @__PURE__ */ a("span", { class: "text-center text-xs leading-relaxed text-gray-500", children: n }) : null
|
|
1620
1564
|
] });
|
|
1621
1565
|
}
|
|
1622
|
-
function
|
|
1566
|
+
function ze(e) {
|
|
1623
1567
|
const t = e.match(/^(\d+[-\s]?days?)\s+(.+)$/i);
|
|
1624
1568
|
return t ? { bold: t[1], rest: t[2] } : null;
|
|
1625
1569
|
}
|
|
1626
|
-
function
|
|
1570
|
+
function Be() {
|
|
1627
1571
|
return /* @__PURE__ */ c(
|
|
1628
1572
|
"svg",
|
|
1629
1573
|
{
|
|
@@ -1635,7 +1579,7 @@ function Oe() {
|
|
|
1635
1579
|
class: "flex-shrink-0 text-emerald-500",
|
|
1636
1580
|
"aria-hidden": "true",
|
|
1637
1581
|
children: [
|
|
1638
|
-
/* @__PURE__ */
|
|
1582
|
+
/* @__PURE__ */ a(
|
|
1639
1583
|
"path",
|
|
1640
1584
|
{
|
|
1641
1585
|
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 +1588,7 @@ function Oe() {
|
|
|
1644
1588
|
"stroke-linejoin": "round"
|
|
1645
1589
|
}
|
|
1646
1590
|
),
|
|
1647
|
-
/* @__PURE__ */
|
|
1591
|
+
/* @__PURE__ */ a(
|
|
1648
1592
|
"path",
|
|
1649
1593
|
{
|
|
1650
1594
|
d: "m9 12 2 2 4-4",
|
|
@@ -1658,22 +1602,22 @@ function Oe() {
|
|
|
1658
1602
|
}
|
|
1659
1603
|
);
|
|
1660
1604
|
}
|
|
1661
|
-
const
|
|
1662
|
-
function
|
|
1663
|
-
const r = t *
|
|
1664
|
-
let
|
|
1665
|
-
for (e.style.fontSize = `${
|
|
1666
|
-
|
|
1605
|
+
const Ot = 24, Oe = 16, Fe = 2;
|
|
1606
|
+
function Re(e, t) {
|
|
1607
|
+
const r = t * Fe;
|
|
1608
|
+
let n = Ot;
|
|
1609
|
+
for (e.style.fontSize = `${n}px`; e.scrollHeight > r && n > Oe; )
|
|
1610
|
+
n -= 1, e.style.fontSize = `${n}px`;
|
|
1667
1611
|
}
|
|
1668
|
-
function
|
|
1669
|
-
const r = e.level ?? 1,
|
|
1670
|
-
return
|
|
1612
|
+
function Ue({ block: e, ctx: t }) {
|
|
1613
|
+
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 = R(null), s = r === 1 && !!t.bootstrap.settings.title_auto_fit;
|
|
1614
|
+
return j(() => {
|
|
1671
1615
|
if (!s || !o.current) return;
|
|
1672
|
-
const
|
|
1673
|
-
|
|
1674
|
-
}, [s, e.text]), /* @__PURE__ */ n
|
|
1616
|
+
const d = getComputedStyle(o.current), l = parseFloat(d.lineHeight) || Ot * 1.5;
|
|
1617
|
+
Re(o.current, l);
|
|
1618
|
+
}, [s, e.text]), /* @__PURE__ */ a(n, { ref: o, class: i, children: e.text });
|
|
1675
1619
|
}
|
|
1676
|
-
function
|
|
1620
|
+
function De(e) {
|
|
1677
1621
|
const t = e.local ?? { currency: e.currency, amount: e.amount };
|
|
1678
1622
|
if (e.interval === "year") {
|
|
1679
1623
|
const r = (e.interval_count ?? 1) * 12;
|
|
@@ -1681,10 +1625,10 @@ function Ne(e) {
|
|
|
1681
1625
|
}
|
|
1682
1626
|
return { amount: t.amount, currency: t.currency };
|
|
1683
1627
|
}
|
|
1684
|
-
function
|
|
1628
|
+
function it(e, t) {
|
|
1685
1629
|
const r = e % 1 !== 0 ? 2 : 0;
|
|
1686
1630
|
try {
|
|
1687
|
-
const
|
|
1631
|
+
const n = new Intl.NumberFormat(void 0, {
|
|
1688
1632
|
style: "currency",
|
|
1689
1633
|
currency: t,
|
|
1690
1634
|
currencyDisplay: "narrowSymbol",
|
|
@@ -1692,20 +1636,20 @@ function ot(e, t) {
|
|
|
1692
1636
|
minimumFractionDigits: r
|
|
1693
1637
|
}).formatToParts(e);
|
|
1694
1638
|
let i = "", o = "";
|
|
1695
|
-
for (const s of
|
|
1639
|
+
for (const s of n)
|
|
1696
1640
|
s.type === "currency" ? i = s.value : s.type !== "literal" && (o += s.value);
|
|
1697
1641
|
return { currency: i || t, amount: o.trim() };
|
|
1698
1642
|
} catch {
|
|
1699
1643
|
return { currency: t, amount: String(e) };
|
|
1700
1644
|
}
|
|
1701
1645
|
}
|
|
1702
|
-
function
|
|
1703
|
-
const { amount: r, currency:
|
|
1646
|
+
function ot(e, t) {
|
|
1647
|
+
const { amount: r, currency: n } = De(e);
|
|
1704
1648
|
if (!t) {
|
|
1705
|
-
const { currency:
|
|
1706
|
-
return { currency:
|
|
1649
|
+
const { currency: d, amount: l } = it(r, n);
|
|
1650
|
+
return { currency: d, amount: l, originalAmount: null };
|
|
1707
1651
|
}
|
|
1708
|
-
const i = r * (1 - t / 100), o =
|
|
1652
|
+
const i = r * (1 - t / 100), o = it(i, n), s = it(r, n);
|
|
1709
1653
|
return {
|
|
1710
1654
|
currency: o.currency,
|
|
1711
1655
|
amount: o.amount,
|
|
@@ -1721,42 +1665,42 @@ function q(e, t) {
|
|
|
1721
1665
|
(i) => i.price_id == null && i.discount_percent && i.discount_percent > 0
|
|
1722
1666
|
) ?? null);
|
|
1723
1667
|
}
|
|
1724
|
-
function
|
|
1668
|
+
function Ft(e, t) {
|
|
1725
1669
|
if (e.label) return e.label.toUpperCase();
|
|
1726
1670
|
if (!e.interval || e.interval === "lifetime")
|
|
1727
1671
|
return t("pricing.plan_label.lifetime", "LIFETIME");
|
|
1728
|
-
const
|
|
1672
|
+
const n = {
|
|
1729
1673
|
day: { key: "pricing.plan_label.daily", fallback: "DAILY PLAN" },
|
|
1730
1674
|
week: { key: "pricing.plan_label.weekly", fallback: "WEEKLY PLAN" },
|
|
1731
1675
|
month: { key: "pricing.plan_label.monthly", fallback: "MONTHLY PLAN" },
|
|
1732
1676
|
year: { key: "pricing.plan_label.yearly", fallback: "YEARLY PLAN" }
|
|
1733
1677
|
}[e.interval];
|
|
1734
|
-
return
|
|
1678
|
+
return n ? t(n.key, n.fallback) : `${e.interval.toUpperCase()} PLAN`;
|
|
1735
1679
|
}
|
|
1736
|
-
function
|
|
1680
|
+
function st(e, t) {
|
|
1737
1681
|
if (!e.interval || e.interval === "lifetime")
|
|
1738
1682
|
return t("pricing.interval.lifetime_short", "lifetime");
|
|
1739
1683
|
if (e.interval === "year") return t("pricing.interval.month", "month");
|
|
1740
1684
|
const r = e.interval_count ?? 1;
|
|
1741
1685
|
return r === 1 ? t(`pricing.interval.${e.interval}`, e.interval) : `${r} ${e.interval}s`;
|
|
1742
1686
|
}
|
|
1743
|
-
function
|
|
1744
|
-
const { t: r } = v(),
|
|
1687
|
+
function Ne({ block: e, ctx: t }) {
|
|
1688
|
+
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
1689
|
if (i.length === 0)
|
|
1746
|
-
return /* @__PURE__ */
|
|
1690
|
+
return /* @__PURE__ */ a("p", { class: "text-sm text-gray-500", children: r("pricing.no_prices", "No prices available.") });
|
|
1747
1691
|
const o = e.popular_label ?? r("pricing.most_popular", "Most popular");
|
|
1748
1692
|
if (e.view === "compact")
|
|
1749
|
-
return /* @__PURE__ */
|
|
1693
|
+
return /* @__PURE__ */ a(
|
|
1750
1694
|
"div",
|
|
1751
1695
|
{
|
|
1752
1696
|
class: "flex w-full flex-col rounded-xl border border-gray-200 bg-gray-50",
|
|
1753
1697
|
role: "radiogroup",
|
|
1754
1698
|
"aria-label": r("pricing.plans_aria", "Plans"),
|
|
1755
|
-
children: i.map((s,
|
|
1756
|
-
|
|
1699
|
+
children: i.map((s, d) => /* @__PURE__ */ a(
|
|
1700
|
+
He,
|
|
1757
1701
|
{
|
|
1758
1702
|
price: s,
|
|
1759
|
-
isLast:
|
|
1703
|
+
isLast: d === i.length - 1,
|
|
1760
1704
|
isPopular: e.popular_price_id === s.id,
|
|
1761
1705
|
popularLabel: o,
|
|
1762
1706
|
offer: q(t.bootstrap.offers, s.id),
|
|
@@ -1771,49 +1715,49 @@ function He({ block: e, ctx: t }) {
|
|
|
1771
1715
|
}
|
|
1772
1716
|
);
|
|
1773
1717
|
if (e.view === "horizontal") {
|
|
1774
|
-
const s = Math.min(i.length, 3),
|
|
1775
|
-
(
|
|
1718
|
+
const s = Math.min(i.length, 3), d = i.some(
|
|
1719
|
+
(l) => (q(t.bootstrap.offers, l.id)?.discount_percent ?? 0) > 0
|
|
1776
1720
|
);
|
|
1777
|
-
return /* @__PURE__ */
|
|
1721
|
+
return /* @__PURE__ */ a(
|
|
1778
1722
|
"div",
|
|
1779
1723
|
{
|
|
1780
1724
|
class: "grid items-stretch gap-2",
|
|
1781
1725
|
style: { gridTemplateColumns: `repeat(${s}, minmax(0, 1fr))` },
|
|
1782
1726
|
role: "radiogroup",
|
|
1783
1727
|
"aria-label": r("pricing.plans_aria", "Plans"),
|
|
1784
|
-
children: i.map((
|
|
1785
|
-
|
|
1728
|
+
children: i.map((l) => /* @__PURE__ */ a(
|
|
1729
|
+
Ve,
|
|
1786
1730
|
{
|
|
1787
|
-
price:
|
|
1788
|
-
isPopular: e.popular_price_id ===
|
|
1731
|
+
price: l,
|
|
1732
|
+
isPopular: e.popular_price_id === l.id,
|
|
1789
1733
|
popularLabel: o,
|
|
1790
|
-
offer: q(t.bootstrap.offers,
|
|
1791
|
-
reserveStrikeRow:
|
|
1792
|
-
selected: t.selectedPriceId ===
|
|
1734
|
+
offer: q(t.bootstrap.offers, l.id),
|
|
1735
|
+
reserveStrikeRow: d,
|
|
1736
|
+
selected: t.selectedPriceId === l.id,
|
|
1793
1737
|
onSelect: () => {
|
|
1794
|
-
t.setSelectedPriceId(
|
|
1738
|
+
t.setSelectedPriceId(l.id), t.onAction("price_selected", { priceId: l.id, price: l });
|
|
1795
1739
|
},
|
|
1796
1740
|
t: r
|
|
1797
1741
|
},
|
|
1798
|
-
|
|
1742
|
+
l.id
|
|
1799
1743
|
))
|
|
1800
1744
|
}
|
|
1801
1745
|
);
|
|
1802
1746
|
}
|
|
1803
|
-
return /* @__PURE__ */
|
|
1747
|
+
return /* @__PURE__ */ a(
|
|
1804
1748
|
"div",
|
|
1805
1749
|
{
|
|
1806
1750
|
class: "flex flex-col gap-2",
|
|
1807
1751
|
role: "radiogroup",
|
|
1808
1752
|
"aria-label": r("pricing.plans_aria", "Plans"),
|
|
1809
1753
|
children: i.map((s) => {
|
|
1810
|
-
const
|
|
1754
|
+
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 } = ot(s, p);
|
|
1811
1755
|
return /* @__PURE__ */ c(
|
|
1812
1756
|
"button",
|
|
1813
1757
|
{
|
|
1814
1758
|
type: "button",
|
|
1815
1759
|
role: "radio",
|
|
1816
|
-
"aria-checked":
|
|
1760
|
+
"aria-checked": d,
|
|
1817
1761
|
onClick: () => {
|
|
1818
1762
|
t.setSelectedPriceId(s.id), t.onAction("price_selected", { priceId: s.id, price: s });
|
|
1819
1763
|
},
|
|
@@ -1822,26 +1766,26 @@ function He({ block: e, ctx: t }) {
|
|
|
1822
1766
|
// Везде border 2px — selection выражается только цветом, layout
|
|
1823
1767
|
// не прыгает (равная толщина у selected/unselected). Цветовая
|
|
1824
1768
|
// разница accent vs gray достаточно сильная для visual hierarchy.
|
|
1825
|
-
|
|
1769
|
+
d ? "border-[var(--pw-accent)] bg-transparent" : "border-gray-200 bg-transparent hover:bg-gray-50"
|
|
1826
1770
|
].join(" "),
|
|
1827
1771
|
children: [
|
|
1828
|
-
/* @__PURE__ */
|
|
1772
|
+
/* @__PURE__ */ a(
|
|
1829
1773
|
"span",
|
|
1830
1774
|
{
|
|
1831
1775
|
class: [
|
|
1832
1776
|
"flex h-6.5 w-6.5 flex-shrink-0 items-center justify-center rounded-full border transition-colors",
|
|
1833
|
-
|
|
1777
|
+
d ? "border-[var(--pw-accent)] text-white" : "border-gray-300 bg-transparent text-transparent",
|
|
1834
1778
|
// Popular-label badge сидит absolute сверху-справа карточки и
|
|
1835
1779
|
// визуально сдвигает центр content'а вниз. flex items-center
|
|
1836
1780
|
// на карточке держит галочку по геометрическому центру, что
|
|
1837
1781
|
// делает её визуально выше — компенсируем небольшим mt'ом.
|
|
1838
|
-
|
|
1782
|
+
l ? "mt-3" : ""
|
|
1839
1783
|
].join(" "),
|
|
1840
|
-
style:
|
|
1784
|
+
style: d ? {
|
|
1841
1785
|
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
1786
|
} : void 0,
|
|
1843
1787
|
"aria-hidden": "true",
|
|
1844
|
-
children: /* @__PURE__ */
|
|
1788
|
+
children: /* @__PURE__ */ a(
|
|
1845
1789
|
"svg",
|
|
1846
1790
|
{
|
|
1847
1791
|
width: "14",
|
|
@@ -1849,8 +1793,8 @@ function He({ block: e, ctx: t }) {
|
|
|
1849
1793
|
viewBox: "0 0 17 12",
|
|
1850
1794
|
fill: "none",
|
|
1851
1795
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1852
|
-
class:
|
|
1853
|
-
children: /* @__PURE__ */
|
|
1796
|
+
class: d ? "opacity-100" : "opacity-0",
|
|
1797
|
+
children: /* @__PURE__ */ a(
|
|
1854
1798
|
"path",
|
|
1855
1799
|
{
|
|
1856
1800
|
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 +1807,35 @@ function He({ block: e, ctx: t }) {
|
|
|
1863
1807
|
),
|
|
1864
1808
|
/* @__PURE__ */ c("div", { class: "flex flex-1 flex-col gap-0.5", children: [
|
|
1865
1809
|
/* @__PURE__ */ c("div", { class: "flex flex-wrap items-center gap-x-2 gap-y-1", children: [
|
|
1866
|
-
/* @__PURE__ */
|
|
1867
|
-
|
|
1810
|
+
/* @__PURE__ */ a("span", { class: "text-xs font-normal uppercase tracking-normal text-gray-800/70", children: Ft(s, r) }),
|
|
1811
|
+
y ? (
|
|
1868
1812
|
// opacity-60 приглушает strike: глаз сначала ловит label
|
|
1869
1813
|
// и discount-badge, потом main price; original «бывшая цена»
|
|
1870
1814
|
// — третичная информация, не должна конкурировать с label.
|
|
1871
|
-
/* @__PURE__ */
|
|
1815
|
+
/* @__PURE__ */ a("span", { class: "text-[15px] font-normal text-gray-400 opacity-60 line-through decoration-gray-400 decoration-[1.5px]", children: y })
|
|
1872
1816
|
) : null,
|
|
1873
|
-
|
|
1817
|
+
p ? (
|
|
1874
1818
|
// Emerald pill — фиксированный «успех/выгода», не зависит от
|
|
1875
1819
|
// brand_color. Читается даже на тёмных бренд-акцентах.
|
|
1876
1820
|
/* @__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
1821
|
"-",
|
|
1878
|
-
|
|
1822
|
+
p,
|
|
1879
1823
|
"%"
|
|
1880
1824
|
] })
|
|
1881
1825
|
) : null
|
|
1882
1826
|
] }),
|
|
1883
|
-
/* @__PURE__ */
|
|
1884
|
-
/* @__PURE__ */
|
|
1827
|
+
/* @__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: [
|
|
1828
|
+
/* @__PURE__ */ a("span", { class: "opacity-90", children: u }),
|
|
1885
1829
|
x,
|
|
1886
1830
|
/* @__PURE__ */ c("span", { class: "text-sm font-normal text-gray-500", children: [
|
|
1887
1831
|
" ",
|
|
1888
1832
|
"/ ",
|
|
1889
|
-
|
|
1833
|
+
st(s, r)
|
|
1890
1834
|
] })
|
|
1891
1835
|
] }) }),
|
|
1892
|
-
s.description ? /* @__PURE__ */
|
|
1836
|
+
s.description ? /* @__PURE__ */ a("span", { class: "mt-1 text-xs leading-relaxed text-gray-500", children: s.description }) : null
|
|
1893
1837
|
] }),
|
|
1894
|
-
|
|
1838
|
+
l ? /* @__PURE__ */ a(
|
|
1895
1839
|
"span",
|
|
1896
1840
|
{
|
|
1897
1841
|
class: "absolute -top-[9px] -right-[6px] rounded-[11px] border-[5px] border-white px-2 py-1 text-[12px] font-semibold text-white",
|
|
@@ -1907,20 +1851,20 @@ function He({ block: e, ctx: t }) {
|
|
|
1907
1851
|
}
|
|
1908
1852
|
);
|
|
1909
1853
|
}
|
|
1910
|
-
function
|
|
1854
|
+
function $e(e, t) {
|
|
1911
1855
|
return e.label ? e.label : !e.interval || e.interval === "lifetime" ? t("pricing.interval.lifetime_short", "lifetime") : t(`pricing.interval.${e.interval}`, e.interval);
|
|
1912
1856
|
}
|
|
1913
|
-
function
|
|
1857
|
+
function He({
|
|
1914
1858
|
price: e,
|
|
1915
1859
|
isLast: t,
|
|
1916
1860
|
isPopular: r,
|
|
1917
|
-
popularLabel:
|
|
1861
|
+
popularLabel: n,
|
|
1918
1862
|
offer: i,
|
|
1919
1863
|
selected: o,
|
|
1920
1864
|
onSelect: s,
|
|
1921
|
-
t:
|
|
1865
|
+
t: d
|
|
1922
1866
|
}) {
|
|
1923
|
-
const
|
|
1867
|
+
const l = i?.discount_percent ?? null, { currency: g, amount: p, originalAmount: u } = ot(e, l);
|
|
1924
1868
|
return /* @__PURE__ */ c(
|
|
1925
1869
|
"button",
|
|
1926
1870
|
{
|
|
@@ -1930,7 +1874,7 @@ function $e({
|
|
|
1930
1874
|
onClick: s,
|
|
1931
1875
|
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
1876
|
children: [
|
|
1933
|
-
/* @__PURE__ */
|
|
1877
|
+
/* @__PURE__ */ a(
|
|
1934
1878
|
"span",
|
|
1935
1879
|
{
|
|
1936
1880
|
class: [
|
|
@@ -1941,7 +1885,7 @@ function $e({
|
|
|
1941
1885
|
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
1886
|
} : void 0,
|
|
1943
1887
|
"aria-hidden": "true",
|
|
1944
|
-
children: /* @__PURE__ */
|
|
1888
|
+
children: /* @__PURE__ */ a(
|
|
1945
1889
|
"svg",
|
|
1946
1890
|
{
|
|
1947
1891
|
width: "14",
|
|
@@ -1950,7 +1894,7 @@ function $e({
|
|
|
1950
1894
|
fill: "none",
|
|
1951
1895
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1952
1896
|
class: o ? "opacity-100" : "opacity-0",
|
|
1953
|
-
children: /* @__PURE__ */
|
|
1897
|
+
children: /* @__PURE__ */ a(
|
|
1954
1898
|
"path",
|
|
1955
1899
|
{
|
|
1956
1900
|
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 +1914,12 @@ function $e({
|
|
|
1970
1914
|
].join(" "),
|
|
1971
1915
|
children: [
|
|
1972
1916
|
/* @__PURE__ */ c("div", { class: "flex flex-wrap items-center gap-1 gap-x-1.5", children: [
|
|
1973
|
-
/* @__PURE__ */
|
|
1917
|
+
/* @__PURE__ */ a("span", { class: "text-base font-normal capitalize text-gray-800", children: $e(e, d) }),
|
|
1974
1918
|
r ? (
|
|
1975
1919
|
// Pastel brand-mix pill — точно как `badge` в TelegramPricingRadio.
|
|
1976
1920
|
// Низкий visual weight: pill про "имя плана" (most popular), а не
|
|
1977
1921
|
// про savings — не должна конкурировать с -X% discount-pill.
|
|
1978
|
-
/* @__PURE__ */
|
|
1922
|
+
/* @__PURE__ */ a(
|
|
1979
1923
|
"span",
|
|
1980
1924
|
{
|
|
1981
1925
|
class: "rounded-[9px] px-2 py-1 text-[10px] font-bold",
|
|
@@ -1983,26 +1927,26 @@ function $e({
|
|
|
1983
1927
|
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
1928
|
color: "var(--pw-accent)"
|
|
1985
1929
|
},
|
|
1986
|
-
children:
|
|
1930
|
+
children: n
|
|
1987
1931
|
}
|
|
1988
1932
|
)
|
|
1989
1933
|
) : null,
|
|
1990
|
-
|
|
1934
|
+
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
1935
|
"-",
|
|
1992
|
-
|
|
1936
|
+
l,
|
|
1993
1937
|
"%"
|
|
1994
1938
|
] }) : null
|
|
1995
1939
|
] }),
|
|
1996
|
-
/* @__PURE__ */
|
|
1940
|
+
/* @__PURE__ */ a("div", { class: "flex-1" }),
|
|
1997
1941
|
/* @__PURE__ */ c("span", { class: "flex items-baseline gap-1.5 text-base font-normal text-gray-600", children: [
|
|
1998
|
-
|
|
1942
|
+
u ? /* @__PURE__ */ a("span", { class: "text-xs text-gray-400 line-through decoration-gray-400 decoration-[1.5px]", children: u }) : null,
|
|
1999
1943
|
/* @__PURE__ */ c("span", { class: "whitespace-nowrap", children: [
|
|
2000
|
-
/* @__PURE__ */
|
|
2001
|
-
|
|
1944
|
+
/* @__PURE__ */ a("span", { class: "opacity-90", children: g }),
|
|
1945
|
+
p,
|
|
2002
1946
|
/* @__PURE__ */ c("span", { class: "text-xs text-gray-400", children: [
|
|
2003
1947
|
" ",
|
|
2004
1948
|
"/ ",
|
|
2005
|
-
|
|
1949
|
+
st(e, d)
|
|
2006
1950
|
] })
|
|
2007
1951
|
] })
|
|
2008
1952
|
] })
|
|
@@ -2013,17 +1957,17 @@ function $e({
|
|
|
2013
1957
|
}
|
|
2014
1958
|
);
|
|
2015
1959
|
}
|
|
2016
|
-
function
|
|
1960
|
+
function Ve({
|
|
2017
1961
|
price: e,
|
|
2018
1962
|
isPopular: t,
|
|
2019
1963
|
popularLabel: r,
|
|
2020
|
-
offer:
|
|
1964
|
+
offer: n,
|
|
2021
1965
|
reserveStrikeRow: i,
|
|
2022
1966
|
selected: o,
|
|
2023
1967
|
onSelect: s,
|
|
2024
|
-
t:
|
|
1968
|
+
t: d
|
|
2025
1969
|
}) {
|
|
2026
|
-
const
|
|
1970
|
+
const l = n?.discount_percent ?? null, { currency: g, amount: p, originalAmount: u } = ot(e, l);
|
|
2027
1971
|
return /* @__PURE__ */ c(
|
|
2028
1972
|
"button",
|
|
2029
1973
|
{
|
|
@@ -2037,24 +1981,24 @@ function Ge({
|
|
|
2037
1981
|
].join(" "),
|
|
2038
1982
|
style: o ? { background: "color-mix(in srgb, var(--pw-accent) 6%, transparent)" } : void 0,
|
|
2039
1983
|
children: [
|
|
2040
|
-
/* @__PURE__ */
|
|
1984
|
+
/* @__PURE__ */ a("span", { class: "flex min-h-[2.4em] items-center text-[10px] font-normal uppercase leading-tight text-gray-800/70", children: Ft(e, d) }),
|
|
2041
1985
|
i ? /* @__PURE__ */ c("div", { class: "flex h-[22px] items-center justify-center gap-1.5", children: [
|
|
2042
|
-
|
|
2043
|
-
|
|
1986
|
+
u ? /* @__PURE__ */ a("span", { class: "text-[12px] text-gray-400 line-through decoration-gray-400 decoration-[1.5px]", children: u }) : null,
|
|
1987
|
+
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
1988
|
"-",
|
|
2045
|
-
|
|
1989
|
+
l,
|
|
2046
1990
|
"%"
|
|
2047
1991
|
] }) : null
|
|
2048
1992
|
] }) : null,
|
|
2049
1993
|
/* @__PURE__ */ c("span", { class: "text-[26px] leading-none whitespace-nowrap text-gray-800 font-medium", children: [
|
|
2050
|
-
/* @__PURE__ */
|
|
2051
|
-
|
|
1994
|
+
/* @__PURE__ */ a("span", { class: "opacity-90", children: g }),
|
|
1995
|
+
p
|
|
2052
1996
|
] }),
|
|
2053
1997
|
/* @__PURE__ */ c("span", { class: "text-xs font-normal text-gray-500", children: [
|
|
2054
1998
|
"/ ",
|
|
2055
|
-
|
|
1999
|
+
st(e, d)
|
|
2056
2000
|
] }),
|
|
2057
|
-
t ? /* @__PURE__ */
|
|
2001
|
+
t ? /* @__PURE__ */ a(
|
|
2058
2002
|
"span",
|
|
2059
2003
|
{
|
|
2060
2004
|
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",
|
|
@@ -2066,29 +2010,29 @@ function Ge({
|
|
|
2066
2010
|
}
|
|
2067
2011
|
);
|
|
2068
2012
|
}
|
|
2069
|
-
function
|
|
2070
|
-
return /* @__PURE__ */
|
|
2013
|
+
function Ge({ block: e }) {
|
|
2014
|
+
return /* @__PURE__ */ a("p", { class: "text-[0.9375rem] leading-relaxed text-gray-600", children: e.text });
|
|
2071
2015
|
}
|
|
2072
|
-
const
|
|
2016
|
+
const qe = {
|
|
2073
2017
|
week: 0.25,
|
|
2074
2018
|
month: 1,
|
|
2075
2019
|
year: 12
|
|
2076
2020
|
};
|
|
2077
|
-
function
|
|
2021
|
+
function We(e, t) {
|
|
2078
2022
|
return e ? t(`pricing.interval.${e}`, e) : t("pricing.interval.period", "period");
|
|
2079
2023
|
}
|
|
2080
|
-
function
|
|
2024
|
+
function Ze({ block: e, ctx: t }) {
|
|
2081
2025
|
const { t: r } = v();
|
|
2082
2026
|
if (!e.queries.length) return null;
|
|
2083
|
-
const i = t.bootstrap.prices.find((s) => s.id === t.selectedPriceId)?.interval ?? null, o = i ?
|
|
2027
|
+
const i = t.bootstrap.prices.find((s) => s.id === t.selectedPriceId)?.interval ?? null, o = i ? qe[i] : void 0;
|
|
2084
2028
|
return /* @__PURE__ */ c("div", { class: "flex flex-col gap-2", children: [
|
|
2085
|
-
/* @__PURE__ */
|
|
2086
|
-
interval:
|
|
2029
|
+
/* @__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}:", {
|
|
2030
|
+
interval: We(i, r)
|
|
2087
2031
|
}) }),
|
|
2088
|
-
/* @__PURE__ */
|
|
2089
|
-
const
|
|
2032
|
+
/* @__PURE__ */ a("ul", { class: "flex flex-col gap-2", role: "list", children: e.queries.map((s) => {
|
|
2033
|
+
const d = Number.isFinite(s.count) ? s.count : 0, l = o !== void 0 ? Math.round(d * o) : d;
|
|
2090
2034
|
return /* @__PURE__ */ c("li", { class: `flex gap-3 ${s.desc ? "items-start" : "items-center"}`, children: [
|
|
2091
|
-
/* @__PURE__ */
|
|
2035
|
+
/* @__PURE__ */ a(
|
|
2092
2036
|
"svg",
|
|
2093
2037
|
{
|
|
2094
2038
|
width: "18",
|
|
@@ -2097,7 +2041,7 @@ function Ke({ block: e, ctx: t }) {
|
|
|
2097
2041
|
fill: "none",
|
|
2098
2042
|
class: `flex-shrink-0 text-emerald-500 ${s.desc ? "mt-0.5" : ""}`,
|
|
2099
2043
|
"aria-hidden": "true",
|
|
2100
|
-
children: /* @__PURE__ */
|
|
2044
|
+
children: /* @__PURE__ */ a(
|
|
2101
2045
|
"path",
|
|
2102
2046
|
{
|
|
2103
2047
|
d: "M4 10.5l3.5 3.5 8.5-8.5",
|
|
@@ -2110,221 +2054,222 @@ function Ke({ block: e, ctx: t }) {
|
|
|
2110
2054
|
}
|
|
2111
2055
|
),
|
|
2112
2056
|
/* @__PURE__ */ c("div", { children: [
|
|
2113
|
-
/* @__PURE__ */
|
|
2057
|
+
/* @__PURE__ */ a("span", { class: "font-semibold text-gray-900 text-sm", children: l }),
|
|
2114
2058
|
" ",
|
|
2115
|
-
/* @__PURE__ */
|
|
2116
|
-
s.desc ? /* @__PURE__ */ c(
|
|
2117
|
-
/* @__PURE__ */
|
|
2118
|
-
/* @__PURE__ */
|
|
2059
|
+
/* @__PURE__ */ a("span", { class: "text-sm text-gray-800", children: s.name }),
|
|
2060
|
+
s.desc ? /* @__PURE__ */ c(at, { children: [
|
|
2061
|
+
/* @__PURE__ */ a("br", {}),
|
|
2062
|
+
/* @__PURE__ */ a("span", { class: "text-xs text-gray-400", children: s.desc })
|
|
2119
2063
|
] }) : null
|
|
2120
2064
|
] })
|
|
2121
2065
|
] }, s.id);
|
|
2122
2066
|
}) })
|
|
2123
2067
|
] });
|
|
2124
2068
|
}
|
|
2125
|
-
const
|
|
2126
|
-
heading:
|
|
2127
|
-
text:
|
|
2128
|
-
price_grid:
|
|
2129
|
-
cta_button:
|
|
2130
|
-
auth_panel:
|
|
2131
|
-
current_session:
|
|
2132
|
-
features_list:
|
|
2133
|
-
tokenization_gate:
|
|
2134
|
-
guarantee_badge:
|
|
2135
|
-
offer_banner:
|
|
2069
|
+
const Ke = {
|
|
2070
|
+
heading: Ue,
|
|
2071
|
+
text: Ge,
|
|
2072
|
+
price_grid: Ne,
|
|
2073
|
+
cta_button: Pe,
|
|
2074
|
+
auth_panel: Pt,
|
|
2075
|
+
current_session: Te,
|
|
2076
|
+
features_list: Ee,
|
|
2077
|
+
tokenization_gate: Ze,
|
|
2078
|
+
guarantee_badge: je,
|
|
2079
|
+
offer_banner: be
|
|
2136
2080
|
};
|
|
2137
|
-
function
|
|
2138
|
-
const s =
|
|
2139
|
-
for (const
|
|
2140
|
-
if (
|
|
2141
|
-
return
|
|
2081
|
+
function Ye({ layout: e, bootstrap: t, onAction: r, auth: n, authSession: i, hasTopBanner: o }) {
|
|
2082
|
+
const s = $t(() => {
|
|
2083
|
+
for (const k of e.blocks)
|
|
2084
|
+
if (k.type === "price_grid" && k.popular_price_id && t.prices.some((h) => h.id === k.popular_price_id))
|
|
2085
|
+
return k.popular_price_id;
|
|
2142
2086
|
return t.prices[0]?.id ?? null;
|
|
2143
|
-
}, [e.blocks, t.prices]), [
|
|
2087
|
+
}, [e.blocks, t.prices]), [d, l] = b(s), g = {
|
|
2144
2088
|
bootstrap: t,
|
|
2145
|
-
selectedPriceId:
|
|
2146
|
-
setSelectedPriceId:
|
|
2089
|
+
selectedPriceId: d,
|
|
2090
|
+
setSelectedPriceId: l,
|
|
2147
2091
|
onAction: r,
|
|
2148
|
-
auth:
|
|
2092
|
+
auth: n,
|
|
2149
2093
|
authSession: i
|
|
2150
|
-
},
|
|
2151
|
-
const
|
|
2152
|
-
return
|
|
2094
|
+
}, 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) => {
|
|
2095
|
+
const m = Ke[k.type];
|
|
2096
|
+
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
2097
|
};
|
|
2154
|
-
return /* @__PURE__ */ c(
|
|
2155
|
-
/* @__PURE__ */
|
|
2098
|
+
return /* @__PURE__ */ c(at, { children: [
|
|
2099
|
+
/* @__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
2100
|
x.length > 0 ? (
|
|
2157
2101
|
// Тонкий shadow-top вместо border-t — создаёт depth, читается как
|
|
2158
2102
|
// «footer закреплён к низу dialog'а». Линия выглядела как divider
|
|
2159
2103
|
// в обычном flow, не передавала sticky-character.
|
|
2160
|
-
/* @__PURE__ */
|
|
2104
|
+
/* @__PURE__ */ a(
|
|
2161
2105
|
"div",
|
|
2162
2106
|
{
|
|
2163
2107
|
class: "flex flex-col gap-4 bg-white px-6 pb-6 pt-3 sm:px-8",
|
|
2164
2108
|
style: { boxShadow: "0 -4px 12px -4px rgba(15,23,42,0.06)" },
|
|
2165
|
-
children: x.map((
|
|
2109
|
+
children: x.map((k, h) => y(k, u.length + h))
|
|
2166
2110
|
}
|
|
2167
2111
|
)
|
|
2168
2112
|
) : null
|
|
2169
2113
|
] });
|
|
2170
2114
|
}
|
|
2171
|
-
function
|
|
2172
|
-
return e ?
|
|
2115
|
+
function Xe(e, t, r, n) {
|
|
2116
|
+
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
2117
|
}
|
|
2174
|
-
function
|
|
2118
|
+
function Je(e, t) {
|
|
2175
2119
|
return e.open === t.open && e.view === t.view && e.error === t.error;
|
|
2176
2120
|
}
|
|
2177
|
-
function
|
|
2121
|
+
function Qe({
|
|
2178
2122
|
client: e,
|
|
2179
2123
|
open: t,
|
|
2180
2124
|
onClose: r,
|
|
2181
|
-
onEvent:
|
|
2125
|
+
onEvent: n,
|
|
2182
2126
|
initialView: i,
|
|
2183
|
-
|
|
2184
|
-
|
|
2127
|
+
initialAuthMode: o,
|
|
2128
|
+
purchased: s,
|
|
2129
|
+
renew: d,
|
|
2185
2130
|
onState: l,
|
|
2186
|
-
inline:
|
|
2187
|
-
locale:
|
|
2131
|
+
inline: g,
|
|
2132
|
+
locale: p
|
|
2188
2133
|
}) {
|
|
2189
|
-
const [
|
|
2134
|
+
const [u, x] = b({ status: "idle" }), [y, k] = b(
|
|
2190
2135
|
() => e.auth?.getCachedSession() ?? null
|
|
2191
|
-
), [
|
|
2192
|
-
|
|
2136
|
+
), [h, m] = b(() => i === "support" ? { kind: "support", origin: "standalone" } : i === "auth" ? { kind: "auth_gate", origin: "standalone" } : { kind: "layout" }), z = R(!1), _ = R(null);
|
|
2137
|
+
j(() => {
|
|
2193
2138
|
if (!l) return;
|
|
2194
|
-
const w =
|
|
2195
|
-
|
|
2196
|
-
}, [t,
|
|
2139
|
+
const w = Xe(t, u, h, s), f = _.current;
|
|
2140
|
+
f && Je(f, w) || (_.current = w, l(w));
|
|
2141
|
+
}, [t, u, h, s, l]), j(() => {
|
|
2197
2142
|
if (e.auth)
|
|
2198
|
-
return e.auth.onAuthChange((w,
|
|
2199
|
-
}, [e.auth]),
|
|
2143
|
+
return e.auth.onAuthChange((w, f) => k(f));
|
|
2144
|
+
}, [e.auth]), j(() => {
|
|
2200
2145
|
if (typeof e.onBootstrapChange == "function")
|
|
2201
2146
|
return e.onBootstrapChange((w) => {
|
|
2202
|
-
|
|
2203
|
-
(
|
|
2147
|
+
x(
|
|
2148
|
+
(f) => f.status === "ready" ? { status: "ready", data: w } : f
|
|
2204
2149
|
);
|
|
2205
2150
|
});
|
|
2206
|
-
}, [e]),
|
|
2207
|
-
if (!t ||
|
|
2151
|
+
}, [e]), j(() => {
|
|
2152
|
+
if (!t || u.status === "ready" || u.status === "loading") return;
|
|
2208
2153
|
let w = !1;
|
|
2209
|
-
return
|
|
2210
|
-
w || (
|
|
2154
|
+
return x({ status: "loading" }), e.bootstrap().then((f) => {
|
|
2155
|
+
w || (x({ status: "ready", data: f }), n("ready", f), f.user?.has_active_subscription && !d && !i && (n("purchase_completed", {
|
|
2211
2156
|
priceId: null,
|
|
2212
2157
|
sessionId: null,
|
|
2213
2158
|
restored: !0
|
|
2214
|
-
}),
|
|
2215
|
-
}).catch((
|
|
2159
|
+
}), m({ kind: "purchase_success", restored: !0 })));
|
|
2160
|
+
}).catch((f) => {
|
|
2216
2161
|
if (w) return;
|
|
2217
|
-
const
|
|
2218
|
-
|
|
2162
|
+
const C = f instanceof F ? f : new F("unknown", "Failed to load paywall", { cause: f });
|
|
2163
|
+
x({ status: "error", error: C }), n("error", C);
|
|
2219
2164
|
}), () => {
|
|
2220
2165
|
w = !0;
|
|
2221
2166
|
};
|
|
2222
|
-
}, [t, e]),
|
|
2167
|
+
}, [t, e]), Ht(() => {
|
|
2223
2168
|
if (!t) {
|
|
2224
|
-
|
|
2169
|
+
m({ kind: "layout" }), z.current = !1;
|
|
2225
2170
|
return;
|
|
2226
2171
|
}
|
|
2227
|
-
i === "support" ?
|
|
2172
|
+
i === "support" ? m({ kind: "support", origin: "standalone" }) : i === "auth" && m({ kind: "auth_gate", origin: "standalone" });
|
|
2228
2173
|
}, [t, i]);
|
|
2229
|
-
const
|
|
2174
|
+
const S = async (w) => {
|
|
2230
2175
|
try {
|
|
2231
|
-
const
|
|
2176
|
+
const f = await e.createCheckout({
|
|
2232
2177
|
priceId: w,
|
|
2233
|
-
ignoreActivePurchase:
|
|
2178
|
+
ignoreActivePurchase: d === !0
|
|
2234
2179
|
});
|
|
2235
|
-
if (
|
|
2236
|
-
const
|
|
2237
|
-
if (
|
|
2180
|
+
if (n("checkout_started", { priceId: w, url: f.url, acquiring: f.acquiring }), typeof window > "u" || !f.url) return;
|
|
2181
|
+
const C = window.open(f.url, "_blank");
|
|
2182
|
+
if (C) {
|
|
2238
2183
|
try {
|
|
2239
|
-
|
|
2184
|
+
C.opener = null;
|
|
2240
2185
|
} catch {
|
|
2241
2186
|
}
|
|
2242
|
-
|
|
2187
|
+
m({ kind: "awaiting_payment", priceId: w, url: f.url });
|
|
2243
2188
|
} else
|
|
2244
|
-
|
|
2245
|
-
} catch (
|
|
2246
|
-
if (
|
|
2189
|
+
m({ kind: "popup_blocked", priceId: w, url: f.url });
|
|
2190
|
+
} catch (f) {
|
|
2191
|
+
if (f instanceof F && f.code === "already_purchased") {
|
|
2247
2192
|
try {
|
|
2248
2193
|
await e.getUser({ force: !0 });
|
|
2249
2194
|
} catch {
|
|
2250
2195
|
}
|
|
2251
|
-
|
|
2196
|
+
n("purchase_completed", { priceId: w, sessionId: null, restored: !0 }), m({ kind: "purchase_success", restored: !0 });
|
|
2252
2197
|
return;
|
|
2253
2198
|
}
|
|
2254
|
-
const
|
|
2255
|
-
|
|
2199
|
+
const C = f instanceof F ? f : new F("checkout_failed", "Checkout failed", { cause: f });
|
|
2200
|
+
n("error", C), m({ kind: "layout" });
|
|
2256
2201
|
}
|
|
2257
|
-
},
|
|
2202
|
+
}, T = (w, f) => {
|
|
2258
2203
|
if (typeof window > "u") return;
|
|
2259
|
-
const
|
|
2260
|
-
if (
|
|
2204
|
+
const C = window.open(f, "_blank");
|
|
2205
|
+
if (C) {
|
|
2261
2206
|
try {
|
|
2262
|
-
|
|
2207
|
+
C.opener = null;
|
|
2263
2208
|
} catch {
|
|
2264
2209
|
}
|
|
2265
|
-
|
|
2210
|
+
m({ kind: "awaiting_payment", priceId: w, url: f });
|
|
2266
2211
|
}
|
|
2267
2212
|
};
|
|
2268
|
-
|
|
2269
|
-
if (
|
|
2270
|
-
|
|
2271
|
-
const w =
|
|
2272
|
-
|
|
2273
|
-
if (!
|
|
2213
|
+
j(() => {
|
|
2214
|
+
if (h.kind !== "auth_gate" || !y || y.user.is_anonymous || z.current) return;
|
|
2215
|
+
z.current = !0;
|
|
2216
|
+
const w = h.pendingCheckout, f = h.origin;
|
|
2217
|
+
m({ kind: "verifying" }), (async () => {
|
|
2218
|
+
if (!d)
|
|
2274
2219
|
try {
|
|
2275
2220
|
if ((await e.getUser({ force: !0 })).has_active_subscription) {
|
|
2276
|
-
|
|
2221
|
+
n("purchase_completed", {
|
|
2277
2222
|
priceId: w?.priceId ?? null,
|
|
2278
2223
|
sessionId: null,
|
|
2279
2224
|
restored: !0
|
|
2280
|
-
}),
|
|
2225
|
+
}), m({ kind: "purchase_success", restored: !0 });
|
|
2281
2226
|
return;
|
|
2282
2227
|
}
|
|
2283
2228
|
} catch {
|
|
2284
2229
|
}
|
|
2285
2230
|
if (!w) {
|
|
2286
|
-
|
|
2231
|
+
f === "standalone" ? r() : m({ kind: "layout" });
|
|
2287
2232
|
return;
|
|
2288
2233
|
}
|
|
2289
|
-
await
|
|
2234
|
+
await S(w.priceId);
|
|
2290
2235
|
})().finally(() => {
|
|
2291
|
-
|
|
2236
|
+
z.current = !1;
|
|
2292
2237
|
});
|
|
2293
|
-
}, [
|
|
2294
|
-
const
|
|
2238
|
+
}, [y, h]);
|
|
2239
|
+
const L = async (w, f) => {
|
|
2295
2240
|
if (w === "close") {
|
|
2296
2241
|
r();
|
|
2297
2242
|
return;
|
|
2298
2243
|
}
|
|
2299
2244
|
if (w === "price_selected") {
|
|
2300
|
-
|
|
2245
|
+
n("price_selected", f);
|
|
2301
2246
|
return;
|
|
2302
2247
|
}
|
|
2303
2248
|
if (w === "restore") {
|
|
2304
2249
|
if (!e.auth) return;
|
|
2305
|
-
const
|
|
2306
|
-
if (
|
|
2307
|
-
|
|
2250
|
+
const C = e.auth.getCachedSession();
|
|
2251
|
+
if (C && !C.user.is_anonymous) return;
|
|
2252
|
+
m({ kind: "auth_gate", intent: "restore" });
|
|
2308
2253
|
return;
|
|
2309
2254
|
}
|
|
2310
2255
|
if (w === "support") {
|
|
2311
|
-
|
|
2256
|
+
m({ kind: "support", origin: "layout" });
|
|
2312
2257
|
return;
|
|
2313
2258
|
}
|
|
2314
|
-
if (w === "checkout" &&
|
|
2315
|
-
const
|
|
2316
|
-
if (!
|
|
2317
|
-
|
|
2259
|
+
if (w === "checkout" && u.status === "ready") {
|
|
2260
|
+
const C = f?.priceId;
|
|
2261
|
+
if (!C) {
|
|
2262
|
+
n("error", new F("no_price", "No price selected"));
|
|
2318
2263
|
return;
|
|
2319
2264
|
}
|
|
2320
|
-
const
|
|
2321
|
-
if (
|
|
2322
|
-
|
|
2265
|
+
const I = u.data.settings.checkout_mode ?? "guest", A = e.auth?.getCachedSession() ?? null, H = !!A && !A.user.is_anonymous;
|
|
2266
|
+
if (I === "preauth" && !!e.auth && !H) {
|
|
2267
|
+
m({ kind: "auth_gate", pendingCheckout: { priceId: C } });
|
|
2323
2268
|
return;
|
|
2324
2269
|
}
|
|
2325
|
-
await
|
|
2270
|
+
await S(C);
|
|
2326
2271
|
}
|
|
2327
|
-
},
|
|
2272
|
+
}, B = u.status === "ready" ? u.data.settings.brand_color : null, E = u.status === "ready" ? u.data.settings.allow_close !== !1 : !0, D = h.kind === "layout" && u.status === "ready" ? Et(u.data.offers) : null, P = D ? /* @__PURE__ */ a(xe, { offer: D }) : null, M = {
|
|
2328
2273
|
type: "auth_panel",
|
|
2329
2274
|
// Заголовок не задаём — AuthGate сам решит по intent'у (restore →
|
|
2330
2275
|
// "Restore Purchases", остальные → дефолтный "Welcome back!").
|
|
@@ -2333,116 +2278,108 @@ function tr({
|
|
|
2333
2278
|
// Не скрываем при наличии сессии — auto-resume useEffect отрабатывает быстрее,
|
|
2334
2279
|
// чем хотим показывать "Signed in as ..." промежуточным экраном.
|
|
2335
2280
|
hide_when_authenticated: !1,
|
|
2336
|
-
providers:
|
|
2337
|
-
},
|
|
2338
|
-
|
|
2281
|
+
providers: u.status === "ready" ? u.data.settings.auth_providers : void 0
|
|
2282
|
+
}, O = h.kind === "support" ? /* @__PURE__ */ a(
|
|
2283
|
+
ke,
|
|
2339
2284
|
{
|
|
2340
2285
|
client: e,
|
|
2341
|
-
authSession:
|
|
2342
|
-
origin:
|
|
2286
|
+
authSession: y,
|
|
2287
|
+
origin: h.origin,
|
|
2343
2288
|
onBack: () => {
|
|
2344
|
-
|
|
2289
|
+
h.origin === "standalone" ? r() : m({ kind: "layout" });
|
|
2345
2290
|
}
|
|
2346
2291
|
}
|
|
2347
|
-
) : null,
|
|
2348
|
-
return /* @__PURE__ */
|
|
2349
|
-
|
|
2292
|
+
) : null, N = h.kind === "auth_gate" && h.origin !== "standalone" || h.kind === "support", Z = u.status === "ready" ? u.data : null;
|
|
2293
|
+
return /* @__PURE__ */ a(Qt, { bootstrap: Z, forceLocale: p, children: /* @__PURE__ */ a(
|
|
2294
|
+
te,
|
|
2350
2295
|
{
|
|
2351
2296
|
open: t,
|
|
2352
2297
|
onClose: r,
|
|
2353
|
-
brandColor:
|
|
2354
|
-
topBanner:
|
|
2355
|
-
allowClose:
|
|
2356
|
-
hideCloseButton:
|
|
2357
|
-
inline:
|
|
2298
|
+
brandColor: B,
|
|
2299
|
+
topBanner: P,
|
|
2300
|
+
allowClose: E,
|
|
2301
|
+
hideCloseButton: N,
|
|
2302
|
+
inline: g,
|
|
2358
2303
|
labelledBy: "pw-title",
|
|
2359
|
-
children:
|
|
2304
|
+
children: s ? /* @__PURE__ */ a(kt, { onContinue: r }) : h.kind === "purchase_success" ? /* @__PURE__ */ a(kt, { restored: h.restored, onContinue: r }) : O || (u.status === "loading" || u.status === "idle" || h.kind === "verifying" ? /* @__PURE__ */ a(tr, { verifying: h.kind === "verifying" }) : u.status === "error" ? /* @__PURE__ */ a(er, { message: u.error.message }) : h.kind === "auth_gate" && e.auth ? /* @__PURE__ */ a(
|
|
2360
2305
|
fe,
|
|
2361
2306
|
{
|
|
2362
|
-
block:
|
|
2363
|
-
bootstrap:
|
|
2307
|
+
block: M,
|
|
2308
|
+
bootstrap: u.data,
|
|
2364
2309
|
auth: e.auth,
|
|
2365
|
-
authSession:
|
|
2366
|
-
showBack:
|
|
2367
|
-
intent:
|
|
2310
|
+
authSession: y,
|
|
2311
|
+
showBack: h.origin !== "standalone",
|
|
2312
|
+
intent: h.intent ?? (h.origin === "standalone" ? "standalone" : "preauth"),
|
|
2313
|
+
initialMode: h.origin === "standalone" ? o : void 0,
|
|
2368
2314
|
onBack: () => {
|
|
2369
|
-
|
|
2315
|
+
h.origin === "standalone" ? r() : m({ kind: "layout" });
|
|
2370
2316
|
}
|
|
2371
2317
|
}
|
|
2372
|
-
) :
|
|
2373
|
-
|
|
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(
|
|
2382
|
-
nr,
|
|
2318
|
+
) : h.kind === "awaiting_payment" ? /* @__PURE__ */ a(
|
|
2319
|
+
ir,
|
|
2383
2320
|
{
|
|
2384
2321
|
client: e,
|
|
2385
|
-
onBack: () =>
|
|
2322
|
+
onBack: () => m({ kind: "layout" }),
|
|
2386
2323
|
onReopen: () => {
|
|
2387
2324
|
if (typeof window > "u") return;
|
|
2388
|
-
const w = window.open(
|
|
2325
|
+
const w = window.open(h.url, "_blank");
|
|
2389
2326
|
if (w)
|
|
2390
2327
|
try {
|
|
2391
2328
|
w.opener = null;
|
|
2392
2329
|
} catch {
|
|
2393
2330
|
}
|
|
2394
2331
|
},
|
|
2395
|
-
onRetry: () =>
|
|
2332
|
+
onRetry: () => S(h.priceId)
|
|
2396
2333
|
}
|
|
2397
|
-
) :
|
|
2398
|
-
|
|
2334
|
+
) : h.kind === "popup_blocked" ? /* @__PURE__ */ a(rr, { onReopen: () => T(h.priceId, h.url) }) : /* @__PURE__ */ a(
|
|
2335
|
+
Ye,
|
|
2399
2336
|
{
|
|
2400
|
-
layout:
|
|
2401
|
-
bootstrap:
|
|
2402
|
-
onAction:
|
|
2337
|
+
layout: u.data.layout,
|
|
2338
|
+
bootstrap: u.data,
|
|
2339
|
+
onAction: L,
|
|
2403
2340
|
auth: e.auth,
|
|
2404
|
-
authSession:
|
|
2341
|
+
authSession: y
|
|
2405
2342
|
}
|
|
2406
2343
|
))
|
|
2407
2344
|
}
|
|
2408
2345
|
) });
|
|
2409
2346
|
}
|
|
2410
|
-
function
|
|
2347
|
+
function tr({ verifying: e }) {
|
|
2411
2348
|
const { t } = v();
|
|
2412
2349
|
return /* @__PURE__ */ c("div", { class: "flex flex-col items-center justify-center gap-3 py-12", children: [
|
|
2413
|
-
/* @__PURE__ */
|
|
2414
|
-
/* @__PURE__ */
|
|
2350
|
+
/* @__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)]" }),
|
|
2351
|
+
/* @__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
2352
|
] });
|
|
2416
2353
|
}
|
|
2417
|
-
function
|
|
2354
|
+
function er({ message: e }) {
|
|
2418
2355
|
const { t } = v();
|
|
2419
2356
|
return /* @__PURE__ */ c("div", { class: "flex flex-col items-center gap-2 py-8 text-center", children: [
|
|
2420
|
-
/* @__PURE__ */
|
|
2421
|
-
/* @__PURE__ */
|
|
2422
|
-
/* @__PURE__ */
|
|
2357
|
+
/* @__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: [
|
|
2358
|
+
/* @__PURE__ */ a("path", { d: "M10 6v5M10 14h.01", stroke: "#dc2626", "stroke-width": "2", "stroke-linecap": "round" }),
|
|
2359
|
+
/* @__PURE__ */ a("circle", { cx: "10", cy: "10", r: "8", stroke: "#dc2626", "stroke-width": "1.75" })
|
|
2423
2360
|
] }) }),
|
|
2424
|
-
/* @__PURE__ */
|
|
2425
|
-
/* @__PURE__ */
|
|
2361
|
+
/* @__PURE__ */ a("p", { class: "text-sm font-semibold tracking-tight text-gray-900", children: t("modal.error_generic", "Something went wrong") }),
|
|
2362
|
+
/* @__PURE__ */ a("p", { class: "text-xs leading-relaxed text-gray-500", children: e })
|
|
2426
2363
|
] });
|
|
2427
2364
|
}
|
|
2428
|
-
function
|
|
2365
|
+
function rr({ onReopen: e }) {
|
|
2429
2366
|
const { t } = v();
|
|
2430
2367
|
return /* @__PURE__ */ c("div", { class: "flex flex-col items-center gap-3 py-8 text-center", children: [
|
|
2431
|
-
/* @__PURE__ */
|
|
2368
|
+
/* @__PURE__ */ a(
|
|
2432
2369
|
"div",
|
|
2433
2370
|
{
|
|
2434
2371
|
class: "flex h-11 w-11 items-center justify-center rounded-full",
|
|
2435
2372
|
style: { background: "color-mix(in srgb, var(--pw-accent) 12%, white)", color: "var(--pw-accent)" },
|
|
2436
2373
|
"aria-hidden": "true",
|
|
2437
2374
|
children: /* @__PURE__ */ c("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: [
|
|
2438
|
-
/* @__PURE__ */
|
|
2439
|
-
/* @__PURE__ */
|
|
2375
|
+
/* @__PURE__ */ a("path", { d: "M4 5h12v10H4z", stroke: "currentColor", "stroke-width": "1.75", "stroke-linejoin": "round" }),
|
|
2376
|
+
/* @__PURE__ */ a("path", { d: "M7 9l3 3 4-5", stroke: "currentColor", "stroke-width": "1.75", "stroke-linecap": "round", "stroke-linejoin": "round" })
|
|
2440
2377
|
] })
|
|
2441
2378
|
}
|
|
2442
2379
|
),
|
|
2443
|
-
/* @__PURE__ */
|
|
2444
|
-
/* @__PURE__ */
|
|
2445
|
-
/* @__PURE__ */
|
|
2380
|
+
/* @__PURE__ */ a("p", { class: "text-sm font-semibold tracking-tight text-gray-900", children: t("payment.popup_blocked_title", "Allow popups to continue") }),
|
|
2381
|
+
/* @__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.") }),
|
|
2382
|
+
/* @__PURE__ */ a(
|
|
2446
2383
|
"button",
|
|
2447
2384
|
{
|
|
2448
2385
|
type: "button",
|
|
@@ -2457,36 +2394,36 @@ function ir({ onReopen: e }) {
|
|
|
2457
2394
|
)
|
|
2458
2395
|
] });
|
|
2459
2396
|
}
|
|
2460
|
-
function
|
|
2397
|
+
function ir({
|
|
2461
2398
|
client: e,
|
|
2462
2399
|
onBack: t,
|
|
2463
2400
|
onReopen: r,
|
|
2464
|
-
onRetry:
|
|
2401
|
+
onRetry: n
|
|
2465
2402
|
}) {
|
|
2466
|
-
const { t: i } = v(), [o, s] = b(!1), [
|
|
2467
|
-
|
|
2468
|
-
|
|
2403
|
+
const { t: i } = v(), [o, s] = b(!1), [d, l] = b(!1), g = R(null);
|
|
2404
|
+
j(() => () => {
|
|
2405
|
+
g.current !== null && clearTimeout(g.current);
|
|
2469
2406
|
}, []);
|
|
2470
|
-
const
|
|
2407
|
+
const p = async () => {
|
|
2471
2408
|
if (!o) {
|
|
2472
|
-
s(!0),
|
|
2409
|
+
s(!0), l(!1);
|
|
2473
2410
|
try {
|
|
2474
2411
|
if ((await e.getUser({ force: !0 })).has_active_subscription) {
|
|
2475
2412
|
typeof window < "u" && window.postMessage({ type: "paywall_purchase" }, "*");
|
|
2476
2413
|
return;
|
|
2477
2414
|
}
|
|
2478
|
-
|
|
2479
|
-
|
|
2415
|
+
l(!0), g.current !== null && clearTimeout(g.current), g.current = setTimeout(() => {
|
|
2416
|
+
l(!1), g.current = null;
|
|
2480
2417
|
}, 5e3);
|
|
2481
2418
|
} catch {
|
|
2482
|
-
|
|
2419
|
+
l(!0);
|
|
2483
2420
|
} finally {
|
|
2484
2421
|
s(!1);
|
|
2485
2422
|
}
|
|
2486
2423
|
}
|
|
2487
2424
|
};
|
|
2488
|
-
return /* @__PURE__ */ c("div", { class: "flex flex-col gap-3", children: [
|
|
2489
|
-
/* @__PURE__ */
|
|
2425
|
+
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: [
|
|
2426
|
+
/* @__PURE__ */ a(
|
|
2490
2427
|
"button",
|
|
2491
2428
|
{
|
|
2492
2429
|
type: "button",
|
|
@@ -2497,7 +2434,7 @@ function nr({
|
|
|
2497
2434
|
),
|
|
2498
2435
|
/* @__PURE__ */ c("div", { class: "flex flex-col items-center gap-3 py-6 text-center", children: [
|
|
2499
2436
|
/* @__PURE__ */ c("div", { class: "relative flex h-12 w-12 items-center justify-center", children: [
|
|
2500
|
-
/* @__PURE__ */
|
|
2437
|
+
/* @__PURE__ */ a(
|
|
2501
2438
|
"span",
|
|
2502
2439
|
{
|
|
2503
2440
|
class: "absolute inset-0 animate-ping rounded-full opacity-40",
|
|
@@ -2505,18 +2442,18 @@ function nr({
|
|
|
2505
2442
|
"aria-hidden": "true"
|
|
2506
2443
|
}
|
|
2507
2444
|
),
|
|
2508
|
-
/* @__PURE__ */
|
|
2445
|
+
/* @__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
2446
|
] }),
|
|
2510
|
-
/* @__PURE__ */
|
|
2511
|
-
/* @__PURE__ */
|
|
2447
|
+
/* @__PURE__ */ a("p", { class: "text-sm font-semibold tracking-tight text-gray-900", children: i("payment.awaiting_title", "Complete payment in the new tab") }),
|
|
2448
|
+
/* @__PURE__ */ a("p", { class: "max-w-[20rem] text-xs leading-relaxed text-gray-500", children: i(
|
|
2512
2449
|
"payment.awaiting_subtitle",
|
|
2513
2450
|
"We'll detect your payment automatically — or click below once you're done."
|
|
2514
2451
|
) }),
|
|
2515
|
-
/* @__PURE__ */
|
|
2452
|
+
/* @__PURE__ */ a(
|
|
2516
2453
|
"button",
|
|
2517
2454
|
{
|
|
2518
2455
|
type: "button",
|
|
2519
|
-
onClick:
|
|
2456
|
+
onClick: p,
|
|
2520
2457
|
disabled: o,
|
|
2521
2458
|
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
2459
|
style: {
|
|
@@ -2526,11 +2463,11 @@ function nr({
|
|
|
2526
2463
|
children: o ? i("payment.checking", "Checking…") : i("payment.ive_paid", "I've paid")
|
|
2527
2464
|
}
|
|
2528
2465
|
),
|
|
2529
|
-
|
|
2466
|
+
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
2467
|
] }),
|
|
2531
2468
|
/* @__PURE__ */ c("div", { class: "rounded-2xl border border-gray-200 bg-gray-50/60 p-3.5", children: [
|
|
2532
|
-
/* @__PURE__ */
|
|
2533
|
-
/* @__PURE__ */
|
|
2469
|
+
/* @__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.") }),
|
|
2470
|
+
/* @__PURE__ */ a(
|
|
2534
2471
|
"button",
|
|
2535
2472
|
{
|
|
2536
2473
|
type: "button",
|
|
@@ -2540,24 +2477,24 @@ function nr({
|
|
|
2540
2477
|
}
|
|
2541
2478
|
)
|
|
2542
2479
|
] }),
|
|
2543
|
-
/* @__PURE__ */
|
|
2480
|
+
/* @__PURE__ */ a(
|
|
2544
2481
|
"button",
|
|
2545
2482
|
{
|
|
2546
2483
|
type: "button",
|
|
2547
|
-
onClick:
|
|
2484
|
+
onClick: n,
|
|
2548
2485
|
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
2486
|
children: i("payment.tab_closed_retry", "Tab closed? Try again")
|
|
2550
2487
|
}
|
|
2551
2488
|
)
|
|
2552
2489
|
] });
|
|
2553
2490
|
}
|
|
2554
|
-
function
|
|
2491
|
+
function kt({
|
|
2555
2492
|
onContinue: e,
|
|
2556
2493
|
restored: t = !1
|
|
2557
2494
|
}) {
|
|
2558
2495
|
const { t: r } = v();
|
|
2559
2496
|
return /* @__PURE__ */ c("div", { class: "flex flex-col items-center gap-3 py-8 text-center", children: [
|
|
2560
|
-
/* @__PURE__ */
|
|
2497
|
+
/* @__PURE__ */ a(
|
|
2561
2498
|
"div",
|
|
2562
2499
|
{
|
|
2563
2500
|
class: "flex h-14 w-14 items-center justify-center rounded-full ring-8",
|
|
@@ -2568,7 +2505,7 @@ function _t({
|
|
|
2568
2505
|
boxShadow: "0 0 0 8px rgba(74,222,128,0.12), 0 8px 20px -6px rgba(22,163,74,0.45)"
|
|
2569
2506
|
},
|
|
2570
2507
|
"aria-hidden": "true",
|
|
2571
|
-
children: /* @__PURE__ */
|
|
2508
|
+
children: /* @__PURE__ */ a("svg", { width: "28", height: "28", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ a(
|
|
2572
2509
|
"path",
|
|
2573
2510
|
{
|
|
2574
2511
|
d: "M5 13l4 4L19 7",
|
|
@@ -2580,12 +2517,12 @@ function _t({
|
|
|
2580
2517
|
) })
|
|
2581
2518
|
}
|
|
2582
2519
|
),
|
|
2583
|
-
/* @__PURE__ */
|
|
2584
|
-
/* @__PURE__ */
|
|
2520
|
+
/* @__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") }),
|
|
2521
|
+
/* @__PURE__ */ a("p", { class: "text-sm leading-relaxed text-gray-500", children: t ? r(
|
|
2585
2522
|
"modal.purchase_restored_subtitle",
|
|
2586
2523
|
"Welcome back — your subscription is already active."
|
|
2587
2524
|
) : r("modal.purchase_success_subtitle", "Your subscription is now active.") }),
|
|
2588
|
-
/* @__PURE__ */
|
|
2525
|
+
/* @__PURE__ */ a(
|
|
2589
2526
|
"button",
|
|
2590
2527
|
{
|
|
2591
2528
|
type: "button",
|
|
@@ -2600,17 +2537,17 @@ function _t({
|
|
|
2600
2537
|
)
|
|
2601
2538
|
] });
|
|
2602
2539
|
}
|
|
2603
|
-
const
|
|
2604
|
-
class
|
|
2540
|
+
const nr = 10 * 6e4, ar = 5e3, or = 3e4;
|
|
2541
|
+
class sr {
|
|
2605
2542
|
constructor(t) {
|
|
2606
2543
|
this.timer = null, this.timeoutTimer = null, this.visibilityHandler = null, this.focusHandler = null, this.messageHandler = null, this.stopped = !1, this.checking = !1, this.opts = {
|
|
2607
2544
|
client: t.client,
|
|
2608
2545
|
onActive: t.onActive,
|
|
2609
2546
|
onTimeout: t.onTimeout ?? (() => {
|
|
2610
2547
|
}),
|
|
2611
|
-
timeoutMs: t.timeoutMs ??
|
|
2612
|
-
visibleIntervalMs: t.visibleIntervalMs ??
|
|
2613
|
-
hiddenIntervalMs: t.hiddenIntervalMs ??
|
|
2548
|
+
timeoutMs: t.timeoutMs ?? nr,
|
|
2549
|
+
visibleIntervalMs: t.visibleIntervalMs ?? ar,
|
|
2550
|
+
hiddenIntervalMs: t.hiddenIntervalMs ?? or
|
|
2614
2551
|
};
|
|
2615
2552
|
}
|
|
2616
2553
|
start() {
|
|
@@ -2649,19 +2586,19 @@ class lr {
|
|
|
2649
2586
|
!r || typeof r != "object" || r.type === "paywall_purchase" && this.check();
|
|
2650
2587
|
}
|
|
2651
2588
|
}
|
|
2652
|
-
function
|
|
2589
|
+
function lr() {
|
|
2653
2590
|
return !(typeof document > "u" || typeof window > "u" || typeof location < "u" && location.protocol === "chrome-extension:");
|
|
2654
2591
|
}
|
|
2655
|
-
const
|
|
2592
|
+
const nt = { open: !1, view: null, error: null }, $ = {
|
|
2656
2593
|
status: "paywall_status",
|
|
2657
2594
|
priceId: "paywall_price_id",
|
|
2658
2595
|
sessionId: "paywall_session_id"
|
|
2659
2596
|
};
|
|
2660
2597
|
class yr {
|
|
2661
2598
|
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 =
|
|
2599
|
+
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 = nt, this.stateListeners = /* @__PURE__ */ new Set();
|
|
2600
|
+
const { auth: r, ownsAuth: n } = cr(t);
|
|
2601
|
+
this.auth = r, this.ownsAuth = n, this.billing = t.client ?? new Rt({ ...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
2602
|
this.emit("userChange", i);
|
|
2666
2603
|
}), this.auth && (this.authUnsub = this.auth.onAuthChange((i, o) => {
|
|
2667
2604
|
this.emit("authChange", { event: i, session: o });
|
|
@@ -2671,9 +2608,9 @@ class yr {
|
|
|
2671
2608
|
if (t === !1) return;
|
|
2672
2609
|
const r = typeof t == "object" && t !== null ? t : {};
|
|
2673
2610
|
if (r.enabled === !1) return;
|
|
2674
|
-
const
|
|
2675
|
-
this.tracker = new
|
|
2676
|
-
endpoint:
|
|
2611
|
+
const n = r.endpoint ?? `${this.billing.apiOrigin}/api/v1/paywall/${this.billing.paywallId}/events`;
|
|
2612
|
+
this.tracker = new Ut({
|
|
2613
|
+
endpoint: n,
|
|
2677
2614
|
paywallId: this.billing.paywallId,
|
|
2678
2615
|
capabilities: this.billing.capabilities,
|
|
2679
2616
|
getVisitorId: () => this.billing.getVisitorId(),
|
|
@@ -2772,17 +2709,17 @@ class yr {
|
|
|
2772
2709
|
r !== this.forceLocale && (this.forceLocale = r, this.handle && this.handle.update({ locale: r }));
|
|
2773
2710
|
}
|
|
2774
2711
|
on(t, r) {
|
|
2775
|
-
let
|
|
2776
|
-
return
|
|
2712
|
+
let n = this.listeners.get(t);
|
|
2713
|
+
return n || (n = /* @__PURE__ */ new Set(), this.listeners.set(t, n)), n.add(r), () => n.delete(r);
|
|
2777
2714
|
}
|
|
2778
2715
|
off(t, r) {
|
|
2779
2716
|
this.listeners.get(t)?.delete(r);
|
|
2780
2717
|
}
|
|
2781
2718
|
emit(t, ...r) {
|
|
2782
|
-
const
|
|
2783
|
-
if (!
|
|
2719
|
+
const n = this.listeners.get(t);
|
|
2720
|
+
if (!n) return;
|
|
2784
2721
|
const i = r[0];
|
|
2785
|
-
for (const o of
|
|
2722
|
+
for (const o of n)
|
|
2786
2723
|
try {
|
|
2787
2724
|
o(i);
|
|
2788
2725
|
} catch (s) {
|
|
@@ -2839,43 +2776,63 @@ class yr {
|
|
|
2839
2776
|
this.auth && this.openInternal("auth", { ...t, skipTrial: !0 });
|
|
2840
2777
|
}
|
|
2841
2778
|
/**
|
|
2842
|
-
*
|
|
2843
|
-
* `
|
|
2844
|
-
*
|
|
2845
|
-
*
|
|
2846
|
-
*
|
|
2847
|
-
*
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
|
|
2851
|
-
|
|
2852
|
-
|
|
2779
|
+
* Шорткат над `openAuth()` — открывает модалку сразу на signin-форме.
|
|
2780
|
+
* Эквивалент `openAuth()` (signin — дефолт). Существует для симметрии с
|
|
2781
|
+
* `openSignup()` и читаемости host-кода:
|
|
2782
|
+
* - `paywall.openSignin()` — «вход в существующий аккаунт»
|
|
2783
|
+
* - `paywall.openSignup()` — «новая регистрация»
|
|
2784
|
+
* Без managed-auth — no-op.
|
|
2785
|
+
*/
|
|
2786
|
+
openSignin(t = {}) {
|
|
2787
|
+
this.auth && this.openInternal("auth", { ...t, skipTrial: !0, authMode: "signin" });
|
|
2788
|
+
}
|
|
2789
|
+
/**
|
|
2790
|
+
* Открывает модалку с auth-gate сразу в режиме регистрации (signup-mode
|
|
2791
|
+
* AuthPanel'а — email/password/repeat). Если в paywall layout админ
|
|
2792
|
+
* отключил allow_signup, AuthPanel игнорит mode и стартует с signin —
|
|
2793
|
+
* соблюдается admin-конфиг.
|
|
2794
|
+
* Без managed-auth — no-op.
|
|
2795
|
+
*/
|
|
2796
|
+
openSignup(t = {}) {
|
|
2797
|
+
this.auth && this.openInternal("auth", { ...t, skipTrial: !0, authMode: "signup" });
|
|
2798
|
+
}
|
|
2799
|
+
/**
|
|
2800
|
+
* Headless anonymous signin без открытия модалки. Внутри:
|
|
2801
|
+
* idempotent (если уже анон — instant return) → resume через сохранённый
|
|
2802
|
+
* refresh_token → fresh /auth/anonymous/signin. Дедуплицирует
|
|
2803
|
+
* параллельные вызовы внутри AuthClient'а.
|
|
2853
2804
|
*
|
|
2854
|
-
*
|
|
2855
|
-
*
|
|
2856
|
-
*
|
|
2805
|
+
* Удобно для host-кнопок типа «Continue as guest» — host сам управляет
|
|
2806
|
+
* loading-стейтом на своей кнопке, без полупустой модалки со спиннером.
|
|
2807
|
+
* Без managed-auth — резолвится rejected promise'ом (нет AuthClient'а
|
|
2808
|
+
* чтобы делать signin).
|
|
2857
2809
|
*/
|
|
2858
|
-
|
|
2859
|
-
this.auth
|
|
2810
|
+
signInAnonymously() {
|
|
2811
|
+
return this.auth ? this.auth.signInAnonymously() : Promise.reject(
|
|
2812
|
+
new F(
|
|
2813
|
+
"invalid_config",
|
|
2814
|
+
"signInAnonymously requires managed-auth. Pass `auth: true` to PaywallUI."
|
|
2815
|
+
)
|
|
2816
|
+
);
|
|
2860
2817
|
}
|
|
2861
2818
|
openInternal(t, r) {
|
|
2862
2819
|
r.identity && this.billing.setIdentity(r.identity), this.purchased = !1;
|
|
2863
|
-
const
|
|
2864
|
-
if (
|
|
2865
|
-
this.mountAndShow(t, { renew: o });
|
|
2820
|
+
const n = r.skipTrial === !0 || t === "support", i = r.skipVisibility === !0 || t === "support" || t === "auth", o = r.renew === !0;
|
|
2821
|
+
if (n && i) {
|
|
2822
|
+
this.mountAndShow(t, { renew: o, authMode: r.authMode });
|
|
2866
2823
|
return;
|
|
2867
2824
|
}
|
|
2868
2825
|
const s = this.billing.getCachedBootstrap();
|
|
2869
2826
|
if (s) {
|
|
2870
|
-
this.runOpenGates(t, s, { skipTrial:
|
|
2827
|
+
this.runOpenGates(t, s, { skipTrial: n, skipVisibility: i, renew: o });
|
|
2871
2828
|
return;
|
|
2872
2829
|
}
|
|
2873
2830
|
if (this.mountThenLoad) {
|
|
2874
|
-
this.mountAndShow(t, { renew: o }), this.billing.bootstrap().then((
|
|
2831
|
+
this.mountAndShow(t, { renew: o }), this.billing.bootstrap().then((d) => this.runDelayedGates(d, { skipTrial: n, skipVisibility: i })).catch(() => {
|
|
2875
2832
|
});
|
|
2876
2833
|
return;
|
|
2877
2834
|
}
|
|
2878
|
-
this.billing.bootstrap().then((
|
|
2835
|
+
this.billing.bootstrap().then((d) => this.runOpenGates(t, d, { skipTrial: n, skipVisibility: i, renew: o })).catch(() => {
|
|
2879
2836
|
this.mountAndShow(t, { renew: o });
|
|
2880
2837
|
});
|
|
2881
2838
|
}
|
|
@@ -2892,9 +2849,9 @@ class yr {
|
|
|
2892
2849
|
}
|
|
2893
2850
|
}
|
|
2894
2851
|
if (r.skipTrial) return;
|
|
2895
|
-
const
|
|
2896
|
-
if (!
|
|
2897
|
-
const i = this.ensureTrialStore(
|
|
2852
|
+
const n = t.settings.trial;
|
|
2853
|
+
if (!n) return;
|
|
2854
|
+
const i = this.ensureTrialStore(n);
|
|
2898
2855
|
i.check().then(async (o) => {
|
|
2899
2856
|
if (this.isOpen && (this.lastTrialStatus = o, o.mode !== "none")) {
|
|
2900
2857
|
if (o.blocked) {
|
|
@@ -2913,68 +2870,75 @@ class yr {
|
|
|
2913
2870
|
// вести trial-стейт «осталось N показов» под юзером, который вообще не
|
|
2914
2871
|
// должен увидеть пейвол по таргетингу — бессмысленно: при возврате в
|
|
2915
2872
|
// правильную страну он окажется со «слипшимся» триал-счётчиком.
|
|
2916
|
-
runOpenGates(t, r,
|
|
2917
|
-
if (!
|
|
2873
|
+
runOpenGates(t, r, n) {
|
|
2874
|
+
if (!n.skipVisibility) {
|
|
2918
2875
|
const i = r.settings.visibility;
|
|
2919
2876
|
if (i && (this.lastVisibility = i, !i.visible)) {
|
|
2920
2877
|
this.emit("visibility_blocked", i);
|
|
2921
2878
|
return;
|
|
2922
2879
|
}
|
|
2923
2880
|
}
|
|
2924
|
-
if (
|
|
2925
|
-
this.mountAndShow(t, { renew:
|
|
2881
|
+
if (n.skipTrial) {
|
|
2882
|
+
this.mountAndShow(t, { renew: n.renew });
|
|
2926
2883
|
return;
|
|
2927
2884
|
}
|
|
2928
|
-
this.gateThroughTrial(t, r,
|
|
2885
|
+
this.gateThroughTrial(t, r, n.renew);
|
|
2929
2886
|
}
|
|
2930
|
-
gateThroughTrial(t, r,
|
|
2887
|
+
gateThroughTrial(t, r, n) {
|
|
2931
2888
|
const i = r.settings.trial;
|
|
2932
2889
|
if (!i) {
|
|
2933
|
-
this.mountAndShow(t, { renew:
|
|
2890
|
+
this.mountAndShow(t, { renew: n });
|
|
2934
2891
|
return;
|
|
2935
2892
|
}
|
|
2936
2893
|
const o = this.ensureTrialStore(i);
|
|
2937
2894
|
o.check().then(async (s) => {
|
|
2938
2895
|
if (this.lastTrialStatus = s, s.mode === "none") {
|
|
2939
|
-
this.mountAndShow(t, { renew:
|
|
2896
|
+
this.mountAndShow(t, { renew: n });
|
|
2940
2897
|
return;
|
|
2941
2898
|
}
|
|
2942
2899
|
if (s.blocked) {
|
|
2943
|
-
const
|
|
2944
|
-
this.lastTrialStatus =
|
|
2900
|
+
const d = await o.recordBlock();
|
|
2901
|
+
this.lastTrialStatus = d, this.emit("trial_blocked", d);
|
|
2945
2902
|
return;
|
|
2946
2903
|
}
|
|
2947
|
-
this.trialExpiredFired || (this.trialExpiredFired = !0, this.emit("trial_expired")), this.mountAndShow(t, { renew:
|
|
2904
|
+
this.trialExpiredFired || (this.trialExpiredFired = !0, this.emit("trial_expired")), this.mountAndShow(t, { renew: n });
|
|
2948
2905
|
}).catch((s) => {
|
|
2949
|
-
typeof console < "u" && console.warn("[paywall] trial check failed", s), this.mountAndShow(t, { renew:
|
|
2906
|
+
typeof console < "u" && console.warn("[paywall] trial check failed", s), this.mountAndShow(t, { renew: n });
|
|
2950
2907
|
});
|
|
2951
2908
|
}
|
|
2952
2909
|
ensureTrialStore(t) {
|
|
2953
|
-
if (this.trialStore && this.trialStoreConfig &&
|
|
2910
|
+
if (this.trialStore && this.trialStoreConfig && pr(this.trialStoreConfig, t))
|
|
2954
2911
|
return this.trialStore;
|
|
2955
2912
|
this.trialStoreConfig = t;
|
|
2956
2913
|
const r = this.billing.createTrialStore;
|
|
2957
|
-
return this.trialStore = typeof r == "function" ? r.call(this.billing, t) :
|
|
2914
|
+
return this.trialStore = typeof r == "function" ? r.call(this.billing, t) : Gt(this.billing.getStorage(), this.billing.paywallId, t), this.trialStore;
|
|
2958
2915
|
}
|
|
2959
2916
|
mountAndShow(t, r = {}) {
|
|
2960
|
-
const
|
|
2917
|
+
const n = r.renew === !0, i = r.authMode;
|
|
2961
2918
|
if (this.handle) {
|
|
2962
|
-
this.isOpen = !0, this.handle.update({
|
|
2919
|
+
this.isOpen = !0, this.handle.update({
|
|
2920
|
+
open: !0,
|
|
2921
|
+
initialView: t,
|
|
2922
|
+
initialAuthMode: i,
|
|
2923
|
+
purchased: !1,
|
|
2924
|
+
renew: n
|
|
2925
|
+
}), this.emit("open");
|
|
2963
2926
|
return;
|
|
2964
2927
|
}
|
|
2965
|
-
this.isOpen = !0, this.handle =
|
|
2966
|
-
|
|
2928
|
+
this.isOpen = !0, this.handle = Wt(
|
|
2929
|
+
Qe,
|
|
2967
2930
|
{
|
|
2968
2931
|
client: this.billing,
|
|
2969
2932
|
open: !0,
|
|
2970
2933
|
initialView: t,
|
|
2934
|
+
initialAuthMode: i,
|
|
2971
2935
|
purchased: !1,
|
|
2972
|
-
renew:
|
|
2936
|
+
renew: n,
|
|
2973
2937
|
onClose: () => this.close(),
|
|
2974
|
-
onEvent: (
|
|
2975
|
-
this.emit(
|
|
2938
|
+
onEvent: (o, s) => {
|
|
2939
|
+
this.emit(o, s), o === "checkout_started" && this.startUserWatcher();
|
|
2976
2940
|
},
|
|
2977
|
-
onState: (
|
|
2941
|
+
onState: (o) => this.applyState(o),
|
|
2978
2942
|
inline: this.inline,
|
|
2979
2943
|
locale: this.forceLocale
|
|
2980
2944
|
},
|
|
@@ -2982,13 +2946,13 @@ class yr {
|
|
|
2982
2946
|
), this.emit("open");
|
|
2983
2947
|
}
|
|
2984
2948
|
applyState(t) {
|
|
2985
|
-
if (!
|
|
2949
|
+
if (!ur(this.currentState, t)) {
|
|
2986
2950
|
this.currentState = t;
|
|
2987
2951
|
for (const r of this.stateListeners)
|
|
2988
2952
|
try {
|
|
2989
2953
|
r(t);
|
|
2990
|
-
} catch (
|
|
2991
|
-
console.warn("[paywall] onStateChange listener threw",
|
|
2954
|
+
} catch (n) {
|
|
2955
|
+
console.warn("[paywall] onStateChange listener threw", n);
|
|
2992
2956
|
}
|
|
2993
2957
|
}
|
|
2994
2958
|
}
|
|
@@ -3015,10 +2979,10 @@ class yr {
|
|
|
3015
2979
|
*/
|
|
3016
2980
|
onStateChange(t, r = {}) {
|
|
3017
2981
|
this.stateListeners.add(t);
|
|
3018
|
-
const
|
|
3019
|
-
if (
|
|
2982
|
+
const n = r.immediate ?? "microtask";
|
|
2983
|
+
if (n !== "none") {
|
|
3020
2984
|
const i = this.currentState;
|
|
3021
|
-
if (
|
|
2985
|
+
if (n === "sync")
|
|
3022
2986
|
try {
|
|
3023
2987
|
t(i);
|
|
3024
2988
|
} catch (o) {
|
|
@@ -3108,20 +3072,20 @@ class yr {
|
|
|
3108
3072
|
user: s
|
|
3109
3073
|
};
|
|
3110
3074
|
}
|
|
3111
|
-
const
|
|
3112
|
-
if (
|
|
3075
|
+
const n = r.user ?? null;
|
|
3076
|
+
if (n?.has_active_subscription)
|
|
3113
3077
|
return {
|
|
3114
3078
|
access: "granted",
|
|
3115
3079
|
reason: "has_subscription",
|
|
3116
3080
|
visibility: r.settings.visibility ?? null,
|
|
3117
3081
|
trial: null,
|
|
3118
|
-
user:
|
|
3082
|
+
user: n
|
|
3119
3083
|
};
|
|
3120
3084
|
let i = null;
|
|
3121
3085
|
if (!t.skipVisibility) {
|
|
3122
3086
|
const s = r.settings.visibility;
|
|
3123
3087
|
if (s && (i = s, this.lastVisibility = s, !s.visible))
|
|
3124
|
-
return { access: "granted", reason: "visibility_blocked", visibility: i, trial: null, user:
|
|
3088
|
+
return { access: "granted", reason: "visibility_blocked", visibility: i, trial: null, user: n };
|
|
3125
3089
|
}
|
|
3126
3090
|
let o = null;
|
|
3127
3091
|
if (!t.skipTrial) {
|
|
@@ -3129,12 +3093,12 @@ class yr {
|
|
|
3129
3093
|
if (s)
|
|
3130
3094
|
try {
|
|
3131
3095
|
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",
|
|
3096
|
+
return { access: "granted", reason: "trial_blocked", visibility: i, trial: o, user: n };
|
|
3097
|
+
} catch (d) {
|
|
3098
|
+
typeof console < "u" && console.warn("[paywall] getAccess: trial check failed", d);
|
|
3135
3099
|
}
|
|
3136
3100
|
}
|
|
3137
|
-
return { access: "blocked", reason: "no_subscription", visibility: i, trial: o, user:
|
|
3101
|
+
return { access: "blocked", reason: "no_subscription", visibility: i, trial: o, user: n };
|
|
3138
3102
|
}
|
|
3139
3103
|
/** Сбросить состояние триала в storage. Полезно для дев-режима / админ-кнопки
|
|
3140
3104
|
* «прогнать сценарий заново». В проде хост обычно не дёргает. */
|
|
@@ -3148,7 +3112,7 @@ class yr {
|
|
|
3148
3112
|
// В extension popup runtime — no-op (popup не доживёт). Там полагаемся на
|
|
3149
3113
|
// bootstrap при следующем открытии.
|
|
3150
3114
|
startUserWatcher() {
|
|
3151
|
-
this.watcher ||
|
|
3115
|
+
this.watcher || lr() && (this.watcher = new sr({
|
|
3152
3116
|
client: this.billing,
|
|
3153
3117
|
onActive: (t) => {
|
|
3154
3118
|
this.watcher = null, this.emit("purchase_completed", { priceId: null, sessionId: null });
|
|
@@ -3167,7 +3131,7 @@ class yr {
|
|
|
3167
3131
|
}), this.watcher.start());
|
|
3168
3132
|
}
|
|
3169
3133
|
close() {
|
|
3170
|
-
!this.isOpen || !this.handle || (this.isOpen = !1, this.purchased = !1, this.handle.update({ open: !1, purchased: !1 }), this.applyState(
|
|
3134
|
+
!this.isOpen || !this.handle || (this.isOpen = !1, this.purchased = !1, this.handle.update({ open: !1, purchased: !1 }), this.applyState(nt), this.emit("close"));
|
|
3171
3135
|
}
|
|
3172
3136
|
/**
|
|
3173
3137
|
* Сканирует текущий URL на маркеры возврата с checkout и эмитит
|
|
@@ -3177,23 +3141,23 @@ class yr {
|
|
|
3177
3141
|
*/
|
|
3178
3142
|
checkReturn() {
|
|
3179
3143
|
if (typeof window > "u") return;
|
|
3180
|
-
const t = new URL(window.location.href), r =
|
|
3144
|
+
const t = new URL(window.location.href), r = _t(t.hash.replace(/^#/, "")), n = _t(t.search.replace(/^\?/, "")), i = r ?? n;
|
|
3181
3145
|
i && (i.status === "paid" ? (this.emit("purchase_completed", {
|
|
3182
3146
|
priceId: i.priceId,
|
|
3183
3147
|
sessionId: i.sessionId
|
|
3184
|
-
}),
|
|
3148
|
+
}), hr(i)) : (i.status === "failed" || i.status === "cancelled") && this.emit("purchase_failed", { reason: i.status }), gr(t));
|
|
3185
3149
|
}
|
|
3186
3150
|
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 =
|
|
3151
|
+
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 = nt;
|
|
3188
3152
|
}
|
|
3189
3153
|
}
|
|
3190
|
-
function
|
|
3154
|
+
function cr(e) {
|
|
3191
3155
|
if (!e.auth) return { auth: void 0, ownsAuth: !1 };
|
|
3192
|
-
if (e.auth instanceof
|
|
3156
|
+
if (e.auth instanceof lt || dr(e.auth))
|
|
3193
3157
|
return { auth: e.auth, ownsAuth: !1 };
|
|
3194
3158
|
const t = e.auth === !0 ? {} : e.auth;
|
|
3195
3159
|
return {
|
|
3196
|
-
auth: new
|
|
3160
|
+
auth: new lt({
|
|
3197
3161
|
paywallId: e.paywallId,
|
|
3198
3162
|
apiOrigin: t.apiOrigin ?? e.apiOrigin,
|
|
3199
3163
|
storage: t.storage ?? e.storage,
|
|
@@ -3203,27 +3167,27 @@ function dr(e) {
|
|
|
3203
3167
|
ownsAuth: !0
|
|
3204
3168
|
};
|
|
3205
3169
|
}
|
|
3206
|
-
function
|
|
3170
|
+
function dr(e) {
|
|
3207
3171
|
if (typeof e != "object" || e === null) return !1;
|
|
3208
3172
|
const t = e;
|
|
3209
3173
|
return typeof t.onAuthChange == "function" && typeof t.getCachedSession == "function" && typeof t.signOut == "function";
|
|
3210
3174
|
}
|
|
3211
|
-
function
|
|
3175
|
+
function ur(e, t) {
|
|
3212
3176
|
return e.open === t.open && e.view === t.view && e.error === t.error;
|
|
3213
3177
|
}
|
|
3214
|
-
function
|
|
3178
|
+
function pr(e, t) {
|
|
3215
3179
|
return e.mode === t.mode && e.payload === t.payload && e.storage === t.storage;
|
|
3216
3180
|
}
|
|
3217
|
-
function
|
|
3181
|
+
function _t(e) {
|
|
3218
3182
|
if (!e) return null;
|
|
3219
|
-
const t = new URLSearchParams(e), r = t.get(
|
|
3183
|
+
const t = new URLSearchParams(e), r = t.get($.status);
|
|
3220
3184
|
return r ? {
|
|
3221
3185
|
status: r,
|
|
3222
|
-
priceId: t.get(
|
|
3223
|
-
sessionId: t.get(
|
|
3186
|
+
priceId: t.get($.priceId),
|
|
3187
|
+
sessionId: t.get($.sessionId)
|
|
3224
3188
|
} : null;
|
|
3225
3189
|
}
|
|
3226
|
-
function
|
|
3190
|
+
function hr(e) {
|
|
3227
3191
|
if (!(typeof window > "u" || !window.opener))
|
|
3228
3192
|
try {
|
|
3229
3193
|
window.opener.postMessage(
|
|
@@ -3238,11 +3202,11 @@ function gr(e) {
|
|
|
3238
3202
|
} catch {
|
|
3239
3203
|
}
|
|
3240
3204
|
}
|
|
3241
|
-
function
|
|
3242
|
-
const t = (
|
|
3243
|
-
if (!
|
|
3244
|
-
const o = new URLSearchParams(
|
|
3245
|
-
o.delete(
|
|
3205
|
+
function gr(e) {
|
|
3206
|
+
const t = (n, i) => {
|
|
3207
|
+
if (!n) return "";
|
|
3208
|
+
const o = new URLSearchParams(n.replace(/^[?#]/, ""));
|
|
3209
|
+
o.delete($.status), o.delete($.priceId), o.delete($.sessionId);
|
|
3246
3210
|
const s = o.toString();
|
|
3247
3211
|
return s ? i + s : "";
|
|
3248
3212
|
}, r = e.pathname + t(e.search, "?") + t(e.hash, "#");
|
|
@@ -3250,6 +3214,6 @@ function fr(e) {
|
|
|
3250
3214
|
}
|
|
3251
3215
|
export {
|
|
3252
3216
|
yr as P,
|
|
3253
|
-
|
|
3217
|
+
Ke as b
|
|
3254
3218
|
};
|
|
3255
|
-
//# sourceMappingURL=PaywallUI-
|
|
3219
|
+
//# sourceMappingURL=PaywallUI-BrDiS6zg.js.map
|