@monetize.software/sdk 3.0.0-alpha.5 → 3.0.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -13
- package/dist/chunks/{PaywallUI-D7lp-bC5.js → PaywallUI-BYquPomD.js} +897 -848
- package/dist/chunks/PaywallUI-BYquPomD.js.map +1 -0
- package/dist/chunks/PaywallUI-Cl9sz_xA.js +26 -0
- package/dist/chunks/PaywallUI-Cl9sz_xA.js.map +1 -0
- package/dist/chunks/ar-BUQInJ5a.js +2 -0
- package/dist/chunks/ar-BUQInJ5a.js.map +1 -0
- package/dist/chunks/{ar-BCHXVoE2.js → ar-nh4l4WDE.js} +16 -5
- package/dist/chunks/ar-nh4l4WDE.js.map +1 -0
- package/dist/chunks/{cs-B5NqpTW_.js → cs-2UYO2rWf.js} +14 -3
- package/dist/chunks/cs-2UYO2rWf.js.map +1 -0
- package/dist/chunks/cs-i5K4KTFV.js +2 -0
- package/dist/chunks/cs-i5K4KTFV.js.map +1 -0
- package/dist/chunks/{da-BJrGZ3LD.js → da-BD0O_HfV.js} +14 -3
- package/dist/chunks/da-BD0O_HfV.js.map +1 -0
- package/dist/chunks/da-CZbhtVJO.js +2 -0
- package/dist/chunks/da-CZbhtVJO.js.map +1 -0
- package/dist/chunks/de-Bc-GoLgC.js +2 -0
- package/dist/chunks/de-Bc-GoLgC.js.map +1 -0
- package/dist/chunks/{de-aepBKwsb.js → de-BkCiXPsn.js} +12 -3
- package/dist/chunks/de-BkCiXPsn.js.map +1 -0
- package/dist/chunks/el-CcMEbl_F.js +2 -0
- package/dist/chunks/el-CcMEbl_F.js.map +1 -0
- package/dist/chunks/{el-DTLQoX2D.js → el-cIcxTp07.js} +14 -3
- package/dist/chunks/el-cIcxTp07.js.map +1 -0
- package/dist/chunks/es-BvYmomAz.js +2 -0
- package/dist/chunks/es-BvYmomAz.js.map +1 -0
- package/dist/chunks/{es-CLutF-D_.js → es-CJBC_jrV.js} +12 -3
- package/dist/chunks/es-CJBC_jrV.js.map +1 -0
- package/dist/chunks/{fi-DZ4csxqk.js → fi-DyV7ynBf.js} +14 -3
- package/dist/chunks/fi-DyV7ynBf.js.map +1 -0
- package/dist/chunks/fi-aZR-qmZN.js +2 -0
- package/dist/chunks/fi-aZR-qmZN.js.map +1 -0
- package/dist/chunks/{fr-jJU1SSpj.js → fr-BLQ4AIu7.js} +12 -3
- package/dist/chunks/fr-BLQ4AIu7.js.map +1 -0
- package/dist/chunks/fr-BgbFAgHx.js +2 -0
- package/dist/chunks/fr-BgbFAgHx.js.map +1 -0
- package/dist/chunks/{he-D9obGPNj.js → he-Bg-Bqi7r.js} +16 -5
- package/dist/chunks/he-Bg-Bqi7r.js.map +1 -0
- package/dist/chunks/he-CQ4yCuja.js +2 -0
- package/dist/chunks/he-CQ4yCuja.js.map +1 -0
- package/dist/chunks/hi-DtUsj1c-.js +2 -0
- package/dist/chunks/hi-DtUsj1c-.js.map +1 -0
- package/dist/chunks/{hi-pM8SQwZ3.js → hi-wQeE43oY.js} +16 -5
- package/dist/chunks/hi-wQeE43oY.js.map +1 -0
- package/dist/chunks/{hu-E0m9WgbD.js → hu-D9qxzu0r.js} +14 -3
- package/dist/chunks/hu-D9qxzu0r.js.map +1 -0
- package/dist/chunks/hu-DXtscQ8_.js +2 -0
- package/dist/chunks/hu-DXtscQ8_.js.map +1 -0
- package/dist/chunks/id-BByOYpeo.js +2 -0
- package/dist/chunks/id-BByOYpeo.js.map +1 -0
- package/dist/chunks/{id-C6poPvby.js → id-Rx_wYvqy.js} +14 -3
- package/dist/chunks/id-Rx_wYvqy.js.map +1 -0
- package/dist/chunks/it-52Ip42pa.js +2 -0
- package/dist/chunks/it-52Ip42pa.js.map +1 -0
- package/dist/chunks/{it-B2RSFyVd.js → it-B1SRPZ3e.js} +12 -3
- package/dist/chunks/it-B1SRPZ3e.js.map +1 -0
- package/dist/chunks/ja-CMC3Parn.js +2 -0
- package/dist/chunks/ja-CMC3Parn.js.map +1 -0
- package/dist/chunks/{ja-CM-VgVG6.js → ja-DiItm8te.js} +12 -3
- package/dist/chunks/ja-DiItm8te.js.map +1 -0
- package/dist/chunks/ko-3qY21q40.js +2 -0
- package/dist/chunks/ko-3qY21q40.js.map +1 -0
- package/dist/chunks/{ko-C451fA21.js → ko-CdGFWAKX.js} +12 -3
- package/dist/chunks/ko-CdGFWAKX.js.map +1 -0
- package/dist/chunks/nl-Borc5nw1.js +2 -0
- package/dist/chunks/nl-Borc5nw1.js.map +1 -0
- package/dist/chunks/{nl-DzQfJPo2.js → nl-CmZ3vEvj.js} +12 -3
- package/dist/chunks/nl-CmZ3vEvj.js.map +1 -0
- package/dist/chunks/{no-B51be8KT.js → no-BuxByZpq.js} +14 -3
- package/dist/chunks/no-BuxByZpq.js.map +1 -0
- package/dist/chunks/no-Do2iGedg.js +2 -0
- package/dist/chunks/no-Do2iGedg.js.map +1 -0
- package/dist/chunks/{pl-5rTEkvfY.js → pl-jZFCnDb8.js} +14 -3
- package/dist/chunks/pl-jZFCnDb8.js.map +1 -0
- package/dist/chunks/pl-mRaky_7k.js +2 -0
- package/dist/chunks/pl-mRaky_7k.js.map +1 -0
- package/dist/chunks/{pt-JwqffZ9u.js → pt-Cld7MwIW.js} +12 -3
- package/dist/chunks/pt-Cld7MwIW.js.map +1 -0
- package/dist/chunks/pt-DilDTXfs.js +2 -0
- package/dist/chunks/pt-DilDTXfs.js.map +1 -0
- package/dist/chunks/{ro-BE_wJ1td.js → ro-CuKDqj3C.js} +14 -3
- package/dist/chunks/ro-CuKDqj3C.js.map +1 -0
- package/dist/chunks/ro-DF2uzPIB.js +2 -0
- package/dist/chunks/ro-DF2uzPIB.js.map +1 -0
- package/dist/chunks/{ru-BviATvLb.js → ru-B7cjqJUm.js} +14 -3
- package/dist/chunks/ru-B7cjqJUm.js.map +1 -0
- package/dist/chunks/ru-YeaXnTO-.js +2 -0
- package/dist/chunks/ru-YeaXnTO-.js.map +1 -0
- package/dist/chunks/sv-2pHEvuSe.js +2 -0
- package/dist/chunks/sv-2pHEvuSe.js.map +1 -0
- package/dist/chunks/{sv-DabGF9WL.js → sv-D9y-M1Fo.js} +14 -3
- package/dist/chunks/sv-D9y-M1Fo.js.map +1 -0
- package/dist/chunks/{th-BiF-bNo0.js → th-D9umBjEy.js} +14 -3
- package/dist/chunks/th-D9umBjEy.js.map +1 -0
- package/dist/chunks/th-u2QSDF0G.js +2 -0
- package/dist/chunks/th-u2QSDF0G.js.map +1 -0
- package/dist/chunks/{tr-xZuly8X8.js → tr-BddMywiw.js} +14 -3
- package/dist/chunks/tr-BddMywiw.js.map +1 -0
- package/dist/chunks/tr-Bhgm6_ti.js +2 -0
- package/dist/chunks/tr-Bhgm6_ti.js.map +1 -0
- package/dist/chunks/uk-7vwqsaVK.js +2 -0
- package/dist/chunks/uk-7vwqsaVK.js.map +1 -0
- package/dist/chunks/{uk-KlkAaHuy.js → uk-Dbd31hFt.js} +14 -3
- package/dist/chunks/uk-Dbd31hFt.js.map +1 -0
- package/dist/chunks/vi-CJefLP_g.js +2 -0
- package/dist/chunks/vi-CJefLP_g.js.map +1 -0
- package/dist/chunks/{vi-BVCeumNE.js → vi-Do3BMOdh.js} +14 -3
- package/dist/chunks/vi-Do3BMOdh.js.map +1 -0
- package/dist/chunks/zh-D5C3BzYL.js +2 -0
- package/dist/chunks/zh-D5C3BzYL.js.map +1 -0
- package/dist/chunks/{zh-C_ghwmqi.js → zh-gQSYLZI3.js} +12 -3
- package/dist/chunks/zh-gQSYLZI3.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.js +1 -1
- package/dist/ui.cjs +1 -1
- package/dist/ui.d.ts +12 -0
- package/dist/ui.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/PaywallUI-BD5hRY2P.js +0 -26
- package/dist/chunks/PaywallUI-BD5hRY2P.js.map +0 -1
- package/dist/chunks/PaywallUI-D7lp-bC5.js.map +0 -1
- package/dist/chunks/ar-BCHXVoE2.js.map +0 -1
- package/dist/chunks/ar-CsJNZJSr.js +0 -2
- package/dist/chunks/ar-CsJNZJSr.js.map +0 -1
- package/dist/chunks/cs-B5NqpTW_.js.map +0 -1
- package/dist/chunks/cs-BydWUC0e.js +0 -2
- package/dist/chunks/cs-BydWUC0e.js.map +0 -1
- package/dist/chunks/da-BJrGZ3LD.js.map +0 -1
- package/dist/chunks/da-DNhiAQnh.js +0 -2
- package/dist/chunks/da-DNhiAQnh.js.map +0 -1
- package/dist/chunks/de-H8ztFOie.js +0 -2
- package/dist/chunks/de-H8ztFOie.js.map +0 -1
- package/dist/chunks/de-aepBKwsb.js.map +0 -1
- package/dist/chunks/el-DRfoadtI.js +0 -2
- package/dist/chunks/el-DRfoadtI.js.map +0 -1
- package/dist/chunks/el-DTLQoX2D.js.map +0 -1
- package/dist/chunks/es-CLutF-D_.js.map +0 -1
- package/dist/chunks/es-GlaYesNR.js +0 -2
- package/dist/chunks/es-GlaYesNR.js.map +0 -1
- package/dist/chunks/fi-BIHFyScH.js +0 -2
- package/dist/chunks/fi-BIHFyScH.js.map +0 -1
- package/dist/chunks/fi-DZ4csxqk.js.map +0 -1
- package/dist/chunks/fr-BtZILUNZ.js +0 -2
- package/dist/chunks/fr-BtZILUNZ.js.map +0 -1
- package/dist/chunks/fr-jJU1SSpj.js.map +0 -1
- package/dist/chunks/he-D9obGPNj.js.map +0 -1
- package/dist/chunks/he-vSDRE4Nn.js +0 -2
- package/dist/chunks/he-vSDRE4Nn.js.map +0 -1
- package/dist/chunks/hi-B90FsnP6.js +0 -2
- package/dist/chunks/hi-B90FsnP6.js.map +0 -1
- package/dist/chunks/hi-pM8SQwZ3.js.map +0 -1
- package/dist/chunks/hu-DWVFODsS.js +0 -2
- package/dist/chunks/hu-DWVFODsS.js.map +0 -1
- package/dist/chunks/hu-E0m9WgbD.js.map +0 -1
- package/dist/chunks/id-C6poPvby.js.map +0 -1
- package/dist/chunks/id-Ce2gzMVT.js +0 -2
- package/dist/chunks/id-Ce2gzMVT.js.map +0 -1
- package/dist/chunks/it-B2RSFyVd.js.map +0 -1
- package/dist/chunks/it-u-Gu44bl.js +0 -2
- package/dist/chunks/it-u-Gu44bl.js.map +0 -1
- package/dist/chunks/ja-CM-VgVG6.js.map +0 -1
- package/dist/chunks/ja-CQy8RaRa.js +0 -2
- package/dist/chunks/ja-CQy8RaRa.js.map +0 -1
- package/dist/chunks/ko-BRnb7vJ7.js +0 -2
- package/dist/chunks/ko-BRnb7vJ7.js.map +0 -1
- package/dist/chunks/ko-C451fA21.js.map +0 -1
- package/dist/chunks/nl-CJelco6J.js +0 -2
- package/dist/chunks/nl-CJelco6J.js.map +0 -1
- package/dist/chunks/nl-DzQfJPo2.js.map +0 -1
- package/dist/chunks/no-B51be8KT.js.map +0 -1
- package/dist/chunks/no-BwTjSZ4K.js +0 -2
- package/dist/chunks/no-BwTjSZ4K.js.map +0 -1
- package/dist/chunks/pl-5rTEkvfY.js.map +0 -1
- package/dist/chunks/pl-kO82vcjb.js +0 -2
- package/dist/chunks/pl-kO82vcjb.js.map +0 -1
- package/dist/chunks/pt-CsJzaSjg.js +0 -2
- package/dist/chunks/pt-CsJzaSjg.js.map +0 -1
- package/dist/chunks/pt-JwqffZ9u.js.map +0 -1
- package/dist/chunks/ro-BE_wJ1td.js.map +0 -1
- package/dist/chunks/ro-ue15Ina4.js +0 -2
- package/dist/chunks/ro-ue15Ina4.js.map +0 -1
- package/dist/chunks/ru-B1iMOhX0.js +0 -2
- package/dist/chunks/ru-B1iMOhX0.js.map +0 -1
- package/dist/chunks/ru-BviATvLb.js.map +0 -1
- package/dist/chunks/sv-CkNYpUVy.js +0 -2
- package/dist/chunks/sv-CkNYpUVy.js.map +0 -1
- package/dist/chunks/sv-DabGF9WL.js.map +0 -1
- package/dist/chunks/th-BiF-bNo0.js.map +0 -1
- package/dist/chunks/th-Cu80HK4y.js +0 -2
- package/dist/chunks/th-Cu80HK4y.js.map +0 -1
- package/dist/chunks/tr-B7c0afXV.js +0 -2
- package/dist/chunks/tr-B7c0afXV.js.map +0 -1
- package/dist/chunks/tr-xZuly8X8.js.map +0 -1
- package/dist/chunks/uk-BO106B0H.js +0 -2
- package/dist/chunks/uk-BO106B0H.js.map +0 -1
- package/dist/chunks/uk-KlkAaHuy.js.map +0 -1
- package/dist/chunks/vi-BVCeumNE.js.map +0 -1
- package/dist/chunks/vi-CZ6ow40D.js +0 -2
- package/dist/chunks/vi-CZ6ow40D.js.map +0 -1
- package/dist/chunks/zh-BhP80WI1.js +0 -2
- package/dist/chunks/zh-BhP80WI1.js.map +0 -1
- package/dist/chunks/zh-C_ghwmqi.js.map +0 -1
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { PaywallError as
|
|
2
|
-
import { render as
|
|
3
|
-
import { jsx as
|
|
4
|
-
import { useContext as
|
|
1
|
+
import { PaywallError as U, BillingClient as Dt, EventTracker as Nt, AuthClient as dt } from "../core.js";
|
|
2
|
+
import { render as K, h as ut, createContext as Ht } from "preact";
|
|
3
|
+
import { jsx as n, jsxs as c, Fragment as Z } from "preact/jsx-runtime";
|
|
4
|
+
import { useContext as Vt, useState as b, useEffect as T, useRef as F, useMemo as Ct, useLayoutEffect as $t } from "preact/hooks";
|
|
5
5
|
const pt = 3600 * 1e3;
|
|
6
|
-
function
|
|
6
|
+
function Y(e) {
|
|
7
7
|
return `paywall-${e}-trial-time-first-open`;
|
|
8
8
|
}
|
|
9
|
-
function
|
|
9
|
+
function X(e) {
|
|
10
10
|
return `paywall-${e}-skip-times`;
|
|
11
11
|
}
|
|
12
|
-
class
|
|
12
|
+
class It {
|
|
13
13
|
constructor(t, r, a) {
|
|
14
14
|
this.storage = t, this.paywallId = r, this.config = a;
|
|
15
15
|
}
|
|
@@ -20,10 +20,10 @@ class Ct {
|
|
|
20
20
|
return this.config.mode === "time" ? this.recordTime() : this.recordOpens();
|
|
21
21
|
}
|
|
22
22
|
async reset() {
|
|
23
|
-
await this.storage.removeItem(this.config.mode === "time" ?
|
|
23
|
+
await this.storage.removeItem(this.config.mode === "time" ? Y(this.paywallId) : X(this.paywallId));
|
|
24
24
|
}
|
|
25
25
|
async checkTime() {
|
|
26
|
-
const t = this.config.payload * pt, r = await this.storage.getItem(
|
|
26
|
+
const t = this.config.payload * pt, r = await this.storage.getItem(Y(this.paywallId)), a = r ? Number(r) : null;
|
|
27
27
|
if (!a || !Number.isFinite(a))
|
|
28
28
|
return {
|
|
29
29
|
mode: "time",
|
|
@@ -33,18 +33,18 @@ class Ct {
|
|
|
33
33
|
remainingMs: t,
|
|
34
34
|
totalMs: t
|
|
35
35
|
};
|
|
36
|
-
const
|
|
36
|
+
const i = a + t, o = Math.max(0, i - Date.now());
|
|
37
37
|
return {
|
|
38
38
|
mode: "time",
|
|
39
39
|
blocked: o > 0,
|
|
40
40
|
startedAt: a,
|
|
41
|
-
expiresAt:
|
|
41
|
+
expiresAt: i,
|
|
42
42
|
remainingMs: o,
|
|
43
43
|
totalMs: t
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
46
|
async checkOpens() {
|
|
47
|
-
const t = this.config.payload, r = await this.storage.getItem(
|
|
47
|
+
const t = this.config.payload, r = await this.storage.getItem(X(this.paywallId)), a = r ? Number(r) : 0, i = Number.isFinite(a) ? a : 0, o = i < t, s = Math.max(0, t - i);
|
|
48
48
|
return {
|
|
49
49
|
mode: "opens",
|
|
50
50
|
blocked: o,
|
|
@@ -53,21 +53,21 @@ class Ct {
|
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
55
|
async recordTime() {
|
|
56
|
-
const t = this.config.payload * pt, r =
|
|
57
|
-
let
|
|
58
|
-
(!
|
|
59
|
-
const o =
|
|
56
|
+
const t = this.config.payload * pt, r = Y(this.paywallId), a = await this.storage.getItem(r);
|
|
57
|
+
let i = a ? Number(a) : null;
|
|
58
|
+
(!i || !Number.isFinite(i)) && (i = Date.now(), await this.storage.setItem(r, String(i)));
|
|
59
|
+
const o = i + t, s = Math.max(0, o - Date.now());
|
|
60
60
|
return {
|
|
61
61
|
mode: "time",
|
|
62
62
|
blocked: s > 0,
|
|
63
|
-
startedAt:
|
|
63
|
+
startedAt: i,
|
|
64
64
|
expiresAt: o,
|
|
65
65
|
remainingMs: s,
|
|
66
66
|
totalMs: t
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
69
|
async recordOpens() {
|
|
70
|
-
const t = this.config.payload, r =
|
|
70
|
+
const t = this.config.payload, r = X(this.paywallId), a = await this.storage.getItem(r), i = a ? Number(a) : 0, o = Number.isFinite(i) ? i : 0, s = Math.min(t, o + 1);
|
|
71
71
|
await this.storage.setItem(r, String(s));
|
|
72
72
|
const l = Math.max(0, t - s);
|
|
73
73
|
return {
|
|
@@ -79,11 +79,11 @@ class Ct {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
let ht = !1;
|
|
82
|
-
class
|
|
82
|
+
class Gt {
|
|
83
83
|
constructor(t, r, a) {
|
|
84
84
|
ht || (ht = !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 It(t, r, a);
|
|
87
87
|
}
|
|
88
88
|
check() {
|
|
89
89
|
return this.fallback.check();
|
|
@@ -95,17 +95,17 @@ class $t {
|
|
|
95
95
|
return this.fallback.reset();
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
-
function
|
|
99
|
-
return r.storage === "server" ? new
|
|
98
|
+
function qt(e, t, r) {
|
|
99
|
+
return r.storage === "server" ? new Gt(e, t, r) : new It(e, t, r);
|
|
100
100
|
}
|
|
101
|
-
const It = '/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-600:oklch(57.7% .245 27.325);--color-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-4{padding:calc(var(--spacing) * 4)}.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)}}';
|
|
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
102
|
let gt = !1;
|
|
103
|
-
function
|
|
103
|
+
function Wt() {
|
|
104
104
|
if (gt || (gt = !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(At), e = t.cssRules;
|
|
109
109
|
} catch {
|
|
110
110
|
return;
|
|
111
111
|
}
|
|
@@ -123,13 +123,13 @@ function Gt() {
|
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
|
-
function
|
|
126
|
+
function Zt(e, t, r = {}) {
|
|
127
127
|
if (typeof document > "u")
|
|
128
128
|
throw new Error("mountShadow called in non-DOM environment");
|
|
129
|
-
|
|
129
|
+
Wt();
|
|
130
130
|
const a = r.host ?? document.createElement("div");
|
|
131
131
|
a.setAttribute("data-paywall-host", ""), a.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;", !a.isConnected && !r.inline && document.body.appendChild(a);
|
|
132
|
-
const
|
|
132
|
+
const i = a.attachShadow({ mode: r.shadowMode ?? "closed" }), o = `
|
|
133
133
|
:host {
|
|
134
134
|
all: initial !important;
|
|
135
135
|
display: block !important;
|
|
@@ -148,23 +148,23 @@ function qt(e, t, r = {}) {
|
|
|
148
148
|
visibility: visible !important;
|
|
149
149
|
}
|
|
150
150
|
`, s = document.createElement("style");
|
|
151
|
-
s.textContent = o +
|
|
151
|
+
s.textContent = o + At + (r.injectCss ?? ""), i.appendChild(s);
|
|
152
152
|
const l = document.createElement("div");
|
|
153
|
-
l.style.pointerEvents = "auto",
|
|
154
|
-
let
|
|
155
|
-
return
|
|
156
|
-
shadowRoot:
|
|
157
|
-
update(
|
|
158
|
-
|
|
153
|
+
l.style.pointerEvents = "auto", i.appendChild(l);
|
|
154
|
+
let u = t;
|
|
155
|
+
return K(ut(e, u), l), {
|
|
156
|
+
shadowRoot: i,
|
|
157
|
+
update(h) {
|
|
158
|
+
u = { ...u, ...h }, K(ut(e, u), l);
|
|
159
159
|
},
|
|
160
160
|
unmount() {
|
|
161
|
-
|
|
161
|
+
K(null, l), a.remove();
|
|
162
162
|
}
|
|
163
163
|
};
|
|
164
164
|
}
|
|
165
|
-
const
|
|
165
|
+
const Kt = (e, t, r) => {
|
|
166
166
|
const a = e[t];
|
|
167
|
-
return a ? typeof a == "function" ? a() : Promise.resolve(a) : new Promise((
|
|
167
|
+
return a ? typeof a == "function" ? a() : Promise.resolve(a) : new Promise((i, o) => {
|
|
168
168
|
(typeof queueMicrotask == "function" ? queueMicrotask : setTimeout)(
|
|
169
169
|
o.bind(
|
|
170
170
|
null,
|
|
@@ -174,7 +174,7 @@ const Wt = (e, t, r) => {
|
|
|
174
174
|
)
|
|
175
175
|
);
|
|
176
176
|
});
|
|
177
|
-
},
|
|
177
|
+
}, Yt = [
|
|
178
178
|
"ru",
|
|
179
179
|
"uk",
|
|
180
180
|
"de",
|
|
@@ -202,19 +202,19 @@ const Wt = (e, t, r) => {
|
|
|
202
202
|
"th",
|
|
203
203
|
"vi",
|
|
204
204
|
"he"
|
|
205
|
-
],
|
|
206
|
-
function
|
|
205
|
+
], Mt = (e, t, r) => Pt(t, r), Lt = Ht({ t: Mt, locale: "en" });
|
|
206
|
+
function Pt(e, t) {
|
|
207
207
|
if (!t) return e;
|
|
208
208
|
let r = e;
|
|
209
|
-
for (const [a,
|
|
210
|
-
r = r.split(`{${a}}`).join(String(
|
|
209
|
+
for (const [a, i] of Object.entries(t))
|
|
210
|
+
r = r.split(`{${a}}`).join(String(i));
|
|
211
211
|
return r;
|
|
212
212
|
}
|
|
213
|
-
const
|
|
214
|
-
function
|
|
215
|
-
return
|
|
213
|
+
const J = /* @__PURE__ */ new Map(), Q = /* @__PURE__ */ new Map();
|
|
214
|
+
function Tt(e) {
|
|
215
|
+
return Yt.includes(e);
|
|
216
216
|
}
|
|
217
|
-
function
|
|
217
|
+
function Xt(e) {
|
|
218
218
|
const t = [];
|
|
219
219
|
if (typeof navigator < "u" && navigator.language) {
|
|
220
220
|
t.push(navigator.language);
|
|
@@ -228,97 +228,100 @@ function Yt(e) {
|
|
|
228
228
|
a && a !== r && t.push(a);
|
|
229
229
|
}
|
|
230
230
|
for (const a of t)
|
|
231
|
-
if (
|
|
231
|
+
if (Tt(a)) return a;
|
|
232
232
|
return null;
|
|
233
233
|
}
|
|
234
|
-
function
|
|
234
|
+
function Jt(e) {
|
|
235
235
|
return !!e.locales && Object.keys(e.locales).length > 0;
|
|
236
236
|
}
|
|
237
|
-
async function
|
|
238
|
-
const t =
|
|
237
|
+
async function Qt(e) {
|
|
238
|
+
const t = J.get(e);
|
|
239
239
|
if (t) return t;
|
|
240
|
-
const r =
|
|
240
|
+
const r = Q.get(e);
|
|
241
241
|
if (r) return r;
|
|
242
|
-
const a =
|
|
243
|
-
const o =
|
|
244
|
-
return
|
|
245
|
-
}).catch((
|
|
246
|
-
console.warn(`[paywall] failed to load locale chunk "${e}"`,
|
|
242
|
+
const a = Kt(/* @__PURE__ */ Object.assign({ "./locales/ar.ts": () => import("./ar-nh4l4WDE.js"), "./locales/cs.ts": () => import("./cs-2UYO2rWf.js"), "./locales/da.ts": () => import("./da-BD0O_HfV.js"), "./locales/de.ts": () => import("./de-BkCiXPsn.js"), "./locales/el.ts": () => import("./el-cIcxTp07.js"), "./locales/es.ts": () => import("./es-CJBC_jrV.js"), "./locales/fi.ts": () => import("./fi-DyV7ynBf.js"), "./locales/fr.ts": () => import("./fr-BLQ4AIu7.js"), "./locales/he.ts": () => import("./he-Bg-Bqi7r.js"), "./locales/hi.ts": () => import("./hi-wQeE43oY.js"), "./locales/hu.ts": () => import("./hu-D9qxzu0r.js"), "./locales/id.ts": () => import("./id-Rx_wYvqy.js"), "./locales/it.ts": () => import("./it-B1SRPZ3e.js"), "./locales/ja.ts": () => import("./ja-DiItm8te.js"), "./locales/ko.ts": () => import("./ko-CdGFWAKX.js"), "./locales/nl.ts": () => import("./nl-CmZ3vEvj.js"), "./locales/no.ts": () => import("./no-BuxByZpq.js"), "./locales/pl.ts": () => import("./pl-jZFCnDb8.js"), "./locales/pt.ts": () => import("./pt-Cld7MwIW.js"), "./locales/ro.ts": () => import("./ro-CuKDqj3C.js"), "./locales/ru.ts": () => import("./ru-B7cjqJUm.js"), "./locales/sv.ts": () => import("./sv-D9y-M1Fo.js"), "./locales/th.ts": () => import("./th-D9umBjEy.js"), "./locales/tr.ts": () => import("./tr-BddMywiw.js"), "./locales/uk.ts": () => import("./uk-Dbd31hFt.js"), "./locales/vi.ts": () => import("./vi-Do3BMOdh.js"), "./locales/zh.ts": () => import("./zh-gQSYLZI3.js") }), `./locales/${e}.ts`, 3).then((i) => {
|
|
243
|
+
const o = i.default ?? {};
|
|
244
|
+
return J.set(e, o), o;
|
|
245
|
+
}).catch((i) => {
|
|
246
|
+
console.warn(`[paywall] failed to load locale chunk "${e}"`, i);
|
|
247
247
|
const o = {};
|
|
248
|
-
return
|
|
248
|
+
return J.set(e, o), o;
|
|
249
249
|
}).finally(() => {
|
|
250
|
-
|
|
250
|
+
Q.delete(e);
|
|
251
251
|
});
|
|
252
|
-
return
|
|
252
|
+
return Q.set(e, a), a;
|
|
253
253
|
}
|
|
254
|
-
function
|
|
255
|
-
const [
|
|
254
|
+
function te({ bootstrap: e, forceLocale: t, children: r }) {
|
|
255
|
+
const [a, i] = b("en"), [o, s] = b(null);
|
|
256
256
|
T(() => {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
257
|
+
const h = (t && Tt(t) ? t : null) ?? (!e || !Jt(e) ? null : Xt(e));
|
|
258
|
+
if (!h) {
|
|
259
|
+
(o !== null || a !== "en") && (i("en"), s(null));
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
if (h === a && o) return;
|
|
263
|
+
let d = !1;
|
|
264
|
+
return Qt(h).then((p) => {
|
|
265
|
+
d || (i(h), s(p));
|
|
263
266
|
}), () => {
|
|
264
|
-
|
|
267
|
+
d = !0;
|
|
265
268
|
};
|
|
266
|
-
}, [e]);
|
|
267
|
-
const
|
|
268
|
-
locale:
|
|
269
|
-
t:
|
|
269
|
+
}, [e, t]);
|
|
270
|
+
const l = {
|
|
271
|
+
locale: a,
|
|
272
|
+
t: o ? (u, h, d) => Pt(o[u] ?? h, d) : Mt
|
|
270
273
|
};
|
|
271
|
-
return /* @__PURE__ */
|
|
274
|
+
return /* @__PURE__ */ n(Lt.Provider, { value: l, children: r });
|
|
272
275
|
}
|
|
273
276
|
function v() {
|
|
274
|
-
return
|
|
277
|
+
return Vt(Lt);
|
|
275
278
|
}
|
|
276
279
|
const ft = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
277
|
-
function
|
|
280
|
+
function ee({
|
|
278
281
|
open: e,
|
|
279
282
|
onClose: t,
|
|
280
283
|
labelledBy: r,
|
|
281
284
|
brandColor: a,
|
|
282
|
-
topBanner:
|
|
285
|
+
topBanner: i,
|
|
283
286
|
allowClose: o = !0,
|
|
284
287
|
hideCloseButton: s = !1,
|
|
285
288
|
inline: l = !1,
|
|
286
|
-
children:
|
|
289
|
+
children: u
|
|
287
290
|
}) {
|
|
288
|
-
const { t:
|
|
291
|
+
const { t: h } = v(), d = F(null), p = F(null);
|
|
289
292
|
return T(() => {
|
|
290
293
|
if (!e) return;
|
|
291
|
-
|
|
292
|
-
const
|
|
293
|
-
|
|
294
|
-
const
|
|
295
|
-
if (
|
|
294
|
+
p.current = document.activeElement ?? null;
|
|
295
|
+
const f = d.current;
|
|
296
|
+
f && (f.querySelector(ft) ?? f).focus({ preventScroll: !0 });
|
|
297
|
+
const M = (y) => {
|
|
298
|
+
if (y.key === "Escape") {
|
|
296
299
|
if (!o) return;
|
|
297
|
-
|
|
300
|
+
y.stopPropagation(), t();
|
|
298
301
|
return;
|
|
299
302
|
}
|
|
300
|
-
if (
|
|
301
|
-
const
|
|
302
|
-
|
|
303
|
-
).filter((
|
|
304
|
-
if (
|
|
305
|
-
|
|
303
|
+
if (y.key !== "Tab" || !d.current) return;
|
|
304
|
+
const L = Array.from(
|
|
305
|
+
d.current.querySelectorAll(ft)
|
|
306
|
+
).filter((O) => !O.hasAttribute("disabled") && O.tabIndex !== -1);
|
|
307
|
+
if (L.length === 0) {
|
|
308
|
+
y.preventDefault();
|
|
306
309
|
return;
|
|
307
310
|
}
|
|
308
|
-
const
|
|
309
|
-
|
|
311
|
+
const I = L[0], z = L[L.length - 1], j = document.activeElement;
|
|
312
|
+
y.shiftKey && j === I ? (y.preventDefault(), z.focus()) : !y.shiftKey && j === z && (y.preventDefault(), I.focus());
|
|
310
313
|
};
|
|
311
|
-
document.addEventListener("keydown",
|
|
312
|
-
const
|
|
314
|
+
document.addEventListener("keydown", M, !0);
|
|
315
|
+
const E = document.body.style.overflow;
|
|
313
316
|
return l || (document.body.style.overflow = "hidden"), () => {
|
|
314
|
-
document.removeEventListener("keydown",
|
|
317
|
+
document.removeEventListener("keydown", M, !0), l || (document.body.style.overflow = E), p.current?.focus?.({ preventScroll: !0 });
|
|
315
318
|
};
|
|
316
319
|
}, [e, t, o, l]), e ? /* @__PURE__ */ c(
|
|
317
320
|
"div",
|
|
318
321
|
{
|
|
319
322
|
class: `${l ? "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]`,
|
|
320
|
-
onClick: (
|
|
321
|
-
o &&
|
|
323
|
+
onClick: (f) => {
|
|
324
|
+
o && f.target === f.currentTarget && t();
|
|
322
325
|
},
|
|
323
326
|
"data-pw-root": !0,
|
|
324
327
|
children: [
|
|
@@ -328,11 +331,11 @@ function te({
|
|
|
328
331
|
class: "relative flex w-full max-w-[400px] flex-col animate-[pw-scale-in_220ms_cubic-bezier(0.16,1,0.3,1)]",
|
|
329
332
|
style: { "--pw-accent": a ?? "#3b82f6" },
|
|
330
333
|
children: [
|
|
331
|
-
|
|
334
|
+
i,
|
|
332
335
|
/* @__PURE__ */ c(
|
|
333
336
|
"div",
|
|
334
337
|
{
|
|
335
|
-
ref:
|
|
338
|
+
ref: d,
|
|
336
339
|
role: "dialog",
|
|
337
340
|
"aria-modal": "true",
|
|
338
341
|
"aria-labelledby": r,
|
|
@@ -342,15 +345,15 @@ function te({
|
|
|
342
345
|
boxShadow: "0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.1)"
|
|
343
346
|
},
|
|
344
347
|
children: [
|
|
345
|
-
|
|
346
|
-
o && !s ? /* @__PURE__ */
|
|
348
|
+
u,
|
|
349
|
+
o && !s ? /* @__PURE__ */ n(
|
|
347
350
|
"button",
|
|
348
351
|
{
|
|
349
352
|
type: "button",
|
|
350
353
|
onClick: t,
|
|
351
|
-
"aria-label":
|
|
354
|
+
"aria-label": h("modal.close_aria", "Close"),
|
|
352
355
|
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)]",
|
|
353
|
-
children: /* @__PURE__ */
|
|
356
|
+
children: /* @__PURE__ */ n("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ n(
|
|
354
357
|
"path",
|
|
355
358
|
{
|
|
356
359
|
d: "M3 3l10 10M13 3L3 13",
|
|
@@ -367,7 +370,7 @@ function te({
|
|
|
367
370
|
]
|
|
368
371
|
}
|
|
369
372
|
),
|
|
370
|
-
/* @__PURE__ */
|
|
373
|
+
/* @__PURE__ */ n("style", { children: `
|
|
371
374
|
@keyframes pw-fade-in { from { opacity: 0 } to { opacity: 1 } }
|
|
372
375
|
@keyframes pw-scale-in {
|
|
373
376
|
from { opacity: 0; transform: translateY(12px) scale(0.96) }
|
|
@@ -378,7 +381,7 @@ function te({
|
|
|
378
381
|
}
|
|
379
382
|
) : null;
|
|
380
383
|
}
|
|
381
|
-
function
|
|
384
|
+
function re(e, t) {
|
|
382
385
|
switch (e) {
|
|
383
386
|
case "google":
|
|
384
387
|
return t("auth.continue_with_google", "Continue with Google");
|
|
@@ -390,30 +393,64 @@ function ee(e, t) {
|
|
|
390
393
|
return t("auth.continue_with_facebook", "Continue with Facebook");
|
|
391
394
|
}
|
|
392
395
|
}
|
|
393
|
-
function
|
|
394
|
-
const
|
|
396
|
+
function wt(e, t, r) {
|
|
397
|
+
const a = t === "signup" ? r("auth.signup_failed", "Sign-up failed") : r("auth.signin_failed", "Sign-in failed");
|
|
398
|
+
if (!(e instanceof U)) return a;
|
|
399
|
+
switch (e.code) {
|
|
400
|
+
case "invalid_credentials":
|
|
401
|
+
return r("auth.invalid_credentials", "Invalid email or password");
|
|
402
|
+
case "email_not_confirmed":
|
|
403
|
+
return r("auth.email_not_confirmed", "Please confirm your email before signing in.");
|
|
404
|
+
case "email_exists":
|
|
405
|
+
case "user_already_exists":
|
|
406
|
+
return r("auth.email_exists", "An account with this email already exists.");
|
|
407
|
+
case "weak_password":
|
|
408
|
+
return r("auth.weak_password", "Password is too weak.");
|
|
409
|
+
case "invalid_otp":
|
|
410
|
+
case "otp_expired":
|
|
411
|
+
case "token_expired":
|
|
412
|
+
return r("auth.invalid_otp", "The code is invalid or has expired.");
|
|
413
|
+
case "over_email_send_rate_limit":
|
|
414
|
+
case "over_request_rate_limit":
|
|
415
|
+
case "rate_limited":
|
|
416
|
+
case "http_429":
|
|
417
|
+
return r("auth.rate_limited", "Too many requests. Please try again in a moment.");
|
|
418
|
+
case "network_error":
|
|
419
|
+
return r("auth.network_error", "Network error. Please check your connection and try again.");
|
|
420
|
+
case "upstream":
|
|
421
|
+
case "upstream_error":
|
|
422
|
+
case "http_502":
|
|
423
|
+
case "http_503":
|
|
424
|
+
case "http_504":
|
|
425
|
+
return r("auth.service_unavailable", "Service is temporarily unavailable. Please try again.");
|
|
426
|
+
default:
|
|
427
|
+
return a;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
function Et({ block: e, ctx: t }) {
|
|
431
|
+
const r = t.auth, a = t.authSession, i = e.allow_signup !== !1, o = e.allow_password_reset !== !1, s = e.hide_when_authenticated !== !1;
|
|
395
432
|
if (!r)
|
|
396
433
|
return typeof console < "u" && console.warn("[paywall] auth_panel rendered without AuthClient — pass `auth: true` to PaywallUI"), null;
|
|
397
434
|
const l = a && !a.user.is_anonymous ? a : null;
|
|
398
|
-
return l && s ? null : l ? /* @__PURE__ */
|
|
399
|
-
}) }) : /* @__PURE__ */
|
|
400
|
-
|
|
435
|
+
return l && s ? null : l ? /* @__PURE__ */ n(ie, { email: l.user.email ?? "", onSignOut: () => r.signOut().catch(() => {
|
|
436
|
+
}) }) : /* @__PURE__ */ n(
|
|
437
|
+
ne,
|
|
401
438
|
{
|
|
402
439
|
block: e,
|
|
403
|
-
allowSignup:
|
|
440
|
+
allowSignup: i,
|
|
404
441
|
allowReset: o,
|
|
405
442
|
ctx: t
|
|
406
443
|
}
|
|
407
444
|
);
|
|
408
445
|
}
|
|
409
|
-
function
|
|
446
|
+
function ie({ email: e, onSignOut: t }) {
|
|
410
447
|
const { t: r } = v();
|
|
411
448
|
return /* @__PURE__ */ c("div", { class: "flex items-center justify-between gap-3 rounded-2xl bg-gray-100 px-4 py-3", children: [
|
|
412
449
|
/* @__PURE__ */ c("div", { class: "flex flex-col", children: [
|
|
413
|
-
/* @__PURE__ */
|
|
414
|
-
/* @__PURE__ */
|
|
450
|
+
/* @__PURE__ */ n("span", { class: "text-[10px] font-semibold uppercase tracking-wider text-gray-500", children: r("auth.signed_in", "Signed in") }),
|
|
451
|
+
/* @__PURE__ */ n("span", { class: "text-sm font-medium text-gray-900", children: e })
|
|
415
452
|
] }),
|
|
416
|
-
/* @__PURE__ */
|
|
453
|
+
/* @__PURE__ */ n(
|
|
417
454
|
"button",
|
|
418
455
|
{
|
|
419
456
|
type: "button",
|
|
@@ -424,14 +461,14 @@ function re({ email: e, onSignOut: t }) {
|
|
|
424
461
|
)
|
|
425
462
|
] });
|
|
426
463
|
}
|
|
427
|
-
function
|
|
428
|
-
const { t:
|
|
464
|
+
function ne({ block: e, allowSignup: t, allowReset: r, ctx: a }) {
|
|
465
|
+
const { t: i } = v(), o = a.auth, s = e.providers ?? [], [l, u] = b("signin"), [h, d] = b(""), [p, x] = b(""), [_, g] = b(""), [f, M] = b(""), [E, y] = b(null), [L, I] = b(null), [z, j] = b(null), [O, D] = b(!1), [R, N] = b(null);
|
|
429
466
|
T(() => {
|
|
430
467
|
if (typeof o.getLastLogin != "function") return;
|
|
431
468
|
let S = !1;
|
|
432
469
|
return o.getLastLogin().then(
|
|
433
|
-
(
|
|
434
|
-
S || !
|
|
470
|
+
(P) => {
|
|
471
|
+
S || !P || (N(P), P.email && d((V) => V === "" ? P.email : V));
|
|
435
472
|
},
|
|
436
473
|
() => {
|
|
437
474
|
}
|
|
@@ -439,170 +476,167 @@ function ie({ block: e, allowSignup: t, allowReset: r, ctx: a }) {
|
|
|
439
476
|
S = !0;
|
|
440
477
|
};
|
|
441
478
|
}, [o]);
|
|
442
|
-
const
|
|
443
|
-
|
|
444
|
-
},
|
|
445
|
-
if (S.preventDefault(), !
|
|
446
|
-
if (
|
|
447
|
-
if (!
|
|
479
|
+
const A = (S) => {
|
|
480
|
+
u(S), I(null), j(null), D(!1);
|
|
481
|
+
}, C = async (S) => {
|
|
482
|
+
if (S.preventDefault(), !E) {
|
|
483
|
+
if (I(null), j(null), l === "signup" && !O) {
|
|
484
|
+
if (!h.trim()) return;
|
|
448
485
|
D(!0);
|
|
449
486
|
return;
|
|
450
487
|
}
|
|
451
|
-
if (l === "signup" &&
|
|
452
|
-
|
|
488
|
+
if (l === "signup" && p !== _) {
|
|
489
|
+
I(i("auth.passwords_mismatch", "Passwords don't match"));
|
|
453
490
|
return;
|
|
454
491
|
}
|
|
455
|
-
|
|
492
|
+
y("email");
|
|
456
493
|
try {
|
|
457
|
-
l === "signin" ? await o.signInWithEmail({ email:
|
|
458
|
-
|
|
494
|
+
l === "signin" ? await o.signInWithEmail({ email: h, password: p }) : l === "signup" ? (await o.signUp({ email: h, password: p })).kind === "confirmation_required" && (u("reset_verify"), j(i("auth.check_email_message", "Check your email for a confirmation code."))) : l === "forgot" ? (await o.requestPasswordReset({ email: h }), u("reset_sent"), j(
|
|
495
|
+
i("auth.reset_sent_message", "If that email exists, a reset code has been sent.")
|
|
459
496
|
)) : l === "reset_verify" && (await o.verifyOtp({
|
|
460
|
-
email:
|
|
461
|
-
token:
|
|
462
|
-
type:
|
|
463
|
-
}),
|
|
464
|
-
} catch (
|
|
465
|
-
|
|
466
|
-
C(V);
|
|
497
|
+
email: h,
|
|
498
|
+
token: f,
|
|
499
|
+
type: p ? "recovery" : "email"
|
|
500
|
+
}), p && await o.updatePassword({ password: p }));
|
|
501
|
+
} catch (P) {
|
|
502
|
+
I(wt(P, l === "signup" ? "signup" : l === "reset_verify" ? "otp" : l === "forgot" ? "reset" : "signin", i));
|
|
467
503
|
} finally {
|
|
468
|
-
|
|
504
|
+
y(null);
|
|
469
505
|
}
|
|
470
506
|
}
|
|
471
|
-
},
|
|
472
|
-
if (!
|
|
473
|
-
|
|
507
|
+
}, B = async (S) => {
|
|
508
|
+
if (!E) {
|
|
509
|
+
y(S), I(null), j(null);
|
|
474
510
|
try {
|
|
475
511
|
await o.signInWithOAuth({
|
|
476
512
|
provider: S,
|
|
477
|
-
onPopupOpened: () =>
|
|
513
|
+
onPopupOpened: () => y(null)
|
|
478
514
|
});
|
|
479
|
-
} catch (
|
|
480
|
-
if (
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
} else
|
|
484
|
-
C(n("auth.signin_failed", "Sign-in failed"));
|
|
515
|
+
} catch (P) {
|
|
516
|
+
if (P instanceof U && (P.code === "oauth_cancelled" || P.code === "oauth_timeout"))
|
|
517
|
+
return;
|
|
518
|
+
I(wt(P, "signin", i));
|
|
485
519
|
} finally {
|
|
486
|
-
|
|
520
|
+
y(null);
|
|
487
521
|
}
|
|
488
522
|
}
|
|
489
|
-
},
|
|
523
|
+
}, w = s.length > 0 && (l === "signin" || l === "signup"), m = l === "signin" || l === "signup" || l === "forgot", k = l === "signin" || l === "signup" && O;
|
|
490
524
|
return /* @__PURE__ */ c("div", { class: "flex flex-col gap-5", children: [
|
|
491
|
-
/* @__PURE__ */
|
|
492
|
-
|
|
525
|
+
/* @__PURE__ */ n(ae, { mode: l, customHeading: e.heading, customSubheading: e.subheading }),
|
|
526
|
+
w ? /* @__PURE__ */ c("div", { class: "flex flex-col gap-2.5", children: [
|
|
493
527
|
s.map((S) => /* @__PURE__ */ c("div", { class: "relative", children: [
|
|
494
528
|
/* @__PURE__ */ c(
|
|
495
529
|
"button",
|
|
496
530
|
{
|
|
497
531
|
type: "button",
|
|
498
|
-
onClick: () =>
|
|
499
|
-
disabled:
|
|
532
|
+
onClick: () => B(S),
|
|
533
|
+
disabled: E !== null,
|
|
500
534
|
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)]",
|
|
501
535
|
children: [
|
|
502
|
-
|
|
503
|
-
/* @__PURE__ */
|
|
536
|
+
E === S ? /* @__PURE__ */ n("span", { class: "inline-block h-4 w-4 animate-spin rounded-full border-2 border-gray-300 border-t-gray-700" }) : /* @__PURE__ */ n(ge, { provider: S }),
|
|
537
|
+
/* @__PURE__ */ n("span", { children: re(S, i) })
|
|
504
538
|
]
|
|
505
539
|
}
|
|
506
540
|
),
|
|
507
|
-
|
|
541
|
+
R?.method === S ? /* @__PURE__ */ n(bt, { email: R.email }) : null
|
|
508
542
|
] }, S)),
|
|
509
|
-
/* @__PURE__ */
|
|
543
|
+
/* @__PURE__ */ n(he, {})
|
|
510
544
|
] }) : null,
|
|
511
|
-
/* @__PURE__ */ c("form", { onSubmit:
|
|
512
|
-
|
|
513
|
-
|
|
545
|
+
/* @__PURE__ */ c("form", { onSubmit: C, class: "flex flex-col gap-3", children: [
|
|
546
|
+
m && /* @__PURE__ */ n(
|
|
547
|
+
mt,
|
|
514
548
|
{
|
|
515
549
|
type: "email",
|
|
516
|
-
placeholder:
|
|
517
|
-
value:
|
|
518
|
-
onInput:
|
|
550
|
+
placeholder: i("auth.email", "Email address"),
|
|
551
|
+
value: h,
|
|
552
|
+
onInput: d,
|
|
519
553
|
autocomplete: "email",
|
|
520
554
|
required: !0
|
|
521
555
|
}
|
|
522
556
|
),
|
|
523
|
-
|
|
524
|
-
|
|
557
|
+
k && /* @__PURE__ */ n(
|
|
558
|
+
tt,
|
|
525
559
|
{
|
|
526
|
-
placeholder:
|
|
527
|
-
value:
|
|
560
|
+
placeholder: i("auth.password", "Password"),
|
|
561
|
+
value: p,
|
|
528
562
|
onInput: x,
|
|
529
563
|
autocomplete: l === "signin" ? "current-password" : "new-password",
|
|
530
564
|
required: !0
|
|
531
565
|
}
|
|
532
566
|
),
|
|
533
|
-
l === "signup" &&
|
|
534
|
-
|
|
567
|
+
l === "signup" && O && /* @__PURE__ */ n(
|
|
568
|
+
tt,
|
|
535
569
|
{
|
|
536
|
-
placeholder:
|
|
537
|
-
value:
|
|
538
|
-
onInput:
|
|
570
|
+
placeholder: i("auth.repeat_password", "Repeat password"),
|
|
571
|
+
value: _,
|
|
572
|
+
onInput: g,
|
|
539
573
|
autocomplete: "new-password",
|
|
540
574
|
required: !0
|
|
541
575
|
}
|
|
542
576
|
),
|
|
543
|
-
l === "reset_verify" && /* @__PURE__ */ c(
|
|
544
|
-
/* @__PURE__ */
|
|
545
|
-
|
|
577
|
+
l === "reset_verify" && /* @__PURE__ */ c(Z, { children: [
|
|
578
|
+
/* @__PURE__ */ n(
|
|
579
|
+
mt,
|
|
546
580
|
{
|
|
547
581
|
type: "text",
|
|
548
|
-
placeholder:
|
|
549
|
-
value:
|
|
550
|
-
onInput:
|
|
582
|
+
placeholder: i("auth.confirmation_code", "Confirmation code"),
|
|
583
|
+
value: f,
|
|
584
|
+
onInput: M,
|
|
551
585
|
autocomplete: "one-time-code",
|
|
552
586
|
inputMode: "numeric",
|
|
553
587
|
required: !0
|
|
554
588
|
}
|
|
555
589
|
),
|
|
556
|
-
/* @__PURE__ */
|
|
557
|
-
|
|
590
|
+
/* @__PURE__ */ n(
|
|
591
|
+
tt,
|
|
558
592
|
{
|
|
559
|
-
placeholder:
|
|
593
|
+
placeholder: i(
|
|
560
594
|
"auth.new_password_optional",
|
|
561
595
|
"New password (optional — only for password reset)"
|
|
562
596
|
),
|
|
563
|
-
value:
|
|
597
|
+
value: p,
|
|
564
598
|
onInput: x,
|
|
565
599
|
autocomplete: "new-password"
|
|
566
600
|
}
|
|
567
601
|
)
|
|
568
602
|
] }),
|
|
569
|
-
l === "reset_sent" &&
|
|
570
|
-
l === "signin" && r && /* @__PURE__ */
|
|
571
|
-
|
|
572
|
-
|
|
603
|
+
l === "reset_sent" && z && /* @__PURE__ */ n("p", { class: "rounded-2xl bg-gray-100 px-4 py-3 text-sm text-gray-600", children: z }),
|
|
604
|
+
l === "signin" && r && /* @__PURE__ */ n("div", { class: "flex justify-end text-sm", children: /* @__PURE__ */ n(W, { onClick: () => A("forgot"), children: i("auth.forgot_password", "Forgot password?") }) }),
|
|
605
|
+
L && /* @__PURE__ */ n("p", { class: "text-sm text-red-600", children: L }),
|
|
606
|
+
z && l !== "reset_sent" && /* @__PURE__ */ n("p", { class: "text-sm text-gray-500", children: z }),
|
|
573
607
|
l !== "reset_sent" && /* @__PURE__ */ c("div", { class: "relative", children: [
|
|
574
|
-
/* @__PURE__ */
|
|
575
|
-
|
|
608
|
+
/* @__PURE__ */ n(
|
|
609
|
+
ce,
|
|
576
610
|
{
|
|
577
|
-
busy:
|
|
578
|
-
label:
|
|
611
|
+
busy: E === "email",
|
|
612
|
+
label: se(l, O, e.submit_label ?? e.heading, i)
|
|
579
613
|
}
|
|
580
614
|
),
|
|
581
|
-
l === "signin" &&
|
|
615
|
+
l === "signin" && R?.method === "email" ? /* @__PURE__ */ n(bt, { email: R.email }) : null
|
|
582
616
|
] })
|
|
583
617
|
] }),
|
|
584
|
-
/* @__PURE__ */
|
|
585
|
-
|
|
618
|
+
/* @__PURE__ */ n(
|
|
619
|
+
le,
|
|
586
620
|
{
|
|
587
621
|
mode: l,
|
|
588
622
|
allowSignup: t,
|
|
589
|
-
onSwitch:
|
|
623
|
+
onSwitch: A
|
|
590
624
|
}
|
|
591
625
|
)
|
|
592
626
|
] });
|
|
593
627
|
}
|
|
594
|
-
function
|
|
628
|
+
function ae({
|
|
595
629
|
mode: e,
|
|
596
630
|
customHeading: t,
|
|
597
631
|
customSubheading: r
|
|
598
632
|
}) {
|
|
599
|
-
const { t: a } = v(),
|
|
633
|
+
const { t: a } = v(), i = oe(e, a), o = e === "signin" || e === "signup", s = o && t ? t : i.title, l = o && r !== void 0 ? r || null : i.subtitle;
|
|
600
634
|
return /* @__PURE__ */ c("div", { class: "flex flex-col gap-2", children: [
|
|
601
|
-
/* @__PURE__ */
|
|
602
|
-
l ? /* @__PURE__ */
|
|
635
|
+
/* @__PURE__ */ n("h2", { class: "text-3xl font-bold tracking-tight text-gray-900", children: s }),
|
|
636
|
+
l ? /* @__PURE__ */ n("p", { class: "text-base leading-relaxed text-gray-600", children: l }) : null
|
|
603
637
|
] });
|
|
604
638
|
}
|
|
605
|
-
function
|
|
639
|
+
function oe(e, t) {
|
|
606
640
|
switch (e) {
|
|
607
641
|
case "signin":
|
|
608
642
|
return {
|
|
@@ -637,7 +671,7 @@ function ae(e, t) {
|
|
|
637
671
|
};
|
|
638
672
|
}
|
|
639
673
|
}
|
|
640
|
-
function
|
|
674
|
+
function se(e, t, r, a) {
|
|
641
675
|
if (e === "signin" && r) return r;
|
|
642
676
|
switch (e) {
|
|
643
677
|
case "signin":
|
|
@@ -652,7 +686,7 @@ function oe(e, t, r, a) {
|
|
|
652
686
|
return a("cta.continue", "Continue");
|
|
653
687
|
}
|
|
654
688
|
}
|
|
655
|
-
function
|
|
689
|
+
function le({
|
|
656
690
|
mode: e,
|
|
657
691
|
allowSignup: t,
|
|
658
692
|
onSwitch: r
|
|
@@ -661,22 +695,22 @@ function se({
|
|
|
661
695
|
return e === "signin" && t ? /* @__PURE__ */ c("p", { class: "text-center text-sm text-gray-600", children: [
|
|
662
696
|
a("auth.no_account", "Don't have an account?"),
|
|
663
697
|
" ",
|
|
664
|
-
/* @__PURE__ */
|
|
698
|
+
/* @__PURE__ */ n(W, { onClick: () => r("signup"), children: a("auth.sign_up_link", "Sign Up") })
|
|
665
699
|
] }) : e === "signup" ? /* @__PURE__ */ c("p", { class: "text-center text-sm text-gray-600", children: [
|
|
666
700
|
a("auth.have_account", "Already have an account?"),
|
|
667
701
|
" ",
|
|
668
|
-
/* @__PURE__ */
|
|
702
|
+
/* @__PURE__ */ n(W, { onClick: () => r("signin"), children: a("auth.log_in_link", "Log In") })
|
|
669
703
|
] }) : e === "forgot" || e === "reset_sent" || e === "reset_verify" ? /* @__PURE__ */ c("p", { class: "text-center text-sm text-gray-600", children: [
|
|
670
704
|
a("auth.no_account", "Don't have an account?"),
|
|
671
705
|
" ",
|
|
672
|
-
/* @__PURE__ */
|
|
706
|
+
/* @__PURE__ */ n(W, { onClick: () => r("signup"), children: a("auth.sign_up_link", "Sign Up") })
|
|
673
707
|
] }) : null;
|
|
674
708
|
}
|
|
675
|
-
function
|
|
709
|
+
function W({
|
|
676
710
|
onClick: e,
|
|
677
711
|
children: t
|
|
678
712
|
}) {
|
|
679
|
-
return /* @__PURE__ */
|
|
713
|
+
return /* @__PURE__ */ n(
|
|
680
714
|
"button",
|
|
681
715
|
{
|
|
682
716
|
type: "button",
|
|
@@ -687,8 +721,8 @@ function G({
|
|
|
687
721
|
}
|
|
688
722
|
);
|
|
689
723
|
}
|
|
690
|
-
function
|
|
691
|
-
return /* @__PURE__ */
|
|
724
|
+
function ce({ busy: e, label: t }) {
|
|
725
|
+
return /* @__PURE__ */ n(
|
|
692
726
|
"button",
|
|
693
727
|
{
|
|
694
728
|
type: "submit",
|
|
@@ -698,62 +732,62 @@ function le({ busy: e, label: t }) {
|
|
|
698
732
|
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%)",
|
|
699
733
|
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)"
|
|
700
734
|
},
|
|
701
|
-
children: e ? /* @__PURE__ */
|
|
735
|
+
children: e ? /* @__PURE__ */ n("span", { class: "relative z-10 inline-block h-4 w-4 animate-spin rounded-full border-2 border-white/40 border-t-white" }) : /* @__PURE__ */ n("span", { class: "relative z-10", children: t })
|
|
702
736
|
}
|
|
703
737
|
);
|
|
704
738
|
}
|
|
705
|
-
function
|
|
706
|
-
return /* @__PURE__ */
|
|
739
|
+
function mt({ type: e, placeholder: t, value: r, onInput: a, autocomplete: i, inputMode: o, required: s }) {
|
|
740
|
+
return /* @__PURE__ */ n(
|
|
707
741
|
"input",
|
|
708
742
|
{
|
|
709
743
|
type: e,
|
|
710
744
|
value: r,
|
|
711
745
|
placeholder: t,
|
|
712
746
|
onInput: (l) => a(l.target.value),
|
|
713
|
-
autocomplete:
|
|
747
|
+
autocomplete: i,
|
|
714
748
|
inputMode: o,
|
|
715
749
|
required: s,
|
|
716
750
|
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 focus:shadow-[0_0_0_2px_color-mix(in_srgb,var(--pw-accent)_30%,transparent)]"
|
|
717
751
|
}
|
|
718
752
|
);
|
|
719
753
|
}
|
|
720
|
-
function
|
|
721
|
-
const { t: o } = v(), [s, l] = b(!1),
|
|
754
|
+
function tt({ placeholder: e, value: t, onInput: r, autocomplete: a, required: i }) {
|
|
755
|
+
const { t: o } = v(), [s, l] = b(!1), u = F(null);
|
|
722
756
|
T(() => {
|
|
723
|
-
const
|
|
724
|
-
|
|
757
|
+
const p = u.current;
|
|
758
|
+
p && p.value !== t && (p.value = t);
|
|
725
759
|
}, [s, t]);
|
|
726
|
-
const
|
|
760
|
+
const h = o("auth.show_password", "Show password"), d = o("auth.hide_password", "Hide password");
|
|
727
761
|
return /* @__PURE__ */ c("div", { class: "relative", children: [
|
|
728
|
-
/* @__PURE__ */
|
|
762
|
+
/* @__PURE__ */ n(
|
|
729
763
|
"input",
|
|
730
764
|
{
|
|
731
|
-
ref:
|
|
765
|
+
ref: u,
|
|
732
766
|
type: s ? "text" : "password",
|
|
733
767
|
value: t,
|
|
734
768
|
placeholder: e,
|
|
735
|
-
onInput: (
|
|
769
|
+
onInput: (p) => r(p.target.value),
|
|
736
770
|
autocomplete: a,
|
|
737
|
-
required:
|
|
771
|
+
required: i,
|
|
738
772
|
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)]"
|
|
739
773
|
}
|
|
740
774
|
),
|
|
741
|
-
/* @__PURE__ */
|
|
775
|
+
/* @__PURE__ */ n(
|
|
742
776
|
"button",
|
|
743
777
|
{
|
|
744
778
|
type: "button",
|
|
745
|
-
onClick: () => l((
|
|
746
|
-
"aria-label": s ?
|
|
779
|
+
onClick: () => l((p) => !p),
|
|
780
|
+
"aria-label": s ? d : h,
|
|
747
781
|
tabIndex: -1,
|
|
748
782
|
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)]",
|
|
749
|
-
children: s ? /* @__PURE__ */
|
|
783
|
+
children: s ? /* @__PURE__ */ n(ue, {}) : /* @__PURE__ */ n(de, {})
|
|
750
784
|
}
|
|
751
785
|
)
|
|
752
786
|
] });
|
|
753
787
|
}
|
|
754
|
-
function
|
|
788
|
+
function de() {
|
|
755
789
|
return /* @__PURE__ */ c("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
756
|
-
/* @__PURE__ */
|
|
790
|
+
/* @__PURE__ */ n(
|
|
757
791
|
"path",
|
|
758
792
|
{
|
|
759
793
|
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",
|
|
@@ -763,12 +797,12 @@ function ce() {
|
|
|
763
797
|
"stroke-linejoin": "round"
|
|
764
798
|
}
|
|
765
799
|
),
|
|
766
|
-
/* @__PURE__ */
|
|
800
|
+
/* @__PURE__ */ n("circle", { cx: "10", cy: "10", r: "2.5", stroke: "currentColor", "stroke-width": "1.5" })
|
|
767
801
|
] });
|
|
768
802
|
}
|
|
769
|
-
function
|
|
803
|
+
function ue() {
|
|
770
804
|
return /* @__PURE__ */ c("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
771
|
-
/* @__PURE__ */
|
|
805
|
+
/* @__PURE__ */ n(
|
|
772
806
|
"path",
|
|
773
807
|
{
|
|
774
808
|
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",
|
|
@@ -778,7 +812,7 @@ function de() {
|
|
|
778
812
|
"stroke-linejoin": "round"
|
|
779
813
|
}
|
|
780
814
|
),
|
|
781
|
-
/* @__PURE__ */
|
|
815
|
+
/* @__PURE__ */ n(
|
|
782
816
|
"path",
|
|
783
817
|
{
|
|
784
818
|
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",
|
|
@@ -790,45 +824,45 @@ function de() {
|
|
|
790
824
|
)
|
|
791
825
|
] });
|
|
792
826
|
}
|
|
793
|
-
function
|
|
794
|
-
const { t } = v(), r = e ? t("auth.last_used", "Last · {email}", { email:
|
|
795
|
-
return /* @__PURE__ */
|
|
827
|
+
function bt({ email: e }) {
|
|
828
|
+
const { t } = v(), r = e ? t("auth.last_used", "Last · {email}", { email: pe(e) }) : t("auth.last_used_no_email", "Last");
|
|
829
|
+
return /* @__PURE__ */ n("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 });
|
|
796
830
|
}
|
|
797
|
-
function
|
|
831
|
+
function pe(e) {
|
|
798
832
|
const [t, r] = e.split("@");
|
|
799
833
|
return r ? `${t.slice(0, 3)}*****@${r}` : e;
|
|
800
834
|
}
|
|
801
|
-
function
|
|
835
|
+
function he() {
|
|
802
836
|
const { t: e } = v();
|
|
803
837
|
return /* @__PURE__ */ c("div", { class: "flex items-center gap-3 py-1 text-sm text-gray-400", children: [
|
|
804
|
-
/* @__PURE__ */
|
|
805
|
-
/* @__PURE__ */
|
|
806
|
-
/* @__PURE__ */
|
|
838
|
+
/* @__PURE__ */ n("div", { class: "h-px flex-1 bg-gray-200" }),
|
|
839
|
+
/* @__PURE__ */ n("span", { children: e("auth.or", "or") }),
|
|
840
|
+
/* @__PURE__ */ n("div", { class: "h-px flex-1 bg-gray-200" })
|
|
807
841
|
] });
|
|
808
842
|
}
|
|
809
|
-
function
|
|
843
|
+
function ge({ provider: e }) {
|
|
810
844
|
return e === "google" ? /* @__PURE__ */ c("svg", { width: "20", height: "20", viewBox: "0 0 18 18", "aria-hidden": "true", children: [
|
|
811
|
-
/* @__PURE__ */
|
|
812
|
-
/* @__PURE__ */
|
|
813
|
-
/* @__PURE__ */
|
|
814
|
-
/* @__PURE__ */
|
|
845
|
+
/* @__PURE__ */ n("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" }),
|
|
846
|
+
/* @__PURE__ */ n("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" }),
|
|
847
|
+
/* @__PURE__ */ n("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" }),
|
|
848
|
+
/* @__PURE__ */ n("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" })
|
|
815
849
|
] }) : e === "apple" ? (
|
|
816
850
|
// viewBox 0 0 24 24 даёт воздух сверху/снизу пути, поэтому визуально
|
|
817
851
|
// Apple-яблоко выглядит меньше Google. Компенсируем увеличенным
|
|
818
852
|
// width/height — 26×26 даёт примерно equal optical size с Google 20×20.
|
|
819
|
-
/* @__PURE__ */
|
|
820
|
-
) : e === "github" ? /* @__PURE__ */
|
|
853
|
+
/* @__PURE__ */ n("svg", { width: "26", height: "26", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ n("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" }) })
|
|
854
|
+
) : e === "github" ? /* @__PURE__ */ n("svg", { width: "20", height: "20", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ n("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__ */ n("svg", { width: "18", height: "20", viewBox: "0 0 14 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ n("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" }) });
|
|
821
855
|
}
|
|
822
|
-
function
|
|
856
|
+
function fe({
|
|
823
857
|
block: e,
|
|
824
858
|
bootstrap: t,
|
|
825
859
|
auth: r,
|
|
826
860
|
authSession: a,
|
|
827
|
-
onBack:
|
|
861
|
+
onBack: i,
|
|
828
862
|
showBack: o = !0,
|
|
829
863
|
intent: s = "preauth"
|
|
830
864
|
}) {
|
|
831
|
-
const { t: l } = v(),
|
|
865
|
+
const { t: l } = v(), u = {
|
|
832
866
|
bootstrap: t,
|
|
833
867
|
selectedPriceId: null,
|
|
834
868
|
setSelectedPriceId: () => {
|
|
@@ -837,7 +871,7 @@ function ge({
|
|
|
837
871
|
},
|
|
838
872
|
auth: r,
|
|
839
873
|
authSession: a
|
|
840
|
-
},
|
|
874
|
+
}, h = s === "restore" ? {
|
|
841
875
|
...e,
|
|
842
876
|
heading: l("auth.restore_purchases_heading", "Restore Purchases"),
|
|
843
877
|
subheading: l(
|
|
@@ -858,12 +892,12 @@ function ge({
|
|
|
858
892
|
submit_label: l("auth.log_in", "Sign In")
|
|
859
893
|
} : e;
|
|
860
894
|
return /* @__PURE__ */ c("div", { class: "relative flex-1 min-h-0 overflow-y-auto p-6 sm:p-8", children: [
|
|
861
|
-
o ? /* @__PURE__ */
|
|
862
|
-
/* @__PURE__ */
|
|
895
|
+
o ? /* @__PURE__ */ n(we, { onClick: i, ariaLabel: l("nav.back_aria", "Back") }) : null,
|
|
896
|
+
/* @__PURE__ */ n(Et, { block: h, ctx: u })
|
|
863
897
|
] });
|
|
864
898
|
}
|
|
865
|
-
function
|
|
866
|
-
return /* @__PURE__ */
|
|
899
|
+
function we({ onClick: e, ariaLabel: t }) {
|
|
900
|
+
return /* @__PURE__ */ n(
|
|
867
901
|
"button",
|
|
868
902
|
{
|
|
869
903
|
type: "button",
|
|
@@ -871,7 +905,7 @@ function fe({ onClick: e, ariaLabel: t }) {
|
|
|
871
905
|
"aria-label": t,
|
|
872
906
|
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)]",
|
|
873
907
|
children: /* @__PURE__ */ c("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
874
|
-
/* @__PURE__ */
|
|
908
|
+
/* @__PURE__ */ n(
|
|
875
909
|
"path",
|
|
876
910
|
{
|
|
877
911
|
d: "M5 8h8a4 4 0 0 1 0 8H9",
|
|
@@ -881,7 +915,7 @@ function fe({ onClick: e, ariaLabel: t }) {
|
|
|
881
915
|
"stroke-linejoin": "round"
|
|
882
916
|
}
|
|
883
917
|
),
|
|
884
|
-
/* @__PURE__ */
|
|
918
|
+
/* @__PURE__ */ n(
|
|
885
919
|
"path",
|
|
886
920
|
{
|
|
887
921
|
d: "M8 4 4 8l4 4",
|
|
@@ -895,26 +929,26 @@ function fe({ onClick: e, ariaLabel: t }) {
|
|
|
895
929
|
}
|
|
896
930
|
);
|
|
897
931
|
}
|
|
898
|
-
function
|
|
932
|
+
function me({
|
|
899
933
|
auth: e,
|
|
900
934
|
onSuccess: t,
|
|
901
935
|
onBack: r,
|
|
902
936
|
heading: a,
|
|
903
|
-
description:
|
|
937
|
+
description: i
|
|
904
938
|
}) {
|
|
905
|
-
const { t: o } = v(), s = a ?? o("anon.heading_default", "Continue as guest"), l =
|
|
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);
|
|
906
940
|
T(() => () => {
|
|
907
|
-
|
|
941
|
+
d.current = !1;
|
|
908
942
|
}, []);
|
|
909
|
-
const
|
|
910
|
-
|
|
943
|
+
const p = () => {
|
|
944
|
+
h({ kind: "signing-in" }), (async () => {
|
|
911
945
|
try {
|
|
912
946
|
const x = await e.signInAnonymously();
|
|
913
|
-
if (!
|
|
947
|
+
if (!d.current) return;
|
|
914
948
|
t(x);
|
|
915
949
|
} catch (x) {
|
|
916
|
-
if (!
|
|
917
|
-
|
|
950
|
+
if (!d.current) return;
|
|
951
|
+
h({
|
|
918
952
|
kind: "error",
|
|
919
953
|
message: x instanceof Error ? x.message : "Anonymous sign-in failed"
|
|
920
954
|
});
|
|
@@ -922,9 +956,9 @@ function we({
|
|
|
922
956
|
})();
|
|
923
957
|
};
|
|
924
958
|
return T(() => {
|
|
925
|
-
|
|
959
|
+
p();
|
|
926
960
|
}, []), /* @__PURE__ */ c("div", { class: "flex flex-col gap-3", children: [
|
|
927
|
-
r ? /* @__PURE__ */
|
|
961
|
+
r ? /* @__PURE__ */ n(
|
|
928
962
|
"button",
|
|
929
963
|
{
|
|
930
964
|
type: "button",
|
|
@@ -934,17 +968,17 @@ function we({
|
|
|
934
968
|
}
|
|
935
969
|
) : null,
|
|
936
970
|
/* @__PURE__ */ c("div", { class: "flex flex-col gap-1", children: [
|
|
937
|
-
/* @__PURE__ */
|
|
938
|
-
/* @__PURE__ */
|
|
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 })
|
|
939
973
|
] }),
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
/* @__PURE__ */
|
|
943
|
-
/* @__PURE__ */
|
|
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(
|
|
944
978
|
"button",
|
|
945
979
|
{
|
|
946
980
|
type: "button",
|
|
947
|
-
onClick:
|
|
981
|
+
onClick: p,
|
|
948
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",
|
|
949
983
|
children: o("anon.try_again", "Try again")
|
|
950
984
|
}
|
|
@@ -952,14 +986,14 @@ function we({
|
|
|
952
986
|
] }) : null
|
|
953
987
|
] });
|
|
954
988
|
}
|
|
955
|
-
function
|
|
989
|
+
function be() {
|
|
956
990
|
return /* @__PURE__ */ c("svg", { class: "h-5 w-5 animate-spin text-[var(--pw-accent)]", viewBox: "0 0 24 24", fill: "none", children: [
|
|
957
|
-
/* @__PURE__ */
|
|
958
|
-
/* @__PURE__ */
|
|
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" })
|
|
959
993
|
] });
|
|
960
994
|
}
|
|
961
|
-
const
|
|
962
|
-
function
|
|
995
|
+
const jt = (e) => `pw-offer-${e}-start`;
|
|
996
|
+
function et(e) {
|
|
963
997
|
const t = e - Date.now();
|
|
964
998
|
return t <= 0 ? { days: 0, hours: 0, minutes: 0, seconds: 0, expired: !0 } : {
|
|
965
999
|
days: Math.floor(t / (1e3 * 60 * 60 * 24)),
|
|
@@ -969,7 +1003,7 @@ function tt(e) {
|
|
|
969
1003
|
expired: !1
|
|
970
1004
|
};
|
|
971
1005
|
}
|
|
972
|
-
function
|
|
1006
|
+
function xe(e) {
|
|
973
1007
|
if (e.expires_at) {
|
|
974
1008
|
const t = Date.parse(e.expires_at);
|
|
975
1009
|
return Number.isFinite(t) ? t : null;
|
|
@@ -977,7 +1011,7 @@ function be(e) {
|
|
|
977
1011
|
if (e.duration_minutes && e.duration_minutes > 0) {
|
|
978
1012
|
if (typeof window > "u") return null;
|
|
979
1013
|
try {
|
|
980
|
-
const t =
|
|
1014
|
+
const t = jt(e.id);
|
|
981
1015
|
let r = window.localStorage.getItem(t);
|
|
982
1016
|
return r || (r = (/* @__PURE__ */ new Date()).toISOString(), window.localStorage.setItem(t, r)), Date.parse(r) + e.duration_minutes * 6e4;
|
|
983
1017
|
} catch {
|
|
@@ -986,7 +1020,7 @@ function be(e) {
|
|
|
986
1020
|
}
|
|
987
1021
|
return null;
|
|
988
1022
|
}
|
|
989
|
-
function
|
|
1023
|
+
function zt(e, t) {
|
|
990
1024
|
if (!e || e.length === 0) return null;
|
|
991
1025
|
if (t) {
|
|
992
1026
|
const r = e.find((a) => a.id === t);
|
|
@@ -994,30 +1028,30 @@ function Et(e, t) {
|
|
|
994
1028
|
}
|
|
995
1029
|
return e.find((r) => r.expires_at || r.duration_minutes) ?? null;
|
|
996
1030
|
}
|
|
997
|
-
function
|
|
998
|
-
const t = e ?
|
|
999
|
-
() => t !== null ?
|
|
1000
|
-
),
|
|
1001
|
-
return
|
|
1031
|
+
function Bt(e) {
|
|
1032
|
+
const t = e ? xe(e) : null, [r, a] = b(
|
|
1033
|
+
() => t !== null ? et(t) : null
|
|
1034
|
+
), i = F(t);
|
|
1035
|
+
return i.current = t, T(() => {
|
|
1002
1036
|
if (t === null) {
|
|
1003
1037
|
a(null);
|
|
1004
1038
|
return;
|
|
1005
1039
|
}
|
|
1006
|
-
a(
|
|
1040
|
+
a(et(t));
|
|
1007
1041
|
const o = setInterval(() => {
|
|
1008
|
-
const s =
|
|
1042
|
+
const s = et(i.current ?? 0);
|
|
1009
1043
|
if (a(s), s.expired && (clearInterval(o), e?.duration_minutes && typeof window < "u"))
|
|
1010
1044
|
try {
|
|
1011
|
-
window.localStorage.removeItem(
|
|
1045
|
+
window.localStorage.removeItem(jt(e.id));
|
|
1012
1046
|
} catch {
|
|
1013
1047
|
}
|
|
1014
1048
|
}, 1e3);
|
|
1015
1049
|
return () => clearInterval(o);
|
|
1016
1050
|
}, [t, e?.duration_minutes, e?.id]), r;
|
|
1017
1051
|
}
|
|
1018
|
-
function
|
|
1019
|
-
const { t: r } = v(), a =
|
|
1020
|
-
if (!a ||
|
|
1052
|
+
function ve({ block: e, ctx: t }) {
|
|
1053
|
+
const { t: r } = v(), a = zt(t.bootstrap.offers, e.offer_id), i = Bt(a);
|
|
1054
|
+
if (!a || i === null || i.expired && !e.force) return null;
|
|
1021
1055
|
const o = e.title ?? a.label ?? r("offer.limited_time", "Limited-time offer"), s = a.discount_percent ? `${o} ${a.discount_percent}%` : o;
|
|
1022
1056
|
return /* @__PURE__ */ c(
|
|
1023
1057
|
"div",
|
|
@@ -1029,34 +1063,34 @@ function xe({ block: e, ctx: t }) {
|
|
|
1029
1063
|
},
|
|
1030
1064
|
role: "status",
|
|
1031
1065
|
children: [
|
|
1032
|
-
/* @__PURE__ */
|
|
1033
|
-
/* @__PURE__ */
|
|
1034
|
-
/* @__PURE__ */
|
|
1066
|
+
/* @__PURE__ */ n(Ft, {}),
|
|
1067
|
+
/* @__PURE__ */ n("span", { children: s }),
|
|
1068
|
+
/* @__PURE__ */ n(Ot, { value: i, t: r })
|
|
1035
1069
|
]
|
|
1036
1070
|
}
|
|
1037
1071
|
);
|
|
1038
1072
|
}
|
|
1039
|
-
function
|
|
1073
|
+
function Ot({ value: e, t }) {
|
|
1040
1074
|
return /* @__PURE__ */ c("div", { class: "flex items-center gap-1 font-mono text-sm", children: [
|
|
1041
|
-
e.days > 0 ? /* @__PURE__ */ c(
|
|
1042
|
-
/* @__PURE__ */
|
|
1043
|
-
/* @__PURE__ */
|
|
1075
|
+
e.days > 0 ? /* @__PURE__ */ c(Z, { children: [
|
|
1076
|
+
/* @__PURE__ */ n($, { children: String(e.days) }),
|
|
1077
|
+
/* @__PURE__ */ n("span", { class: "text-xs", children: t("countdown.d", "d") })
|
|
1044
1078
|
] }) : null,
|
|
1045
|
-
/* @__PURE__ */
|
|
1046
|
-
/* @__PURE__ */
|
|
1047
|
-
/* @__PURE__ */
|
|
1048
|
-
/* @__PURE__ */
|
|
1049
|
-
/* @__PURE__ */
|
|
1050
|
-
/* @__PURE__ */
|
|
1079
|
+
/* @__PURE__ */ n($, { children: String(e.hours).padStart(2, "0") }),
|
|
1080
|
+
/* @__PURE__ */ n("span", { class: "text-xs", children: t("countdown.h", "h") }),
|
|
1081
|
+
/* @__PURE__ */ n($, { children: String(e.minutes).padStart(2, "0") }),
|
|
1082
|
+
/* @__PURE__ */ n("span", { class: "text-xs", children: t("countdown.m", "m") }),
|
|
1083
|
+
/* @__PURE__ */ n($, { children: String(e.seconds).padStart(2, "0") }),
|
|
1084
|
+
/* @__PURE__ */ n("span", { class: "text-xs", children: t("countdown.s", "s") })
|
|
1051
1085
|
] });
|
|
1052
1086
|
}
|
|
1053
1087
|
function $({ children: e }) {
|
|
1054
|
-
return /* @__PURE__ */
|
|
1088
|
+
return /* @__PURE__ */ n("span", { class: "rounded bg-black/20 px-1.5 py-0.5 text-xs font-bold", children: e });
|
|
1055
1089
|
}
|
|
1056
|
-
function
|
|
1057
|
-
const { t } = v(), r =
|
|
1090
|
+
function ye({ offer: e }) {
|
|
1091
|
+
const { t } = v(), r = Bt(e);
|
|
1058
1092
|
if (r === null || r.expired) return null;
|
|
1059
|
-
const a = e.label ?? t("offer.limited_time", "Limited-time offer"),
|
|
1093
|
+
const a = e.label ?? t("offer.limited_time", "Limited-time offer"), i = e.discount_percent ? `${a} ${e.discount_percent}%` : a;
|
|
1060
1094
|
return /* @__PURE__ */ c(
|
|
1061
1095
|
"div",
|
|
1062
1096
|
{
|
|
@@ -1067,15 +1101,15 @@ function ve({ offer: e }) {
|
|
|
1067
1101
|
},
|
|
1068
1102
|
role: "status",
|
|
1069
1103
|
children: [
|
|
1070
|
-
/* @__PURE__ */
|
|
1071
|
-
/* @__PURE__ */
|
|
1072
|
-
/* @__PURE__ */
|
|
1104
|
+
/* @__PURE__ */ n(Ft, {}),
|
|
1105
|
+
/* @__PURE__ */ n("span", { children: i }),
|
|
1106
|
+
/* @__PURE__ */ n(Ot, { value: r, t })
|
|
1073
1107
|
]
|
|
1074
1108
|
}
|
|
1075
1109
|
);
|
|
1076
1110
|
}
|
|
1077
|
-
function
|
|
1078
|
-
return /* @__PURE__ */
|
|
1111
|
+
function Ft() {
|
|
1112
|
+
return /* @__PURE__ */ n(
|
|
1079
1113
|
"svg",
|
|
1080
1114
|
{
|
|
1081
1115
|
width: "16",
|
|
@@ -1083,7 +1117,7 @@ function Bt() {
|
|
|
1083
1117
|
viewBox: "0 0 12 12",
|
|
1084
1118
|
fill: "none",
|
|
1085
1119
|
"aria-hidden": "true",
|
|
1086
|
-
children: /* @__PURE__ */
|
|
1120
|
+
children: /* @__PURE__ */ n(
|
|
1087
1121
|
"path",
|
|
1088
1122
|
{
|
|
1089
1123
|
fill: "currentColor",
|
|
@@ -1093,44 +1127,44 @@ function Bt() {
|
|
|
1093
1127
|
}
|
|
1094
1128
|
);
|
|
1095
1129
|
}
|
|
1096
|
-
const
|
|
1097
|
-
function
|
|
1098
|
-
const { t:
|
|
1099
|
-
const
|
|
1100
|
-
return
|
|
1101
|
-
}, [s, l,
|
|
1102
|
-
const
|
|
1103
|
-
return
|
|
1104
|
-
min:
|
|
1105
|
-
max: rt
|
|
1106
|
-
})), (f.length < 1 || f.length > it) && (M.message = n("support.message_length", "{min}–{max} characters", {
|
|
1107
|
-
min: 1,
|
|
1130
|
+
const rt = 3, it = 200, nt = 5e3, at = 5, ke = 10 * 1024 * 1024, xt = ["image/jpeg", "image/png", "image/webp"], vt = /.+@.+\..+/;
|
|
1131
|
+
function _e({ client: e, authSession: t, origin: r, onBack: a }) {
|
|
1132
|
+
const { t: i } = v(), o = t?.user.email ?? "", s = o || null, [l, u] = b(o), [h, d] = b(""), [p, x] = b(""), [_, g] = b([]), [f, M] = b(!1), [E, y] = b(null), [L, I] = b({}), z = Ct(() => {
|
|
1133
|
+
const A = (s ?? l).trim().toLowerCase(), C = h.trim(), B = p.trim();
|
|
1134
|
+
return vt.test(A) && C.length >= rt && C.length <= it && B.length >= 1 && B.length <= nt;
|
|
1135
|
+
}, [s, l, h, p]), j = () => {
|
|
1136
|
+
const A = {}, C = (s ?? l).trim(), B = h.trim(), w = p.trim();
|
|
1137
|
+
return C ? vt.test(C.toLowerCase()) || (A.email = i("support.invalid_email", "Invalid email")) : A.email = i("support.required", "Required"), (B.length < rt || B.length > it) && (A.subject = i("support.subject_length", "{min}–{max} characters", {
|
|
1138
|
+
min: rt,
|
|
1108
1139
|
max: it
|
|
1109
|
-
})),
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1140
|
+
})), (w.length < 1 || w.length > nt) && (A.message = i("support.message_length", "{min}–{max} characters", {
|
|
1141
|
+
min: 1,
|
|
1142
|
+
max: nt
|
|
1143
|
+
})), I(A), Object.keys(A).length === 0;
|
|
1144
|
+
}, O = async (A) => {
|
|
1145
|
+
if (A.preventDefault(), !f && j()) {
|
|
1146
|
+
M(!0), I((C) => ({ ...C, submit: void 0 }));
|
|
1113
1147
|
try {
|
|
1114
|
-
const
|
|
1148
|
+
const C = (s ?? l).trim();
|
|
1115
1149
|
await e.createSupportTicket({
|
|
1116
|
-
subject:
|
|
1117
|
-
content:
|
|
1118
|
-
email:
|
|
1119
|
-
files:
|
|
1120
|
-
}),
|
|
1121
|
-
} catch (
|
|
1122
|
-
const
|
|
1123
|
-
|
|
1150
|
+
subject: h.trim(),
|
|
1151
|
+
content: p.trim(),
|
|
1152
|
+
email: C || void 0,
|
|
1153
|
+
files: _.length > 0 ? _ : void 0
|
|
1154
|
+
}), y(C);
|
|
1155
|
+
} catch (C) {
|
|
1156
|
+
const B = C instanceof U && C.message || "Failed to send. Please try again.";
|
|
1157
|
+
I((w) => ({ ...w, submit: B }));
|
|
1124
1158
|
} finally {
|
|
1125
|
-
|
|
1159
|
+
M(!1);
|
|
1126
1160
|
}
|
|
1127
1161
|
}
|
|
1128
1162
|
}, D = () => {
|
|
1129
|
-
|
|
1130
|
-
},
|
|
1131
|
-
return
|
|
1163
|
+
d(""), x(""), g([]), I({}), y(null);
|
|
1164
|
+
}, R = "flex flex-col gap-3 bg-white px-6 pb-6 pt-3 sm:px-8", N = { boxShadow: "0 -4px 12px -4px rgba(15,23,42,0.06)" };
|
|
1165
|
+
return E ? /* @__PURE__ */ c("div", { class: "relative flex-1 min-h-0 flex flex-col", children: [
|
|
1132
1166
|
/* @__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: [
|
|
1133
|
-
/* @__PURE__ */
|
|
1167
|
+
/* @__PURE__ */ n(
|
|
1134
1168
|
"div",
|
|
1135
1169
|
{
|
|
1136
1170
|
class: "flex h-14 w-14 items-center justify-center rounded-full",
|
|
@@ -1140,7 +1174,7 @@ function ke({ client: e, authSession: t, origin: r, onBack: a }) {
|
|
|
1140
1174
|
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)"
|
|
1141
1175
|
},
|
|
1142
1176
|
"aria-hidden": "true",
|
|
1143
|
-
children: /* @__PURE__ */
|
|
1177
|
+
children: /* @__PURE__ */ n("svg", { viewBox: "0 0 24 24", class: "h-7 w-7", children: /* @__PURE__ */ n(
|
|
1144
1178
|
"path",
|
|
1145
1179
|
{
|
|
1146
1180
|
fill: "currentColor",
|
|
@@ -1149,28 +1183,28 @@ function ke({ client: e, authSession: t, origin: r, onBack: a }) {
|
|
|
1149
1183
|
) })
|
|
1150
1184
|
}
|
|
1151
1185
|
),
|
|
1152
|
-
/* @__PURE__ */
|
|
1186
|
+
/* @__PURE__ */ n("div", { class: "text-lg font-semibold tracking-tight text-gray-900", children: i("support.success_heading", "Request submitted") }),
|
|
1153
1187
|
/* @__PURE__ */ c("div", { class: "max-w-[320px] text-sm leading-relaxed text-gray-500", children: [
|
|
1154
|
-
|
|
1188
|
+
i(
|
|
1155
1189
|
"support.success_message_prefix",
|
|
1156
1190
|
"We've received your message and will respond to"
|
|
1157
1191
|
),
|
|
1158
1192
|
" ",
|
|
1159
|
-
/* @__PURE__ */
|
|
1193
|
+
/* @__PURE__ */ n("b", { class: "text-gray-700", children: E }),
|
|
1160
1194
|
"."
|
|
1161
1195
|
] })
|
|
1162
1196
|
] }),
|
|
1163
|
-
/* @__PURE__ */
|
|
1164
|
-
/* @__PURE__ */
|
|
1197
|
+
/* @__PURE__ */ n("div", { class: R, style: N, children: /* @__PURE__ */ c("div", { class: "flex items-center justify-center gap-3", children: [
|
|
1198
|
+
/* @__PURE__ */ n(
|
|
1165
1199
|
"button",
|
|
1166
1200
|
{
|
|
1167
1201
|
type: "button",
|
|
1168
1202
|
onClick: a,
|
|
1169
1203
|
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)]",
|
|
1170
|
-
children: r === "standalone" ?
|
|
1204
|
+
children: r === "standalone" ? i("support.done_button", "Done") : i("nav.back_aria", "Back")
|
|
1171
1205
|
}
|
|
1172
1206
|
),
|
|
1173
|
-
/* @__PURE__ */
|
|
1207
|
+
/* @__PURE__ */ n(
|
|
1174
1208
|
"button",
|
|
1175
1209
|
{
|
|
1176
1210
|
type: "button",
|
|
@@ -1180,90 +1214,90 @@ function ke({ client: e, authSession: t, origin: r, onBack: a }) {
|
|
|
1180
1214
|
background: "linear-gradient(180deg, color-mix(in srgb, var(--pw-accent) 92%, white), var(--pw-accent))",
|
|
1181
1215
|
boxShadow: "0 1px 2px rgba(15,23,42,0.08), 0 6px 14px -4px color-mix(in srgb, var(--pw-accent) 50%, transparent)"
|
|
1182
1216
|
},
|
|
1183
|
-
children:
|
|
1217
|
+
children: i("support.send_another", "Send another request")
|
|
1184
1218
|
}
|
|
1185
1219
|
)
|
|
1186
1220
|
] }) })
|
|
1187
|
-
] }) : /* @__PURE__ */ c("form", { onSubmit:
|
|
1188
|
-
/* @__PURE__ */
|
|
1189
|
-
/* @__PURE__ */
|
|
1221
|
+
] }) : /* @__PURE__ */ c("form", { onSubmit: O, class: "relative flex-1 min-h-0 flex flex-col", children: [
|
|
1222
|
+
/* @__PURE__ */ n(Se, { onClick: a, ariaLabel: i("nav.back_aria", "Back") }),
|
|
1223
|
+
/* @__PURE__ */ n("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: [
|
|
1190
1224
|
/* @__PURE__ */ c("div", { class: "flex flex-col gap-2 pr-10", children: [
|
|
1191
|
-
/* @__PURE__ */
|
|
1192
|
-
/* @__PURE__ */
|
|
1225
|
+
/* @__PURE__ */ n("h2", { class: "text-3xl font-bold tracking-tight text-gray-900", children: i("support.heading", "Support") }),
|
|
1226
|
+
/* @__PURE__ */ n("p", { class: "text-base leading-relaxed text-gray-600", children: i("support.instruction", "Please fill out the form below to submit your support request.") })
|
|
1193
1227
|
] }),
|
|
1194
1228
|
/* @__PURE__ */ c("div", { class: "flex flex-col gap-3", children: [
|
|
1195
1229
|
s ? /* @__PURE__ */ c("div", { class: "rounded-2xl bg-gray-100 px-5 py-3 text-sm text-gray-600", children: [
|
|
1196
|
-
|
|
1230
|
+
i("support.sending_as", "Sending as"),
|
|
1197
1231
|
" ",
|
|
1198
|
-
/* @__PURE__ */
|
|
1199
|
-
] }) : /* @__PURE__ */
|
|
1200
|
-
|
|
1232
|
+
/* @__PURE__ */ n("b", { class: "font-medium text-gray-900", children: s })
|
|
1233
|
+
] }) : /* @__PURE__ */ n(
|
|
1234
|
+
yt,
|
|
1201
1235
|
{
|
|
1202
1236
|
type: "email",
|
|
1203
|
-
placeholder:
|
|
1237
|
+
placeholder: i("support.email_placeholder", "Enter your email *"),
|
|
1204
1238
|
value: l,
|
|
1205
|
-
onInput:
|
|
1206
|
-
error:
|
|
1239
|
+
onInput: u,
|
|
1240
|
+
error: L.email,
|
|
1207
1241
|
autocomplete: "email",
|
|
1208
1242
|
required: !0
|
|
1209
1243
|
}
|
|
1210
1244
|
),
|
|
1211
|
-
/* @__PURE__ */
|
|
1212
|
-
|
|
1245
|
+
/* @__PURE__ */ n(
|
|
1246
|
+
yt,
|
|
1213
1247
|
{
|
|
1214
1248
|
type: "text",
|
|
1215
|
-
placeholder:
|
|
1216
|
-
value:
|
|
1217
|
-
onInput:
|
|
1218
|
-
error:
|
|
1249
|
+
placeholder: i("support.subject_placeholder", "Enter your subject *"),
|
|
1250
|
+
value: h,
|
|
1251
|
+
onInput: d,
|
|
1252
|
+
error: L.subject,
|
|
1219
1253
|
required: !0
|
|
1220
1254
|
}
|
|
1221
1255
|
),
|
|
1222
|
-
/* @__PURE__ */
|
|
1223
|
-
|
|
1256
|
+
/* @__PURE__ */ n(
|
|
1257
|
+
Ce,
|
|
1224
1258
|
{
|
|
1225
|
-
placeholder:
|
|
1226
|
-
value:
|
|
1259
|
+
placeholder: i("support.message_placeholder", "Enter your message *"),
|
|
1260
|
+
value: p,
|
|
1227
1261
|
onInput: x,
|
|
1228
|
-
error:
|
|
1262
|
+
error: L.message,
|
|
1229
1263
|
required: !0
|
|
1230
1264
|
}
|
|
1231
1265
|
),
|
|
1232
|
-
/* @__PURE__ */
|
|
1266
|
+
/* @__PURE__ */ n(Ie, { files: _, onChange: g, disabled: f })
|
|
1233
1267
|
] })
|
|
1234
1268
|
] }) }),
|
|
1235
|
-
/* @__PURE__ */ c("div", { class:
|
|
1236
|
-
|
|
1269
|
+
/* @__PURE__ */ c("div", { class: R, style: N, children: [
|
|
1270
|
+
L.submit && /* @__PURE__ */ n("p", { class: "text-sm text-red-600", children: L.submit }),
|
|
1237
1271
|
/* @__PURE__ */ c("div", { class: "flex items-center justify-end gap-3", children: [
|
|
1238
|
-
/* @__PURE__ */
|
|
1272
|
+
/* @__PURE__ */ n(
|
|
1239
1273
|
"button",
|
|
1240
1274
|
{
|
|
1241
1275
|
type: "button",
|
|
1242
1276
|
onClick: a,
|
|
1243
|
-
disabled:
|
|
1277
|
+
disabled: f,
|
|
1244
1278
|
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)]",
|
|
1245
|
-
children: r === "standalone" ?
|
|
1279
|
+
children: r === "standalone" ? i("support.close_button", "Close") : i("nav.back_aria", "Back")
|
|
1246
1280
|
}
|
|
1247
1281
|
),
|
|
1248
|
-
/* @__PURE__ */
|
|
1282
|
+
/* @__PURE__ */ n(
|
|
1249
1283
|
"button",
|
|
1250
1284
|
{
|
|
1251
1285
|
type: "submit",
|
|
1252
|
-
disabled: !
|
|
1286
|
+
disabled: !z || f,
|
|
1253
1287
|
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)]",
|
|
1254
1288
|
style: {
|
|
1255
1289
|
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%)",
|
|
1256
1290
|
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)"
|
|
1257
1291
|
},
|
|
1258
|
-
children:
|
|
1292
|
+
children: f ? /* @__PURE__ */ n("span", { class: "relative z-10 inline-block h-4 w-4 animate-spin rounded-full border-2 border-white/40 border-t-white" }) : /* @__PURE__ */ n("span", { class: "relative z-10", children: i("support.send_button", "Send") })
|
|
1259
1293
|
}
|
|
1260
1294
|
)
|
|
1261
1295
|
] })
|
|
1262
1296
|
] })
|
|
1263
1297
|
] });
|
|
1264
1298
|
}
|
|
1265
|
-
function
|
|
1266
|
-
return /* @__PURE__ */
|
|
1299
|
+
function Se({ onClick: e, ariaLabel: t }) {
|
|
1300
|
+
return /* @__PURE__ */ n(
|
|
1267
1301
|
"button",
|
|
1268
1302
|
{
|
|
1269
1303
|
type: "button",
|
|
@@ -1271,7 +1305,7 @@ function _e({ onClick: e, ariaLabel: t }) {
|
|
|
1271
1305
|
"aria-label": t,
|
|
1272
1306
|
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)]",
|
|
1273
1307
|
children: /* @__PURE__ */ c("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
1274
|
-
/* @__PURE__ */
|
|
1308
|
+
/* @__PURE__ */ n(
|
|
1275
1309
|
"path",
|
|
1276
1310
|
{
|
|
1277
1311
|
d: "M5 8h8a4 4 0 0 1 0 8H9",
|
|
@@ -1281,7 +1315,7 @@ function _e({ onClick: e, ariaLabel: t }) {
|
|
|
1281
1315
|
"stroke-linejoin": "round"
|
|
1282
1316
|
}
|
|
1283
1317
|
),
|
|
1284
|
-
/* @__PURE__ */
|
|
1318
|
+
/* @__PURE__ */ n(
|
|
1285
1319
|
"path",
|
|
1286
1320
|
{
|
|
1287
1321
|
d: "M8 4 4 8l4 4",
|
|
@@ -1295,17 +1329,17 @@ function _e({ onClick: e, ariaLabel: t }) {
|
|
|
1295
1329
|
}
|
|
1296
1330
|
);
|
|
1297
1331
|
}
|
|
1298
|
-
function
|
|
1332
|
+
function yt({
|
|
1299
1333
|
type: e,
|
|
1300
1334
|
placeholder: t,
|
|
1301
1335
|
value: r,
|
|
1302
1336
|
onInput: a,
|
|
1303
|
-
error:
|
|
1337
|
+
error: i,
|
|
1304
1338
|
autocomplete: o,
|
|
1305
1339
|
required: s
|
|
1306
1340
|
}) {
|
|
1307
1341
|
return /* @__PURE__ */ c("div", { children: [
|
|
1308
|
-
/* @__PURE__ */
|
|
1342
|
+
/* @__PURE__ */ n(
|
|
1309
1343
|
"input",
|
|
1310
1344
|
{
|
|
1311
1345
|
type: e,
|
|
@@ -1314,145 +1348,145 @@ function vt({
|
|
|
1314
1348
|
onInput: (l) => a(l.target.value),
|
|
1315
1349
|
autocomplete: o,
|
|
1316
1350
|
required: s,
|
|
1317
|
-
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 ${
|
|
1351
|
+
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)]"}`
|
|
1318
1352
|
}
|
|
1319
1353
|
),
|
|
1320
|
-
|
|
1354
|
+
i && /* @__PURE__ */ n("span", { class: "mt-1 ml-2 block text-sm text-red-600", children: i })
|
|
1321
1355
|
] });
|
|
1322
1356
|
}
|
|
1323
|
-
function
|
|
1357
|
+
function Ce({
|
|
1324
1358
|
placeholder: e,
|
|
1325
1359
|
value: t,
|
|
1326
1360
|
onInput: r,
|
|
1327
1361
|
error: a,
|
|
1328
|
-
required:
|
|
1362
|
+
required: i
|
|
1329
1363
|
}) {
|
|
1330
1364
|
return /* @__PURE__ */ c("div", { children: [
|
|
1331
|
-
/* @__PURE__ */
|
|
1365
|
+
/* @__PURE__ */ n(
|
|
1332
1366
|
"textarea",
|
|
1333
1367
|
{
|
|
1334
1368
|
value: t,
|
|
1335
1369
|
placeholder: e,
|
|
1336
1370
|
onInput: (o) => r(o.target.value),
|
|
1337
|
-
required:
|
|
1371
|
+
required: i,
|
|
1338
1372
|
rows: 5,
|
|
1339
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 ${a ? "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)]"}`
|
|
1340
1374
|
}
|
|
1341
1375
|
),
|
|
1342
|
-
a && /* @__PURE__ */
|
|
1376
|
+
a && /* @__PURE__ */ n("span", { class: "mt-1 ml-2 block text-sm text-red-600", children: a })
|
|
1343
1377
|
] });
|
|
1344
1378
|
}
|
|
1345
|
-
function
|
|
1346
|
-
const { t: a } = v(),
|
|
1347
|
-
if (!
|
|
1348
|
-
|
|
1349
|
-
const
|
|
1350
|
-
if (e.length +
|
|
1351
|
-
|
|
1379
|
+
function Ie({ files: e, onChange: t, disabled: r }) {
|
|
1380
|
+
const { t: a } = v(), i = F(null), [o, s] = b(!1), [l, u] = b(null), h = (d) => {
|
|
1381
|
+
if (!d || r) return;
|
|
1382
|
+
u(null);
|
|
1383
|
+
const p = Array.from(d);
|
|
1384
|
+
if (e.length + p.length > at) {
|
|
1385
|
+
u(a("support.too_many_files", "Up to {max} files", { max: at }));
|
|
1352
1386
|
return;
|
|
1353
1387
|
}
|
|
1354
|
-
const x =
|
|
1355
|
-
(
|
|
1388
|
+
const x = p.filter(
|
|
1389
|
+
(_) => xt.includes(_.type) && _.size <= ke
|
|
1356
1390
|
);
|
|
1357
|
-
if (x.length !==
|
|
1358
|
-
|
|
1391
|
+
if (x.length !== p.length) {
|
|
1392
|
+
u(a("support.invalid_file", "Only JPEG/PNG/WebP, ≤ 10MB each"));
|
|
1359
1393
|
return;
|
|
1360
1394
|
}
|
|
1361
1395
|
t([...e, ...x]);
|
|
1362
1396
|
};
|
|
1363
1397
|
return /* @__PURE__ */ c("div", { children: [
|
|
1364
|
-
/* @__PURE__ */
|
|
1398
|
+
/* @__PURE__ */ n("span", { class: "text-xs font-medium text-gray-700", children: a("support.attachments_label", "Attachments (optional)") }),
|
|
1365
1399
|
/* @__PURE__ */ c(
|
|
1366
1400
|
"div",
|
|
1367
1401
|
{
|
|
1368
1402
|
role: "button",
|
|
1369
1403
|
tabIndex: 0,
|
|
1370
1404
|
"aria-label": a("support.attachments_aria", "Attachments upload"),
|
|
1371
|
-
onClick: () => !r &&
|
|
1372
|
-
onDragOver: (
|
|
1373
|
-
|
|
1405
|
+
onClick: () => !r && i.current?.click(),
|
|
1406
|
+
onDragOver: (d) => {
|
|
1407
|
+
d.preventDefault(), r || s(!0);
|
|
1374
1408
|
},
|
|
1375
1409
|
onDragLeave: () => s(!1),
|
|
1376
|
-
onDrop: (
|
|
1377
|
-
|
|
1410
|
+
onDrop: (d) => {
|
|
1411
|
+
d.preventDefault(), s(!1), h(d.dataTransfer?.files ?? null);
|
|
1378
1412
|
},
|
|
1379
1413
|
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" : ""}`,
|
|
1380
1414
|
children: [
|
|
1381
|
-
/* @__PURE__ */
|
|
1382
|
-
/* @__PURE__ */
|
|
1383
|
-
max:
|
|
1415
|
+
/* @__PURE__ */ n("div", { class: "text-xs text-gray-500", children: a("support.dropzone_text", "Drop images here or click to select") }),
|
|
1416
|
+
/* @__PURE__ */ n("div", { class: "mt-0.5 text-[11px] text-gray-400", children: a("support.file_requirements", "JPEG/PNG/WebP, up to {max} files, ≤ 10MB each", {
|
|
1417
|
+
max: at
|
|
1384
1418
|
}) })
|
|
1385
1419
|
]
|
|
1386
1420
|
}
|
|
1387
1421
|
),
|
|
1388
|
-
/* @__PURE__ */
|
|
1422
|
+
/* @__PURE__ */ n(
|
|
1389
1423
|
"input",
|
|
1390
1424
|
{
|
|
1391
|
-
ref:
|
|
1425
|
+
ref: i,
|
|
1392
1426
|
type: "file",
|
|
1393
1427
|
multiple: !0,
|
|
1394
|
-
accept:
|
|
1428
|
+
accept: xt.join(","),
|
|
1395
1429
|
class: "hidden",
|
|
1396
|
-
onChange: (
|
|
1397
|
-
d
|
|
1430
|
+
onChange: (d) => {
|
|
1431
|
+
h(d.target.files), d.currentTarget.value = "";
|
|
1398
1432
|
}
|
|
1399
1433
|
}
|
|
1400
1434
|
),
|
|
1401
|
-
l && /* @__PURE__ */
|
|
1402
|
-
e.length > 0 && /* @__PURE__ */
|
|
1435
|
+
l && /* @__PURE__ */ n("p", { class: "mt-1 text-xs text-red-600", children: l }),
|
|
1436
|
+
e.length > 0 && /* @__PURE__ */ n("ul", { class: "mt-2 flex flex-col gap-1", children: e.map((d, p) => /* @__PURE__ */ c(
|
|
1403
1437
|
"li",
|
|
1404
1438
|
{
|
|
1405
1439
|
class: "flex items-center justify-between gap-2 rounded bg-gray-50 px-2 py-1 text-xs",
|
|
1406
1440
|
children: [
|
|
1407
|
-
/* @__PURE__ */
|
|
1408
|
-
/* @__PURE__ */
|
|
1441
|
+
/* @__PURE__ */ n("span", { class: "truncate text-gray-700", children: d.name }),
|
|
1442
|
+
/* @__PURE__ */ n(
|
|
1409
1443
|
"button",
|
|
1410
1444
|
{
|
|
1411
1445
|
type: "button",
|
|
1412
1446
|
onClick: () => {
|
|
1413
1447
|
const x = [...e];
|
|
1414
|
-
x.splice(
|
|
1448
|
+
x.splice(p, 1), t(x);
|
|
1415
1449
|
},
|
|
1416
1450
|
disabled: r,
|
|
1417
1451
|
class: "text-gray-500 hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-60",
|
|
1418
|
-
"aria-label": a("support.remove_file_aria", "Remove {filename}", { filename:
|
|
1452
|
+
"aria-label": a("support.remove_file_aria", "Remove {filename}", { filename: d.name }),
|
|
1419
1453
|
children: "✕"
|
|
1420
1454
|
}
|
|
1421
1455
|
)
|
|
1422
1456
|
]
|
|
1423
1457
|
},
|
|
1424
|
-
`${
|
|
1458
|
+
`${d.name}-${d.size}-${p}`
|
|
1425
1459
|
)) })
|
|
1426
1460
|
] });
|
|
1427
1461
|
}
|
|
1428
|
-
const
|
|
1462
|
+
const Ae = {
|
|
1429
1463
|
day: "cta.get_plan_daily",
|
|
1430
1464
|
week: "cta.get_plan_weekly",
|
|
1431
1465
|
month: "cta.get_plan_monthly",
|
|
1432
1466
|
year: "cta.get_plan_yearly"
|
|
1433
|
-
},
|
|
1467
|
+
}, Me = {
|
|
1434
1468
|
day: "Get Daily Plan",
|
|
1435
1469
|
week: "Get Weekly Plan",
|
|
1436
1470
|
month: "Get Monthly Plan",
|
|
1437
1471
|
year: "Get Yearly Plan"
|
|
1438
1472
|
};
|
|
1439
|
-
function
|
|
1473
|
+
function Le(e, t, r, a) {
|
|
1440
1474
|
if (t === "close") return a("cta.close", "Close");
|
|
1441
1475
|
if (!e) return a("cta.continue", "Continue");
|
|
1442
1476
|
if (!r && e.trial_days && e.interval && e.interval !== "lifetime")
|
|
1443
1477
|
return a("cta.start_trial", "Start {days}-Day Free Trial", { days: e.trial_days });
|
|
1444
1478
|
if (!e.interval || e.interval === "lifetime")
|
|
1445
1479
|
return a("cta.get_lifetime_access", "Get Lifetime Access");
|
|
1446
|
-
const
|
|
1447
|
-
return
|
|
1448
|
-
interval:
|
|
1480
|
+
const i = Ae[e.interval];
|
|
1481
|
+
return i ? a(i, Me[e.interval]) : a("cta.get_plan_generic", "Get {interval} Plan", {
|
|
1482
|
+
interval: Pe(e.interval)
|
|
1449
1483
|
});
|
|
1450
1484
|
}
|
|
1451
|
-
function
|
|
1485
|
+
function Pe(e) {
|
|
1452
1486
|
return e.length ? e[0].toUpperCase() + e.slice(1) : e;
|
|
1453
1487
|
}
|
|
1454
|
-
function
|
|
1455
|
-
const { t: r } = v(), [a,
|
|
1488
|
+
function Te({ block: e, ctx: t }) {
|
|
1489
|
+
const { t: r } = v(), [a, i] = b(!1), o = e.priceId ?? t.selectedPriceId, s = a || e.action === "checkout" && !o, l = o ? t.bootstrap.prices.find((p) => p.id === o) ?? null : null, u = t.bootstrap.user?.had_previous_trial ?? !1, h = e.label ?? Le(l, e.action, u, r);
|
|
1456
1490
|
return /* @__PURE__ */ c(
|
|
1457
1491
|
"button",
|
|
1458
1492
|
{
|
|
@@ -1460,11 +1494,11 @@ function Pe({ block: e, ctx: t }) {
|
|
|
1460
1494
|
disabled: s,
|
|
1461
1495
|
onClick: async () => {
|
|
1462
1496
|
if (!s) {
|
|
1463
|
-
|
|
1497
|
+
i(!0);
|
|
1464
1498
|
try {
|
|
1465
1499
|
await t.onAction(e.action, { priceId: o });
|
|
1466
1500
|
} finally {
|
|
1467
|
-
|
|
1501
|
+
i(!1);
|
|
1468
1502
|
}
|
|
1469
1503
|
}
|
|
1470
1504
|
},
|
|
@@ -1474,7 +1508,7 @@ function Pe({ block: e, ctx: t }) {
|
|
|
1474
1508
|
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)"
|
|
1475
1509
|
},
|
|
1476
1510
|
children: [
|
|
1477
|
-
/* @__PURE__ */
|
|
1511
|
+
/* @__PURE__ */ n(
|
|
1478
1512
|
"span",
|
|
1479
1513
|
{
|
|
1480
1514
|
class: "absolute inset-0 opacity-40",
|
|
@@ -1484,16 +1518,16 @@ function Pe({ block: e, ctx: t }) {
|
|
|
1484
1518
|
"aria-hidden": "true"
|
|
1485
1519
|
}
|
|
1486
1520
|
),
|
|
1487
|
-
a ? /* @__PURE__ */
|
|
1521
|
+
a ? /* @__PURE__ */ n("span", { class: "relative z-10 inline-block h-4 w-4 animate-spin rounded-full border-2 border-white/40 border-t-white" }) : /* @__PURE__ */ n("span", { class: "relative z-10", children: h })
|
|
1488
1522
|
]
|
|
1489
1523
|
}
|
|
1490
1524
|
);
|
|
1491
1525
|
}
|
|
1492
|
-
function
|
|
1493
|
-
const { t } = v(), r = e.authSession, a = e.auth, [
|
|
1526
|
+
function Ee({ ctx: e }) {
|
|
1527
|
+
const { t } = v(), r = e.authSession, a = e.auth, [i, o] = b(!1), s = () => e.onAction("support");
|
|
1494
1528
|
if (r && !r.user.is_anonymous) {
|
|
1495
1529
|
const l = async () => {
|
|
1496
|
-
if (!(!a ||
|
|
1530
|
+
if (!(!a || i)) {
|
|
1497
1531
|
o(!0);
|
|
1498
1532
|
try {
|
|
1499
1533
|
await a.signOut();
|
|
@@ -1507,27 +1541,27 @@ function Te({ ctx: e }) {
|
|
|
1507
1541
|
/* @__PURE__ */ c("span", { children: [
|
|
1508
1542
|
t("session.signed_in_as_prefix", "Signed in as"),
|
|
1509
1543
|
" ",
|
|
1510
|
-
/* @__PURE__ */
|
|
1544
|
+
/* @__PURE__ */ n("b", { class: "font-medium text-gray-700", children: r.user.email })
|
|
1511
1545
|
] }),
|
|
1512
1546
|
/* @__PURE__ */ c("div", { class: "flex items-center justify-center gap-3", children: [
|
|
1513
|
-
/* @__PURE__ */
|
|
1514
|
-
/* @__PURE__ */
|
|
1515
|
-
/* @__PURE__ */
|
|
1547
|
+
/* @__PURE__ */ n(G, { onClick: l, disabled: !a || i, children: i ? t("session.signing_out", "Signing out…") : t("session.sign_out", "Sign Out") }),
|
|
1548
|
+
/* @__PURE__ */ n(kt, {}),
|
|
1549
|
+
/* @__PURE__ */ n(G, { onClick: s, children: t("session.contact_support", "Contact Support") })
|
|
1516
1550
|
] })
|
|
1517
1551
|
] });
|
|
1518
1552
|
}
|
|
1519
1553
|
return /* @__PURE__ */ c("div", { class: "-mt-3 flex items-center justify-center gap-3 pt-1 text-center text-[13px]", children: [
|
|
1520
|
-
/* @__PURE__ */
|
|
1521
|
-
/* @__PURE__ */
|
|
1522
|
-
/* @__PURE__ */
|
|
1554
|
+
/* @__PURE__ */ n(G, { onClick: () => e.onAction("restore"), children: t("session.restore_purchases", "Restore purchases") }),
|
|
1555
|
+
/* @__PURE__ */ n(kt, {}),
|
|
1556
|
+
/* @__PURE__ */ n(G, { onClick: s, children: t("session.contact_support", "Contact Support") })
|
|
1523
1557
|
] });
|
|
1524
1558
|
}
|
|
1525
|
-
function
|
|
1559
|
+
function G({
|
|
1526
1560
|
onClick: e,
|
|
1527
1561
|
disabled: t,
|
|
1528
1562
|
children: r
|
|
1529
1563
|
}) {
|
|
1530
|
-
return /* @__PURE__ */
|
|
1564
|
+
return /* @__PURE__ */ n(
|
|
1531
1565
|
"button",
|
|
1532
1566
|
{
|
|
1533
1567
|
type: "button",
|
|
@@ -1539,12 +1573,12 @@ function H({
|
|
|
1539
1573
|
}
|
|
1540
1574
|
);
|
|
1541
1575
|
}
|
|
1542
|
-
function
|
|
1543
|
-
return /* @__PURE__ */
|
|
1576
|
+
function kt() {
|
|
1577
|
+
return /* @__PURE__ */ n("span", { class: "h-1 w-1 rounded-full bg-gray-300", "aria-hidden": "true" });
|
|
1544
1578
|
}
|
|
1545
|
-
function
|
|
1546
|
-
return e.items.length ? /* @__PURE__ */
|
|
1547
|
-
/* @__PURE__ */
|
|
1579
|
+
function je({ block: e }) {
|
|
1580
|
+
return e.items.length ? /* @__PURE__ */ n("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: [
|
|
1581
|
+
/* @__PURE__ */ n(
|
|
1548
1582
|
"svg",
|
|
1549
1583
|
{
|
|
1550
1584
|
width: "18",
|
|
@@ -1553,7 +1587,7 @@ function Ee({ block: e }) {
|
|
|
1553
1587
|
fill: "none",
|
|
1554
1588
|
class: "mt-0.5 flex-shrink-0 text-emerald-500",
|
|
1555
1589
|
"aria-hidden": "true",
|
|
1556
|
-
children: /* @__PURE__ */
|
|
1590
|
+
children: /* @__PURE__ */ n(
|
|
1557
1591
|
"path",
|
|
1558
1592
|
{
|
|
1559
1593
|
d: "M4 10.5l3.5 3.5 8.5-8.5",
|
|
@@ -1566,30 +1600,30 @@ function Ee({ block: e }) {
|
|
|
1566
1600
|
}
|
|
1567
1601
|
),
|
|
1568
1602
|
/* @__PURE__ */ c("div", { class: "flex flex-col gap-0.5", children: [
|
|
1569
|
-
/* @__PURE__ */
|
|
1570
|
-
t.desc ? /* @__PURE__ */
|
|
1603
|
+
/* @__PURE__ */ n("span", { class: "font-medium leading-snug text-gray-900", children: t.name }),
|
|
1604
|
+
t.desc ? /* @__PURE__ */ n("span", { class: "text-xs leading-relaxed text-gray-400", children: t.desc }) : null
|
|
1571
1605
|
] })
|
|
1572
1606
|
] }, t.id)) }) : null;
|
|
1573
1607
|
}
|
|
1574
|
-
function
|
|
1575
|
-
const { t } = v(), r = e.title ?? t("pricing.money_back", "30-day money-back guarantee"), a = e.subtitle,
|
|
1608
|
+
function ze({ block: e }) {
|
|
1609
|
+
const { t } = v(), r = e.title ?? t("pricing.money_back", "30-day money-back guarantee"), a = e.subtitle, i = (e.icon ?? "dollar_shield") !== "none", o = Be(r);
|
|
1576
1610
|
return /* @__PURE__ */ c("div", { class: "flex flex-col items-center gap-1.5 border-b-1 pb-4 mb-1 border-gray-100", children: [
|
|
1577
1611
|
/* @__PURE__ */ c("div", { class: "inline-flex items-center gap-2 text-[12px] text-gray-700", children: [
|
|
1578
|
-
|
|
1612
|
+
i ? /* @__PURE__ */ n(Oe, {}) : null,
|
|
1579
1613
|
o ? /* @__PURE__ */ c("span", { children: [
|
|
1580
|
-
/* @__PURE__ */
|
|
1614
|
+
/* @__PURE__ */ n("b", { class: "font-bold text-gray-900", children: o.bold }),
|
|
1581
1615
|
" ",
|
|
1582
|
-
/* @__PURE__ */
|
|
1583
|
-
] }) : /* @__PURE__ */
|
|
1616
|
+
/* @__PURE__ */ n("span", { class: "font-medium", children: o.rest })
|
|
1617
|
+
] }) : /* @__PURE__ */ n("span", { class: "font-medium", children: r })
|
|
1584
1618
|
] }),
|
|
1585
|
-
a ? /* @__PURE__ */
|
|
1619
|
+
a ? /* @__PURE__ */ n("span", { class: "text-center text-xs leading-relaxed text-gray-500", children: a }) : null
|
|
1586
1620
|
] });
|
|
1587
1621
|
}
|
|
1588
|
-
function
|
|
1622
|
+
function Be(e) {
|
|
1589
1623
|
const t = e.match(/^(\d+[-\s]?days?)\s+(.+)$/i);
|
|
1590
1624
|
return t ? { bold: t[1], rest: t[2] } : null;
|
|
1591
1625
|
}
|
|
1592
|
-
function
|
|
1626
|
+
function Oe() {
|
|
1593
1627
|
return /* @__PURE__ */ c(
|
|
1594
1628
|
"svg",
|
|
1595
1629
|
{
|
|
@@ -1601,7 +1635,7 @@ function Be() {
|
|
|
1601
1635
|
class: "flex-shrink-0 text-emerald-500",
|
|
1602
1636
|
"aria-hidden": "true",
|
|
1603
1637
|
children: [
|
|
1604
|
-
/* @__PURE__ */
|
|
1638
|
+
/* @__PURE__ */ n(
|
|
1605
1639
|
"path",
|
|
1606
1640
|
{
|
|
1607
1641
|
d: "M12 2 4 5v6c0 5.25 3.5 9.5 8 11 4.5-1.5 8-5.75 8-11V5l-8-3Z",
|
|
@@ -1610,7 +1644,7 @@ function Be() {
|
|
|
1610
1644
|
"stroke-linejoin": "round"
|
|
1611
1645
|
}
|
|
1612
1646
|
),
|
|
1613
|
-
/* @__PURE__ */
|
|
1647
|
+
/* @__PURE__ */ n(
|
|
1614
1648
|
"path",
|
|
1615
1649
|
{
|
|
1616
1650
|
d: "m9 12 2 2 4-4",
|
|
@@ -1624,22 +1658,22 @@ function Be() {
|
|
|
1624
1658
|
}
|
|
1625
1659
|
);
|
|
1626
1660
|
}
|
|
1627
|
-
const
|
|
1628
|
-
function
|
|
1629
|
-
const r = t *
|
|
1630
|
-
let a =
|
|
1631
|
-
for (e.style.fontSize = `${a}px`; e.scrollHeight > r && a >
|
|
1661
|
+
const Rt = 24, Fe = 16, Re = 2;
|
|
1662
|
+
function Ue(e, t) {
|
|
1663
|
+
const r = t * Re;
|
|
1664
|
+
let a = Rt;
|
|
1665
|
+
for (e.style.fontSize = `${a}px`; e.scrollHeight > r && a > Fe; )
|
|
1632
1666
|
a -= 1, e.style.fontSize = `${a}px`;
|
|
1633
1667
|
}
|
|
1634
|
-
function
|
|
1635
|
-
const r = e.level ?? 1, a = `h${r}`,
|
|
1668
|
+
function De({ block: e, ctx: t }) {
|
|
1669
|
+
const r = e.level ?? 1, a = `h${r}`, i = r === 1 ? "text-[22px] sm:text-2xl font-semibold leading-tight text-center text-balance text-gray-800" : r === 2 ? "text-xl font-semibold leading-snug text-gray-900 tracking-tight" : "text-base font-medium text-gray-900", o = F(null), s = r === 1 && !!t.bootstrap.settings.title_auto_fit;
|
|
1636
1670
|
return T(() => {
|
|
1637
1671
|
if (!s || !o.current) return;
|
|
1638
|
-
const l = getComputedStyle(o.current),
|
|
1639
|
-
|
|
1640
|
-
}, [s, e.text]), /* @__PURE__ */
|
|
1672
|
+
const l = getComputedStyle(o.current), u = parseFloat(l.lineHeight) || Rt * 1.5;
|
|
1673
|
+
Ue(o.current, u);
|
|
1674
|
+
}, [s, e.text]), /* @__PURE__ */ n(a, { ref: o, class: i, children: e.text });
|
|
1641
1675
|
}
|
|
1642
|
-
function
|
|
1676
|
+
function Ne(e) {
|
|
1643
1677
|
const t = e.local ?? { currency: e.currency, amount: e.amount };
|
|
1644
1678
|
if (e.interval === "year") {
|
|
1645
1679
|
const r = (e.interval_count ?? 1) * 12;
|
|
@@ -1647,7 +1681,7 @@ function De(e) {
|
|
|
1647
1681
|
}
|
|
1648
1682
|
return { amount: t.amount, currency: t.currency };
|
|
1649
1683
|
}
|
|
1650
|
-
function
|
|
1684
|
+
function ot(e, t) {
|
|
1651
1685
|
const r = e % 1 !== 0 ? 2 : 0;
|
|
1652
1686
|
try {
|
|
1653
1687
|
const a = new Intl.NumberFormat(void 0, {
|
|
@@ -1657,37 +1691,37 @@ function at(e, t) {
|
|
|
1657
1691
|
maximumFractionDigits: r,
|
|
1658
1692
|
minimumFractionDigits: r
|
|
1659
1693
|
}).formatToParts(e);
|
|
1660
|
-
let
|
|
1694
|
+
let i = "", o = "";
|
|
1661
1695
|
for (const s of a)
|
|
1662
|
-
s.type === "currency" ?
|
|
1663
|
-
return { currency:
|
|
1696
|
+
s.type === "currency" ? i = s.value : s.type !== "literal" && (o += s.value);
|
|
1697
|
+
return { currency: i || t, amount: o.trim() };
|
|
1664
1698
|
} catch {
|
|
1665
1699
|
return { currency: t, amount: String(e) };
|
|
1666
1700
|
}
|
|
1667
1701
|
}
|
|
1668
1702
|
function lt(e, t) {
|
|
1669
|
-
const { amount: r, currency: a } =
|
|
1703
|
+
const { amount: r, currency: a } = Ne(e);
|
|
1670
1704
|
if (!t) {
|
|
1671
|
-
const { currency: l, amount:
|
|
1672
|
-
return { currency: l, amount:
|
|
1705
|
+
const { currency: l, amount: u } = ot(r, a);
|
|
1706
|
+
return { currency: l, amount: u, originalAmount: null };
|
|
1673
1707
|
}
|
|
1674
|
-
const
|
|
1708
|
+
const i = r * (1 - t / 100), o = ot(i, a), s = ot(r, a);
|
|
1675
1709
|
return {
|
|
1676
1710
|
currency: o.currency,
|
|
1677
1711
|
amount: o.amount,
|
|
1678
1712
|
originalAmount: `${s.currency}${s.amount}`
|
|
1679
1713
|
};
|
|
1680
1714
|
}
|
|
1681
|
-
function
|
|
1715
|
+
function q(e, t) {
|
|
1682
1716
|
if (!e || e.length === 0) return null;
|
|
1683
1717
|
const r = e.find(
|
|
1684
|
-
(
|
|
1718
|
+
(i) => i.price_id === t && i.discount_percent && i.discount_percent > 0
|
|
1685
1719
|
);
|
|
1686
1720
|
return r || (e.find(
|
|
1687
|
-
(
|
|
1721
|
+
(i) => i.price_id == null && i.discount_percent && i.discount_percent > 0
|
|
1688
1722
|
) ?? null);
|
|
1689
1723
|
}
|
|
1690
|
-
function
|
|
1724
|
+
function Ut(e, t) {
|
|
1691
1725
|
if (e.label) return e.label.toUpperCase();
|
|
1692
1726
|
if (!e.interval || e.interval === "lifetime")
|
|
1693
1727
|
return t("pricing.plan_label.lifetime", "LIFETIME");
|
|
@@ -1706,26 +1740,26 @@ function ct(e, t) {
|
|
|
1706
1740
|
const r = e.interval_count ?? 1;
|
|
1707
1741
|
return r === 1 ? t(`pricing.interval.${e.interval}`, e.interval) : `${r} ${e.interval}s`;
|
|
1708
1742
|
}
|
|
1709
|
-
function
|
|
1710
|
-
const { t: r } = v(), a = e.priceIds && e.priceIds.length > 0 ? new Set(e.priceIds) : null,
|
|
1711
|
-
if (
|
|
1712
|
-
return /* @__PURE__ */
|
|
1743
|
+
function He({ block: e, ctx: t }) {
|
|
1744
|
+
const { t: r } = v(), a = e.priceIds && e.priceIds.length > 0 ? new Set(e.priceIds) : null, i = t.bootstrap.prices.filter((s) => !a || a.has(s.id));
|
|
1745
|
+
if (i.length === 0)
|
|
1746
|
+
return /* @__PURE__ */ n("p", { class: "text-sm text-gray-500", children: r("pricing.no_prices", "No prices available.") });
|
|
1713
1747
|
const o = e.popular_label ?? r("pricing.most_popular", "Most popular");
|
|
1714
1748
|
if (e.view === "compact")
|
|
1715
|
-
return /* @__PURE__ */
|
|
1749
|
+
return /* @__PURE__ */ n(
|
|
1716
1750
|
"div",
|
|
1717
1751
|
{
|
|
1718
|
-
class: "flex w-full flex-col",
|
|
1752
|
+
class: "flex w-full flex-col rounded-xl border border-gray-200 bg-gray-50",
|
|
1719
1753
|
role: "radiogroup",
|
|
1720
1754
|
"aria-label": r("pricing.plans_aria", "Plans"),
|
|
1721
|
-
children:
|
|
1755
|
+
children: i.map((s, l) => /* @__PURE__ */ n(
|
|
1722
1756
|
$e,
|
|
1723
1757
|
{
|
|
1724
1758
|
price: s,
|
|
1725
|
-
isLast: l ===
|
|
1759
|
+
isLast: l === i.length - 1,
|
|
1726
1760
|
isPopular: e.popular_price_id === s.id,
|
|
1727
1761
|
popularLabel: o,
|
|
1728
|
-
offer:
|
|
1762
|
+
offer: q(t.bootstrap.offers, s.id),
|
|
1729
1763
|
selected: t.selectedPriceId === s.id,
|
|
1730
1764
|
onSelect: () => {
|
|
1731
1765
|
t.setSelectedPriceId(s.id), t.onAction("price_selected", { priceId: s.id, price: s });
|
|
@@ -1737,40 +1771,43 @@ function Ne({ block: e, ctx: t }) {
|
|
|
1737
1771
|
}
|
|
1738
1772
|
);
|
|
1739
1773
|
if (e.view === "horizontal") {
|
|
1740
|
-
const s = Math.min(
|
|
1741
|
-
|
|
1774
|
+
const s = Math.min(i.length, 3), l = i.some(
|
|
1775
|
+
(u) => (q(t.bootstrap.offers, u.id)?.discount_percent ?? 0) > 0
|
|
1776
|
+
);
|
|
1777
|
+
return /* @__PURE__ */ n(
|
|
1742
1778
|
"div",
|
|
1743
1779
|
{
|
|
1744
1780
|
class: "grid items-stretch gap-2",
|
|
1745
1781
|
style: { gridTemplateColumns: `repeat(${s}, minmax(0, 1fr))` },
|
|
1746
1782
|
role: "radiogroup",
|
|
1747
1783
|
"aria-label": r("pricing.plans_aria", "Plans"),
|
|
1748
|
-
children:
|
|
1749
|
-
|
|
1784
|
+
children: i.map((u) => /* @__PURE__ */ n(
|
|
1785
|
+
Ge,
|
|
1750
1786
|
{
|
|
1751
|
-
price:
|
|
1752
|
-
isPopular: e.popular_price_id ===
|
|
1787
|
+
price: u,
|
|
1788
|
+
isPopular: e.popular_price_id === u.id,
|
|
1753
1789
|
popularLabel: o,
|
|
1754
|
-
offer:
|
|
1755
|
-
|
|
1790
|
+
offer: q(t.bootstrap.offers, u.id),
|
|
1791
|
+
reserveStrikeRow: l,
|
|
1792
|
+
selected: t.selectedPriceId === u.id,
|
|
1756
1793
|
onSelect: () => {
|
|
1757
|
-
t.setSelectedPriceId(
|
|
1794
|
+
t.setSelectedPriceId(u.id), t.onAction("price_selected", { priceId: u.id, price: u });
|
|
1758
1795
|
},
|
|
1759
1796
|
t: r
|
|
1760
1797
|
},
|
|
1761
|
-
|
|
1798
|
+
u.id
|
|
1762
1799
|
))
|
|
1763
1800
|
}
|
|
1764
1801
|
);
|
|
1765
1802
|
}
|
|
1766
|
-
return /* @__PURE__ */
|
|
1803
|
+
return /* @__PURE__ */ n(
|
|
1767
1804
|
"div",
|
|
1768
1805
|
{
|
|
1769
1806
|
class: "flex flex-col gap-2",
|
|
1770
1807
|
role: "radiogroup",
|
|
1771
1808
|
"aria-label": r("pricing.plans_aria", "Plans"),
|
|
1772
|
-
children:
|
|
1773
|
-
const l = t.selectedPriceId === s.id,
|
|
1809
|
+
children: i.map((s) => {
|
|
1810
|
+
const l = t.selectedPriceId === s.id, u = e.popular_price_id === s.id, d = q(t.bootstrap.offers, s.id)?.discount_percent ?? null, { currency: p, amount: x, originalAmount: _ } = lt(s, d);
|
|
1774
1811
|
return /* @__PURE__ */ c(
|
|
1775
1812
|
"button",
|
|
1776
1813
|
{
|
|
@@ -1781,14 +1818,14 @@ function Ne({ block: e, ctx: t }) {
|
|
|
1781
1818
|
t.setSelectedPriceId(s.id), t.onAction("price_selected", { priceId: s.id, price: s });
|
|
1782
1819
|
},
|
|
1783
1820
|
class: [
|
|
1784
|
-
"group relative inline-flex w-full mx-auto items-center justify-between flex-row-reverse gap-4 rounded-2xl border-2
|
|
1821
|
+
"group relative inline-flex w-full mx-auto items-center justify-between flex-row-reverse gap-4 rounded-2xl border-2 px-4 py-3.5 text-left transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--pw-accent)]",
|
|
1785
1822
|
// Везде border 2px — selection выражается только цветом, layout
|
|
1786
1823
|
// не прыгает (равная толщина у selected/unselected). Цветовая
|
|
1787
1824
|
// разница accent vs gray достаточно сильная для visual hierarchy.
|
|
1788
1825
|
l ? "border-[var(--pw-accent)] bg-transparent" : "border-gray-200 bg-transparent hover:bg-gray-50"
|
|
1789
1826
|
].join(" "),
|
|
1790
1827
|
children: [
|
|
1791
|
-
/* @__PURE__ */
|
|
1828
|
+
/* @__PURE__ */ n(
|
|
1792
1829
|
"span",
|
|
1793
1830
|
{
|
|
1794
1831
|
class: [
|
|
@@ -1798,13 +1835,13 @@ function Ne({ block: e, ctx: t }) {
|
|
|
1798
1835
|
// визуально сдвигает центр content'а вниз. flex items-center
|
|
1799
1836
|
// на карточке держит галочку по геометрическому центру, что
|
|
1800
1837
|
// делает её визуально выше — компенсируем небольшим mt'ом.
|
|
1801
|
-
|
|
1838
|
+
u ? "mt-3" : ""
|
|
1802
1839
|
].join(" "),
|
|
1803
1840
|
style: l ? {
|
|
1804
1841
|
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%)"
|
|
1805
1842
|
} : void 0,
|
|
1806
1843
|
"aria-hidden": "true",
|
|
1807
|
-
children: /* @__PURE__ */
|
|
1844
|
+
children: /* @__PURE__ */ n(
|
|
1808
1845
|
"svg",
|
|
1809
1846
|
{
|
|
1810
1847
|
width: "14",
|
|
@@ -1813,7 +1850,7 @@ function Ne({ block: e, ctx: t }) {
|
|
|
1813
1850
|
fill: "none",
|
|
1814
1851
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1815
1852
|
class: l ? "opacity-100" : "opacity-0",
|
|
1816
|
-
children: /* @__PURE__ */
|
|
1853
|
+
children: /* @__PURE__ */ n(
|
|
1817
1854
|
"path",
|
|
1818
1855
|
{
|
|
1819
1856
|
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",
|
|
@@ -1826,26 +1863,25 @@ function Ne({ block: e, ctx: t }) {
|
|
|
1826
1863
|
),
|
|
1827
1864
|
/* @__PURE__ */ c("div", { class: "flex flex-1 flex-col gap-0.5", children: [
|
|
1828
1865
|
/* @__PURE__ */ c("div", { class: "flex flex-wrap items-center gap-x-2 gap-y-1", children: [
|
|
1829
|
-
/* @__PURE__ */
|
|
1830
|
-
|
|
1866
|
+
/* @__PURE__ */ n("span", { class: "text-xs font-normal uppercase tracking-normal text-gray-800/70", children: Ut(s, r) }),
|
|
1867
|
+
_ ? (
|
|
1831
1868
|
// opacity-60 приглушает strike: глаз сначала ловит label
|
|
1832
1869
|
// и discount-badge, потом main price; original «бывшая цена»
|
|
1833
1870
|
// — третичная информация, не должна конкурировать с label.
|
|
1834
|
-
/* @__PURE__ */
|
|
1871
|
+
/* @__PURE__ */ n("span", { class: "text-[15px] font-normal text-gray-400 opacity-60 line-through decoration-gray-400 decoration-[1.5px]", children: _ })
|
|
1835
1872
|
) : null,
|
|
1836
|
-
|
|
1873
|
+
d ? (
|
|
1837
1874
|
// Emerald pill — фиксированный «успех/выгода», не зависит от
|
|
1838
1875
|
// brand_color. Читается даже на тёмных бренд-акцентах.
|
|
1839
1876
|
/* @__PURE__ */ c("span", { class: "rounded-full bg-emerald-100 px-2.5 py-1 text-xs font-bold leading-none text-emerald-700", children: [
|
|
1840
1877
|
"-",
|
|
1841
|
-
|
|
1878
|
+
d,
|
|
1842
1879
|
"%"
|
|
1843
1880
|
] })
|
|
1844
1881
|
) : null
|
|
1845
1882
|
] }),
|
|
1846
|
-
/* @__PURE__ */
|
|
1847
|
-
/* @__PURE__ */
|
|
1848
|
-
" ",
|
|
1883
|
+
/* @__PURE__ */ n("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: [
|
|
1884
|
+
/* @__PURE__ */ n("span", { class: "opacity-90", children: p }),
|
|
1849
1885
|
x,
|
|
1850
1886
|
/* @__PURE__ */ c("span", { class: "text-sm font-normal text-gray-500", children: [
|
|
1851
1887
|
" ",
|
|
@@ -1853,10 +1889,9 @@ function Ne({ block: e, ctx: t }) {
|
|
|
1853
1889
|
ct(s, r)
|
|
1854
1890
|
] })
|
|
1855
1891
|
] }) }),
|
|
1856
|
-
s.description ? /* @__PURE__ */
|
|
1857
|
-
s.trial_days ? /* @__PURE__ */ i("span", { class: "mt-1 text-xs font-medium text-[var(--pw-accent)]", children: r("pricing.free_trial_days", "{days}-day free trial", { days: s.trial_days }) }) : null
|
|
1892
|
+
s.description ? /* @__PURE__ */ n("span", { class: "mt-1 text-xs leading-relaxed text-gray-500", children: s.description }) : null
|
|
1858
1893
|
] }),
|
|
1859
|
-
|
|
1894
|
+
u ? /* @__PURE__ */ n(
|
|
1860
1895
|
"span",
|
|
1861
1896
|
{
|
|
1862
1897
|
class: "absolute -top-[9px] -right-[6px] rounded-[11px] border-[5px] border-white px-2 py-1 text-[12px] font-semibold text-white",
|
|
@@ -1880,12 +1915,12 @@ function $e({
|
|
|
1880
1915
|
isLast: t,
|
|
1881
1916
|
isPopular: r,
|
|
1882
1917
|
popularLabel: a,
|
|
1883
|
-
offer:
|
|
1918
|
+
offer: i,
|
|
1884
1919
|
selected: o,
|
|
1885
1920
|
onSelect: s,
|
|
1886
1921
|
t: l
|
|
1887
1922
|
}) {
|
|
1888
|
-
const
|
|
1923
|
+
const u = i?.discount_percent ?? null, { currency: h, amount: d, originalAmount: p } = lt(e, u);
|
|
1889
1924
|
return /* @__PURE__ */ c(
|
|
1890
1925
|
"button",
|
|
1891
1926
|
{
|
|
@@ -1895,7 +1930,7 @@ function $e({
|
|
|
1895
1930
|
onClick: s,
|
|
1896
1931
|
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)]",
|
|
1897
1932
|
children: [
|
|
1898
|
-
/* @__PURE__ */
|
|
1933
|
+
/* @__PURE__ */ n(
|
|
1899
1934
|
"span",
|
|
1900
1935
|
{
|
|
1901
1936
|
class: [
|
|
@@ -1906,7 +1941,7 @@ function $e({
|
|
|
1906
1941
|
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%)"
|
|
1907
1942
|
} : void 0,
|
|
1908
1943
|
"aria-hidden": "true",
|
|
1909
|
-
children: /* @__PURE__ */
|
|
1944
|
+
children: /* @__PURE__ */ n(
|
|
1910
1945
|
"svg",
|
|
1911
1946
|
{
|
|
1912
1947
|
width: "14",
|
|
@@ -1915,7 +1950,7 @@ function $e({
|
|
|
1915
1950
|
fill: "none",
|
|
1916
1951
|
xmlns: "http://www.w3.org/2000/svg",
|
|
1917
1952
|
class: o ? "opacity-100" : "opacity-0",
|
|
1918
|
-
children: /* @__PURE__ */
|
|
1953
|
+
children: /* @__PURE__ */ n(
|
|
1919
1954
|
"path",
|
|
1920
1955
|
{
|
|
1921
1956
|
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",
|
|
@@ -1935,12 +1970,12 @@ function $e({
|
|
|
1935
1970
|
].join(" "),
|
|
1936
1971
|
children: [
|
|
1937
1972
|
/* @__PURE__ */ c("div", { class: "flex flex-wrap items-center gap-1 gap-x-1.5", children: [
|
|
1938
|
-
/* @__PURE__ */
|
|
1973
|
+
/* @__PURE__ */ n("span", { class: "text-base font-normal capitalize text-gray-800", children: Ve(e, l) }),
|
|
1939
1974
|
r ? (
|
|
1940
1975
|
// Pastel brand-mix pill — точно как `badge` в TelegramPricingRadio.
|
|
1941
1976
|
// Низкий visual weight: pill про "имя плана" (most popular), а не
|
|
1942
1977
|
// про savings — не должна конкурировать с -X% discount-pill.
|
|
1943
|
-
/* @__PURE__ */
|
|
1978
|
+
/* @__PURE__ */ n(
|
|
1944
1979
|
"span",
|
|
1945
1980
|
{
|
|
1946
1981
|
class: "rounded-[9px] px-2 py-1 text-[10px] font-bold",
|
|
@@ -1952,18 +1987,18 @@ function $e({
|
|
|
1952
1987
|
}
|
|
1953
1988
|
)
|
|
1954
1989
|
) : null,
|
|
1955
|
-
|
|
1990
|
+
u ? /* @__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: [
|
|
1956
1991
|
"-",
|
|
1957
|
-
|
|
1992
|
+
u,
|
|
1958
1993
|
"%"
|
|
1959
1994
|
] }) : null
|
|
1960
1995
|
] }),
|
|
1961
|
-
/* @__PURE__ */
|
|
1996
|
+
/* @__PURE__ */ n("div", { class: "flex-1" }),
|
|
1962
1997
|
/* @__PURE__ */ c("span", { class: "flex items-baseline gap-1.5 text-base font-normal text-gray-600", children: [
|
|
1963
|
-
|
|
1998
|
+
p ? /* @__PURE__ */ n("span", { class: "text-xs text-gray-400 line-through decoration-gray-400 decoration-[1.5px]", children: p }) : null,
|
|
1964
1999
|
/* @__PURE__ */ c("span", { class: "whitespace-nowrap", children: [
|
|
1965
|
-
/* @__PURE__ */
|
|
1966
|
-
|
|
2000
|
+
/* @__PURE__ */ n("span", { class: "opacity-90", children: h }),
|
|
2001
|
+
d,
|
|
1967
2002
|
/* @__PURE__ */ c("span", { class: "text-xs text-gray-400", children: [
|
|
1968
2003
|
" ",
|
|
1969
2004
|
"/ ",
|
|
@@ -1978,48 +2013,48 @@ function $e({
|
|
|
1978
2013
|
}
|
|
1979
2014
|
);
|
|
1980
2015
|
}
|
|
1981
|
-
function
|
|
2016
|
+
function Ge({
|
|
1982
2017
|
price: e,
|
|
1983
2018
|
isPopular: t,
|
|
1984
2019
|
popularLabel: r,
|
|
1985
2020
|
offer: a,
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
2021
|
+
reserveStrikeRow: i,
|
|
2022
|
+
selected: o,
|
|
2023
|
+
onSelect: s,
|
|
2024
|
+
t: l
|
|
1989
2025
|
}) {
|
|
1990
|
-
const
|
|
2026
|
+
const u = a?.discount_percent ?? null, { currency: h, amount: d, originalAmount: p } = lt(e, u);
|
|
1991
2027
|
return /* @__PURE__ */ c(
|
|
1992
2028
|
"button",
|
|
1993
2029
|
{
|
|
1994
2030
|
type: "button",
|
|
1995
2031
|
role: "radio",
|
|
1996
|
-
"aria-checked":
|
|
1997
|
-
onClick:
|
|
2032
|
+
"aria-checked": o,
|
|
2033
|
+
onClick: s,
|
|
1998
2034
|
class: [
|
|
1999
2035
|
"group relative flex h-full flex-col items-center justify-start gap-1 rounded-2xl border-2 px-3 pb-4 pt-3.5 text-center transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--pw-accent)]",
|
|
2000
|
-
|
|
2036
|
+
o ? "border-[var(--pw-accent)]" : "border-gray-200 hover:bg-gray-50"
|
|
2001
2037
|
].join(" "),
|
|
2002
|
-
style:
|
|
2038
|
+
style: o ? { background: "color-mix(in srgb, var(--pw-accent) 6%, transparent)" } : void 0,
|
|
2003
2039
|
children: [
|
|
2004
|
-
/* @__PURE__ */
|
|
2005
|
-
/* @__PURE__ */ c("div", { class: "flex h-[22px] items-center justify-center gap-1.5", children: [
|
|
2006
|
-
|
|
2007
|
-
|
|
2040
|
+
/* @__PURE__ */ n("span", { class: "flex min-h-[2.4em] items-center text-[10px] font-normal uppercase leading-tight text-gray-800/70", children: Ut(e, l) }),
|
|
2041
|
+
i ? /* @__PURE__ */ c("div", { class: "flex h-[22px] items-center justify-center gap-1.5", children: [
|
|
2042
|
+
p ? /* @__PURE__ */ n("span", { class: "text-[12px] text-gray-400 line-through decoration-gray-400 decoration-[1.5px]", children: p }) : null,
|
|
2043
|
+
u ? /* @__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: [
|
|
2008
2044
|
"-",
|
|
2009
|
-
|
|
2045
|
+
u,
|
|
2010
2046
|
"%"
|
|
2011
2047
|
] }) : null
|
|
2012
|
-
] }),
|
|
2048
|
+
] }) : null,
|
|
2013
2049
|
/* @__PURE__ */ c("span", { class: "text-[26px] leading-none whitespace-nowrap text-gray-800 font-medium", children: [
|
|
2014
|
-
/* @__PURE__ */
|
|
2050
|
+
/* @__PURE__ */ n("span", { class: "opacity-90", children: h }),
|
|
2015
2051
|
d
|
|
2016
2052
|
] }),
|
|
2017
2053
|
/* @__PURE__ */ c("span", { class: "text-xs font-normal text-gray-500", children: [
|
|
2018
2054
|
"/ ",
|
|
2019
|
-
ct(e,
|
|
2055
|
+
ct(e, l)
|
|
2020
2056
|
] }),
|
|
2021
|
-
|
|
2022
|
-
t ? /* @__PURE__ */ i(
|
|
2057
|
+
t ? /* @__PURE__ */ n(
|
|
2023
2058
|
"span",
|
|
2024
2059
|
{
|
|
2025
2060
|
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",
|
|
@@ -2031,29 +2066,29 @@ function He({
|
|
|
2031
2066
|
}
|
|
2032
2067
|
);
|
|
2033
2068
|
}
|
|
2034
|
-
function
|
|
2035
|
-
return /* @__PURE__ */
|
|
2069
|
+
function qe({ block: e }) {
|
|
2070
|
+
return /* @__PURE__ */ n("p", { class: "text-[0.9375rem] leading-relaxed text-gray-600", children: e.text });
|
|
2036
2071
|
}
|
|
2037
|
-
const
|
|
2072
|
+
const We = {
|
|
2038
2073
|
week: 0.25,
|
|
2039
2074
|
month: 1,
|
|
2040
2075
|
year: 12
|
|
2041
2076
|
};
|
|
2042
|
-
function
|
|
2077
|
+
function Ze(e, t) {
|
|
2043
2078
|
return e ? t(`pricing.interval.${e}`, e) : t("pricing.interval.period", "period");
|
|
2044
2079
|
}
|
|
2045
|
-
function
|
|
2080
|
+
function Ke({ block: e, ctx: t }) {
|
|
2046
2081
|
const { t: r } = v();
|
|
2047
2082
|
if (!e.queries.length) return null;
|
|
2048
|
-
const
|
|
2083
|
+
const i = t.bootstrap.prices.find((s) => s.id === t.selectedPriceId)?.interval ?? null, o = i ? We[i] : void 0;
|
|
2049
2084
|
return /* @__PURE__ */ c("div", { class: "flex flex-col gap-2", children: [
|
|
2050
|
-
/* @__PURE__ */
|
|
2051
|
-
interval:
|
|
2085
|
+
/* @__PURE__ */ n("div", { class: "text-sm font-semibold text-gray-800", children: !i || i === "lifetime" ? r("pricing.included_total", "Included for lifetime:") : r("pricing.included_per", "Included per {interval}:", {
|
|
2086
|
+
interval: Ze(i, r)
|
|
2052
2087
|
}) }),
|
|
2053
|
-
/* @__PURE__ */
|
|
2054
|
-
const l = Number.isFinite(s.count) ? s.count : 0,
|
|
2088
|
+
/* @__PURE__ */ n("ul", { class: "flex flex-col gap-2", role: "list", children: e.queries.map((s) => {
|
|
2089
|
+
const l = Number.isFinite(s.count) ? s.count : 0, u = o !== void 0 ? Math.round(l * o) : l;
|
|
2055
2090
|
return /* @__PURE__ */ c("li", { class: `flex gap-3 ${s.desc ? "items-start" : "items-center"}`, children: [
|
|
2056
|
-
/* @__PURE__ */
|
|
2091
|
+
/* @__PURE__ */ n(
|
|
2057
2092
|
"svg",
|
|
2058
2093
|
{
|
|
2059
2094
|
width: "18",
|
|
@@ -2062,7 +2097,7 @@ function Ze({ block: e, ctx: t }) {
|
|
|
2062
2097
|
fill: "none",
|
|
2063
2098
|
class: `flex-shrink-0 text-emerald-500 ${s.desc ? "mt-0.5" : ""}`,
|
|
2064
2099
|
"aria-hidden": "true",
|
|
2065
|
-
children: /* @__PURE__ */
|
|
2100
|
+
children: /* @__PURE__ */ n(
|
|
2066
2101
|
"path",
|
|
2067
2102
|
{
|
|
2068
2103
|
d: "M4 10.5l3.5 3.5 8.5-8.5",
|
|
@@ -2075,165 +2110,166 @@ function Ze({ block: e, ctx: t }) {
|
|
|
2075
2110
|
}
|
|
2076
2111
|
),
|
|
2077
2112
|
/* @__PURE__ */ c("div", { children: [
|
|
2078
|
-
/* @__PURE__ */
|
|
2113
|
+
/* @__PURE__ */ n("span", { class: "font-semibold text-gray-900 text-sm", children: u }),
|
|
2079
2114
|
" ",
|
|
2080
|
-
/* @__PURE__ */
|
|
2081
|
-
s.desc ? /* @__PURE__ */ c(
|
|
2082
|
-
/* @__PURE__ */
|
|
2083
|
-
/* @__PURE__ */
|
|
2115
|
+
/* @__PURE__ */ n("span", { class: "text-sm text-gray-800", children: s.name }),
|
|
2116
|
+
s.desc ? /* @__PURE__ */ c(Z, { children: [
|
|
2117
|
+
/* @__PURE__ */ n("br", {}),
|
|
2118
|
+
/* @__PURE__ */ n("span", { class: "text-xs text-gray-400", children: s.desc })
|
|
2084
2119
|
] }) : null
|
|
2085
2120
|
] })
|
|
2086
2121
|
] }, s.id);
|
|
2087
2122
|
}) })
|
|
2088
2123
|
] });
|
|
2089
2124
|
}
|
|
2090
|
-
const
|
|
2091
|
-
heading:
|
|
2092
|
-
text:
|
|
2093
|
-
price_grid:
|
|
2094
|
-
cta_button:
|
|
2095
|
-
auth_panel:
|
|
2096
|
-
current_session:
|
|
2097
|
-
features_list:
|
|
2098
|
-
tokenization_gate:
|
|
2099
|
-
guarantee_badge:
|
|
2100
|
-
offer_banner:
|
|
2125
|
+
const Ye = {
|
|
2126
|
+
heading: De,
|
|
2127
|
+
text: qe,
|
|
2128
|
+
price_grid: He,
|
|
2129
|
+
cta_button: Te,
|
|
2130
|
+
auth_panel: Et,
|
|
2131
|
+
current_session: Ee,
|
|
2132
|
+
features_list: je,
|
|
2133
|
+
tokenization_gate: Ke,
|
|
2134
|
+
guarantee_badge: ze,
|
|
2135
|
+
offer_banner: ve
|
|
2101
2136
|
};
|
|
2102
|
-
function
|
|
2103
|
-
const
|
|
2104
|
-
for (const
|
|
2105
|
-
if (
|
|
2106
|
-
return
|
|
2137
|
+
function Xe({ layout: e, bootstrap: t, onAction: r, auth: a, authSession: i, hasTopBanner: o }) {
|
|
2138
|
+
const s = Ct(() => {
|
|
2139
|
+
for (const g of e.blocks)
|
|
2140
|
+
if (g.type === "price_grid" && g.popular_price_id && t.prices.some((f) => f.id === g.popular_price_id))
|
|
2141
|
+
return g.popular_price_id;
|
|
2107
2142
|
return t.prices[0]?.id ?? null;
|
|
2108
|
-
}, [e.blocks, t.prices]), [
|
|
2143
|
+
}, [e.blocks, t.prices]), [l, u] = b(s), h = {
|
|
2109
2144
|
bootstrap: t,
|
|
2110
|
-
selectedPriceId:
|
|
2111
|
-
setSelectedPriceId:
|
|
2145
|
+
selectedPriceId: l,
|
|
2146
|
+
setSelectedPriceId: u,
|
|
2112
2147
|
onAction: r,
|
|
2113
2148
|
auth: a,
|
|
2114
|
-
authSession:
|
|
2115
|
-
}, d = e.blocks.findIndex((
|
|
2116
|
-
const
|
|
2117
|
-
return
|
|
2149
|
+
authSession: i
|
|
2150
|
+
}, d = e.blocks.findIndex((g) => g.type === "cta_button"), p = d === -1 ? e.blocks : e.blocks.slice(0, d), x = d === -1 ? [] : e.blocks.slice(d), _ = (g, f) => {
|
|
2151
|
+
const M = Ye[g.type];
|
|
2152
|
+
return M ? /* @__PURE__ */ n(M, { block: g, ctx: h }, `${g.type}-${f}`) : (typeof console < "u" && console.warn(`[paywall] unknown block type: ${g.type}`), null);
|
|
2118
2153
|
};
|
|
2119
|
-
return /* @__PURE__ */ c(
|
|
2120
|
-
/* @__PURE__ */
|
|
2121
|
-
|
|
2154
|
+
return /* @__PURE__ */ c(Z, { children: [
|
|
2155
|
+
/* @__PURE__ */ n("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__ */ n("div", { class: "flex flex-col gap-6", children: p.map(_) }) }),
|
|
2156
|
+
x.length > 0 ? (
|
|
2122
2157
|
// Тонкий shadow-top вместо border-t — создаёт depth, читается как
|
|
2123
2158
|
// «footer закреплён к низу dialog'а». Линия выглядела как divider
|
|
2124
2159
|
// в обычном flow, не передавала sticky-character.
|
|
2125
|
-
/* @__PURE__ */
|
|
2160
|
+
/* @__PURE__ */ n(
|
|
2126
2161
|
"div",
|
|
2127
2162
|
{
|
|
2128
2163
|
class: "flex flex-col gap-4 bg-white px-6 pb-6 pt-3 sm:px-8",
|
|
2129
2164
|
style: { boxShadow: "0 -4px 12px -4px rgba(15,23,42,0.06)" },
|
|
2130
|
-
children:
|
|
2165
|
+
children: x.map((g, f) => _(g, p.length + f))
|
|
2131
2166
|
}
|
|
2132
2167
|
)
|
|
2133
2168
|
) : null
|
|
2134
2169
|
] });
|
|
2135
2170
|
}
|
|
2136
|
-
function
|
|
2171
|
+
function Je(e, t, r, a) {
|
|
2137
2172
|
return e ? a ? { 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 === "anon_gate" ? { open: !0, view: "anon", 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 };
|
|
2138
2173
|
}
|
|
2139
|
-
function
|
|
2174
|
+
function Qe(e, t) {
|
|
2140
2175
|
return e.open === t.open && e.view === t.view && e.error === t.error;
|
|
2141
2176
|
}
|
|
2142
|
-
function
|
|
2177
|
+
function tr({
|
|
2143
2178
|
client: e,
|
|
2144
2179
|
open: t,
|
|
2145
2180
|
onClose: r,
|
|
2146
2181
|
onEvent: a,
|
|
2147
|
-
initialView:
|
|
2182
|
+
initialView: i,
|
|
2148
2183
|
purchased: o,
|
|
2149
2184
|
renew: s,
|
|
2150
2185
|
onState: l,
|
|
2151
|
-
inline:
|
|
2186
|
+
inline: u,
|
|
2187
|
+
locale: h
|
|
2152
2188
|
}) {
|
|
2153
|
-
const [d,
|
|
2189
|
+
const [d, p] = b({ status: "idle" }), [x, _] = b(
|
|
2154
2190
|
() => e.auth?.getCachedSession() ?? null
|
|
2155
|
-
), [
|
|
2191
|
+
), [g, f] = b(() => i === "support" ? { kind: "support", origin: "standalone" } : i === "auth" ? { kind: "auth_gate", origin: "standalone" } : i === "anon" ? { kind: "anon_gate", origin: "standalone" } : { kind: "layout" }), M = F(!1), E = F(null);
|
|
2156
2192
|
T(() => {
|
|
2157
2193
|
if (!l) return;
|
|
2158
|
-
const w =
|
|
2159
|
-
|
|
2160
|
-
}, [t, d,
|
|
2194
|
+
const w = Je(t, d, g, o), m = E.current;
|
|
2195
|
+
m && Qe(m, w) || (E.current = w, l(w));
|
|
2196
|
+
}, [t, d, g, o, l]), T(() => {
|
|
2161
2197
|
if (e.auth)
|
|
2162
|
-
return e.auth.onAuthChange((w,
|
|
2198
|
+
return e.auth.onAuthChange((w, m) => _(m));
|
|
2163
2199
|
}, [e.auth]), T(() => {
|
|
2164
2200
|
if (typeof e.onBootstrapChange == "function")
|
|
2165
2201
|
return e.onBootstrapChange((w) => {
|
|
2166
|
-
|
|
2167
|
-
(
|
|
2202
|
+
p(
|
|
2203
|
+
(m) => m.status === "ready" ? { status: "ready", data: w } : m
|
|
2168
2204
|
);
|
|
2169
2205
|
});
|
|
2170
2206
|
}, [e]), T(() => {
|
|
2171
2207
|
if (!t || d.status === "ready" || d.status === "loading") return;
|
|
2172
2208
|
let w = !1;
|
|
2173
|
-
return
|
|
2174
|
-
w || (
|
|
2209
|
+
return p({ status: "loading" }), e.bootstrap().then((m) => {
|
|
2210
|
+
w || (p({ status: "ready", data: m }), a("ready", m), m.user?.has_active_subscription && !s && (a("purchase_completed", {
|
|
2175
2211
|
priceId: null,
|
|
2176
2212
|
sessionId: null,
|
|
2177
2213
|
restored: !0
|
|
2178
|
-
}),
|
|
2179
|
-
}).catch((
|
|
2214
|
+
}), f({ kind: "purchase_success", restored: !0 })));
|
|
2215
|
+
}).catch((m) => {
|
|
2180
2216
|
if (w) return;
|
|
2181
|
-
const
|
|
2182
|
-
|
|
2217
|
+
const k = m instanceof U ? m : new U("unknown", "Failed to load paywall", { cause: m });
|
|
2218
|
+
p({ status: "error", error: k }), a("error", k);
|
|
2183
2219
|
}), () => {
|
|
2184
2220
|
w = !0;
|
|
2185
2221
|
};
|
|
2186
|
-
}, [t, e]),
|
|
2222
|
+
}, [t, e]), $t(() => {
|
|
2187
2223
|
if (!t) {
|
|
2188
|
-
|
|
2224
|
+
f({ kind: "layout" }), M.current = !1;
|
|
2189
2225
|
return;
|
|
2190
2226
|
}
|
|
2191
|
-
|
|
2192
|
-
}, [t,
|
|
2193
|
-
const
|
|
2227
|
+
i === "support" ? f({ kind: "support", origin: "standalone" }) : i === "auth" ? f({ kind: "auth_gate", origin: "standalone" }) : i === "anon" && f({ kind: "anon_gate", origin: "standalone" });
|
|
2228
|
+
}, [t, i]);
|
|
2229
|
+
const y = async (w) => {
|
|
2194
2230
|
try {
|
|
2195
|
-
const
|
|
2231
|
+
const m = await e.createCheckout({
|
|
2196
2232
|
priceId: w,
|
|
2197
2233
|
ignoreActivePurchase: s === !0
|
|
2198
2234
|
});
|
|
2199
|
-
if (a("checkout_started", { priceId: w, url:
|
|
2200
|
-
const
|
|
2201
|
-
if (
|
|
2235
|
+
if (a("checkout_started", { priceId: w, url: m.url, acquiring: m.acquiring }), typeof window > "u" || !m.url) return;
|
|
2236
|
+
const k = window.open(m.url, "_blank");
|
|
2237
|
+
if (k) {
|
|
2202
2238
|
try {
|
|
2203
|
-
|
|
2239
|
+
k.opener = null;
|
|
2204
2240
|
} catch {
|
|
2205
2241
|
}
|
|
2206
|
-
|
|
2242
|
+
f({ kind: "awaiting_payment", priceId: w, url: m.url });
|
|
2207
2243
|
} else
|
|
2208
|
-
|
|
2209
|
-
} catch (
|
|
2210
|
-
if (
|
|
2244
|
+
f({ kind: "popup_blocked", priceId: w, url: m.url });
|
|
2245
|
+
} catch (m) {
|
|
2246
|
+
if (m instanceof U && m.code === "already_purchased") {
|
|
2211
2247
|
try {
|
|
2212
2248
|
await e.getUser({ force: !0 });
|
|
2213
2249
|
} catch {
|
|
2214
2250
|
}
|
|
2215
|
-
a("purchase_completed", { priceId: w, sessionId: null, restored: !0 }),
|
|
2251
|
+
a("purchase_completed", { priceId: w, sessionId: null, restored: !0 }), f({ kind: "purchase_success", restored: !0 });
|
|
2216
2252
|
return;
|
|
2217
2253
|
}
|
|
2218
|
-
const
|
|
2219
|
-
a("error",
|
|
2254
|
+
const k = m instanceof U ? m : new U("checkout_failed", "Checkout failed", { cause: m });
|
|
2255
|
+
a("error", k), f({ kind: "layout" });
|
|
2220
2256
|
}
|
|
2221
|
-
},
|
|
2257
|
+
}, L = (w, m) => {
|
|
2222
2258
|
if (typeof window > "u") return;
|
|
2223
|
-
const
|
|
2224
|
-
if (
|
|
2259
|
+
const k = window.open(m, "_blank");
|
|
2260
|
+
if (k) {
|
|
2225
2261
|
try {
|
|
2226
|
-
|
|
2262
|
+
k.opener = null;
|
|
2227
2263
|
} catch {
|
|
2228
2264
|
}
|
|
2229
|
-
|
|
2265
|
+
f({ kind: "awaiting_payment", priceId: w, url: m });
|
|
2230
2266
|
}
|
|
2231
2267
|
};
|
|
2232
2268
|
T(() => {
|
|
2233
|
-
if (
|
|
2234
|
-
|
|
2235
|
-
const w =
|
|
2236
|
-
|
|
2269
|
+
if (g.kind !== "auth_gate" || !x || x.user.is_anonymous || M.current) return;
|
|
2270
|
+
M.current = !0;
|
|
2271
|
+
const w = g.pendingCheckout, m = g.origin;
|
|
2272
|
+
f({ kind: "verifying" }), (async () => {
|
|
2237
2273
|
if (!s)
|
|
2238
2274
|
try {
|
|
2239
2275
|
if ((await e.getUser({ force: !0 })).has_active_subscription) {
|
|
@@ -2241,54 +2277,54 @@ function Qe({
|
|
|
2241
2277
|
priceId: w?.priceId ?? null,
|
|
2242
2278
|
sessionId: null,
|
|
2243
2279
|
restored: !0
|
|
2244
|
-
}),
|
|
2280
|
+
}), f({ kind: "purchase_success", restored: !0 });
|
|
2245
2281
|
return;
|
|
2246
2282
|
}
|
|
2247
2283
|
} catch {
|
|
2248
2284
|
}
|
|
2249
2285
|
if (!w) {
|
|
2250
|
-
|
|
2286
|
+
m === "standalone" ? r() : f({ kind: "layout" });
|
|
2251
2287
|
return;
|
|
2252
2288
|
}
|
|
2253
|
-
await
|
|
2289
|
+
await y(w.priceId);
|
|
2254
2290
|
})().finally(() => {
|
|
2255
|
-
|
|
2291
|
+
M.current = !1;
|
|
2256
2292
|
});
|
|
2257
|
-
}, [
|
|
2258
|
-
const
|
|
2293
|
+
}, [x, g]);
|
|
2294
|
+
const I = async (w, m) => {
|
|
2259
2295
|
if (w === "close") {
|
|
2260
2296
|
r();
|
|
2261
2297
|
return;
|
|
2262
2298
|
}
|
|
2263
2299
|
if (w === "price_selected") {
|
|
2264
|
-
a("price_selected",
|
|
2300
|
+
a("price_selected", m);
|
|
2265
2301
|
return;
|
|
2266
2302
|
}
|
|
2267
2303
|
if (w === "restore") {
|
|
2268
2304
|
if (!e.auth) return;
|
|
2269
|
-
const
|
|
2270
|
-
if (
|
|
2271
|
-
|
|
2305
|
+
const k = e.auth.getCachedSession();
|
|
2306
|
+
if (k && !k.user.is_anonymous) return;
|
|
2307
|
+
f({ kind: "auth_gate", intent: "restore" });
|
|
2272
2308
|
return;
|
|
2273
2309
|
}
|
|
2274
2310
|
if (w === "support") {
|
|
2275
|
-
|
|
2311
|
+
f({ kind: "support", origin: "layout" });
|
|
2276
2312
|
return;
|
|
2277
2313
|
}
|
|
2278
2314
|
if (w === "checkout" && d.status === "ready") {
|
|
2279
|
-
const
|
|
2280
|
-
if (!
|
|
2281
|
-
a("error", new
|
|
2315
|
+
const k = m?.priceId;
|
|
2316
|
+
if (!k) {
|
|
2317
|
+
a("error", new U("no_price", "No price selected"));
|
|
2282
2318
|
return;
|
|
2283
2319
|
}
|
|
2284
|
-
const
|
|
2285
|
-
if (
|
|
2286
|
-
|
|
2320
|
+
const S = d.data.settings.checkout_mode ?? "guest", P = e.auth?.getCachedSession() ?? null, V = !!P && !P.user.is_anonymous;
|
|
2321
|
+
if (S === "preauth" && !!e.auth && !V) {
|
|
2322
|
+
f({ kind: "auth_gate", pendingCheckout: { priceId: k } });
|
|
2287
2323
|
return;
|
|
2288
2324
|
}
|
|
2289
|
-
await
|
|
2325
|
+
await y(k);
|
|
2290
2326
|
}
|
|
2291
|
-
},
|
|
2327
|
+
}, z = d.status === "ready" ? d.data.settings.brand_color : null, j = d.status === "ready" ? d.data.settings.allow_close !== !1 : !0, D = g.kind === "layout" && d.status === "ready" ? zt(d.data.offers) : null, R = D ? /* @__PURE__ */ n(ye, { offer: D }) : null, N = {
|
|
2292
2328
|
type: "auth_panel",
|
|
2293
2329
|
// Заголовок не задаём — AuthGate сам решит по intent'у (restore →
|
|
2294
2330
|
// "Restore Purchases", остальные → дефолтный "Welcome back!").
|
|
@@ -2298,115 +2334,115 @@ function Qe({
|
|
|
2298
2334
|
// чем хотим показывать "Signed in as ..." промежуточным экраном.
|
|
2299
2335
|
hide_when_authenticated: !1,
|
|
2300
2336
|
providers: d.status === "ready" ? d.data.settings.auth_providers : void 0
|
|
2301
|
-
},
|
|
2302
|
-
|
|
2337
|
+
}, A = g.kind === "support" ? /* @__PURE__ */ n(
|
|
2338
|
+
_e,
|
|
2303
2339
|
{
|
|
2304
2340
|
client: e,
|
|
2305
|
-
authSession:
|
|
2306
|
-
origin:
|
|
2341
|
+
authSession: x,
|
|
2342
|
+
origin: g.origin,
|
|
2307
2343
|
onBack: () => {
|
|
2308
|
-
|
|
2344
|
+
g.origin === "standalone" ? r() : f({ kind: "layout" });
|
|
2309
2345
|
}
|
|
2310
2346
|
}
|
|
2311
|
-
) : null,
|
|
2312
|
-
return /* @__PURE__ */
|
|
2313
|
-
|
|
2347
|
+
) : null, C = g.kind === "auth_gate" && g.origin !== "standalone" || g.kind === "support", B = d.status === "ready" ? d.data : null;
|
|
2348
|
+
return /* @__PURE__ */ n(te, { bootstrap: B, forceLocale: h, children: /* @__PURE__ */ n(
|
|
2349
|
+
ee,
|
|
2314
2350
|
{
|
|
2315
2351
|
open: t,
|
|
2316
2352
|
onClose: r,
|
|
2317
|
-
brandColor:
|
|
2318
|
-
topBanner:
|
|
2353
|
+
brandColor: z,
|
|
2354
|
+
topBanner: R,
|
|
2319
2355
|
allowClose: j,
|
|
2320
|
-
hideCloseButton:
|
|
2321
|
-
inline:
|
|
2356
|
+
hideCloseButton: C,
|
|
2357
|
+
inline: u,
|
|
2322
2358
|
labelledBy: "pw-title",
|
|
2323
|
-
children: o ? /* @__PURE__ */
|
|
2324
|
-
|
|
2359
|
+
children: o ? /* @__PURE__ */ n(_t, { onContinue: r }) : g.kind === "purchase_success" ? /* @__PURE__ */ n(_t, { restored: g.restored, onContinue: r }) : A || (d.status === "loading" || d.status === "idle" || g.kind === "verifying" ? /* @__PURE__ */ n(er, { verifying: g.kind === "verifying" }) : d.status === "error" ? /* @__PURE__ */ n(rr, { message: d.error.message }) : g.kind === "auth_gate" && e.auth ? /* @__PURE__ */ n(
|
|
2360
|
+
fe,
|
|
2325
2361
|
{
|
|
2326
|
-
block:
|
|
2362
|
+
block: N,
|
|
2327
2363
|
bootstrap: d.data,
|
|
2328
2364
|
auth: e.auth,
|
|
2329
|
-
authSession:
|
|
2330
|
-
showBack:
|
|
2331
|
-
intent:
|
|
2365
|
+
authSession: x,
|
|
2366
|
+
showBack: g.origin !== "standalone",
|
|
2367
|
+
intent: g.intent ?? (g.origin === "standalone" ? "standalone" : "preauth"),
|
|
2332
2368
|
onBack: () => {
|
|
2333
|
-
|
|
2369
|
+
g.origin === "standalone" ? r() : f({ kind: "layout" });
|
|
2334
2370
|
}
|
|
2335
2371
|
}
|
|
2336
|
-
) :
|
|
2337
|
-
|
|
2372
|
+
) : g.kind === "anon_gate" && e.auth ? /* @__PURE__ */ n(
|
|
2373
|
+
me,
|
|
2338
2374
|
{
|
|
2339
2375
|
auth: e.auth,
|
|
2340
2376
|
onSuccess: () => {
|
|
2341
|
-
|
|
2377
|
+
g.origin === "standalone" ? r() : f({ kind: "layout" });
|
|
2342
2378
|
},
|
|
2343
|
-
onBack:
|
|
2379
|
+
onBack: g.origin === "standalone" ? void 0 : () => f({ kind: "layout" })
|
|
2344
2380
|
}
|
|
2345
|
-
) :
|
|
2346
|
-
|
|
2381
|
+
) : g.kind === "awaiting_payment" ? /* @__PURE__ */ n(
|
|
2382
|
+
nr,
|
|
2347
2383
|
{
|
|
2348
2384
|
client: e,
|
|
2349
|
-
onBack: () =>
|
|
2385
|
+
onBack: () => f({ kind: "layout" }),
|
|
2350
2386
|
onReopen: () => {
|
|
2351
2387
|
if (typeof window > "u") return;
|
|
2352
|
-
const w = window.open(
|
|
2388
|
+
const w = window.open(g.url, "_blank");
|
|
2353
2389
|
if (w)
|
|
2354
2390
|
try {
|
|
2355
2391
|
w.opener = null;
|
|
2356
2392
|
} catch {
|
|
2357
2393
|
}
|
|
2358
2394
|
},
|
|
2359
|
-
onRetry: () =>
|
|
2395
|
+
onRetry: () => y(g.priceId)
|
|
2360
2396
|
}
|
|
2361
|
-
) :
|
|
2362
|
-
|
|
2397
|
+
) : g.kind === "popup_blocked" ? /* @__PURE__ */ n(ir, { onReopen: () => L(g.priceId, g.url) }) : /* @__PURE__ */ n(
|
|
2398
|
+
Xe,
|
|
2363
2399
|
{
|
|
2364
2400
|
layout: d.data.layout,
|
|
2365
2401
|
bootstrap: d.data,
|
|
2366
|
-
onAction:
|
|
2402
|
+
onAction: I,
|
|
2367
2403
|
auth: e.auth,
|
|
2368
|
-
authSession:
|
|
2404
|
+
authSession: x
|
|
2369
2405
|
}
|
|
2370
2406
|
))
|
|
2371
2407
|
}
|
|
2372
2408
|
) });
|
|
2373
2409
|
}
|
|
2374
|
-
function
|
|
2410
|
+
function er({ verifying: e }) {
|
|
2375
2411
|
const { t } = v();
|
|
2376
2412
|
return /* @__PURE__ */ c("div", { class: "flex flex-col items-center justify-center gap-3 py-12", children: [
|
|
2377
|
-
/* @__PURE__ */
|
|
2378
|
-
/* @__PURE__ */
|
|
2413
|
+
/* @__PURE__ */ n("span", { class: "inline-block h-7 w-7 animate-spin rounded-full border-[2.5px] border-gray-200 border-t-[var(--pw-accent)]" }),
|
|
2414
|
+
/* @__PURE__ */ n("span", { class: "text-xs font-medium tracking-wide text-gray-500", children: e ? t("modal.verifying_subscription", "Checking your subscription…") : t("modal.loading", "Loading…") })
|
|
2379
2415
|
] });
|
|
2380
2416
|
}
|
|
2381
|
-
function
|
|
2417
|
+
function rr({ message: e }) {
|
|
2382
2418
|
const { t } = v();
|
|
2383
2419
|
return /* @__PURE__ */ c("div", { class: "flex flex-col items-center gap-2 py-8 text-center", children: [
|
|
2384
|
-
/* @__PURE__ */
|
|
2385
|
-
/* @__PURE__ */
|
|
2386
|
-
/* @__PURE__ */
|
|
2420
|
+
/* @__PURE__ */ n("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: [
|
|
2421
|
+
/* @__PURE__ */ n("path", { d: "M10 6v5M10 14h.01", stroke: "#dc2626", "stroke-width": "2", "stroke-linecap": "round" }),
|
|
2422
|
+
/* @__PURE__ */ n("circle", { cx: "10", cy: "10", r: "8", stroke: "#dc2626", "stroke-width": "1.75" })
|
|
2387
2423
|
] }) }),
|
|
2388
|
-
/* @__PURE__ */
|
|
2389
|
-
/* @__PURE__ */
|
|
2424
|
+
/* @__PURE__ */ n("p", { class: "text-sm font-semibold tracking-tight text-gray-900", children: t("modal.error_generic", "Something went wrong") }),
|
|
2425
|
+
/* @__PURE__ */ n("p", { class: "text-xs leading-relaxed text-gray-500", children: e })
|
|
2390
2426
|
] });
|
|
2391
2427
|
}
|
|
2392
|
-
function
|
|
2428
|
+
function ir({ onReopen: e }) {
|
|
2393
2429
|
const { t } = v();
|
|
2394
2430
|
return /* @__PURE__ */ c("div", { class: "flex flex-col items-center gap-3 py-8 text-center", children: [
|
|
2395
|
-
/* @__PURE__ */
|
|
2431
|
+
/* @__PURE__ */ n(
|
|
2396
2432
|
"div",
|
|
2397
2433
|
{
|
|
2398
2434
|
class: "flex h-11 w-11 items-center justify-center rounded-full",
|
|
2399
2435
|
style: { background: "color-mix(in srgb, var(--pw-accent) 12%, white)", color: "var(--pw-accent)" },
|
|
2400
2436
|
"aria-hidden": "true",
|
|
2401
2437
|
children: /* @__PURE__ */ c("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: [
|
|
2402
|
-
/* @__PURE__ */
|
|
2403
|
-
/* @__PURE__ */
|
|
2438
|
+
/* @__PURE__ */ n("path", { d: "M4 5h12v10H4z", stroke: "currentColor", "stroke-width": "1.75", "stroke-linejoin": "round" }),
|
|
2439
|
+
/* @__PURE__ */ n("path", { d: "M7 9l3 3 4-5", stroke: "currentColor", "stroke-width": "1.75", "stroke-linecap": "round", "stroke-linejoin": "round" })
|
|
2404
2440
|
] })
|
|
2405
2441
|
}
|
|
2406
2442
|
),
|
|
2407
|
-
/* @__PURE__ */
|
|
2408
|
-
/* @__PURE__ */
|
|
2409
|
-
/* @__PURE__ */
|
|
2443
|
+
/* @__PURE__ */ n("p", { class: "text-sm font-semibold tracking-tight text-gray-900", children: t("payment.popup_blocked_title", "Allow popups to continue") }),
|
|
2444
|
+
/* @__PURE__ */ n("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.") }),
|
|
2445
|
+
/* @__PURE__ */ n(
|
|
2410
2446
|
"button",
|
|
2411
2447
|
{
|
|
2412
2448
|
type: "button",
|
|
@@ -2421,47 +2457,47 @@ function rr({ onReopen: e }) {
|
|
|
2421
2457
|
)
|
|
2422
2458
|
] });
|
|
2423
2459
|
}
|
|
2424
|
-
function
|
|
2460
|
+
function nr({
|
|
2425
2461
|
client: e,
|
|
2426
2462
|
onBack: t,
|
|
2427
2463
|
onReopen: r,
|
|
2428
2464
|
onRetry: a
|
|
2429
2465
|
}) {
|
|
2430
|
-
const { t:
|
|
2466
|
+
const { t: i } = v(), [o, s] = b(!1), [l, u] = b(!1), h = F(null);
|
|
2431
2467
|
T(() => () => {
|
|
2432
|
-
|
|
2468
|
+
h.current !== null && clearTimeout(h.current);
|
|
2433
2469
|
}, []);
|
|
2434
|
-
const
|
|
2470
|
+
const d = async () => {
|
|
2435
2471
|
if (!o) {
|
|
2436
|
-
s(!0),
|
|
2472
|
+
s(!0), u(!1);
|
|
2437
2473
|
try {
|
|
2438
2474
|
if ((await e.getUser({ force: !0 })).has_active_subscription) {
|
|
2439
2475
|
typeof window < "u" && window.postMessage({ type: "paywall_purchase" }, "*");
|
|
2440
2476
|
return;
|
|
2441
2477
|
}
|
|
2442
|
-
|
|
2443
|
-
|
|
2478
|
+
u(!0), h.current !== null && clearTimeout(h.current), h.current = setTimeout(() => {
|
|
2479
|
+
u(!1), h.current = null;
|
|
2444
2480
|
}, 5e3);
|
|
2445
2481
|
} catch {
|
|
2446
|
-
|
|
2482
|
+
u(!0);
|
|
2447
2483
|
} finally {
|
|
2448
2484
|
s(!1);
|
|
2449
2485
|
}
|
|
2450
2486
|
}
|
|
2451
2487
|
};
|
|
2452
2488
|
return /* @__PURE__ */ c("div", { class: "flex flex-col gap-3", children: [
|
|
2453
|
-
/* @__PURE__ */
|
|
2489
|
+
/* @__PURE__ */ n(
|
|
2454
2490
|
"button",
|
|
2455
2491
|
{
|
|
2456
2492
|
type: "button",
|
|
2457
2493
|
onClick: t,
|
|
2458
2494
|
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)]",
|
|
2459
|
-
children:
|
|
2495
|
+
children: i("nav.back", "← Back")
|
|
2460
2496
|
}
|
|
2461
2497
|
),
|
|
2462
2498
|
/* @__PURE__ */ c("div", { class: "flex flex-col items-center gap-3 py-6 text-center", children: [
|
|
2463
2499
|
/* @__PURE__ */ c("div", { class: "relative flex h-12 w-12 items-center justify-center", children: [
|
|
2464
|
-
/* @__PURE__ */
|
|
2500
|
+
/* @__PURE__ */ n(
|
|
2465
2501
|
"span",
|
|
2466
2502
|
{
|
|
2467
2503
|
class: "absolute inset-0 animate-ping rounded-full opacity-40",
|
|
@@ -2469,59 +2505,59 @@ function ir({
|
|
|
2469
2505
|
"aria-hidden": "true"
|
|
2470
2506
|
}
|
|
2471
2507
|
),
|
|
2472
|
-
/* @__PURE__ */
|
|
2508
|
+
/* @__PURE__ */ n("span", { class: "relative inline-block h-7 w-7 animate-spin rounded-full border-[2.5px] border-gray-200 border-t-[var(--pw-accent)]" })
|
|
2473
2509
|
] }),
|
|
2474
|
-
/* @__PURE__ */
|
|
2475
|
-
/* @__PURE__ */
|
|
2510
|
+
/* @__PURE__ */ n("p", { class: "text-sm font-semibold tracking-tight text-gray-900", children: i("payment.awaiting_title", "Complete payment in the new tab") }),
|
|
2511
|
+
/* @__PURE__ */ n("p", { class: "max-w-[20rem] text-xs leading-relaxed text-gray-500", children: i(
|
|
2476
2512
|
"payment.awaiting_subtitle",
|
|
2477
2513
|
"We'll detect your payment automatically — or click below once you're done."
|
|
2478
2514
|
) }),
|
|
2479
|
-
/* @__PURE__ */
|
|
2515
|
+
/* @__PURE__ */ n(
|
|
2480
2516
|
"button",
|
|
2481
2517
|
{
|
|
2482
2518
|
type: "button",
|
|
2483
|
-
onClick:
|
|
2519
|
+
onClick: d,
|
|
2484
2520
|
disabled: o,
|
|
2485
2521
|
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)]",
|
|
2486
2522
|
style: {
|
|
2487
2523
|
background: "linear-gradient(180deg, color-mix(in srgb, var(--pw-accent) 92%, white), var(--pw-accent))",
|
|
2488
2524
|
boxShadow: "0 1px 2px rgba(15,23,42,0.08), 0 6px 14px -4px color-mix(in srgb, var(--pw-accent) 50%, transparent)"
|
|
2489
2525
|
},
|
|
2490
|
-
children: o ?
|
|
2526
|
+
children: o ? i("payment.checking", "Checking…") : i("payment.ive_paid", "I've paid")
|
|
2491
2527
|
}
|
|
2492
2528
|
),
|
|
2493
|
-
l ? /* @__PURE__ */
|
|
2529
|
+
l ? /* @__PURE__ */ n("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
|
|
2494
2530
|
] }),
|
|
2495
2531
|
/* @__PURE__ */ c("div", { class: "rounded-2xl border border-gray-200 bg-gray-50/60 p-3.5", children: [
|
|
2496
|
-
/* @__PURE__ */
|
|
2497
|
-
/* @__PURE__ */
|
|
2532
|
+
/* @__PURE__ */ n("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.") }),
|
|
2533
|
+
/* @__PURE__ */ n(
|
|
2498
2534
|
"button",
|
|
2499
2535
|
{
|
|
2500
2536
|
type: "button",
|
|
2501
2537
|
onClick: r,
|
|
2502
2538
|
class: "mt-2.5 w-full rounded-xl border border-gray-200 bg-white px-3 py-2 text-xs font-semibold text-gray-700 transition-colors hover:border-gray-300 hover:bg-gray-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
|
|
2503
|
-
children:
|
|
2539
|
+
children: i("payment.open_checkout_again", "Open checkout again")
|
|
2504
2540
|
}
|
|
2505
2541
|
)
|
|
2506
2542
|
] }),
|
|
2507
|
-
/* @__PURE__ */
|
|
2543
|
+
/* @__PURE__ */ n(
|
|
2508
2544
|
"button",
|
|
2509
2545
|
{
|
|
2510
2546
|
type: "button",
|
|
2511
2547
|
onClick: a,
|
|
2512
2548
|
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)]",
|
|
2513
|
-
children:
|
|
2549
|
+
children: i("payment.tab_closed_retry", "Tab closed? Try again")
|
|
2514
2550
|
}
|
|
2515
2551
|
)
|
|
2516
2552
|
] });
|
|
2517
2553
|
}
|
|
2518
|
-
function
|
|
2554
|
+
function _t({
|
|
2519
2555
|
onContinue: e,
|
|
2520
2556
|
restored: t = !1
|
|
2521
2557
|
}) {
|
|
2522
2558
|
const { t: r } = v();
|
|
2523
2559
|
return /* @__PURE__ */ c("div", { class: "flex flex-col items-center gap-3 py-8 text-center", children: [
|
|
2524
|
-
/* @__PURE__ */
|
|
2560
|
+
/* @__PURE__ */ n(
|
|
2525
2561
|
"div",
|
|
2526
2562
|
{
|
|
2527
2563
|
class: "flex h-14 w-14 items-center justify-center rounded-full ring-8",
|
|
@@ -2532,7 +2568,7 @@ function kt({
|
|
|
2532
2568
|
boxShadow: "0 0 0 8px rgba(74,222,128,0.12), 0 8px 20px -6px rgba(22,163,74,0.45)"
|
|
2533
2569
|
},
|
|
2534
2570
|
"aria-hidden": "true",
|
|
2535
|
-
children: /* @__PURE__ */
|
|
2571
|
+
children: /* @__PURE__ */ n("svg", { width: "28", height: "28", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ n(
|
|
2536
2572
|
"path",
|
|
2537
2573
|
{
|
|
2538
2574
|
d: "M5 13l4 4L19 7",
|
|
@@ -2544,12 +2580,12 @@ function kt({
|
|
|
2544
2580
|
) })
|
|
2545
2581
|
}
|
|
2546
2582
|
),
|
|
2547
|
-
/* @__PURE__ */
|
|
2548
|
-
/* @__PURE__ */
|
|
2583
|
+
/* @__PURE__ */ n("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") }),
|
|
2584
|
+
/* @__PURE__ */ n("p", { class: "text-sm leading-relaxed text-gray-500", children: t ? r(
|
|
2549
2585
|
"modal.purchase_restored_subtitle",
|
|
2550
2586
|
"Welcome back — your subscription is already active."
|
|
2551
2587
|
) : r("modal.purchase_success_subtitle", "Your subscription is now active.") }),
|
|
2552
|
-
/* @__PURE__ */
|
|
2588
|
+
/* @__PURE__ */ n(
|
|
2553
2589
|
"button",
|
|
2554
2590
|
{
|
|
2555
2591
|
type: "button",
|
|
@@ -2564,17 +2600,17 @@ function kt({
|
|
|
2564
2600
|
)
|
|
2565
2601
|
] });
|
|
2566
2602
|
}
|
|
2567
|
-
const
|
|
2568
|
-
class
|
|
2603
|
+
const ar = 10 * 6e4, or = 5e3, sr = 3e4;
|
|
2604
|
+
class lr {
|
|
2569
2605
|
constructor(t) {
|
|
2570
2606
|
this.timer = null, this.timeoutTimer = null, this.visibilityHandler = null, this.focusHandler = null, this.messageHandler = null, this.stopped = !1, this.checking = !1, this.opts = {
|
|
2571
2607
|
client: t.client,
|
|
2572
2608
|
onActive: t.onActive,
|
|
2573
2609
|
onTimeout: t.onTimeout ?? (() => {
|
|
2574
2610
|
}),
|
|
2575
|
-
timeoutMs: t.timeoutMs ??
|
|
2576
|
-
visibleIntervalMs: t.visibleIntervalMs ??
|
|
2577
|
-
hiddenIntervalMs: t.hiddenIntervalMs ??
|
|
2611
|
+
timeoutMs: t.timeoutMs ?? ar,
|
|
2612
|
+
visibleIntervalMs: t.visibleIntervalMs ?? or,
|
|
2613
|
+
hiddenIntervalMs: t.hiddenIntervalMs ?? sr
|
|
2578
2614
|
};
|
|
2579
2615
|
}
|
|
2580
2616
|
start() {
|
|
@@ -2613,22 +2649,22 @@ class sr {
|
|
|
2613
2649
|
!r || typeof r != "object" || r.type === "paywall_purchase" && this.check();
|
|
2614
2650
|
}
|
|
2615
2651
|
}
|
|
2616
|
-
function
|
|
2652
|
+
function cr() {
|
|
2617
2653
|
return !(typeof document > "u" || typeof window > "u" || typeof location < "u" && location.protocol === "chrome-extension:");
|
|
2618
2654
|
}
|
|
2619
|
-
const st = { open: !1, view: null, error: null },
|
|
2655
|
+
const st = { open: !1, view: null, error: null }, H = {
|
|
2620
2656
|
status: "paywall_status",
|
|
2621
2657
|
priceId: "paywall_price_id",
|
|
2622
2658
|
sessionId: "paywall_session_id"
|
|
2623
2659
|
};
|
|
2624
|
-
class
|
|
2660
|
+
class yr {
|
|
2625
2661
|
constructor(t) {
|
|
2626
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 = st, this.stateListeners = /* @__PURE__ */ new Set();
|
|
2627
|
-
const { auth: r, ownsAuth: a } =
|
|
2628
|
-
this.auth = r, this.ownsAuth = a, this.billing = t.client ?? new
|
|
2629
|
-
this.emit("userChange",
|
|
2630
|
-
}), this.auth && (this.authUnsub = this.auth.onAuthChange((
|
|
2631
|
-
this.emit("authChange", { event:
|
|
2663
|
+
const { auth: r, ownsAuth: a } = dr(t);
|
|
2664
|
+
this.auth = r, this.ownsAuth = a, this.billing = t.client ?? new Dt({ ...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
|
+
this.emit("userChange", i);
|
|
2666
|
+
}), this.auth && (this.authUnsub = this.auth.onAuthChange((i, o) => {
|
|
2667
|
+
this.emit("authChange", { event: i, session: o });
|
|
2632
2668
|
})), this.initTracker(t.analytics), t.autoDetectReturn !== !1 && typeof window < "u" && queueMicrotask(() => this.checkReturn());
|
|
2633
2669
|
}
|
|
2634
2670
|
initTracker(t) {
|
|
@@ -2636,7 +2672,7 @@ class xr {
|
|
|
2636
2672
|
const r = typeof t == "object" && t !== null ? t : {};
|
|
2637
2673
|
if (r.enabled === !1) return;
|
|
2638
2674
|
const a = r.endpoint ?? `${this.billing.apiOrigin}/api/v1/paywall/${this.billing.paywallId}/events`;
|
|
2639
|
-
this.tracker = new
|
|
2675
|
+
this.tracker = new Nt({
|
|
2640
2676
|
endpoint: a,
|
|
2641
2677
|
paywallId: this.billing.paywallId,
|
|
2642
2678
|
capabilities: this.billing.capabilities,
|
|
@@ -2649,45 +2685,45 @@ class xr {
|
|
|
2649
2685
|
sendBeacon: r.sendBeacon
|
|
2650
2686
|
}), this.on("open", () => this.tracker?.track("paywall_opened")), this.on(
|
|
2651
2687
|
"ready",
|
|
2652
|
-
(
|
|
2653
|
-
is_test_mode:
|
|
2654
|
-
prices_count:
|
|
2655
|
-
offers_count:
|
|
2688
|
+
(i) => this.tracker?.track("paywall_viewed", {
|
|
2689
|
+
is_test_mode: i.settings.is_test_mode,
|
|
2690
|
+
prices_count: i.prices.length,
|
|
2691
|
+
offers_count: i.offers.length
|
|
2656
2692
|
})
|
|
2657
2693
|
), this.on(
|
|
2658
2694
|
"price_selected",
|
|
2659
|
-
(
|
|
2695
|
+
(i) => this.tracker?.track("price_selected", { price_id: i.priceId })
|
|
2660
2696
|
), this.on(
|
|
2661
2697
|
"checkout_started",
|
|
2662
|
-
(
|
|
2663
|
-
price_id:
|
|
2664
|
-
acquiring:
|
|
2698
|
+
(i) => this.tracker?.track("checkout_started", {
|
|
2699
|
+
price_id: i.priceId,
|
|
2700
|
+
acquiring: i.acquiring
|
|
2665
2701
|
})
|
|
2666
2702
|
), this.on(
|
|
2667
2703
|
"purchase_completed",
|
|
2668
|
-
(
|
|
2669
|
-
price_id:
|
|
2670
|
-
session_id:
|
|
2704
|
+
(i) => this.tracker?.track("purchase_completed", {
|
|
2705
|
+
price_id: i.priceId,
|
|
2706
|
+
session_id: i.sessionId
|
|
2671
2707
|
})
|
|
2672
2708
|
), this.on(
|
|
2673
2709
|
"purchase_failed",
|
|
2674
|
-
(
|
|
2710
|
+
(i) => this.tracker?.track("purchase_failed", { reason: i.reason })
|
|
2675
2711
|
), this.on("close", () => this.tracker?.track("paywall_closed")), this.on(
|
|
2676
2712
|
"trial_blocked",
|
|
2677
|
-
(
|
|
2678
|
-
mode:
|
|
2679
|
-
...
|
|
2713
|
+
(i) => this.tracker?.track("trial_blocked", {
|
|
2714
|
+
mode: i.mode,
|
|
2715
|
+
...i.mode === "time" ? { remaining_ms: i.remainingMs, total_ms: i.totalMs } : i.mode === "opens" ? { remaining_actions: i.remainingActions, total_actions: i.totalActions } : {}
|
|
2680
2716
|
})
|
|
2681
2717
|
), this.on("trial_expired", () => this.tracker?.track("trial_expired")), this.on(
|
|
2682
2718
|
"visibility_blocked",
|
|
2683
|
-
(
|
|
2684
|
-
reason:
|
|
2685
|
-
country:
|
|
2686
|
-
tier:
|
|
2719
|
+
(i) => this.tracker?.track("visibility_blocked", {
|
|
2720
|
+
reason: i.reason,
|
|
2721
|
+
country: i.country,
|
|
2722
|
+
tier: i.tier
|
|
2687
2723
|
})
|
|
2688
2724
|
), this.on(
|
|
2689
2725
|
"error",
|
|
2690
|
-
(
|
|
2726
|
+
(i) => this.tracker?.track("error", { code: i.code, message: i.message })
|
|
2691
2727
|
);
|
|
2692
2728
|
}
|
|
2693
2729
|
/**
|
|
@@ -2723,6 +2759,18 @@ class xr {
|
|
|
2723
2759
|
setBootstrap(t) {
|
|
2724
2760
|
this.billing.setBootstrap(t);
|
|
2725
2761
|
}
|
|
2762
|
+
/**
|
|
2763
|
+
* Сменить force-locale на лету — для live-preview редактора админки, когда
|
|
2764
|
+
* юзер переключает «Preview as user from <country>». Грузит соответствующий
|
|
2765
|
+
* static-чанк и форсит re-render через handle.update. См. PaywallUIOptions.locale.
|
|
2766
|
+
*
|
|
2767
|
+
* Передай `null`/`undefined`, чтобы вернуть автоматическую резолв-логику
|
|
2768
|
+
* (navigator.language → locale_default).
|
|
2769
|
+
*/
|
|
2770
|
+
setLocale(t) {
|
|
2771
|
+
const r = t ?? null;
|
|
2772
|
+
r !== this.forceLocale && (this.forceLocale = r, this.handle && this.handle.update({ locale: r }));
|
|
2773
|
+
}
|
|
2726
2774
|
on(t, r) {
|
|
2727
2775
|
let a = this.listeners.get(t);
|
|
2728
2776
|
return a || (a = /* @__PURE__ */ new Set(), this.listeners.set(t, a)), a.add(r), () => a.delete(r);
|
|
@@ -2733,10 +2781,10 @@ class xr {
|
|
|
2733
2781
|
emit(t, ...r) {
|
|
2734
2782
|
const a = this.listeners.get(t);
|
|
2735
2783
|
if (!a) return;
|
|
2736
|
-
const
|
|
2784
|
+
const i = r[0];
|
|
2737
2785
|
for (const o of a)
|
|
2738
2786
|
try {
|
|
2739
|
-
o(
|
|
2787
|
+
o(i);
|
|
2740
2788
|
} catch (s) {
|
|
2741
2789
|
typeof console < "u" && console.error("[paywall] listener error", s);
|
|
2742
2790
|
}
|
|
@@ -2812,22 +2860,22 @@ class xr {
|
|
|
2812
2860
|
}
|
|
2813
2861
|
openInternal(t, r) {
|
|
2814
2862
|
r.identity && this.billing.setIdentity(r.identity), this.purchased = !1;
|
|
2815
|
-
const a = r.skipTrial === !0 || t === "support",
|
|
2816
|
-
if (a &&
|
|
2863
|
+
const a = r.skipTrial === !0 || t === "support", i = r.skipVisibility === !0 || t === "support" || t === "auth" || t === "anon", o = r.renew === !0;
|
|
2864
|
+
if (a && i) {
|
|
2817
2865
|
this.mountAndShow(t, { renew: o });
|
|
2818
2866
|
return;
|
|
2819
2867
|
}
|
|
2820
2868
|
const s = this.billing.getCachedBootstrap();
|
|
2821
2869
|
if (s) {
|
|
2822
|
-
this.runOpenGates(t, s, { skipTrial: a, skipVisibility:
|
|
2870
|
+
this.runOpenGates(t, s, { skipTrial: a, skipVisibility: i, renew: o });
|
|
2823
2871
|
return;
|
|
2824
2872
|
}
|
|
2825
2873
|
if (this.mountThenLoad) {
|
|
2826
|
-
this.mountAndShow(t, { renew: o }), this.billing.bootstrap().then((l) => this.runDelayedGates(l, { skipTrial: a, skipVisibility:
|
|
2874
|
+
this.mountAndShow(t, { renew: o }), this.billing.bootstrap().then((l) => this.runDelayedGates(l, { skipTrial: a, skipVisibility: i })).catch(() => {
|
|
2827
2875
|
});
|
|
2828
2876
|
return;
|
|
2829
2877
|
}
|
|
2830
|
-
this.billing.bootstrap().then((l) => this.runOpenGates(t, l, { skipTrial: a, skipVisibility:
|
|
2878
|
+
this.billing.bootstrap().then((l) => this.runOpenGates(t, l, { skipTrial: a, skipVisibility: i, renew: o })).catch(() => {
|
|
2831
2879
|
this.mountAndShow(t, { renew: o });
|
|
2832
2880
|
});
|
|
2833
2881
|
}
|
|
@@ -2846,11 +2894,11 @@ class xr {
|
|
|
2846
2894
|
if (r.skipTrial) return;
|
|
2847
2895
|
const a = t.settings.trial;
|
|
2848
2896
|
if (!a) return;
|
|
2849
|
-
const
|
|
2850
|
-
|
|
2897
|
+
const i = this.ensureTrialStore(a);
|
|
2898
|
+
i.check().then(async (o) => {
|
|
2851
2899
|
if (this.isOpen && (this.lastTrialStatus = o, o.mode !== "none")) {
|
|
2852
2900
|
if (o.blocked) {
|
|
2853
|
-
const s = await
|
|
2901
|
+
const s = await i.recordBlock();
|
|
2854
2902
|
if (this.lastTrialStatus = s, !this.isOpen) return;
|
|
2855
2903
|
this.close(), this.emit("trial_blocked", s);
|
|
2856
2904
|
return;
|
|
@@ -2867,9 +2915,9 @@ class xr {
|
|
|
2867
2915
|
// правильную страну он окажется со «слипшимся» триал-счётчиком.
|
|
2868
2916
|
runOpenGates(t, r, a) {
|
|
2869
2917
|
if (!a.skipVisibility) {
|
|
2870
|
-
const
|
|
2871
|
-
if (
|
|
2872
|
-
this.emit("visibility_blocked",
|
|
2918
|
+
const i = r.settings.visibility;
|
|
2919
|
+
if (i && (this.lastVisibility = i, !i.visible)) {
|
|
2920
|
+
this.emit("visibility_blocked", i);
|
|
2873
2921
|
return;
|
|
2874
2922
|
}
|
|
2875
2923
|
}
|
|
@@ -2880,12 +2928,12 @@ class xr {
|
|
|
2880
2928
|
this.gateThroughTrial(t, r, a.renew);
|
|
2881
2929
|
}
|
|
2882
2930
|
gateThroughTrial(t, r, a) {
|
|
2883
|
-
const
|
|
2884
|
-
if (!
|
|
2931
|
+
const i = r.settings.trial;
|
|
2932
|
+
if (!i) {
|
|
2885
2933
|
this.mountAndShow(t, { renew: a });
|
|
2886
2934
|
return;
|
|
2887
2935
|
}
|
|
2888
|
-
const o = this.ensureTrialStore(
|
|
2936
|
+
const o = this.ensureTrialStore(i);
|
|
2889
2937
|
o.check().then(async (s) => {
|
|
2890
2938
|
if (this.lastTrialStatus = s, s.mode === "none") {
|
|
2891
2939
|
this.mountAndShow(t, { renew: a });
|
|
@@ -2902,11 +2950,11 @@ class xr {
|
|
|
2902
2950
|
});
|
|
2903
2951
|
}
|
|
2904
2952
|
ensureTrialStore(t) {
|
|
2905
|
-
if (this.trialStore && this.trialStoreConfig &&
|
|
2953
|
+
if (this.trialStore && this.trialStoreConfig && hr(this.trialStoreConfig, t))
|
|
2906
2954
|
return this.trialStore;
|
|
2907
2955
|
this.trialStoreConfig = t;
|
|
2908
2956
|
const r = this.billing.createTrialStore;
|
|
2909
|
-
return this.trialStore = typeof r == "function" ? r.call(this.billing, t) :
|
|
2957
|
+
return this.trialStore = typeof r == "function" ? r.call(this.billing, t) : qt(this.billing.getStorage(), this.billing.paywallId, t), this.trialStore;
|
|
2910
2958
|
}
|
|
2911
2959
|
mountAndShow(t, r = {}) {
|
|
2912
2960
|
const a = r.renew === !0;
|
|
@@ -2914,8 +2962,8 @@ class xr {
|
|
|
2914
2962
|
this.isOpen = !0, this.handle.update({ open: !0, initialView: t, purchased: !1, renew: a }), this.emit("open");
|
|
2915
2963
|
return;
|
|
2916
2964
|
}
|
|
2917
|
-
this.isOpen = !0, this.handle =
|
|
2918
|
-
|
|
2965
|
+
this.isOpen = !0, this.handle = Zt(
|
|
2966
|
+
tr,
|
|
2919
2967
|
{
|
|
2920
2968
|
client: this.billing,
|
|
2921
2969
|
open: !0,
|
|
@@ -2923,17 +2971,18 @@ class xr {
|
|
|
2923
2971
|
purchased: !1,
|
|
2924
2972
|
renew: a,
|
|
2925
2973
|
onClose: () => this.close(),
|
|
2926
|
-
onEvent: (
|
|
2927
|
-
this.emit(
|
|
2974
|
+
onEvent: (i, o) => {
|
|
2975
|
+
this.emit(i, o), i === "checkout_started" && this.startUserWatcher();
|
|
2928
2976
|
},
|
|
2929
|
-
onState: (
|
|
2930
|
-
inline: this.inline
|
|
2977
|
+
onState: (i) => this.applyState(i),
|
|
2978
|
+
inline: this.inline,
|
|
2979
|
+
locale: this.forceLocale
|
|
2931
2980
|
},
|
|
2932
2981
|
{ host: this.host, shadowMode: this.shadowMode, inline: this.inline }
|
|
2933
2982
|
), this.emit("open");
|
|
2934
2983
|
}
|
|
2935
2984
|
applyState(t) {
|
|
2936
|
-
if (!
|
|
2985
|
+
if (!pr(this.currentState, t)) {
|
|
2937
2986
|
this.currentState = t;
|
|
2938
2987
|
for (const r of this.stateListeners)
|
|
2939
2988
|
try {
|
|
@@ -2968,16 +3017,16 @@ class xr {
|
|
|
2968
3017
|
this.stateListeners.add(t);
|
|
2969
3018
|
const a = r.immediate ?? "microtask";
|
|
2970
3019
|
if (a !== "none") {
|
|
2971
|
-
const
|
|
3020
|
+
const i = this.currentState;
|
|
2972
3021
|
if (a === "sync")
|
|
2973
3022
|
try {
|
|
2974
|
-
t(
|
|
3023
|
+
t(i);
|
|
2975
3024
|
} catch (o) {
|
|
2976
3025
|
console.warn("[paywall] onStateChange initial sync threw", o);
|
|
2977
3026
|
}
|
|
2978
3027
|
else
|
|
2979
3028
|
queueMicrotask(() => {
|
|
2980
|
-
this.stateListeners.has(t) && t(
|
|
3029
|
+
this.stateListeners.has(t) && t(i);
|
|
2981
3030
|
});
|
|
2982
3031
|
}
|
|
2983
3032
|
return () => {
|
|
@@ -3068,11 +3117,11 @@ class xr {
|
|
|
3068
3117
|
trial: null,
|
|
3069
3118
|
user: a
|
|
3070
3119
|
};
|
|
3071
|
-
let
|
|
3120
|
+
let i = null;
|
|
3072
3121
|
if (!t.skipVisibility) {
|
|
3073
3122
|
const s = r.settings.visibility;
|
|
3074
|
-
if (s && (
|
|
3075
|
-
return { access: "granted", reason: "visibility_blocked", visibility:
|
|
3123
|
+
if (s && (i = s, this.lastVisibility = s, !s.visible))
|
|
3124
|
+
return { access: "granted", reason: "visibility_blocked", visibility: i, trial: null, user: a };
|
|
3076
3125
|
}
|
|
3077
3126
|
let o = null;
|
|
3078
3127
|
if (!t.skipTrial) {
|
|
@@ -3080,12 +3129,12 @@ class xr {
|
|
|
3080
3129
|
if (s)
|
|
3081
3130
|
try {
|
|
3082
3131
|
if (o = await this.ensureTrialStore(s).check(), this.lastTrialStatus = o, o.blocked)
|
|
3083
|
-
return { access: "granted", reason: "trial_blocked", visibility:
|
|
3132
|
+
return { access: "granted", reason: "trial_blocked", visibility: i, trial: o, user: a };
|
|
3084
3133
|
} catch (l) {
|
|
3085
3134
|
typeof console < "u" && console.warn("[paywall] getAccess: trial check failed", l);
|
|
3086
3135
|
}
|
|
3087
3136
|
}
|
|
3088
|
-
return { access: "blocked", reason: "no_subscription", visibility:
|
|
3137
|
+
return { access: "blocked", reason: "no_subscription", visibility: i, trial: o, user: a };
|
|
3089
3138
|
}
|
|
3090
3139
|
/** Сбросить состояние триала в storage. Полезно для дев-режима / админ-кнопки
|
|
3091
3140
|
* «прогнать сценарий заново». В проде хост обычно не дёргает. */
|
|
@@ -3099,7 +3148,7 @@ class xr {
|
|
|
3099
3148
|
// В extension popup runtime — no-op (popup не доживёт). Там полагаемся на
|
|
3100
3149
|
// bootstrap при следующем открытии.
|
|
3101
3150
|
startUserWatcher() {
|
|
3102
|
-
this.watcher ||
|
|
3151
|
+
this.watcher || cr() && (this.watcher = new lr({
|
|
3103
3152
|
client: this.billing,
|
|
3104
3153
|
onActive: (t) => {
|
|
3105
3154
|
this.watcher = null, this.emit("purchase_completed", { priceId: null, sessionId: null });
|
|
@@ -3128,19 +3177,19 @@ class xr {
|
|
|
3128
3177
|
*/
|
|
3129
3178
|
checkReturn() {
|
|
3130
3179
|
if (typeof window > "u") return;
|
|
3131
|
-
const t = new URL(window.location.href), r =
|
|
3132
|
-
|
|
3133
|
-
priceId:
|
|
3134
|
-
sessionId:
|
|
3135
|
-
}),
|
|
3180
|
+
const t = new URL(window.location.href), r = St(t.hash.replace(/^#/, "")), a = St(t.search.replace(/^\?/, "")), i = r ?? a;
|
|
3181
|
+
i && (i.status === "paid" ? (this.emit("purchase_completed", {
|
|
3182
|
+
priceId: i.priceId,
|
|
3183
|
+
sessionId: i.sessionId
|
|
3184
|
+
}), gr(i)) : (i.status === "failed" || i.status === "cancelled") && this.emit("purchase_failed", { reason: i.status }), fr(t));
|
|
3136
3185
|
}
|
|
3137
3186
|
destroy() {
|
|
3138
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 = st;
|
|
3139
3188
|
}
|
|
3140
3189
|
}
|
|
3141
|
-
function
|
|
3190
|
+
function dr(e) {
|
|
3142
3191
|
if (!e.auth) return { auth: void 0, ownsAuth: !1 };
|
|
3143
|
-
if (e.auth instanceof dt ||
|
|
3192
|
+
if (e.auth instanceof dt || ur(e.auth))
|
|
3144
3193
|
return { auth: e.auth, ownsAuth: !1 };
|
|
3145
3194
|
const t = e.auth === !0 ? {} : e.auth;
|
|
3146
3195
|
return {
|
|
@@ -3154,27 +3203,27 @@ function cr(e) {
|
|
|
3154
3203
|
ownsAuth: !0
|
|
3155
3204
|
};
|
|
3156
3205
|
}
|
|
3157
|
-
function
|
|
3206
|
+
function ur(e) {
|
|
3158
3207
|
if (typeof e != "object" || e === null) return !1;
|
|
3159
3208
|
const t = e;
|
|
3160
3209
|
return typeof t.onAuthChange == "function" && typeof t.getCachedSession == "function" && typeof t.signOut == "function";
|
|
3161
3210
|
}
|
|
3162
|
-
function
|
|
3211
|
+
function pr(e, t) {
|
|
3163
3212
|
return e.open === t.open && e.view === t.view && e.error === t.error;
|
|
3164
3213
|
}
|
|
3165
|
-
function
|
|
3214
|
+
function hr(e, t) {
|
|
3166
3215
|
return e.mode === t.mode && e.payload === t.payload && e.storage === t.storage;
|
|
3167
3216
|
}
|
|
3168
|
-
function
|
|
3217
|
+
function St(e) {
|
|
3169
3218
|
if (!e) return null;
|
|
3170
|
-
const t = new URLSearchParams(e), r = t.get(
|
|
3219
|
+
const t = new URLSearchParams(e), r = t.get(H.status);
|
|
3171
3220
|
return r ? {
|
|
3172
3221
|
status: r,
|
|
3173
|
-
priceId: t.get(
|
|
3174
|
-
sessionId: t.get(
|
|
3222
|
+
priceId: t.get(H.priceId),
|
|
3223
|
+
sessionId: t.get(H.sessionId)
|
|
3175
3224
|
} : null;
|
|
3176
3225
|
}
|
|
3177
|
-
function
|
|
3226
|
+
function gr(e) {
|
|
3178
3227
|
if (!(typeof window > "u" || !window.opener))
|
|
3179
3228
|
try {
|
|
3180
3229
|
window.opener.postMessage(
|
|
@@ -3189,18 +3238,18 @@ function hr(e) {
|
|
|
3189
3238
|
} catch {
|
|
3190
3239
|
}
|
|
3191
3240
|
}
|
|
3192
|
-
function
|
|
3193
|
-
const t = (a,
|
|
3241
|
+
function fr(e) {
|
|
3242
|
+
const t = (a, i) => {
|
|
3194
3243
|
if (!a) return "";
|
|
3195
3244
|
const o = new URLSearchParams(a.replace(/^[?#]/, ""));
|
|
3196
|
-
o.delete(
|
|
3245
|
+
o.delete(H.status), o.delete(H.priceId), o.delete(H.sessionId);
|
|
3197
3246
|
const s = o.toString();
|
|
3198
|
-
return s ?
|
|
3247
|
+
return s ? i + s : "";
|
|
3199
3248
|
}, r = e.pathname + t(e.search, "?") + t(e.hash, "#");
|
|
3200
3249
|
window.history.replaceState(null, "", r);
|
|
3201
3250
|
}
|
|
3202
3251
|
export {
|
|
3203
|
-
|
|
3204
|
-
|
|
3252
|
+
yr as P,
|
|
3253
|
+
Ye as b
|
|
3205
3254
|
};
|
|
3206
|
-
//# sourceMappingURL=PaywallUI-
|
|
3255
|
+
//# sourceMappingURL=PaywallUI-BYquPomD.js.map
|