@monetize.software/sdk-extension 3.0.0-alpha.15 → 3.0.0-alpha.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{chrome-port-BXK5myXz.js → chrome-port-CG8LYcKe.js} +2 -2
- package/dist/chunks/{chrome-port-BXK5myXz.js.map → chrome-port-CG8LYcKe.js.map} +1 -1
- package/dist/chunks/{chrome-port-KYVwww_u.js → chrome-port-DKsnkWLb.js} +59 -55
- package/dist/chunks/{chrome-port-KYVwww_u.js.map → chrome-port-DKsnkWLb.js.map} +1 -1
- package/dist/content.cjs +3 -3
- package/dist/content.cjs.map +1 -1
- package/dist/content.js +790 -626
- package/dist/content.js.map +1 -1
- package/dist/offscreen.cjs +1 -1
- package/dist/offscreen.js +1 -1
- package/package.json +3 -3
package/dist/content.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { P as
|
|
2
|
-
import { render as
|
|
3
|
-
import { jsx as o, jsxs as u, Fragment as
|
|
4
|
-
import { useState as
|
|
5
|
-
import { P as
|
|
6
|
-
function
|
|
1
|
+
import { P as L, B as Re, E as ze, c as qe, A as ue, w as Ne, a as J, r as Fe, b as $e } from "./chunks/chrome-port-DKsnkWLb.js";
|
|
2
|
+
import { render as Q, h as de, createContext as Ve } from "preact";
|
|
3
|
+
import { jsx as o, jsxs as u, Fragment as ae } from "preact/jsx-runtime";
|
|
4
|
+
import { useState as k, useEffect as P, useContext as He, useRef as D, useMemo as Ge, useLayoutEffect as We } from "preact/hooks";
|
|
5
|
+
import { P as Ze } from "./chunks/port-name-ervLBWAQ.js";
|
|
6
|
+
function Ye(r) {
|
|
7
7
|
return `pw-offer-${r}-start`;
|
|
8
8
|
}
|
|
9
|
-
function
|
|
9
|
+
function N(r, e) {
|
|
10
10
|
if (!r || r.length === 0) return null;
|
|
11
11
|
const t = r.find(
|
|
12
12
|
(i) => i.price_id === e && (i.discount_percent ?? 0) > 0
|
|
@@ -15,13 +15,13 @@ function $(r, e) {
|
|
|
15
15
|
(i) => i.price_id == null && (i.discount_percent ?? 0) > 0
|
|
16
16
|
) ?? null);
|
|
17
17
|
}
|
|
18
|
-
function
|
|
18
|
+
function Ke(r, e = {}) {
|
|
19
19
|
const t = r.discount_percent ?? 0;
|
|
20
20
|
if (t <= 0) return null;
|
|
21
|
-
const n = e.now ?? Date.now(), i =
|
|
21
|
+
const n = e.now ?? Date.now(), i = Xe(r, e.readStart), s = Je(r, i), a = i !== null ? Math.max(0, i - n) : null;
|
|
22
22
|
return i !== null && i <= n ? null : { offer: r, discountPercent: t, remainingMs: a, totalMs: s, expiresAt: i };
|
|
23
23
|
}
|
|
24
|
-
function
|
|
24
|
+
function Xe(r, e) {
|
|
25
25
|
if (r.expires_at) {
|
|
26
26
|
const t = Date.parse(r.expires_at);
|
|
27
27
|
return Number.isFinite(t) ? t : null;
|
|
@@ -34,25 +34,25 @@ function Ke(r, e) {
|
|
|
34
34
|
}
|
|
35
35
|
return null;
|
|
36
36
|
}
|
|
37
|
-
function
|
|
37
|
+
function Je(r, e) {
|
|
38
38
|
return r.duration_minutes && r.duration_minutes > 0 ? r.duration_minutes * 6e4 : e !== null ? e - Date.now() : null;
|
|
39
39
|
}
|
|
40
|
-
function
|
|
40
|
+
function Qe(r) {
|
|
41
41
|
if (typeof window > "u") return null;
|
|
42
42
|
try {
|
|
43
|
-
return window.localStorage.getItem(
|
|
43
|
+
return window.localStorage.getItem(Ye(r));
|
|
44
44
|
} catch {
|
|
45
45
|
return null;
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
const _e = '@layer theme,base,components,utilities;@layer theme{@theme default{ --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; --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-100: oklch(93.6% .032 17.717); --color-red-200: oklch(88.5% .062 18.334); --color-red-300: oklch(80.8% .114 19.571); --color-red-400: oklch(70.4% .191 22.216); --color-red-500: oklch(63.7% .237 25.331); --color-red-600: oklch(57.7% .245 27.325); --color-red-700: oklch(50.5% .213 27.518); --color-red-800: oklch(44.4% .177 26.899); --color-red-900: oklch(39.6% .141 25.723); --color-red-950: oklch(25.8% .092 26.042); --color-orange-50: oklch(98% .016 73.684); --color-orange-100: oklch(95.4% .038 75.164); --color-orange-200: oklch(90.1% .076 70.697); --color-orange-300: oklch(83.7% .128 66.29); --color-orange-400: oklch(75% .183 55.934); --color-orange-500: oklch(70.5% .213 47.604); --color-orange-600: oklch(64.6% .222 41.116); --color-orange-700: oklch(55.3% .195 38.402); --color-orange-800: oklch(47% .157 37.304); --color-orange-900: oklch(40.8% .123 38.172); --color-orange-950: oklch(26.6% .079 36.259); --color-amber-50: oklch(98.7% .022 95.277); --color-amber-100: oklch(96.2% .059 95.617); --color-amber-200: oklch(92.4% .12 95.746); --color-amber-300: oklch(87.9% .169 91.605); --color-amber-400: oklch(82.8% .189 84.429); --color-amber-500: oklch(76.9% .188 70.08); --color-amber-600: oklch(66.6% .179 58.318); --color-amber-700: oklch(55.5% .163 48.998); --color-amber-800: oklch(47.3% .137 46.201); --color-amber-900: oklch(41.4% .112 45.904); --color-amber-950: oklch(27.9% .077 45.635); --color-yellow-50: oklch(98.7% .026 102.212); --color-yellow-100: oklch(97.3% .071 103.193); --color-yellow-200: oklch(94.5% .129 101.54); --color-yellow-300: oklch(90.5% .182 98.111); --color-yellow-400: oklch(85.2% .199 91.936); --color-yellow-500: oklch(79.5% .184 86.047); --color-yellow-600: oklch(68.1% .162 75.834); --color-yellow-700: oklch(55.4% .135 66.442); --color-yellow-800: oklch(47.6% .114 61.907); --color-yellow-900: oklch(42.1% .095 57.708); --color-yellow-950: oklch(28.6% .066 53.813); --color-lime-50: oklch(98.6% .031 120.757); --color-lime-100: oklch(96.7% .067 122.328); --color-lime-200: oklch(93.8% .127 124.321); --color-lime-300: oklch(89.7% .196 126.665); --color-lime-400: oklch(84.1% .238 128.85); --color-lime-500: oklch(76.8% .233 130.85); --color-lime-600: oklch(64.8% .2 131.684); --color-lime-700: oklch(53.2% .157 131.589); --color-lime-800: oklch(45.3% .124 130.933); --color-lime-900: oklch(40.5% .101 131.063); --color-lime-950: oklch(27.4% .072 132.109); --color-green-50: oklch(98.2% .018 155.826); --color-green-100: oklch(96.2% .044 156.743); --color-green-200: oklch(92.5% .084 155.995); --color-green-300: oklch(87.1% .15 154.449); --color-green-400: oklch(79.2% .209 151.711); --color-green-500: oklch(72.3% .219 149.579); --color-green-600: oklch(62.7% .194 149.214); --color-green-700: oklch(52.7% .154 150.069); --color-green-800: oklch(44.8% .119 151.328); --color-green-900: oklch(39.3% .095 152.535); --color-green-950: oklch(26.6% .065 152.934); --color-emerald-50: oklch(97.9% .021 166.113); --color-emerald-100: oklch(95% .052 163.051); --color-emerald-200: oklch(90.5% .093 164.15); --color-emerald-300: oklch(84.5% .143 164.978); --color-emerald-400: oklch(76.5% .177 163.223); --color-emerald-500: oklch(69.6% .17 162.48); --color-emerald-600: oklch(59.6% .145 163.225); --color-emerald-700: oklch(50.8% .118 165.612); --color-emerald-800: oklch(43.2% .095 166.913); --color-emerald-900: oklch(37.8% .077 168.94); --color-emerald-950: oklch(26.2% .051 172.552); --color-teal-50: oklch(98.4% .014 180.72); --color-teal-100: oklch(95.3% .051 180.801); --color-teal-200: oklch(91% .096 180.426); --color-teal-300: oklch(85.5% .138 181.071); --color-teal-400: oklch(77.7% .152 181.912); --color-teal-500: oklch(70.4% .14 182.503); --color-teal-600: oklch(60% .118 184.704); --color-teal-700: oklch(51.1% .096 186.391); --color-teal-800: oklch(43.7% .078 188.216); --color-teal-900: oklch(38.6% .063 188.416); --color-teal-950: oklch(27.7% .046 192.524); --color-cyan-50: oklch(98.4% .019 200.873); --color-cyan-100: oklch(95.6% .045 203.388); --color-cyan-200: oklch(91.7% .08 205.041); --color-cyan-300: oklch(86.5% .127 207.078); --color-cyan-400: oklch(78.9% .154 211.53); --color-cyan-500: oklch(71.5% .143 215.221); --color-cyan-600: oklch(60.9% .126 221.723); --color-cyan-700: oklch(52% .105 223.128); --color-cyan-800: oklch(45% .085 224.283); --color-cyan-900: oklch(39.8% .07 227.392); --color-cyan-950: oklch(30.2% .056 229.695); --color-sky-50: oklch(97.7% .013 236.62); --color-sky-100: oklch(95.1% .026 236.824); --color-sky-200: oklch(90.1% .058 230.902); --color-sky-300: oklch(82.8% .111 230.318); --color-sky-400: oklch(74.6% .16 232.661); --color-sky-500: oklch(68.5% .169 237.323); --color-sky-600: oklch(58.8% .158 241.966); --color-sky-700: oklch(50% .134 242.749); --color-sky-800: oklch(44.3% .11 240.79); --color-sky-900: oklch(39.1% .09 240.876); --color-sky-950: oklch(29.3% .066 243.157); --color-blue-50: oklch(97% .014 254.604); --color-blue-100: oklch(93.2% .032 255.585); --color-blue-200: oklch(88.2% .059 254.128); --color-blue-300: oklch(80.9% .105 251.813); --color-blue-400: oklch(70.7% .165 254.624); --color-blue-500: oklch(62.3% .214 259.815); --color-blue-600: oklch(54.6% .245 262.881); --color-blue-700: oklch(48.8% .243 264.376); --color-blue-800: oklch(42.4% .199 265.638); --color-blue-900: oklch(37.9% .146 265.522); --color-blue-950: oklch(28.2% .091 267.935); --color-indigo-50: oklch(96.2% .018 272.314); --color-indigo-100: oklch(93% .034 272.788); --color-indigo-200: oklch(87% .065 274.039); --color-indigo-300: oklch(78.5% .115 274.713); --color-indigo-400: oklch(67.3% .182 276.935); --color-indigo-500: oklch(58.5% .233 277.117); --color-indigo-600: oklch(51.1% .262 276.966); --color-indigo-700: oklch(45.7% .24 277.023); --color-indigo-800: oklch(39.8% .195 277.366); --color-indigo-900: oklch(35.9% .144 278.697); --color-indigo-950: oklch(25.7% .09 281.288); --color-violet-50: oklch(96.9% .016 293.756); --color-violet-100: oklch(94.3% .029 294.588); --color-violet-200: oklch(89.4% .057 293.283); --color-violet-300: oklch(81.1% .111 293.571); --color-violet-400: oklch(70.2% .183 293.541); --color-violet-500: oklch(60.6% .25 292.717); --color-violet-600: oklch(54.1% .281 293.009); --color-violet-700: oklch(49.1% .27 292.581); --color-violet-800: oklch(43.2% .232 292.759); --color-violet-900: oklch(38% .189 293.745); --color-violet-950: oklch(28.3% .141 291.089); --color-purple-50: oklch(97.7% .014 308.299); --color-purple-100: oklch(94.6% .033 307.174); --color-purple-200: oklch(90.2% .063 306.703); --color-purple-300: oklch(82.7% .119 306.383); --color-purple-400: oklch(71.4% .203 305.504); --color-purple-500: oklch(62.7% .265 303.9); --color-purple-600: oklch(55.8% .288 302.321); --color-purple-700: oklch(49.6% .265 301.924); --color-purple-800: oklch(43.8% .218 303.724); --color-purple-900: oklch(38.1% .176 304.987); --color-purple-950: oklch(29.1% .149 302.717); --color-fuchsia-50: oklch(97.7% .017 320.058); --color-fuchsia-100: oklch(95.2% .037 318.852); --color-fuchsia-200: oklch(90.3% .076 319.62); --color-fuchsia-300: oklch(83.3% .145 321.434); --color-fuchsia-400: oklch(74% .238 322.16); --color-fuchsia-500: oklch(66.7% .295 322.15); --color-fuchsia-600: oklch(59.1% .293 322.896); --color-fuchsia-700: oklch(51.8% .253 323.949); --color-fuchsia-800: oklch(45.2% .211 324.591); --color-fuchsia-900: oklch(40.1% .17 325.612); --color-fuchsia-950: oklch(29.3% .136 325.661); --color-pink-50: oklch(97.1% .014 343.198); --color-pink-100: oklch(94.8% .028 342.258); --color-pink-200: oklch(89.9% .061 343.231); --color-pink-300: oklch(82.3% .12 346.018); --color-pink-400: oklch(71.8% .202 349.761); --color-pink-500: oklch(65.6% .241 354.308); --color-pink-600: oklch(59.2% .249 .584); --color-pink-700: oklch(52.5% .223 3.958); --color-pink-800: oklch(45.9% .187 3.815); --color-pink-900: oklch(40.8% .153 2.432); --color-pink-950: oklch(28.4% .109 3.907); --color-rose-50: oklch(96.9% .015 12.422); --color-rose-100: oklch(94.1% .03 12.58); --color-rose-200: oklch(89.2% .058 10.001); --color-rose-300: oklch(81% .117 11.638); --color-rose-400: oklch(71.2% .194 13.428); --color-rose-500: oklch(64.5% .246 16.439); --color-rose-600: oklch(58.6% .253 17.585); --color-rose-700: oklch(51.4% .222 16.935); --color-rose-800: oklch(45.5% .188 13.697); --color-rose-900: oklch(41% .159 10.272); --color-rose-950: oklch(27.1% .105 12.094); --color-slate-50: oklch(98.4% .003 247.858); --color-slate-100: oklch(96.8% .007 247.896); --color-slate-200: oklch(92.9% .013 255.508); --color-slate-300: oklch(86.9% .022 252.894); --color-slate-400: oklch(70.4% .04 256.788); --color-slate-500: oklch(55.4% .046 257.417); --color-slate-600: oklch(44.6% .043 257.281); --color-slate-700: oklch(37.2% .044 257.287); --color-slate-800: oklch(27.9% .041 260.031); --color-slate-900: oklch(20.8% .042 265.755); --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-gray-950: oklch(13% .028 261.692); --color-zinc-50: oklch(98.5% 0 0); --color-zinc-100: oklch(96.7% .001 286.375); --color-zinc-200: oklch(92% .004 286.32); --color-zinc-300: oklch(87.1% .006 286.286); --color-zinc-400: oklch(70.5% .015 286.067); --color-zinc-500: oklch(55.2% .016 285.938); --color-zinc-600: oklch(44.2% .017 285.786); --color-zinc-700: oklch(37% .013 285.805); --color-zinc-800: oklch(27.4% .006 286.033); --color-zinc-900: oklch(21% .006 285.885); --color-zinc-950: oklch(14.1% .005 285.823); --color-neutral-50: oklch(98.5% 0 0); --color-neutral-100: oklch(97% 0 0); --color-neutral-200: oklch(92.2% 0 0); --color-neutral-300: oklch(87% 0 0); --color-neutral-400: oklch(70.8% 0 0); --color-neutral-500: oklch(55.6% 0 0); --color-neutral-600: oklch(43.9% 0 0); --color-neutral-700: oklch(37.1% 0 0); --color-neutral-800: oklch(26.9% 0 0); --color-neutral-900: oklch(20.5% 0 0); --color-neutral-950: oklch(14.5% 0 0); --color-stone-50: oklch(98.5% .001 106.423); --color-stone-100: oklch(97% .001 106.424); --color-stone-200: oklch(92.3% .003 48.717); --color-stone-300: oklch(86.9% .005 56.366); --color-stone-400: oklch(70.9% .01 56.259); --color-stone-500: oklch(55.3% .013 58.071); --color-stone-600: oklch(44.4% .011 73.639); --color-stone-700: oklch(37.4% .01 67.558); --color-stone-800: oklch(26.8% .007 34.298); --color-stone-900: oklch(21.6% .006 56.043); --color-stone-950: oklch(14.7% .004 49.25); --color-mauve-50: oklch(98.5% 0 0); --color-mauve-100: oklch(96% .003 325.6); --color-mauve-200: oklch(92.2% .005 325.62); --color-mauve-300: oklch(86.5% .012 325.68); --color-mauve-400: oklch(71.1% .019 323.02); --color-mauve-500: oklch(54.2% .034 322.5); --color-mauve-600: oklch(43.5% .029 321.78); --color-mauve-700: oklch(36.4% .029 323.89); --color-mauve-800: oklch(26.3% .024 320.12); --color-mauve-900: oklch(21.2% .019 322.12); --color-mauve-950: oklch(14.5% .008 326); --color-olive-50: oklch(98.8% .003 106.5); --color-olive-100: oklch(96.6% .005 106.5); --color-olive-200: oklch(93% .007 106.5); --color-olive-300: oklch(88% .011 106.6); --color-olive-400: oklch(73.7% .021 106.9); --color-olive-500: oklch(58% .031 107.3); --color-olive-600: oklch(46.6% .025 107.3); --color-olive-700: oklch(39.4% .023 107.4); --color-olive-800: oklch(28.6% .016 107.4); --color-olive-900: oklch(22.8% .013 107.4); --color-olive-950: oklch(15.3% .006 107.1); --color-mist-50: oklch(98.7% .002 197.1); --color-mist-100: oklch(96.3% .002 197.1); --color-mist-200: oklch(92.5% .005 214.3); --color-mist-300: oklch(87.2% .007 219.6); --color-mist-400: oklch(72.3% .014 214.4); --color-mist-500: oklch(56% .021 213.5); --color-mist-600: oklch(45% .017 213.2); --color-mist-700: oklch(37.8% .015 216); --color-mist-800: oklch(27.5% .011 216.9); --color-mist-900: oklch(21.8% .008 223.9); --color-mist-950: oklch(14.8% .004 228.8); --color-taupe-50: oklch(98.6% .002 67.8); --color-taupe-100: oklch(96% .002 17.2); --color-taupe-200: oklch(92.2% .005 34.3); --color-taupe-300: oklch(86.8% .007 39.5); --color-taupe-400: oklch(71.4% .014 41.2); --color-taupe-500: oklch(54.7% .021 43.1); --color-taupe-600: oklch(43.8% .017 39.3); --color-taupe-700: oklch(36.7% .016 35.7); --color-taupe-800: oklch(26.8% .011 36.5); --color-taupe-900: oklch(21.4% .009 43.1); --color-taupe-950: oklch(14.7% .004 49.3); --color-black: #000; --color-white: #fff; --spacing: .25rem; --breakpoint-sm: 40rem; --breakpoint-md: 48rem; --breakpoint-lg: 64rem; --breakpoint-xl: 80rem; --breakpoint-2xl: 96rem; --container-3xs: 16rem; --container-2xs: 18rem; --container-xs: 20rem; --container-sm: 24rem; --container-md: 28rem; --container-lg: 32rem; --container-xl: 36rem; --container-2xl: 42rem; --container-3xl: 48rem; --container-4xl: 56rem; --container-5xl: 64rem; --container-6xl: 72rem; --container-7xl: 80rem; --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 ; --text-4xl: 2.25rem; --text-4xl--line-height: calc(2.5 / 2.25); --text-5xl: 3rem; --text-5xl--line-height: 1; --text-6xl: 3.75rem; --text-6xl--line-height: 1; --text-7xl: 4.5rem; --text-7xl--line-height: 1; --text-8xl: 6rem; --text-8xl--line-height: 1; --text-9xl: 8rem; --text-9xl--line-height: 1; --font-weight-thin: 100; --font-weight-extralight: 200; --font-weight-light: 300; --font-weight-normal: 400; --font-weight-medium: 500; --font-weight-semibold: 600; --font-weight-bold: 700; --font-weight-extrabold: 800; --font-weight-black: 900; --tracking-tighter: -.05em; --tracking-tight: -.025em; --tracking-normal: 0em; --tracking-wide: .025em; --tracking-wider: .05em; --tracking-widest: .1em; --leading-tight: 1.25; --leading-snug: 1.375; --leading-normal: 1.5; --leading-relaxed: 1.625; --leading-loose: 2; --radius-xs: .125rem; --radius-sm: .25rem; --radius-md: .375rem; --radius-lg: .5rem; --radius-xl: .75rem; --radius-2xl: 1rem; --radius-3xl: 1.5rem; --radius-4xl: 2rem; --shadow-2xs: 0 1px rgb(0 0 0 / .05); --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / .05); --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1); --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1); --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / .25); --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / .05); --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / .05); --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / .05); --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / .05); --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / .15); --drop-shadow-md: 0 3px 3px rgb(0 0 0 / .12); --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / .15); --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / .1); --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / .15); --text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / .15); --text-shadow-xs: 0px 1px 1px rgb(0 0 0 / .2); --text-shadow-sm: 0px 1px 0px rgb(0 0 0 / .075), 0px 1px 1px rgb(0 0 0 / .075), 0px 2px 2px rgb(0 0 0 / .075); --text-shadow-md: 0px 1px 1px rgb(0 0 0 / .1), 0px 1px 2px rgb(0 0 0 / .1), 0px 2px 4px rgb(0 0 0 / .1); --text-shadow-lg: 0px 1px 2px rgb(0 0 0 / .1), 0px 3px 2px rgb(0 0 0 / .1), 0px 4px 8px rgb(0 0 0 / .1); --ease-in: cubic-bezier(.4, 0, 1, 1); --ease-out: cubic-bezier(0, 0, .2, 1); --ease-in-out: cubic-bezier(.4, 0, .2, 1); --animate-spin: spin 1s linear infinite; --animate-ping: ping 1s cubic-bezier(0, 0, .2, 1) infinite; --animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite; --animate-bounce: bounce 1s infinite; @keyframes spin { to { transform: rotate(360deg); } } @keyframes ping { 75%, 100% { transform: scale(2); opacity: 0; } } @keyframes pulse { 50% { opacity: .5; } } @keyframes bounce { 0%, 100% { transform: translateY(-25%); animation-timing-function: cubic-bezier(.8, 0, 1, 1); } 50% { transform: none; animation-timing-function: cubic-bezier(0, 0, .2, 1); } } --blur-xs: 4px; --blur-sm: 8px; --blur-md: 12px; --blur-lg: 16px; --blur-xl: 24px; --blur-2xl: 40px; --blur-3xl: 64px; --perspective-dramatic: 100px; --perspective-near: 300px; --perspective-normal: 500px; --perspective-midrange: 800px; --perspective-distant: 1200px; --aspect-video: 16 / 9; --default-transition-duration: .15s; --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1); --default-font-family: --theme(--font-sans, initial); --default-font-feature-settings: --theme( --font-sans--font-feature-settings, initial ); --default-font-variation-settings: --theme( --font-sans--font-variation-settings, initial ); --default-mono-font-family: --theme(--font-mono, initial); --default-mono-font-feature-settings: --theme( --font-mono--font-feature-settings, initial ); --default-mono-font-variation-settings: --theme( --font-mono--font-variation-settings, initial ); }@theme default inline reference{ --blur: 8px; --shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1); --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / .05); --drop-shadow: 0 1px 2px rgb(0 0 0 / .1), 0 1px 1px rgb(0 0 0 / .06); --radius: .25rem; --max-width-prose: 65ch; }}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:--theme(--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:--theme(--default-font-feature-settings,normal);font-variation-settings:--theme(--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:--theme(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:--theme(--default-mono-font-feature-settings,normal);font-variation-settings:--theme(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}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{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}: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: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,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-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]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{@tailwind utilities;}@source "../**/*.{ts,tsx,js,jsx}";@layer base{:host{all:initial;color-scheme:light;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}*,*:before,*:after{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*,*:before,*:after{box-sizing:border-box}button{font-family:inherit;cursor:pointer}button:disabled{cursor:not-allowed}[role=button],[role=radio]{cursor:pointer}}.pw-cta-shimmer:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.35) 50%,transparent);animation:pw-cta-shimmer 3s infinite;z-index:1}@keyframes pw-cta-shimmer{0%{left:-100%}to{left:100%}}';
|
|
49
|
-
let
|
|
50
|
-
function
|
|
51
|
-
if (
|
|
48
|
+
const Se = '@layer theme,base,components,utilities;@layer theme{@theme default{ --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; --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-100: oklch(93.6% .032 17.717); --color-red-200: oklch(88.5% .062 18.334); --color-red-300: oklch(80.8% .114 19.571); --color-red-400: oklch(70.4% .191 22.216); --color-red-500: oklch(63.7% .237 25.331); --color-red-600: oklch(57.7% .245 27.325); --color-red-700: oklch(50.5% .213 27.518); --color-red-800: oklch(44.4% .177 26.899); --color-red-900: oklch(39.6% .141 25.723); --color-red-950: oklch(25.8% .092 26.042); --color-orange-50: oklch(98% .016 73.684); --color-orange-100: oklch(95.4% .038 75.164); --color-orange-200: oklch(90.1% .076 70.697); --color-orange-300: oklch(83.7% .128 66.29); --color-orange-400: oklch(75% .183 55.934); --color-orange-500: oklch(70.5% .213 47.604); --color-orange-600: oklch(64.6% .222 41.116); --color-orange-700: oklch(55.3% .195 38.402); --color-orange-800: oklch(47% .157 37.304); --color-orange-900: oklch(40.8% .123 38.172); --color-orange-950: oklch(26.6% .079 36.259); --color-amber-50: oklch(98.7% .022 95.277); --color-amber-100: oklch(96.2% .059 95.617); --color-amber-200: oklch(92.4% .12 95.746); --color-amber-300: oklch(87.9% .169 91.605); --color-amber-400: oklch(82.8% .189 84.429); --color-amber-500: oklch(76.9% .188 70.08); --color-amber-600: oklch(66.6% .179 58.318); --color-amber-700: oklch(55.5% .163 48.998); --color-amber-800: oklch(47.3% .137 46.201); --color-amber-900: oklch(41.4% .112 45.904); --color-amber-950: oklch(27.9% .077 45.635); --color-yellow-50: oklch(98.7% .026 102.212); --color-yellow-100: oklch(97.3% .071 103.193); --color-yellow-200: oklch(94.5% .129 101.54); --color-yellow-300: oklch(90.5% .182 98.111); --color-yellow-400: oklch(85.2% .199 91.936); --color-yellow-500: oklch(79.5% .184 86.047); --color-yellow-600: oklch(68.1% .162 75.834); --color-yellow-700: oklch(55.4% .135 66.442); --color-yellow-800: oklch(47.6% .114 61.907); --color-yellow-900: oklch(42.1% .095 57.708); --color-yellow-950: oklch(28.6% .066 53.813); --color-lime-50: oklch(98.6% .031 120.757); --color-lime-100: oklch(96.7% .067 122.328); --color-lime-200: oklch(93.8% .127 124.321); --color-lime-300: oklch(89.7% .196 126.665); --color-lime-400: oklch(84.1% .238 128.85); --color-lime-500: oklch(76.8% .233 130.85); --color-lime-600: oklch(64.8% .2 131.684); --color-lime-700: oklch(53.2% .157 131.589); --color-lime-800: oklch(45.3% .124 130.933); --color-lime-900: oklch(40.5% .101 131.063); --color-lime-950: oklch(27.4% .072 132.109); --color-green-50: oklch(98.2% .018 155.826); --color-green-100: oklch(96.2% .044 156.743); --color-green-200: oklch(92.5% .084 155.995); --color-green-300: oklch(87.1% .15 154.449); --color-green-400: oklch(79.2% .209 151.711); --color-green-500: oklch(72.3% .219 149.579); --color-green-600: oklch(62.7% .194 149.214); --color-green-700: oklch(52.7% .154 150.069); --color-green-800: oklch(44.8% .119 151.328); --color-green-900: oklch(39.3% .095 152.535); --color-green-950: oklch(26.6% .065 152.934); --color-emerald-50: oklch(97.9% .021 166.113); --color-emerald-100: oklch(95% .052 163.051); --color-emerald-200: oklch(90.5% .093 164.15); --color-emerald-300: oklch(84.5% .143 164.978); --color-emerald-400: oklch(76.5% .177 163.223); --color-emerald-500: oklch(69.6% .17 162.48); --color-emerald-600: oklch(59.6% .145 163.225); --color-emerald-700: oklch(50.8% .118 165.612); --color-emerald-800: oklch(43.2% .095 166.913); --color-emerald-900: oklch(37.8% .077 168.94); --color-emerald-950: oklch(26.2% .051 172.552); --color-teal-50: oklch(98.4% .014 180.72); --color-teal-100: oklch(95.3% .051 180.801); --color-teal-200: oklch(91% .096 180.426); --color-teal-300: oklch(85.5% .138 181.071); --color-teal-400: oklch(77.7% .152 181.912); --color-teal-500: oklch(70.4% .14 182.503); --color-teal-600: oklch(60% .118 184.704); --color-teal-700: oklch(51.1% .096 186.391); --color-teal-800: oklch(43.7% .078 188.216); --color-teal-900: oklch(38.6% .063 188.416); --color-teal-950: oklch(27.7% .046 192.524); --color-cyan-50: oklch(98.4% .019 200.873); --color-cyan-100: oklch(95.6% .045 203.388); --color-cyan-200: oklch(91.7% .08 205.041); --color-cyan-300: oklch(86.5% .127 207.078); --color-cyan-400: oklch(78.9% .154 211.53); --color-cyan-500: oklch(71.5% .143 215.221); --color-cyan-600: oklch(60.9% .126 221.723); --color-cyan-700: oklch(52% .105 223.128); --color-cyan-800: oklch(45% .085 224.283); --color-cyan-900: oklch(39.8% .07 227.392); --color-cyan-950: oklch(30.2% .056 229.695); --color-sky-50: oklch(97.7% .013 236.62); --color-sky-100: oklch(95.1% .026 236.824); --color-sky-200: oklch(90.1% .058 230.902); --color-sky-300: oklch(82.8% .111 230.318); --color-sky-400: oklch(74.6% .16 232.661); --color-sky-500: oklch(68.5% .169 237.323); --color-sky-600: oklch(58.8% .158 241.966); --color-sky-700: oklch(50% .134 242.749); --color-sky-800: oklch(44.3% .11 240.79); --color-sky-900: oklch(39.1% .09 240.876); --color-sky-950: oklch(29.3% .066 243.157); --color-blue-50: oklch(97% .014 254.604); --color-blue-100: oklch(93.2% .032 255.585); --color-blue-200: oklch(88.2% .059 254.128); --color-blue-300: oklch(80.9% .105 251.813); --color-blue-400: oklch(70.7% .165 254.624); --color-blue-500: oklch(62.3% .214 259.815); --color-blue-600: oklch(54.6% .245 262.881); --color-blue-700: oklch(48.8% .243 264.376); --color-blue-800: oklch(42.4% .199 265.638); --color-blue-900: oklch(37.9% .146 265.522); --color-blue-950: oklch(28.2% .091 267.935); --color-indigo-50: oklch(96.2% .018 272.314); --color-indigo-100: oklch(93% .034 272.788); --color-indigo-200: oklch(87% .065 274.039); --color-indigo-300: oklch(78.5% .115 274.713); --color-indigo-400: oklch(67.3% .182 276.935); --color-indigo-500: oklch(58.5% .233 277.117); --color-indigo-600: oklch(51.1% .262 276.966); --color-indigo-700: oklch(45.7% .24 277.023); --color-indigo-800: oklch(39.8% .195 277.366); --color-indigo-900: oklch(35.9% .144 278.697); --color-indigo-950: oklch(25.7% .09 281.288); --color-violet-50: oklch(96.9% .016 293.756); --color-violet-100: oklch(94.3% .029 294.588); --color-violet-200: oklch(89.4% .057 293.283); --color-violet-300: oklch(81.1% .111 293.571); --color-violet-400: oklch(70.2% .183 293.541); --color-violet-500: oklch(60.6% .25 292.717); --color-violet-600: oklch(54.1% .281 293.009); --color-violet-700: oklch(49.1% .27 292.581); --color-violet-800: oklch(43.2% .232 292.759); --color-violet-900: oklch(38% .189 293.745); --color-violet-950: oklch(28.3% .141 291.089); --color-purple-50: oklch(97.7% .014 308.299); --color-purple-100: oklch(94.6% .033 307.174); --color-purple-200: oklch(90.2% .063 306.703); --color-purple-300: oklch(82.7% .119 306.383); --color-purple-400: oklch(71.4% .203 305.504); --color-purple-500: oklch(62.7% .265 303.9); --color-purple-600: oklch(55.8% .288 302.321); --color-purple-700: oklch(49.6% .265 301.924); --color-purple-800: oklch(43.8% .218 303.724); --color-purple-900: oklch(38.1% .176 304.987); --color-purple-950: oklch(29.1% .149 302.717); --color-fuchsia-50: oklch(97.7% .017 320.058); --color-fuchsia-100: oklch(95.2% .037 318.852); --color-fuchsia-200: oklch(90.3% .076 319.62); --color-fuchsia-300: oklch(83.3% .145 321.434); --color-fuchsia-400: oklch(74% .238 322.16); --color-fuchsia-500: oklch(66.7% .295 322.15); --color-fuchsia-600: oklch(59.1% .293 322.896); --color-fuchsia-700: oklch(51.8% .253 323.949); --color-fuchsia-800: oklch(45.2% .211 324.591); --color-fuchsia-900: oklch(40.1% .17 325.612); --color-fuchsia-950: oklch(29.3% .136 325.661); --color-pink-50: oklch(97.1% .014 343.198); --color-pink-100: oklch(94.8% .028 342.258); --color-pink-200: oklch(89.9% .061 343.231); --color-pink-300: oklch(82.3% .12 346.018); --color-pink-400: oklch(71.8% .202 349.761); --color-pink-500: oklch(65.6% .241 354.308); --color-pink-600: oklch(59.2% .249 .584); --color-pink-700: oklch(52.5% .223 3.958); --color-pink-800: oklch(45.9% .187 3.815); --color-pink-900: oklch(40.8% .153 2.432); --color-pink-950: oklch(28.4% .109 3.907); --color-rose-50: oklch(96.9% .015 12.422); --color-rose-100: oklch(94.1% .03 12.58); --color-rose-200: oklch(89.2% .058 10.001); --color-rose-300: oklch(81% .117 11.638); --color-rose-400: oklch(71.2% .194 13.428); --color-rose-500: oklch(64.5% .246 16.439); --color-rose-600: oklch(58.6% .253 17.585); --color-rose-700: oklch(51.4% .222 16.935); --color-rose-800: oklch(45.5% .188 13.697); --color-rose-900: oklch(41% .159 10.272); --color-rose-950: oklch(27.1% .105 12.094); --color-slate-50: oklch(98.4% .003 247.858); --color-slate-100: oklch(96.8% .007 247.896); --color-slate-200: oklch(92.9% .013 255.508); --color-slate-300: oklch(86.9% .022 252.894); --color-slate-400: oklch(70.4% .04 256.788); --color-slate-500: oklch(55.4% .046 257.417); --color-slate-600: oklch(44.6% .043 257.281); --color-slate-700: oklch(37.2% .044 257.287); --color-slate-800: oklch(27.9% .041 260.031); --color-slate-900: oklch(20.8% .042 265.755); --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-gray-950: oklch(13% .028 261.692); --color-zinc-50: oklch(98.5% 0 0); --color-zinc-100: oklch(96.7% .001 286.375); --color-zinc-200: oklch(92% .004 286.32); --color-zinc-300: oklch(87.1% .006 286.286); --color-zinc-400: oklch(70.5% .015 286.067); --color-zinc-500: oklch(55.2% .016 285.938); --color-zinc-600: oklch(44.2% .017 285.786); --color-zinc-700: oklch(37% .013 285.805); --color-zinc-800: oklch(27.4% .006 286.033); --color-zinc-900: oklch(21% .006 285.885); --color-zinc-950: oklch(14.1% .005 285.823); --color-neutral-50: oklch(98.5% 0 0); --color-neutral-100: oklch(97% 0 0); --color-neutral-200: oklch(92.2% 0 0); --color-neutral-300: oklch(87% 0 0); --color-neutral-400: oklch(70.8% 0 0); --color-neutral-500: oklch(55.6% 0 0); --color-neutral-600: oklch(43.9% 0 0); --color-neutral-700: oklch(37.1% 0 0); --color-neutral-800: oklch(26.9% 0 0); --color-neutral-900: oklch(20.5% 0 0); --color-neutral-950: oklch(14.5% 0 0); --color-stone-50: oklch(98.5% .001 106.423); --color-stone-100: oklch(97% .001 106.424); --color-stone-200: oklch(92.3% .003 48.717); --color-stone-300: oklch(86.9% .005 56.366); --color-stone-400: oklch(70.9% .01 56.259); --color-stone-500: oklch(55.3% .013 58.071); --color-stone-600: oklch(44.4% .011 73.639); --color-stone-700: oklch(37.4% .01 67.558); --color-stone-800: oklch(26.8% .007 34.298); --color-stone-900: oklch(21.6% .006 56.043); --color-stone-950: oklch(14.7% .004 49.25); --color-mauve-50: oklch(98.5% 0 0); --color-mauve-100: oklch(96% .003 325.6); --color-mauve-200: oklch(92.2% .005 325.62); --color-mauve-300: oklch(86.5% .012 325.68); --color-mauve-400: oklch(71.1% .019 323.02); --color-mauve-500: oklch(54.2% .034 322.5); --color-mauve-600: oklch(43.5% .029 321.78); --color-mauve-700: oklch(36.4% .029 323.89); --color-mauve-800: oklch(26.3% .024 320.12); --color-mauve-900: oklch(21.2% .019 322.12); --color-mauve-950: oklch(14.5% .008 326); --color-olive-50: oklch(98.8% .003 106.5); --color-olive-100: oklch(96.6% .005 106.5); --color-olive-200: oklch(93% .007 106.5); --color-olive-300: oklch(88% .011 106.6); --color-olive-400: oklch(73.7% .021 106.9); --color-olive-500: oklch(58% .031 107.3); --color-olive-600: oklch(46.6% .025 107.3); --color-olive-700: oklch(39.4% .023 107.4); --color-olive-800: oklch(28.6% .016 107.4); --color-olive-900: oklch(22.8% .013 107.4); --color-olive-950: oklch(15.3% .006 107.1); --color-mist-50: oklch(98.7% .002 197.1); --color-mist-100: oklch(96.3% .002 197.1); --color-mist-200: oklch(92.5% .005 214.3); --color-mist-300: oklch(87.2% .007 219.6); --color-mist-400: oklch(72.3% .014 214.4); --color-mist-500: oklch(56% .021 213.5); --color-mist-600: oklch(45% .017 213.2); --color-mist-700: oklch(37.8% .015 216); --color-mist-800: oklch(27.5% .011 216.9); --color-mist-900: oklch(21.8% .008 223.9); --color-mist-950: oklch(14.8% .004 228.8); --color-taupe-50: oklch(98.6% .002 67.8); --color-taupe-100: oklch(96% .002 17.2); --color-taupe-200: oklch(92.2% .005 34.3); --color-taupe-300: oklch(86.8% .007 39.5); --color-taupe-400: oklch(71.4% .014 41.2); --color-taupe-500: oklch(54.7% .021 43.1); --color-taupe-600: oklch(43.8% .017 39.3); --color-taupe-700: oklch(36.7% .016 35.7); --color-taupe-800: oklch(26.8% .011 36.5); --color-taupe-900: oklch(21.4% .009 43.1); --color-taupe-950: oklch(14.7% .004 49.3); --color-black: #000; --color-white: #fff; --spacing: .25rem; --breakpoint-sm: 40rem; --breakpoint-md: 48rem; --breakpoint-lg: 64rem; --breakpoint-xl: 80rem; --breakpoint-2xl: 96rem; --container-3xs: 16rem; --container-2xs: 18rem; --container-xs: 20rem; --container-sm: 24rem; --container-md: 28rem; --container-lg: 32rem; --container-xl: 36rem; --container-2xl: 42rem; --container-3xl: 48rem; --container-4xl: 56rem; --container-5xl: 64rem; --container-6xl: 72rem; --container-7xl: 80rem; --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 ; --text-4xl: 2.25rem; --text-4xl--line-height: calc(2.5 / 2.25); --text-5xl: 3rem; --text-5xl--line-height: 1; --text-6xl: 3.75rem; --text-6xl--line-height: 1; --text-7xl: 4.5rem; --text-7xl--line-height: 1; --text-8xl: 6rem; --text-8xl--line-height: 1; --text-9xl: 8rem; --text-9xl--line-height: 1; --font-weight-thin: 100; --font-weight-extralight: 200; --font-weight-light: 300; --font-weight-normal: 400; --font-weight-medium: 500; --font-weight-semibold: 600; --font-weight-bold: 700; --font-weight-extrabold: 800; --font-weight-black: 900; --tracking-tighter: -.05em; --tracking-tight: -.025em; --tracking-normal: 0em; --tracking-wide: .025em; --tracking-wider: .05em; --tracking-widest: .1em; --leading-tight: 1.25; --leading-snug: 1.375; --leading-normal: 1.5; --leading-relaxed: 1.625; --leading-loose: 2; --radius-xs: .125rem; --radius-sm: .25rem; --radius-md: .375rem; --radius-lg: .5rem; --radius-xl: .75rem; --radius-2xl: 1rem; --radius-3xl: 1.5rem; --radius-4xl: 2rem; --shadow-2xs: 0 1px rgb(0 0 0 / .05); --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / .05); --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1); --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1); --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / .25); --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / .05); --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / .05); --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / .05); --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / .05); --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / .15); --drop-shadow-md: 0 3px 3px rgb(0 0 0 / .12); --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / .15); --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / .1); --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / .15); --text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / .15); --text-shadow-xs: 0px 1px 1px rgb(0 0 0 / .2); --text-shadow-sm: 0px 1px 0px rgb(0 0 0 / .075), 0px 1px 1px rgb(0 0 0 / .075), 0px 2px 2px rgb(0 0 0 / .075); --text-shadow-md: 0px 1px 1px rgb(0 0 0 / .1), 0px 1px 2px rgb(0 0 0 / .1), 0px 2px 4px rgb(0 0 0 / .1); --text-shadow-lg: 0px 1px 2px rgb(0 0 0 / .1), 0px 3px 2px rgb(0 0 0 / .1), 0px 4px 8px rgb(0 0 0 / .1); --ease-in: cubic-bezier(.4, 0, 1, 1); --ease-out: cubic-bezier(0, 0, .2, 1); --ease-in-out: cubic-bezier(.4, 0, .2, 1); --animate-spin: spin 1s linear infinite; --animate-ping: ping 1s cubic-bezier(0, 0, .2, 1) infinite; --animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite; --animate-bounce: bounce 1s infinite; @keyframes spin { to { transform: rotate(360deg); } } @keyframes ping { 75%, 100% { transform: scale(2); opacity: 0; } } @keyframes pulse { 50% { opacity: .5; } } @keyframes bounce { 0%, 100% { transform: translateY(-25%); animation-timing-function: cubic-bezier(.8, 0, 1, 1); } 50% { transform: none; animation-timing-function: cubic-bezier(0, 0, .2, 1); } } --blur-xs: 4px; --blur-sm: 8px; --blur-md: 12px; --blur-lg: 16px; --blur-xl: 24px; --blur-2xl: 40px; --blur-3xl: 64px; --perspective-dramatic: 100px; --perspective-near: 300px; --perspective-normal: 500px; --perspective-midrange: 800px; --perspective-distant: 1200px; --aspect-video: 16 / 9; --default-transition-duration: .15s; --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1); --default-font-family: --theme(--font-sans, initial); --default-font-feature-settings: --theme( --font-sans--font-feature-settings, initial ); --default-font-variation-settings: --theme( --font-sans--font-variation-settings, initial ); --default-mono-font-family: --theme(--font-mono, initial); --default-mono-font-feature-settings: --theme( --font-mono--font-feature-settings, initial ); --default-mono-font-variation-settings: --theme( --font-mono--font-variation-settings, initial ); }@theme default inline reference{ --blur: 8px; --shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1); --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / .05); --drop-shadow: 0 1px 2px rgb(0 0 0 / .1), 0 1px 1px rgb(0 0 0 / .06); --radius: .25rem; --max-width-prose: 65ch; }}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:--theme(--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:--theme(--default-font-feature-settings,normal);font-variation-settings:--theme(--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:--theme(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:--theme(--default-mono-font-feature-settings,normal);font-variation-settings:--theme(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}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{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}: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: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,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-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]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{@tailwind utilities;}@source "../**/*.{ts,tsx,js,jsx}";@layer base{:host{all:initial;color-scheme:light;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}*,*:before,*:after{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*,*:before,*:after{box-sizing:border-box}button{font-family:inherit;cursor:pointer}button:disabled{cursor:not-allowed}[role=button],[role=radio]{cursor:pointer}}.pw-cta-shimmer:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.35) 50%,transparent);animation:pw-cta-shimmer 3s infinite;z-index:1}@keyframes pw-cta-shimmer{0%{left:-100%}to{left:100%}}';
|
|
49
|
+
let he = !1;
|
|
50
|
+
function et() {
|
|
51
|
+
if (he || (he = !0, typeof CSS > "u" || typeof CSS.registerProperty != "function")) return;
|
|
52
52
|
let r;
|
|
53
53
|
try {
|
|
54
54
|
const e = new CSSStyleSheet();
|
|
55
|
-
e.replaceSync(
|
|
55
|
+
e.replaceSync(Se), r = e.cssRules;
|
|
56
56
|
} catch {
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
@@ -70,10 +70,10 @@ function Qe() {
|
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
|
-
function
|
|
73
|
+
function tt(r, e, t = {}) {
|
|
74
74
|
if (typeof document > "u")
|
|
75
75
|
throw new Error("mountShadow called in non-DOM environment");
|
|
76
|
-
|
|
76
|
+
et();
|
|
77
77
|
const n = t.host ?? document.createElement("div");
|
|
78
78
|
n.setAttribute("data-paywall-host", ""), n.style.cssText = t.inline ? "all: initial; position: absolute; inset: 0; z-index: 1; pointer-events: none;" : "all: initial; position: fixed; inset: 0; z-index: 2147483647; pointer-events: none;", !n.isConnected && !t.inline && document.body.appendChild(n);
|
|
79
79
|
const i = n.attachShadow({ mode: t.shadowMode ?? "closed" }), s = `
|
|
@@ -95,21 +95,21 @@ function et(r, e, t = {}) {
|
|
|
95
95
|
visibility: visible !important;
|
|
96
96
|
}
|
|
97
97
|
`, a = document.createElement("style");
|
|
98
|
-
a.textContent = s +
|
|
98
|
+
a.textContent = s + Se + (t.injectCss ?? ""), i.appendChild(a);
|
|
99
99
|
const c = document.createElement("div");
|
|
100
100
|
c.style.pointerEvents = "auto", i.appendChild(c);
|
|
101
101
|
let l = e;
|
|
102
|
-
return
|
|
102
|
+
return Q(de(r, l), c), {
|
|
103
103
|
shadowRoot: i,
|
|
104
|
-
update(
|
|
105
|
-
l = { ...l, ...
|
|
104
|
+
update(h) {
|
|
105
|
+
l = { ...l, ...h }, Q(de(r, l), c);
|
|
106
106
|
},
|
|
107
107
|
unmount() {
|
|
108
|
-
|
|
108
|
+
Q(null, c), n.remove();
|
|
109
109
|
}
|
|
110
110
|
};
|
|
111
111
|
}
|
|
112
|
-
const
|
|
112
|
+
const rt = (r, e, t) => {
|
|
113
113
|
const n = r[e];
|
|
114
114
|
return n ? typeof n == "function" ? n() : Promise.resolve(n) : new Promise((i, s) => {
|
|
115
115
|
(typeof queueMicrotask == "function" ? queueMicrotask : setTimeout)(
|
|
@@ -121,7 +121,7 @@ const tt = (r, e, t) => {
|
|
|
121
121
|
)
|
|
122
122
|
);
|
|
123
123
|
});
|
|
124
|
-
},
|
|
124
|
+
}, nt = [
|
|
125
125
|
"ru",
|
|
126
126
|
"uk",
|
|
127
127
|
"de",
|
|
@@ -149,19 +149,19 @@ const tt = (r, e, t) => {
|
|
|
149
149
|
"th",
|
|
150
150
|
"vi",
|
|
151
151
|
"he"
|
|
152
|
-
],
|
|
153
|
-
function
|
|
152
|
+
], Ce = (r, e, t) => Ae(e, t), Ie = Ve({ t: Ce, locale: "en" });
|
|
153
|
+
function Ae(r, e) {
|
|
154
154
|
if (!e) return r;
|
|
155
155
|
let t = r;
|
|
156
156
|
for (const [n, i] of Object.entries(e))
|
|
157
157
|
t = t.split(`{${n}}`).join(String(i));
|
|
158
158
|
return t;
|
|
159
159
|
}
|
|
160
|
-
const
|
|
161
|
-
function
|
|
162
|
-
return
|
|
160
|
+
const ee = /* @__PURE__ */ new Map(), te = /* @__PURE__ */ new Map();
|
|
161
|
+
function Le(r) {
|
|
162
|
+
return nt.includes(r);
|
|
163
163
|
}
|
|
164
|
-
function
|
|
164
|
+
function it(r) {
|
|
165
165
|
const e = [];
|
|
166
166
|
if (typeof navigator < "u" && navigator.language) {
|
|
167
167
|
e.push(navigator.language);
|
|
@@ -175,60 +175,60 @@ function nt(r) {
|
|
|
175
175
|
n && n !== t && e.push(n);
|
|
176
176
|
}
|
|
177
177
|
for (const n of e)
|
|
178
|
-
if (
|
|
178
|
+
if (Le(n)) return n;
|
|
179
179
|
return null;
|
|
180
180
|
}
|
|
181
|
-
function
|
|
181
|
+
function ot(r, e) {
|
|
182
182
|
return !!r.locales && r.locales[e] !== void 0;
|
|
183
183
|
}
|
|
184
|
-
async function
|
|
185
|
-
const e =
|
|
184
|
+
async function st(r) {
|
|
185
|
+
const e = ee.get(r);
|
|
186
186
|
if (e) return e;
|
|
187
|
-
const t =
|
|
187
|
+
const t = te.get(r);
|
|
188
188
|
if (t) return t;
|
|
189
|
-
const n =
|
|
189
|
+
const n = rt(/* @__PURE__ */ Object.assign({ "./locales/ar.ts": () => import("./chunks/ar-B2Wg_IrC.js"), "./locales/cs.ts": () => import("./chunks/cs-BNo9Dx0Q.js"), "./locales/da.ts": () => import("./chunks/da-Do9Lq6En.js"), "./locales/de.ts": () => import("./chunks/de-C8pDZNvx.js"), "./locales/el.ts": () => import("./chunks/el-DzMNX-_P.js"), "./locales/es.ts": () => import("./chunks/es-YrKt-q4w.js"), "./locales/fi.ts": () => import("./chunks/fi-Bh44pwZ4.js"), "./locales/fr.ts": () => import("./chunks/fr-Bc0pw4ws.js"), "./locales/he.ts": () => import("./chunks/he-Bfm-bhe3.js"), "./locales/hi.ts": () => import("./chunks/hi-D-O-B9Dn.js"), "./locales/hu.ts": () => import("./chunks/hu-CmIuAbLL.js"), "./locales/id.ts": () => import("./chunks/id-DN7IES-A.js"), "./locales/it.ts": () => import("./chunks/it-Cz5Nmqx5.js"), "./locales/ja.ts": () => import("./chunks/ja-BH9BlBh2.js"), "./locales/ko.ts": () => import("./chunks/ko-CYV9QuYs.js"), "./locales/nl.ts": () => import("./chunks/nl-BvkB900D.js"), "./locales/no.ts": () => import("./chunks/no-3s9_ormb.js"), "./locales/pl.ts": () => import("./chunks/pl-C9WTGQtb.js"), "./locales/pt.ts": () => import("./chunks/pt-uFVUv_Op.js"), "./locales/ro.ts": () => import("./chunks/ro-BrqQ8Au-.js"), "./locales/ru.ts": () => import("./chunks/ru-DK594dA8.js"), "./locales/sv.ts": () => import("./chunks/sv-CHNH8-mq.js"), "./locales/th.ts": () => import("./chunks/th-l24Pm5q-.js"), "./locales/tr.ts": () => import("./chunks/tr-ADpigSY5.js"), "./locales/uk.ts": () => import("./chunks/uk-CGqo4jek.js"), "./locales/vi.ts": () => import("./chunks/vi-Dk9bTu6f.js"), "./locales/zh.ts": () => import("./chunks/zh-LDkEV2D9.js") }), `./locales/${r}.ts`, 3).then((i) => {
|
|
190
190
|
const s = i.default ?? {};
|
|
191
|
-
return
|
|
191
|
+
return ee.set(r, s), s;
|
|
192
192
|
}).catch((i) => {
|
|
193
193
|
console.warn(`[paywall] failed to load locale chunk "${r}"`, i);
|
|
194
194
|
const s = {};
|
|
195
|
-
return
|
|
195
|
+
return ee.set(r, s), s;
|
|
196
196
|
}).finally(() => {
|
|
197
|
-
|
|
197
|
+
te.delete(r);
|
|
198
198
|
});
|
|
199
|
-
return
|
|
199
|
+
return te.set(r, n), n;
|
|
200
200
|
}
|
|
201
|
-
function
|
|
202
|
-
const [n, i] =
|
|
201
|
+
function at({ bootstrap: r, forceLocale: e, children: t }) {
|
|
202
|
+
const [n, i] = k("en"), [s, a] = k(null);
|
|
203
203
|
P(() => {
|
|
204
|
-
const
|
|
204
|
+
const h = (e && Le(e) ? e : null) ?? (() => {
|
|
205
205
|
if (!r) return null;
|
|
206
|
-
const
|
|
207
|
-
return !
|
|
206
|
+
const g = it(r);
|
|
207
|
+
return !g || !ot(r, g) ? null : g;
|
|
208
208
|
})();
|
|
209
|
-
if (!
|
|
209
|
+
if (!h) {
|
|
210
210
|
(s !== null || n !== "en") && (i("en"), a(null));
|
|
211
211
|
return;
|
|
212
212
|
}
|
|
213
|
-
if (
|
|
213
|
+
if (h === n && s) return;
|
|
214
214
|
let d = !1;
|
|
215
|
-
return
|
|
216
|
-
d || (i(
|
|
215
|
+
return st(h).then((g) => {
|
|
216
|
+
d || (i(h), a(g));
|
|
217
217
|
}), () => {
|
|
218
218
|
d = !0;
|
|
219
219
|
};
|
|
220
220
|
}, [r, e]);
|
|
221
221
|
const c = {
|
|
222
222
|
locale: n,
|
|
223
|
-
t: s ? (l,
|
|
223
|
+
t: s ? (l, h, d) => Ae(s[l] ?? h, d) : Ce
|
|
224
224
|
};
|
|
225
|
-
return /* @__PURE__ */ o(
|
|
225
|
+
return /* @__PURE__ */ o(Ie.Provider, { value: c, children: t });
|
|
226
226
|
}
|
|
227
|
-
function
|
|
228
|
-
return
|
|
227
|
+
function S() {
|
|
228
|
+
return He(Ie);
|
|
229
229
|
}
|
|
230
|
-
const
|
|
231
|
-
function
|
|
230
|
+
const pe = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
231
|
+
function lt({
|
|
232
232
|
open: r,
|
|
233
233
|
onClose: e,
|
|
234
234
|
labelledBy: t,
|
|
@@ -239,40 +239,40 @@ function at({
|
|
|
239
239
|
inline: c = !1,
|
|
240
240
|
children: l
|
|
241
241
|
}) {
|
|
242
|
-
const { t:
|
|
242
|
+
const { t: h } = S(), d = D(null), g = D(null);
|
|
243
243
|
return P(() => {
|
|
244
244
|
if (!r) return;
|
|
245
|
-
|
|
246
|
-
const
|
|
247
|
-
|
|
248
|
-
const
|
|
249
|
-
if (
|
|
245
|
+
g.current = document.activeElement ?? null;
|
|
246
|
+
const m = d.current;
|
|
247
|
+
m && (m.querySelector(pe) ?? m).focus({ preventScroll: !0 });
|
|
248
|
+
const A = (y) => {
|
|
249
|
+
if (y.key === "Escape") {
|
|
250
250
|
if (!s) return;
|
|
251
|
-
|
|
251
|
+
y.stopPropagation(), e();
|
|
252
252
|
return;
|
|
253
253
|
}
|
|
254
|
-
if (
|
|
255
|
-
const
|
|
256
|
-
d.current.querySelectorAll(
|
|
257
|
-
).filter((
|
|
258
|
-
if (
|
|
259
|
-
|
|
254
|
+
if (y.key !== "Tab" || !d.current) return;
|
|
255
|
+
const C = Array.from(
|
|
256
|
+
d.current.querySelectorAll(pe)
|
|
257
|
+
).filter((O) => !O.hasAttribute("disabled") && O.tabIndex !== -1);
|
|
258
|
+
if (C.length === 0) {
|
|
259
|
+
y.preventDefault();
|
|
260
260
|
return;
|
|
261
261
|
}
|
|
262
|
-
const
|
|
263
|
-
|
|
262
|
+
const I = C[0], U = C[C.length - 1], M = document.activeElement;
|
|
263
|
+
y.shiftKey && M === I ? (y.preventDefault(), U.focus()) : !y.shiftKey && M === U && (y.preventDefault(), I.focus());
|
|
264
264
|
};
|
|
265
|
-
document.addEventListener("keydown",
|
|
266
|
-
const
|
|
265
|
+
document.addEventListener("keydown", A, !0);
|
|
266
|
+
const b = document.body.style.overflow;
|
|
267
267
|
return c || (document.body.style.overflow = "hidden"), () => {
|
|
268
|
-
document.removeEventListener("keydown",
|
|
268
|
+
document.removeEventListener("keydown", A, !0), c || (document.body.style.overflow = b), g.current?.focus?.({ preventScroll: !0 });
|
|
269
269
|
};
|
|
270
270
|
}, [r, e, s, c]), r ? /* @__PURE__ */ u(
|
|
271
271
|
"div",
|
|
272
272
|
{
|
|
273
273
|
class: `${c ? "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]`,
|
|
274
|
-
onClick: (
|
|
275
|
-
s &&
|
|
274
|
+
onClick: (m) => {
|
|
275
|
+
s && m.target === m.currentTarget && e();
|
|
276
276
|
},
|
|
277
277
|
"data-pw-root": !0,
|
|
278
278
|
children: [
|
|
@@ -302,7 +302,7 @@ function at({
|
|
|
302
302
|
{
|
|
303
303
|
type: "button",
|
|
304
304
|
onClick: e,
|
|
305
|
-
"aria-label":
|
|
305
|
+
"aria-label": h("modal.close_aria", "Close"),
|
|
306
306
|
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)]",
|
|
307
307
|
children: /* @__PURE__ */ o("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ o(
|
|
308
308
|
"path",
|
|
@@ -332,7 +332,7 @@ function at({
|
|
|
332
332
|
}
|
|
333
333
|
) : null;
|
|
334
334
|
}
|
|
335
|
-
function
|
|
335
|
+
function ct(r, e) {
|
|
336
336
|
switch (r) {
|
|
337
337
|
case "google":
|
|
338
338
|
return e("auth.continue_with_google", "Continue with Google");
|
|
@@ -344,9 +344,9 @@ function lt(r, e) {
|
|
|
344
344
|
return e("auth.continue_with_facebook", "Continue with Facebook");
|
|
345
345
|
}
|
|
346
346
|
}
|
|
347
|
-
function
|
|
347
|
+
function fe(r, e, t) {
|
|
348
348
|
const n = e === "signup" ? t("auth.signup_failed", "Sign-up failed") : t("auth.signin_failed", "Sign-in failed");
|
|
349
|
-
if (!(r instanceof
|
|
349
|
+
if (!(r instanceof L)) return n;
|
|
350
350
|
switch (r.code) {
|
|
351
351
|
case "invalid_credentials":
|
|
352
352
|
return t("auth.invalid_credentials", "Invalid email or password");
|
|
@@ -378,14 +378,14 @@ function pe(r, e, t) {
|
|
|
378
378
|
return n;
|
|
379
379
|
}
|
|
380
380
|
}
|
|
381
|
-
function
|
|
381
|
+
function Me({ block: r, ctx: e }) {
|
|
382
382
|
const t = e.auth, n = e.authSession, i = r.allow_signup !== !1, s = r.allow_password_reset !== !1, a = r.hide_when_authenticated !== !1;
|
|
383
383
|
if (!t)
|
|
384
384
|
return typeof console < "u" && console.warn("[paywall] auth_panel rendered without AuthClient — pass `auth: true` to PaywallUI"), null;
|
|
385
385
|
const c = n && !n.user.is_anonymous ? n : null;
|
|
386
|
-
return c && a ? null : c ? /* @__PURE__ */ o(
|
|
386
|
+
return c && a ? null : c ? /* @__PURE__ */ o(ut, { email: c.user.email ?? "", onSignOut: () => t.signOut().catch(() => {
|
|
387
387
|
}) }) : /* @__PURE__ */ o(
|
|
388
|
-
|
|
388
|
+
dt,
|
|
389
389
|
{
|
|
390
390
|
block: r,
|
|
391
391
|
allowSignup: i,
|
|
@@ -394,8 +394,8 @@ function Le({ block: r, ctx: e }) {
|
|
|
394
394
|
}
|
|
395
395
|
);
|
|
396
396
|
}
|
|
397
|
-
function
|
|
398
|
-
const { t } =
|
|
397
|
+
function ut({ email: r, onSignOut: e }) {
|
|
398
|
+
const { t } = S();
|
|
399
399
|
return /* @__PURE__ */ u("div", { class: "flex items-center justify-between gap-3 rounded-2xl bg-gray-100 px-4 py-3", children: [
|
|
400
400
|
/* @__PURE__ */ u("div", { class: "flex flex-col", children: [
|
|
401
401
|
/* @__PURE__ */ o("span", { class: "text-[10px] font-semibold uppercase tracking-wider text-gray-500", children: t("auth.signed_in", "Signed in") }),
|
|
@@ -412,182 +412,182 @@ function ct({ email: r, onSignOut: e }) {
|
|
|
412
412
|
)
|
|
413
413
|
] });
|
|
414
414
|
}
|
|
415
|
-
function
|
|
416
|
-
const { t: i } =
|
|
415
|
+
function dt({ block: r, allowSignup: e, allowReset: t, ctx: n }) {
|
|
416
|
+
const { t: i } = S(), s = n.auth, a = r.providers ?? [], c = n.initialAuthMode === "signup" && e ? "signup" : "signin", [l, h] = k(c), [d, g] = k(""), [_, p] = k(""), [v, m] = k(""), [A, b] = k(""), [y, C] = k(null), I = D(!1), [U, M] = k(null), [O, j] = k(null), [R, T] = k(!1), [E, z] = k(null);
|
|
417
417
|
P(() => {
|
|
418
418
|
if (typeof s.getLastLogin != "function") return;
|
|
419
|
-
let
|
|
419
|
+
let f = !1;
|
|
420
420
|
return s.getLastLogin().then(
|
|
421
|
-
(
|
|
422
|
-
|
|
421
|
+
(w) => {
|
|
422
|
+
f || !w || (z(w), w.email && g((B) => B === "" ? w.email : B));
|
|
423
423
|
},
|
|
424
424
|
() => {
|
|
425
425
|
}
|
|
426
426
|
), () => {
|
|
427
|
-
|
|
427
|
+
f = !0;
|
|
428
428
|
};
|
|
429
429
|
}, [s]);
|
|
430
|
-
const
|
|
431
|
-
|
|
432
|
-
},
|
|
433
|
-
if (
|
|
434
|
-
|
|
430
|
+
const q = (f) => {
|
|
431
|
+
h(f), M(null), j(null), T(!1);
|
|
432
|
+
}, Y = async (f) => {
|
|
433
|
+
if (f.preventDefault(), !(I.current || y)) {
|
|
434
|
+
I.current = !0;
|
|
435
435
|
try {
|
|
436
|
-
if (
|
|
436
|
+
if (M(null), j(null), l === "signup" && !R) {
|
|
437
437
|
if (!d.trim()) return;
|
|
438
|
-
|
|
438
|
+
T(!0);
|
|
439
439
|
return;
|
|
440
440
|
}
|
|
441
|
-
if (l === "signup" &&
|
|
442
|
-
|
|
441
|
+
if (l === "signup" && _ !== v) {
|
|
442
|
+
M(i("auth.passwords_mismatch", "Passwords don't match"));
|
|
443
443
|
return;
|
|
444
444
|
}
|
|
445
|
-
|
|
445
|
+
C("email");
|
|
446
446
|
try {
|
|
447
|
-
l === "signin" ? await s.signInWithEmail({ email: d, password:
|
|
447
|
+
l === "signin" ? await s.signInWithEmail({ email: d, password: _ }) : l === "signup" ? (await s.signUp({ email: d, password: _ })).kind === "confirmation_required" && (p(""), h("signup_verify"), j(i("auth.check_email_message", "Check your email for a confirmation code."))) : l === "forgot" ? (await s.requestPasswordReset({ email: d }), h("reset_sent"), j(
|
|
448
448
|
i("auth.reset_sent_message", "If that email exists, a reset code has been sent.")
|
|
449
|
-
)) : l === "signup_verify" ? await s.verifyOtp({ email: d, token:
|
|
449
|
+
)) : l === "signup_verify" ? await s.verifyOtp({ email: d, token: A, type: "email" }) : l === "reset_verify" && (await s.verifyOtp({
|
|
450
450
|
email: d,
|
|
451
|
-
token:
|
|
452
|
-
type:
|
|
453
|
-
}),
|
|
454
|
-
} catch (
|
|
455
|
-
|
|
451
|
+
token: A,
|
|
452
|
+
type: _ ? "recovery" : "email"
|
|
453
|
+
}), _ && await s.updatePassword({ password: _ }));
|
|
454
|
+
} catch (w) {
|
|
455
|
+
M(fe(w, l === "signup" ? "signup" : l === "signup_verify" || l === "reset_verify" ? "otp" : l === "forgot" ? "reset" : "signin", i));
|
|
456
456
|
} finally {
|
|
457
|
-
|
|
457
|
+
C(null);
|
|
458
458
|
}
|
|
459
459
|
} finally {
|
|
460
|
-
|
|
460
|
+
I.current = !1;
|
|
461
461
|
}
|
|
462
462
|
}
|
|
463
|
-
},
|
|
464
|
-
if (!(
|
|
465
|
-
|
|
463
|
+
}, V = async (f) => {
|
|
464
|
+
if (!(I.current || y)) {
|
|
465
|
+
I.current = !0, C(f), M(null), j(null);
|
|
466
466
|
try {
|
|
467
467
|
await s.signInWithOAuth({
|
|
468
|
-
provider:
|
|
469
|
-
onPopupOpened: () =>
|
|
468
|
+
provider: f,
|
|
469
|
+
onPopupOpened: () => C(null)
|
|
470
470
|
});
|
|
471
|
-
} catch (
|
|
472
|
-
if (
|
|
471
|
+
} catch (w) {
|
|
472
|
+
if (w instanceof L && (w.code === "oauth_cancelled" || w.code === "oauth_timeout"))
|
|
473
473
|
return;
|
|
474
|
-
|
|
474
|
+
M(fe(w, "signin", i));
|
|
475
475
|
} finally {
|
|
476
|
-
|
|
476
|
+
I.current = !1, C(null);
|
|
477
477
|
}
|
|
478
478
|
}
|
|
479
|
-
}, K = a.length > 0 && (l === "signin" || l === "signup"),
|
|
479
|
+
}, K = a.length > 0 && (l === "signin" || l === "signup"), X = l === "signin" || l === "signup" || l === "forgot", x = l === "signin" || l === "signup" && R;
|
|
480
480
|
return /* @__PURE__ */ u("div", { class: "flex flex-col gap-5", children: [
|
|
481
|
-
/* @__PURE__ */ o(
|
|
481
|
+
/* @__PURE__ */ o(ht, { mode: l, customHeading: r.heading, customSubheading: r.subheading }),
|
|
482
482
|
K ? /* @__PURE__ */ u("div", { class: "flex flex-col gap-2.5", children: [
|
|
483
|
-
a.map((
|
|
483
|
+
a.map((f) => /* @__PURE__ */ u("div", { class: "relative", children: [
|
|
484
484
|
/* @__PURE__ */ u(
|
|
485
485
|
"button",
|
|
486
486
|
{
|
|
487
487
|
type: "button",
|
|
488
|
-
onClick: () =>
|
|
489
|
-
disabled:
|
|
488
|
+
onClick: () => V(f),
|
|
489
|
+
disabled: y !== null,
|
|
490
490
|
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)]",
|
|
491
491
|
children: [
|
|
492
|
-
|
|
493
|
-
/* @__PURE__ */ o("span", { children:
|
|
492
|
+
y === f ? /* @__PURE__ */ o("span", { class: "inline-block h-4 w-4 animate-spin rounded-full border-2 border-gray-300 border-t-gray-700" }) : /* @__PURE__ */ o(vt, { provider: f }),
|
|
493
|
+
/* @__PURE__ */ o("span", { children: ct(f, i) })
|
|
494
494
|
]
|
|
495
495
|
}
|
|
496
496
|
),
|
|
497
|
-
|
|
498
|
-
] },
|
|
499
|
-
/* @__PURE__ */ o(
|
|
497
|
+
E?.method === f ? /* @__PURE__ */ o(xt, { email: E.email }) : null
|
|
498
|
+
] }, f)),
|
|
499
|
+
/* @__PURE__ */ o(kt, {})
|
|
500
500
|
] }) : null,
|
|
501
|
-
/* @__PURE__ */ u("form", { onSubmit:
|
|
502
|
-
|
|
503
|
-
|
|
501
|
+
/* @__PURE__ */ u("form", { onSubmit: Y, class: "flex flex-col gap-3", children: [
|
|
502
|
+
X && /* @__PURE__ */ o(
|
|
503
|
+
ge,
|
|
504
504
|
{
|
|
505
505
|
type: "email",
|
|
506
506
|
placeholder: i("auth.email", "Email address"),
|
|
507
507
|
value: d,
|
|
508
|
-
onInput:
|
|
508
|
+
onInput: g,
|
|
509
509
|
autocomplete: "email",
|
|
510
510
|
required: !0
|
|
511
511
|
}
|
|
512
512
|
),
|
|
513
|
-
|
|
514
|
-
|
|
513
|
+
x && /* @__PURE__ */ o(
|
|
514
|
+
re,
|
|
515
515
|
{
|
|
516
516
|
placeholder: i("auth.password", "Password"),
|
|
517
|
-
value:
|
|
518
|
-
onInput:
|
|
517
|
+
value: _,
|
|
518
|
+
onInput: p,
|
|
519
519
|
autocomplete: l === "signin" ? "current-password" : "new-password",
|
|
520
520
|
required: !0
|
|
521
521
|
}
|
|
522
522
|
),
|
|
523
|
-
l === "signup" &&
|
|
524
|
-
|
|
523
|
+
l === "signup" && R && /* @__PURE__ */ o(
|
|
524
|
+
re,
|
|
525
525
|
{
|
|
526
526
|
placeholder: i("auth.repeat_password", "Repeat password"),
|
|
527
|
-
value:
|
|
528
|
-
onInput:
|
|
527
|
+
value: v,
|
|
528
|
+
onInput: m,
|
|
529
529
|
autocomplete: "new-password",
|
|
530
530
|
required: !0
|
|
531
531
|
}
|
|
532
532
|
),
|
|
533
533
|
(l === "signup_verify" || l === "reset_verify") && /* @__PURE__ */ o(
|
|
534
|
-
|
|
534
|
+
ge,
|
|
535
535
|
{
|
|
536
536
|
type: "text",
|
|
537
537
|
placeholder: i("auth.confirmation_code", "Confirmation code"),
|
|
538
|
-
value:
|
|
539
|
-
onInput:
|
|
538
|
+
value: A,
|
|
539
|
+
onInput: b,
|
|
540
540
|
autocomplete: "one-time-code",
|
|
541
541
|
inputMode: "numeric",
|
|
542
542
|
required: !0
|
|
543
543
|
}
|
|
544
544
|
),
|
|
545
545
|
l === "reset_verify" && /* @__PURE__ */ o(
|
|
546
|
-
|
|
546
|
+
re,
|
|
547
547
|
{
|
|
548
548
|
placeholder: i(
|
|
549
549
|
"auth.new_password_optional",
|
|
550
550
|
"New password (optional — only for password reset)"
|
|
551
551
|
),
|
|
552
|
-
value:
|
|
553
|
-
onInput:
|
|
552
|
+
value: _,
|
|
553
|
+
onInput: p,
|
|
554
554
|
autocomplete: "new-password"
|
|
555
555
|
}
|
|
556
556
|
),
|
|
557
|
-
l === "reset_sent" &&
|
|
558
|
-
l === "signin" && t && /* @__PURE__ */ o("div", { class: "flex justify-end text-sm", children: /* @__PURE__ */ o(Z, { onClick: () =>
|
|
559
|
-
|
|
560
|
-
|
|
557
|
+
l === "reset_sent" && O && /* @__PURE__ */ o("p", { class: "rounded-2xl bg-gray-100 px-4 py-3 text-sm text-gray-600", children: O }),
|
|
558
|
+
l === "signin" && t && /* @__PURE__ */ o("div", { class: "flex justify-end text-sm", children: /* @__PURE__ */ o(Z, { onClick: () => q("forgot"), children: i("auth.forgot_password", "Forgot password?") }) }),
|
|
559
|
+
U && /* @__PURE__ */ o("p", { class: "text-sm text-red-600", children: U }),
|
|
560
|
+
O && l !== "reset_sent" && /* @__PURE__ */ o("p", { class: "text-sm text-gray-500", children: O }),
|
|
561
561
|
l !== "reset_sent" && /* @__PURE__ */ o(
|
|
562
|
-
|
|
562
|
+
mt,
|
|
563
563
|
{
|
|
564
|
-
busy:
|
|
565
|
-
label:
|
|
564
|
+
busy: y === "email",
|
|
565
|
+
label: ft(l, R, r.submit_label ?? r.heading, i)
|
|
566
566
|
}
|
|
567
567
|
)
|
|
568
568
|
] }),
|
|
569
569
|
/* @__PURE__ */ o(
|
|
570
|
-
|
|
570
|
+
gt,
|
|
571
571
|
{
|
|
572
572
|
mode: l,
|
|
573
573
|
allowSignup: e,
|
|
574
|
-
onSwitch:
|
|
574
|
+
onSwitch: q
|
|
575
575
|
}
|
|
576
576
|
)
|
|
577
577
|
] });
|
|
578
578
|
}
|
|
579
|
-
function
|
|
579
|
+
function ht({
|
|
580
580
|
mode: r,
|
|
581
581
|
customHeading: e,
|
|
582
582
|
customSubheading: t
|
|
583
583
|
}) {
|
|
584
|
-
const { t: n } =
|
|
584
|
+
const { t: n } = S(), i = pt(r, n), s = r === "signin" || r === "signup", a = s && e ? e : i.title, c = s && t !== void 0 ? t || null : i.subtitle;
|
|
585
585
|
return /* @__PURE__ */ u("div", { class: "flex flex-col gap-2", children: [
|
|
586
586
|
/* @__PURE__ */ o("h2", { class: "text-3xl font-bold tracking-tight text-gray-900", children: a }),
|
|
587
587
|
c ? /* @__PURE__ */ o("p", { class: "text-base leading-relaxed text-gray-600", children: c }) : null
|
|
588
588
|
] });
|
|
589
589
|
}
|
|
590
|
-
function
|
|
590
|
+
function pt(r, e) {
|
|
591
591
|
switch (r) {
|
|
592
592
|
case "signin":
|
|
593
593
|
return {
|
|
@@ -630,7 +630,7 @@ function ht(r, e) {
|
|
|
630
630
|
};
|
|
631
631
|
}
|
|
632
632
|
}
|
|
633
|
-
function
|
|
633
|
+
function ft(r, e, t, n) {
|
|
634
634
|
if (r === "signin" && t) return t;
|
|
635
635
|
switch (r) {
|
|
636
636
|
case "signin":
|
|
@@ -646,12 +646,12 @@ function pt(r, e, t, n) {
|
|
|
646
646
|
return n("cta.continue", "Continue");
|
|
647
647
|
}
|
|
648
648
|
}
|
|
649
|
-
function
|
|
649
|
+
function gt({
|
|
650
650
|
mode: r,
|
|
651
651
|
allowSignup: e,
|
|
652
652
|
onSwitch: t
|
|
653
653
|
}) {
|
|
654
|
-
const { t: n } =
|
|
654
|
+
const { t: n } = S();
|
|
655
655
|
return r === "signin" && e ? /* @__PURE__ */ u("p", { class: "text-center text-sm text-gray-600", children: [
|
|
656
656
|
n("auth.no_account", "Don't have an account?"),
|
|
657
657
|
" ",
|
|
@@ -681,7 +681,7 @@ function Z({
|
|
|
681
681
|
}
|
|
682
682
|
);
|
|
683
683
|
}
|
|
684
|
-
function
|
|
684
|
+
function mt({ busy: r, label: e }) {
|
|
685
685
|
return /* @__PURE__ */ o(
|
|
686
686
|
"button",
|
|
687
687
|
{
|
|
@@ -696,7 +696,7 @@ function gt({ busy: r, label: e }) {
|
|
|
696
696
|
}
|
|
697
697
|
);
|
|
698
698
|
}
|
|
699
|
-
function
|
|
699
|
+
function ge({ type: r, placeholder: e, value: t, onInput: n, autocomplete: i, inputMode: s, required: a }) {
|
|
700
700
|
return /* @__PURE__ */ o(
|
|
701
701
|
"input",
|
|
702
702
|
{
|
|
@@ -711,13 +711,13 @@ function fe({ type: r, placeholder: e, value: t, onInput: n, autocomplete: i, in
|
|
|
711
711
|
}
|
|
712
712
|
);
|
|
713
713
|
}
|
|
714
|
-
function
|
|
715
|
-
const { t: s } =
|
|
714
|
+
function re({ placeholder: r, value: e, onInput: t, autocomplete: n, required: i }) {
|
|
715
|
+
const { t: s } = S(), [a, c] = k(!1), l = D(null);
|
|
716
716
|
P(() => {
|
|
717
|
-
const
|
|
718
|
-
|
|
717
|
+
const g = l.current;
|
|
718
|
+
g && g.value !== e && (g.value = e);
|
|
719
719
|
}, [a, e]);
|
|
720
|
-
const
|
|
720
|
+
const h = s("auth.show_password", "Show password"), d = s("auth.hide_password", "Hide password");
|
|
721
721
|
return /* @__PURE__ */ u("div", { class: "relative", children: [
|
|
722
722
|
/* @__PURE__ */ o(
|
|
723
723
|
"input",
|
|
@@ -726,7 +726,7 @@ function te({ placeholder: r, value: e, onInput: t, autocomplete: n, required: i
|
|
|
726
726
|
type: a ? "text" : "password",
|
|
727
727
|
value: e,
|
|
728
728
|
placeholder: r,
|
|
729
|
-
onInput: (
|
|
729
|
+
onInput: (g) => t(g.target.value),
|
|
730
730
|
autocomplete: n,
|
|
731
731
|
required: i,
|
|
732
732
|
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)]"
|
|
@@ -736,16 +736,16 @@ function te({ placeholder: r, value: e, onInput: t, autocomplete: n, required: i
|
|
|
736
736
|
"button",
|
|
737
737
|
{
|
|
738
738
|
type: "button",
|
|
739
|
-
onClick: () => c((
|
|
740
|
-
"aria-label": a ? d :
|
|
739
|
+
onClick: () => c((g) => !g),
|
|
740
|
+
"aria-label": a ? d : h,
|
|
741
741
|
tabIndex: -1,
|
|
742
742
|
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)]",
|
|
743
|
-
children: a ? /* @__PURE__ */ o(
|
|
743
|
+
children: a ? /* @__PURE__ */ o(bt, {}) : /* @__PURE__ */ o(yt, {})
|
|
744
744
|
}
|
|
745
745
|
)
|
|
746
746
|
] });
|
|
747
747
|
}
|
|
748
|
-
function
|
|
748
|
+
function yt() {
|
|
749
749
|
return /* @__PURE__ */ u("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
750
750
|
/* @__PURE__ */ o(
|
|
751
751
|
"path",
|
|
@@ -760,7 +760,7 @@ function mt() {
|
|
|
760
760
|
/* @__PURE__ */ o("circle", { cx: "10", cy: "10", r: "2.5", stroke: "currentColor", "stroke-width": "1.5" })
|
|
761
761
|
] });
|
|
762
762
|
}
|
|
763
|
-
function
|
|
763
|
+
function bt() {
|
|
764
764
|
return /* @__PURE__ */ u("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
765
765
|
/* @__PURE__ */ o(
|
|
766
766
|
"path",
|
|
@@ -785,22 +785,22 @@ function yt() {
|
|
|
785
785
|
] });
|
|
786
786
|
}
|
|
787
787
|
function xt({ email: r }) {
|
|
788
|
-
const { t: e } =
|
|
788
|
+
const { t: e } = S(), t = r ? e("auth.last_used", "Last · {email}", { email: wt(r) }) : e("auth.last_used_no_email", "Last");
|
|
789
789
|
return /* @__PURE__ */ o("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: t });
|
|
790
790
|
}
|
|
791
|
-
function
|
|
791
|
+
function wt(r) {
|
|
792
792
|
const [e, t] = r.split("@");
|
|
793
793
|
return t ? `${e.slice(0, 3)}*****@${t}` : r;
|
|
794
794
|
}
|
|
795
|
-
function
|
|
796
|
-
const { t: r } =
|
|
795
|
+
function kt() {
|
|
796
|
+
const { t: r } = S();
|
|
797
797
|
return /* @__PURE__ */ u("div", { class: "flex items-center gap-3 py-1 text-sm text-gray-400", children: [
|
|
798
798
|
/* @__PURE__ */ o("div", { class: "h-px flex-1 bg-gray-200" }),
|
|
799
799
|
/* @__PURE__ */ o("span", { children: r("auth.or", "or") }),
|
|
800
800
|
/* @__PURE__ */ o("div", { class: "h-px flex-1 bg-gray-200" })
|
|
801
801
|
] });
|
|
802
802
|
}
|
|
803
|
-
function
|
|
803
|
+
function vt({ provider: r }) {
|
|
804
804
|
return r === "google" ? /* @__PURE__ */ u("svg", { width: "20", height: "20", viewBox: "0 0 18 18", "aria-hidden": "true", children: [
|
|
805
805
|
/* @__PURE__ */ o("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" }),
|
|
806
806
|
/* @__PURE__ */ o("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" }),
|
|
@@ -813,7 +813,7 @@ function kt({ provider: r }) {
|
|
|
813
813
|
/* @__PURE__ */ o("svg", { width: "26", height: "26", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ o("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" }) })
|
|
814
814
|
) : r === "github" ? /* @__PURE__ */ o("svg", { width: "20", height: "20", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ o("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__ */ o("svg", { width: "18", height: "20", viewBox: "0 0 14 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ o("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" }) });
|
|
815
815
|
}
|
|
816
|
-
function
|
|
816
|
+
function _t({
|
|
817
817
|
block: r,
|
|
818
818
|
bootstrap: e,
|
|
819
819
|
auth: t,
|
|
@@ -823,7 +823,7 @@ function vt({
|
|
|
823
823
|
intent: a = "preauth",
|
|
824
824
|
initialMode: c
|
|
825
825
|
}) {
|
|
826
|
-
const { t: l } =
|
|
826
|
+
const { t: l } = S(), h = {
|
|
827
827
|
bootstrap: e,
|
|
828
828
|
selectedPriceId: null,
|
|
829
829
|
setSelectedPriceId: () => {
|
|
@@ -854,11 +854,11 @@ function vt({
|
|
|
854
854
|
submit_label: l("auth.log_in", "Sign In")
|
|
855
855
|
} : r;
|
|
856
856
|
return /* @__PURE__ */ u("div", { class: "relative flex-1 min-h-0 overflow-y-auto p-6 sm:p-8", children: [
|
|
857
|
-
s ? /* @__PURE__ */ o(
|
|
858
|
-
/* @__PURE__ */ o(
|
|
857
|
+
s ? /* @__PURE__ */ o(St, { onClick: i, ariaLabel: l("nav.back_aria", "Back") }) : null,
|
|
858
|
+
/* @__PURE__ */ o(Me, { block: d, ctx: h })
|
|
859
859
|
] });
|
|
860
860
|
}
|
|
861
|
-
function
|
|
861
|
+
function St({ onClick: r, ariaLabel: e }) {
|
|
862
862
|
return /* @__PURE__ */ o(
|
|
863
863
|
"button",
|
|
864
864
|
{
|
|
@@ -891,8 +891,8 @@ function _t({ onClick: r, ariaLabel: e }) {
|
|
|
891
891
|
}
|
|
892
892
|
);
|
|
893
893
|
}
|
|
894
|
-
const
|
|
895
|
-
function
|
|
894
|
+
const Ee = (r) => `pw-offer-${r}-start`;
|
|
895
|
+
function ne(r) {
|
|
896
896
|
const e = r - Date.now();
|
|
897
897
|
return e <= 0 ? { days: 0, hours: 0, minutes: 0, seconds: 0, expired: !0 } : {
|
|
898
898
|
days: Math.floor(e / (1e3 * 60 * 60 * 24)),
|
|
@@ -902,7 +902,7 @@ function re(r) {
|
|
|
902
902
|
expired: !1
|
|
903
903
|
};
|
|
904
904
|
}
|
|
905
|
-
function
|
|
905
|
+
function Ct(r) {
|
|
906
906
|
if (r.expires_at) {
|
|
907
907
|
const e = Date.parse(r.expires_at);
|
|
908
908
|
return Number.isFinite(e) ? e : null;
|
|
@@ -910,7 +910,7 @@ function St(r) {
|
|
|
910
910
|
if (r.duration_minutes && r.duration_minutes > 0) {
|
|
911
911
|
if (typeof window > "u") return null;
|
|
912
912
|
try {
|
|
913
|
-
const e =
|
|
913
|
+
const e = Ee(r.id);
|
|
914
914
|
let t = window.localStorage.getItem(e);
|
|
915
915
|
return t || (t = (/* @__PURE__ */ new Date()).toISOString(), window.localStorage.setItem(e, t)), Date.parse(t) + r.duration_minutes * 6e4;
|
|
916
916
|
} catch {
|
|
@@ -919,7 +919,7 @@ function St(r) {
|
|
|
919
919
|
}
|
|
920
920
|
return null;
|
|
921
921
|
}
|
|
922
|
-
function
|
|
922
|
+
function Te(r, e) {
|
|
923
923
|
if (!r || r.length === 0) return null;
|
|
924
924
|
if (e) {
|
|
925
925
|
const t = r.find((n) => n.id === e);
|
|
@@ -927,29 +927,29 @@ function Ee(r, e) {
|
|
|
927
927
|
}
|
|
928
928
|
return r.find((t) => t.expires_at || t.duration_minutes) ?? null;
|
|
929
929
|
}
|
|
930
|
-
function
|
|
931
|
-
const e = r ?
|
|
932
|
-
() => e !== null ?
|
|
933
|
-
), i =
|
|
930
|
+
function Be(r) {
|
|
931
|
+
const e = r ? Ct(r) : null, [t, n] = k(
|
|
932
|
+
() => e !== null ? ne(e) : null
|
|
933
|
+
), i = D(e);
|
|
934
934
|
return i.current = e, P(() => {
|
|
935
935
|
if (e === null) {
|
|
936
936
|
n(null);
|
|
937
937
|
return;
|
|
938
938
|
}
|
|
939
|
-
n(
|
|
939
|
+
n(ne(e));
|
|
940
940
|
const s = setInterval(() => {
|
|
941
|
-
const a =
|
|
941
|
+
const a = ne(i.current ?? 0);
|
|
942
942
|
if (n(a), a.expired && (clearInterval(s), r?.duration_minutes && typeof window < "u"))
|
|
943
943
|
try {
|
|
944
|
-
window.localStorage.removeItem(
|
|
944
|
+
window.localStorage.removeItem(Ee(r.id));
|
|
945
945
|
} catch {
|
|
946
946
|
}
|
|
947
947
|
}, 1e3);
|
|
948
948
|
return () => clearInterval(s);
|
|
949
949
|
}, [e, r?.duration_minutes, r?.id]), t;
|
|
950
950
|
}
|
|
951
|
-
function
|
|
952
|
-
const { t } =
|
|
951
|
+
function It({ block: r, ctx: e }) {
|
|
952
|
+
const { t } = S(), n = Te(e.bootstrap.offers, r.offer_id), i = Be(n);
|
|
953
953
|
if (!n || i === null || i.expired && !r.force) return null;
|
|
954
954
|
const s = r.title ?? n.label ?? t("offer.limited_time", "Limited-time offer"), a = n.discount_percent ? `${s} ${n.discount_percent}%` : s;
|
|
955
955
|
return /* @__PURE__ */ u(
|
|
@@ -962,16 +962,16 @@ function Ct({ block: r, ctx: e }) {
|
|
|
962
962
|
},
|
|
963
963
|
role: "status",
|
|
964
964
|
children: [
|
|
965
|
-
/* @__PURE__ */ o(
|
|
965
|
+
/* @__PURE__ */ o(Oe, {}),
|
|
966
966
|
/* @__PURE__ */ o("span", { children: a }),
|
|
967
|
-
/* @__PURE__ */ o(
|
|
967
|
+
/* @__PURE__ */ o(Pe, { value: i, t })
|
|
968
968
|
]
|
|
969
969
|
}
|
|
970
970
|
);
|
|
971
971
|
}
|
|
972
|
-
function
|
|
972
|
+
function Pe({ value: r, t: e }) {
|
|
973
973
|
return /* @__PURE__ */ u("div", { class: "flex items-center gap-1 font-mono text-sm", children: [
|
|
974
|
-
r.days > 0 ? /* @__PURE__ */ u(
|
|
974
|
+
r.days > 0 ? /* @__PURE__ */ u(ae, { children: [
|
|
975
975
|
/* @__PURE__ */ o(H, { children: String(r.days) }),
|
|
976
976
|
/* @__PURE__ */ o("span", { class: "text-xs", children: e("countdown.d", "d") })
|
|
977
977
|
] }) : null,
|
|
@@ -986,8 +986,8 @@ function Te({ value: r, t: e }) {
|
|
|
986
986
|
function H({ children: r }) {
|
|
987
987
|
return /* @__PURE__ */ o("span", { class: "rounded bg-black/20 px-1.5 py-0.5 text-xs font-bold", children: r });
|
|
988
988
|
}
|
|
989
|
-
function
|
|
990
|
-
const { t: e } =
|
|
989
|
+
function At({ offer: r }) {
|
|
990
|
+
const { t: e } = S(), t = Be(r);
|
|
991
991
|
if (t === null || t.expired) return null;
|
|
992
992
|
const n = r.label ?? e("offer.limited_time", "Limited-time offer"), i = r.discount_percent ? `${n} ${r.discount_percent}%` : n;
|
|
993
993
|
return /* @__PURE__ */ u(
|
|
@@ -1000,14 +1000,14 @@ function It({ offer: r }) {
|
|
|
1000
1000
|
},
|
|
1001
1001
|
role: "status",
|
|
1002
1002
|
children: [
|
|
1003
|
-
/* @__PURE__ */ o(
|
|
1003
|
+
/* @__PURE__ */ o(Oe, {}),
|
|
1004
1004
|
/* @__PURE__ */ o("span", { children: i }),
|
|
1005
|
-
/* @__PURE__ */ o(
|
|
1005
|
+
/* @__PURE__ */ o(Pe, { value: t, t: e })
|
|
1006
1006
|
]
|
|
1007
1007
|
}
|
|
1008
1008
|
);
|
|
1009
1009
|
}
|
|
1010
|
-
function
|
|
1010
|
+
function Oe() {
|
|
1011
1011
|
return /* @__PURE__ */ o(
|
|
1012
1012
|
"svg",
|
|
1013
1013
|
{
|
|
@@ -1026,39 +1026,39 @@ function Be() {
|
|
|
1026
1026
|
}
|
|
1027
1027
|
);
|
|
1028
1028
|
}
|
|
1029
|
-
const
|
|
1030
|
-
function
|
|
1031
|
-
const { t: i } =
|
|
1032
|
-
const
|
|
1033
|
-
return
|
|
1034
|
-
min:
|
|
1035
|
-
max: me
|
|
1036
|
-
})), (z.length < 1 || z.length > ye) && (B.message = i("support.message_length", "{min}–{max} characters", {
|
|
1037
|
-
min: 1,
|
|
1029
|
+
const me = 3, ye = 200, be = 5e3, ie = 5, Lt = 10 * 1024 * 1024, xe = ["image/jpeg", "image/png", "image/webp"], Mt = /.+@.+\..+/;
|
|
1030
|
+
function Et({ client: r, authSession: e, origin: t, onBack: n }) {
|
|
1031
|
+
const { t: i } = S(), s = e?.user.email ?? "", a = s || null, [c, l] = k(s), [h, d] = k(""), [g, _] = k(""), [p, v] = k([]), [m, A] = k(!1), [b, y] = k(null), [C, I] = k({}), U = () => {
|
|
1032
|
+
const T = {}, E = (a ?? c).trim(), z = h.trim(), q = g.trim();
|
|
1033
|
+
return E ? Mt.test(E.toLowerCase()) || (T.email = i("support.invalid_email", "Invalid email")) : T.email = i("support.required", "Required"), (z.length < me || z.length > ye) && (T.subject = i("support.subject_length", "{min}–{max} characters", {
|
|
1034
|
+
min: me,
|
|
1038
1035
|
max: ye
|
|
1039
|
-
})),
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1036
|
+
})), (q.length < 1 || q.length > be) && (T.message = i("support.message_length", "{min}–{max} characters", {
|
|
1037
|
+
min: 1,
|
|
1038
|
+
max: be
|
|
1039
|
+
})), I(T), Object.keys(T).length === 0;
|
|
1040
|
+
}, M = async (T) => {
|
|
1041
|
+
if (T.preventDefault(), !m && U()) {
|
|
1042
|
+
A(!0), I((E) => ({ ...E, submit: void 0 }));
|
|
1043
1043
|
try {
|
|
1044
|
-
const
|
|
1044
|
+
const E = (a ?? c).trim();
|
|
1045
1045
|
await r.createSupportTicket({
|
|
1046
|
-
subject:
|
|
1047
|
-
content:
|
|
1048
|
-
email:
|
|
1049
|
-
files:
|
|
1050
|
-
}),
|
|
1051
|
-
} catch (
|
|
1052
|
-
const
|
|
1053
|
-
|
|
1046
|
+
subject: h.trim(),
|
|
1047
|
+
content: g.trim(),
|
|
1048
|
+
email: E || void 0,
|
|
1049
|
+
files: p.length > 0 ? p : void 0
|
|
1050
|
+
}), y(E);
|
|
1051
|
+
} catch (E) {
|
|
1052
|
+
const z = E instanceof L && E.message || "Failed to send. Please try again.";
|
|
1053
|
+
I((q) => ({ ...q, submit: z }));
|
|
1054
1054
|
} finally {
|
|
1055
|
-
|
|
1055
|
+
A(!1);
|
|
1056
1056
|
}
|
|
1057
1057
|
}
|
|
1058
|
-
},
|
|
1059
|
-
d(""),
|
|
1060
|
-
}, j = "flex flex-col gap-3 bg-white px-6 pb-6 pt-3 sm:px-8",
|
|
1061
|
-
return
|
|
1058
|
+
}, O = () => {
|
|
1059
|
+
d(""), _(""), v([]), I({}), y(null);
|
|
1060
|
+
}, j = "flex flex-col gap-3 bg-white px-6 pb-6 pt-3 sm:px-8", R = { boxShadow: "0 -4px 12px -4px rgba(15,23,42,0.06)" };
|
|
1061
|
+
return b ? /* @__PURE__ */ u("div", { class: "relative flex-1 min-h-0 flex flex-col", children: [
|
|
1062
1062
|
/* @__PURE__ */ u("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: [
|
|
1063
1063
|
/* @__PURE__ */ o(
|
|
1064
1064
|
"div",
|
|
@@ -1086,11 +1086,11 @@ function Mt({ client: r, authSession: e, origin: t, onBack: n }) {
|
|
|
1086
1086
|
"We've received your message and will respond to"
|
|
1087
1087
|
),
|
|
1088
1088
|
" ",
|
|
1089
|
-
/* @__PURE__ */ o("b", { class: "text-gray-700", children:
|
|
1089
|
+
/* @__PURE__ */ o("b", { class: "text-gray-700", children: b }),
|
|
1090
1090
|
"."
|
|
1091
1091
|
] })
|
|
1092
1092
|
] }),
|
|
1093
|
-
/* @__PURE__ */ o("div", { class: j, style:
|
|
1093
|
+
/* @__PURE__ */ o("div", { class: j, style: R, children: /* @__PURE__ */ u("div", { class: "flex items-center justify-center gap-3", children: [
|
|
1094
1094
|
/* @__PURE__ */ o(
|
|
1095
1095
|
"button",
|
|
1096
1096
|
{
|
|
@@ -1104,7 +1104,7 @@ function Mt({ client: r, authSession: e, origin: t, onBack: n }) {
|
|
|
1104
1104
|
"button",
|
|
1105
1105
|
{
|
|
1106
1106
|
type: "button",
|
|
1107
|
-
onClick:
|
|
1107
|
+
onClick: O,
|
|
1108
1108
|
class: "flex h-10 items-center justify-center rounded-xl px-4 text-sm font-semibold text-white transition-all hover:-translate-y-px hover:brightness-105 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--pw-accent)]",
|
|
1109
1109
|
style: {
|
|
1110
1110
|
background: "linear-gradient(180deg, color-mix(in srgb, var(--pw-accent) 92%, white), var(--pw-accent))",
|
|
@@ -1114,8 +1114,8 @@ function Mt({ client: r, authSession: e, origin: t, onBack: n }) {
|
|
|
1114
1114
|
}
|
|
1115
1115
|
)
|
|
1116
1116
|
] }) })
|
|
1117
|
-
] }) : /* @__PURE__ */ u("form", { onSubmit:
|
|
1118
|
-
/* @__PURE__ */ o(
|
|
1117
|
+
] }) : /* @__PURE__ */ u("form", { onSubmit: M, class: "relative flex-1 min-h-0 flex flex-col", children: [
|
|
1118
|
+
/* @__PURE__ */ o(Tt, { onClick: n, ariaLabel: i("nav.back_aria", "Back") }),
|
|
1119
1119
|
/* @__PURE__ */ o("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__ */ u("div", { class: "flex flex-col gap-5", children: [
|
|
1120
1120
|
/* @__PURE__ */ u("div", { class: "flex flex-col gap-2 pr-10", children: [
|
|
1121
1121
|
/* @__PURE__ */ o("h2", { class: "text-3xl font-bold tracking-tight text-gray-900", children: i("support.heading", "Support") }),
|
|
@@ -1127,50 +1127,50 @@ function Mt({ client: r, authSession: e, origin: t, onBack: n }) {
|
|
|
1127
1127
|
" ",
|
|
1128
1128
|
/* @__PURE__ */ o("b", { class: "font-medium text-gray-900", children: a })
|
|
1129
1129
|
] }) : /* @__PURE__ */ o(
|
|
1130
|
-
|
|
1130
|
+
we,
|
|
1131
1131
|
{
|
|
1132
1132
|
type: "email",
|
|
1133
1133
|
placeholder: i("support.email_placeholder", "Enter your email *"),
|
|
1134
1134
|
value: c,
|
|
1135
1135
|
onInput: l,
|
|
1136
|
-
error:
|
|
1136
|
+
error: C.email,
|
|
1137
1137
|
autocomplete: "email",
|
|
1138
1138
|
required: !0
|
|
1139
1139
|
}
|
|
1140
1140
|
),
|
|
1141
1141
|
/* @__PURE__ */ o(
|
|
1142
|
-
|
|
1142
|
+
we,
|
|
1143
1143
|
{
|
|
1144
1144
|
type: "text",
|
|
1145
1145
|
placeholder: i("support.subject_placeholder", "Enter your subject *"),
|
|
1146
|
-
value:
|
|
1146
|
+
value: h,
|
|
1147
1147
|
onInput: d,
|
|
1148
|
-
error:
|
|
1148
|
+
error: C.subject,
|
|
1149
1149
|
required: !0
|
|
1150
1150
|
}
|
|
1151
1151
|
),
|
|
1152
1152
|
/* @__PURE__ */ o(
|
|
1153
|
-
|
|
1153
|
+
Bt,
|
|
1154
1154
|
{
|
|
1155
1155
|
placeholder: i("support.message_placeholder", "Enter your message *"),
|
|
1156
|
-
value:
|
|
1157
|
-
onInput:
|
|
1158
|
-
error:
|
|
1156
|
+
value: g,
|
|
1157
|
+
onInput: _,
|
|
1158
|
+
error: C.message,
|
|
1159
1159
|
required: !0
|
|
1160
1160
|
}
|
|
1161
1161
|
),
|
|
1162
|
-
/* @__PURE__ */ o(
|
|
1162
|
+
/* @__PURE__ */ o(Pt, { files: p, onChange: v, disabled: m })
|
|
1163
1163
|
] })
|
|
1164
1164
|
] }) }),
|
|
1165
|
-
/* @__PURE__ */ u("div", { class: j, style:
|
|
1166
|
-
|
|
1165
|
+
/* @__PURE__ */ u("div", { class: j, style: R, children: [
|
|
1166
|
+
C.submit && /* @__PURE__ */ o("p", { class: "text-sm text-red-600", children: C.submit }),
|
|
1167
1167
|
/* @__PURE__ */ u("div", { class: "flex items-center justify-end gap-3", children: [
|
|
1168
1168
|
/* @__PURE__ */ o(
|
|
1169
1169
|
"button",
|
|
1170
1170
|
{
|
|
1171
1171
|
type: "button",
|
|
1172
1172
|
onClick: n,
|
|
1173
|
-
disabled:
|
|
1173
|
+
disabled: m,
|
|
1174
1174
|
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)]",
|
|
1175
1175
|
children: t === "standalone" ? i("support.close_button", "Close") : i("nav.back_aria", "Back")
|
|
1176
1176
|
}
|
|
@@ -1179,20 +1179,20 @@ function Mt({ client: r, authSession: e, origin: t, onBack: n }) {
|
|
|
1179
1179
|
"button",
|
|
1180
1180
|
{
|
|
1181
1181
|
type: "submit",
|
|
1182
|
-
disabled:
|
|
1182
|
+
disabled: m,
|
|
1183
1183
|
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)]",
|
|
1184
1184
|
style: {
|
|
1185
1185
|
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%)",
|
|
1186
1186
|
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)"
|
|
1187
1187
|
},
|
|
1188
|
-
children:
|
|
1188
|
+
children: m ? /* @__PURE__ */ o("span", { class: "relative z-10 inline-block h-4 w-4 animate-spin rounded-full border-2 border-white/40 border-t-white" }) : /* @__PURE__ */ o("span", { class: "relative z-10", children: i("support.send_button", "Send") })
|
|
1189
1189
|
}
|
|
1190
1190
|
)
|
|
1191
1191
|
] })
|
|
1192
1192
|
] })
|
|
1193
1193
|
] });
|
|
1194
1194
|
}
|
|
1195
|
-
function
|
|
1195
|
+
function Tt({ onClick: r, ariaLabel: e }) {
|
|
1196
1196
|
return /* @__PURE__ */ o(
|
|
1197
1197
|
"button",
|
|
1198
1198
|
{
|
|
@@ -1225,7 +1225,7 @@ function Et({ onClick: r, ariaLabel: e }) {
|
|
|
1225
1225
|
}
|
|
1226
1226
|
);
|
|
1227
1227
|
}
|
|
1228
|
-
function
|
|
1228
|
+
function we({
|
|
1229
1229
|
type: r,
|
|
1230
1230
|
placeholder: e,
|
|
1231
1231
|
value: t,
|
|
@@ -1250,7 +1250,7 @@ function be({
|
|
|
1250
1250
|
i && /* @__PURE__ */ o("span", { class: "mt-1 ml-2 block text-sm text-red-600", children: i })
|
|
1251
1251
|
] });
|
|
1252
1252
|
}
|
|
1253
|
-
function
|
|
1253
|
+
function Bt({
|
|
1254
1254
|
placeholder: r,
|
|
1255
1255
|
value: e,
|
|
1256
1256
|
onInput: t,
|
|
@@ -1272,23 +1272,23 @@ function Pt({
|
|
|
1272
1272
|
n && /* @__PURE__ */ o("span", { class: "mt-1 ml-2 block text-sm text-red-600", children: n })
|
|
1273
1273
|
] });
|
|
1274
1274
|
}
|
|
1275
|
-
function
|
|
1276
|
-
const { t: n } =
|
|
1275
|
+
function Pt({ files: r, onChange: e, disabled: t }) {
|
|
1276
|
+
const { t: n } = S(), i = D(null), [s, a] = k(!1), [c, l] = k(null), h = (d) => {
|
|
1277
1277
|
if (!d || t) return;
|
|
1278
1278
|
l(null);
|
|
1279
|
-
const
|
|
1280
|
-
if (r.length +
|
|
1281
|
-
l(n("support.too_many_files", "Up to {max} files", { max:
|
|
1279
|
+
const g = Array.from(d);
|
|
1280
|
+
if (r.length + g.length > ie) {
|
|
1281
|
+
l(n("support.too_many_files", "Up to {max} files", { max: ie }));
|
|
1282
1282
|
return;
|
|
1283
1283
|
}
|
|
1284
|
-
const
|
|
1285
|
-
(
|
|
1284
|
+
const _ = g.filter(
|
|
1285
|
+
(p) => xe.includes(p.type) && p.size <= Lt
|
|
1286
1286
|
);
|
|
1287
|
-
if (
|
|
1287
|
+
if (_.length !== g.length) {
|
|
1288
1288
|
l(n("support.invalid_file", "Only JPEG/PNG/WebP, ≤ 10MB each"));
|
|
1289
1289
|
return;
|
|
1290
1290
|
}
|
|
1291
|
-
e([...r, ...
|
|
1291
|
+
e([...r, ..._]);
|
|
1292
1292
|
};
|
|
1293
1293
|
return /* @__PURE__ */ u("div", { children: [
|
|
1294
1294
|
/* @__PURE__ */ o("span", { class: "text-xs font-medium text-gray-700", children: n("support.attachments_label", "Attachments (optional)") }),
|
|
@@ -1304,13 +1304,13 @@ function Tt({ files: r, onChange: e, disabled: t }) {
|
|
|
1304
1304
|
},
|
|
1305
1305
|
onDragLeave: () => a(!1),
|
|
1306
1306
|
onDrop: (d) => {
|
|
1307
|
-
d.preventDefault(), a(!1),
|
|
1307
|
+
d.preventDefault(), a(!1), h(d.dataTransfer?.files ?? null);
|
|
1308
1308
|
},
|
|
1309
1309
|
class: `mt-1.5 cursor-pointer rounded-2xl border border-dashed p-3.5 text-center transition-all ${s ? "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"} ${t ? "cursor-not-allowed opacity-60" : ""}`,
|
|
1310
1310
|
children: [
|
|
1311
1311
|
/* @__PURE__ */ o("div", { class: "text-xs text-gray-500", children: n("support.dropzone_text", "Drop images here or click to select") }),
|
|
1312
1312
|
/* @__PURE__ */ o("div", { class: "mt-0.5 text-[11px] text-gray-400", children: n("support.file_requirements", "JPEG/PNG/WebP, up to {max} files, ≤ 10MB each", {
|
|
1313
|
-
max:
|
|
1313
|
+
max: ie
|
|
1314
1314
|
}) })
|
|
1315
1315
|
]
|
|
1316
1316
|
}
|
|
@@ -1324,12 +1324,12 @@ function Tt({ files: r, onChange: e, disabled: t }) {
|
|
|
1324
1324
|
accept: xe.join(","),
|
|
1325
1325
|
class: "hidden",
|
|
1326
1326
|
onChange: (d) => {
|
|
1327
|
-
|
|
1327
|
+
h(d.target.files), d.currentTarget.value = "";
|
|
1328
1328
|
}
|
|
1329
1329
|
}
|
|
1330
1330
|
),
|
|
1331
1331
|
c && /* @__PURE__ */ o("p", { class: "mt-1 text-xs text-red-600", children: c }),
|
|
1332
|
-
r.length > 0 && /* @__PURE__ */ o("ul", { class: "mt-2 flex flex-col gap-1", children: r.map((d,
|
|
1332
|
+
r.length > 0 && /* @__PURE__ */ o("ul", { class: "mt-2 flex flex-col gap-1", children: r.map((d, g) => /* @__PURE__ */ u(
|
|
1333
1333
|
"li",
|
|
1334
1334
|
{
|
|
1335
1335
|
class: "flex items-center justify-between gap-2 rounded bg-gray-50 px-2 py-1 text-xs",
|
|
@@ -1340,8 +1340,8 @@ function Tt({ files: r, onChange: e, disabled: t }) {
|
|
|
1340
1340
|
{
|
|
1341
1341
|
type: "button",
|
|
1342
1342
|
onClick: () => {
|
|
1343
|
-
const
|
|
1344
|
-
|
|
1343
|
+
const _ = [...r];
|
|
1344
|
+
_.splice(g, 1), e(_);
|
|
1345
1345
|
},
|
|
1346
1346
|
disabled: t,
|
|
1347
1347
|
class: "text-gray-500 hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-60",
|
|
@@ -1351,38 +1351,38 @@ function Tt({ files: r, onChange: e, disabled: t }) {
|
|
|
1351
1351
|
)
|
|
1352
1352
|
]
|
|
1353
1353
|
},
|
|
1354
|
-
`${d.name}-${d.size}-${
|
|
1354
|
+
`${d.name}-${d.size}-${g}`
|
|
1355
1355
|
)) })
|
|
1356
1356
|
] });
|
|
1357
1357
|
}
|
|
1358
|
-
const
|
|
1358
|
+
const Ot = {
|
|
1359
1359
|
day: "cta.get_plan_daily",
|
|
1360
1360
|
week: "cta.get_plan_weekly",
|
|
1361
1361
|
month: "cta.get_plan_monthly",
|
|
1362
1362
|
year: "cta.get_plan_yearly"
|
|
1363
|
-
},
|
|
1363
|
+
}, Ut = {
|
|
1364
1364
|
day: "Get Daily Plan",
|
|
1365
1365
|
week: "Get Weekly Plan",
|
|
1366
1366
|
month: "Get Monthly Plan",
|
|
1367
1367
|
year: "Get Yearly Plan"
|
|
1368
1368
|
};
|
|
1369
|
-
function
|
|
1369
|
+
function jt(r, e, t, n) {
|
|
1370
1370
|
if (e === "close") return n("cta.close", "Close");
|
|
1371
1371
|
if (!r) return n("cta.continue", "Continue");
|
|
1372
1372
|
if (!t && r.trial_days && r.interval && r.interval !== "lifetime")
|
|
1373
1373
|
return n("cta.start_trial", "Start {days}-Day Free Trial", { days: r.trial_days });
|
|
1374
1374
|
if (!r.interval || r.interval === "lifetime")
|
|
1375
1375
|
return n("cta.get_lifetime_access", "Get Lifetime Access");
|
|
1376
|
-
const i =
|
|
1377
|
-
return i ? n(i,
|
|
1378
|
-
interval:
|
|
1376
|
+
const i = Ot[r.interval];
|
|
1377
|
+
return i ? n(i, Ut[r.interval]) : n("cta.get_plan_generic", "Get {interval} Plan", {
|
|
1378
|
+
interval: Dt(r.interval)
|
|
1379
1379
|
});
|
|
1380
1380
|
}
|
|
1381
|
-
function
|
|
1381
|
+
function Dt(r) {
|
|
1382
1382
|
return r.length ? r[0].toUpperCase() + r.slice(1) : r;
|
|
1383
1383
|
}
|
|
1384
1384
|
function Rt({ block: r, ctx: e }) {
|
|
1385
|
-
const { t } =
|
|
1385
|
+
const { t } = S(), [n, i] = k(!1), s = r.priceId ?? e.selectedPriceId, a = n || r.action === "checkout" && !s, c = s ? e.bootstrap.prices.find((g) => g.id === s) ?? null : null, l = e.bootstrap.user?.had_previous_trial ?? !1, h = r.label ?? jt(c, r.action, l, t);
|
|
1386
1386
|
return /* @__PURE__ */ u(
|
|
1387
1387
|
"button",
|
|
1388
1388
|
{
|
|
@@ -1414,13 +1414,13 @@ function Rt({ block: r, ctx: e }) {
|
|
|
1414
1414
|
"aria-hidden": "true"
|
|
1415
1415
|
}
|
|
1416
1416
|
),
|
|
1417
|
-
n ? /* @__PURE__ */ o("span", { class: "relative z-10 inline-block h-4 w-4 animate-spin rounded-full border-2 border-white/40 border-t-white" }) : /* @__PURE__ */ o("span", { class: "relative z-10", children:
|
|
1417
|
+
n ? /* @__PURE__ */ o("span", { class: "relative z-10 inline-block h-4 w-4 animate-spin rounded-full border-2 border-white/40 border-t-white" }) : /* @__PURE__ */ o("span", { class: "relative z-10", children: h })
|
|
1418
1418
|
]
|
|
1419
1419
|
}
|
|
1420
1420
|
);
|
|
1421
1421
|
}
|
|
1422
|
-
function
|
|
1423
|
-
const { t: e } =
|
|
1422
|
+
function zt({ ctx: r }) {
|
|
1423
|
+
const { t: e } = S(), t = r.authSession, n = r.auth, [i, s] = k(!1), a = () => r.onAction("support");
|
|
1424
1424
|
if (t && !t.user.is_anonymous) {
|
|
1425
1425
|
const c = async () => {
|
|
1426
1426
|
if (!(!n || i)) {
|
|
@@ -1441,14 +1441,14 @@ function Dt({ ctx: r }) {
|
|
|
1441
1441
|
] }),
|
|
1442
1442
|
/* @__PURE__ */ u("div", { class: "flex items-center justify-center gap-3", children: [
|
|
1443
1443
|
/* @__PURE__ */ o(G, { onClick: c, disabled: !n || i, children: i ? e("session.signing_out", "Signing out…") : e("session.sign_out", "Sign Out") }),
|
|
1444
|
-
/* @__PURE__ */ o(
|
|
1444
|
+
/* @__PURE__ */ o(ke, {}),
|
|
1445
1445
|
/* @__PURE__ */ o(G, { onClick: a, children: e("session.contact_support", "Contact Support") })
|
|
1446
1446
|
] })
|
|
1447
1447
|
] });
|
|
1448
1448
|
}
|
|
1449
1449
|
return /* @__PURE__ */ u("div", { class: "-mt-3 flex items-center justify-center gap-3 pt-1 text-center text-[13px]", children: [
|
|
1450
1450
|
/* @__PURE__ */ o(G, { onClick: () => r.onAction("restore"), children: e("session.restore_purchases", "Restore purchases") }),
|
|
1451
|
-
/* @__PURE__ */ o(
|
|
1451
|
+
/* @__PURE__ */ o(ke, {}),
|
|
1452
1452
|
/* @__PURE__ */ o(G, { onClick: a, children: e("session.contact_support", "Contact Support") })
|
|
1453
1453
|
] });
|
|
1454
1454
|
}
|
|
@@ -1469,10 +1469,10 @@ function G({
|
|
|
1469
1469
|
}
|
|
1470
1470
|
);
|
|
1471
1471
|
}
|
|
1472
|
-
function
|
|
1472
|
+
function ke() {
|
|
1473
1473
|
return /* @__PURE__ */ o("span", { class: "h-1 w-1 rounded-full bg-gray-300", "aria-hidden": "true" });
|
|
1474
1474
|
}
|
|
1475
|
-
function
|
|
1475
|
+
function qt({ block: r }) {
|
|
1476
1476
|
return r.items.length ? /* @__PURE__ */ o("ul", { class: "flex flex-col gap-2.5", role: "list", children: r.items.map((e) => /* @__PURE__ */ u("li", { class: "flex items-start gap-3 text-sm text-gray-700", children: [
|
|
1477
1477
|
/* @__PURE__ */ o(
|
|
1478
1478
|
"svg",
|
|
@@ -1502,10 +1502,10 @@ function zt({ block: r }) {
|
|
|
1502
1502
|
] }, e.id)) }) : null;
|
|
1503
1503
|
}
|
|
1504
1504
|
function Nt({ block: r }) {
|
|
1505
|
-
const { t: e } =
|
|
1505
|
+
const { t: e } = S(), t = r.title ?? e("pricing.money_back", "30-day money-back guarantee"), n = r.subtitle, i = (r.icon ?? "dollar_shield") !== "none", s = Ft(t);
|
|
1506
1506
|
return /* @__PURE__ */ u("div", { class: "flex flex-col items-center gap-1.5 border-b-1 pb-4 mb-1 border-gray-100", children: [
|
|
1507
1507
|
/* @__PURE__ */ u("div", { class: "inline-flex items-center gap-2 text-[12px] text-gray-700", children: [
|
|
1508
|
-
i ? /* @__PURE__ */ o(
|
|
1508
|
+
i ? /* @__PURE__ */ o($t, {}) : null,
|
|
1509
1509
|
s ? /* @__PURE__ */ u("span", { children: [
|
|
1510
1510
|
/* @__PURE__ */ o("b", { class: "font-bold text-gray-900", children: s.bold }),
|
|
1511
1511
|
" ",
|
|
@@ -1515,11 +1515,11 @@ function Nt({ block: r }) {
|
|
|
1515
1515
|
n ? /* @__PURE__ */ o("span", { class: "text-center text-xs leading-relaxed text-gray-500", children: n }) : null
|
|
1516
1516
|
] });
|
|
1517
1517
|
}
|
|
1518
|
-
function
|
|
1518
|
+
function Ft(r) {
|
|
1519
1519
|
const e = r.match(/^(\d+[-\s]?days?)\s+(.+)$/i);
|
|
1520
1520
|
return e ? { bold: e[1], rest: e[2] } : null;
|
|
1521
1521
|
}
|
|
1522
|
-
function
|
|
1522
|
+
function $t() {
|
|
1523
1523
|
return /* @__PURE__ */ u(
|
|
1524
1524
|
"svg",
|
|
1525
1525
|
{
|
|
@@ -1554,22 +1554,22 @@ function Ft() {
|
|
|
1554
1554
|
}
|
|
1555
1555
|
);
|
|
1556
1556
|
}
|
|
1557
|
-
const
|
|
1558
|
-
function
|
|
1559
|
-
const t = e *
|
|
1560
|
-
let n =
|
|
1561
|
-
for (r.style.fontSize = `${n}px`; r.scrollHeight > t && n >
|
|
1557
|
+
const Ue = 24, Vt = 16, Ht = 2;
|
|
1558
|
+
function Gt(r, e) {
|
|
1559
|
+
const t = e * Ht;
|
|
1560
|
+
let n = Ue;
|
|
1561
|
+
for (r.style.fontSize = `${n}px`; r.scrollHeight > t && n > Vt; )
|
|
1562
1562
|
n -= 1, r.style.fontSize = `${n}px`;
|
|
1563
1563
|
}
|
|
1564
|
-
function
|
|
1565
|
-
const t = r.level ?? 1, n = `h${t}`, i = t === 1 ? "text-[22px] sm:text-2xl font-semibold leading-tight text-center text-balance text-gray-800" : t === 2 ? "text-xl font-semibold leading-snug text-gray-900 tracking-tight" : "text-base font-medium text-gray-900", s =
|
|
1564
|
+
function Wt({ block: r, ctx: e }) {
|
|
1565
|
+
const t = r.level ?? 1, n = `h${t}`, i = t === 1 ? "text-[22px] sm:text-2xl font-semibold leading-tight text-center text-balance text-gray-800" : t === 2 ? "text-xl font-semibold leading-snug text-gray-900 tracking-tight" : "text-base font-medium text-gray-900", s = D(null), a = t === 1 && !!e.bootstrap.settings.title_auto_fit;
|
|
1566
1566
|
return P(() => {
|
|
1567
1567
|
if (!a || !s.current) return;
|
|
1568
|
-
const c = getComputedStyle(s.current), l = parseFloat(c.lineHeight) ||
|
|
1569
|
-
|
|
1568
|
+
const c = getComputedStyle(s.current), l = parseFloat(c.lineHeight) || Ue * 1.5;
|
|
1569
|
+
Gt(s.current, l);
|
|
1570
1570
|
}, [a, r.text]), /* @__PURE__ */ o(n, { ref: s, class: i, children: r.text });
|
|
1571
1571
|
}
|
|
1572
|
-
function
|
|
1572
|
+
function Zt(r) {
|
|
1573
1573
|
const e = r.local ?? { currency: r.currency, amount: r.amount };
|
|
1574
1574
|
if (r.interval === "year") {
|
|
1575
1575
|
const t = (r.interval_count ?? 1) * 12;
|
|
@@ -1577,7 +1577,7 @@ function Wt(r) {
|
|
|
1577
1577
|
}
|
|
1578
1578
|
return { amount: e.amount, currency: e.currency };
|
|
1579
1579
|
}
|
|
1580
|
-
function
|
|
1580
|
+
function oe(r, e) {
|
|
1581
1581
|
const t = r % 1 !== 0 ? 2 : 0;
|
|
1582
1582
|
try {
|
|
1583
1583
|
const n = new Intl.NumberFormat(void 0, {
|
|
@@ -1595,20 +1595,20 @@ function ie(r, e) {
|
|
|
1595
1595
|
return { currency: e, amount: String(r) };
|
|
1596
1596
|
}
|
|
1597
1597
|
}
|
|
1598
|
-
function
|
|
1599
|
-
const { amount: t, currency: n } =
|
|
1598
|
+
function le(r, e) {
|
|
1599
|
+
const { amount: t, currency: n } = Zt(r);
|
|
1600
1600
|
if (!e) {
|
|
1601
|
-
const { currency: c, amount: l } =
|
|
1601
|
+
const { currency: c, amount: l } = oe(t, n);
|
|
1602
1602
|
return { currency: c, amount: l, originalAmount: null };
|
|
1603
1603
|
}
|
|
1604
|
-
const i = t * (1 - e / 100), s =
|
|
1604
|
+
const i = t * (1 - e / 100), s = oe(i, n), a = oe(t, n);
|
|
1605
1605
|
return {
|
|
1606
1606
|
currency: s.currency,
|
|
1607
1607
|
amount: s.amount,
|
|
1608
1608
|
originalAmount: `${a.currency}${a.amount}`
|
|
1609
1609
|
};
|
|
1610
1610
|
}
|
|
1611
|
-
function
|
|
1611
|
+
function je(r, e) {
|
|
1612
1612
|
if (r.label) return r.label.toUpperCase();
|
|
1613
1613
|
if (!r.interval || r.interval === "lifetime")
|
|
1614
1614
|
return e("pricing.plan_label.lifetime", "LIFETIME");
|
|
@@ -1620,15 +1620,15 @@ function Ue(r, e) {
|
|
|
1620
1620
|
}[r.interval];
|
|
1621
1621
|
return n ? e(n.key, n.fallback) : `${r.interval.toUpperCase()} PLAN`;
|
|
1622
1622
|
}
|
|
1623
|
-
function
|
|
1623
|
+
function ce(r, e) {
|
|
1624
1624
|
if (!r.interval || r.interval === "lifetime")
|
|
1625
1625
|
return e("pricing.interval.lifetime_short", "lifetime");
|
|
1626
1626
|
if (r.interval === "year") return e("pricing.interval.month", "month");
|
|
1627
1627
|
const t = r.interval_count ?? 1;
|
|
1628
1628
|
return t === 1 ? e(`pricing.interval.${r.interval}`, r.interval) : `${t} ${r.interval}s`;
|
|
1629
1629
|
}
|
|
1630
|
-
function
|
|
1631
|
-
const { t } =
|
|
1630
|
+
function Yt({ block: r, ctx: e }) {
|
|
1631
|
+
const { t } = S(), n = r.priceIds && r.priceIds.length > 0 ? new Set(r.priceIds) : null, i = e.bootstrap.prices.filter((a) => !n || n.has(a.id));
|
|
1632
1632
|
if (i.length === 0)
|
|
1633
1633
|
return /* @__PURE__ */ o("p", { class: "text-sm text-gray-500", children: t("pricing.no_prices", "No prices available.") });
|
|
1634
1634
|
const s = r.popular_label ?? t("pricing.most_popular", "Most popular");
|
|
@@ -1640,13 +1640,13 @@ function Zt({ block: r, ctx: e }) {
|
|
|
1640
1640
|
role: "radiogroup",
|
|
1641
1641
|
"aria-label": t("pricing.plans_aria", "Plans"),
|
|
1642
1642
|
children: i.map((a, c) => /* @__PURE__ */ o(
|
|
1643
|
-
|
|
1643
|
+
Xt,
|
|
1644
1644
|
{
|
|
1645
1645
|
price: a,
|
|
1646
1646
|
isLast: c === i.length - 1,
|
|
1647
1647
|
isPopular: r.popular_price_id === a.id,
|
|
1648
1648
|
popularLabel: s,
|
|
1649
|
-
offer:
|
|
1649
|
+
offer: N(e.bootstrap.offers, a.id),
|
|
1650
1650
|
selected: e.selectedPriceId === a.id,
|
|
1651
1651
|
onSelect: () => {
|
|
1652
1652
|
e.setSelectedPriceId(a.id), e.onAction("price_selected", { priceId: a.id, price: a });
|
|
@@ -1659,7 +1659,7 @@ function Zt({ block: r, ctx: e }) {
|
|
|
1659
1659
|
);
|
|
1660
1660
|
if (r.view === "horizontal") {
|
|
1661
1661
|
const a = Math.min(i.length, 3), c = i.some(
|
|
1662
|
-
(l) => (
|
|
1662
|
+
(l) => (N(e.bootstrap.offers, l.id)?.discount_percent ?? 0) > 0
|
|
1663
1663
|
);
|
|
1664
1664
|
return /* @__PURE__ */ o(
|
|
1665
1665
|
"div",
|
|
@@ -1669,12 +1669,12 @@ function Zt({ block: r, ctx: e }) {
|
|
|
1669
1669
|
role: "radiogroup",
|
|
1670
1670
|
"aria-label": t("pricing.plans_aria", "Plans"),
|
|
1671
1671
|
children: i.map((l) => /* @__PURE__ */ o(
|
|
1672
|
-
|
|
1672
|
+
Jt,
|
|
1673
1673
|
{
|
|
1674
1674
|
price: l,
|
|
1675
1675
|
isPopular: r.popular_price_id === l.id,
|
|
1676
1676
|
popularLabel: s,
|
|
1677
|
-
offer:
|
|
1677
|
+
offer: N(e.bootstrap.offers, l.id),
|
|
1678
1678
|
reserveStrikeRow: c,
|
|
1679
1679
|
selected: e.selectedPriceId === l.id,
|
|
1680
1680
|
onSelect: () => {
|
|
@@ -1694,7 +1694,7 @@ function Zt({ block: r, ctx: e }) {
|
|
|
1694
1694
|
role: "radiogroup",
|
|
1695
1695
|
"aria-label": t("pricing.plans_aria", "Plans"),
|
|
1696
1696
|
children: i.map((a) => {
|
|
1697
|
-
const c = e.selectedPriceId === a.id, l = r.popular_price_id === a.id, d =
|
|
1697
|
+
const c = e.selectedPriceId === a.id, l = r.popular_price_id === a.id, d = N(e.bootstrap.offers, a.id)?.discount_percent ?? null, { currency: g, amount: _, originalAmount: p } = le(a, d);
|
|
1698
1698
|
return /* @__PURE__ */ u(
|
|
1699
1699
|
"button",
|
|
1700
1700
|
{
|
|
@@ -1750,12 +1750,12 @@ function Zt({ block: r, ctx: e }) {
|
|
|
1750
1750
|
),
|
|
1751
1751
|
/* @__PURE__ */ u("div", { class: "flex flex-1 flex-col gap-0.5", children: [
|
|
1752
1752
|
/* @__PURE__ */ u("div", { class: "flex flex-wrap items-center gap-x-2 gap-y-1", children: [
|
|
1753
|
-
/* @__PURE__ */ o("span", { class: "text-xs font-normal uppercase tracking-normal text-gray-800/70", children:
|
|
1754
|
-
|
|
1753
|
+
/* @__PURE__ */ o("span", { class: "text-xs font-normal uppercase tracking-normal text-gray-800/70", children: je(a, t) }),
|
|
1754
|
+
p ? (
|
|
1755
1755
|
// opacity-60 приглушает strike: глаз сначала ловит label
|
|
1756
1756
|
// и discount-badge, потом main price; original «бывшая цена»
|
|
1757
1757
|
// — третичная информация, не должна конкурировать с label.
|
|
1758
|
-
/* @__PURE__ */ o("span", { class: "text-[15px] font-normal text-gray-400 opacity-60 line-through decoration-gray-400 decoration-[1.5px]", children:
|
|
1758
|
+
/* @__PURE__ */ o("span", { class: "text-[15px] font-normal text-gray-400 opacity-60 line-through decoration-gray-400 decoration-[1.5px]", children: p })
|
|
1759
1759
|
) : null,
|
|
1760
1760
|
d ? (
|
|
1761
1761
|
// Emerald pill — фиксированный «успех/выгода», не зависит от
|
|
@@ -1768,12 +1768,12 @@ function Zt({ block: r, ctx: e }) {
|
|
|
1768
1768
|
) : null
|
|
1769
1769
|
] }),
|
|
1770
1770
|
/* @__PURE__ */ o("div", { class: "flex items-baseline gap-2 flex-wrap", children: /* @__PURE__ */ u("span", { class: "text-[26px] leading-tight whitespace-nowrap text-gray-800 font-medium", children: [
|
|
1771
|
-
/* @__PURE__ */ o("span", { class: "opacity-90", children:
|
|
1772
|
-
|
|
1771
|
+
/* @__PURE__ */ o("span", { class: "opacity-90", children: g }),
|
|
1772
|
+
_,
|
|
1773
1773
|
/* @__PURE__ */ u("span", { class: "text-sm font-normal text-gray-500", children: [
|
|
1774
1774
|
" ",
|
|
1775
1775
|
"/ ",
|
|
1776
|
-
|
|
1776
|
+
ce(a, t)
|
|
1777
1777
|
] })
|
|
1778
1778
|
] }) }),
|
|
1779
1779
|
a.description ? /* @__PURE__ */ o("span", { class: "mt-1 text-xs leading-relaxed text-gray-500", children: a.description }) : null
|
|
@@ -1794,10 +1794,10 @@ function Zt({ block: r, ctx: e }) {
|
|
|
1794
1794
|
}
|
|
1795
1795
|
);
|
|
1796
1796
|
}
|
|
1797
|
-
function
|
|
1797
|
+
function Kt(r, e) {
|
|
1798
1798
|
return r.label ? r.label : !r.interval || r.interval === "lifetime" ? e("pricing.interval.lifetime_short", "lifetime") : e(`pricing.interval.${r.interval}`, r.interval);
|
|
1799
1799
|
}
|
|
1800
|
-
function
|
|
1800
|
+
function Xt({
|
|
1801
1801
|
price: r,
|
|
1802
1802
|
isLast: e,
|
|
1803
1803
|
isPopular: t,
|
|
@@ -1807,7 +1807,7 @@ function Kt({
|
|
|
1807
1807
|
onSelect: a,
|
|
1808
1808
|
t: c
|
|
1809
1809
|
}) {
|
|
1810
|
-
const l = i?.discount_percent ?? null, { currency:
|
|
1810
|
+
const l = i?.discount_percent ?? null, { currency: h, amount: d, originalAmount: g } = le(r, l);
|
|
1811
1811
|
return /* @__PURE__ */ u(
|
|
1812
1812
|
"button",
|
|
1813
1813
|
{
|
|
@@ -1857,7 +1857,7 @@ function Kt({
|
|
|
1857
1857
|
].join(" "),
|
|
1858
1858
|
children: [
|
|
1859
1859
|
/* @__PURE__ */ u("div", { class: "flex flex-wrap items-center gap-1 gap-x-1.5", children: [
|
|
1860
|
-
/* @__PURE__ */ o("span", { class: "text-base font-normal capitalize text-gray-800", children:
|
|
1860
|
+
/* @__PURE__ */ o("span", { class: "text-base font-normal capitalize text-gray-800", children: Kt(r, c) }),
|
|
1861
1861
|
t ? (
|
|
1862
1862
|
// Pastel brand-mix pill — точно как `badge` в TelegramPricingRadio.
|
|
1863
1863
|
// Низкий visual weight: pill про "имя плана" (most popular), а не
|
|
@@ -1882,14 +1882,14 @@ function Kt({
|
|
|
1882
1882
|
] }),
|
|
1883
1883
|
/* @__PURE__ */ o("div", { class: "flex-1" }),
|
|
1884
1884
|
/* @__PURE__ */ u("span", { class: "flex items-baseline gap-1.5 text-base font-normal text-gray-600", children: [
|
|
1885
|
-
|
|
1885
|
+
g ? /* @__PURE__ */ o("span", { class: "text-xs text-gray-400 line-through decoration-gray-400 decoration-[1.5px]", children: g }) : null,
|
|
1886
1886
|
/* @__PURE__ */ u("span", { class: "whitespace-nowrap", children: [
|
|
1887
|
-
/* @__PURE__ */ o("span", { class: "opacity-90", children:
|
|
1887
|
+
/* @__PURE__ */ o("span", { class: "opacity-90", children: h }),
|
|
1888
1888
|
d,
|
|
1889
1889
|
/* @__PURE__ */ u("span", { class: "text-xs text-gray-400", children: [
|
|
1890
1890
|
" ",
|
|
1891
1891
|
"/ ",
|
|
1892
|
-
|
|
1892
|
+
ce(r, c)
|
|
1893
1893
|
] })
|
|
1894
1894
|
] })
|
|
1895
1895
|
] })
|
|
@@ -1900,7 +1900,7 @@ function Kt({
|
|
|
1900
1900
|
}
|
|
1901
1901
|
);
|
|
1902
1902
|
}
|
|
1903
|
-
function
|
|
1903
|
+
function Jt({
|
|
1904
1904
|
price: r,
|
|
1905
1905
|
isPopular: e,
|
|
1906
1906
|
popularLabel: t,
|
|
@@ -1910,7 +1910,7 @@ function Xt({
|
|
|
1910
1910
|
onSelect: a,
|
|
1911
1911
|
t: c
|
|
1912
1912
|
}) {
|
|
1913
|
-
const l = n?.discount_percent ?? null, { currency:
|
|
1913
|
+
const l = n?.discount_percent ?? null, { currency: h, amount: d, originalAmount: g } = le(r, l);
|
|
1914
1914
|
return /* @__PURE__ */ u(
|
|
1915
1915
|
"button",
|
|
1916
1916
|
{
|
|
@@ -1924,9 +1924,9 @@ function Xt({
|
|
|
1924
1924
|
].join(" "),
|
|
1925
1925
|
style: s ? { background: "color-mix(in srgb, var(--pw-accent) 6%, transparent)" } : void 0,
|
|
1926
1926
|
children: [
|
|
1927
|
-
/* @__PURE__ */ o("span", { class: "flex min-h-[2.4em] items-center text-[10px] font-normal uppercase leading-tight text-gray-800/70", children:
|
|
1927
|
+
/* @__PURE__ */ o("span", { class: "flex min-h-[2.4em] items-center text-[10px] font-normal uppercase leading-tight text-gray-800/70", children: je(r, c) }),
|
|
1928
1928
|
i ? /* @__PURE__ */ u("div", { class: "flex h-[22px] items-center justify-center gap-1.5", children: [
|
|
1929
|
-
|
|
1929
|
+
g ? /* @__PURE__ */ o("span", { class: "text-[12px] text-gray-400 line-through decoration-gray-400 decoration-[1.5px]", children: g }) : null,
|
|
1930
1930
|
l ? /* @__PURE__ */ u("span", { class: "rounded-md bg-emerald-100 px-1.5 py-0.5 text-[10px] font-bold leading-none text-emerald-700", children: [
|
|
1931
1931
|
"-",
|
|
1932
1932
|
l,
|
|
@@ -1934,12 +1934,12 @@ function Xt({
|
|
|
1934
1934
|
] }) : null
|
|
1935
1935
|
] }) : null,
|
|
1936
1936
|
/* @__PURE__ */ u("span", { class: "text-[26px] leading-none whitespace-nowrap text-gray-800 font-medium", children: [
|
|
1937
|
-
/* @__PURE__ */ o("span", { class: "opacity-90", children:
|
|
1937
|
+
/* @__PURE__ */ o("span", { class: "opacity-90", children: h }),
|
|
1938
1938
|
d
|
|
1939
1939
|
] }),
|
|
1940
1940
|
/* @__PURE__ */ u("span", { class: "text-xs font-normal text-gray-500", children: [
|
|
1941
1941
|
"/ ",
|
|
1942
|
-
|
|
1942
|
+
ce(r, c)
|
|
1943
1943
|
] }),
|
|
1944
1944
|
e ? /* @__PURE__ */ o(
|
|
1945
1945
|
"span",
|
|
@@ -1953,24 +1953,24 @@ function Xt({
|
|
|
1953
1953
|
}
|
|
1954
1954
|
);
|
|
1955
1955
|
}
|
|
1956
|
-
function
|
|
1956
|
+
function Qt({ block: r }) {
|
|
1957
1957
|
return /* @__PURE__ */ o("p", { class: "text-[0.9375rem] leading-relaxed text-gray-600", children: r.text });
|
|
1958
1958
|
}
|
|
1959
|
-
const
|
|
1959
|
+
const er = {
|
|
1960
1960
|
week: 0.25,
|
|
1961
1961
|
month: 1,
|
|
1962
1962
|
year: 12
|
|
1963
1963
|
};
|
|
1964
|
-
function
|
|
1964
|
+
function tr(r, e) {
|
|
1965
1965
|
return r ? e(`pricing.interval.${r}`, r) : e("pricing.interval.period", "period");
|
|
1966
1966
|
}
|
|
1967
|
-
function
|
|
1968
|
-
const { t } =
|
|
1967
|
+
function rr({ block: r, ctx: e }) {
|
|
1968
|
+
const { t } = S();
|
|
1969
1969
|
if (!r.queries.length) return null;
|
|
1970
|
-
const i = e.bootstrap.prices.find((a) => a.id === e.selectedPriceId)?.interval ?? null, s = i ?
|
|
1970
|
+
const i = e.bootstrap.prices.find((a) => a.id === e.selectedPriceId)?.interval ?? null, s = i ? er[i] : void 0;
|
|
1971
1971
|
return /* @__PURE__ */ u("div", { class: "flex flex-col gap-2", children: [
|
|
1972
1972
|
/* @__PURE__ */ o("div", { class: "text-sm font-semibold text-gray-800", children: !i || i === "lifetime" ? t("pricing.included_total", "Included for lifetime:") : t("pricing.included_per", "Included per {interval}:", {
|
|
1973
|
-
interval:
|
|
1973
|
+
interval: tr(i, t)
|
|
1974
1974
|
}) }),
|
|
1975
1975
|
/* @__PURE__ */ o("ul", { class: "flex flex-col gap-2", role: "list", children: r.queries.map((a) => {
|
|
1976
1976
|
const c = Number.isFinite(a.count) ? a.count : 0, l = s !== void 0 ? Math.round(c * s) : c;
|
|
@@ -2000,7 +2000,7 @@ function tr({ block: r, ctx: e }) {
|
|
|
2000
2000
|
/* @__PURE__ */ o("span", { class: "font-semibold text-gray-900 text-sm", children: l }),
|
|
2001
2001
|
" ",
|
|
2002
2002
|
/* @__PURE__ */ o("span", { class: "text-sm text-gray-800", children: a.name }),
|
|
2003
|
-
a.desc ? /* @__PURE__ */ u(
|
|
2003
|
+
a.desc ? /* @__PURE__ */ u(ae, { children: [
|
|
2004
2004
|
/* @__PURE__ */ o("br", {}),
|
|
2005
2005
|
/* @__PURE__ */ o("span", { class: "text-xs text-gray-400", children: a.desc })
|
|
2006
2006
|
] }) : null
|
|
@@ -2009,38 +2009,38 @@ function tr({ block: r, ctx: e }) {
|
|
|
2009
2009
|
}) })
|
|
2010
2010
|
] });
|
|
2011
2011
|
}
|
|
2012
|
-
const
|
|
2013
|
-
heading:
|
|
2014
|
-
text:
|
|
2015
|
-
price_grid:
|
|
2012
|
+
const nr = {
|
|
2013
|
+
heading: Wt,
|
|
2014
|
+
text: Qt,
|
|
2015
|
+
price_grid: Yt,
|
|
2016
2016
|
cta_button: Rt,
|
|
2017
|
-
auth_panel:
|
|
2018
|
-
current_session:
|
|
2019
|
-
features_list:
|
|
2020
|
-
tokenization_gate:
|
|
2017
|
+
auth_panel: Me,
|
|
2018
|
+
current_session: zt,
|
|
2019
|
+
features_list: qt,
|
|
2020
|
+
tokenization_gate: rr,
|
|
2021
2021
|
guarantee_badge: Nt,
|
|
2022
|
-
offer_banner:
|
|
2022
|
+
offer_banner: It
|
|
2023
2023
|
};
|
|
2024
|
-
function
|
|
2025
|
-
const a =
|
|
2026
|
-
for (const
|
|
2027
|
-
if (
|
|
2028
|
-
return
|
|
2024
|
+
function ir({ layout: r, bootstrap: e, onAction: t, auth: n, authSession: i, hasTopBanner: s }) {
|
|
2025
|
+
const a = Ge(() => {
|
|
2026
|
+
for (const v of r.blocks)
|
|
2027
|
+
if (v.type === "price_grid" && v.popular_price_id && e.prices.some((m) => m.id === v.popular_price_id))
|
|
2028
|
+
return v.popular_price_id;
|
|
2029
2029
|
return e.prices[0]?.id ?? null;
|
|
2030
|
-
}, [r.blocks, e.prices]), [c, l] =
|
|
2030
|
+
}, [r.blocks, e.prices]), [c, l] = k(a), h = {
|
|
2031
2031
|
bootstrap: e,
|
|
2032
2032
|
selectedPriceId: c,
|
|
2033
2033
|
setSelectedPriceId: l,
|
|
2034
2034
|
onAction: t,
|
|
2035
2035
|
auth: n,
|
|
2036
2036
|
authSession: i
|
|
2037
|
-
}, d = r.blocks.findIndex((
|
|
2038
|
-
const
|
|
2039
|
-
return
|
|
2037
|
+
}, d = r.blocks.findIndex((v) => v.type === "cta_button"), g = d === -1 ? r.blocks : r.blocks.slice(0, d), _ = d === -1 ? [] : r.blocks.slice(d), p = (v, m) => {
|
|
2038
|
+
const A = nr[v.type];
|
|
2039
|
+
return A ? /* @__PURE__ */ o(A, { block: v, ctx: h }, `${v.type}-${m}`) : (typeof console < "u" && console.warn(`[paywall] unknown block type: ${v.type}`), null);
|
|
2040
2040
|
};
|
|
2041
|
-
return /* @__PURE__ */ u(
|
|
2042
|
-
/* @__PURE__ */ o("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__ */ o("div", { class: "flex flex-col gap-6", children:
|
|
2043
|
-
|
|
2041
|
+
return /* @__PURE__ */ u(ae, { children: [
|
|
2042
|
+
/* @__PURE__ */ o("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__ */ o("div", { class: "flex flex-col gap-6", children: g.map(p) }) }),
|
|
2043
|
+
_.length > 0 ? (
|
|
2044
2044
|
// Тонкий shadow-top вместо border-t — создаёт depth, читается как
|
|
2045
2045
|
// «footer закреплён к низу dialog'а». Линия выглядела как divider
|
|
2046
2046
|
// в обычном flow, не передавала sticky-character.
|
|
@@ -2049,19 +2049,19 @@ function nr({ layout: r, bootstrap: e, onAction: t, auth: n, authSession: i, has
|
|
|
2049
2049
|
{
|
|
2050
2050
|
class: "flex flex-col gap-4 bg-white px-6 pb-6 pt-3 sm:px-8",
|
|
2051
2051
|
style: { boxShadow: "0 -4px 12px -4px rgba(15,23,42,0.06)" },
|
|
2052
|
-
children:
|
|
2052
|
+
children: _.map((v, m) => p(v, g.length + m))
|
|
2053
2053
|
}
|
|
2054
2054
|
)
|
|
2055
2055
|
) : null
|
|
2056
2056
|
] });
|
|
2057
2057
|
}
|
|
2058
|
-
function
|
|
2059
|
-
return r ? n ? { open: !0, view: "purchased", error: null } : e.status === "idle" || e.status === "loading" ? { open: !0, view: "loading", error: null } : e.status === "error" ? { open: !0, view: "error", error: e.error } : t.kind === "support" ? { open: !0, view: "support", error: null } : t.kind === "auth_gate" ? { open: !0, view: "auth", error: null } : t.kind === "awaiting_payment" ? { open: !0, view: "awaiting_payment", error: null } : t.kind === "popup_blocked" ? { open: !0, view: "popup_blocked", error: null } : t.kind === "purchase_success" ? { open: !0, view: "purchased", error: null } : t.kind === "verifying"
|
|
2058
|
+
function or(r, e, t, n) {
|
|
2059
|
+
return r ? n ? { open: !0, view: "purchased", error: null, processing: !1 } : e.status === "idle" || e.status === "loading" ? { open: !0, view: "loading", error: null, processing: !1 } : e.status === "error" ? { open: !0, view: "error", error: e.error, processing: !1 } : t.kind === "support" ? { open: !0, view: "support", error: null, processing: !1 } : t.kind === "auth_gate" ? { open: !0, view: "auth", error: null, processing: !1 } : t.kind === "awaiting_payment" ? { open: !0, view: "awaiting_payment", error: null, processing: !1 } : t.kind === "popup_blocked" ? { open: !0, view: "popup_blocked", error: null, processing: !1 } : t.kind === "purchase_success" ? { open: !0, view: "purchased", error: null, processing: !1 } : t.kind === "verifying" ? { open: !0, view: "loading", error: null, processing: !1 } : { open: !0, view: "layout", error: null, processing: !1 } : { open: !1, view: null, error: null, processing: !1 };
|
|
2060
2060
|
}
|
|
2061
|
-
function
|
|
2062
|
-
return r.open === e.open && r.view === e.view && r.error === e.error;
|
|
2061
|
+
function sr(r, e) {
|
|
2062
|
+
return r.open === e.open && r.view === e.view && r.error === e.error && r.processing === e.processing;
|
|
2063
2063
|
}
|
|
2064
|
-
function
|
|
2064
|
+
function ar({
|
|
2065
2065
|
client: r,
|
|
2066
2066
|
open: e,
|
|
2067
2067
|
onClose: t,
|
|
@@ -2069,162 +2069,182 @@ function sr({
|
|
|
2069
2069
|
initialView: i,
|
|
2070
2070
|
initialAuthMode: s,
|
|
2071
2071
|
initialCheckoutPriceId: a,
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2072
|
+
initialCheckoutUrl: c,
|
|
2073
|
+
purchased: l,
|
|
2074
|
+
renew: h,
|
|
2075
|
+
onState: d,
|
|
2076
|
+
inline: g,
|
|
2077
|
+
locale: _
|
|
2077
2078
|
}) {
|
|
2078
|
-
const [
|
|
2079
|
+
const [p, v] = k({ status: "idle" }), [m, A] = k(
|
|
2079
2080
|
() => r.auth?.getCachedSession() ?? null
|
|
2080
|
-
), [
|
|
2081
|
+
), [b, y] = k(() => i === "support" ? { kind: "support", origin: "standalone" } : i === "auth" ? a ? {
|
|
2082
|
+
kind: "auth_gate",
|
|
2083
|
+
pendingCheckout: { priceId: a, direct: !0 },
|
|
2084
|
+
origin: "standalone",
|
|
2085
|
+
intent: "preauth"
|
|
2086
|
+
} : { kind: "auth_gate", origin: "standalone" } : i === "awaiting_payment" && a && c ? {
|
|
2087
|
+
kind: "awaiting_payment",
|
|
2088
|
+
priceId: a,
|
|
2089
|
+
url: c
|
|
2090
|
+
} : i === "popup_blocked" && a && c ? {
|
|
2091
|
+
kind: "popup_blocked",
|
|
2092
|
+
priceId: a,
|
|
2093
|
+
url: c
|
|
2094
|
+
} : { kind: "layout" }), C = i === "awaiting_payment" || i === "popup_blocked" || i === "auth" && !!a, I = D(!1), U = D(null);
|
|
2081
2095
|
P(() => {
|
|
2082
|
-
if (!
|
|
2083
|
-
const x =
|
|
2084
|
-
|
|
2085
|
-
}, [e,
|
|
2096
|
+
if (!d) return;
|
|
2097
|
+
const x = or(e, p, b, l), f = U.current;
|
|
2098
|
+
f && sr(f, x) || (U.current = x, d(x));
|
|
2099
|
+
}, [e, p, b, l, d]), P(() => {
|
|
2086
2100
|
if (r.auth)
|
|
2087
|
-
return r.auth.onAuthChange((x,
|
|
2101
|
+
return r.auth.onAuthChange((x, f) => A(f));
|
|
2088
2102
|
}, [r.auth]), P(() => {
|
|
2089
2103
|
if (typeof r.onBootstrapChange == "function")
|
|
2090
2104
|
return r.onBootstrapChange((x) => {
|
|
2091
|
-
|
|
2092
|
-
(
|
|
2105
|
+
v(
|
|
2106
|
+
(f) => f.status === "ready" ? { status: "ready", data: x } : f
|
|
2093
2107
|
);
|
|
2094
2108
|
});
|
|
2095
2109
|
}, [r]), P(() => {
|
|
2096
|
-
if (!e ||
|
|
2110
|
+
if (!e || p.status === "ready" || p.status === "loading") return;
|
|
2097
2111
|
let x = !1;
|
|
2098
|
-
return
|
|
2112
|
+
return v({ status: "loading" }), r.bootstrap().then((f) => {
|
|
2099
2113
|
if (x) return;
|
|
2100
|
-
|
|
2101
|
-
const
|
|
2102
|
-
|
|
2114
|
+
v({ status: "ready", data: f }), n("ready", f);
|
|
2115
|
+
const w = i === "support" || i === "auth" || C;
|
|
2116
|
+
f.user?.has_active_subscription && !h && !w && (n("purchase_completed", {
|
|
2103
2117
|
priceId: a ?? null,
|
|
2104
2118
|
sessionId: null,
|
|
2105
2119
|
restored: !0
|
|
2106
|
-
}),
|
|
2107
|
-
}).catch((
|
|
2120
|
+
}), y({ kind: "purchase_success", restored: !0 }));
|
|
2121
|
+
}).catch((f) => {
|
|
2108
2122
|
if (x) return;
|
|
2109
|
-
const
|
|
2110
|
-
|
|
2123
|
+
const w = f instanceof L ? f : new L("unknown", "Failed to load paywall", { cause: f });
|
|
2124
|
+
v({ status: "error", error: w }), n("error", w);
|
|
2111
2125
|
}), () => {
|
|
2112
2126
|
x = !0;
|
|
2113
2127
|
};
|
|
2114
|
-
}, [e, r]),
|
|
2128
|
+
}, [e, r]), We(() => {
|
|
2115
2129
|
if (!e) {
|
|
2116
|
-
|
|
2130
|
+
y({ kind: "layout" }), I.current = !1;
|
|
2117
2131
|
return;
|
|
2118
2132
|
}
|
|
2119
|
-
i === "support" ?
|
|
2120
|
-
|
|
2121
|
-
|
|
2133
|
+
i === "support" ? y({ kind: "support", origin: "standalone" }) : i === "auth" ? y(a ? {
|
|
2134
|
+
kind: "auth_gate",
|
|
2135
|
+
pendingCheckout: { priceId: a, direct: !0 },
|
|
2136
|
+
origin: "standalone",
|
|
2137
|
+
intent: "preauth"
|
|
2138
|
+
} : { kind: "auth_gate", origin: "standalone" }) : i === "awaiting_payment" && a && c ? y({
|
|
2139
|
+
kind: "awaiting_payment",
|
|
2140
|
+
priceId: a,
|
|
2141
|
+
url: c
|
|
2142
|
+
}) : i === "popup_blocked" && a && c && y({
|
|
2143
|
+
kind: "popup_blocked",
|
|
2144
|
+
priceId: a,
|
|
2145
|
+
url: c
|
|
2146
|
+
});
|
|
2147
|
+
}, [e, i, a, c]);
|
|
2148
|
+
const M = async (x) => {
|
|
2122
2149
|
try {
|
|
2123
|
-
const
|
|
2150
|
+
const f = r.getCachedOffers?.() ?? null, w = f ? N(f, x) : null, B = await r.createCheckout({
|
|
2124
2151
|
priceId: x,
|
|
2125
|
-
|
|
2152
|
+
offerId: w?.id,
|
|
2153
|
+
ignoreActivePurchase: h === !0
|
|
2126
2154
|
});
|
|
2127
|
-
if (n("checkout_started", { priceId: x, url:
|
|
2128
|
-
const
|
|
2129
|
-
if (
|
|
2155
|
+
if (n("checkout_started", { priceId: x, url: B.url, acquiring: B.acquiring }), typeof window > "u" || !B.url) return;
|
|
2156
|
+
const $ = window.open(B.url, "_blank");
|
|
2157
|
+
if ($) {
|
|
2130
2158
|
try {
|
|
2131
|
-
|
|
2159
|
+
$.opener = null;
|
|
2132
2160
|
} catch {
|
|
2133
2161
|
}
|
|
2134
|
-
|
|
2162
|
+
y({ kind: "awaiting_payment", priceId: x, url: B.url });
|
|
2135
2163
|
} else
|
|
2136
|
-
|
|
2137
|
-
} catch (
|
|
2138
|
-
if (
|
|
2164
|
+
y({ kind: "popup_blocked", priceId: x, url: B.url });
|
|
2165
|
+
} catch (f) {
|
|
2166
|
+
if (f instanceof L && f.code === "already_purchased") {
|
|
2139
2167
|
try {
|
|
2140
2168
|
await r.getUser({ force: !0 });
|
|
2141
2169
|
} catch {
|
|
2142
2170
|
}
|
|
2143
|
-
n("purchase_completed", { priceId: x, sessionId: null, restored: !0 }), C ? t() :
|
|
2171
|
+
n("purchase_completed", { priceId: x, sessionId: null, restored: !0 }), C ? t() : y({ kind: "purchase_success", restored: !0 });
|
|
2144
2172
|
return;
|
|
2145
2173
|
}
|
|
2146
|
-
const
|
|
2147
|
-
n("error",
|
|
2174
|
+
const w = f instanceof L ? f : new L("checkout_failed", "Checkout failed", { cause: f });
|
|
2175
|
+
n("error", w), C ? t() : y({ kind: "layout" });
|
|
2148
2176
|
}
|
|
2149
|
-
},
|
|
2177
|
+
}, O = (x, f) => {
|
|
2150
2178
|
if (typeof window > "u") return;
|
|
2151
|
-
const
|
|
2152
|
-
if (
|
|
2179
|
+
const w = window.open(f, "_blank");
|
|
2180
|
+
if (w) {
|
|
2153
2181
|
try {
|
|
2154
|
-
|
|
2182
|
+
w.opener = null;
|
|
2155
2183
|
} catch {
|
|
2156
2184
|
}
|
|
2157
|
-
|
|
2185
|
+
y({ kind: "awaiting_payment", priceId: x, url: f });
|
|
2158
2186
|
}
|
|
2159
2187
|
};
|
|
2160
2188
|
P(() => {
|
|
2161
|
-
if (
|
|
2189
|
+
if (b.kind !== "auth_gate" || !m || m.user.is_anonymous || I.current) return;
|
|
2162
2190
|
I.current = !0;
|
|
2163
|
-
const x =
|
|
2164
|
-
|
|
2165
|
-
if (!
|
|
2191
|
+
const x = b.pendingCheckout, f = b.origin;
|
|
2192
|
+
y({ kind: "verifying" }), (async () => {
|
|
2193
|
+
if (!h)
|
|
2166
2194
|
try {
|
|
2167
2195
|
if ((await r.getUser({ force: !0 })).has_active_subscription) {
|
|
2168
2196
|
n("purchase_completed", {
|
|
2169
2197
|
priceId: x?.priceId ?? null,
|
|
2170
2198
|
sessionId: null,
|
|
2171
2199
|
restored: !0
|
|
2172
|
-
}), x?.direct ? t() :
|
|
2200
|
+
}), x?.direct ? t() : y({ kind: "purchase_success", restored: !0 });
|
|
2173
2201
|
return;
|
|
2174
2202
|
}
|
|
2175
2203
|
} catch {
|
|
2176
2204
|
}
|
|
2177
2205
|
if (!x) {
|
|
2178
|
-
|
|
2206
|
+
f === "standalone" ? t() : y({ kind: "layout" });
|
|
2179
2207
|
return;
|
|
2180
2208
|
}
|
|
2181
|
-
await
|
|
2209
|
+
await M(x.priceId);
|
|
2182
2210
|
})().finally(() => {
|
|
2183
2211
|
I.current = !1;
|
|
2184
2212
|
});
|
|
2185
|
-
}, [
|
|
2186
|
-
|
|
2187
|
-
const x = g.priceId, m = h.data.settings.checkout_mode ?? "guest", y = r.auth?.getCachedSession() ?? null, M = !!y && !y.user.is_anonymous;
|
|
2188
|
-
if (m === "preauth" && !!r.auth && !M) {
|
|
2189
|
-
k({ kind: "auth_gate", pendingCheckout: { priceId: x, direct: !0 } });
|
|
2190
|
-
return;
|
|
2191
|
-
}
|
|
2192
|
-
T(x);
|
|
2193
|
-
}, [h, g]);
|
|
2194
|
-
const U = async (x, m) => {
|
|
2213
|
+
}, [m, b]);
|
|
2214
|
+
const j = async (x, f) => {
|
|
2195
2215
|
if (x === "close") {
|
|
2196
2216
|
t();
|
|
2197
2217
|
return;
|
|
2198
2218
|
}
|
|
2199
2219
|
if (x === "price_selected") {
|
|
2200
|
-
n("price_selected",
|
|
2220
|
+
n("price_selected", f);
|
|
2201
2221
|
return;
|
|
2202
2222
|
}
|
|
2203
2223
|
if (x === "restore") {
|
|
2204
2224
|
if (!r.auth) return;
|
|
2205
|
-
const
|
|
2206
|
-
if (
|
|
2207
|
-
|
|
2225
|
+
const w = r.auth.getCachedSession();
|
|
2226
|
+
if (w && !w.user.is_anonymous) return;
|
|
2227
|
+
y({ kind: "auth_gate", intent: "restore" });
|
|
2208
2228
|
return;
|
|
2209
2229
|
}
|
|
2210
2230
|
if (x === "support") {
|
|
2211
|
-
|
|
2231
|
+
y({ kind: "support", origin: "layout" });
|
|
2212
2232
|
return;
|
|
2213
2233
|
}
|
|
2214
|
-
if (x === "checkout" &&
|
|
2215
|
-
const
|
|
2216
|
-
if (!
|
|
2217
|
-
n("error", new
|
|
2234
|
+
if (x === "checkout" && p.status === "ready") {
|
|
2235
|
+
const w = f?.priceId;
|
|
2236
|
+
if (!w) {
|
|
2237
|
+
n("error", new L("no_price", "No price selected"));
|
|
2218
2238
|
return;
|
|
2219
2239
|
}
|
|
2220
|
-
const
|
|
2221
|
-
if (
|
|
2222
|
-
|
|
2240
|
+
const B = p.data.settings.checkout_mode ?? "guest", $ = r.auth?.getCachedSession() ?? null, De = !!$ && !$.user.is_anonymous;
|
|
2241
|
+
if (B === "preauth" && !!r.auth && !De) {
|
|
2242
|
+
y({ kind: "auth_gate", pendingCheckout: { priceId: w } });
|
|
2223
2243
|
return;
|
|
2224
2244
|
}
|
|
2225
|
-
await
|
|
2245
|
+
await M(w);
|
|
2226
2246
|
}
|
|
2227
|
-
},
|
|
2247
|
+
}, R = p.status === "ready" ? p.data.settings.brand_color : null, T = p.status === "ready" ? p.data.settings.allow_close !== !1 : !0, z = b.kind === "layout" && p.status === "ready" ? Te(p.data.offers) : null, q = z ? /* @__PURE__ */ o(At, { offer: z }) : null, Y = {
|
|
2228
2248
|
type: "auth_panel",
|
|
2229
2249
|
// Заголовок не задаём — AuthGate сам решит по intent'у (restore →
|
|
2230
2250
|
// "Restore Purchases", остальные → дефолтный "Welcome back!").
|
|
@@ -2233,81 +2253,81 @@ function sr({
|
|
|
2233
2253
|
// Не скрываем при наличии сессии — auto-resume useEffect отрабатывает быстрее,
|
|
2234
2254
|
// чем хотим показывать "Signed in as ..." промежуточным экраном.
|
|
2235
2255
|
hide_when_authenticated: !1,
|
|
2236
|
-
providers:
|
|
2237
|
-
}, V =
|
|
2238
|
-
|
|
2256
|
+
providers: p.status === "ready" ? p.data.settings.auth_providers : void 0
|
|
2257
|
+
}, V = b.kind === "support" ? /* @__PURE__ */ o(
|
|
2258
|
+
Et,
|
|
2239
2259
|
{
|
|
2240
2260
|
client: r,
|
|
2241
|
-
authSession:
|
|
2242
|
-
origin:
|
|
2261
|
+
authSession: m,
|
|
2262
|
+
origin: b.origin,
|
|
2243
2263
|
onBack: () => {
|
|
2244
|
-
|
|
2264
|
+
b.origin === "standalone" ? t() : y({ kind: "layout" });
|
|
2245
2265
|
}
|
|
2246
2266
|
}
|
|
2247
|
-
) : null,
|
|
2248
|
-
return /* @__PURE__ */ o(
|
|
2249
|
-
|
|
2267
|
+
) : null, K = b.kind === "auth_gate" && b.origin !== "standalone" || b.kind === "support", X = p.status === "ready" ? p.data : null;
|
|
2268
|
+
return /* @__PURE__ */ o(at, { bootstrap: X, forceLocale: _, children: /* @__PURE__ */ o(
|
|
2269
|
+
lt,
|
|
2250
2270
|
{
|
|
2251
2271
|
open: e,
|
|
2252
2272
|
onClose: t,
|
|
2253
|
-
brandColor:
|
|
2254
|
-
topBanner:
|
|
2255
|
-
allowClose:
|
|
2256
|
-
hideCloseButton:
|
|
2257
|
-
inline:
|
|
2273
|
+
brandColor: R,
|
|
2274
|
+
topBanner: q,
|
|
2275
|
+
allowClose: T,
|
|
2276
|
+
hideCloseButton: K,
|
|
2277
|
+
inline: g,
|
|
2258
2278
|
labelledBy: "pw-title",
|
|
2259
|
-
children:
|
|
2260
|
-
|
|
2279
|
+
children: l ? /* @__PURE__ */ o(ve, { onContinue: t }) : b.kind === "purchase_success" ? /* @__PURE__ */ o(ve, { restored: b.restored, onContinue: t }) : V || (p.status === "loading" || p.status === "idle" || b.kind === "verifying" ? /* @__PURE__ */ o(lr, { verifying: b.kind === "verifying" }) : p.status === "error" ? /* @__PURE__ */ o(cr, { message: p.error.message }) : b.kind === "auth_gate" && r.auth ? /* @__PURE__ */ o(
|
|
2280
|
+
_t,
|
|
2261
2281
|
{
|
|
2262
|
-
block:
|
|
2263
|
-
bootstrap:
|
|
2282
|
+
block: Y,
|
|
2283
|
+
bootstrap: p.data,
|
|
2264
2284
|
auth: r.auth,
|
|
2265
|
-
authSession:
|
|
2266
|
-
showBack:
|
|
2267
|
-
intent:
|
|
2268
|
-
initialMode:
|
|
2285
|
+
authSession: m,
|
|
2286
|
+
showBack: b.origin !== "standalone",
|
|
2287
|
+
intent: b.intent ?? (b.origin === "standalone" ? "standalone" : "preauth"),
|
|
2288
|
+
initialMode: b.origin === "standalone" ? s : void 0,
|
|
2269
2289
|
onBack: () => {
|
|
2270
|
-
|
|
2290
|
+
b.origin === "standalone" ? t() : y({ kind: "layout" });
|
|
2271
2291
|
}
|
|
2272
2292
|
}
|
|
2273
|
-
) :
|
|
2274
|
-
|
|
2293
|
+
) : b.kind === "awaiting_payment" ? /* @__PURE__ */ o(
|
|
2294
|
+
dr,
|
|
2275
2295
|
{
|
|
2276
2296
|
client: r,
|
|
2277
|
-
onBack: () =>
|
|
2297
|
+
onBack: () => y({ kind: "layout" }),
|
|
2278
2298
|
onReopen: () => {
|
|
2279
2299
|
if (typeof window > "u") return;
|
|
2280
|
-
const x = window.open(
|
|
2300
|
+
const x = window.open(b.url, "_blank");
|
|
2281
2301
|
if (x)
|
|
2282
2302
|
try {
|
|
2283
2303
|
x.opener = null;
|
|
2284
2304
|
} catch {
|
|
2285
2305
|
}
|
|
2286
2306
|
},
|
|
2287
|
-
onRetry: () =>
|
|
2307
|
+
onRetry: () => M(b.priceId)
|
|
2288
2308
|
}
|
|
2289
|
-
) :
|
|
2290
|
-
|
|
2309
|
+
) : b.kind === "popup_blocked" ? /* @__PURE__ */ o(ur, { onReopen: () => O(b.priceId, b.url) }) : /* @__PURE__ */ o(
|
|
2310
|
+
ir,
|
|
2291
2311
|
{
|
|
2292
|
-
layout:
|
|
2293
|
-
bootstrap:
|
|
2294
|
-
onAction:
|
|
2312
|
+
layout: p.data.layout,
|
|
2313
|
+
bootstrap: p.data,
|
|
2314
|
+
onAction: j,
|
|
2295
2315
|
auth: r.auth,
|
|
2296
|
-
authSession:
|
|
2316
|
+
authSession: m
|
|
2297
2317
|
}
|
|
2298
2318
|
))
|
|
2299
2319
|
}
|
|
2300
2320
|
) });
|
|
2301
2321
|
}
|
|
2302
|
-
function
|
|
2303
|
-
const { t: e } =
|
|
2322
|
+
function lr({ verifying: r }) {
|
|
2323
|
+
const { t: e } = S();
|
|
2304
2324
|
return /* @__PURE__ */ u("div", { class: "flex flex-col items-center justify-center gap-3 py-12", children: [
|
|
2305
2325
|
/* @__PURE__ */ o("span", { class: "inline-block h-7 w-7 animate-spin rounded-full border-[2.5px] border-gray-200 border-t-[var(--pw-accent)]" }),
|
|
2306
2326
|
/* @__PURE__ */ o("span", { class: "text-xs font-medium tracking-wide text-gray-500", children: r ? e("modal.verifying_subscription", "Checking your subscription…") : e("modal.loading", "Loading…") })
|
|
2307
2327
|
] });
|
|
2308
2328
|
}
|
|
2309
|
-
function
|
|
2310
|
-
const { t: e } =
|
|
2329
|
+
function cr({ message: r }) {
|
|
2330
|
+
const { t: e } = S();
|
|
2311
2331
|
return /* @__PURE__ */ u("div", { class: "flex flex-col items-center gap-2 py-8 text-center", children: [
|
|
2312
2332
|
/* @__PURE__ */ o("div", { class: "flex h-11 w-11 items-center justify-center rounded-full bg-red-50", children: /* @__PURE__ */ u("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
|
|
2313
2333
|
/* @__PURE__ */ o("path", { d: "M10 6v5M10 14h.01", stroke: "#dc2626", "stroke-width": "2", "stroke-linecap": "round" }),
|
|
@@ -2317,8 +2337,8 @@ function lr({ message: r }) {
|
|
|
2317
2337
|
/* @__PURE__ */ o("p", { class: "text-xs leading-relaxed text-gray-500", children: r })
|
|
2318
2338
|
] });
|
|
2319
2339
|
}
|
|
2320
|
-
function
|
|
2321
|
-
const { t: e } =
|
|
2340
|
+
function ur({ onReopen: r }) {
|
|
2341
|
+
const { t: e } = S();
|
|
2322
2342
|
return /* @__PURE__ */ u("div", { class: "flex flex-col items-center gap-3 py-8 text-center", children: [
|
|
2323
2343
|
/* @__PURE__ */ o(
|
|
2324
2344
|
"div",
|
|
@@ -2349,15 +2369,15 @@ function cr({ onReopen: r }) {
|
|
|
2349
2369
|
)
|
|
2350
2370
|
] });
|
|
2351
2371
|
}
|
|
2352
|
-
function
|
|
2372
|
+
function dr({
|
|
2353
2373
|
client: r,
|
|
2354
2374
|
onBack: e,
|
|
2355
2375
|
onReopen: t,
|
|
2356
2376
|
onRetry: n
|
|
2357
2377
|
}) {
|
|
2358
|
-
const { t: i } =
|
|
2378
|
+
const { t: i } = S(), [s, a] = k(!1), [c, l] = k(!1), h = D(null);
|
|
2359
2379
|
P(() => () => {
|
|
2360
|
-
|
|
2380
|
+
h.current !== null && clearTimeout(h.current);
|
|
2361
2381
|
}, []);
|
|
2362
2382
|
const d = async () => {
|
|
2363
2383
|
if (!s) {
|
|
@@ -2367,8 +2387,8 @@ function ur({
|
|
|
2367
2387
|
typeof window < "u" && window.postMessage({ type: "paywall_purchase" }, "*");
|
|
2368
2388
|
return;
|
|
2369
2389
|
}
|
|
2370
|
-
l(!0),
|
|
2371
|
-
l(!1),
|
|
2390
|
+
l(!0), h.current !== null && clearTimeout(h.current), h.current = setTimeout(() => {
|
|
2391
|
+
l(!1), h.current = null;
|
|
2372
2392
|
}, 5e3);
|
|
2373
2393
|
} catch {
|
|
2374
2394
|
l(!0);
|
|
@@ -2443,11 +2463,11 @@ function ur({
|
|
|
2443
2463
|
)
|
|
2444
2464
|
] });
|
|
2445
2465
|
}
|
|
2446
|
-
function
|
|
2466
|
+
function ve({
|
|
2447
2467
|
onContinue: r,
|
|
2448
2468
|
restored: e = !1
|
|
2449
2469
|
}) {
|
|
2450
|
-
const { t } =
|
|
2470
|
+
const { t } = S();
|
|
2451
2471
|
return /* @__PURE__ */ u("div", { class: "flex flex-col items-center gap-3 py-8 text-center", children: [
|
|
2452
2472
|
/* @__PURE__ */ o(
|
|
2453
2473
|
"div",
|
|
@@ -2492,17 +2512,17 @@ function ke({
|
|
|
2492
2512
|
)
|
|
2493
2513
|
] });
|
|
2494
2514
|
}
|
|
2495
|
-
const
|
|
2496
|
-
class
|
|
2515
|
+
const hr = 10 * 6e4, pr = 5e3, fr = 3e4;
|
|
2516
|
+
class gr {
|
|
2497
2517
|
constructor(e) {
|
|
2498
2518
|
this.timer = null, this.timeoutTimer = null, this.visibilityHandler = null, this.focusHandler = null, this.messageHandler = null, this.stopped = !1, this.checking = !1, this.opts = {
|
|
2499
2519
|
client: e.client,
|
|
2500
2520
|
onActive: e.onActive,
|
|
2501
2521
|
onTimeout: e.onTimeout ?? (() => {
|
|
2502
2522
|
}),
|
|
2503
|
-
timeoutMs: e.timeoutMs ??
|
|
2504
|
-
visibleIntervalMs: e.visibleIntervalMs ??
|
|
2505
|
-
hiddenIntervalMs: e.hiddenIntervalMs ??
|
|
2523
|
+
timeoutMs: e.timeoutMs ?? hr,
|
|
2524
|
+
visibleIntervalMs: e.visibleIntervalMs ?? pr,
|
|
2525
|
+
hiddenIntervalMs: e.hiddenIntervalMs ?? fr
|
|
2506
2526
|
};
|
|
2507
2527
|
}
|
|
2508
2528
|
start() {
|
|
@@ -2541,18 +2561,23 @@ class fr {
|
|
|
2541
2561
|
!t || typeof t != "object" || t.type === "paywall_purchase" && this.check();
|
|
2542
2562
|
}
|
|
2543
2563
|
}
|
|
2544
|
-
function
|
|
2564
|
+
function mr() {
|
|
2545
2565
|
return !(typeof document > "u" || typeof window > "u" || typeof location < "u" && location.protocol === "chrome-extension:");
|
|
2546
2566
|
}
|
|
2547
|
-
const
|
|
2567
|
+
const se = {
|
|
2568
|
+
open: !1,
|
|
2569
|
+
view: null,
|
|
2570
|
+
error: null,
|
|
2571
|
+
processing: !1
|
|
2572
|
+
}, F = {
|
|
2548
2573
|
status: "paywall_status",
|
|
2549
2574
|
priceId: "paywall_price_id",
|
|
2550
2575
|
sessionId: "paywall_session_id"
|
|
2551
2576
|
};
|
|
2552
|
-
let
|
|
2577
|
+
let yr = class {
|
|
2553
2578
|
constructor(e) {
|
|
2554
|
-
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 =
|
|
2555
|
-
const { auth: t, ownsAuth: n } =
|
|
2579
|
+
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 = se, this.stateListeners = /* @__PURE__ */ new Set();
|
|
2580
|
+
const { auth: t, ownsAuth: n } = br(e);
|
|
2556
2581
|
this.auth = t, this.ownsAuth = n, this.billing = e.client ?? new Re({ ...e, auth: this.auth }), this.host = e.host, this.shadowMode = e.shadowMode ?? "closed", this.mountThenLoad = e.mountThenLoad ?? !0, this.inline = e.inline === !0, this.forceLocale = e.locale ?? null, this.userUnsub = this.billing.onUserChange((i) => {
|
|
2557
2582
|
this.emit("userChange", i);
|
|
2558
2583
|
}), this.auth && (this.authUnsub = this.auth.onAuthChange((i, s) => {
|
|
@@ -2564,7 +2589,7 @@ let mr = class {
|
|
|
2564
2589
|
const t = typeof e == "object" && e !== null ? e : {};
|
|
2565
2590
|
if (t.enabled === !1) return;
|
|
2566
2591
|
const n = t.endpoint ?? `${this.billing.apiOrigin}/api/v1/paywall/${this.billing.paywallId}/events`;
|
|
2567
|
-
this.tracker = new
|
|
2592
|
+
this.tracker = new ze({
|
|
2568
2593
|
endpoint: n,
|
|
2569
2594
|
paywallId: this.billing.paywallId,
|
|
2570
2595
|
capabilities: this.billing.capabilities,
|
|
@@ -2752,26 +2777,39 @@ let mr = class {
|
|
|
2752
2777
|
this.auth && this.openInternal("auth", { ...e, skipTrial: !0, authMode: "signup" });
|
|
2753
2778
|
}
|
|
2754
2779
|
/**
|
|
2755
|
-
* Direct-checkout:
|
|
2756
|
-
*
|
|
2757
|
-
* рендерит pricing-карточки/таблицу собственным UI и
|
|
2758
|
-
* «Buy / Get this plan» вёл прямо в
|
|
2759
|
-
*
|
|
2780
|
+
* Direct-checkout: создать checkout-URL по конкретной цене и сразу открыть
|
|
2781
|
+
* платёжного провайдера, минуя layout с тарифами. Полезно когда
|
|
2782
|
+
* host-приложение рендерит pricing-карточки/таблицу собственным UI и
|
|
2783
|
+
* хочет, чтобы клик по «Buy / Get this plan» вёл прямо в Stripe/Paddle.
|
|
2784
|
+
*
|
|
2785
|
+
* **Late-mount UX.** В отличие от `open()`, модалка не появляется во время
|
|
2786
|
+
* фоновой работы (bootstrap + visibility/trial gates + createCheckout).
|
|
2787
|
+
* Хост на этой фазе показывает busy-state прямо на своей кнопке (через
|
|
2788
|
+
* `state.processing === true` из `paywall.getState()` — или автоматически
|
|
2789
|
+
* через `<PaywallButton priceId>` в sdk-react). Модалка монтируется
|
|
2790
|
+
* ТОЛЬКО когда реально нужна UI:
|
|
2791
|
+
* - `checkout_mode='preauth'` + managed-auth + не залогинен → auth-gate
|
|
2792
|
+
* (форма signin'а); после успеха auto-resume в createCheckout.
|
|
2793
|
+
* - popup провайдера заблокирован браузером → popup_blocked view с
|
|
2794
|
+
* retry-кнопкой под fresh user gesture.
|
|
2795
|
+
* - popup открылся успешно → awaiting_payment view (индикатор «оплати
|
|
2796
|
+
* в новой вкладке» + I've paid).
|
|
2797
|
+
*
|
|
2798
|
+
* Что эмитится без модалки:
|
|
2799
|
+
* - `purchase_completed{restored:true, priceId}` когда юзер уже подписан
|
|
2800
|
+
* (cached user, fresh bootstrap, или 409 hasActivePurchase от бэка) —
|
|
2801
|
+
* headless reject;
|
|
2802
|
+
* - `error` когда createCheckout упал или identity.email отсутствует;
|
|
2803
|
+
* - `visibility_blocked` / `trial_blocked` — стандартные gate-эвенты.
|
|
2760
2804
|
*
|
|
2761
|
-
* Что
|
|
2762
|
-
* - `
|
|
2763
|
-
*
|
|
2764
|
-
* - popup_blocked / awaiting_payment / purchase_success views;
|
|
2765
|
-
* - UserWatcher polling после `checkout_started`;
|
|
2766
|
-
* - аналитика `checkout_started`/`purchase_completed`/`purchase_failed`.
|
|
2805
|
+
* Что эмитится одновременно с модалкой:
|
|
2806
|
+
* - `checkout_started{priceId, url, acquiring}` ровно когда headless URL
|
|
2807
|
+
* получен, ДО mount'а awaiting_payment/popup_blocked.
|
|
2767
2808
|
*
|
|
2768
|
-
*
|
|
2769
|
-
*
|
|
2770
|
-
*
|
|
2771
|
-
*
|
|
2772
|
-
* 409 hasActivePurchase от бэка) — НЕ показывает restored success-view,
|
|
2773
|
-
* эмитит `purchase_completed{restored:true}` и закрывает/не открывает
|
|
2774
|
-
* модалку. Host сам решает как сообщить юзеру.
|
|
2809
|
+
* Offer (countdown-скидка) автоматически резолвится из cached offers'ов
|
|
2810
|
+
* через `getOfferForPrice(priceId)` и передаётся в createCheckout как
|
|
2811
|
+
* `offerId` — чтобы duration_minutes-офферы тоже применились на бэке
|
|
2812
|
+
* (для них нет server-side таймера, без явного offer-id скидка теряется).
|
|
2775
2813
|
*
|
|
2776
2814
|
* Требования:
|
|
2777
2815
|
* - `identity.email` должен быть выставлен (через `opts.identity`, либо
|
|
@@ -2780,13 +2818,13 @@ let mr = class {
|
|
|
2780
2818
|
* - В `checkout_mode='preauth'` без managed-auth — backend требует
|
|
2781
2819
|
* email-юзера; убедись что `identity.email` явно задан.
|
|
2782
2820
|
*
|
|
2783
|
-
* Без
|
|
2784
|
-
*
|
|
2785
|
-
*
|
|
2786
|
-
*
|
|
2821
|
+
* Без модалки совсем (когда host рендерит свой awaiting-payment экран) —
|
|
2822
|
+
* используй `paywall.billing.createCheckout({priceId, offerId})` напрямую,
|
|
2823
|
+
* но тогда auth-gate / popup_blocked / awaiting_payment придётся рисовать
|
|
2824
|
+
* самостоятельно.
|
|
2787
2825
|
*/
|
|
2788
2826
|
checkout(e, t = {}) {
|
|
2789
|
-
if (t.renew !== !0 && this.billing.getCachedUser()?.has_active_subscription) {
|
|
2827
|
+
if (t.identity && this.billing.setIdentity(t.identity), t.renew !== !0 && this.billing.getCachedUser()?.has_active_subscription) {
|
|
2790
2828
|
this.emit("purchase_completed", {
|
|
2791
2829
|
priceId: e,
|
|
2792
2830
|
sessionId: null,
|
|
@@ -2794,7 +2832,131 @@ let mr = class {
|
|
|
2794
2832
|
});
|
|
2795
2833
|
return;
|
|
2796
2834
|
}
|
|
2797
|
-
this.
|
|
2835
|
+
this.runDirectCheckout(e, t);
|
|
2836
|
+
}
|
|
2837
|
+
/** Headless prep-work для `checkout(priceId, opts)`: bootstrap → gates →
|
|
2838
|
+
* preauth check → createCheckout → mount модалки с финальным view.
|
|
2839
|
+
* Вынесено отдельным методом ради чистого async/await flow вместо вложенных
|
|
2840
|
+
* then-chain'ов (5+ ветвей). Любая ошибка не пробрасывается наружу: эмитим
|
|
2841
|
+
* через `paywall.emit('error')` и выходим — host подписан на `error`-event. */
|
|
2842
|
+
async runDirectCheckout(e, t) {
|
|
2843
|
+
const n = t.renew === !0, i = t.skipTrial === !0, s = t.skipVisibility === !0;
|
|
2844
|
+
this.applyProcessing(!0);
|
|
2845
|
+
const a = () => {
|
|
2846
|
+
this.applyProcessing(!1);
|
|
2847
|
+
};
|
|
2848
|
+
let c;
|
|
2849
|
+
try {
|
|
2850
|
+
c = await this.billing.bootstrap();
|
|
2851
|
+
} catch (m) {
|
|
2852
|
+
const A = m instanceof L ? m : new L("unknown", "Failed to load paywall", { cause: m });
|
|
2853
|
+
this.emit("error", A), a();
|
|
2854
|
+
return;
|
|
2855
|
+
}
|
|
2856
|
+
if (!s) {
|
|
2857
|
+
const m = c.settings.visibility;
|
|
2858
|
+
if (m && (this.lastVisibility = m, !m.visible)) {
|
|
2859
|
+
this.emit("visibility_blocked", m), a();
|
|
2860
|
+
return;
|
|
2861
|
+
}
|
|
2862
|
+
}
|
|
2863
|
+
if (!i && await this.checkTrialBeforeCheckout(c)) {
|
|
2864
|
+
a();
|
|
2865
|
+
return;
|
|
2866
|
+
}
|
|
2867
|
+
if (!n && c.user?.has_active_subscription) {
|
|
2868
|
+
this.emit("purchase_completed", {
|
|
2869
|
+
priceId: e,
|
|
2870
|
+
sessionId: null,
|
|
2871
|
+
restored: !0
|
|
2872
|
+
}), a();
|
|
2873
|
+
return;
|
|
2874
|
+
}
|
|
2875
|
+
const l = c.settings.checkout_mode ?? "guest", h = this.auth?.getCachedSession() ?? null, d = !!h && !h.user.is_anonymous;
|
|
2876
|
+
if (l === "preauth" && !!this.auth && !d) {
|
|
2877
|
+
this.purchased = !1, this.mountAndShow("auth", {
|
|
2878
|
+
renew: n,
|
|
2879
|
+
authMode: "signin",
|
|
2880
|
+
checkoutPriceId: e
|
|
2881
|
+
});
|
|
2882
|
+
return;
|
|
2883
|
+
}
|
|
2884
|
+
const _ = this.getOfferForPrice(e);
|
|
2885
|
+
let p;
|
|
2886
|
+
try {
|
|
2887
|
+
p = await this.billing.createCheckout({
|
|
2888
|
+
priceId: e,
|
|
2889
|
+
offerId: _?.offer.id,
|
|
2890
|
+
ignoreActivePurchase: n
|
|
2891
|
+
});
|
|
2892
|
+
} catch (m) {
|
|
2893
|
+
if (m instanceof L && m.code === "already_purchased") {
|
|
2894
|
+
try {
|
|
2895
|
+
await this.billing.getUser({ force: !0 });
|
|
2896
|
+
} catch {
|
|
2897
|
+
}
|
|
2898
|
+
this.emit("purchase_completed", {
|
|
2899
|
+
priceId: e,
|
|
2900
|
+
sessionId: null,
|
|
2901
|
+
restored: !0
|
|
2902
|
+
}), a();
|
|
2903
|
+
return;
|
|
2904
|
+
}
|
|
2905
|
+
const A = m instanceof L ? m : new L("checkout_failed", "Checkout failed", { cause: m });
|
|
2906
|
+
this.emit("error", A), a();
|
|
2907
|
+
return;
|
|
2908
|
+
}
|
|
2909
|
+
if (this.emit("checkout_started", {
|
|
2910
|
+
priceId: e,
|
|
2911
|
+
url: p.url,
|
|
2912
|
+
acquiring: p.acquiring
|
|
2913
|
+
}), this.startUserWatcher(), typeof window > "u" || !p.url) {
|
|
2914
|
+
this.mountAndShow("awaiting_payment", {
|
|
2915
|
+
renew: n,
|
|
2916
|
+
checkoutPriceId: e,
|
|
2917
|
+
checkoutUrl: p.url
|
|
2918
|
+
});
|
|
2919
|
+
return;
|
|
2920
|
+
}
|
|
2921
|
+
const v = window.open(p.url, "_blank");
|
|
2922
|
+
if (this.purchased = !1, v) {
|
|
2923
|
+
try {
|
|
2924
|
+
v.opener = null;
|
|
2925
|
+
} catch {
|
|
2926
|
+
}
|
|
2927
|
+
this.mountAndShow("awaiting_payment", {
|
|
2928
|
+
renew: n,
|
|
2929
|
+
checkoutPriceId: e,
|
|
2930
|
+
checkoutUrl: p.url
|
|
2931
|
+
});
|
|
2932
|
+
} else
|
|
2933
|
+
this.mountAndShow("popup_blocked", {
|
|
2934
|
+
renew: n,
|
|
2935
|
+
checkoutPriceId: e,
|
|
2936
|
+
checkoutUrl: p.url
|
|
2937
|
+
});
|
|
2938
|
+
}
|
|
2939
|
+
/** Trial-check без mount'а (для late-mount direct-checkout). Возвращает
|
|
2940
|
+
* true если trial заблокировал — caller должен прекратить flow. На любой
|
|
2941
|
+
* storage-ошибке log+продолжаем (не блокируем продажу). */
|
|
2942
|
+
async checkTrialBeforeCheckout(e) {
|
|
2943
|
+
const t = e.settings.trial;
|
|
2944
|
+
if (!t) return !1;
|
|
2945
|
+
const n = this.ensureTrialStore(t);
|
|
2946
|
+
try {
|
|
2947
|
+
const i = await n.check();
|
|
2948
|
+
if (this.lastTrialStatus = i, i.mode === "none") return !1;
|
|
2949
|
+
if (i.blocked) {
|
|
2950
|
+
const s = await n.recordBlock();
|
|
2951
|
+
return this.lastTrialStatus = s, this.emit("trial_blocked", s), !0;
|
|
2952
|
+
}
|
|
2953
|
+
return this.trialExpiredFired || (this.trialExpiredFired = !0, this.emit("trial_expired")), !1;
|
|
2954
|
+
} catch (i) {
|
|
2955
|
+
return typeof console < "u" && console.warn("[paywall] trial check failed", i), !1;
|
|
2956
|
+
}
|
|
2957
|
+
}
|
|
2958
|
+
applyProcessing(e) {
|
|
2959
|
+
this.currentState.processing !== e && this.applyState({ ...this.currentState, processing: e });
|
|
2798
2960
|
}
|
|
2799
2961
|
/**
|
|
2800
2962
|
* Headless anonymous signin без открытия модалки. Внутри:
|
|
@@ -2809,7 +2971,7 @@ let mr = class {
|
|
|
2809
2971
|
*/
|
|
2810
2972
|
signInAnonymously() {
|
|
2811
2973
|
return this.auth ? this.auth.signInAnonymously() : Promise.reject(
|
|
2812
|
-
new
|
|
2974
|
+
new L(
|
|
2813
2975
|
"invalid_config",
|
|
2814
2976
|
"signInAnonymously requires managed-auth. Pass `auth: true` to PaywallUI."
|
|
2815
2977
|
)
|
|
@@ -2817,25 +2979,25 @@ let mr = class {
|
|
|
2817
2979
|
}
|
|
2818
2980
|
openInternal(e, t) {
|
|
2819
2981
|
t.identity && this.billing.setIdentity(t.identity), this.purchased = !1;
|
|
2820
|
-
const n = t.skipTrial === !0 || e === "support", i = t.skipVisibility === !0 || e === "support" || e === "auth", s = t.renew === !0
|
|
2982
|
+
const n = t.skipTrial === !0 || e === "support", i = t.skipVisibility === !0 || e === "support" || e === "auth", s = t.renew === !0;
|
|
2821
2983
|
if (n && i) {
|
|
2822
|
-
this.mountAndShow(e, { renew: s, authMode: t.authMode
|
|
2984
|
+
this.mountAndShow(e, { renew: s, authMode: t.authMode });
|
|
2823
2985
|
return;
|
|
2824
2986
|
}
|
|
2825
|
-
const
|
|
2826
|
-
if (
|
|
2827
|
-
this.runOpenGates(e,
|
|
2987
|
+
const a = this.billing.getCachedBootstrap();
|
|
2988
|
+
if (a) {
|
|
2989
|
+
this.runOpenGates(e, a, { skipTrial: n, skipVisibility: i, renew: s });
|
|
2828
2990
|
return;
|
|
2829
2991
|
}
|
|
2830
2992
|
if (this.mountThenLoad) {
|
|
2831
|
-
this.mountAndShow(e, { renew: s
|
|
2993
|
+
this.mountAndShow(e, { renew: s }), this.billing.bootstrap().then((c) => this.runDelayedGates(c, { skipTrial: n, skipVisibility: i })).catch(() => {
|
|
2832
2994
|
});
|
|
2833
2995
|
return;
|
|
2834
2996
|
}
|
|
2835
2997
|
this.billing.bootstrap().then(
|
|
2836
|
-
(
|
|
2998
|
+
(c) => this.runOpenGates(e, c, { skipTrial: n, skipVisibility: i, renew: s })
|
|
2837
2999
|
).catch(() => {
|
|
2838
|
-
this.mountAndShow(e, { renew: s
|
|
3000
|
+
this.mountAndShow(e, { renew: s });
|
|
2839
3001
|
});
|
|
2840
3002
|
}
|
|
2841
3003
|
/** Применить gates ПОСЛЕ того, как модалка уже смонтирована (mount-then-load
|
|
@@ -2881,68 +3043,70 @@ let mr = class {
|
|
|
2881
3043
|
}
|
|
2882
3044
|
}
|
|
2883
3045
|
if (n.skipTrial) {
|
|
2884
|
-
this.mountAndShow(e, { renew: n.renew
|
|
3046
|
+
this.mountAndShow(e, { renew: n.renew });
|
|
2885
3047
|
return;
|
|
2886
3048
|
}
|
|
2887
|
-
this.gateThroughTrial(e, t, n.renew
|
|
3049
|
+
this.gateThroughTrial(e, t, n.renew);
|
|
2888
3050
|
}
|
|
2889
|
-
gateThroughTrial(e, t, n
|
|
2890
|
-
const
|
|
2891
|
-
if (!
|
|
2892
|
-
this.mountAndShow(e, { renew: n
|
|
3051
|
+
gateThroughTrial(e, t, n) {
|
|
3052
|
+
const i = t.settings.trial;
|
|
3053
|
+
if (!i) {
|
|
3054
|
+
this.mountAndShow(e, { renew: n });
|
|
2893
3055
|
return;
|
|
2894
3056
|
}
|
|
2895
|
-
const
|
|
2896
|
-
|
|
2897
|
-
if (this.lastTrialStatus =
|
|
2898
|
-
this.mountAndShow(e, { renew: n
|
|
3057
|
+
const s = this.ensureTrialStore(i);
|
|
3058
|
+
s.check().then(async (a) => {
|
|
3059
|
+
if (this.lastTrialStatus = a, a.mode === "none") {
|
|
3060
|
+
this.mountAndShow(e, { renew: n });
|
|
2899
3061
|
return;
|
|
2900
3062
|
}
|
|
2901
|
-
if (
|
|
2902
|
-
const
|
|
2903
|
-
this.lastTrialStatus =
|
|
3063
|
+
if (a.blocked) {
|
|
3064
|
+
const c = await s.recordBlock();
|
|
3065
|
+
this.lastTrialStatus = c, this.emit("trial_blocked", c);
|
|
2904
3066
|
return;
|
|
2905
3067
|
}
|
|
2906
|
-
this.trialExpiredFired || (this.trialExpiredFired = !0, this.emit("trial_expired")), this.mountAndShow(e, { renew: n
|
|
2907
|
-
}).catch((
|
|
2908
|
-
typeof console < "u" && console.warn("[paywall] trial check failed",
|
|
3068
|
+
this.trialExpiredFired || (this.trialExpiredFired = !0, this.emit("trial_expired")), this.mountAndShow(e, { renew: n });
|
|
3069
|
+
}).catch((a) => {
|
|
3070
|
+
typeof console < "u" && console.warn("[paywall] trial check failed", a), this.mountAndShow(e, { renew: n });
|
|
2909
3071
|
});
|
|
2910
3072
|
}
|
|
2911
3073
|
ensureTrialStore(e) {
|
|
2912
|
-
if (this.trialStore && this.trialStoreConfig &&
|
|
3074
|
+
if (this.trialStore && this.trialStoreConfig && kr(this.trialStoreConfig, e))
|
|
2913
3075
|
return this.trialStore;
|
|
2914
3076
|
this.trialStoreConfig = e;
|
|
2915
3077
|
const t = this.billing.createTrialStore;
|
|
2916
|
-
return this.trialStore = typeof t == "function" ? t.call(this.billing, e) :
|
|
3078
|
+
return this.trialStore = typeof t == "function" ? t.call(this.billing, e) : qe(this.billing.getStorage(), this.billing.paywallId, e), this.trialStore;
|
|
2917
3079
|
}
|
|
2918
3080
|
mountAndShow(e, t = {}) {
|
|
2919
|
-
const n = t.renew === !0, i = t.authMode,
|
|
3081
|
+
const n = t.renew === !0, i = t.authMode, a = e === "auth" || e === "awaiting_payment" || e === "popup_blocked" ? t.checkoutPriceId ?? null : null, c = e === "awaiting_payment" || e === "popup_blocked" ? t.checkoutUrl ?? null : null;
|
|
2920
3082
|
if (this.handle) {
|
|
2921
3083
|
this.isOpen = !0, this.handle.update({
|
|
2922
3084
|
open: !0,
|
|
2923
3085
|
initialView: e,
|
|
2924
3086
|
initialAuthMode: i,
|
|
2925
|
-
initialCheckoutPriceId:
|
|
3087
|
+
initialCheckoutPriceId: a,
|
|
3088
|
+
initialCheckoutUrl: c,
|
|
2926
3089
|
purchased: !1,
|
|
2927
3090
|
renew: n
|
|
2928
3091
|
}), this.emit("open");
|
|
2929
3092
|
return;
|
|
2930
3093
|
}
|
|
2931
|
-
this.isOpen = !0, this.handle =
|
|
2932
|
-
|
|
3094
|
+
this.isOpen = !0, this.handle = tt(
|
|
3095
|
+
ar,
|
|
2933
3096
|
{
|
|
2934
3097
|
client: this.billing,
|
|
2935
3098
|
open: !0,
|
|
2936
3099
|
initialView: e,
|
|
2937
3100
|
initialAuthMode: i,
|
|
2938
|
-
initialCheckoutPriceId:
|
|
3101
|
+
initialCheckoutPriceId: a,
|
|
3102
|
+
initialCheckoutUrl: c,
|
|
2939
3103
|
purchased: !1,
|
|
2940
3104
|
renew: n,
|
|
2941
3105
|
onClose: () => this.close(),
|
|
2942
|
-
onEvent: (
|
|
2943
|
-
this.emit(
|
|
3106
|
+
onEvent: (l, h) => {
|
|
3107
|
+
this.emit(l, h), l === "checkout_started" && this.startUserWatcher();
|
|
2944
3108
|
},
|
|
2945
|
-
onState: (
|
|
3109
|
+
onState: (l) => this.applyState(l),
|
|
2946
3110
|
inline: this.inline,
|
|
2947
3111
|
locale: this.forceLocale
|
|
2948
3112
|
},
|
|
@@ -2950,7 +3114,7 @@ let mr = class {
|
|
|
2950
3114
|
), this.emit("open");
|
|
2951
3115
|
}
|
|
2952
3116
|
applyState(e) {
|
|
2953
|
-
if (!
|
|
3117
|
+
if (!wr(this.currentState, e)) {
|
|
2954
3118
|
this.currentState = e;
|
|
2955
3119
|
for (const t of this.stateListeners)
|
|
2956
3120
|
try {
|
|
@@ -3052,10 +3216,10 @@ let mr = class {
|
|
|
3052
3216
|
getOfferForPrice(e) {
|
|
3053
3217
|
const t = this.billing.getCachedOffers();
|
|
3054
3218
|
if (!t) return null;
|
|
3055
|
-
const n =
|
|
3056
|
-
return n ?
|
|
3219
|
+
const n = N(t, e);
|
|
3220
|
+
return n ? Ke(n, {
|
|
3057
3221
|
now: Date.now(),
|
|
3058
|
-
readStart:
|
|
3222
|
+
readStart: Qe
|
|
3059
3223
|
}) : null;
|
|
3060
3224
|
}
|
|
3061
3225
|
/** Снимок текущего «языка юзера» — proxy над `billing.getUserLanguage()`.
|
|
@@ -3146,7 +3310,7 @@ let mr = class {
|
|
|
3146
3310
|
// В extension popup runtime — no-op (popup не доживёт). Там полагаемся на
|
|
3147
3311
|
// bootstrap при следующем открытии.
|
|
3148
3312
|
startUserWatcher() {
|
|
3149
|
-
this.watcher ||
|
|
3313
|
+
this.watcher || mr() && (this.watcher = new gr({
|
|
3150
3314
|
client: this.billing,
|
|
3151
3315
|
onActive: (e) => {
|
|
3152
3316
|
this.watcher = null, this.emit("purchase_completed", { priceId: null, sessionId: null });
|
|
@@ -3165,7 +3329,7 @@ let mr = class {
|
|
|
3165
3329
|
}), this.watcher.start());
|
|
3166
3330
|
}
|
|
3167
3331
|
close() {
|
|
3168
|
-
!this.isOpen || !this.handle || (this.isOpen = !1, this.purchased = !1, this.handle.update({ open: !1, purchased: !1 }), this.applyState(
|
|
3332
|
+
!this.isOpen || !this.handle || (this.isOpen = !1, this.purchased = !1, this.handle.update({ open: !1, purchased: !1 }), this.applyState(se), this.emit("close"));
|
|
3169
3333
|
}
|
|
3170
3334
|
/**
|
|
3171
3335
|
* Сканирует текущий URL на маркеры возврата с checkout и эмитит
|
|
@@ -3175,23 +3339,23 @@ let mr = class {
|
|
|
3175
3339
|
*/
|
|
3176
3340
|
checkReturn() {
|
|
3177
3341
|
if (typeof window > "u") return;
|
|
3178
|
-
const e = new URL(window.location.href), t =
|
|
3342
|
+
const e = new URL(window.location.href), t = _e(e.hash.replace(/^#/, "")), n = _e(e.search.replace(/^\?/, "")), i = t ?? n;
|
|
3179
3343
|
i && (i.status === "paid" ? (this.emit("purchase_completed", {
|
|
3180
3344
|
priceId: i.priceId,
|
|
3181
3345
|
sessionId: i.sessionId
|
|
3182
|
-
}),
|
|
3346
|
+
}), vr(i)) : (i.status === "failed" || i.status === "cancelled") && this.emit("purchase_failed", { reason: i.status }), _r(e));
|
|
3183
3347
|
}
|
|
3184
3348
|
destroy() {
|
|
3185
|
-
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 =
|
|
3349
|
+
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 = se;
|
|
3186
3350
|
}
|
|
3187
3351
|
};
|
|
3188
|
-
function
|
|
3352
|
+
function br(r) {
|
|
3189
3353
|
if (!r.auth) return { auth: void 0, ownsAuth: !1 };
|
|
3190
|
-
if (r.auth instanceof
|
|
3354
|
+
if (r.auth instanceof ue || xr(r.auth))
|
|
3191
3355
|
return { auth: r.auth, ownsAuth: !1 };
|
|
3192
3356
|
const e = r.auth === !0 ? {} : r.auth;
|
|
3193
3357
|
return {
|
|
3194
|
-
auth: new
|
|
3358
|
+
auth: new ue({
|
|
3195
3359
|
paywallId: r.paywallId,
|
|
3196
3360
|
apiOrigin: e.apiOrigin ?? r.apiOrigin,
|
|
3197
3361
|
storage: e.storage ?? r.storage,
|
|
@@ -3206,13 +3370,13 @@ function xr(r) {
|
|
|
3206
3370
|
const e = r;
|
|
3207
3371
|
return typeof e.onAuthChange == "function" && typeof e.getCachedSession == "function" && typeof e.signOut == "function";
|
|
3208
3372
|
}
|
|
3209
|
-
function br(r, e) {
|
|
3210
|
-
return r.open === e.open && r.view === e.view && r.error === e.error;
|
|
3211
|
-
}
|
|
3212
3373
|
function wr(r, e) {
|
|
3374
|
+
return r.open === e.open && r.view === e.view && r.error === e.error && r.processing === e.processing;
|
|
3375
|
+
}
|
|
3376
|
+
function kr(r, e) {
|
|
3213
3377
|
return r.mode === e.mode && r.payload === e.payload && r.storage === e.storage;
|
|
3214
3378
|
}
|
|
3215
|
-
function
|
|
3379
|
+
function _e(r) {
|
|
3216
3380
|
if (!r) return null;
|
|
3217
3381
|
const e = new URLSearchParams(r), t = e.get(F.status);
|
|
3218
3382
|
return t ? {
|
|
@@ -3221,7 +3385,7 @@ function ve(r) {
|
|
|
3221
3385
|
sessionId: e.get(F.sessionId)
|
|
3222
3386
|
} : null;
|
|
3223
3387
|
}
|
|
3224
|
-
function
|
|
3388
|
+
function vr(r) {
|
|
3225
3389
|
if (!(typeof window > "u" || !window.opener))
|
|
3226
3390
|
try {
|
|
3227
3391
|
window.opener.postMessage(
|
|
@@ -3236,7 +3400,7 @@ function kr(r) {
|
|
|
3236
3400
|
} catch {
|
|
3237
3401
|
}
|
|
3238
3402
|
}
|
|
3239
|
-
function
|
|
3403
|
+
function _r(r) {
|
|
3240
3404
|
const e = (n, i) => {
|
|
3241
3405
|
if (!n) return "";
|
|
3242
3406
|
const s = new URLSearchParams(n.replace(/^[?#]/, ""));
|
|
@@ -3246,7 +3410,7 @@ function vr(r) {
|
|
|
3246
3410
|
}, t = r.pathname + e(r.search, "?") + e(r.hash, "#");
|
|
3247
3411
|
window.history.replaceState(null, "", t);
|
|
3248
3412
|
}
|
|
3249
|
-
class
|
|
3413
|
+
class Sr {
|
|
3250
3414
|
constructor(e, t, n) {
|
|
3251
3415
|
this.transport = e, this.paywallId = t, this.config = n;
|
|
3252
3416
|
}
|
|
@@ -3269,7 +3433,7 @@ class _r {
|
|
|
3269
3433
|
});
|
|
3270
3434
|
}
|
|
3271
3435
|
}
|
|
3272
|
-
class
|
|
3436
|
+
class Cr {
|
|
3273
3437
|
constructor(e, t) {
|
|
3274
3438
|
this.transport = e, this.cachedBootstrap = null, this.cachedUser = null, this.cachedBalances = null, this.identity = null, this.userListeners = /* @__PURE__ */ new Set(), this.balanceListeners = /* @__PURE__ */ new Set(), this.bootstrapListeners = /* @__PURE__ */ new Set(), this.unsubUserBroadcast = null, this.unsubBalancesBroadcast = null, this.paywallId = t.paywallId, this.apiOrigin = t.apiOrigin, this.remoteStorageAdapter = {
|
|
3275
3439
|
getItem: (n) => this.transport.request("storage.get", { key: n }),
|
|
@@ -3456,7 +3620,7 @@ class Sr {
|
|
|
3456
3620
|
* read-modify-write. PaywallUI duck-types этот метод и предпочитает его
|
|
3457
3621
|
* локальной фабрике, если он есть. */
|
|
3458
3622
|
createTrialStore(e) {
|
|
3459
|
-
return new
|
|
3623
|
+
return new Sr(this.transport, this.paywallId, e);
|
|
3460
3624
|
}
|
|
3461
3625
|
// === Identity ===
|
|
3462
3626
|
getIdentity() {
|
|
@@ -3489,10 +3653,10 @@ class Sr {
|
|
|
3489
3653
|
* broadcast'ов от offscreen — чтобы host'овский onUserChange handler
|
|
3490
3654
|
* получил signal независимо от того, кто триггернул обновление. */
|
|
3491
3655
|
applyUser(e) {
|
|
3492
|
-
|
|
3656
|
+
Ir(this.cachedUser, e) || (this.cachedUser = e, this.fireUserListeners(e));
|
|
3493
3657
|
}
|
|
3494
3658
|
applyBalances(e) {
|
|
3495
|
-
|
|
3659
|
+
Ar(this.cachedBalances, e) || (this.cachedBalances = e, this.fireBalanceListeners(e));
|
|
3496
3660
|
}
|
|
3497
3661
|
fireUserListeners(e) {
|
|
3498
3662
|
for (const t of [...this.userListeners])
|
|
@@ -3511,17 +3675,17 @@ class Sr {
|
|
|
3511
3675
|
}
|
|
3512
3676
|
}
|
|
3513
3677
|
}
|
|
3514
|
-
function
|
|
3678
|
+
function Ir(r, e) {
|
|
3515
3679
|
return r === e ? !0 : !r || !e ? !1 : r.has_active_subscription === e.has_active_subscription && (r.purchases?.length ?? 0) === (e.purchases?.length ?? 0);
|
|
3516
3680
|
}
|
|
3517
|
-
function
|
|
3681
|
+
function Ar(r, e) {
|
|
3518
3682
|
if (r === e) return !0;
|
|
3519
3683
|
if (!r || !e || r.length !== e.length) return !1;
|
|
3520
3684
|
for (let t = 0; t < r.length; t++)
|
|
3521
3685
|
if (r[t].type !== e[t].type || r[t].count !== e[t].count) return !1;
|
|
3522
3686
|
return !0;
|
|
3523
3687
|
}
|
|
3524
|
-
class
|
|
3688
|
+
class Lr {
|
|
3525
3689
|
constructor(e, t) {
|
|
3526
3690
|
this.transport = e, this.session = null, this.listeners = /* @__PURE__ */ new Set(), this.unsubBroadcast = null, this.paywallId = t.paywallId, this.apiOrigin = t.apiOrigin, this.unsubBroadcast = this.transport.on("authChange", ({ event: n, session: i }) => {
|
|
3527
3691
|
this.applySession(n, i);
|
|
@@ -3632,14 +3796,14 @@ class Ar {
|
|
|
3632
3796
|
*/
|
|
3633
3797
|
async signInWithOAuth(e) {
|
|
3634
3798
|
if (typeof window > "u")
|
|
3635
|
-
throw new
|
|
3799
|
+
throw new L("oauth_unavailable", "window is required for OAuth");
|
|
3636
3800
|
const t = `pw-oauth-pending-${Math.random().toString(36).slice(2, 10)}`, n = window.open("about:blank", t, "width=480,height=640,popup=yes");
|
|
3637
3801
|
if (!n)
|
|
3638
|
-
throw new
|
|
3802
|
+
throw new L(
|
|
3639
3803
|
"popup_blocked",
|
|
3640
3804
|
"browser blocked auth popup — call from a user gesture"
|
|
3641
3805
|
);
|
|
3642
|
-
|
|
3806
|
+
Tr(n, e.provider);
|
|
3643
3807
|
try {
|
|
3644
3808
|
const { authorizeUrl: i, state: s } = await this.transport.request("auth.oauthStart", {
|
|
3645
3809
|
provider: e.provider,
|
|
@@ -3661,7 +3825,7 @@ class Ar {
|
|
|
3661
3825
|
this.unsubBroadcast?.(), this.unsubBroadcast = null, this.listeners.clear(), this.session = null;
|
|
3662
3826
|
}
|
|
3663
3827
|
applySession(e, t) {
|
|
3664
|
-
if (!
|
|
3828
|
+
if (!Mr(this.session, t)) {
|
|
3665
3829
|
this.session = t;
|
|
3666
3830
|
for (const n of [...this.listeners])
|
|
3667
3831
|
try {
|
|
@@ -3672,17 +3836,17 @@ class Ar {
|
|
|
3672
3836
|
}
|
|
3673
3837
|
}
|
|
3674
3838
|
}
|
|
3675
|
-
function
|
|
3839
|
+
function Mr(r, e) {
|
|
3676
3840
|
return r === e ? !0 : !r || !e ? !1 : r.access_token === e.access_token && r.refresh_token === e.refresh_token && r.expires_at === e.expires_at && r.user.id === e.user.id;
|
|
3677
3841
|
}
|
|
3678
|
-
const
|
|
3842
|
+
const Er = {
|
|
3679
3843
|
google: "Google",
|
|
3680
3844
|
apple: "Apple",
|
|
3681
3845
|
github: "GitHub",
|
|
3682
3846
|
facebook: "Facebook"
|
|
3683
3847
|
};
|
|
3684
|
-
function
|
|
3685
|
-
const t =
|
|
3848
|
+
function Tr(r, e) {
|
|
3849
|
+
const t = Er[e] ?? e;
|
|
3686
3850
|
try {
|
|
3687
3851
|
const n = r.document;
|
|
3688
3852
|
n.title = `Sign in with ${t}`;
|
|
@@ -3697,7 +3861,7 @@ function Er(r, e) {
|
|
|
3697
3861
|
} catch {
|
|
3698
3862
|
}
|
|
3699
3863
|
}
|
|
3700
|
-
class
|
|
3864
|
+
class Br {
|
|
3701
3865
|
constructor(e) {
|
|
3702
3866
|
this.transport = e;
|
|
3703
3867
|
}
|
|
@@ -3709,7 +3873,7 @@ class Pr {
|
|
|
3709
3873
|
});
|
|
3710
3874
|
}
|
|
3711
3875
|
}
|
|
3712
|
-
class
|
|
3876
|
+
class Pr {
|
|
3713
3877
|
constructor(e) {
|
|
3714
3878
|
this.factory = e, this.channel = null, this.channelDisposers = [], this.pending = /* @__PURE__ */ new Map(), this.listeners = /* @__PURE__ */ new Map(), this.destroyed = !1, this.nextId = 0, this.clientId = `c-${Math.random().toString(36).slice(2, 10)}`;
|
|
3715
3879
|
}
|
|
@@ -3723,21 +3887,21 @@ class Tr {
|
|
|
3723
3887
|
this.channel = e;
|
|
3724
3888
|
const t = e.onMessage((i) => this.handleMessage(i)), n = e.onDisconnect(() => this.handleDisconnect());
|
|
3725
3889
|
return this.channelDisposers = [t, n], this.request("handshake", {
|
|
3726
|
-
protocolVersion:
|
|
3890
|
+
protocolVersion: J,
|
|
3727
3891
|
clientId: this.clientId
|
|
3728
3892
|
}).then((i) => {
|
|
3729
|
-
i.protocolVersion !==
|
|
3730
|
-
`[sdk-extension] protocol version mismatch: client=${
|
|
3893
|
+
i.protocolVersion !== J && console.warn(
|
|
3894
|
+
`[sdk-extension] protocol version mismatch: client=${J}, offscreen=${i.protocolVersion}. Update host's @monetize.software/sdk-extension.`
|
|
3731
3895
|
);
|
|
3732
3896
|
}).catch(() => {
|
|
3733
3897
|
}), e;
|
|
3734
3898
|
}
|
|
3735
3899
|
handleMessage(e) {
|
|
3736
|
-
if (
|
|
3900
|
+
if (Ur(e)) {
|
|
3737
3901
|
if (e.type === "response") {
|
|
3738
3902
|
const t = this.pending.get(e.id);
|
|
3739
3903
|
if (!t) return;
|
|
3740
|
-
this.pending.delete(e.id), t.signal?.removeEventListener("abort", t.abortListener), e.ok ? t.resolve(e.result) : t.reject(
|
|
3904
|
+
this.pending.delete(e.id), t.signal?.removeEventListener("abort", t.abortListener), e.ok ? t.resolve(e.result) : t.reject(Fe(e.error));
|
|
3741
3905
|
return;
|
|
3742
3906
|
}
|
|
3743
3907
|
if (e.type === "event") {
|
|
@@ -3758,7 +3922,7 @@ class Tr {
|
|
|
3758
3922
|
const e = Array.from(this.pending.values());
|
|
3759
3923
|
this.pending.clear();
|
|
3760
3924
|
for (const t of e)
|
|
3761
|
-
t.signal?.removeEventListener("abort", t.abortListener), t.reject(new
|
|
3925
|
+
t.signal?.removeEventListener("abort", t.abortListener), t.reject(new Or());
|
|
3762
3926
|
}
|
|
3763
3927
|
request(e, t, n = {}) {
|
|
3764
3928
|
if (this.destroyed)
|
|
@@ -3781,14 +3945,14 @@ class Tr {
|
|
|
3781
3945
|
}
|
|
3782
3946
|
}
|
|
3783
3947
|
}, n.signal.addEventListener("abort", l.abortListener)), this.pending.set(s, l);
|
|
3784
|
-
const
|
|
3948
|
+
const h = {
|
|
3785
3949
|
type: "request",
|
|
3786
3950
|
id: s,
|
|
3787
3951
|
kind: e,
|
|
3788
3952
|
params: t
|
|
3789
3953
|
};
|
|
3790
3954
|
try {
|
|
3791
|
-
i.send(
|
|
3955
|
+
i.send(h);
|
|
3792
3956
|
} catch (d) {
|
|
3793
3957
|
this.pending.delete(s), n.signal?.removeEventListener("abort", l.abortListener), c(d);
|
|
3794
3958
|
}
|
|
@@ -3814,28 +3978,28 @@ class Tr {
|
|
|
3814
3978
|
this.channel?.close(), this.channel = null;
|
|
3815
3979
|
}
|
|
3816
3980
|
}
|
|
3817
|
-
class
|
|
3981
|
+
class Or extends Error {
|
|
3818
3982
|
constructor() {
|
|
3819
3983
|
super("Transport channel disconnected mid-request"), this.code = "transport_disconnected", this.name = "TransportDisconnectedError";
|
|
3820
3984
|
}
|
|
3821
3985
|
}
|
|
3822
|
-
function
|
|
3986
|
+
function Ur(r) {
|
|
3823
3987
|
if (typeof r != "object" || r === null) return !1;
|
|
3824
3988
|
const e = r.type;
|
|
3825
3989
|
return e === "request" || e === "response" || e === "event";
|
|
3826
3990
|
}
|
|
3827
3991
|
let W = null;
|
|
3828
|
-
function
|
|
3829
|
-
return W || (W = new
|
|
3992
|
+
function jr() {
|
|
3993
|
+
return W || (W = new Pr(() => $e(Ze)), W);
|
|
3830
3994
|
}
|
|
3831
|
-
class
|
|
3995
|
+
class Vr extends yr {
|
|
3832
3996
|
constructor(e) {
|
|
3833
|
-
const t =
|
|
3997
|
+
const t = jr(), n = new Cr(t, {
|
|
3834
3998
|
paywallId: e.paywallId,
|
|
3835
3999
|
apiOrigin: e.apiOrigin
|
|
3836
4000
|
});
|
|
3837
4001
|
let i;
|
|
3838
|
-
e.auth === !0 ? i = new
|
|
4002
|
+
e.auth === !0 ? i = new Lr(t, {
|
|
3839
4003
|
paywallId: e.paywallId,
|
|
3840
4004
|
apiOrigin: e.apiOrigin
|
|
3841
4005
|
}) : e.auth && console.warn(
|
|
@@ -3851,7 +4015,7 @@ class $r extends mr {
|
|
|
3851
4015
|
// Внутренний EventTracker отключаем — единственный tracker живёт в
|
|
3852
4016
|
// offscreen'е. Манчиально подписываемся ниже.
|
|
3853
4017
|
analytics: !1
|
|
3854
|
-
}), this.remoteTracker = null, this.trackerUnsubs = [], e.analytics !== !1 && (this.remoteTracker = new
|
|
4018
|
+
}), this.remoteTracker = null, this.trackerUnsubs = [], e.analytics !== !1 && (this.remoteTracker = new Br(t), this.bindAnalytics());
|
|
3855
4019
|
}
|
|
3856
4020
|
/** Зеркало sdk/PaywallUI.initTracker'овских биндингов, но с RemoteEventTracker.
|
|
3857
4021
|
* Когда @monetize.software/sdk экспоузнет публичный hook для inject'а tracker'а,
|
|
@@ -3909,11 +4073,11 @@ class $r extends mr {
|
|
|
3909
4073
|
}
|
|
3910
4074
|
}
|
|
3911
4075
|
export {
|
|
3912
|
-
|
|
3913
|
-
|
|
3914
|
-
|
|
3915
|
-
|
|
3916
|
-
|
|
3917
|
-
|
|
4076
|
+
J as PROTOCOL_VERSION,
|
|
4077
|
+
Vr as PaywallUI,
|
|
4078
|
+
Lr as RemoteAuthClient,
|
|
4079
|
+
Cr as RemoteBillingClient,
|
|
4080
|
+
Br as RemoteEventTracker,
|
|
4081
|
+
jr as getContentTransport
|
|
3918
4082
|
};
|
|
3919
4083
|
//# sourceMappingURL=content.js.map
|