@monetize.software/sdk-extension 3.0.0-alpha.10 → 3.0.0-alpha.11

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/content.js CHANGED
@@ -1,40 +1,82 @@
1
- import { P as T, B as je, E as Re, c as ze, A as ce, w as De, a as X, r as qe, b as Ne } from "./chunks/chrome-port-CB1NEZOC.js";
1
+ import { P as T, B as je, E as Re, c as De, A as ce, w as ze, a as X, r as Ne, b as qe } from "./chunks/chrome-port-KYVwww_u.js";
2
2
  import { render as J, h as ue, createContext as Fe } from "preact";
3
3
  import { jsx as o, jsxs as u, Fragment as se } from "preact/jsx-runtime";
4
- import { useState as x, useEffect as B, useContext as Ve, useRef as R, useMemo as $e, useLayoutEffect as He } from "preact/hooks";
4
+ import { useState as x, useEffect as B, useContext as $e, useRef as R, useMemo as Ve, useLayoutEffect as He } from "preact/hooks";
5
5
  import { P as Ge } from "./chunks/port-name-ervLBWAQ.js";
6
+ function We(t) {
7
+ return `pw-offer-${t}-start`;
8
+ }
9
+ function $(t, e) {
10
+ if (!t || t.length === 0) return null;
11
+ const r = t.find(
12
+ (i) => i.price_id === e && (i.discount_percent ?? 0) > 0
13
+ );
14
+ return r || (t.find(
15
+ (i) => i.price_id == null && (i.discount_percent ?? 0) > 0
16
+ ) ?? null);
17
+ }
18
+ function Ze(t, e = {}) {
19
+ const r = t.discount_percent ?? 0;
20
+ if (r <= 0) return null;
21
+ const n = e.now ?? Date.now(), i = Ye(t, e.readStart), s = Ke(t, i), a = i !== null ? Math.max(0, i - n) : null;
22
+ return i !== null && i <= n ? null : { offer: t, discountPercent: r, remainingMs: a, totalMs: s, expiresAt: i };
23
+ }
24
+ function Ye(t, e) {
25
+ if (t.expires_at) {
26
+ const r = Date.parse(t.expires_at);
27
+ return Number.isFinite(r) ? r : null;
28
+ }
29
+ if (t.duration_minutes && t.duration_minutes > 0 && e) {
30
+ const r = e(t.id);
31
+ if (!r) return null;
32
+ const n = Date.parse(r);
33
+ return Number.isFinite(n) ? n + t.duration_minutes * 6e4 : null;
34
+ }
35
+ return null;
36
+ }
37
+ function Ke(t, e) {
38
+ return t.duration_minutes && t.duration_minutes > 0 ? t.duration_minutes * 6e4 : e !== null ? e - Date.now() : null;
39
+ }
40
+ function Xe(t) {
41
+ if (typeof window > "u") return null;
42
+ try {
43
+ return window.localStorage.getItem(We(t));
44
+ } catch {
45
+ return null;
46
+ }
47
+ }
6
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%}}';
7
49
  let de = !1;
