PageSourceSearch

https://bonzamusic.com/website/build/assets/cross-IzlYNrKV.js

js bonzamusic.com collected 2026-10-07 10:30:39 UTC 32,413 bytes, 784 lines download raw bytes

1import { r as reactExports, j as jsxRuntimeExports, cd as formatPaddlePrice, t as PrimaryButton, L } from "./web-DMpKYKrj.js";
2import { A as AppleLogo } from "./appleLogo-BQgcP_xw.js";
3import { b as resolveActivePlanHandle, c as countPendingGrantsByPlanId, d as resolvePlanCtaLabel } from "./Plan-C0qlSs5_.js";
4import { C as CloseButton } from "./CloseButton-CfIymuTD.js";
5function DismissibleNotice({
6  title,
7  description,
8  className
9}) {
10  const [dismissed, setDismissed] = reactExports.useState(false);
11  if (dismissed) return null;
12  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
13    "div",
14    {
15      className: `
16                flex items-center justify-between gap-4 rounded-[24px]
17                bg-bonza-pale-t-7 py-3 pl-6 pr-2
18
19                ${className}
20            `,
21      children: [
22        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex grow flex-col items-center gap-0.5 text-center", children: [
23          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[15px]", children: title }),
24          description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-bonza-pale-t-70", children: description })
25        ] }),
26        /* @__PURE__ */ jsxRuntimeExports.jsx(
27          CloseButton,
28          {
29            closeCallback: () => setDismissed(true),
30            size: 30,
31            className: "shrink-0 p-1"
32          }
33        )
34      ]
35    }
36  );
37}
38function Tick(props) {
39  return /* @__PURE__ */ jsxRuntimeExports.jsx(
40    "svg",
41    {
42      viewBox: "0 0 18 14",
43      fill: "none",
44      xmlns: "http://www.w3.org/2000/svg",
45      ...props,
46      children: /* @__PURE__ */ jsxRuntimeExports.jsx(
47        "path",
48        {
49          d: "M1 7.79452L5.60274 12.3973L17 1",
50          stroke: "currentColor",
51          strokeWidth: "2",
52          strokeLinecap: "round",
53          strokeLinejoin: "round"
54        }
55      )
56    }
57  );
58}
59function PricingCard({
60  plan,
61  planOverride,
62  billingCycle = "once",
63  purchaseCallback,
64  buttonText,
65  showMacOnly,
66  className,
67  trialKeyPoint,
68  current,
69  disablePurchase,
70  inactiveGrantCount
71}) {
72  var _a, _b, _c, _d, _e, _f, _g, _h, _i;
73  if (!plan && !planOverride) {
74    return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, {});
75  }
76  const forWhoTitle = (planOverride == null ? void 0 : planOverride.forWhoTitle) ?? ((_a = plan == null ? void 0 : plan.metadata) == null ? void 0 : _a.display_forWhoTitle);
77  const currencySymbol = "£";
78  const colour = (planOverride == null ? void 0 : planOverride.colour) ?? ((_b = plan == null ? void 0 : plan.metadata) == null ? void 0 : _b.display_colour) ?? "#ffffff";
79  const name = (planOverride == null ? void 0 : planOverride.name) ?? ((_c = plan == null ? void 0 : plan.metadata) == null ? void 0 : _c.display_name);
80  const priceObj = plan == null ? void 0 : plan.prices.find(
81    (price2) => {
82      var _a2;
83      return billingCycle !== "once" ? ((_a2 = price2.billing_cycle) == null ? void 0 : _a2.interval) === billingCycle : price2.billing_cycle === null;
84    }
85  );
86  if (!priceObj && !(planOverride == null ? void 0 : planOverride.price)) {
87    console.error(
88      "No price found for",
89      plan == null ? void 0 : plan.handle,
90      "with billing cycle:",
91      billingCycle,
92      "\n"
93    );
94  }
95  const priceAmount = priceObj ? Number(priceObj.unit_price.amount) / 100 : null;
96  const price = (planOverride == null ? void 0 : planOverride.price) ?? formatPaddlePrice(priceObj);
97  const title = (planOverride == null ? void 0 : planOverride.title) ?? ((_d = plan == null ? void 0 : plan.metadata) == null ? void 0 : _d.display_title);
98  const subTitle = (planOverride == null ? void 0 : planOverride.subTitle) ?? (((_e = priceObj == null ? void 0 : priceObj.custom_data) == null ? void 0 : _e.display_subtitle) || ((_f = plan == null ? void 0 : plan.metadata) == null ? void 0 : _f.display_subtitle) || (billingCycle === "month" ? "Per month, cancel anytime" : billingCycle === "year" ? `Per month, ${currencySymbol}${priceAmount} billed yearly` : null));
99  const keyPointBlock = (planOverride == null ? void 0 : planOverride.keyPointBlock) ?? ((_g = plan == null ? void 0 : plan.metadata) == null ? void 0 : _g.display_key_block);
100  const keyPoints = (planOverride == null ? void 0 : planOverride.keyPoints) ?? ((_h = plan == null ? void 0 : plan.metadata) == null ? void 0 : _h.display_key_points);
101  const keyExclusions = (planOverride == null ? void 0 : planOverride.keyExclusions) ?? ((_i = plan == null ? void 0 : plan.metadata) == null ? void 0 : _i.display_key_exclusions);
102  const paddlePriceId = (priceObj == null ? void 0 : priceObj.paddle_price_id) ?? void 0;
103  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
104    "div",
105    {
106      className: `
107                    relative flex min-h-[527px] min-w-[285px] max-w-[330px] grow
108                    flex-col items-stretch justify-between rounded-[40px] border
109                    border-bonza-pale-t-7 bg-bonza-dark
110
111                    ${className}
112                `,
113      children: [
114        /* @__PURE__ */ jsxRuntimeExports.jsx(
115          "div",
116          {
117            className: `mx-[40px] h-0.5`,
118            style: { backgroundColor: colour }
119          }
120        ),
121        /* @__PURE__ */ jsxRuntimeExports.jsxs(
122          "div",
123          {
124            className: `
125                        flex w-full grow flex-col items-stretch justify-start
126                        gap-4 px-[0px] py-4
127                    `,
128            children: [
129              /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col mt-4", children: [
130                name && /* @__PURE__ */ jsxRuntimeExports.jsx(
131                  "span",
132                  {
133                    className: `text-center text-[25px]`,
134                    style: { color: colour },
135                    children: name
136                  }
137                ),
138                forWhoTitle && /* @__PURE__ */ jsxRuntimeExports.jsx(
139                  "span",
140                  {
141                    className: `text-center text-[15px] text-bonza-pale-t-70`,
142                    children: forWhoTitle
143                  }
144                )
145              ] }),
146              /* @__PURE__ */ jsxRuntimeExports.jsxs(
147                "div",
148                {
149                  className: `
150                            flex grow flex-col items-stretch justify-between
151                            gap-8
152                        `,
153                  children: [
154                    /* @__PURE__ */ jsxRuntimeExports.jsxs(
155                      "div",
156                      {
157                        className: `
158                                mx-4 flex min-h-[105px] flex-col items-center
159                                justify-start gap-1
160                            `,
161                        children: [
162                          current && /* @__PURE__ */ jsxRuntimeExports.jsx(
163                            "span",
164                            {
165                              className: `
166                                    mb-2 rounded-full border px-4 py-1
167                                    text-[12px] text-bonza-pale
168                                `,
169                              style: { borderColor: colour },
170                              children: "Currently active"
171                            }
172                          ),
173                          price && /* @__PURE__ */ jsxRuntimeExports.jsx(
174                            "div",
175                            {
176                              className: `
177                                        flex flex-col items-center
178                                        justify-center gap-0
179                                    `,
180                              children: /* @__PURE__ */ jsxRuntimeExports.jsx(
181                                "span",
182                                {
183                                  className: `
184                                            -mb-2 items-end text-nowrap p-0
185                                            text-center text-[40px]
186                                            leading-tight
187                                        `,
188                                  children: price.split(".").map(
189                                    (part, index) => index === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: part }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-[25px]", children: [
190                                      ".",
191                                      part
192                                    ] })
193                                  )
194                                }
195                              )
196                            }
197                          ),
198                          title && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `text-center text-[25px]`, children: title }),
199                          subTitle && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col", children: subTitle.split("\n").map((string, index) => /* @__PURE__ */ jsxRuntimeExports.jsx(
200                            "span",
201                            {
202                              className: `
203                                                    text-center text-[15px]
204                                                    text-bonza-pale-t-70
205                                                `,
206                              children: string
207                            },
208                            index
209                          )) }),
210                          showMacOnly ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mt-4", children: [
211                            /* @__PURE__ */ jsxRuntimeExports.jsx(AppleLogo, { className: "mb-1 size-4 min-w-6" }),
212                            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[15px]", children: "Available for macOS" })
213                          ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex gap-4", children: [
214                            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mt-4", children: [
215                              /* @__PURE__ */ jsxRuntimeExports.jsx(
216                                AppleLogo,
217                                {
218                                  className: "mb-1 size-6 min-w-6"
219                                }
220                              ),
221                              /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[15px]", children: "macOS" })
222                            ] }),
223                            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mt-4", children: [
224                              /* @__PURE__ */ jsxRuntimeExports.jsxs(
225                                "div",
226                                {
227                                  className: "size-4 grid grid-cols-[1fr_1fr] gap-[1px]",
228                                  children: [
229                                    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-bonza-pale" }),
230                                    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-bonza-pale" }),
231                                    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-bonza-pale" }),
232                                    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-bonza-pale" })
233                                  ]
234                                }
235                              ),
236                              /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[15px]", children: "Windows" })
237                            ] })
238                          ] })
239                        ]
240                      }
241                    ),
242                    /* @__PURE__ */ jsxRuntimeExports.jsxs(
243                      "ul",
244                      {
245                        className: `
246                                text-decoration-none ml-8 mr-6 flex
247                                max-w-[250px] grow flex-col items-stretch gap-2
248                                self-center text-left
249                            `,
250                        children: [
251                          keyPointBlock && /* @__PURE__ */ jsxRuntimeExports.jsx("li", { className: "mb-2 text-center", children: keyPointBlock }),
252                          trialKeyPoint && /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { className: "flex items-center gap-4", children: [
253                            /* @__PURE__ */ jsxRuntimeExports.jsx(
254                              Tick,
255                              {
256                                className: `
257                                            size-5 min-w-5 text-bonza-pale
258                                        `,
259                                style: { color: colour }
260                              }
261                            ),
262                            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: trialKeyPoint })
263                          ] }),
264                          keyPoints == null ? void 0 : keyPoints.map((item, index) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
265                            "li",
266                            {
267                              className: "flex items-center gap-4",
268                              children: [
269                                /* @__PURE__ */ jsxRuntimeExports.jsx(
270                                  Tick,
271                                  {
272                                    className: `
273                                            size-5 min-w-5 text-bonza-pale
274                                        `,
275                                    style: { color: colour }
276                                  }
277                                ),
278                                /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: item })
279                              ]
280                            },
281                            index
282                          )),
283                          keyExclusions == null ? void 0 : keyExclusions.map((item, index) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
284                            "li",
285                            {
286                              className: "flex items-center gap-4",
287                              children: [
288                                /* @__PURE__ */ jsxRuntimeExports.jsx(
289                                  Plus,
290                                  {
291                                    className: `
292                                            size-4 min-w-4 text-bonza-pale
293                                        `,
294                                    style: { color: colour }
295                                  }
296                                ),
297                                /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: item })
298                              ]
299                            },
300                            index
301                          ))
302                        ]
303                      }
304                    )
305                  ]
306                }
307              )
308            ]
309          }
310        ),
311        purchaseCallback && /* @__PURE__ */ jsxRuntimeExports.jsxs(
312          "div",
313          {
314            className: "flex flex-col items-center justify-center gap-2 py-8",
315            children: [
316              /* @__PURE__ */ jsxRuntimeExports.jsx(
317                PrimaryButton,
318                {
319                  onClick: () => purchaseCallback(paddlePriceId),
320                  disabled: disablePurchase ?? current,
321                  className: "w-[205px] py-4 rounded-full",
322                  children: buttonText ?? "Continue"
323                }
324              ),
325              !!inactiveGrantCount && /* @__PURE__ */ jsxRuntimeExports.jsx(
326                "span",
327                {
328                  className: "text-center text-[13px] text-bonza-pale-t-70",
329                  children: `You have ${inactiveGrantCount} inactive ${inactiveGrantCount === 1 ? "pass" : "passes"} for this plan`
330                }
331              )
332            ]
333          }
334        )
335      ]
336    }
337  );
338}
339function formatPaygDuration(hours) {
340  if (!hours) return "Session pass";
341  if (hours % 720 === 0) {
342    const months = hours / 720;
343    return `${months} month${months > 1 ? "s" : ""} access`;
344  }
345  if (hours % 168 === 0) {
346    const weeks = hours / 168;
347    return `${weeks} week${weeks > 1 ? "s" : ""} access`;
348  }
349  return `${hours} hour${hours > 1 ? "s" : ""} access`;
350}
351function formatTimeRemaining(expiresAt) {
352  if (!expiresAt) return void 0;
353  const hoursRemaining = Math.max(
354    0,
355    Math.round(
356      (new Date(expiresAt).getTime() - Date.now()) / (60 * 60 * 1e3)
357    )
358  );
359  if (!hoursRemaining) return void 0;
360  return formatPaygDuration(hoursRemaining).replace(/ access$/, "");
361}
362function formatTrialKeyPoint(trialEligible, trialDays) {
363  if (!trialEligible || !trialDays) return void 0;
364  return `${trialDays}-day free trial`;
365}
366function Prices({
367  plans,
368  user,
369  selectPlanCallback,
370  selectContactSalesCallback,
371  showGuestPlan,
372  className,
373  innerPadding = true,
374  trialEligible,
375  trialDays,
376  contactSalesSent,
377  currentPlan,
378  activePlanGrant,
379  planGrants
380}) {
381  const plansFormatted = reactExports.useMemo(
382    () => Object.fromEntries(plans.map((plan) => [plan.handle, plan])),
383    [plans]
384  );
385  const [billingCycle, setBillingCycle] = reactExports.useState("year");
386  const [currencyCode, setCurrencyCode] = reactExports.useState("GBP");
387  const paygoPlan = plansFormatted.paygo;
388  const trialKeyPoint = formatTrialKeyPoint(trialEligible, trialDays);
389  const activePlanHandle = reactExports.useMemo(
390    () => resolveActivePlanHandle(currentPlan, activePlanGrant),
391    [currentPlan, activePlanGrant]
392  );
393  const inactiveGrantCountByPlanId = reactExports.useMemo(
394    () => countPendingGrantsByPlanId(planGrants),
395    [planGrants]
396  );
397  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
398    "div",
399    {
400      className: `
401                flex w-full flex-col items-center justify-center
402                gap-8
403
404                ${className}
405            `,
406      children: [
407        /* @__PURE__ */ jsxRuntimeExports.jsxs(
408          "div",
409          {
410            className: `
411                            z-10 flex flex-row flex-nowrap text-nowrap
412                            rounded-full bg-bonza-pale-t-7 p-1 text-[17px]
413
414                            md:gap-2 md:p-2 md:text-[20px]
415                        `,
416            children: [
417              /* @__PURE__ */ jsxRuntimeExports.jsx(
418                L,
419                {
420                  className: `
421                        z-20 rounded-full px-8 py-2
422
423                        md:px-10 md:py-3
424
425                        ${billingCycle === "month" ? `bg-bonza-primary` : ""}
426                    `,
427                  onClick: () => setBillingCycle("month"),
428                  children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Monthly" })
429                }
430              ),
431              /* @__PURE__ */ jsxRuntimeExports.jsx(
432                L,
433                {
434                  className: `
435                                z-20 rounded-full py-2 pl-8 pr-4
436
437                                md:py-3
438
439                                ${billingCycle === "year" ? `bg-bonza-primary` : ""}
440                            `,
441                  onClick: () => setBillingCycle("year"),
442                  children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
443                    /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Yearly" }),
444                    /* @__PURE__ */ jsxRuntimeExports.jsx(
445                      "div",
446                      {
447                        className: `
448                                        my-1 rounded-full bg-bonza-primary px-3
449                                        text-[15px]
450
451                                        md:text-[20px]
452
453                                        ${billingCycle === "year" ? `text-bonza-primary` : ""}
454                                    `,
455                        style: billingCycle === "year" ? { backgroundColor: "white" } : {},
456                        children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "2 months free" })
457                      }
458                    )
459                  ] })
460                }
461              )
462            ]
463          }
464        ),
465        activePlanGrant && /* @__PURE__ */ jsxRuntimeExports.jsx(
466          DismissibleNotice,
467          {
468            title: "Time remaining on your current plan will be saved",
469            description: `You have ${formatTimeRemaining(activePlanGrant.expires_at) ?? "time"} left on your current plan, it will be saved and resume once your new plan ends.`,
470            className: "w-full"
471          }
472        ),
473        /* @__PURE__ */ jsxRuntimeExports.jsxs(
474          "div",
475          {
476            className: `
477                    ${innerPadding ? `px-main py-main` : ""} z-10 flex w-full grow flex-row
478                    flex-wrap items-stretch justify-center gap-x-4
479                    gap-y-8
480                `,
481            children: [
482              showGuestPlan && /* @__PURE__ */ jsxRuntimeExports.jsx(
483                PricingCard,
484                {
485                  planOverride: {
486                    name: "Guest Account",
487                    colour: "#ffffff",
488                    price: "Guest",
489                    subTitle: "Join your bandmates",
490                    keyPoints: [
491                      "Join sessions",
492                      "Access Bonza when invited to a session"
493                    ],
494                    keyExclusions: ["Create session"],
495                    forWhoTitle: "Join sessions for free"
496                  },
497                  purchaseCallback: selectPlanCallback,
498                  buttonText: user ? "Download" : "Sign up",
499                  showMacOnly: true,
500                  className: "z-10"
501                }
502              ),
503              paygoPlan == null ? void 0 : paygoPlan.prices.map((price) => {
504                var _a;
505                return /* @__PURE__ */ jsxRuntimeExports.jsx(
506                  PricingCard,
507                  {
508                    plan: { ...paygoPlan, prices: [price] },
509                    planOverride: {
510                      subTitle: formatPaygDuration(
511                        (_a = price.custom_data) == null ? void 0 : _a.payg_duration_hours
512                      )
513                    },
514                    purchaseCallback: selectPlanCallback,
515                    buttonText: user ? "Continue" : "Sign up",
516                    showMacOnly: true,
517                    className: "z-10",
518                    inactiveGrantCount: inactiveGrantCountByPlanId[paygoPlan.id],
519                    current: activePlanHandle === paygoPlan.handle,
520                    disablePurchase: false
521                  },
522                  price.paddle_price_id
523                );
524              }),
525              plansFormatted.musician && /* @__PURE__ */ jsxRuntimeExports.jsx(
526                BillingCyclePricingCard,
527                {
528                  plan: plansFormatted.musician,
529                  selectedBillingCycle: billingCycle,
530                  purchaseCallback: selectPlanCallback,
531                  user,
532                  trialEligible,
533                  trialKeyPoint,
534                  currentPlan,
535                  activePlanHandle,
536                  inactiveGrantCountByPlanId
537                }
538              ),
539              plansFormatted.artist && /* @__PURE__ */ jsxRuntimeExports.jsx(
540                BillingCyclePricingCard,
541                {
542                  plan: plansFormatted.artist,
543                  selectedBillingCycle: billingCycle,
544                  purchaseCallback: selectPlanCallback,
545                  user,
546                  trialEligible,
547                  trialKeyPoint,
548                  currentPlan,
549                  activePlanHandle,
550                  inactiveGrantCountByPlanId
551                }
552              ),
553              plansFormatted.educator && /* @__PURE__ */ jsxRuntimeExports.jsx(
554                BillingCyclePricingCard,
555                {
556                  plan: plansFormatted.educator,
557                  selectedBillingCycle: billingCycle,
558                  purchaseCallback: selectPlanCallback,
559                  user,
560                  trialEligible,
561                  trialKeyPoint,
562                  currentPlan,
563                  activePlanHandle,
564                  inactiveGrantCountByPlanId
565                }
566              ),
567              selectContactSalesCallback && /* @__PURE__ */ jsxRuntimeExports.jsx(
568                PricingCard,
569                {
570                  planOverride: {
571                    name: "Enterprise",
572                    colour: "#E8564B",
573                    price: `Let's talk`,
574                    subTitle: contactSalesSent ? "Contact form sent" : "For institutes and studio partners",
575                    keyPointBlock: "Our most scalable and secure solution, fully customizable to suit your needs.",
576                    forWhoTitle: "For organisations"
577                  },
578                  purchaseCallback: () => {
579                    selectContactSalesCallback();
580                  },
581                  buttonText: contactSalesSent ? "Send another" : "Contact us"
582                }
583              )
584            ]
585          }
586        ),
587        user && /* @__PURE__ */ jsxRuntimeExports.jsx(
588          SpecialOffers,
589          {
590            currencySymbol: "£",
591            selectPlanCallback,
592            user,
593            plan: plansFormatted.founder
594          }
595        )
596      ]
597    }
598  );
599}
600const BillingCyclePricingCard = ({
601  plan,
602  selectedBillingCycle,
603  purchaseCallback,
604  user,
605  trialEligible,
606  trialKeyPoint,
607  currentPlan,
608  activePlanHandle,
609  inactiveGrantCountByPlanId
610}) => {
611  const isCardlessTrialOfThisPlan = (currentPlan == null ? void 0 : currentPlan.kind) === "trial" && currentPlan.handle === plan.handle;
612  const isActive = !isCardlessTrialOfThisPlan && !!activePlanHandle && activePlanHandle === plan.handle;
613  return /* @__PURE__ */ jsxRuntimeExports.jsx(
614    PricingCard,
615    {
616      plan,
617      billingCycle: selectedBillingCycle,
618      purchaseCallback,
619      buttonText: isCardlessTrialOfThisPlan ? "Add card" : resolvePlanCtaLabel(plan.handle, user, trialEligible),
620      showMacOnly: true,
621      trialKeyPoint,
622      current: isActive,
623      inactiveGrantCount: inactiveGrantCountByPlanId == null ? void 0 : inactiveGrantCountByPlanId[plan.id]
624    }
625  );
626};
627const SpecialOffers = ({
628  currencySymbol,
629  selectPlanCallback,
630  user,
631  plan
632}) => {
633  if (!plan) return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, {});
634  const prices = plan.prices;
635  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
636    "div",
637    {
638      className: `
639                relative relative flex h-full min-h-[100px] w-full flex-row
640                items-stretch justify-start rounded-[40px] border
641                border-bonza-pale-t-7 bg-bonza-dark
642            `,
643      children: [
644        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `my-[40px] w-1 bg-bonza-primary` }),
645        /* @__PURE__ */ jsxRuntimeExports.jsxs(
646          "div",
647          {
648            className: `
649                    px-main my-[40px] flex w-full flex-col items-center
650                    justify-between gap-8
651
652                    md:flex-row
653                `,
654            children: [
655              /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-start gap-4", children: [
656                /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-start gap-1", children: [
657                  /* @__PURE__ */ jsxRuntimeExports.jsx(
658                    "span",
659                    {
660                      className: `
661                                rounded-full bg-bonza-primary px-3 text-[12px]
662                            `,
663                      children: "Beta users only"
664                    }
665                  ),
666                  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[25px]", children: "Beta testers offer" }),
667                  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[15px] text-bonza-pale-t-70", children: "Have you been a member of the beta testing program? Get a lifetime discount!" })
668                ] }),
669                /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `text-[19px]`, children: "Hurry! This offer expires on 31st March 2026" })
670              ] }),
671              /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-row items-stretch", children: prices.map((priceItem, index) => {
672                var _a, _b, _c, _d;
673                const priceAmount = priceItem ? Number(priceItem.unit_price.amount) / 100 : null;
674                const price = priceAmount ? `${currencySymbol}${priceAmount}` : null;
675                const subtitle = ((_a = priceItem == null ? void 0 : priceItem.custom_data) == null ? void 0 : _a.display_subtitle) || ((_b = plan == null ? void 0 : plan.metadata) == null ? void 0 : _b.display_subtitle) || (((_c = priceItem.billing_cycle) == null ? void 0 : _c.interval) === "month" ? "Per month\nlifetime discount" : ((_d = priceItem.billing_cycle) == null ? void 0 : _d.interval) === "year" ? `Per year
676lifetime discount` : null);
677                return /* @__PURE__ */ jsxRuntimeExports.jsx(
678                  SpecialOfferItem,
679                  {
680                    price: price ?? void 0,
681                    currencySymbol,
682                    selectPlanCallback: () => selectPlanCallback(
683                      priceItem.paddle_price_id
684                    ),
685                    subtitle: subtitle ?? void 0
686                  },
687                  index
688                );
689              }) })
690            ]
691          }
692        )
693      ]
694    }
695  );
696};
697const SpecialOfferItem = ({
698  selectPlanCallback,
699  className,
700  price,
701  subtitle
702}) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
703  "div",
704  {
705    className: `
706            flex flex-col items-center justify-between gap-2 px-4
707
708            ${className}
709        `,
710    children: [
711      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `flex grow flex-col items-center justify-start`, children: [
712        price && /* @__PURE__ */ jsxRuntimeExports.jsx(
713          "span",
714          {
715            className: `
716                        -mb-2 items-end p-0 text-center text-[40px]
717                        leading-tight
718                    `,
719            children: price
720          }
721        ),
722        subtitle && /* @__PURE__ */ jsxRuntimeExports.jsx(
723          "div",
724          {
725            className: `
726                        flex max-w-[250px] flex-col items-center justify-center
727                        gap-1 text-center text-bonza-pale-t-70
728                    `,
729            children: subtitle.split("\n").map((string, index) => /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "m-0 p-0", children: string }, index))
730          }
731        )
732      ] }),
733      /* @__PURE__ */ jsxRuntimeExports.jsx(
734        PrimaryButton,
735        {
736          onClick: () => {
737            selectPlanCallback();
738          },
739          children: "Continue"
740        }
741      )
742    ]
743  }
744);
745function Plus(props) {
746  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
747    "svg",
748    {
749      viewBox: "0 0 17 16",
750      fill: "currentColor",
751      stroke: "currentColor",
752      xmlns: "http://www.w3.org/2000/svg",
753      ...props,
754      children: [
755        /* @__PURE__ */ jsxRuntimeExports.jsx(
756          "path",
757          {
758            d: "M1.91406 1.41406L15.0858 14.5858",
759            strokeWidth: "2",
760            strokeLinecap: "round",
761            strokeLinejoin: "round"
762          }
763        ),
764        /* @__PURE__ */ jsxRuntimeExports.jsx(
765          "path",
766          {
767            d: "M15.0858 1.41406L1.91406 14.5858",
768            strokeWidth: "2",
769            strokeLinecap: "round",
770            strokeLinejoin: "round"
771          }
772        )
773      ]
774    }
775  );
776}
777export {
778  Prices as P,
779  Tick as T,
780  PricingCard as a,
781  formatPaygDuration as b,
782  formatTimeRemaining as f
783};
784//# sourceMappingURL=cross-IzlYNrKV.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.