8
- function We() {
50
+ function Je() {
9
51
  if (de || (de = !0, typeof CSS > "u" || typeof CSS.registerProperty != "function")) return;
10
- let r;
52
+ let t;
11
53
  try {
12
54
  const e = new CSSStyleSheet();
13
- e.replaceSync(_e), r = e.cssRules;
55
+ e.replaceSync(_e), t = e.cssRules;
14
56
  } catch {
15
57
  return;
16
58
  }
17
- for (const e of r) {
59
+ for (const e of t) {
18
60
  if (e.constructor.name !== "CSSPropertyRule") continue;
19
- const t = e;
61
+ const r = e;
20
62
  try {
21
63
  CSS.registerProperty({
22
- name: t.name,
23
- syntax: t.syntax,
24
- inherits: t.inherits,
25
- ...t.initialValue != null ? { initialValue: t.initialValue } : {}
64
+ name: r.name,
65
+ syntax: r.syntax,
66
+ inherits: r.inherits,
67
+ ...r.initialValue != null ? { initialValue: r.initialValue } : {}
26
68
  });
27
69
  } catch {
28
70
  }
29
71
  }
30
72
  }
31
- function Ze(r, e, t = {}) {
73
+ function Qe(t, e, r = {}) {
32
74
  if (typeof document > "u")
33
75
  throw new Error("mountShadow called in non-DOM environment");
34
- We();
35
- const n = t.host ?? document.createElement("div");
36
- 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);
37
- const i = n.attachShadow({ mode: t.shadowMode ?? "closed" }), s = `
76
+ Je();
77
+ const n = r.host ?? document.createElement("div");
78
+ n.setAttribute("data-paywall-host", ""), n.style.cssText = r.inline ? "all: initial; position: absolute; inset: 0; z-index: 1; pointer-events: none;" : "all: initial; position: fixed; inset: 0; z-index: 2147483647; pointer-events: none;", !n.isConnected && !r.inline && document.body.appendChild(n);
79
+ const i = n.attachShadow({ mode: r.shadowMode ?? "closed" }), s = `
38
80
  :host {
39
81
  all: initial !important;
40
82
  display: block !important;
@@ -53,33 +95,33 @@ function Ze(r, e, t = {}) {
53
95
  visibility: visible !important;
54
96
  }
55
97
  `, a = document.createElement("style");
56
- a.textContent = s + _e + (t.injectCss ?? ""), i.appendChild(a);
98
+ a.textContent = s + _e + (r.injectCss ?? ""), i.appendChild(a);
57
99
  const c = document.createElement("div");
58
100
  c.style.pointerEvents = "auto", i.appendChild(c);
59
101
  let l = e;
60
- return J(ue(r, l), c), {
102
+ return J(ue(t, l), c), {
61
103
  shadowRoot: i,
62
104
  update(f) {
63
- l = { ...l, ...f }, J(ue(r, l), c);
105
+ l = { ...l, ...f }, J(ue(t, l), c);
64
106
  },
65
107
  unmount() {
66
108
  J(null, c), n.remove();
67
109
  }
68
110
  };
69
111
  }
70
- const Ye = (r, e, t) => {
71
- const n = r[e];
112
+ const et = (t, e, r) => {
113
+ const n = t[e];
72
114
  return n ? typeof n == "function" ? n() : Promise.resolve(n) : new Promise((i, s) => {
73
115
  (typeof queueMicrotask == "function" ? queueMicrotask : setTimeout)(
74
116
  s.bind(
75
117
  null,
76
118
  new Error(
77
- "Unknown variable dynamic import: " + e + (e.split("/").length !== t ? ". Note that variables only represent file names one level deep." : "")
119
+ "Unknown variable dynamic import: " + e + (e.split("/").length !== r ? ". Note that variables only represent file names one level deep." : "")
78
120
  )
79
121
  )
80
122
  );
81
123
  });
82
- }, Ke = [
124
+ }, tt = [
83
125
  "ru",
84
126
  "uk",
85
127
  "de",
@@ -107,62 +149,62 @@ const Ye = (r, e, t) => {
107
149
  "th",
108
150
  "vi",
109
151
  "he"
110
- ], Se = (r, e, t) => Ie(e, t), Ce = Fe({ t: Se, locale: "en" });
111
- function Ie(r, e) {
112
- if (!e) return r;
113
- let t = r;
152
+ ], Se = (t, e, r) => Ie(e, r), Ce = Fe({ t: Se, locale: "en" });
153
+ function Ie(t, e) {
154
+ if (!e) return t;
155
+ let r = t;
114
156
  for (const [n, i] of Object.entries(e))
115
- t = t.split(`{${n}}`).join(String(i));
116
- return t;
157
+ r = r.split(`{${n}}`).join(String(i));
158
+ return r;
117
159
  }
118
160
  const Q = /* @__PURE__ */ new Map(), ee = /* @__PURE__ */ new Map();
119
- function Ae(r) {
120
- return Ke.includes(r);
161
+ function Ae(t) {
162
+ return tt.includes(t);
121
163
  }
122
- function Xe(r) {
164
+ function rt(t) {
123
165
  const e = [];
124
166
  if (typeof navigator < "u" && navigator.language) {
125
167
  e.push(navigator.language);
126
168
  const n = navigator.language.split("-")[0];
127
169
  n && n !== navigator.language && e.push(n);
128
170
  }
129
- const t = r.settings.locale_default;
130
- if (t) {
131
- e.push(t);
132
- const n = t.split("-")[0];
133
- n && n !== t && e.push(n);
171
+ const r = t.settings.locale_default;
172
+ if (r) {
173
+ e.push(r);
174
+ const n = r.split("-")[0];
175
+ n && n !== r && e.push(n);
134
176
  }
135
177
  for (const n of e)
136
178
  if (Ae(n)) return n;
137
179
  return null;
138
180
  }
139
- function Je(r, e) {
140
- return !!r.locales && r.locales[e] !== void 0;
181
+ function nt(t, e) {
182
+ return !!t.locales && t.locales[e] !== void 0;
141
183
  }
142
- async function Qe(r) {
143
- const e = Q.get(r);
184
+ async function it(t) {
185
+ const e = Q.get(t);
144
186
  if (e) return e;
145
- const t = ee.get(r);
146
- if (t) return t;
147
- const n = Ye(/* @__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) => {
187
+ const r = ee.get(t);
188
+ if (r) return r;
189
+ const n = et(/* @__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/${t}.ts`, 3).then((i) => {
148
190
  const s = i.default ?? {};
149
- return Q.set(r, s), s;
191
+ return Q.set(t, s), s;
150
192
  }).catch((i) => {
151
- console.warn(`[paywall] failed to load locale chunk "${r}"`, i);
193
+ console.warn(`[paywall] failed to load locale chunk "${t}"`, i);
152
194
  const s = {};
153
- return Q.set(r, s), s;
195
+ return Q.set(t, s), s;
154
196
  }).finally(() => {
155
- ee.delete(r);
197
+ ee.delete(t);
156
198
  });
157
- return ee.set(r, n), n;
199
+ return ee.set(t, n), n;
158
200
  }
159
- function et({ bootstrap: r, forceLocale: e, children: t }) {
201
+ function ot({ bootstrap: t, forceLocale: e, children: r }) {
160
202
  const [n, i] = x("en"), [s, a] = x(null);
161
203
  B(() => {
162
204
  const f = (e && Ae(e) ? e : null) ?? (() => {
163
- if (!r) return null;
164
- const d = Xe(r);
165
- return !d || !Je(r, d) ? null : d;
205
+ if (!t) return null;
206
+ const d = rt(t);
207
+ return !d || !nt(t, d) ? null : d;
166
208
  })();
167
209
  if (!f) {
168
210
  (s !== null || n !== "en") && (i("en"), a(null));
@@ -170,26 +212,26 @@ function et({ bootstrap: r, forceLocale: e, children: t }) {
170
212
  }
171
213
  if (f === n && s) return;
172
214
  let h = !1;
173
- return Qe(f).then((d) => {
215
+ return it(f).then((d) => {
174
216
  h || (i(f), a(d));
175
217
  }), () => {
176
218
  h = !0;
177
219
  };
178
- }, [r, e]);
220
+ }, [t, e]);
179
221
  const c = {
180
222
  locale: n,
181
223
  t: s ? (l, f, h) => Ie(s[l] ?? f, h) : Se
182
224
  };
183
- return /* @__PURE__ */ o(Ce.Provider, { value: c, children: t });
225
+ return /* @__PURE__ */ o(Ce.Provider, { value: c, children: r });
184
226
  }
185
227
  function k() {
186
- return Ve(Ce);
228
+ return $e(Ce);
187
229
  }
188
230
  const he = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
189
- function tt({
190
- open: r,
231
+ function st({
232
+ open: t,
191
233
  onClose: e,
192
- labelledBy: t,
234
+ labelledBy: r,
193
235
  brandColor: n,
194
236
  topBanner: i,
195
237
  allowClose: s = !0,
@@ -199,7 +241,7 @@ function tt({
199
241
  }) {
200
242
  const { t: f } = k(), h = R(null), d = R(null);
201
243
  return B(() => {
202
- if (!r) return;
244
+ if (!t) return;
203
245
  d.current = document.activeElement ?? null;
204
246
  const p = h.current;
205
247
  p && (p.querySelector(he) ?? p).focus({ preventScroll: !0 });
@@ -217,15 +259,15 @@ function tt({
217
259
  _.preventDefault();
218
260
  return;
219
261
  }
220
- const A = S[0], z = S[S.length - 1], E = document.activeElement;
221
- _.shiftKey && E === A ? (_.preventDefault(), z.focus()) : !_.shiftKey && E === z && (_.preventDefault(), A.focus());
262
+ const A = S[0], D = S[S.length - 1], E = document.activeElement;
263
+ _.shiftKey && E === A ? (_.preventDefault(), D.focus()) : !_.shiftKey && E === D && (_.preventDefault(), A.focus());
222
264
  };
223
265
  document.addEventListener("keydown", y, !0);
224
266
  const O = document.body.style.overflow;
225
267
  return c || (document.body.style.overflow = "hidden"), () => {
226
268
  document.removeEventListener("keydown", y, !0), c || (document.body.style.overflow = O), d.current?.focus?.({ preventScroll: !0 });
227
269
  };
228
- }, [r, e, s, c]), r ? /* @__PURE__ */ u(
270
+ }, [t, e, s, c]), t ? /* @__PURE__ */ u(
229
271
  "div",
230
272
  {
231
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]`,
@@ -247,7 +289,7 @@ function tt({
247
289
  ref: h,
248
290
  role: "dialog",
249
291
  "aria-modal": "true",
250
- "aria-labelledby": t,
292
+ "aria-labelledby": r,
251
293
  tabIndex: -1,
252
294
  class: "relative flex max-h-[calc(100dvh-1rem)] sm:max-h-[calc(100dvh-2rem)] w-full flex-col overflow-hidden rounded-xl bg-white outline-none",
253
295
  style: {
@@ -290,8 +332,8 @@ function tt({
290
332
  }
291
333
  ) : null;
292
334
  }
293
- function rt(r, e) {
294
- switch (r) {
335
+ function at(t, e) {
336
+ switch (t) {
295
337
  case "google":
296
338
  return e("auth.continue_with_google", "Continue with Google");
297
339
  case "apple":
@@ -302,62 +344,62 @@ function rt(r, e) {
302
344
  return e("auth.continue_with_facebook", "Continue with Facebook");
303
345
  }
304
346
  }
305
- function pe(r, e, t) {
306
- const n = e === "signup" ? t("auth.signup_failed", "Sign-up failed") : t("auth.signin_failed", "Sign-in failed");
307
- if (!(r instanceof T)) return n;
308
- switch (r.code) {
347
+ function pe(t, e, r) {
348
+ const n = e === "signup" ? r("auth.signup_failed", "Sign-up failed") : r("auth.signin_failed", "Sign-in failed");
349
+ if (!(t instanceof T)) return n;
350
+ switch (t.code) {
309
351
  case "invalid_credentials":
310
- return t("auth.invalid_credentials", "Invalid email or password");
352
+ return r("auth.invalid_credentials", "Invalid email or password");
311
353
  case "email_not_confirmed":
312
- return t("auth.email_not_confirmed", "Please confirm your email before signing in.");
354
+ return r("auth.email_not_confirmed", "Please confirm your email before signing in.");
313
355
  case "email_exists":
314
356
  case "user_already_exists":
315
- return t("auth.email_exists", "An account with this email already exists.");
357
+ return r("auth.email_exists", "An account with this email already exists.");
316
358
  case "weak_password":
317
- return t("auth.weak_password", "Password is too weak.");
359
+ return r("auth.weak_password", "Password is too weak.");
318
360
  case "invalid_otp":
319
361
  case "otp_expired":
320
362
  case "token_expired":
321
- return t("auth.invalid_otp", "The code is invalid or has expired.");
363
+ return r("auth.invalid_otp", "The code is invalid or has expired.");
322
364
  case "over_email_send_rate_limit":
323
365
  case "over_request_rate_limit":
324
366
  case "rate_limited":
325
367
  case "http_429":
326
- return t("auth.rate_limited", "Too many requests. Please try again later.");
368
+ return r("auth.rate_limited", "Too many requests. Please try again later.");
327
369
  case "network_error":
328
- return t("auth.network_error", "Network error. Please check your connection and try again.");
370
+ return r("auth.network_error", "Network error. Please check your connection and try again.");
329
371
  case "upstream":
330
372
  case "upstream_error":
331
373
  case "http_502":
332
374
  case "http_503":
333
375
  case "http_504":
334
- return t("auth.service_unavailable", "Service is temporarily unavailable. Please try again.");
376
+ return r("auth.service_unavailable", "Service is temporarily unavailable. Please try again.");
335
377
  default:
336
378
  return n;
337
379
  }
338
380
  }
339
- function Le({ block: r, ctx: e }) {
340
- const t = e.auth, n = e.authSession, i = r.allow_signup !== !1, s = r.allow_password_reset !== !1, a = r.hide_when_authenticated !== !1;
341
- if (!t)
381
+ function Le({ block: t, ctx: e }) {
382
+ const r = e.auth, n = e.authSession, i = t.allow_signup !== !1, s = t.allow_password_reset !== !1, a = t.hide_when_authenticated !== !1;
383
+ if (!r)
342
384
  return typeof console < "u" && console.warn("[paywall] auth_panel rendered without AuthClient — pass `auth: true` to PaywallUI"), null;
343
385
  const c = n && !n.user.is_anonymous ? n : null;
344
- return c && a ? null : c ? /* @__PURE__ */ o(nt, { email: c.user.email ?? "", onSignOut: () => t.signOut().catch(() => {
386
+ return c && a ? null : c ? /* @__PURE__ */ o(lt, { email: c.user.email ?? "", onSignOut: () => r.signOut().catch(() => {
345
387
  }) }) : /* @__PURE__ */ o(
346
- it,
388
+ ct,
347
389
  {
348
- block: r,
390
+ block: t,
349
391
  allowSignup: i,
350
392
  allowReset: s,
351
393
  ctx: e
352
394
  }
353
395
  );
354
396
  }
355
- function nt({ email: r, onSignOut: e }) {
356
- const { t } = k();
397
+ function lt({ email: t, onSignOut: e }) {
398
+ const { t: r } = k();
357
399
  return /* @__PURE__ */ u("div", { class: "flex items-center justify-between gap-3 rounded-2xl bg-gray-100 px-4 py-3", children: [
358
400
  /* @__PURE__ */ u("div", { class: "flex flex-col", children: [
359
- /* @__PURE__ */ o("span", { class: "text-[10px] font-semibold uppercase tracking-wider text-gray-500", children: t("auth.signed_in", "Signed in") }),
360
- /* @__PURE__ */ o("span", { class: "text-sm font-medium text-gray-900", children: r })
401
+ /* @__PURE__ */ o("span", { class: "text-[10px] font-semibold uppercase tracking-wider text-gray-500", children: r("auth.signed_in", "Signed in") }),
402
+ /* @__PURE__ */ o("span", { class: "text-sm font-medium text-gray-900", children: t })
361
403
  ] }),
362
404
  /* @__PURE__ */ o(
363
405
  "button",
@@ -365,19 +407,19 @@ function nt({ email: r, onSignOut: e }) {
365
407
  type: "button",
366
408
  onClick: e,
367
409
  class: "rounded-md px-1.5 py-0.5 text-xs font-medium text-gray-600 transition-colors hover:bg-white hover:text-gray-900 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
368
- children: t("auth.sign_out", "Sign out")
410
+ children: r("auth.sign_out", "Sign out")
369
411
  }
370
412
  )
371
413
  ] });
372
414
  }
373
- function it({ block: r, allowSignup: e, allowReset: t, ctx: n }) {
374
- const { t: i } = k(), s = n.auth, a = r.providers ?? [], c = n.initialAuthMode === "signup" && e ? "signup" : "signin", [l, f] = x(c), [h, d] = x(""), [b, w] = x(""), [v, p] = x(""), [y, O] = x(""), [_, S] = x(null), A = R(!1), [z, E] = x(null), [U, D] = x(null), [j, P] = x(!1), [L, q] = x(null);
415
+ function ct({ block: t, allowSignup: e, allowReset: r, ctx: n }) {
416
+ const { t: i } = k(), s = n.auth, a = t.providers ?? [], c = n.initialAuthMode === "signup" && e ? "signup" : "signin", [l, f] = x(c), [h, d] = x(""), [b, w] = x(""), [v, p] = x(""), [y, O] = x(""), [_, S] = x(null), A = R(!1), [D, E] = x(null), [U, z] = x(null), [j, P] = x(!1), [L, N] = x(null);
375
417
  B(() => {
376
418
  if (typeof s.getLastLogin != "function") return;
377
419
  let I = !1;
378
420
  return s.getLastLogin().then(
379
421
  (M) => {
380
- I || !M || (q(M), M.email && d((V) => V === "" ? M.email : V));
422
+ I || !M || (N(M), M.email && d((V) => V === "" ? M.email : V));
381
423
  },
382
424
  () => {
383
425
  }
@@ -385,13 +427,13 @@ function it({ block: r, allowSignup: e, allowReset: t, ctx: n }) {
385
427
  I = !0;
386
428
  };
387
429
  }, [s]);
388
- const N = (I) => {
389
- f(I), E(null), D(null), P(!1);
430
+ const q = (I) => {
431
+ f(I), E(null), z(null), P(!1);
390
432
  }, Y = async (I) => {
391
433
  if (I.preventDefault(), !(A.current || _)) {
392
434
  A.current = !0;
393
435
  try {
394
- if (E(null), D(null), l === "signup" && !j) {
436
+ if (E(null), z(null), l === "signup" && !j) {
395
437
  if (!h.trim()) return;
396
438
  P(!0);
397
439
  return;
@@ -402,7 +444,7 @@ function it({ block: r, allowSignup: e, allowReset: t, ctx: n }) {
402
444
  }
403
445
  S("email");
404
446
  try {
405
- l === "signin" ? await s.signInWithEmail({ email: h, password: b }) : l === "signup" ? (await s.signUp({ email: h, password: b })).kind === "confirmation_required" && (w(""), f("signup_verify"), D(i("auth.check_email_message", "Check your email for a confirmation code."))) : l === "forgot" ? (await s.requestPasswordReset({ email: h }), f("reset_sent"), D(
447
+ l === "signin" ? await s.signInWithEmail({ email: h, password: b }) : l === "signup" ? (await s.signUp({ email: h, password: b })).kind === "confirmation_required" && (w(""), f("signup_verify"), z(i("auth.check_email_message", "Check your email for a confirmation code."))) : l === "forgot" ? (await s.requestPasswordReset({ email: h }), f("reset_sent"), z(
406
448
  i("auth.reset_sent_message", "If that email exists, a reset code has been sent.")
407
449
  )) : l === "signup_verify" ? await s.verifyOtp({ email: h, token: y, type: "email" }) : l === "reset_verify" && (await s.verifyOtp({
408
450
  email: h,
@@ -420,7 +462,7 @@ function it({ block: r, allowSignup: e, allowReset: t, ctx: n }) {
420
462
  }
421
463
  }, m = async (I) => {
422
464
  if (!(A.current || _)) {
423
- A.current = !0, S(I), E(null), D(null);
465
+ A.current = !0, S(I), E(null), z(null);
424
466
  try {
425
467
  await s.signInWithOAuth({
426
468
  provider: I,
@@ -436,7 +478,7 @@ function it({ block: r, allowSignup: e, allowReset: t, ctx: n }) {
436
478
  }
437
479
  }, g = a.length > 0 && (l === "signin" || l === "signup"), C = l === "signin" || l === "signup" || l === "forgot", K = l === "signin" || l === "signup" && j;
438
480
  return /* @__PURE__ */ u("div", { class: "flex flex-col gap-5", children: [
439
- /* @__PURE__ */ o(ot, { mode: l, customHeading: r.heading, customSubheading: r.subheading }),
481
+ /* @__PURE__ */ o(ut, { mode: l, customHeading: t.heading, customSubheading: t.subheading }),
440
482
  g ? /* @__PURE__ */ u("div", { class: "flex flex-col gap-2.5", children: [
441
483
  a.map((I) => /* @__PURE__ */ u("div", { class: "relative", children: [
442
484
  /* @__PURE__ */ u(
@@ -447,14 +489,14 @@ function it({ block: r, allowSignup: e, allowReset: t, ctx: n }) {
447
489
  disabled: _ !== null,
448
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)]",
449
491
  children: [
450
- _ === I ? /* @__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(gt, { provider: I }),
451
- /* @__PURE__ */ o("span", { children: rt(I, i) })
492
+ _ === I ? /* @__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(wt, { provider: I }),
493
+ /* @__PURE__ */ o("span", { children: at(I, i) })
452
494
  ]
453
495
  }
454
496
  ),
455
- L?.method === I ? /* @__PURE__ */ o(ht, { email: L.email }) : null
497
+ L?.method === I ? /* @__PURE__ */ o(yt, { email: L.email }) : null
456
498
  ] }, I)),
457
- /* @__PURE__ */ o(ft, {})
499
+ /* @__PURE__ */ o(bt, {})
458
500
  ] }) : null,
459
501
  /* @__PURE__ */ u("form", { onSubmit: Y, class: "flex flex-col gap-3", children: [
460
502
  C && /* @__PURE__ */ o(
@@ -513,40 +555,40 @@ function it({ block: r, allowSignup: e, allowReset: t, ctx: n }) {
513
555
  }
514
556
  ),
515
557
  l === "reset_sent" && U && /* @__PURE__ */ o("p", { class: "rounded-2xl bg-gray-100 px-4 py-3 text-sm text-gray-600", children: U }),
516
- l === "signin" && t && /* @__PURE__ */ o("div", { class: "flex justify-end text-sm", children: /* @__PURE__ */ o(Z, { onClick: () => N("forgot"), children: i("auth.forgot_password", "Forgot password?") }) }),
517
- z && /* @__PURE__ */ o("p", { class: "text-sm text-red-600", children: z }),
558
+ l === "signin" && r && /* @__PURE__ */ o("div", { class: "flex justify-end text-sm", children: /* @__PURE__ */ o(Z, { onClick: () => q("forgot"), children: i("auth.forgot_password", "Forgot password?") }) }),
559
+ D && /* @__PURE__ */ o("p", { class: "text-sm text-red-600", children: D }),
518
560
  U && l !== "reset_sent" && /* @__PURE__ */ o("p", { class: "text-sm text-gray-500", children: U }),
519
561
  l !== "reset_sent" && /* @__PURE__ */ o(
520
- ct,
562
+ ft,
521
563
  {
522
564
  busy: _ === "email",
523
- label: at(l, j, r.submit_label ?? r.heading, i)
565
+ label: ht(l, j, t.submit_label ?? t.heading, i)
524
566
  }
525
567
  )
526
568
  ] }),
527
569
  /* @__PURE__ */ o(
528
- lt,
570
+ pt,
529
571
  {
530
572
  mode: l,
531
573
  allowSignup: e,
532
- onSwitch: N
574
+ onSwitch: q
533
575
  }
534
576
  )
535
577
  ] });
536
578
  }
537
- function ot({
538
- mode: r,
579
+ function ut({
580
+ mode: t,
539
581
  customHeading: e,
540
- customSubheading: t
582
+ customSubheading: r
541
583
  }) {
542
- const { t: n } = k(), i = st(r, n), s = r === "signin" || r === "signup", a = s && e ? e : i.title, c = s && t !== void 0 ? t || null : i.subtitle;
584
+ const { t: n } = k(), i = dt(t, n), s = t === "signin" || t === "signup", a = s && e ? e : i.title, c = s && r !== void 0 ? r || null : i.subtitle;
543
585
  return /* @__PURE__ */ u("div", { class: "flex flex-col gap-2", children: [
544
586
  /* @__PURE__ */ o("h2", { class: "text-3xl font-bold tracking-tight text-gray-900", children: a }),
545
587
  c ? /* @__PURE__ */ o("p", { class: "text-base leading-relaxed text-gray-600", children: c }) : null
546
588
  ] });
547
589
  }
548
- function st(r, e) {
549
- switch (r) {
590
+ function dt(t, e) {
591
+ switch (t) {
550
592
  case "signin":
551
593
  return {
552
594
  title: e("auth.welcome", "Welcome back!"),
@@ -588,9 +630,9 @@ function st(r, e) {
588
630
  };
589
631
  }
590
632
  }
591
- function at(r, e, t, n) {
592
- if (r === "signin" && t) return t;
593
- switch (r) {
633
+ function ht(t, e, r, n) {
634
+ if (t === "signin" && r) return r;
635
+ switch (t) {
594
636
  case "signin":
595
637
  return n("auth.log_in", "Sign In");
596
638
  case "signup":
@@ -604,62 +646,62 @@ function at(r, e, t, n) {
604
646
  return n("cta.continue", "Continue");
605
647
  }
606
648
  }
607
- function lt({
608
- mode: r,
649
+ function pt({
650
+ mode: t,
609
651
  allowSignup: e,
610
- onSwitch: t
652
+ onSwitch: r
611
653
  }) {
612
654
  const { t: n } = k();
613
- return r === "signin" && e ? /* @__PURE__ */ u("p", { class: "text-center text-sm text-gray-600", children: [
655
+ return t === "signin" && e ? /* @__PURE__ */ u("p", { class: "text-center text-sm text-gray-600", children: [
614
656
  n("auth.no_account", "Don't have an account?"),
615
657
  " ",
616
- /* @__PURE__ */ o(Z, { onClick: () => t("signup"), children: n("auth.sign_up_link", "Sign Up") })
617
- ] }) : r === "signup" || r === "signup_verify" ? /* @__PURE__ */ u("p", { class: "text-center text-sm text-gray-600", children: [
658
+ /* @__PURE__ */ o(Z, { onClick: () => r("signup"), children: n("auth.sign_up_link", "Sign Up") })
659
+ ] }) : t === "signup" || t === "signup_verify" ? /* @__PURE__ */ u("p", { class: "text-center text-sm text-gray-600", children: [
618
660
  n("auth.have_account", "Already have an account?"),
619
661
  " ",
620
- /* @__PURE__ */ o(Z, { onClick: () => t("signin"), children: n("auth.log_in_link", "Log In") })
621
- ] }) : r === "forgot" || r === "reset_sent" || r === "reset_verify" ? /* @__PURE__ */ u("p", { class: "text-center text-sm text-gray-600", children: [
662
+ /* @__PURE__ */ o(Z, { onClick: () => r("signin"), children: n("auth.log_in_link", "Log In") })
663
+ ] }) : t === "forgot" || t === "reset_sent" || t === "reset_verify" ? /* @__PURE__ */ u("p", { class: "text-center text-sm text-gray-600", children: [
622
664
  n("auth.no_account", "Don't have an account?"),
623
665
  " ",
624
- /* @__PURE__ */ o(Z, { onClick: () => t("signup"), children: n("auth.sign_up_link", "Sign Up") })
666
+ /* @__PURE__ */ o(Z, { onClick: () => r("signup"), children: n("auth.sign_up_link", "Sign Up") })
625
667
  ] }) : null;
626
668
  }
627
669
  function Z({
628
- onClick: r,
670
+ onClick: t,
629
671
  children: e
630
672
  }) {
631
673
  return /* @__PURE__ */ o(
632
674
  "button",
633
675
  {
634
676
  type: "button",
635
- onClick: r,
677
+ onClick: t,
636
678
  class: "font-semibold transition-opacity hover:opacity-80 focus:outline-none focus-visible:opacity-80",
637
679
  style: { color: "var(--pw-accent)" },
638
680
  children: e
639
681
  }
640
682
  );
641
683
  }
642
- function ct({ busy: r, label: e }) {
684
+ function ft({ busy: t, label: e }) {
643
685
  return /* @__PURE__ */ o(
644
686
  "button",
645
687
  {
646
688
  type: "submit",
647
- disabled: r,
689
+ disabled: t,
648
690
  class: "pw-cta-shimmer relative mt-1 flex min-h-12 w-full items-center justify-center overflow-hidden rounded-3xl px-5 py-2 text-center text-base font-semibold leading-tight 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)]",
649
691
  style: {
650
692
  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%)",
651
693
  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)"
652
694
  },
653
- children: r ? /* @__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: e })
695
+ children: t ? /* @__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: e })
654
696
  }
655
697
  );
656
698
  }
657
- function fe({ type: r, placeholder: e, value: t, onInput: n, autocomplete: i, inputMode: s, required: a }) {
699
+ function fe({ type: t, placeholder: e, value: r, onInput: n, autocomplete: i, inputMode: s, required: a }) {
658
700
  return /* @__PURE__ */ o(
659
701
  "input",
660
702
  {
661
- type: r,
662
- value: t,
703
+ type: t,
704
+ value: r,
663
705
  placeholder: e,
664
706
  onInput: (c) => n(c.target.value),
665
707
  autocomplete: i,
@@ -669,7 +711,7 @@ function fe({ type: r, placeholder: e, value: t, onInput: n, autocomplete: i, in
669
711
  }
670
712
  );
671
713
  }
672
- function te({ placeholder: r, value: e, onInput: t, autocomplete: n, required: i }) {
714
+ function te({ placeholder: t, value: e, onInput: r, autocomplete: n, required: i }) {
673
715
  const { t: s } = k(), [a, c] = x(!1), l = R(null);
674
716
  B(() => {
675
717
  const d = l.current;
@@ -683,8 +725,8 @@ function te({ placeholder: r, value: e, onInput: t, autocomplete: n, required: i
683
725
  ref: l,
684
726
  type: a ? "text" : "password",
685
727
  value: e,
686
- placeholder: r,
687
- onInput: (d) => t(d.target.value),
728
+ placeholder: t,
729
+ onInput: (d) => r(d.target.value),
688
730
  autocomplete: n,
689
731
  required: i,
690
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)]"
@@ -698,12 +740,12 @@ function te({ placeholder: r, value: e, onInput: t, autocomplete: n, required: i
698
740
  "aria-label": a ? h : f,
699
741
  tabIndex: -1,
700
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)]",
701
- children: a ? /* @__PURE__ */ o(dt, {}) : /* @__PURE__ */ o(ut, {})
743
+ children: a ? /* @__PURE__ */ o(mt, {}) : /* @__PURE__ */ o(gt, {})
702
744
  }
703
745
  )
704
746
  ] });
705
747
  }
706
- function ut() {
748
+ function gt() {
707
749
  return /* @__PURE__ */ u("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
708
750
  /* @__PURE__ */ o(
709
751
  "path",
@@ -718,7 +760,7 @@ function ut() {
718
760
  /* @__PURE__ */ o("circle", { cx: "10", cy: "10", r: "2.5", stroke: "currentColor", "stroke-width": "1.5" })
719
761
  ] });
720
762
  }
721
- function dt() {
763
+ function mt() {
722
764
  return /* @__PURE__ */ u("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
723
765
  /* @__PURE__ */ o(
724
766
  "path",
@@ -742,39 +784,39 @@ function dt() {
742
784
  )
743
785
  ] });
744
786
  }
745
- function ht({ email: r }) {
746
- const { t: e } = k(), t = r ? e("auth.last_used", "Last · {email}", { email: pt(r) }) : e("auth.last_used_no_email", "Last");
747
- 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 });
787
+ function yt({ email: t }) {
788
+ const { t: e } = k(), r = t ? e("auth.last_used", "Last · {email}", { email: xt(t) }) : e("auth.last_used_no_email", "Last");
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: r });
748
790
  }
749
- function pt(r) {
750
- const [e, t] = r.split("@");
751
- return t ? `${e.slice(0, 3)}*****@${t}` : r;
791
+ function xt(t) {
792
+ const [e, r] = t.split("@");
793
+ return r ? `${e.slice(0, 3)}*****@${r}` : t;
752
794
  }
753
- function ft() {
754
- const { t: r } = k();
795
+ function bt() {
796
+ const { t } = k();
755
797
  return /* @__PURE__ */ u("div", { class: "flex items-center gap-3 py-1 text-sm text-gray-400", children: [
756
798
  /* @__PURE__ */ o("div", { class: "h-px flex-1 bg-gray-200" }),
757
- /* @__PURE__ */ o("span", { children: r("auth.or", "or") }),
799
+ /* @__PURE__ */ o("span", { children: t("auth.or", "or") }),
758
800
  /* @__PURE__ */ o("div", { class: "h-px flex-1 bg-gray-200" })
759
801
  ] });
760
802
  }
761
- function gt({ provider: r }) {
762
- return r === "google" ? /* @__PURE__ */ u("svg", { width: "20", height: "20", viewBox: "0 0 18 18", "aria-hidden": "true", children: [
803
+ function wt({ provider: t }) {
804
+ return t === "google" ? /* @__PURE__ */ u("svg", { width: "20", height: "20", viewBox: "0 0 18 18", "aria-hidden": "true", children: [
763
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" }),
764
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" }),
765
807
  /* @__PURE__ */ o("path", { fill: "#FBBC05", d: "M3.93 10.68a5.4 5.4 0 0 1 0-3.36V4.99H.92a9 9 0 0 0 0 8.02l3-2.33Z" }),
766
808
  /* @__PURE__ */ o("path", { fill: "#EA4335", d: "M9 3.58c1.32 0 2.5.45 3.44 1.34l2.58-2.58A9 9 0 0 0 .92 4.99l3.01 2.33C4.64 5.17 6.64 3.58 9 3.58Z" })
767
- ] }) : r === "apple" ? (
809
+ ] }) : t === "apple" ? (
768
810
  // viewBox 0 0 24 24 даёт воздух сверху/снизу пути, поэтому визуально
769
811
  // Apple-яблоко выглядит меньше Google. Компенсируем увеличенным
770
812
  // width/height — 26×26 даёт примерно equal optical size с Google 20×20.
771
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" }) })
772
- ) : 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" }) });
814
+ ) : t === "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" }) });
773
815
  }
774
- function mt({
775
- block: r,
816
+ function kt({
817
+ block: t,
776
818
  bootstrap: e,
777
- auth: t,
819
+ auth: r,
778
820
  authSession: n,
779
821
  onBack: i,
780
822
  showBack: s = !0,
@@ -788,18 +830,18 @@ function mt({
788
830
  },
789
831
  onAction: () => {
790
832
  },
791
- auth: t,
833
+ auth: r,
792
834
  authSession: n,
793
835
  initialAuthMode: c
794
836
  }, h = a === "restore" ? {
795
- ...r,
837
+ ...t,
796
838
  heading: l("auth.restore_purchases_heading", "Restore Purchases"),
797
839
  subheading: l(
798
840
  "auth.restore_purchases_subheading",
799
841
  "Please sign in to restore your purchases."
800
842
  )
801
843
  } : a === "preauth" ? {
802
- ...r,
844
+ ...t,
803
845
  heading: l("auth.login_continue_purchase", "Log in to continue your purchase"),
804
846
  subheading: l(
805
847
  "auth.link_purchase_subheading",
@@ -810,18 +852,18 @@ function mt({
810
852
  // чтобы продолжить покупку") в pill-кнопку h-12 не помещаются и
811
853
  // переносятся на 2 строки. Явный короткий submit_label решает.
812
854
  submit_label: l("auth.log_in", "Sign In")
813
- } : r;
855
+ } : t;
814
856
  return /* @__PURE__ */ u("div", { class: "relative flex-1 min-h-0 overflow-y-auto p-6 sm:p-8", children: [
815
- s ? /* @__PURE__ */ o(yt, { onClick: i, ariaLabel: l("nav.back_aria", "Back") }) : null,
857
+ s ? /* @__PURE__ */ o(vt, { onClick: i, ariaLabel: l("nav.back_aria", "Back") }) : null,
816
858
  /* @__PURE__ */ o(Le, { block: h, ctx: f })
817
859
  ] });
818
860
  }
819
- function yt({ onClick: r, ariaLabel: e }) {
861
+ function vt({ onClick: t, ariaLabel: e }) {
820
862
  return /* @__PURE__ */ o(
821
863
  "button",
822
864
  {
823
865
  type: "button",
824
- onClick: r,
866
+ onClick: t,
825
867
  "aria-label": e,
826
868
  class: "absolute right-4 top-4 z-10 flex h-8 w-8 items-center justify-center rounded-full text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
827
869
  children: /* @__PURE__ */ u("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
@@ -849,9 +891,9 @@ function yt({ onClick: r, ariaLabel: e }) {
849
891
  }
850
892
  );
851
893
  }
852
- const Me = (r) => `pw-offer-${r}-start`;
853
- function re(r) {
854
- const e = r - Date.now();
894
+ const Me = (t) => `pw-offer-${t}-start`;
895
+ function re(t) {
896
+ const e = t - Date.now();
855
897
  return e <= 0 ? { days: 0, hours: 0, minutes: 0, seconds: 0, expired: !0 } : {
856
898
  days: Math.floor(e / (1e3 * 60 * 60 * 24)),
857
899
  hours: Math.floor(e % (1e3 * 60 * 60 * 24) / (1e3 * 60 * 60)),
@@ -860,33 +902,33 @@ function re(r) {
860
902
  expired: !1
861
903
  };
862
904
  }
863
- function xt(r) {
864
- if (r.expires_at) {
865
- const e = Date.parse(r.expires_at);
905
+ function _t(t) {
906
+ if (t.expires_at) {
907
+ const e = Date.parse(t.expires_at);
866
908
  return Number.isFinite(e) ? e : null;
867
909
  }
868
- if (r.duration_minutes && r.duration_minutes > 0) {
910
+ if (t.duration_minutes && t.duration_minutes > 0) {
869
911
  if (typeof window > "u") return null;
870
912
  try {
871
- const e = Me(r.id);
872
- let t = window.localStorage.getItem(e);
873
- return t || (t = (/* @__PURE__ */ new Date()).toISOString(), window.localStorage.setItem(e, t)), Date.parse(t) + r.duration_minutes * 6e4;
913
+ const e = Me(t.id);
914
+ let r = window.localStorage.getItem(e);
915
+ return r || (r = (/* @__PURE__ */ new Date()).toISOString(), window.localStorage.setItem(e, r)), Date.parse(r) + t.duration_minutes * 6e4;
874
916
  } catch {
875
917
  return null;
876
918
  }
877
919
  }
878
920
  return null;
879
921
  }
880
- function Ee(r, e) {
881
- if (!r || r.length === 0) return null;
922
+ function Ee(t, e) {
923
+ if (!t || t.length === 0) return null;
882
924
  if (e) {
883
- const t = r.find((n) => n.id === e);
884
- if (t) return t;
925
+ const r = t.find((n) => n.id === e);
926
+ if (r) return r;
885
927
  }
886
- return r.find((t) => t.expires_at || t.duration_minutes) ?? null;
928
+ return t.find((r) => r.expires_at || r.duration_minutes) ?? null;
887
929
  }
888
- function Pe(r) {
889
- const e = r ? xt(r) : null, [t, n] = x(
930
+ function Pe(t) {
931
+ const e = t ? _t(t) : null, [r, n] = x(
890
932
  () => e !== null ? re(e) : null
891
933
  ), i = R(e);
892
934
  return i.current = e, B(() => {
@@ -897,19 +939,19 @@ function Pe(r) {
897
939
  n(re(e));
898
940
  const s = setInterval(() => {
899
941
  const a = re(i.current ?? 0);
900
- if (n(a), a.expired && (clearInterval(s), r?.duration_minutes && typeof window < "u"))
942
+ if (n(a), a.expired && (clearInterval(s), t?.duration_minutes && typeof window < "u"))
901
943
  try {
902
- window.localStorage.removeItem(Me(r.id));
944
+ window.localStorage.removeItem(Me(t.id));
903
945
  } catch {
904
946
  }
905
947
  }, 1e3);
906
948
  return () => clearInterval(s);
907
- }, [e, r?.duration_minutes, r?.id]), t;
949
+ }, [e, t?.duration_minutes, t?.id]), r;
908
950
  }
909
- function bt({ block: r, ctx: e }) {
910
- const { t } = k(), n = Ee(e.bootstrap.offers, r.offer_id), i = Pe(n);
911
- if (!n || i === null || i.expired && !r.force) return null;
912
- const s = r.title ?? n.label ?? t("offer.limited_time", "Limited-time offer"), a = n.discount_percent ? `${s} ${n.discount_percent}%` : s;
951
+ function St({ block: t, ctx: e }) {
952
+ const { t: r } = k(), n = Ee(e.bootstrap.offers, t.offer_id), i = Pe(n);
953
+ if (!n || i === null || i.expired && !t.force) return null;
954
+ const s = t.title ?? n.label ?? r("offer.limited_time", "Limited-time offer"), a = n.discount_percent ? `${s} ${n.discount_percent}%` : s;
913
955
  return /* @__PURE__ */ u(
914
956
  "div",
915
957
  {
@@ -922,32 +964,32 @@ function bt({ block: r, ctx: e }) {
922
964
  children: [
923
965
  /* @__PURE__ */ o(Be, {}),
924
966
  /* @__PURE__ */ o("span", { children: a }),
925
- /* @__PURE__ */ o(Te, { value: i, t })
967
+ /* @__PURE__ */ o(Te, { value: i, t: r })
926
968
  ]
927
969
  }
928
970
  );
929
971
  }
930
- function Te({ value: r, t: e }) {
972
+ function Te({ value: t, t: e }) {
931
973
  return /* @__PURE__ */ u("div", { class: "flex items-center gap-1 font-mono text-sm", children: [
932
- r.days > 0 ? /* @__PURE__ */ u(se, { children: [
933
- /* @__PURE__ */ o($, { children: String(r.days) }),
974
+ t.days > 0 ? /* @__PURE__ */ u(se, { children: [
975
+ /* @__PURE__ */ o(H, { children: String(t.days) }),
934
976
  /* @__PURE__ */ o("span", { class: "text-xs", children: e("countdown.d", "d") })
935
977
  ] }) : null,
936
- /* @__PURE__ */ o($, { children: String(r.hours).padStart(2, "0") }),
978
+ /* @__PURE__ */ o(H, { children: String(t.hours).padStart(2, "0") }),
937
979
  /* @__PURE__ */ o("span", { class: "text-xs", children: e("countdown.h", "h") }),
938
- /* @__PURE__ */ o($, { children: String(r.minutes).padStart(2, "0") }),
980
+ /* @__PURE__ */ o(H, { children: String(t.minutes).padStart(2, "0") }),
939
981
  /* @__PURE__ */ o("span", { class: "text-xs", children: e("countdown.m", "m") }),
940
- /* @__PURE__ */ o($, { children: String(r.seconds).padStart(2, "0") }),
982
+ /* @__PURE__ */ o(H, { children: String(t.seconds).padStart(2, "0") }),
941
983
  /* @__PURE__ */ o("span", { class: "text-xs", children: e("countdown.s", "s") })
942
984
  ] });
943
985
  }
944
- function $({ children: r }) {
945
- return /* @__PURE__ */ o("span", { class: "rounded bg-black/20 px-1.5 py-0.5 text-xs font-bold", children: r });
986
+ function H({ children: t }) {
987
+ return /* @__PURE__ */ o("span", { class: "rounded bg-black/20 px-1.5 py-0.5 text-xs font-bold", children: t });
946
988
  }
947
- function wt({ offer: r }) {
948
- const { t: e } = k(), t = Pe(r);
949
- if (t === null || t.expired) return null;
950
- const n = r.label ?? e("offer.limited_time", "Limited-time offer"), i = r.discount_percent ? `${n} ${r.discount_percent}%` : n;
989
+ function Ct({ offer: t }) {
990
+ const { t: e } = k(), r = Pe(t);
991
+ if (r === null || r.expired) return null;
992
+ const n = t.label ?? e("offer.limited_time", "Limited-time offer"), i = t.discount_percent ? `${n} ${t.discount_percent}%` : n;
951
993
  return /* @__PURE__ */ u(
952
994
  "div",
953
995
  {
@@ -960,7 +1002,7 @@ function wt({ offer: r }) {
960
1002
  children: [
961
1003
  /* @__PURE__ */ o(Be, {}),
962
1004
  /* @__PURE__ */ o("span", { children: i }),
963
- /* @__PURE__ */ o(Te, { value: t, t: e })
1005
+ /* @__PURE__ */ o(Te, { value: r, t: e })
964
1006
  ]
965
1007
  }
966
1008
  );
@@ -984,38 +1026,38 @@ function Be() {
984
1026
  }
985
1027
  );
986
1028
  }
987
- const ge = 3, me = 200, ye = 5e3, ne = 5, kt = 10 * 1024 * 1024, xe = ["image/jpeg", "image/png", "image/webp"], vt = /.+@.+\..+/;
988
- function _t({ client: r, authSession: e, origin: t, onBack: n }) {
989
- const { t: i } = k(), s = e?.user.email ?? "", a = s || null, [c, l] = x(s), [f, h] = x(""), [d, b] = x(""), [w, v] = x([]), [p, y] = x(!1), [O, _] = x(null), [S, A] = x({}), z = () => {
990
- const P = {}, L = (a ?? c).trim(), q = f.trim(), N = d.trim();
991
- return L ? vt.test(L.toLowerCase()) || (P.email = i("support.invalid_email", "Invalid email")) : P.email = i("support.required", "Required"), (q.length < ge || q.length > me) && (P.subject = i("support.subject_length", "{min}–{max} characters", {
1029
+ const ge = 3, me = 200, ye = 5e3, ne = 5, It = 10 * 1024 * 1024, xe = ["image/jpeg", "image/png", "image/webp"], At = /.+@.+\..+/;
1030
+ function Lt({ client: t, authSession: e, origin: r, onBack: n }) {
1031
+ const { t: i } = k(), s = e?.user.email ?? "", a = s || null, [c, l] = x(s), [f, h] = x(""), [d, b] = x(""), [w, v] = x([]), [p, y] = x(!1), [O, _] = x(null), [S, A] = x({}), D = () => {
1032
+ const P = {}, L = (a ?? c).trim(), N = f.trim(), q = d.trim();
1033
+ return L ? At.test(L.toLowerCase()) || (P.email = i("support.invalid_email", "Invalid email")) : P.email = i("support.required", "Required"), (N.length < ge || N.length > me) && (P.subject = i("support.subject_length", "{min}–{max} characters", {
992
1034
  min: ge,
993
1035
  max: me
994
- })), (N.length < 1 || N.length > ye) && (P.message = i("support.message_length", "{min}–{max} characters", {
1036
+ })), (q.length < 1 || q.length > ye) && (P.message = i("support.message_length", "{min}–{max} characters", {
995
1037
  min: 1,
996
1038
  max: ye
997
1039
  })), A(P), Object.keys(P).length === 0;
998
1040
  }, E = async (P) => {
999
- if (P.preventDefault(), !p && z()) {
1041
+ if (P.preventDefault(), !p && D()) {
1000
1042
  y(!0), A((L) => ({ ...L, submit: void 0 }));
1001
1043
  try {
1002
1044
  const L = (a ?? c).trim();
1003
- await r.createSupportTicket({
1045
+ await t.createSupportTicket({
1004
1046
  subject: f.trim(),
1005
1047
  content: d.trim(),
1006
1048
  email: L || void 0,
1007
1049
  files: w.length > 0 ? w : void 0
1008
1050
  }), _(L);
1009
1051
  } catch (L) {
1010
- const q = L instanceof T && L.message || "Failed to send. Please try again.";
1011
- A((N) => ({ ...N, submit: q }));
1052
+ const N = L instanceof T && L.message || "Failed to send. Please try again.";
1053
+ A((q) => ({ ...q, submit: N }));
1012
1054
  } finally {
1013
1055
  y(!1);
1014
1056
  }
1015
1057
  }
1016
1058
  }, U = () => {
1017
1059
  h(""), b(""), v([]), A({}), _(null);
1018
- }, D = "flex flex-col gap-3 bg-white px-6 pb-6 pt-3 sm:px-8", j = { boxShadow: "0 -4px 12px -4px rgba(15,23,42,0.06)" };
1060
+ }, z = "flex flex-col gap-3 bg-white px-6 pb-6 pt-3 sm:px-8", j = { boxShadow: "0 -4px 12px -4px rgba(15,23,42,0.06)" };
1019
1061
  return O ? /* @__PURE__ */ u("div", { class: "relative flex-1 min-h-0 flex flex-col", children: [
1020
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: [
1021
1063
  /* @__PURE__ */ o(
@@ -1048,14 +1090,14 @@ function _t({ client: r, authSession: e, origin: t, onBack: n }) {
1048
1090
  "."
1049
1091
  ] })
1050
1092
  ] }),
1051
- /* @__PURE__ */ o("div", { class: D, style: j, children: /* @__PURE__ */ u("div", { class: "flex items-center justify-center gap-3", children: [
1093
+ /* @__PURE__ */ o("div", { class: z, style: j, children: /* @__PURE__ */ u("div", { class: "flex items-center justify-center gap-3", children: [
1052
1094
  /* @__PURE__ */ o(
1053
1095
  "button",
1054
1096
  {
1055
1097
  type: "button",
1056
1098
  onClick: n,
1057
1099
  class: "rounded-xl px-3 py-2 text-sm font-medium text-gray-600 transition-colors hover:bg-gray-100 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
1058
- children: t === "standalone" ? i("support.done_button", "Done") : i("nav.back_aria", "Back")
1100
+ children: r === "standalone" ? i("support.done_button", "Done") : i("nav.back_aria", "Back")
1059
1101
  }
1060
1102
  ),
1061
1103
  /* @__PURE__ */ o(
@@ -1073,7 +1115,7 @@ function _t({ client: r, authSession: e, origin: t, onBack: n }) {
1073
1115
  )
1074
1116
  ] }) })
1075
1117
  ] }) : /* @__PURE__ */ u("form", { onSubmit: E, class: "relative flex-1 min-h-0 flex flex-col", children: [
1076
- /* @__PURE__ */ o(St, { onClick: n, ariaLabel: i("nav.back_aria", "Back") }),
1118
+ /* @__PURE__ */ o(Mt, { onClick: n, ariaLabel: i("nav.back_aria", "Back") }),
1077
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: [
1078
1120
  /* @__PURE__ */ u("div", { class: "flex flex-col gap-2 pr-10", children: [
1079
1121
  /* @__PURE__ */ o("h2", { class: "text-3xl font-bold tracking-tight text-gray-900", children: i("support.heading", "Support") }),
@@ -1108,7 +1150,7 @@ function _t({ client: r, authSession: e, origin: t, onBack: n }) {
1108
1150
  }
1109
1151
  ),
1110
1152
  /* @__PURE__ */ o(
1111
- Ct,
1153
+ Et,
1112
1154
  {
1113
1155
  placeholder: i("support.message_placeholder", "Enter your message *"),
1114
1156
  value: d,
@@ -1117,10 +1159,10 @@ function _t({ client: r, authSession: e, origin: t, onBack: n }) {
1117
1159
  required: !0
1118
1160
  }
1119
1161
  ),
1120
- /* @__PURE__ */ o(It, { files: w, onChange: v, disabled: p })
1162
+ /* @__PURE__ */ o(Pt, { files: w, onChange: v, disabled: p })
1121
1163
  ] })
1122
1164
  ] }) }),
1123
- /* @__PURE__ */ u("div", { class: D, style: j, children: [
1165
+ /* @__PURE__ */ u("div", { class: z, style: j, children: [
1124
1166
  S.submit && /* @__PURE__ */ o("p", { class: "text-sm text-red-600", children: S.submit }),
1125
1167
  /* @__PURE__ */ u("div", { class: "flex items-center justify-end gap-3", children: [
1126
1168
  /* @__PURE__ */ o(
@@ -1130,7 +1172,7 @@ function _t({ client: r, authSession: e, origin: t, onBack: n }) {
1130
1172
  onClick: n,
1131
1173
  disabled: p,
1132
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)]",
1133
- children: t === "standalone" ? i("support.close_button", "Close") : i("nav.back_aria", "Back")
1175
+ children: r === "standalone" ? i("support.close_button", "Close") : i("nav.back_aria", "Back")
1134
1176
  }
1135
1177
  ),
1136
1178
  /* @__PURE__ */ o(
@@ -1150,12 +1192,12 @@ function _t({ client: r, authSession: e, origin: t, onBack: n }) {
1150
1192
  ] })
1151
1193
  ] });
1152
1194
  }
1153
- function St({ onClick: r, ariaLabel: e }) {
1195
+ function Mt({ onClick: t, ariaLabel: e }) {
1154
1196
  return /* @__PURE__ */ o(
1155
1197
  "button",
1156
1198
  {
1157
1199
  type: "button",
1158
- onClick: r,
1200
+ onClick: t,
1159
1201
  "aria-label": e,
1160
1202
  class: "absolute right-4 top-4 z-10 flex h-8 w-8 items-center justify-center rounded-full text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
1161
1203
  children: /* @__PURE__ */ u("svg", { width: "18", height: "18", viewBox: "0 0 20 20", fill: "none", "aria-hidden": "true", children: [
@@ -1184,9 +1226,9 @@ function St({ onClick: r, ariaLabel: e }) {
1184
1226
  );
1185
1227
  }
1186
1228
  function be({
1187
- type: r,
1229
+ type: t,
1188
1230
  placeholder: e,
1189
- value: t,
1231
+ value: r,
1190
1232
  onInput: n,
1191
1233
  error: i,
1192
1234
  autocomplete: s,
@@ -1196,8 +1238,8 @@ function be({
1196
1238
  /* @__PURE__ */ o(
1197
1239
  "input",
1198
1240
  {
1199
- type: r,
1200
- value: t,
1241
+ type: t,
1242
+ value: r,
1201
1243
  placeholder: e,
1202
1244
  onInput: (c) => n(c.target.value),
1203
1245
  autocomplete: s,
@@ -1208,10 +1250,10 @@ function be({
1208
1250
  i && /* @__PURE__ */ o("span", { class: "mt-1 ml-2 block text-sm text-red-600", children: i })
1209
1251
  ] });
1210
1252
  }
1211
- function Ct({
1212
- placeholder: r,
1253
+ function Et({
1254
+ placeholder: t,
1213
1255
  value: e,
1214
- onInput: t,
1256
+ onInput: r,
1215
1257
  error: n,
1216
1258
  required: i
1217
1259
  }) {
@@ -1220,8 +1262,8 @@ function Ct({
1220
1262
  "textarea",
1221
1263
  {
1222
1264
  value: e,
1223
- placeholder: r,
1224
- onInput: (s) => t(s.target.value),
1265
+ placeholder: t,
1266
+ onInput: (s) => r(s.target.value),
1225
1267
  required: i,
1226
1268
  rows: 5,
1227
1269
  class: `min-h-[120px] w-full rounded-2xl bg-gray-100 px-5 py-3.5 text-base leading-relaxed text-gray-900 outline-none transition-all placeholder:text-gray-500 hover:bg-gray-200/60 focus:bg-gray-200/60 ${n ? "shadow-[0_0_0_2px_rgba(239,68,68,0.5)]" : "focus:shadow-[0_0_0_2px_color-mix(in_srgb,var(--pw-accent)_30%,transparent)]"}`
@@ -1230,23 +1272,23 @@ function Ct({
1230
1272
  n && /* @__PURE__ */ o("span", { class: "mt-1 ml-2 block text-sm text-red-600", children: n })
1231
1273
  ] });
1232
1274
  }
1233
- function It({ files: r, onChange: e, disabled: t }) {
1275
+ function Pt({ files: t, onChange: e, disabled: r }) {
1234
1276
  const { t: n } = k(), i = R(null), [s, a] = x(!1), [c, l] = x(null), f = (h) => {
1235
- if (!h || t) return;
1277
+ if (!h || r) return;
1236
1278
  l(null);
1237
1279
  const d = Array.from(h);
1238
- if (r.length + d.length > ne) {
1280
+ if (t.length + d.length > ne) {
1239
1281
  l(n("support.too_many_files", "Up to {max} files", { max: ne }));
1240
1282
  return;
1241
1283
  }
1242
1284
  const b = d.filter(
1243
- (w) => xe.includes(w.type) && w.size <= kt
1285
+ (w) => xe.includes(w.type) && w.size <= It
1244
1286
  );
1245
1287
  if (b.length !== d.length) {
1246
1288
  l(n("support.invalid_file", "Only JPEG/PNG/WebP, ≤ 10MB each"));
1247
1289
  return;
1248
1290
  }
1249
- e([...r, ...b]);
1291
+ e([...t, ...b]);
1250
1292
  };
1251
1293
  return /* @__PURE__ */ u("div", { children: [
1252
1294
  /* @__PURE__ */ o("span", { class: "text-xs font-medium text-gray-700", children: n("support.attachments_label", "Attachments (optional)") }),
@@ -1256,15 +1298,15 @@ function It({ files: r, onChange: e, disabled: t }) {
1256
1298
  role: "button",
1257
1299
  tabIndex: 0,
1258
1300
  "aria-label": n("support.attachments_aria", "Attachments upload"),
1259
- onClick: () => !t && i.current?.click(),
1301
+ onClick: () => !r && i.current?.click(),
1260
1302
  onDragOver: (h) => {
1261
- h.preventDefault(), t || a(!0);
1303
+ h.preventDefault(), r || a(!0);
1262
1304
  },
1263
1305
  onDragLeave: () => a(!1),
1264
1306
  onDrop: (h) => {
1265
1307
  h.preventDefault(), a(!1), f(h.dataTransfer?.files ?? null);
1266
1308
  },
1267
- 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" : ""}`,
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"} ${r ? "cursor-not-allowed opacity-60" : ""}`,
1268
1310
  children: [
1269
1311
  /* @__PURE__ */ o("div", { class: "text-xs text-gray-500", children: n("support.dropzone_text", "Drop images here or click to select") }),
1270
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", {
@@ -1287,7 +1329,7 @@ function It({ files: r, onChange: e, disabled: t }) {
1287
1329
  }
1288
1330
  ),
1289
1331
  c && /* @__PURE__ */ o("p", { class: "mt-1 text-xs text-red-600", children: c }),
1290
- r.length > 0 && /* @__PURE__ */ o("ul", { class: "mt-2 flex flex-col gap-1", children: r.map((h, d) => /* @__PURE__ */ u(
1332
+ t.length > 0 && /* @__PURE__ */ o("ul", { class: "mt-2 flex flex-col gap-1", children: t.map((h, d) => /* @__PURE__ */ u(
1291
1333
  "li",
1292
1334
  {
1293
1335
  class: "flex items-center justify-between gap-2 rounded bg-gray-50 px-2 py-1 text-xs",
@@ -1298,10 +1340,10 @@ function It({ files: r, onChange: e, disabled: t }) {
1298
1340
  {
1299
1341
  type: "button",
1300
1342
  onClick: () => {
1301
- const b = [...r];
1343
+ const b = [...t];
1302
1344
  b.splice(d, 1), e(b);
1303
1345
  },
1304
- disabled: t,
1346
+ disabled: r,
1305
1347
  class: "text-gray-500 hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-60",
1306
1348
  "aria-label": n("support.remove_file_aria", "Remove {filename}", { filename: h.name }),
1307
1349
  children: "✕"
@@ -1313,34 +1355,34 @@ function It({ files: r, onChange: e, disabled: t }) {
1313
1355
  )) })
1314
1356
  ] });
1315
1357
  }
1316
- const At = {
1358
+ const Tt = {
1317
1359
  day: "cta.get_plan_daily",
1318
1360
  week: "cta.get_plan_weekly",
1319
1361
  month: "cta.get_plan_monthly",
1320
1362
  year: "cta.get_plan_yearly"
1321
- }, Lt = {
1363
+ }, Bt = {
1322
1364
  day: "Get Daily Plan",
1323
1365
  week: "Get Weekly Plan",
1324
1366
  month: "Get Monthly Plan",
1325
1367
  year: "Get Yearly Plan"
1326
1368
  };
1327
- function Mt(r, e, t, n) {
1369
+ function Ot(t, e, r, n) {
1328
1370
  if (e === "close") return n("cta.close", "Close");
1329
- if (!r) return n("cta.continue", "Continue");
1330
- if (!t && r.trial_days && r.interval && r.interval !== "lifetime")
1331
- return n("cta.start_trial", "Start {days}-Day Free Trial", { days: r.trial_days });
1332
- if (!r.interval || r.interval === "lifetime")
1371
+ if (!t) return n("cta.continue", "Continue");
1372
+ if (!r && t.trial_days && t.interval && t.interval !== "lifetime")
1373
+ return n("cta.start_trial", "Start {days}-Day Free Trial", { days: t.trial_days });
1374
+ if (!t.interval || t.interval === "lifetime")
1333
1375
  return n("cta.get_lifetime_access", "Get Lifetime Access");
1334
- const i = At[r.interval];
1335
- return i ? n(i, Lt[r.interval]) : n("cta.get_plan_generic", "Get {interval} Plan", {
1336
- interval: Et(r.interval)
1376
+ const i = Tt[t.interval];
1377
+ return i ? n(i, Bt[t.interval]) : n("cta.get_plan_generic", "Get {interval} Plan", {
1378
+ interval: Ut(t.interval)
1337
1379
  });
1338
1380
  }
1339
- function Et(r) {
1340
- return r.length ? r[0].toUpperCase() + r.slice(1) : r;
1381
+ function Ut(t) {
1382
+ return t.length ? t[0].toUpperCase() + t.slice(1) : t;
1341
1383
  }
1342
- function Pt({ block: r, ctx: e }) {
1343
- const { t } = k(), [n, i] = x(!1), s = r.priceId ?? e.selectedPriceId, a = n || r.action === "checkout" && !s, c = s ? e.bootstrap.prices.find((d) => d.id === s) ?? null : null, l = e.bootstrap.user?.had_previous_trial ?? !1, f = r.label ?? Mt(c, r.action, l, t);
1384
+ function jt({ block: t, ctx: e }) {
1385
+ const { t: r } = k(), [n, i] = x(!1), s = t.priceId ?? e.selectedPriceId, a = n || t.action === "checkout" && !s, c = s ? e.bootstrap.prices.find((d) => d.id === s) ?? null : null, l = e.bootstrap.user?.had_previous_trial ?? !1, f = t.label ?? Ot(c, t.action, l, r);
1344
1386
  return /* @__PURE__ */ u(
1345
1387
  "button",
1346
1388
  {
@@ -1350,7 +1392,7 @@ function Pt({ block: r, ctx: e }) {
1350
1392
  if (!a) {
1351
1393
  i(!0);
1352
1394
  try {
1353
- await e.onAction(r.action, { priceId: s });
1395
+ await e.onAction(t.action, { priceId: s });
1354
1396
  } finally {
1355
1397
  i(!1);
1356
1398
  }
@@ -1377,9 +1419,9 @@ function Pt({ block: r, ctx: e }) {
1377
1419
  }
1378
1420
  );
1379
1421
  }
1380
- function Tt({ ctx: r }) {
1381
- const { t: e } = k(), t = r.authSession, n = r.auth, [i, s] = x(!1), a = () => r.onAction("support");
1382
- if (t && !t.user.is_anonymous) {
1422
+ function Rt({ ctx: t }) {
1423
+ const { t: e } = k(), r = t.authSession, n = t.auth, [i, s] = x(!1), a = () => t.onAction("support");
1424
+ if (r && !r.user.is_anonymous) {
1383
1425
  const c = async () => {
1384
1426
  if (!(!n || i)) {
1385
1427
  s(!0);
@@ -1395,43 +1437,43 @@ function Tt({ ctx: r }) {
1395
1437
  /* @__PURE__ */ u("span", { children: [
1396
1438
  e("session.signed_in_as_prefix", "Signed in as"),
1397
1439
  " ",
1398
- /* @__PURE__ */ o("b", { class: "font-medium text-gray-700", children: t.user.email })
1440
+ /* @__PURE__ */ o("b", { class: "font-medium text-gray-700", children: r.user.email })
1399
1441
  ] }),
1400
1442
  /* @__PURE__ */ u("div", { class: "flex items-center justify-center gap-3", children: [
1401
- /* @__PURE__ */ o(H, { onClick: c, disabled: !n || i, children: i ? e("session.signing_out", "Signing out…") : e("session.sign_out", "Sign Out") }),
1443
+ /* @__PURE__ */ o(G, { onClick: c, disabled: !n || i, children: i ? e("session.signing_out", "Signing out…") : e("session.sign_out", "Sign Out") }),
1402
1444
  /* @__PURE__ */ o(we, {}),
1403
- /* @__PURE__ */ o(H, { onClick: a, children: e("session.contact_support", "Contact Support") })
1445
+ /* @__PURE__ */ o(G, { onClick: a, children: e("session.contact_support", "Contact Support") })
1404
1446
  ] })
1405
1447
  ] });
1406
1448
  }
1407
1449
  return /* @__PURE__ */ u("div", { class: "-mt-3 flex items-center justify-center gap-3 pt-1 text-center text-[13px]", children: [
1408
- /* @__PURE__ */ o(H, { onClick: () => r.onAction("restore"), children: e("session.restore_purchases", "Restore purchases") }),
1450
+ /* @__PURE__ */ o(G, { onClick: () => t.onAction("restore"), children: e("session.restore_purchases", "Restore purchases") }),
1409
1451
  /* @__PURE__ */ o(we, {}),
1410
- /* @__PURE__ */ o(H, { onClick: a, children: e("session.contact_support", "Contact Support") })
1452
+ /* @__PURE__ */ o(G, { onClick: a, children: e("session.contact_support", "Contact Support") })
1411
1453
  ] });
1412
1454
  }
1413
- function H({
1414
- onClick: r,
1455
+ function G({
1456
+ onClick: t,
1415
1457
  disabled: e,
1416
- children: t
1458
+ children: r
1417
1459
  }) {
1418
1460
  return /* @__PURE__ */ o(
1419
1461
  "button",
1420
1462
  {
1421
1463
  type: "button",
1422
- onClick: r,
1464
+ onClick: t,
1423
1465
  disabled: e,
1424
1466
  class: "font-semibold transition-opacity hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-60 focus:outline-none focus-visible:opacity-80",
1425
1467
  style: { color: "var(--pw-accent)" },
1426
- children: t
1468
+ children: r
1427
1469
  }
1428
1470
  );
1429
1471
  }
1430
1472
  function we() {
1431
1473
  return /* @__PURE__ */ o("span", { class: "h-1 w-1 rounded-full bg-gray-300", "aria-hidden": "true" });
1432
1474
  }
1433
- function Bt({ block: r }) {
1434
- 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: [
1475
+ function Dt({ block: t }) {
1476
+ return t.items.length ? /* @__PURE__ */ o("ul", { class: "flex flex-col gap-2.5", role: "list", children: t.items.map((e) => /* @__PURE__ */ u("li", { class: "flex items-start gap-3 text-sm text-gray-700", children: [
1435
1477
  /* @__PURE__ */ o(
1436
1478
  "svg",
1437
1479
  {
@@ -1459,25 +1501,25 @@ function Bt({ block: r }) {
1459
1501
  ] })
1460
1502
  ] }, e.id)) }) : null;
1461
1503
  }
1462
- function Ot({ block: r }) {
1463
- const { t: e } = k(), t = r.title ?? e("pricing.money_back", "30-day money-back guarantee"), n = r.subtitle, i = (r.icon ?? "dollar_shield") !== "none", s = Ut(t);
1504
+ function zt({ block: t }) {
1505
+ const { t: e } = k(), r = t.title ?? e("pricing.money_back", "30-day money-back guarantee"), n = t.subtitle, i = (t.icon ?? "dollar_shield") !== "none", s = Nt(r);
1464
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: [
1465
1507
  /* @__PURE__ */ u("div", { class: "inline-flex items-center gap-2 text-[12px] text-gray-700", children: [
1466
- i ? /* @__PURE__ */ o(jt, {}) : null,
1508
+ i ? /* @__PURE__ */ o(qt, {}) : null,
1467
1509
  s ? /* @__PURE__ */ u("span", { children: [
1468
1510
  /* @__PURE__ */ o("b", { class: "font-bold text-gray-900", children: s.bold }),
1469
1511
  " ",
1470
1512
  /* @__PURE__ */ o("span", { class: "font-medium", children: s.rest })
1471
- ] }) : /* @__PURE__ */ o("span", { class: "font-medium", children: t })
1513
+ ] }) : /* @__PURE__ */ o("span", { class: "font-medium", children: r })
1472
1514
  ] }),
1473
1515
  n ? /* @__PURE__ */ o("span", { class: "text-center text-xs leading-relaxed text-gray-500", children: n }) : null
1474
1516
  ] });
1475
1517
  }
1476
- function Ut(r) {
1477
- const e = r.match(/^(\d+[-\s]?days?)\s+(.+)$/i);
1518
+ function Nt(t) {
1519
+ const e = t.match(/^(\d+[-\s]?days?)\s+(.+)$/i);
1478
1520
  return e ? { bold: e[1], rest: e[2] } : null;
1479
1521
  }
1480
- function jt() {
1522
+ function qt() {
1481
1523
  return /* @__PURE__ */ u(
1482
1524
  "svg",
1483
1525
  {
@@ -1512,121 +1554,112 @@ function jt() {
1512
1554
  }
1513
1555
  );
1514
1556
  }
1515
- const Oe = 24, Rt = 16, zt = 2;
1516
- function Dt(r, e) {
1517
- const t = e * zt;
1557
+ const Oe = 24, Ft = 16, $t = 2;
1558
+ function Vt(t, e) {
1559
+ const r = e * $t;
1518
1560
  let n = Oe;
1519
- for (r.style.fontSize = `${n}px`; r.scrollHeight > t && n > Rt; )
1520
- n -= 1, r.style.fontSize = `${n}px`;
1561
+ for (t.style.fontSize = `${n}px`; t.scrollHeight > r && n > Ft; )
1562
+ n -= 1, t.style.fontSize = `${n}px`;
1521
1563
  }
1522
- function qt({ block: r, ctx: e }) {
1523
- 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 = R(null), a = t === 1 && !!e.bootstrap.settings.title_auto_fit;
1564
+ function Ht({ block: t, ctx: e }) {
1565
+ const r = t.level ?? 1, n = `h${r}`, i = r === 1 ? "text-[22px] sm:text-2xl font-semibold leading-tight text-center text-balance text-gray-800" : r === 2 ? "text-xl font-semibold leading-snug text-gray-900 tracking-tight" : "text-base font-medium text-gray-900", s = R(null), a = r === 1 && !!e.bootstrap.settings.title_auto_fit;
1524
1566
  return B(() => {
1525
1567
  if (!a || !s.current) return;
1526
1568
  const c = getComputedStyle(s.current), l = parseFloat(c.lineHeight) || Oe * 1.5;
1527
- Dt(s.current, l);
1528
- }, [a, r.text]), /* @__PURE__ */ o(n, { ref: s, class: i, children: r.text });
1569
+ Vt(s.current, l);
1570
+ }, [a, t.text]), /* @__PURE__ */ o(n, { ref: s, class: i, children: t.text });
1529
1571
  }
1530
- function Nt(r) {
1531
- const e = r.local ?? { currency: r.currency, amount: r.amount };
1532
- if (r.interval === "year") {
1533
- const t = (r.interval_count ?? 1) * 12;
1534
- return { amount: e.amount / t, currency: e.currency };
1572
+ function Gt(t) {
1573
+ const e = t.local ?? { currency: t.currency, amount: t.amount };
1574
+ if (t.interval === "year") {
1575
+ const r = (t.interval_count ?? 1) * 12;
1576
+ return { amount: e.amount / r, currency: e.currency };
1535
1577
  }
1536
1578
  return { amount: e.amount, currency: e.currency };
1537
1579
  }
1538
- function ie(r, e) {
1539
- const t = r % 1 !== 0 ? 2 : 0;
1580
+ function ie(t, e) {
1581
+ const r = t % 1 !== 0 ? 2 : 0;
1540
1582
  try {
1541
1583
  const n = new Intl.NumberFormat(void 0, {
1542
1584
  style: "currency",
1543
1585
  currency: e,
1544
1586
  currencyDisplay: "narrowSymbol",
1545
- maximumFractionDigits: t,
1546
- minimumFractionDigits: t
1547
- }).formatToParts(r);
1587
+ maximumFractionDigits: r,
1588
+ minimumFractionDigits: r
1589
+ }).formatToParts(t);
1548
1590
  let i = "", s = "";
1549
1591
  for (const a of n)
1550
1592
  a.type === "currency" ? i = a.value : a.type !== "literal" && (s += a.value);
1551
1593
  return { currency: i || e, amount: s.trim() };
1552
1594
  } catch {
1553
- return { currency: e, amount: String(r) };
1595
+ return { currency: e, amount: String(t) };
1554
1596
  }
1555
1597
  }
1556
- function ae(r, e) {
1557
- const { amount: t, currency: n } = Nt(r);
1598
+ function ae(t, e) {
1599
+ const { amount: r, currency: n } = Gt(t);
1558
1600
  if (!e) {
1559
- const { currency: c, amount: l } = ie(t, n);
1601
+ const { currency: c, amount: l } = ie(r, n);
1560
1602
  return { currency: c, amount: l, originalAmount: null };
1561
1603
  }
1562
- const i = t * (1 - e / 100), s = ie(i, n), a = ie(t, n);
1604
+ const i = r * (1 - e / 100), s = ie(i, n), a = ie(r, n);
1563
1605
  return {
1564
1606
  currency: s.currency,
1565
1607
  amount: s.amount,
1566
1608
  originalAmount: `${a.currency}${a.amount}`
1567
1609
  };
1568
1610
  }
1569
- function G(r, e) {
1570
- if (!r || r.length === 0) return null;
1571
- const t = r.find(
1572
- (i) => i.price_id === e && i.discount_percent && i.discount_percent > 0
1573
- );
1574
- return t || (r.find(
1575
- (i) => i.price_id == null && i.discount_percent && i.discount_percent > 0
1576
- ) ?? null);
1577
- }
1578
- function Ue(r, e) {
1579
- if (r.label) return r.label.toUpperCase();
1580
- if (!r.interval || r.interval === "lifetime")
1611
+ function Ue(t, e) {
1612
+ if (t.label) return t.label.toUpperCase();
1613
+ if (!t.interval || t.interval === "lifetime")
1581
1614
  return e("pricing.plan_label.lifetime", "LIFETIME");
1582
1615
  const n = {
1583
1616
  day: { key: "pricing.plan_label.daily", fallback: "DAILY PLAN" },
1584
1617
  week: { key: "pricing.plan_label.weekly", fallback: "WEEKLY PLAN" },
1585
1618
  month: { key: "pricing.plan_label.monthly", fallback: "MONTHLY PLAN" },
1586
1619
  year: { key: "pricing.plan_label.yearly", fallback: "YEARLY PLAN" }
1587
- }[r.interval];
1588
- return n ? e(n.key, n.fallback) : `${r.interval.toUpperCase()} PLAN`;
1620
+ }[t.interval];
1621
+ return n ? e(n.key, n.fallback) : `${t.interval.toUpperCase()} PLAN`;
1589
1622
  }
1590
- function le(r, e) {
1591
- if (!r.interval || r.interval === "lifetime")
1623
+ function le(t, e) {
1624
+ if (!t.interval || t.interval === "lifetime")
1592
1625
  return e("pricing.interval.lifetime_short", "lifetime");
1593
- if (r.interval === "year") return e("pricing.interval.month", "month");
1594
- const t = r.interval_count ?? 1;
1595
- return t === 1 ? e(`pricing.interval.${r.interval}`, r.interval) : `${t} ${r.interval}s`;
1626
+ if (t.interval === "year") return e("pricing.interval.month", "month");
1627
+ const r = t.interval_count ?? 1;
1628
+ return r === 1 ? e(`pricing.interval.${t.interval}`, t.interval) : `${r} ${t.interval}s`;
1596
1629
  }
1597
- function Ft({ block: r, ctx: e }) {
1598
- const { t } = k(), n = r.priceIds && r.priceIds.length > 0 ? new Set(r.priceIds) : null, i = e.bootstrap.prices.filter((a) => !n || n.has(a.id));
1630
+ function Wt({ block: t, ctx: e }) {
1631
+ const { t: r } = k(), n = t.priceIds && t.priceIds.length > 0 ? new Set(t.priceIds) : null, i = e.bootstrap.prices.filter((a) => !n || n.has(a.id));
1599
1632
  if (i.length === 0)
1600
- return /* @__PURE__ */ o("p", { class: "text-sm text-gray-500", children: t("pricing.no_prices", "No prices available.") });
1601
- const s = r.popular_label ?? t("pricing.most_popular", "Most popular");
1602
- if (r.view === "compact")
1633
+ return /* @__PURE__ */ o("p", { class: "text-sm text-gray-500", children: r("pricing.no_prices", "No prices available.") });
1634
+ const s = t.popular_label ?? r("pricing.most_popular", "Most popular");
1635
+ if (t.view === "compact")
1603
1636
  return /* @__PURE__ */ o(
1604
1637
  "div",
1605
1638
  {
1606
1639
  class: "flex w-full flex-col rounded-xl border border-gray-200 bg-gray-50",
1607
1640
  role: "radiogroup",
1608
- "aria-label": t("pricing.plans_aria", "Plans"),
1641
+ "aria-label": r("pricing.plans_aria", "Plans"),
1609
1642
  children: i.map((a, c) => /* @__PURE__ */ o(
1610
- $t,
1643
+ Yt,
1611
1644
  {
1612
1645
  price: a,
1613
1646
  isLast: c === i.length - 1,
1614
- isPopular: r.popular_price_id === a.id,
1647
+ isPopular: t.popular_price_id === a.id,
1615
1648
  popularLabel: s,
1616
- offer: G(e.bootstrap.offers, a.id),
1649
+ offer: $(e.bootstrap.offers, a.id),
1617
1650
  selected: e.selectedPriceId === a.id,
1618
1651
  onSelect: () => {
1619
1652
  e.setSelectedPriceId(a.id), e.onAction("price_selected", { priceId: a.id, price: a });
1620
1653
  },
1621
- t
1654
+ t: r
1622
1655
  },
1623
1656
  a.id
1624
1657
  ))
1625
1658
  }
1626
1659
  );
1627
- if (r.view === "horizontal") {
1660
+ if (t.view === "horizontal") {
1628
1661
  const a = Math.min(i.length, 3), c = i.some(
1629
- (l) => (G(e.bootstrap.offers, l.id)?.discount_percent ?? 0) > 0
1662
+ (l) => ($(e.bootstrap.offers, l.id)?.discount_percent ?? 0) > 0
1630
1663
  );
1631
1664
  return /* @__PURE__ */ o(
1632
1665
  "div",
@@ -1634,20 +1667,20 @@ function Ft({ block: r, ctx: e }) {
1634
1667
  class: "grid items-stretch gap-2",
1635
1668
  style: { gridTemplateColumns: `repeat(${a}, minmax(0, 1fr))` },
1636
1669
  role: "radiogroup",
1637
- "aria-label": t("pricing.plans_aria", "Plans"),
1670
+ "aria-label": r("pricing.plans_aria", "Plans"),
1638
1671
  children: i.map((l) => /* @__PURE__ */ o(
1639
- Ht,
1672
+ Kt,
1640
1673
  {
1641
1674
  price: l,
1642
- isPopular: r.popular_price_id === l.id,
1675
+ isPopular: t.popular_price_id === l.id,
1643
1676
  popularLabel: s,
1644
- offer: G(e.bootstrap.offers, l.id),
1677
+ offer: $(e.bootstrap.offers, l.id),
1645
1678
  reserveStrikeRow: c,
1646
1679
  selected: e.selectedPriceId === l.id,
1647
1680
  onSelect: () => {
1648
1681
  e.setSelectedPriceId(l.id), e.onAction("price_selected", { priceId: l.id, price: l });
1649
1682
  },
1650
- t
1683
+ t: r
1651
1684
  },
1652
1685
  l.id
1653
1686
  ))
@@ -1659,9 +1692,9 @@ function Ft({ block: r, ctx: e }) {
1659
1692
  {
1660
1693
  class: "flex flex-col gap-2",
1661
1694
  role: "radiogroup",
1662
- "aria-label": t("pricing.plans_aria", "Plans"),
1695
+ "aria-label": r("pricing.plans_aria", "Plans"),
1663
1696
  children: i.map((a) => {
1664
- const c = e.selectedPriceId === a.id, l = r.popular_price_id === a.id, h = G(e.bootstrap.offers, a.id)?.discount_percent ?? null, { currency: d, amount: b, originalAmount: w } = ae(a, h);
1697
+ const c = e.selectedPriceId === a.id, l = t.popular_price_id === a.id, h = $(e.bootstrap.offers, a.id)?.discount_percent ?? null, { currency: d, amount: b, originalAmount: w } = ae(a, h);
1665
1698
  return /* @__PURE__ */ u(
1666
1699
  "button",
1667
1700
  {
@@ -1717,7 +1750,7 @@ function Ft({ block: r, ctx: e }) {
1717
1750
  ),
1718
1751
  /* @__PURE__ */ u("div", { class: "flex flex-1 flex-col gap-0.5", children: [
1719
1752
  /* @__PURE__ */ u("div", { class: "flex flex-wrap items-center gap-x-2 gap-y-1", children: [
1720
- /* @__PURE__ */ o("span", { class: "text-xs font-normal uppercase tracking-normal text-gray-800/70", children: Ue(a, t) }),
1753
+ /* @__PURE__ */ o("span", { class: "text-xs font-normal uppercase tracking-normal text-gray-800/70", children: Ue(a, r) }),
1721
1754
  w ? (
1722
1755
  // opacity-60 приглушает strike: глаз сначала ловит label
1723
1756
  // и discount-badge, потом main price; original «бывшая цена»
@@ -1740,7 +1773,7 @@ function Ft({ block: r, ctx: e }) {
1740
1773
  /* @__PURE__ */ u("span", { class: "text-sm font-normal text-gray-500", children: [
1741
1774
  " ",
1742
1775
  "/ ",
1743
- le(a, t)
1776
+ le(a, r)
1744
1777
  ] })
1745
1778
  ] }) }),
1746
1779
  a.description ? /* @__PURE__ */ o("span", { class: "mt-1 text-xs leading-relaxed text-gray-500", children: a.description }) : null
@@ -1761,20 +1794,20 @@ function Ft({ block: r, ctx: e }) {
1761
1794
  }
1762
1795
  );
1763
1796
  }
1764
- function Vt(r, e) {
1765
- return r.label ? r.label : !r.interval || r.interval === "lifetime" ? e("pricing.interval.lifetime_short", "lifetime") : e(`pricing.interval.${r.interval}`, r.interval);
1797
+ function Zt(t, e) {
1798
+ return t.label ? t.label : !t.interval || t.interval === "lifetime" ? e("pricing.interval.lifetime_short", "lifetime") : e(`pricing.interval.${t.interval}`, t.interval);
1766
1799
  }
1767
- function $t({
1768
- price: r,
1800
+ function Yt({
1801
+ price: t,
1769
1802
  isLast: e,
1770
- isPopular: t,
1803
+ isPopular: r,
1771
1804
  popularLabel: n,
1772
1805
  offer: i,
1773
1806
  selected: s,
1774
1807
  onSelect: a,
1775
1808
  t: c
1776
1809
  }) {
1777
- const l = i?.discount_percent ?? null, { currency: f, amount: h, originalAmount: d } = ae(r, l);
1810
+ const l = i?.discount_percent ?? null, { currency: f, amount: h, originalAmount: d } = ae(t, l);
1778
1811
  return /* @__PURE__ */ u(
1779
1812
  "button",
1780
1813
  {
@@ -1824,8 +1857,8 @@ function $t({
1824
1857
  ].join(" "),
1825
1858
  children: [
1826
1859
  /* @__PURE__ */ u("div", { class: "flex flex-wrap items-center gap-1 gap-x-1.5", children: [
1827
- /* @__PURE__ */ o("span", { class: "text-base font-normal capitalize text-gray-800", children: Vt(r, c) }),
1828
- t ? (
1860
+ /* @__PURE__ */ o("span", { class: "text-base font-normal capitalize text-gray-800", children: Zt(t, c) }),
1861
+ r ? (
1829
1862
  // Pastel brand-mix pill — точно как `badge` в TelegramPricingRadio.
1830
1863
  // Низкий visual weight: pill про "имя плана" (most popular), а не
1831
1864
  // про savings — не должна конкурировать с -X% discount-pill.
@@ -1856,7 +1889,7 @@ function $t({
1856
1889
  /* @__PURE__ */ u("span", { class: "text-xs text-gray-400", children: [
1857
1890
  " ",
1858
1891
  "/ ",
1859
- le(r, c)
1892
+ le(t, c)
1860
1893
  ] })
1861
1894
  ] })
1862
1895
  ] })
@@ -1867,17 +1900,17 @@ function $t({
1867
1900
  }
1868
1901
  );
1869
1902
  }
1870
- function Ht({
1871
- price: r,
1903
+ function Kt({
1904
+ price: t,
1872
1905
  isPopular: e,
1873
- popularLabel: t,
1906
+ popularLabel: r,
1874
1907
  offer: n,
1875
1908
  reserveStrikeRow: i,
1876
1909
  selected: s,
1877
1910
  onSelect: a,
1878
1911
  t: c
1879
1912
  }) {
1880
- const l = n?.discount_percent ?? null, { currency: f, amount: h, originalAmount: d } = ae(r, l);
1913
+ const l = n?.discount_percent ?? null, { currency: f, amount: h, originalAmount: d } = ae(t, l);
1881
1914
  return /* @__PURE__ */ u(
1882
1915
  "button",
1883
1916
  {
@@ -1891,7 +1924,7 @@ function Ht({
1891
1924
  ].join(" "),
1892
1925
  style: s ? { background: "color-mix(in srgb, var(--pw-accent) 6%, transparent)" } : void 0,
1893
1926
  children: [
1894
- /* @__PURE__ */ o("span", { class: "flex min-h-[2.4em] items-center text-[10px] font-normal uppercase leading-tight text-gray-800/70", children: Ue(r, c) }),
1927
+ /* @__PURE__ */ o("span", { class: "flex min-h-[2.4em] items-center text-[10px] font-normal uppercase leading-tight text-gray-800/70", children: Ue(t, c) }),
1895
1928
  i ? /* @__PURE__ */ u("div", { class: "flex h-[22px] items-center justify-center gap-1.5", children: [
1896
1929
  d ? /* @__PURE__ */ o("span", { class: "text-[12px] text-gray-400 line-through decoration-gray-400 decoration-[1.5px]", children: d }) : null,
1897
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: [
@@ -1906,40 +1939,40 @@ function Ht({
1906
1939
  ] }),
1907
1940
  /* @__PURE__ */ u("span", { class: "text-xs font-normal text-gray-500", children: [
1908
1941
  "/ ",
1909
- le(r, c)
1942
+ le(t, c)
1910
1943
  ] }),
1911
1944
  e ? /* @__PURE__ */ o(
1912
1945
  "span",
1913
1946
  {
1914
1947
  class: "absolute -top-[10px] left-1/2 -translate-x-1/2 whitespace-nowrap rounded-[11px] border-[3px] border-white px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-white",
1915
1948
  style: { background: "var(--pw-accent)" },
1916
- children: t
1949
+ children: r
1917
1950
  }
1918
1951
  ) : null
1919
1952
  ]
1920
1953
  }
1921
1954
  );
1922
1955
  }
1923
- function Gt({ block: r }) {
1924
- return /* @__PURE__ */ o("p", { class: "text-[0.9375rem] leading-relaxed text-gray-600", children: r.text });
1956
+ function Xt({ block: t }) {
1957
+ return /* @__PURE__ */ o("p", { class: "text-[0.9375rem] leading-relaxed text-gray-600", children: t.text });
1925
1958
  }
1926
- const Wt = {
1959
+ const Jt = {
1927
1960
  week: 0.25,
1928
1961
  month: 1,
1929
1962
  year: 12
1930
1963
  };
1931
- function Zt(r, e) {
1932
- return r ? e(`pricing.interval.${r}`, r) : e("pricing.interval.period", "period");
1964
+ function Qt(t, e) {
1965
+ return t ? e(`pricing.interval.${t}`, t) : e("pricing.interval.period", "period");
1933
1966
  }
1934
- function Yt({ block: r, ctx: e }) {
1935
- const { t } = k();
1936
- if (!r.queries.length) return null;
1937
- const i = e.bootstrap.prices.find((a) => a.id === e.selectedPriceId)?.interval ?? null, s = i ? Wt[i] : void 0;
1967
+ function er({ block: t, ctx: e }) {
1968
+ const { t: r } = k();
1969
+ if (!t.queries.length) return null;
1970
+ const i = e.bootstrap.prices.find((a) => a.id === e.selectedPriceId)?.interval ?? null, s = i ? Jt[i] : void 0;
1938
1971
  return /* @__PURE__ */ u("div", { class: "flex flex-col gap-2", children: [
1939
- /* @__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}:", {
1940
- interval: Zt(i, t)
1972
+ /* @__PURE__ */ o("div", { class: "text-sm font-semibold text-gray-800", children: !i || i === "lifetime" ? r("pricing.included_total", "Included for lifetime:") : r("pricing.included_per", "Included per {interval}:", {
1973
+ interval: Qt(i, r)
1941
1974
  }) }),
1942
- /* @__PURE__ */ o("ul", { class: "flex flex-col gap-2", role: "list", children: r.queries.map((a) => {
1975
+ /* @__PURE__ */ o("ul", { class: "flex flex-col gap-2", role: "list", children: t.queries.map((a) => {
1943
1976
  const c = Number.isFinite(a.count) ? a.count : 0, l = s !== void 0 ? Math.round(c * s) : c;
1944
1977
  return /* @__PURE__ */ u("li", { class: `flex gap-3 ${a.desc ? "items-start" : "items-center"}`, children: [
1945
1978
  /* @__PURE__ */ o(
@@ -1976,33 +2009,33 @@ function Yt({ block: r, ctx: e }) {
1976
2009
  }) })
1977
2010
  ] });
1978
2011
  }
1979
- const Kt = {
1980
- heading: qt,
1981
- text: Gt,
1982
- price_grid: Ft,
1983
- cta_button: Pt,
2012
+ const tr = {
2013
+ heading: Ht,
2014
+ text: Xt,
2015
+ price_grid: Wt,
2016
+ cta_button: jt,
1984
2017
  auth_panel: Le,
1985
- current_session: Tt,
1986
- features_list: Bt,
1987
- tokenization_gate: Yt,
1988
- guarantee_badge: Ot,
1989
- offer_banner: bt
2018
+ current_session: Rt,
2019
+ features_list: Dt,
2020
+ tokenization_gate: er,
2021
+ guarantee_badge: zt,
2022
+ offer_banner: St
1990
2023
  };
1991
- function Xt({ layout: r, bootstrap: e, onAction: t, auth: n, authSession: i, hasTopBanner: s }) {
1992
- const a = $e(() => {
1993
- for (const v of r.blocks)
2024
+ function rr({ layout: t, bootstrap: e, onAction: r, auth: n, authSession: i, hasTopBanner: s }) {
2025
+ const a = Ve(() => {
2026
+ for (const v of t.blocks)
1994
2027
  if (v.type === "price_grid" && v.popular_price_id && e.prices.some((p) => p.id === v.popular_price_id))
1995
2028
  return v.popular_price_id;
1996
2029
  return e.prices[0]?.id ?? null;
1997
- }, [r.blocks, e.prices]), [c, l] = x(a), f = {
2030
+ }, [t.blocks, e.prices]), [c, l] = x(a), f = {
1998
2031
  bootstrap: e,
1999
2032
  selectedPriceId: c,
2000
2033
  setSelectedPriceId: l,
2001
- onAction: t,
2034
+ onAction: r,
2002
2035
  auth: n,
2003
2036
  authSession: i
2004
- }, h = r.blocks.findIndex((v) => v.type === "cta_button"), d = h === -1 ? r.blocks : r.blocks.slice(0, h), b = h === -1 ? [] : r.blocks.slice(h), w = (v, p) => {
2005
- const y = Kt[v.type];
2037
+ }, h = t.blocks.findIndex((v) => v.type === "cta_button"), d = h === -1 ? t.blocks : t.blocks.slice(0, h), b = h === -1 ? [] : t.blocks.slice(h), w = (v, p) => {
2038
+ const y = tr[v.type];
2006
2039
  return y ? /* @__PURE__ */ o(y, { block: v, ctx: f }, `${v.type}-${p}`) : (typeof console < "u" && console.warn(`[paywall] unknown block type: ${v.type}`), null);
2007
2040
  };
2008
2041
  return /* @__PURE__ */ u(se, { children: [
@@ -2022,16 +2055,16 @@ function Xt({ layout: r, bootstrap: e, onAction: t, auth: n, authSession: i, has
2022
2055
  ) : null
2023
2056
  ] });
2024
2057
  }
2025
- function Jt(r, e, t, n) {
2026
- 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" ? { open: !0, view: "loading", error: null } : { open: !0, view: "layout", error: null } : { open: !1, view: null, error: null };
2058
+ function nr(t, e, r, n) {
2059
+ return t ? 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 } : r.kind === "support" ? { open: !0, view: "support", error: null } : r.kind === "auth_gate" ? { open: !0, view: "auth", error: null } : r.kind === "awaiting_payment" ? { open: !0, view: "awaiting_payment", error: null } : r.kind === "popup_blocked" ? { open: !0, view: "popup_blocked", error: null } : r.kind === "purchase_success" ? { open: !0, view: "purchased", error: null } : r.kind === "verifying" ? { open: !0, view: "loading", error: null } : { open: !0, view: "layout", error: null } : { open: !1, view: null, error: null };
2027
2060
  }
2028
- function Qt(r, e) {
2029
- return r.open === e.open && r.view === e.view && r.error === e.error;
2061
+ function ir(t, e) {
2062
+ return t.open === e.open && t.view === e.view && t.error === e.error;
2030
2063
  }
2031
- function er({
2032
- client: r,
2064
+ function or({
2065
+ client: t,
2033
2066
  open: e,
2034
- onClose: t,
2067
+ onClose: r,
2035
2068
  onEvent: n,
2036
2069
  initialView: i,
2037
2070
  initialAuthMode: s,
@@ -2042,26 +2075,26 @@ function er({
2042
2075
  locale: h
2043
2076
  }) {
2044
2077
  const [d, b] = x({ status: "idle" }), [w, v] = x(
2045
- () => r.auth?.getCachedSession() ?? null
2078
+ () => t.auth?.getCachedSession() ?? null
2046
2079
  ), [p, y] = x(() => i === "support" ? { kind: "support", origin: "standalone" } : i === "auth" ? { kind: "auth_gate", origin: "standalone" } : { kind: "layout" }), O = R(!1), _ = R(null);
2047
2080
  B(() => {
2048
2081
  if (!l) return;
2049
- const m = Jt(e, d, p, a), g = _.current;
2050
- g && Qt(g, m) || (_.current = m, l(m));
2082
+ const m = nr(e, d, p, a), g = _.current;
2083
+ g && ir(g, m) || (_.current = m, l(m));
2051
2084
  }, [e, d, p, a, l]), B(() => {
2052
- if (r.auth)
2053
- return r.auth.onAuthChange((m, g) => v(g));
2054
- }, [r.auth]), B(() => {
2055
- if (typeof r.onBootstrapChange == "function")
2056
- return r.onBootstrapChange((m) => {
2085
+ if (t.auth)
2086
+ return t.auth.onAuthChange((m, g) => v(g));
2087
+ }, [t.auth]), B(() => {
2088
+ if (typeof t.onBootstrapChange == "function")
2089
+ return t.onBootstrapChange((m) => {
2057
2090
  b(
2058
2091
  (g) => g.status === "ready" ? { status: "ready", data: m } : g
2059
2092
  );
2060
2093
  });
2061
- }, [r]), B(() => {
2094
+ }, [t]), B(() => {
2062
2095
  if (!e || d.status === "ready" || d.status === "loading") return;
2063
2096
  let m = !1;
2064
- return b({ status: "loading" }), r.bootstrap().then((g) => {
2097
+ return b({ status: "loading" }), t.bootstrap().then((g) => {
2065
2098
  m || (b({ status: "ready", data: g }), n("ready", g), g.user?.has_active_subscription && !c && !i && (n("purchase_completed", {
2066
2099
  priceId: null,
2067
2100
  sessionId: null,
@@ -2074,7 +2107,7 @@ function er({
2074
2107
  }), () => {
2075
2108
  m = !0;
2076
2109
  };
2077
- }, [e, r]), He(() => {
2110
+ }, [e, t]), He(() => {
2078
2111
  if (!e) {
2079
2112
  y({ kind: "layout" }), O.current = !1;
2080
2113
  return;
@@ -2083,7 +2116,7 @@ function er({
2083
2116
  }, [e, i]);
2084
2117
  const S = async (m) => {
2085
2118
  try {
2086
- const g = await r.createCheckout({
2119
+ const g = await t.createCheckout({
2087
2120
  priceId: m,
2088
2121
  ignoreActivePurchase: c === !0
2089
2122
  });
@@ -2100,7 +2133,7 @@ function er({
2100
2133
  } catch (g) {
2101
2134
  if (g instanceof T && g.code === "already_purchased") {
2102
2135
  try {
2103
- await r.getUser({ force: !0 });
2136
+ await t.getUser({ force: !0 });
2104
2137
  } catch {
2105
2138
  }
2106
2139
  n("purchase_completed", { priceId: m, sessionId: null, restored: !0 }), y({ kind: "purchase_success", restored: !0 });
@@ -2127,7 +2160,7 @@ function er({
2127
2160
  y({ kind: "verifying" }), (async () => {
2128
2161
  if (!c)
2129
2162
  try {
2130
- if ((await r.getUser({ force: !0 })).has_active_subscription) {
2163
+ if ((await t.getUser({ force: !0 })).has_active_subscription) {
2131
2164
  n("purchase_completed", {
2132
2165
  priceId: m?.priceId ?? null,
2133
2166
  sessionId: null,
@@ -2138,7 +2171,7 @@ function er({
2138
2171
  } catch {
2139
2172
  }
2140
2173
  if (!m) {
2141
- g === "standalone" ? t() : y({ kind: "layout" });
2174
+ g === "standalone" ? r() : y({ kind: "layout" });
2142
2175
  return;
2143
2176
  }
2144
2177
  await S(m.priceId);
@@ -2146,9 +2179,9 @@ function er({
2146
2179
  O.current = !1;
2147
2180
  });
2148
2181
  }, [w, p]);
2149
- const z = async (m, g) => {
2182
+ const D = async (m, g) => {
2150
2183
  if (m === "close") {
2151
- t();
2184
+ r();
2152
2185
  return;
2153
2186
  }
2154
2187
  if (m === "price_selected") {
@@ -2156,8 +2189,8 @@ function er({
2156
2189
  return;
2157
2190
  }
2158
2191
  if (m === "restore") {
2159
- if (!r.auth) return;
2160
- const C = r.auth.getCachedSession();
2192
+ if (!t.auth) return;
2193
+ const C = t.auth.getCachedSession();
2161
2194
  if (C && !C.user.is_anonymous) return;
2162
2195
  y({ kind: "auth_gate", intent: "restore" });
2163
2196
  return;
@@ -2172,14 +2205,14 @@ function er({
2172
2205
  n("error", new T("no_price", "No price selected"));
2173
2206
  return;
2174
2207
  }
2175
- const K = d.data.settings.checkout_mode ?? "guest", I = r.auth?.getCachedSession() ?? null, M = !!I && !I.user.is_anonymous;
2176
- if (K === "preauth" && !!r.auth && !M) {
2208
+ const K = d.data.settings.checkout_mode ?? "guest", I = t.auth?.getCachedSession() ?? null, M = !!I && !I.user.is_anonymous;
2209
+ if (K === "preauth" && !!t.auth && !M) {
2177
2210
  y({ kind: "auth_gate", pendingCheckout: { priceId: C } });
2178
2211
  return;
2179
2212
  }
2180
2213
  await S(C);
2181
2214
  }
2182
- }, E = d.status === "ready" ? d.data.settings.brand_color : null, U = d.status === "ready" ? d.data.settings.allow_close !== !1 : !0, j = p.kind === "layout" && d.status === "ready" ? Ee(d.data.offers) : null, P = j ? /* @__PURE__ */ o(wt, { offer: j }) : null, L = {
2215
+ }, E = d.status === "ready" ? d.data.settings.brand_color : null, U = d.status === "ready" ? d.data.settings.allow_close !== !1 : !0, j = p.kind === "layout" && d.status === "ready" ? Ee(d.data.offers) : null, P = j ? /* @__PURE__ */ o(Ct, { offer: j }) : null, L = {
2183
2216
  type: "auth_panel",
2184
2217
  // Заголовок не задаём — AuthGate сам решит по intent'у (restore →
2185
2218
  // "Restore Purchases", остальные → дефолтный "Welcome back!").
@@ -2189,46 +2222,46 @@ function er({
2189
2222
  // чем хотим показывать "Signed in as ..." промежуточным экраном.
2190
2223
  hide_when_authenticated: !1,
2191
2224
  providers: d.status === "ready" ? d.data.settings.auth_providers : void 0
2192
- }, q = p.kind === "support" ? /* @__PURE__ */ o(
2193
- _t,
2225
+ }, N = p.kind === "support" ? /* @__PURE__ */ o(
2226
+ Lt,
2194
2227
  {
2195
- client: r,
2228
+ client: t,
2196
2229
  authSession: w,
2197
2230
  origin: p.origin,
2198
2231
  onBack: () => {
2199
- p.origin === "standalone" ? t() : y({ kind: "layout" });
2232
+ p.origin === "standalone" ? r() : y({ kind: "layout" });
2200
2233
  }
2201
2234
  }
2202
- ) : null, N = p.kind === "auth_gate" && p.origin !== "standalone" || p.kind === "support", Y = d.status === "ready" ? d.data : null;
2203
- return /* @__PURE__ */ o(et, { bootstrap: Y, forceLocale: h, children: /* @__PURE__ */ o(
2204
- tt,
2235
+ ) : null, q = p.kind === "auth_gate" && p.origin !== "standalone" || p.kind === "support", Y = d.status === "ready" ? d.data : null;
2236
+ return /* @__PURE__ */ o(ot, { bootstrap: Y, forceLocale: h, children: /* @__PURE__ */ o(
2237
+ st,
2205
2238
  {
2206
2239
  open: e,
2207
- onClose: t,
2240
+ onClose: r,
2208
2241
  brandColor: E,
2209
2242
  topBanner: P,
2210
2243
  allowClose: U,
2211
- hideCloseButton: N,
2244
+ hideCloseButton: q,
2212
2245
  inline: f,
2213
2246
  labelledBy: "pw-title",
2214
- children: a ? /* @__PURE__ */ o(ke, { onContinue: t }) : p.kind === "purchase_success" ? /* @__PURE__ */ o(ke, { restored: p.restored, onContinue: t }) : q || (d.status === "loading" || d.status === "idle" || p.kind === "verifying" ? /* @__PURE__ */ o(tr, { verifying: p.kind === "verifying" }) : d.status === "error" ? /* @__PURE__ */ o(rr, { message: d.error.message }) : p.kind === "auth_gate" && r.auth ? /* @__PURE__ */ o(
2215
- mt,
2247
+ children: a ? /* @__PURE__ */ o(ke, { onContinue: r }) : p.kind === "purchase_success" ? /* @__PURE__ */ o(ke, { restored: p.restored, onContinue: r }) : N || (d.status === "loading" || d.status === "idle" || p.kind === "verifying" ? /* @__PURE__ */ o(sr, { verifying: p.kind === "verifying" }) : d.status === "error" ? /* @__PURE__ */ o(ar, { message: d.error.message }) : p.kind === "auth_gate" && t.auth ? /* @__PURE__ */ o(
2248
+ kt,
2216
2249
  {
2217
2250
  block: L,
2218
2251
  bootstrap: d.data,
2219
- auth: r.auth,
2252
+ auth: t.auth,
2220
2253
  authSession: w,
2221
2254
  showBack: p.origin !== "standalone",
2222
2255
  intent: p.intent ?? (p.origin === "standalone" ? "standalone" : "preauth"),
2223
2256
  initialMode: p.origin === "standalone" ? s : void 0,
2224
2257
  onBack: () => {
2225
- p.origin === "standalone" ? t() : y({ kind: "layout" });
2258
+ p.origin === "standalone" ? r() : y({ kind: "layout" });
2226
2259
  }
2227
2260
  }
2228
2261
  ) : p.kind === "awaiting_payment" ? /* @__PURE__ */ o(
2229
- ir,
2262
+ cr,
2230
2263
  {
2231
- client: r,
2264
+ client: t,
2232
2265
  onBack: () => y({ kind: "layout" }),
2233
2266
  onReopen: () => {
2234
2267
  if (typeof window > "u") return;
@@ -2241,27 +2274,27 @@ function er({
2241
2274
  },
2242
2275
  onRetry: () => S(p.priceId)
2243
2276
  }
2244
- ) : p.kind === "popup_blocked" ? /* @__PURE__ */ o(nr, { onReopen: () => A(p.priceId, p.url) }) : /* @__PURE__ */ o(
2245
- Xt,
2277
+ ) : p.kind === "popup_blocked" ? /* @__PURE__ */ o(lr, { onReopen: () => A(p.priceId, p.url) }) : /* @__PURE__ */ o(
2278
+ rr,
2246
2279
  {
2247
2280
  layout: d.data.layout,
2248
2281
  bootstrap: d.data,
2249
- onAction: z,
2250
- auth: r.auth,
2282
+ onAction: D,
2283
+ auth: t.auth,
2251
2284
  authSession: w
2252
2285
  }
2253
2286
  ))
2254
2287
  }
2255
2288
  ) });
2256
2289
  }
2257
- function tr({ verifying: r }) {
2290
+ function sr({ verifying: t }) {
2258
2291
  const { t: e } = k();
2259
2292
  return /* @__PURE__ */ u("div", { class: "flex flex-col items-center justify-center gap-3 py-12", children: [
2260
2293
  /* @__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)]" }),
2261
- /* @__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…") })
2294
+ /* @__PURE__ */ o("span", { class: "text-xs font-medium tracking-wide text-gray-500", children: t ? e("modal.verifying_subscription", "Checking your subscription…") : e("modal.loading", "Loading…") })
2262
2295
  ] });
2263
2296
  }
2264
- function rr({ message: r }) {
2297
+ function ar({ message: t }) {
2265
2298
  const { t: e } = k();
2266
2299
  return /* @__PURE__ */ u("div", { class: "flex flex-col items-center gap-2 py-8 text-center", children: [
2267
2300
  /* @__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: [
@@ -2269,10 +2302,10 @@ function rr({ message: r }) {
2269
2302
  /* @__PURE__ */ o("circle", { cx: "10", cy: "10", r: "8", stroke: "#dc2626", "stroke-width": "1.75" })
2270
2303
  ] }) }),
2271
2304
  /* @__PURE__ */ o("p", { class: "text-sm font-semibold tracking-tight text-gray-900", children: e("modal.error_generic", "Something went wrong") }),
2272
- /* @__PURE__ */ o("p", { class: "text-xs leading-relaxed text-gray-500", children: r })
2305
+ /* @__PURE__ */ o("p", { class: "text-xs leading-relaxed text-gray-500", children: t })
2273
2306
  ] });
2274
2307
  }
2275
- function nr({ onReopen: r }) {
2308
+ function lr({ onReopen: t }) {
2276
2309
  const { t: e } = k();
2277
2310
  return /* @__PURE__ */ u("div", { class: "flex flex-col items-center gap-3 py-8 text-center", children: [
2278
2311
  /* @__PURE__ */ o(
@@ -2293,7 +2326,7 @@ function nr({ onReopen: r }) {
2293
2326
  "button",
2294
2327
  {
2295
2328
  type: "button",
2296
- onClick: r,
2329
+ onClick: t,
2297
2330
  class: "mt-1 rounded-xl px-4 py-2 text-xs 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)]",
2298
2331
  style: {
2299
2332
  background: "linear-gradient(180deg, color-mix(in srgb, var(--pw-accent) 92%, white), var(--pw-accent))",
@@ -2304,10 +2337,10 @@ function nr({ onReopen: r }) {
2304
2337
  )
2305
2338
  ] });
2306
2339
  }
2307
- function ir({
2308
- client: r,
2340
+ function cr({
2341
+ client: t,
2309
2342
  onBack: e,
2310
- onReopen: t,
2343
+ onReopen: r,
2311
2344
  onRetry: n
2312
2345
  }) {
2313
2346
  const { t: i } = k(), [s, a] = x(!1), [c, l] = x(!1), f = R(null);
@@ -2318,7 +2351,7 @@ function ir({
2318
2351
  if (!s) {
2319
2352
  a(!0), l(!1);
2320
2353
  try {
2321
- if ((await r.getUser({ force: !0 })).has_active_subscription) {
2354
+ if ((await t.getUser({ force: !0 })).has_active_subscription) {
2322
2355
  typeof window < "u" && window.postMessage({ type: "paywall_purchase" }, "*");
2323
2356
  return;
2324
2357
  }
@@ -2381,7 +2414,7 @@ function ir({
2381
2414
  "button",
2382
2415
  {
2383
2416
  type: "button",
2384
- onClick: t,
2417
+ onClick: r,
2385
2418
  class: "mt-2.5 w-full rounded-xl border border-gray-200 bg-white px-3 py-2 text-xs font-semibold text-gray-700 transition-colors hover:border-gray-300 hover:bg-gray-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--pw-accent)]",
2386
2419
  children: i("payment.open_checkout_again", "Open checkout again")
2387
2420
  }
@@ -2399,10 +2432,10 @@ function ir({
2399
2432
  ] });
2400
2433
  }
2401
2434
  function ke({
2402
- onContinue: r,
2435
+ onContinue: t,
2403
2436
  restored: e = !1
2404
2437
  }) {
2405
- const { t } = k();
2438
+ const { t: r } = k();
2406
2439
  return /* @__PURE__ */ u("div", { class: "flex flex-col items-center gap-3 py-8 text-center", children: [
2407
2440
  /* @__PURE__ */ o(
2408
2441
  "div",
@@ -2427,37 +2460,37 @@ function ke({
2427
2460
  ) })
2428
2461
  }
2429
2462
  ),
2430
- /* @__PURE__ */ o("p", { id: "pw-title", class: "mt-1 text-lg font-semibold tracking-tight text-gray-900", children: e ? t("modal.purchase_restored_title", "Subscription restored") : t("modal.purchase_success_title", "Payment received") }),
2431
- /* @__PURE__ */ o("p", { class: "text-sm leading-relaxed text-gray-500", children: e ? t(
2463
+ /* @__PURE__ */ o("p", { id: "pw-title", class: "mt-1 text-lg font-semibold tracking-tight text-gray-900", children: e ? r("modal.purchase_restored_title", "Subscription restored") : r("modal.purchase_success_title", "Payment received") }),
2464
+ /* @__PURE__ */ o("p", { class: "text-sm leading-relaxed text-gray-500", children: e ? r(
2432
2465
  "modal.purchase_restored_subtitle",
2433
2466
  "Welcome back — your subscription is already active."
2434
- ) : t("modal.purchase_success_subtitle", "Your subscription is now active.") }),
2467
+ ) : r("modal.purchase_success_subtitle", "Your subscription is now active.") }),
2435
2468
  /* @__PURE__ */ o(
2436
2469
  "button",
2437
2470
  {
2438
2471
  type: "button",
2439
- onClick: r,
2472
+ onClick: t,
2440
2473
  class: "mt-3 rounded-xl px-5 py-2.5 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)]",
2441
2474
  style: {
2442
2475
  background: "linear-gradient(180deg, color-mix(in srgb, var(--pw-accent) 92%, white), var(--pw-accent))",
2443
2476
  boxShadow: "0 1px 2px rgba(15,23,42,0.08), 0 8px 20px -6px color-mix(in srgb, var(--pw-accent) 50%, transparent)"
2444
2477
  },
2445
- children: t("modal.continue", "Continue")
2478
+ children: r("modal.continue", "Continue")
2446
2479
  }
2447
2480
  )
2448
2481
  ] });
2449
2482
  }
2450
- const or = 10 * 6e4, sr = 5e3, ar = 3e4;
2451
- class lr {
2483
+ const ur = 10 * 6e4, dr = 5e3, hr = 3e4;
2484
+ class pr {
2452
2485
  constructor(e) {
2453
2486
  this.timer = null, this.timeoutTimer = null, this.visibilityHandler = null, this.focusHandler = null, this.messageHandler = null, this.stopped = !1, this.checking = !1, this.opts = {
2454
2487
  client: e.client,
2455
2488
  onActive: e.onActive,
2456
2489
  onTimeout: e.onTimeout ?? (() => {
2457
2490
  }),
2458
- timeoutMs: e.timeoutMs ?? or,
2459
- visibleIntervalMs: e.visibleIntervalMs ?? sr,
2460
- hiddenIntervalMs: e.hiddenIntervalMs ?? ar
2491
+ timeoutMs: e.timeoutMs ?? ur,
2492
+ visibleIntervalMs: e.visibleIntervalMs ?? dr,
2493
+ hiddenIntervalMs: e.hiddenIntervalMs ?? hr
2461
2494
  };
2462
2495
  }
2463
2496
  start() {
@@ -2483,20 +2516,20 @@ class lr {
2483
2516
  }
2484
2517
  scheduleNext() {
2485
2518
  if (this.stopped) return;
2486
- const t = typeof document < "u" && document.visibilityState === "visible" ? this.opts.visibleIntervalMs : this.opts.hiddenIntervalMs;
2519
+ const r = typeof document < "u" && document.visibilityState === "visible" ? this.opts.visibleIntervalMs : this.opts.hiddenIntervalMs;
2487
2520
  this.timer = setTimeout(async () => {
2488
2521
  await this.check(), this.scheduleNext();
2489
- }, t);
2522
+ }, r);
2490
2523
  }
2491
2524
  handleVisibilityChange() {
2492
2525
  typeof document > "u" || (document.visibilityState === "visible" && this.check(), this.timer !== null && (clearTimeout(this.timer), this.timer = null), this.scheduleNext());
2493
2526
  }
2494
2527
  handleMessage(e) {
2495
- const t = e.data;
2496
- !t || typeof t != "object" || t.type === "paywall_purchase" && this.check();
2528
+ const r = e.data;
2529
+ !r || typeof r != "object" || r.type === "paywall_purchase" && this.check();
2497
2530
  }
2498
2531
  }
2499
- function cr() {
2532
+ function fr() {
2500
2533
  return !(typeof document > "u" || typeof window > "u" || typeof location < "u" && location.protocol === "chrome-extension:");
2501
2534
  }
2502
2535
  const oe = { open: !1, view: null, error: null }, F = {
@@ -2504,11 +2537,11 @@ const oe = { open: !1, view: null, error: null }, F = {
2504
2537
  priceId: "paywall_price_id",
2505
2538
  sessionId: "paywall_session_id"
2506
2539
  };
2507
- let ur = class {
2540
+ let gr = class {
2508
2541
  constructor(e) {
2509
2542
  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 = oe, this.stateListeners = /* @__PURE__ */ new Set();
2510
- const { auth: t, ownsAuth: n } = dr(e);
2511
- this.auth = t, this.ownsAuth = n, this.billing = e.client ?? new je({ ...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) => {
2543
+ const { auth: r, ownsAuth: n } = mr(e);
2544
+ this.auth = r, this.ownsAuth = n, this.billing = e.client ?? new je({ ...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) => {
2512
2545
  this.emit("userChange", i);
2513
2546
  }), this.auth && (this.authUnsub = this.auth.onAuthChange((i, s) => {
2514
2547
  this.emit("authChange", { event: i, session: s });
@@ -2516,9 +2549,9 @@ let ur = class {
2516
2549
  }
2517
2550
  initTracker(e) {
2518
2551
  if (e === !1) return;
2519
- const t = typeof e == "object" && e !== null ? e : {};
2520
- if (t.enabled === !1) return;
2521
- const n = t.endpoint ?? `${this.billing.apiOrigin}/api/v1/paywall/${this.billing.paywallId}/events`;
2552
+ const r = typeof e == "object" && e !== null ? e : {};
2553
+ if (r.enabled === !1) return;
2554
+ const n = r.endpoint ?? `${this.billing.apiOrigin}/api/v1/paywall/${this.billing.paywallId}/events`;
2522
2555
  this.tracker = new Re({
2523
2556
  endpoint: n,
2524
2557
  paywallId: this.billing.paywallId,
@@ -2526,10 +2559,10 @@ let ur = class {
2526
2559
  getVisitorId: () => this.billing.getVisitorId(),
2527
2560
  getCachedVisitorId: () => this.billing.getCachedVisitorId(),
2528
2561
  getUserId: () => this.billing.getIdentity()?.userId ?? null,
2529
- flushIntervalMs: t.flushIntervalMs,
2530
- maxBufferSize: t.maxBufferSize,
2531
- fetch: t.fetch,
2532
- sendBeacon: t.sendBeacon
2562
+ flushIntervalMs: r.flushIntervalMs,
2563
+ maxBufferSize: r.maxBufferSize,
2564
+ fetch: r.fetch,
2565
+ sendBeacon: r.sendBeacon
2533
2566
  }), this.on("open", () => this.tracker?.track("paywall_opened")), this.on(
2534
2567
  "ready",
2535
2568
  (i) => this.tracker?.track("paywall_viewed", {
@@ -2582,8 +2615,8 @@ let ur = class {
2582
2615
  * Самый частый кейс — `track('app_opened')` от хоста сразу после загрузки
2583
2616
  * приложения, чтобы зафиксировать воронку до открытия пейвола.
2584
2617
  */
2585
- track(e, t) {
2586
- this.tracker?.track(e, t);
2618
+ track(e, r) {
2619
+ this.tracker?.track(e, r);
2587
2620
  }
2588
2621
  /**
2589
2622
  * Удобный шорткат вместо `paywall.on('userChange', cb)` — самый частый
@@ -2615,20 +2648,20 @@ let ur = class {
2615
2648
  * (navigator.language → locale_default).
2616
2649
  */
2617
2650
  setLocale(e) {
2618
- const t = e ?? null;
2619
- t !== this.forceLocale && (this.forceLocale = t, this.handle && this.handle.update({ locale: t }));
2651
+ const r = e ?? null;
2652
+ r !== this.forceLocale && (this.forceLocale = r, this.handle && this.handle.update({ locale: r }));
2620
2653
  }
2621
- on(e, t) {
2654
+ on(e, r) {
2622
2655
  let n = this.listeners.get(e);
2623
- return n || (n = /* @__PURE__ */ new Set(), this.listeners.set(e, n)), n.add(t), () => n.delete(t);
2656
+ return n || (n = /* @__PURE__ */ new Set(), this.listeners.set(e, n)), n.add(r), () => n.delete(r);
2624
2657
  }
2625
- off(e, t) {
2626
- this.listeners.get(e)?.delete(t);
2658
+ off(e, r) {
2659
+ this.listeners.get(e)?.delete(r);
2627
2660
  }
2628
- emit(e, ...t) {
2661
+ emit(e, ...r) {
2629
2662
  const n = this.listeners.get(e);
2630
2663
  if (!n) return;
2631
- const i = t[0];
2664
+ const i = r[0];
2632
2665
  for (const s of n)
2633
2666
  try {
2634
2667
  s(i);
@@ -2725,11 +2758,11 @@ let ur = class {
2725
2758
  )
2726
2759
  );
2727
2760
  }
2728
- openInternal(e, t) {
2729
- t.identity && this.billing.setIdentity(t.identity), this.purchased = !1;
2730
- const n = t.skipTrial === !0 || e === "support", i = t.skipVisibility === !0 || e === "support" || e === "auth", s = t.renew === !0;
2761
+ openInternal(e, r) {
2762
+ r.identity && this.billing.setIdentity(r.identity), this.purchased = !1;
2763
+ const n = r.skipTrial === !0 || e === "support", i = r.skipVisibility === !0 || e === "support" || e === "auth", s = r.renew === !0;
2731
2764
  if (n && i) {
2732
- this.mountAndShow(e, { renew: s, authMode: t.authMode });
2765
+ this.mountAndShow(e, { renew: s, authMode: r.authMode });
2733
2766
  return;
2734
2767
  }
2735
2768
  const a = this.billing.getCachedBootstrap();
@@ -2749,16 +2782,16 @@ let ur = class {
2749
2782
  /** Применить gates ПОСЛЕ того, как модалка уже смонтирована (mount-then-load
2750
2783
  * путь). Если gate блокирует — close() + emit. Если юзер уже сам закрыл
2751
2784
  * модалку до резолва bootstrap'а — no-op (isOpen=false). */
2752
- runDelayedGates(e, t) {
2785
+ runDelayedGates(e, r) {
2753
2786
  if (!this.isOpen) return;
2754
- if (!t.skipVisibility) {
2787
+ if (!r.skipVisibility) {
2755
2788
  const s = e.settings.visibility;
2756
2789
  if (s && (this.lastVisibility = s, !s.visible)) {
2757
2790
  this.close(), this.emit("visibility_blocked", s);
2758
2791
  return;
2759
2792
  }
2760
2793
  }
2761
- if (t.skipTrial) return;
2794
+ if (r.skipTrial) return;
2762
2795
  const n = e.settings.trial;
2763
2796
  if (!n) return;
2764
2797
  const i = this.ensureTrialStore(n);
@@ -2780,9 +2813,9 @@ let ur = class {
2780
2813
  // вести trial-стейт «осталось N показов» под юзером, который вообще не
2781
2814
  // должен увидеть пейвол по таргетингу — бессмысленно: при возврате в
2782
2815
  // правильную страну он окажется со «слипшимся» триал-счётчиком.
2783
- runOpenGates(e, t, n) {
2816
+ runOpenGates(e, r, n) {
2784
2817
  if (!n.skipVisibility) {
2785
- const i = t.settings.visibility;
2818
+ const i = r.settings.visibility;
2786
2819
  if (i && (this.lastVisibility = i, !i.visible)) {
2787
2820
  this.emit("visibility_blocked", i);
2788
2821
  return;
@@ -2792,10 +2825,10 @@ let ur = class {
2792
2825
  this.mountAndShow(e, { renew: n.renew });
2793
2826
  return;
2794
2827
  }
2795
- this.gateThroughTrial(e, t, n.renew);
2828
+ this.gateThroughTrial(e, r, n.renew);
2796
2829
  }
2797
- gateThroughTrial(e, t, n) {
2798
- const i = t.settings.trial;
2830
+ gateThroughTrial(e, r, n) {
2831
+ const i = r.settings.trial;
2799
2832
  if (!i) {
2800
2833
  this.mountAndShow(e, { renew: n });
2801
2834
  return;
@@ -2817,14 +2850,14 @@ let ur = class {
2817
2850
  });
2818
2851
  }
2819
2852
  ensureTrialStore(e) {
2820
- if (this.trialStore && this.trialStoreConfig && fr(this.trialStoreConfig, e))
2853
+ if (this.trialStore && this.trialStoreConfig && br(this.trialStoreConfig, e))
2821
2854
  return this.trialStore;
2822
2855
  this.trialStoreConfig = e;
2823
- const t = this.billing.createTrialStore;
2824
- return this.trialStore = typeof t == "function" ? t.call(this.billing, e) : ze(this.billing.getStorage(), this.billing.paywallId, e), this.trialStore;
2856
+ const r = this.billing.createTrialStore;
2857
+ return this.trialStore = typeof r == "function" ? r.call(this.billing, e) : De(this.billing.getStorage(), this.billing.paywallId, e), this.trialStore;
2825
2858
  }
2826
- mountAndShow(e, t = {}) {
2827
- const n = t.renew === !0, i = t.authMode;
2859
+ mountAndShow(e, r = {}) {
2860
+ const n = r.renew === !0, i = r.authMode;
2828
2861
  if (this.handle) {
2829
2862
  this.isOpen = !0, this.handle.update({
2830
2863
  open: !0,
@@ -2835,8 +2868,8 @@ let ur = class {
2835
2868
  }), this.emit("open");
2836
2869
  return;
2837
2870
  }
2838
- this.isOpen = !0, this.handle = Ze(
2839
- er,
2871
+ this.isOpen = !0, this.handle = Qe(
2872
+ or,
2840
2873
  {
2841
2874
  client: this.billing,
2842
2875
  open: !0,
@@ -2856,11 +2889,11 @@ let ur = class {
2856
2889
  ), this.emit("open");
2857
2890
  }
2858
2891
  applyState(e) {
2859
- if (!pr(this.currentState, e)) {
2892
+ if (!xr(this.currentState, e)) {
2860
2893
  this.currentState = e;
2861
- for (const t of this.stateListeners)
2894
+ for (const r of this.stateListeners)
2862
2895
  try {
2863
- t(e);
2896
+ r(e);
2864
2897
  } catch (n) {
2865
2898
  console.warn("[paywall] onStateChange listener threw", n);
2866
2899
  }
@@ -2887,9 +2920,9 @@ let ur = class {
2887
2920
  *
2888
2921
  * Возвращает unsubscribe.
2889
2922
  */
2890
- onStateChange(e, t = {}) {
2923
+ onStateChange(e, r = {}) {
2891
2924
  this.stateListeners.add(e);
2892
- const n = t.immediate ?? "microtask";
2925
+ const n = r.immediate ?? "microtask";
2893
2926
  if (n !== "none") {
2894
2927
  const i = this.currentState;
2895
2928
  if (n === "sync")
@@ -2934,6 +2967,36 @@ let ur = class {
2934
2967
  getCachedPrices() {
2935
2968
  return this.billing.getCachedPrices();
2936
2969
  }
2970
+ /** Sync-снимок офферов. null = bootstrap не загружали, [] = пейвол без офферов.
2971
+ * Бэк уже применил серверный targeting (страны/email/режим) — наружу
2972
+ * выезжает только то, что применимо к текущему юзеру. */
2973
+ getCachedOffers() {
2974
+ return this.billing.getCachedOffers();
2975
+ }
2976
+ /**
2977
+ * Резолвит активный offer для конкретной цены: price_id-таргетинг +
2978
+ * countdown (`expires_at` ИЛИ `duration_minutes` от первого открытия
2979
+ * пейвола, см. clientStorage `pw-offer-{id}-start`).
2980
+ *
2981
+ * Read-only — НЕ записывает start для `duration_minutes`-офферов. Запись
2982
+ * стартует только когда модалка реально открыта (renderer'ом). До этого
2983
+ * `getOfferForPrice` вернёт `null` для duration-only офферов, чтобы
2984
+ * страницы-хосты вне модалки (pricing, landing) не активировали countdown
2985
+ * раньше времени.
2986
+ *
2987
+ * Хост-странице нужен countdown, который тикает каждую секунду — для
2988
+ * этого использовать React-хук `usePaywallOffer(priceId)` из sdk-react
2989
+ * либо обёртку поверх `setInterval(1000)` + повторный вызов этого метода.
2990
+ */
2991
+ getOfferForPrice(e) {
2992
+ const r = this.billing.getCachedOffers();
2993
+ if (!r) return null;
2994
+ const n = $(r, e);
2995
+ return n ? Ze(n, {
2996
+ now: Date.now(),
2997
+ readStart: Xe
2998
+ }) : null;
2999
+ }
2937
3000
  /** Снимок текущего «языка юзера» — proxy над `billing.getUserLanguage()`.
2938
3001
  * Используй, чтобы синхронизировать i18n host'а с тем, что фактически
2939
3002
  * показывает пейвол. См. подробности в `BillingClient.getUserLanguage`. */
@@ -2962,10 +3025,10 @@ let ur = class {
2962
3025
  * `getAccess()`, а не только после первого `open()`.
2963
3026
  */
2964
3027
  async getAccess(e = {}) {
2965
- let t = this.billing.getCachedBootstrap();
2966
- if (!t)
3028
+ let r = this.billing.getCachedBootstrap();
3029
+ if (!r)
2967
3030
  try {
2968
- t = await this.billing.bootstrap({ signal: e.signal });
3031
+ r = await this.billing.bootstrap({ signal: e.signal });
2969
3032
  } catch {
2970
3033
  const a = this.billing.getCachedUser();
2971
3034
  return a?.has_active_subscription ? {
@@ -2982,24 +3045,24 @@ let ur = class {
2982
3045
  user: a
2983
3046
  };
2984
3047
  }
2985
- const n = t.user ?? null;
3048
+ const n = r.user ?? null;
2986
3049
  if (n?.has_active_subscription)
2987
3050
  return {
2988
3051
  access: "granted",
2989
3052
  reason: "has_subscription",
2990
- visibility: t.settings.visibility ?? null,
3053
+ visibility: r.settings.visibility ?? null,
2991
3054
  trial: null,
2992
3055
  user: n
2993
3056
  };
2994
3057
  let i = null;
2995
3058
  if (!e.skipVisibility) {
2996
- const a = t.settings.visibility;
3059
+ const a = r.settings.visibility;
2997
3060
  if (a && (i = a, this.lastVisibility = a, !a.visible))
2998
3061
  return { access: "granted", reason: "visibility_blocked", visibility: i, trial: null, user: n };
2999
3062
  }
3000
3063
  let s = null;
3001
3064
  if (!e.skipTrial) {
3002
- const a = t.settings.trial;
3065
+ const a = r.settings.trial;
3003
3066
  if (a)
3004
3067
  try {
3005
3068
  if (s = await this.ensureTrialStore(a).check(), this.lastTrialStatus = s, s.blocked)
@@ -3022,14 +3085,14 @@ let ur = class {
3022
3085
  // В extension popup runtime — no-op (popup не доживёт). Там полагаемся на
3023
3086
  // bootstrap при следующем открытии.
3024
3087
  startUserWatcher() {
3025
- this.watcher || cr() && (this.watcher = new lr({
3088
+ this.watcher || fr() && (this.watcher = new pr({
3026
3089
  client: this.billing,
3027
3090
  onActive: (e) => {
3028
3091
  this.watcher = null, this.emit("purchase_completed", { priceId: null, sessionId: null });
3029
- const t = this.billing.getCachedBootstrap()?.settings.success_redirect_url;
3030
- if (t && typeof window < "u")
3092
+ const r = this.billing.getCachedBootstrap()?.settings.success_redirect_url;
3093
+ if (r && typeof window < "u")
3031
3094
  try {
3032
- window.location.assign(t);
3095
+ window.location.assign(r);
3033
3096
  return;
3034
3097
  } catch {
3035
3098
  }
@@ -3051,80 +3114,80 @@ let ur = class {
3051
3114
  */
3052
3115
  checkReturn() {
3053
3116
  if (typeof window > "u") return;
3054
- const e = new URL(window.location.href), t = ve(e.hash.replace(/^#/, "")), n = ve(e.search.replace(/^\?/, "")), i = t ?? n;
3117
+ const e = new URL(window.location.href), r = ve(e.hash.replace(/^#/, "")), n = ve(e.search.replace(/^\?/, "")), i = r ?? n;
3055
3118
  i && (i.status === "paid" ? (this.emit("purchase_completed", {
3056
3119
  priceId: i.priceId,
3057
3120
  sessionId: i.sessionId
3058
- }), gr(i)) : (i.status === "failed" || i.status === "cancelled") && this.emit("purchase_failed", { reason: i.status }), mr(e));
3121
+ }), wr(i)) : (i.status === "failed" || i.status === "cancelled") && this.emit("purchase_failed", { reason: i.status }), kr(e));
3059
3122
  }
3060
3123
  destroy() {
3061
3124
  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 = oe;
3062
3125
  }
3063
3126
  };
3064
- function dr(r) {
3065
- if (!r.auth) return { auth: void 0, ownsAuth: !1 };
3066
- if (r.auth instanceof ce || hr(r.auth))
3067
- return { auth: r.auth, ownsAuth: !1 };
3068
- const e = r.auth === !0 ? {} : r.auth;
3127
+ function mr(t) {
3128
+ if (!t.auth) return { auth: void 0, ownsAuth: !1 };
3129
+ if (t.auth instanceof ce || yr(t.auth))
3130
+ return { auth: t.auth, ownsAuth: !1 };
3131
+ const e = t.auth === !0 ? {} : t.auth;
3069
3132
  return {
3070
3133
  auth: new ce({
3071
- paywallId: r.paywallId,
3072
- apiOrigin: e.apiOrigin ?? r.apiOrigin,
3073
- storage: e.storage ?? r.storage,
3074
- fetch: e.fetch ?? r.fetch,
3134
+ paywallId: t.paywallId,
3135
+ apiOrigin: e.apiOrigin ?? t.apiOrigin,
3136
+ storage: e.storage ?? t.storage,
3137
+ fetch: e.fetch ?? t.fetch,
3075
3138
  openPopup: e.openPopup
3076
3139
  }),
3077
3140
  ownsAuth: !0
3078
3141
  };
3079
3142
  }
3080
- function hr(r) {
3081
- if (typeof r != "object" || r === null) return !1;
3082
- const e = r;
3143
+ function yr(t) {
3144
+ if (typeof t != "object" || t === null) return !1;
3145
+ const e = t;
3083
3146
  return typeof e.onAuthChange == "function" && typeof e.getCachedSession == "function" && typeof e.signOut == "function";
3084
3147
  }
3085
- function pr(r, e) {
3086
- return r.open === e.open && r.view === e.view && r.error === e.error;
3148
+ function xr(t, e) {
3149
+ return t.open === e.open && t.view === e.view && t.error === e.error;
3087
3150
  }
3088
- function fr(r, e) {
3089
- return r.mode === e.mode && r.payload === e.payload && r.storage === e.storage;
3151
+ function br(t, e) {
3152
+ return t.mode === e.mode && t.payload === e.payload && t.storage === e.storage;
3090
3153
  }
3091
- function ve(r) {
3092
- if (!r) return null;
3093
- const e = new URLSearchParams(r), t = e.get(F.status);
3094
- return t ? {
3095
- status: t,
3154
+ function ve(t) {
3155
+ if (!t) return null;
3156
+ const e = new URLSearchParams(t), r = e.get(F.status);
3157
+ return r ? {
3158
+ status: r,
3096
3159
  priceId: e.get(F.priceId),
3097
3160
  sessionId: e.get(F.sessionId)
3098
3161
  } : null;
3099
3162
  }
3100
- function gr(r) {
3163
+ function wr(t) {
3101
3164
  if (!(typeof window > "u" || !window.opener))
3102
3165
  try {
3103
3166
  window.opener.postMessage(
3104
3167
  {
3105
3168
  type: "paywall_purchase",
3106
- status: r.status,
3107
- priceId: r.priceId,
3108
- sessionId: r.sessionId
3169
+ status: t.status,
3170
+ priceId: t.priceId,
3171
+ sessionId: t.sessionId
3109
3172
  },
3110
3173
  "*"
3111
3174
  );
3112
3175
  } catch {
3113
3176
  }
3114
3177
  }
3115
- function mr(r) {
3178
+ function kr(t) {
3116
3179
  const e = (n, i) => {
3117
3180
  if (!n) return "";
3118
3181
  const s = new URLSearchParams(n.replace(/^[?#]/, ""));
3119
3182
  s.delete(F.status), s.delete(F.priceId), s.delete(F.sessionId);
3120
3183
  const a = s.toString();
3121
3184
  return a ? i + a : "";
3122
- }, t = r.pathname + e(r.search, "?") + e(r.hash, "#");
3123
- window.history.replaceState(null, "", t);
3185
+ }, r = t.pathname + e(t.search, "?") + e(t.hash, "#");
3186
+ window.history.replaceState(null, "", r);
3124
3187
  }
3125
- class yr {
3126
- constructor(e, t, n) {
3127
- this.transport = e, this.paywallId = t, this.config = n;
3188
+ class vr {
3189
+ constructor(e, r, n) {
3190
+ this.transport = e, this.paywallId = r, this.config = n;
3128
3191
  }
3129
3192
  async check() {
3130
3193
  return this.transport.request("trial.check", {
@@ -3145,9 +3208,9 @@ class yr {
3145
3208
  });
3146
3209
  }
3147
3210
  }
3148
- class xr {
3149
- constructor(e, t) {
3150
- 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 = {
3211
+ class _r {
3212
+ constructor(e, r) {
3213
+ 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 = r.paywallId, this.apiOrigin = r.apiOrigin, this.remoteStorageAdapter = {
3151
3214
  getItem: (n) => this.transport.request("storage.get", { key: n }),
3152
3215
  setItem: async (n, i) => {
3153
3216
  await this.transport.request("storage.set", { key: n, value: i });
@@ -3166,12 +3229,12 @@ class xr {
3166
3229
  }
3167
3230
  // === Bootstrap ===
3168
3231
  async bootstrap(e = {}) {
3169
- const t = await this.transport.request(
3232
+ const r = await this.transport.request(
3170
3233
  "billing.bootstrap",
3171
3234
  { force: e.force },
3172
3235
  { signal: e.signal }
3173
3236
  );
3174
- return this.applyBootstrap(t), t.user && this.applyUser(t.user), t;
3237
+ return this.applyBootstrap(r), r.user && this.applyUser(r.user), r;
3175
3238
  }
3176
3239
  getCachedBootstrap() {
3177
3240
  return this.cachedBootstrap;
@@ -3184,9 +3247,9 @@ class xr {
3184
3247
  * обновляется → listener вызывается). Cross-surface revalidate (другая вкладка
3185
3248
  * обновила bootstrap) не доезжает до popup'а — для этого нужен отдельный
3186
3249
  * bootstrapChange-broadcast в protocol.ts/server.ts. */
3187
- onBootstrapChange(e, t = {}) {
3250
+ onBootstrapChange(e, r = {}) {
3188
3251
  this.bootstrapListeners.add(e);
3189
- const n = t.immediate ?? "microtask";
3252
+ const n = r.immediate ?? "microtask";
3190
3253
  if (this.cachedBootstrap && n !== "none") {
3191
3254
  const i = this.cachedBootstrap;
3192
3255
  if (n === "sync")
@@ -3213,18 +3276,24 @@ class xr {
3213
3276
  getCachedPrices() {
3214
3277
  return this.cachedBootstrap?.prices ?? null;
3215
3278
  }
3279
+ /** Sync-снимок офферов. null = bootstrap не загружали, [] = пейвол без офферов.
3280
+ * Серверный таргетинг (страны/email/режим) уже применён бэком — наружу
3281
+ * выезжает только то, что применимо к текущему юзеру. */
3282
+ getCachedOffers() {
3283
+ return this.cachedBootstrap?.offers ?? null;
3284
+ }
3216
3285
  // === Visitor ===
3217
3286
  async getVisitorId() {
3218
3287
  return this.transport.request("billing.getVisitorId", void 0);
3219
3288
  }
3220
3289
  // === User ===
3221
3290
  async getUser(e = {}) {
3222
- const t = await this.transport.request(
3291
+ const r = await this.transport.request(
3223
3292
  "billing.getUser",
3224
3293
  { force: e.force },
3225
3294
  { signal: e.signal }
3226
3295
  );
3227
- return this.applyUser(t), t;
3296
+ return this.applyUser(r), r;
3228
3297
  }
3229
3298
  getCachedUser() {
3230
3299
  return this.cachedUser;
@@ -3232,9 +3301,9 @@ class xr {
3232
3301
  /** Подписка на user-state. Mirror'имся на broadcast'ы offscreen'а; initial
3233
3302
  * snapshot отдаётся через microtask из локального cache (если есть) —
3234
3303
  * ровно как в BillingClient.onUserChange. Возвращает функцию отписки. */
3235
- onUserChange(e, t = {}) {
3304
+ onUserChange(e, r = {}) {
3236
3305
  this.userListeners.add(e);
3237
- const n = t.immediate ?? "microtask";
3306
+ const n = r.immediate ?? "microtask";
3238
3307
  if (this.cachedUser && n !== "none") {
3239
3308
  const i = this.cachedUser;
3240
3309
  if (n === "sync")
@@ -3264,9 +3333,9 @@ class xr {
3264
3333
  getCachedBalances() {
3265
3334
  return this.cachedBalances;
3266
3335
  }
3267
- onBalanceChange(e, t = {}) {
3336
+ onBalanceChange(e, r = {}) {
3268
3337
  this.balanceListeners.add(e);
3269
- const n = t.immediate ?? "microtask";
3338
+ const n = r.immediate ?? "microtask";
3270
3339
  if (this.cachedBalances && n !== "none") {
3271
3340
  const i = this.cachedBalances;
3272
3341
  if (n === "sync")
@@ -3286,8 +3355,8 @@ class xr {
3286
3355
  }
3287
3356
  // === Checkout ===
3288
3357
  async createCheckout(e) {
3289
- const { signal: t, ...n } = e;
3290
- return this.transport.request("billing.createCheckout", n, { signal: t });
3358
+ const { signal: r, ...n } = e;
3359
+ return this.transport.request("billing.createCheckout", n, { signal: r });
3291
3360
  }
3292
3361
  // === Customer portal: list/cancel purchases ===
3293
3362
  /** Rich-shape список покупок юзера (с ценой, валютой, interval, discount,
@@ -3310,8 +3379,8 @@ class xr {
3310
3379
  * периода (юзер сохраняет access до renewal date'ы). reason обязательна
3311
3380
  * (валидируется бэком) — собирается через select причин в host-UI. */
3312
3381
  async cancelSubscription(e) {
3313
- const { signal: t, ...n } = e;
3314
- return this.transport.request("billing.cancelSubscription", n, { signal: t });
3382
+ const { signal: r, ...n } = e;
3383
+ return this.transport.request("billing.cancelSubscription", n, { signal: r });
3315
3384
  }
3316
3385
  // === Storage ===
3317
3386
  /** PaywallUI просит storage у billing-клиента для TrialStore и других
@@ -3326,7 +3395,7 @@ class xr {
3326
3395
  * read-modify-write. PaywallUI duck-types этот метод и предпочитает его
3327
3396
  * локальной фабрике, если он есть. */
3328
3397
  createTrialStore(e) {
3329
- return new yr(this.transport, this.paywallId, e);
3398
+ return new vr(this.transport, this.paywallId, e);
3330
3399
  }
3331
3400
  // === Identity ===
3332
3401
  getIdentity() {
@@ -3347,9 +3416,9 @@ class xr {
3347
3416
  }
3348
3417
  applyBootstrap(e) {
3349
3418
  this.cachedBootstrap = e;
3350
- for (const t of [...this.bootstrapListeners])
3419
+ for (const r of [...this.bootstrapListeners])
3351
3420
  try {
3352
- t(e);
3421
+ r(e);
3353
3422
  } catch (n) {
3354
3423
  console.warn("[paywall] onBootstrapChange listener threw", n);
3355
3424
  }
@@ -3359,41 +3428,41 @@ class xr {
3359
3428
  * broadcast'ов от offscreen — чтобы host'овский onUserChange handler
3360
3429
  * получил signal независимо от того, кто триггернул обновление. */
3361
3430
  applyUser(e) {
3362
- br(this.cachedUser, e) || (this.cachedUser = e, this.fireUserListeners(e));
3431
+ Sr(this.cachedUser, e) || (this.cachedUser = e, this.fireUserListeners(e));
3363
3432
  }
3364
3433
  applyBalances(e) {
3365
- wr(this.cachedBalances, e) || (this.cachedBalances = e, this.fireBalanceListeners(e));
3434
+ Cr(this.cachedBalances, e) || (this.cachedBalances = e, this.fireBalanceListeners(e));
3366
3435
  }
3367
3436
  fireUserListeners(e) {
3368
- for (const t of [...this.userListeners])
3437
+ for (const r of [...this.userListeners])
3369
3438
  try {
3370
- t(e);
3439
+ r(e);
3371
3440
  } catch (n) {
3372
3441
  console.warn("[paywall] onUserChange listener threw", n);
3373
3442
  }
3374
3443
  }
3375
3444
  fireBalanceListeners(e) {
3376
- for (const t of [...this.balanceListeners])
3445
+ for (const r of [...this.balanceListeners])
3377
3446
  try {
3378
- t(e);
3447
+ r(e);
3379
3448
  } catch (n) {
3380
3449
  console.warn("[paywall] onBalanceChange listener threw", n);
3381
3450
  }
3382
3451
  }
3383
3452
  }
3384
- function br(r, e) {
3385
- return r === e ? !0 : !r || !e ? !1 : r.has_active_subscription === e.has_active_subscription && (r.purchases?.length ?? 0) === (e.purchases?.length ?? 0);
3453
+ function Sr(t, e) {
3454
+ return t === e ? !0 : !t || !e ? !1 : t.has_active_subscription === e.has_active_subscription && (t.purchases?.length ?? 0) === (e.purchases?.length ?? 0);
3386
3455
  }
3387
- function wr(r, e) {
3388
- if (r === e) return !0;
3389
- if (!r || !e || r.length !== e.length) return !1;
3390
- for (let t = 0; t < r.length; t++)
3391
- if (r[t].type !== e[t].type || r[t].count !== e[t].count) return !1;
3456
+ function Cr(t, e) {
3457
+ if (t === e) return !0;
3458
+ if (!t || !e || t.length !== e.length) return !1;
3459
+ for (let r = 0; r < t.length; r++)
3460
+ if (t[r].type !== e[r].type || t[r].count !== e[r].count) return !1;
3392
3461
  return !0;
3393
3462
  }
3394
- class kr {
3395
- constructor(e, t) {
3396
- 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 }) => {
3463
+ class Ir {
3464
+ constructor(e, r) {
3465
+ this.transport = e, this.session = null, this.listeners = /* @__PURE__ */ new Set(), this.unsubBroadcast = null, this.paywallId = r.paywallId, this.apiOrigin = r.apiOrigin, this.unsubBroadcast = this.transport.on("authChange", ({ event: n, session: i }) => {
3397
3466
  this.applySession(n, i);
3398
3467
  }), this.hydrated = this.transport.request("auth.getCachedSession", void 0).then((n) => {
3399
3468
  this.session === null && n !== null && (this.session = n);
@@ -3416,8 +3485,8 @@ class kr {
3416
3485
  if (this.listeners.has(e))
3417
3486
  try {
3418
3487
  e("INITIAL_SESSION", this.session);
3419
- } catch (t) {
3420
- console.warn("[paywall] onAuthChange INITIAL_SESSION threw", t);
3488
+ } catch (r) {
3489
+ console.warn("[paywall] onAuthChange INITIAL_SESSION threw", r);
3421
3490
  }
3422
3491
  }), () => {
3423
3492
  this.listeners.delete(e);
@@ -3425,12 +3494,12 @@ class kr {
3425
3494
  }
3426
3495
  // === Email/password ===
3427
3496
  async signInWithEmail(e) {
3428
- const t = await this.transport.request("auth.signInWithEmail", e);
3429
- return this.applySession("SIGNED_IN", t), t;
3497
+ const r = await this.transport.request("auth.signInWithEmail", e);
3498
+ return this.applySession("SIGNED_IN", r), r;
3430
3499
  }
3431
3500
  async signUp(e) {
3432
- const t = await this.transport.request("auth.signUp", e);
3433
- return t.kind === "signed_in" && this.applySession("SIGNED_IN", t.session), t;
3501
+ const r = await this.transport.request("auth.signUp", e);
3502
+ return r.kind === "signed_in" && this.applySession("SIGNED_IN", r.session), r;
3434
3503
  }
3435
3504
  async signOut() {
3436
3505
  await this.transport.request("auth.signOut", void 0);
@@ -3444,8 +3513,8 @@ class kr {
3444
3513
  await this.transport.request("auth.sendOtp", e);
3445
3514
  }
3446
3515
  async verifyOtp(e) {
3447
- const t = await this.transport.request("auth.verifyOtp", e);
3448
- return this.applySession(e.type === "recovery" ? "PASSWORD_RECOVERY" : "SIGNED_IN", t), t;
3516
+ const r = await this.transport.request("auth.verifyOtp", e);
3517
+ return this.applySession(e.type === "recovery" ? "PASSWORD_RECOVERY" : "SIGNED_IN", r), r;
3449
3518
  }
3450
3519
  async resendConfirmation(e) {
3451
3520
  await this.transport.request("auth.resendConfirmation", e);
@@ -3471,12 +3540,12 @@ class kr {
3471
3540
  * offscreen-AuthClient'е — content только проксирует. captchaToken и
3472
3541
  * forceNewAnon — pass-through для forward-compat / switch-account flow. */
3473
3542
  async signInAnonymously(e = {}) {
3474
- const t = await this.transport.request("auth.signInAnonymously", {
3543
+ const r = await this.transport.request("auth.signInAnonymously", {
3475
3544
  captchaToken: e.captchaToken,
3476
3545
  userMeta: e.userMeta,
3477
3546
  forceNewAnon: e.forceNewAnon
3478
3547
  });
3479
- return this.applySession("SIGNED_IN", t), t;
3548
+ return this.applySession("SIGNED_IN", r), r;
3480
3549
  }
3481
3550
  /** Текущий access token (lazy-refreshable в offscreen'е). content/popup
3482
3551
  * использует для Bearer'а в внешние fetch'и — ApiGatewayClient в
@@ -3503,13 +3572,13 @@ class kr {
3503
3572
  async signInWithOAuth(e) {
3504
3573
  if (typeof window > "u")
3505
3574
  throw new T("oauth_unavailable", "window is required for OAuth");
3506
- const t = `pw-oauth-pending-${Math.random().toString(36).slice(2, 10)}`, n = window.open("about:blank", t, "width=480,height=640,popup=yes");
3575
+ const r = `pw-oauth-pending-${Math.random().toString(36).slice(2, 10)}`, n = window.open("about:blank", r, "width=480,height=640,popup=yes");
3507
3576
  if (!n)
3508
3577
  throw new T(
3509
3578
  "popup_blocked",
3510
3579
  "browser blocked auth popup — call from a user gesture"
3511
3580
  );
3512
- Sr(n, e.provider);
3581
+ Mr(n, e.provider);
3513
3582
  try {
3514
3583
  const { authorizeUrl: i, state: s } = await this.transport.request("auth.oauthStart", {
3515
3584
  provider: e.provider,
@@ -3517,7 +3586,7 @@ class kr {
3517
3586
  userMeta: e.userMeta
3518
3587
  });
3519
3588
  n.name = `pw-oauth-${s}`, n.location.replace(i), e.onPopupOpened?.();
3520
- const a = await De(n, s), c = await this.transport.request("auth.oauthExchange", { state: s, code: a });
3589
+ const a = await ze(n, s), c = await this.transport.request("auth.oauthExchange", { state: s, code: a });
3521
3590
  return this.applySession("SIGNED_IN", c), c;
3522
3591
  } catch (i) {
3523
3592
  try {
@@ -3530,32 +3599,32 @@ class kr {
3530
3599
  destroy() {
3531
3600
  this.unsubBroadcast?.(), this.unsubBroadcast = null, this.listeners.clear(), this.session = null;
3532
3601
  }
3533
- applySession(e, t) {
3534
- if (!vr(this.session, t)) {
3535
- this.session = t;
3602
+ applySession(e, r) {
3603
+ if (!Ar(this.session, r)) {
3604
+ this.session = r;
3536
3605
  for (const n of [...this.listeners])
3537
3606
  try {
3538
- n(e, t);
3607
+ n(e, r);
3539
3608
  } catch (i) {
3540
3609
  console.warn("[paywall] onAuthChange listener threw", i);
3541
3610
  }
3542
3611
  }
3543
3612
  }
3544
3613
  }
3545
- function vr(r, e) {
3546
- 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;
3614
+ function Ar(t, e) {
3615
+ return t === e ? !0 : !t || !e ? !1 : t.access_token === e.access_token && t.refresh_token === e.refresh_token && t.expires_at === e.expires_at && t.user.id === e.user.id;
3547
3616
  }
3548
- const _r = {
3617
+ const Lr = {
3549
3618
  google: "Google",
3550
3619
  apple: "Apple",
3551
3620
  github: "GitHub",
3552
3621
  facebook: "Facebook"
3553
3622
  };
3554
- function Sr(r, e) {
3555
- const t = _r[e] ?? e;
3623
+ function Mr(t, e) {
3624
+ const r = Lr[e] ?? e;
3556
3625
  try {
3557
- const n = r.document;
3558
- n.title = `Sign in with ${t}`;
3626
+ const n = t.document;
3627
+ n.title = `Sign in with ${r}`;
3559
3628
  const i = n.createElement("style");
3560
3629
  i.textContent = "html,body{margin:0;padding:0;height:100%;font-family:-apple-system,system-ui,sans-serif;background:#fafafa;color:#475569}.pw-oauth-wrap{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:16px}.pw-oauth-spinner{width:36px;height:36px;border:3px solid #e2e8f0;border-top-color:#7c3aed;border-radius:50%;animation:pw-oauth-spin 800ms linear infinite}.pw-oauth-label{font-size:14px;font-weight:500;letter-spacing:-0.01em}@keyframes pw-oauth-spin{to{transform:rotate(360deg)}}", n.head.appendChild(i);
3561
3630
  const s = n.createElement("div");
@@ -3563,23 +3632,23 @@ function Sr(r, e) {
3563
3632
  const a = n.createElement("div");
3564
3633
  a.className = "pw-oauth-spinner";
3565
3634
  const c = n.createElement("div");
3566
- c.className = "pw-oauth-label", c.textContent = `Connecting to ${t}…`, s.appendChild(a), s.appendChild(c), n.body.appendChild(s);
3635
+ c.className = "pw-oauth-label", c.textContent = `Connecting to ${r}…`, s.appendChild(a), s.appendChild(c), n.body.appendChild(s);
3567
3636
  } catch {
3568
3637
  }
3569
3638
  }
3570
- class Cr {
3639
+ class Er {
3571
3640
  constructor(e) {
3572
3641
  this.transport = e;
3573
3642
  }
3574
3643
  /** Отправить событие. Fire-and-forget — не возвращает Promise, не throw'ает.
3575
3644
  * Сетевые/транспортные ошибки логируются в console и не блокируют caller. */
3576
- track(e, t) {
3577
- typeof e != "string" || e.length === 0 || this.transport.request("tracker.track", { name: e, props: t }).catch((n) => {
3645
+ track(e, r) {
3646
+ typeof e != "string" || e.length === 0 || this.transport.request("tracker.track", { name: e, props: r }).catch((n) => {
3578
3647
  console.warn("[paywall] track failed", n);
3579
3648
  });
3580
3649
  }
3581
3650
  }
3582
- class Ir {
3651
+ class Pr {
3583
3652
  constructor(e) {
3584
3653
  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)}`;
3585
3654
  }
@@ -3591,8 +3660,8 @@ class Ir {
3591
3660
  if (this.channel) return this.channel;
3592
3661
  const e = this.factory();
3593
3662
  this.channel = e;
3594
- const t = e.onMessage((i) => this.handleMessage(i)), n = e.onDisconnect(() => this.handleDisconnect());
3595
- return this.channelDisposers = [t, n], this.request("handshake", {
3663
+ const r = e.onMessage((i) => this.handleMessage(i)), n = e.onDisconnect(() => this.handleDisconnect());
3664
+ return this.channelDisposers = [r, n], this.request("handshake", {
3596
3665
  protocolVersion: X,
3597
3666
  clientId: this.clientId
3598
3667
  }).then((i) => {
@@ -3603,17 +3672,17 @@ class Ir {
3603
3672
  }), e;
3604
3673
  }
3605
3674
  handleMessage(e) {
3606
- if (Lr(e)) {
3675
+ if (Br(e)) {
3607
3676
  if (e.type === "response") {
3608
- const t = this.pending.get(e.id);
3609
- if (!t) return;
3610
- this.pending.delete(e.id), t.signal?.removeEventListener("abort", t.abortListener), e.ok ? t.resolve(e.result) : t.reject(qe(e.error));
3677
+ const r = this.pending.get(e.id);
3678
+ if (!r) return;
3679
+ this.pending.delete(e.id), r.signal?.removeEventListener("abort", r.abortListener), e.ok ? r.resolve(e.result) : r.reject(Ne(e.error));
3611
3680
  return;
3612
3681
  }
3613
3682
  if (e.type === "event") {
3614
- const t = this.listeners.get(e.kind);
3615
- if (!t) return;
3616
- for (const n of [...t])
3683
+ const r = this.listeners.get(e.kind);
3684
+ if (!r) return;
3685
+ for (const n of [...r])
3617
3686
  try {
3618
3687
  n(e.payload);
3619
3688
  } catch (i) {
@@ -3623,14 +3692,14 @@ class Ir {
3623
3692
  }
3624
3693
  }
3625
3694
  handleDisconnect() {
3626
- for (const t of this.channelDisposers) t();
3695
+ for (const r of this.channelDisposers) r();
3627
3696
  this.channelDisposers = [], this.channel = null;
3628
3697
  const e = Array.from(this.pending.values());
3629
3698
  this.pending.clear();
3630
- for (const t of e)
3631
- t.signal?.removeEventListener("abort", t.abortListener), t.reject(new Ar());
3699
+ for (const r of e)
3700
+ r.signal?.removeEventListener("abort", r.abortListener), r.reject(new Tr());
3632
3701
  }
3633
- request(e, t, n = {}) {
3702
+ request(e, r, n = {}) {
3634
3703
  if (this.destroyed)
3635
3704
  return Promise.reject(new Error("TransportClient destroyed"));
3636
3705
  if (n.signal?.aborted)
@@ -3655,7 +3724,7 @@ class Ir {
3655
3724
  type: "request",
3656
3725
  id: s,
3657
3726
  kind: e,
3658
- params: t
3727
+ params: r
3659
3728
  };
3660
3729
  try {
3661
3730
  i.send(f);
@@ -3664,10 +3733,10 @@ class Ir {
3664
3733
  }
3665
3734
  });
3666
3735
  }
3667
- on(e, t) {
3736
+ on(e, r) {
3668
3737
  let n = this.listeners.get(e);
3669
3738
  n || (n = /* @__PURE__ */ new Set(), this.listeners.set(e, n));
3670
- const i = t;
3739
+ const i = r;
3671
3740
  return n.add(i), this.ensureChannel(), () => {
3672
3741
  n.delete(i);
3673
3742
  };
@@ -3675,37 +3744,37 @@ class Ir {
3675
3744
  destroy() {
3676
3745
  if (this.destroyed) return;
3677
3746
  this.destroyed = !0;
3678
- for (const t of this.channelDisposers) t();
3747
+ for (const r of this.channelDisposers) r();
3679
3748
  this.channelDisposers = [], this.listeners.clear();
3680
3749
  const e = Array.from(this.pending.values());
3681
3750
  this.pending.clear();
3682
- for (const t of e)
3683
- t.signal?.removeEventListener("abort", t.abortListener), t.reject(new Error("TransportClient destroyed"));
3751
+ for (const r of e)
3752
+ r.signal?.removeEventListener("abort", r.abortListener), r.reject(new Error("TransportClient destroyed"));
3684
3753
  this.channel?.close(), this.channel = null;
3685
3754
  }
3686
3755
  }
3687
- class Ar extends Error {
3756
+ class Tr extends Error {
3688
3757
  constructor() {
3689
3758
  super("Transport channel disconnected mid-request"), this.code = "transport_disconnected", this.name = "TransportDisconnectedError";
3690
3759
  }
3691
3760
  }
3692
- function Lr(r) {
3693
- if (typeof r != "object" || r === null) return !1;
3694
- const e = r.type;
3761
+ function Br(t) {
3762
+ if (typeof t != "object" || t === null) return !1;
3763
+ const e = t.type;
3695
3764
  return e === "request" || e === "response" || e === "event";
3696
3765
  }
3697
3766
  let W = null;
3698
- function Mr() {
3699
- return W || (W = new Ir(() => Ne(Ge)), W);
3767
+ function Or() {
3768
+ return W || (W = new Pr(() => qe(Ge)), W);
3700
3769
  }
3701
- class jr extends ur {
3770
+ class qr extends gr {
3702
3771
  constructor(e) {
3703
- const t = Mr(), n = new xr(t, {
3772
+ const r = Or(), n = new _r(r, {
3704
3773
  paywallId: e.paywallId,
3705
3774
  apiOrigin: e.apiOrigin
3706
3775
  });
3707
3776
  let i;
3708
- e.auth === !0 ? i = new kr(t, {
3777
+ e.auth === !0 ? i = new Ir(r, {
3709
3778
  paywallId: e.paywallId,
3710
3779
  apiOrigin: e.apiOrigin
3711
3780
  }) : e.auth && console.warn(
@@ -3721,7 +3790,7 @@ class jr extends ur {
3721
3790
  // Внутренний EventTracker отключаем — единственный tracker живёт в
3722
3791
  // offscreen'е. Манчиально подписываемся ниже.
3723
3792
  analytics: !1
3724
- }), this.remoteTracker = null, this.trackerUnsubs = [], e.analytics !== !1 && (this.remoteTracker = new Cr(t), this.bindAnalytics());
3793
+ }), this.remoteTracker = null, this.trackerUnsubs = [], e.analytics !== !1 && (this.remoteTracker = new Er(r), this.bindAnalytics());
3725
3794
  }
3726
3795
  /** Зеркало sdk/PaywallUI.initTracker'овских биндингов, но с RemoteEventTracker.
3727
3796
  * Когда @monetize.software/sdk экспоузнет публичный hook для inject'а tracker'а,
@@ -3732,46 +3801,46 @@ class jr extends ur {
3732
3801
  this.on("open", () => e.track("paywall_opened")),
3733
3802
  this.on(
3734
3803
  "ready",
3735
- (t) => e.track("paywall_viewed", {
3736
- is_test_mode: t.settings.is_test_mode,
3737
- prices_count: t.prices.length,
3738
- offers_count: t.offers.length
3804
+ (r) => e.track("paywall_viewed", {
3805
+ is_test_mode: r.settings.is_test_mode,
3806
+ prices_count: r.prices.length,
3807
+ offers_count: r.offers.length
3739
3808
  })
3740
3809
  ),
3741
3810
  this.on(
3742
3811
  "price_selected",
3743
- (t) => e.track("price_selected", { price_id: t.priceId })
3812
+ (r) => e.track("price_selected", { price_id: r.priceId })
3744
3813
  ),
3745
3814
  this.on(
3746
3815
  "checkout_started",
3747
- (t) => e.track("checkout_started", { price_id: t.priceId, acquiring: t.acquiring })
3816
+ (r) => e.track("checkout_started", { price_id: r.priceId, acquiring: r.acquiring })
3748
3817
  ),
3749
3818
  this.on(
3750
3819
  "purchase_completed",
3751
- (t) => e.track("purchase_completed", { price_id: t.priceId, session_id: t.sessionId })
3820
+ (r) => e.track("purchase_completed", { price_id: r.priceId, session_id: r.sessionId })
3752
3821
  ),
3753
- this.on("purchase_failed", (t) => e.track("purchase_failed", { reason: t.reason })),
3822
+ this.on("purchase_failed", (r) => e.track("purchase_failed", { reason: r.reason })),
3754
3823
  this.on("close", () => e.track("paywall_closed")),
3755
3824
  this.on(
3756
3825
  "trial_blocked",
3757
- (t) => e.track("trial_blocked", {
3758
- mode: t.mode,
3759
- ...t.mode === "time" ? { remaining_ms: t.remainingMs, total_ms: t.totalMs } : t.mode === "opens" ? { remaining_actions: t.remainingActions, total_actions: t.totalActions } : {}
3826
+ (r) => e.track("trial_blocked", {
3827
+ mode: r.mode,
3828
+ ...r.mode === "time" ? { remaining_ms: r.remainingMs, total_ms: r.totalMs } : r.mode === "opens" ? { remaining_actions: r.remainingActions, total_actions: r.totalActions } : {}
3760
3829
  })
3761
3830
  ),
3762
3831
  this.on("trial_expired", () => e.track("trial_expired")),
3763
3832
  this.on(
3764
3833
  "visibility_blocked",
3765
- (t) => e.track("visibility_blocked", { reason: t.reason, country: t.country, tier: t.tier })
3834
+ (r) => e.track("visibility_blocked", { reason: r.reason, country: r.country, tier: r.tier })
3766
3835
  ),
3767
- this.on("error", (t) => e.track("error", { code: t.code, message: t.message }))
3836
+ this.on("error", (r) => e.track("error", { code: r.code, message: r.message }))
3768
3837
  );
3769
3838
  }
3770
3839
  /** Прокси через RemoteEventTracker. Hosts могут вызывать paywall.track
3771
3840
  * для произвольных аналитических событий — летит в единственный
3772
3841
  * offscreen-tracker наряду с auto-emit'ами PaywallUI. */
3773
- track(e, t) {
3774
- this.remoteTracker?.track(e, t);
3842
+ track(e, r) {
3843
+ this.remoteTracker?.track(e, r);
3775
3844
  }
3776
3845
  destroy() {
3777
3846
  for (const e of this.trackerUnsubs) e();
@@ -3780,10 +3849,10 @@ class jr extends ur {
3780
3849
  }
3781
3850
  export {
3782
3851
  X as PROTOCOL_VERSION,
3783
- jr as PaywallUI,
3784
- kr as RemoteAuthClient,
3785
- xr as RemoteBillingClient,
3786
- Cr as RemoteEventTracker,
3787
- Mr as getContentTransport
3852
+ qr as PaywallUI,
3853
+ Ir as RemoteAuthClient,
3854
+ _r as RemoteBillingClient,
3855
+ Er as RemoteEventTracker,
3856
+ Or as getContentTransport
3788
3857
  };
3789
3858
  //# sourceMappingURL=content.js.map